brcm2708: update against latest rpi-3.10.y branch
[openwrt/staging/luka.git] / target / linux / brcm2708 / patches-3.10 / 0097-wifi-Update-to-newer-rtl8192cu-driver-release.patch
1 From f74f54da3639f0dc1fb203c7d5b987b9b9fb0bb4 Mon Sep 17 00:00:00 2001
2 From: popcornmix <popcornmix@gmail.com>
3 Date: Sat, 9 Nov 2013 12:17:56 +0000
4 Subject: [PATCH 097/174] wifi: Update to newer rtl8192cu driver release
5
6 ---
7 drivers/net/wireless/rtl8192cu/Kconfig | 4 +-
8 drivers/net/wireless/rtl8192cu/Makefile | 343 +-
9 drivers/net/wireless/rtl8192cu/clean | 4 -
10 .../net/wireless/rtl8192cu/core/efuse/rtw_efuse.c | 68 +-
11 drivers/net/wireless/rtl8192cu/core/rtw_ap.c | 2940 ++
12 drivers/net/wireless/rtl8192cu/core/rtw_br_ext.c | 25 +-
13 drivers/net/wireless/rtl8192cu/core/rtw_cmd.c | 723 +-
14 drivers/net/wireless/rtl8192cu/core/rtw_debug.c | 672 +-
15 drivers/net/wireless/rtl8192cu/core/rtw_eeprom.c | 3 +-
16 .../net/wireless/rtl8192cu/core/rtw_ieee80211.c | 485 +-
17 drivers/net/wireless/rtl8192cu/core/rtw_io.c | 276 +-
18 .../net/wireless/rtl8192cu/core/rtw_ioctl_query.c | 3 +-
19 .../net/wireless/rtl8192cu/core/rtw_ioctl_rtl.c | 3 +-
20 .../net/wireless/rtl8192cu/core/rtw_ioctl_set.c | 374 +-
21 drivers/net/wireless/rtl8192cu/core/rtw_iol.c | 15 +-
22 drivers/net/wireless/rtl8192cu/core/rtw_mlme.c | 966 +-
23 drivers/net/wireless/rtl8192cu/core/rtw_mlme_ext.c | 11414 ++++---
24 drivers/net/wireless/rtl8192cu/core/rtw_mp.c | 111 +-
25 drivers/net/wireless/rtl8192cu/core/rtw_mp_ioctl.c | 313 +-
26 drivers/net/wireless/rtl8192cu/core/rtw_p2p.c | 3044 +-
27 drivers/net/wireless/rtl8192cu/core/rtw_pwrctrl.c | 1319 +-
28 drivers/net/wireless/rtl8192cu/core/rtw_recv.c | 2328 +-
29 drivers/net/wireless/rtl8192cu/core/rtw_rf.c | 3 +-
30 drivers/net/wireless/rtl8192cu/core/rtw_security.c | 420 +-
31 drivers/net/wireless/rtl8192cu/core/rtw_sreset.c | 352 +
32 drivers/net/wireless/rtl8192cu/core/rtw_sta_mgt.c | 232 +-
33 drivers/net/wireless/rtl8192cu/core/rtw_tdls.c | 2941 ++
34 .../net/wireless/rtl8192cu/core/rtw_wlan_util.c | 663 +-
35 drivers/net/wireless/rtl8192cu/core/rtw_xmit.c | 2161 +-
36 drivers/net/wireless/rtl8192cu/hal/HalPwrSeqCmd.c | 177 +
37 drivers/net/wireless/rtl8192cu/hal/dm.c | 314 +
38 drivers/net/wireless/rtl8192cu/hal/dm.h | 30 +
39 drivers/net/wireless/rtl8192cu/hal/hal_com.c | 371 +
40 drivers/net/wireless/rtl8192cu/hal/hal_init.c | 120 -
41 drivers/net/wireless/rtl8192cu/hal/hal_intf.c | 546 +
42 .../wireless/rtl8192cu/hal/rtl8192c/rtl8192c_cmd.c | 504 +-
43 .../wireless/rtl8192cu/hal/rtl8192c/rtl8192c_dm.c | 608 +-
44 .../rtl8192cu/hal/rtl8192c/rtl8192c_hal_init.c | 410 +-
45 .../wireless/rtl8192cu/hal/rtl8192c/rtl8192c_mp.c | 31 +-
46 .../rtl8192cu/hal/rtl8192c/rtl8192c_phycfg.c | 1726 +-
47 .../rtl8192cu/hal/rtl8192c/rtl8192c_rf6052.c | 154 +-
48 .../rtl8192cu/hal/rtl8192c/rtl8192c_rxdesc.c | 121 +-
49 .../rtl8192cu/hal/rtl8192c/rtl8192c_sreset.c | 257 +-
50 .../rtl8192cu/hal/rtl8192c/rtl8192c_xmit.c | 63 +
51 .../rtl8192cu/hal/rtl8192c/usb/Hal8192CUHWImg.c | 11548 ++++---
52 .../rtl8192cu/hal/rtl8192c/usb/rtl8192cu_led.c | 403 +-
53 .../rtl8192cu/hal/rtl8192c/usb/rtl8192cu_recv.c | 159 +-
54 .../rtl8192cu/hal/rtl8192c/usb/rtl8192cu_xmit.c | 470 +-
55 .../rtl8192cu/hal/rtl8192c/usb/usb_halinit.c | 1758 +-
56 .../rtl8192cu/hal/rtl8192c/usb/usb_ops_ce.c | 5 +-
57 .../rtl8192cu/hal/rtl8192c/usb/usb_ops_linux.c | 1291 +-
58 .../rtl8192cu/hal/rtl8192c/usb/usb_ops_xp.c | 7 +-
59 drivers/net/wireless/rtl8192cu/ifcfg-wlan0 | 0
60 .../wireless/rtl8192cu/include/Hal8192CEHWImg.h | 16 +-
61 .../wireless/rtl8192cu/include/Hal8192CPhyCfg.h | 35 +-
62 .../wireless/rtl8192cu/include/Hal8192CPhyReg.h | 21 +
63 .../wireless/rtl8192cu/include/Hal8192CUHWImg.h | 26 +-
64 .../wireless/rtl8192cu/include/Hal8192DEHWImg.h | 82 +-
65 .../rtl8192cu/include/Hal8192DETestHWImg.h | 54 -
66 .../wireless/rtl8192cu/include/Hal8192DPhyCfg.h | 26 +-
67 .../wireless/rtl8192cu/include/Hal8192DUHWImg.h | 4 +-
68 .../rtl8192cu/include/Hal8192DUHWImg_wowlan.h | 2 +-
69 .../rtl8192cu/include/Hal8192DUTestHWImg.h | 54 -
70 .../net/wireless/rtl8192cu/include/HalPwrSeqCmd.h | 137 +
71 drivers/net/wireless/rtl8192cu/include/autoconf.h | 114 +-
72 .../net/wireless/rtl8192cu/include/basic_types.h | 45 +
73 .../wireless/rtl8192cu/include/byteorder/generic.h | 9 +-
74 .../wireless/rtl8192cu/include/byteorder/swab.h | 15 +-
75 .../wireless/rtl8192cu/include/byteorder/swabb.h | 3 +-
76 drivers/net/wireless/rtl8192cu/include/drv_conf.h | 2 +-
77 drivers/net/wireless/rtl8192cu/include/drv_types.h | 305 +-
78 .../wireless/rtl8192cu/include/drv_types_sdio.h | 70 +
79 drivers/net/wireless/rtl8192cu/include/farray.h | 31480 -------------------
80 drivers/net/wireless/rtl8192cu/include/hal_com.h | 146 +
81 drivers/net/wireless/rtl8192cu/include/hal_init.h | 305 -
82 drivers/net/wireless/rtl8192cu/include/hal_intf.h | 432 +
83 drivers/net/wireless/rtl8192cu/include/ieee80211.h | 389 +-
84 drivers/net/wireless/rtl8192cu/include/if_ether.h | 30 +-
85 .../wireless/rtl8192cu/include/ioctl_cfg80211.h | 105 +-
86 drivers/net/wireless/rtl8192cu/include/ip.h | 27 +-
87 .../wireless/rtl8192cu/include/linux/wireless.h | 90 +
88 .../net/wireless/rtl8192cu/include/mlme_osdep.h | 4 -
89 .../net/wireless/rtl8192cu/include/osdep_intf.h | 61 +-
90 .../net/wireless/rtl8192cu/include/osdep_service.h | 1096 +-
91 drivers/net/wireless/rtl8192cu/include/pci_ops.h | 2 +
92 .../net/wireless/rtl8192cu/include/rtl8192c_cmd.h | 50 +-
93 .../net/wireless/rtl8192cu/include/rtl8192c_dm.h | 140 +-
94 .../wireless/rtl8192cu/include/rtl8192c_event.h | 3 +-
95 .../net/wireless/rtl8192cu/include/rtl8192c_hal.h | 110 +-
96 .../net/wireless/rtl8192cu/include/rtl8192c_led.h | 3 +-
97 .../net/wireless/rtl8192cu/include/rtl8192c_recv.h | 23 +-
98 .../net/wireless/rtl8192cu/include/rtl8192c_rf.h | 3 +-
99 .../net/wireless/rtl8192cu/include/rtl8192c_spec.h | 66 +-
100 .../wireless/rtl8192cu/include/rtl8192c_sreset.h | 26 +-
101 .../net/wireless/rtl8192cu/include/rtl8192c_xmit.h | 68 +-
102 .../net/wireless/rtl8192cu/include/rtl8192d_cmd.h | 17 +-
103 .../net/wireless/rtl8192cu/include/rtl8192d_dm.h | 52 +-
104 .../net/wireless/rtl8192cu/include/rtl8192d_hal.h | 171 +-
105 .../net/wireless/rtl8192cu/include/rtl8192d_led.h | 3 +-
106 .../net/wireless/rtl8192cu/include/rtl8192d_recv.h | 6 +-
107 .../net/wireless/rtl8192cu/include/rtl8192d_rf.h | 3 +-
108 .../net/wireless/rtl8192cu/include/rtl8192d_spec.h | 60 +-
109 .../net/wireless/rtl8192cu/include/rtl8192d_xmit.h | 69 +-
110 .../net/wireless/rtl8192cu/include/rtw_android.h | 18 +-
111 drivers/net/wireless/rtl8192cu/include/rtw_ap.h | 64 +
112 .../net/wireless/rtl8192cu/include/rtw_byteorder.h | 3 +-
113 drivers/net/wireless/rtl8192cu/include/rtw_cmd.h | 63 +-
114 drivers/net/wireless/rtl8192cu/include/rtw_debug.h | 287 +-
115 .../net/wireless/rtl8192cu/include/rtw_eeprom.h | 3 +-
116 drivers/net/wireless/rtl8192cu/include/rtw_efuse.h | 5 +-
117 drivers/net/wireless/rtl8192cu/include/rtw_event.h | 6 +-
118 drivers/net/wireless/rtl8192cu/include/rtw_ht.h | 3 +-
119 drivers/net/wireless/rtl8192cu/include/rtw_io.h | 83 +-
120 drivers/net/wireless/rtl8192cu/include/rtw_ioctl.h | 22 +-
121 .../wireless/rtl8192cu/include/rtw_ioctl_query.h | 3 +-
122 .../net/wireless/rtl8192cu/include/rtw_ioctl_rtl.h | 3 +-
123 .../net/wireless/rtl8192cu/include/rtw_ioctl_set.h | 11 +-
124 drivers/net/wireless/rtl8192cu/include/rtw_led.h | 23 +-
125 drivers/net/wireless/rtl8192cu/include/rtw_mlme.h | 295 +-
126 .../net/wireless/rtl8192cu/include/rtw_mlme_ext.h | 275 +-
127 drivers/net/wireless/rtl8192cu/include/rtw_mp.h | 10 +-
128 .../net/wireless/rtl8192cu/include/rtw_mp_ioctl.h | 2 +-
129 .../wireless/rtl8192cu/include/rtw_mp_phy_regdef.h | 3 +-
130 drivers/net/wireless/rtl8192cu/include/rtw_p2p.h | 18 +-
131 .../net/wireless/rtl8192cu/include/rtw_pwrctrl.h | 125 +-
132 drivers/net/wireless/rtl8192cu/include/rtw_qos.h | 3 +-
133 drivers/net/wireless/rtl8192cu/include/rtw_recv.h | 237 +-
134 drivers/net/wireless/rtl8192cu/include/rtw_rf.h | 2 +-
135 .../net/wireless/rtl8192cu/include/rtw_security.h | 38 +-
136 .../net/wireless/rtl8192cu/include/rtw_sreset.h | 74 +
137 drivers/net/wireless/rtl8192cu/include/rtw_tdls.h | 143 +
138 .../net/wireless/rtl8192cu/include/rtw_version.h | 2 +-
139 drivers/net/wireless/rtl8192cu/include/rtw_xmit.h | 254 +-
140 drivers/net/wireless/rtl8192cu/include/sdio_hal.h | 34 -
141 drivers/net/wireless/rtl8192cu/include/sdio_ops.h | 80 -
142 .../net/wireless/rtl8192cu/include/sdio_ops_ce.h | 56 -
143 .../wireless/rtl8192cu/include/sdio_ops_linux.h | 55 -
144 .../net/wireless/rtl8192cu/include/sdio_ops_xp.h | 56 -
145 .../net/wireless/rtl8192cu/include/sdio_osintf.h | 48 -
146 drivers/net/wireless/rtl8192cu/include/sta_info.h | 117 +-
147 drivers/net/wireless/rtl8192cu/include/usb_hal.h | 9 +-
148 drivers/net/wireless/rtl8192cu/include/usb_ops.h | 26 +-
149 .../net/wireless/rtl8192cu/include/usb_ops_linux.h | 63 +
150 .../net/wireless/rtl8192cu/include/usb_osintf.h | 3 +-
151 .../wireless/rtl8192cu/include/usb_vendor_req.h | 3 +-
152 drivers/net/wireless/rtl8192cu/include/wifi.h | 134 +-
153 .../net/wireless/rtl8192cu/include/wlan_bssdef.h | 292 +-
154 .../net/wireless/rtl8192cu/include/xmit_osdep.h | 11 +-
155 .../rtl8192cu/os_dep/linux/ioctl_cfg80211.c | 3771 ++-
156 .../wireless/rtl8192cu/os_dep/linux/ioctl_linux.c | 5232 ++-
157 .../wireless/rtl8192cu/os_dep/linux/mlme_linux.c | 236 +-
158 .../net/wireless/rtl8192cu/os_dep/linux/os_intfs.c | 2049 +-
159 .../net/wireless/rtl8192cu/os_dep/linux/pci_intf.c | 1002 +-
160 .../rtl8192cu/os_dep/linux/pci_ops_linux.c | 24 +
161 .../wireless/rtl8192cu/os_dep/linux/recv_linux.c | 142 +-
162 .../wireless/rtl8192cu/os_dep/linux/rtw_android.c | 220 +-
163 .../wireless/rtl8192cu/os_dep/linux/sdio_intf.c | 922 -
164 .../net/wireless/rtl8192cu/os_dep/linux/usb_intf.c | 1726 +-
165 .../rtl8192cu/os_dep/linux/usb_ops_linux.c | 649 +
166 .../wireless/rtl8192cu/os_dep/linux/xmit_linux.c | 136 +-
167 .../net/wireless/rtl8192cu/os_dep/osdep_service.c | 1143 +-
168 drivers/net/wireless/rtl8192cu/runwpa | 20 +
169 drivers/net/wireless/rtl8192cu/wlan0dhcp | 0
170 163 files changed, 48963 insertions(+), 60712 deletions(-)
171 mode change 100644 => 100755 drivers/net/wireless/rtl8192cu/clean
172 create mode 100644 drivers/net/wireless/rtl8192cu/core/rtw_ap.c
173 create mode 100644 drivers/net/wireless/rtl8192cu/core/rtw_sreset.c
174 create mode 100644 drivers/net/wireless/rtl8192cu/core/rtw_tdls.c
175 create mode 100644 drivers/net/wireless/rtl8192cu/hal/HalPwrSeqCmd.c
176 create mode 100644 drivers/net/wireless/rtl8192cu/hal/dm.c
177 create mode 100644 drivers/net/wireless/rtl8192cu/hal/dm.h
178 create mode 100644 drivers/net/wireless/rtl8192cu/hal/hal_com.c
179 delete mode 100644 drivers/net/wireless/rtl8192cu/hal/hal_init.c
180 create mode 100644 drivers/net/wireless/rtl8192cu/hal/hal_intf.c
181 create mode 100644 drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_xmit.c
182 mode change 100644 => 100755 drivers/net/wireless/rtl8192cu/ifcfg-wlan0
183 delete mode 100644 drivers/net/wireless/rtl8192cu/include/Hal8192DETestHWImg.h
184 delete mode 100644 drivers/net/wireless/rtl8192cu/include/Hal8192DUTestHWImg.h
185 create mode 100644 drivers/net/wireless/rtl8192cu/include/HalPwrSeqCmd.h
186 create mode 100644 drivers/net/wireless/rtl8192cu/include/drv_types_sdio.h
187 delete mode 100644 drivers/net/wireless/rtl8192cu/include/farray.h
188 create mode 100644 drivers/net/wireless/rtl8192cu/include/hal_com.h
189 delete mode 100644 drivers/net/wireless/rtl8192cu/include/hal_init.h
190 create mode 100644 drivers/net/wireless/rtl8192cu/include/hal_intf.h
191 create mode 100644 drivers/net/wireless/rtl8192cu/include/linux/wireless.h
192 create mode 100644 drivers/net/wireless/rtl8192cu/include/rtw_ap.h
193 create mode 100644 drivers/net/wireless/rtl8192cu/include/rtw_sreset.h
194 create mode 100644 drivers/net/wireless/rtl8192cu/include/rtw_tdls.h
195 delete mode 100644 drivers/net/wireless/rtl8192cu/include/sdio_hal.h
196 delete mode 100644 drivers/net/wireless/rtl8192cu/include/sdio_ops.h
197 delete mode 100644 drivers/net/wireless/rtl8192cu/include/sdio_ops_ce.h
198 delete mode 100644 drivers/net/wireless/rtl8192cu/include/sdio_ops_linux.h
199 delete mode 100644 drivers/net/wireless/rtl8192cu/include/sdio_ops_xp.h
200 delete mode 100644 drivers/net/wireless/rtl8192cu/include/sdio_osintf.h
201 create mode 100644 drivers/net/wireless/rtl8192cu/include/usb_ops_linux.h
202 create mode 100644 drivers/net/wireless/rtl8192cu/os_dep/linux/pci_ops_linux.c
203 delete mode 100644 drivers/net/wireless/rtl8192cu/os_dep/linux/sdio_intf.c
204 create mode 100644 drivers/net/wireless/rtl8192cu/os_dep/linux/usb_ops_linux.c
205 create mode 100755 drivers/net/wireless/rtl8192cu/runwpa
206 mode change 100644 => 100755 drivers/net/wireless/rtl8192cu/wlan0dhcp
207
208 --- a/drivers/net/wireless/rtl8192cu/Kconfig
209 +++ b/drivers/net/wireless/rtl8192cu/Kconfig
210 @@ -1,8 +1,6 @@
211 config RTL8192CU
212 tristate "Realtek 8192C USB WiFi"
213 depends on USB
214 - select WIRELESS_EXT
215 - select WEXT_PRIV
216 ---help---
217 - Enable wireless network adapters based on Realtek RTL8192C chipset family, such as EDUP nano series
218 + Help message of RTL8192CU
219
220 --- a/drivers/net/wireless/rtl8192cu/Makefile
221 +++ b/drivers/net/wireless/rtl8192cu/Makefile
222 @@ -1,15 +1,15 @@
223 EXTRA_CFLAGS += $(USER_EXTRA_CFLAGS)
224 EXTRA_CFLAGS += -O1
225 #EXTRA_CFLAGS += -O3
226 -#EXTRA_CFLAGS += -Wall
227 -#EXTRA_CFLAGS += -Wextra
228 +#EXTRA_CFLAGS += -Wall
229 +#EXTRA_CFLAGS += -Wextra
230 #EXTRA_CFLAGS += -Werror
231 #EXTRA_CFLAGS += -pedantic
232 -#EXTRA_CFLAGS += -Wshadow -Wpointer-arith -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes
233 +#EXTRA_CFLAGS += -Wshadow -Wpointer-arith -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes
234
235 -EXTRA_CFLAGS += -Wno-unused-variable
236 -EXTRA_CFLAGS += -Wno-unused-value
237 -EXTRA_CFLAGS += -Wno-unused-label
238 +EXTRA_CFLAGS += -Wno-unused-variable
239 +EXTRA_CFLAGS += -Wno-unused-value
240 +EXTRA_CFLAGS += -Wno-unused-label
241 EXTRA_CFLAGS += -Wno-unused-parameter
242 EXTRA_CFLAGS += -Wno-unused-function
243 EXTRA_CFLAGS += -Wno-unused
244 @@ -22,23 +22,26 @@ CONFIG_AUTOCFG_CP = n
245
246 CONFIG_RTL8192C = y
247 CONFIG_RTL8192D = n
248 +CONFIG_RTL8723A = n
249
250 CONFIG_USB_HCI = y
251 CONFIG_PCI_HCI = n
252 CONFIG_SDIO_HCI = n
253
254 CONFIG_MP_INCLUDED = n
255 -CONFIG_POWER_SAVING = y
256 -CONFIG_USB_AUTOSUSPEND = n
257 -CONFIG_HW_PWRP_DETECTION = n
258 -CONFIG_WIFI_TEST = n
259 -CONFIG_BT_COEXISTENCE = n
260 -CONFIG_RTL8192CU_REDEFINE_1X1 =n
261 -CONFIG_WAKE_ON_WLAN = n
262 +CONFIG_POWER_SAVING = y
263 +CONFIG_USB_AUTOSUSPEND = n
264 +CONFIG_HW_PWRP_DETECTION = n
265 +CONFIG_WIFI_TEST = n
266 +CONFIG_BT_COEXISTENCE = n
267 +CONFIG_RTL8192CU_REDEFINE_1X1 = n
268 +CONFIG_INTEL_WIDI = n
269 +CONFIG_WAKE_ON_WLAN = n
270
271 -CONFIG_PLATFORM_I386_PC = n
272 +CONFIG_PLATFORM_I386_PC = y
273 CONFIG_PLATFORM_TI_AM3517 = n
274 CONFIG_PLATFORM_ANDROID_X86 = n
275 +CONFIG_PLATFORM_JB_X86 = n
276 CONFIG_PLATFORM_ARM_S3C2K4 = n
277 CONFIG_PLATFORM_ARM_PXA2XX = n
278 CONFIG_PLATFORM_ARM_S3C6K4 = n
279 @@ -50,44 +53,33 @@ CONFIG_PLATFORM_MIPS_PLM = n
280 CONFIG_PLATFORM_MSTAR389 = n
281 CONFIG_PLATFORM_MT53XX = n
282 CONFIG_PLATFORM_ARM_MX51_241H = n
283 +CONFIG_PLATFORM_FS_MX61 = n
284 CONFIG_PLATFORM_ACTIONS_ATJ227X = n
285 -CONFIG_PLATFORM_ARM_TEGRA3 = n
286 +CONFIG_PLATFORM_TEGRA3_CARDHU = n
287 +CONFIG_PLATFORM_TEGRA4_DALMORE = n
288 CONFIG_PLATFORM_ARM_TCC8900 = n
289 CONFIG_PLATFORM_ARM_TCC8920 = n
290 +CONFIG_PLATFORM_ARM_TCC8920_JB42 = n
291 CONFIG_PLATFORM_ARM_RK2818 = n
292 CONFIG_PLATFORM_ARM_TI_PANDA = n
293 CONFIG_PLATFORM_MIPS_JZ4760 = n
294 CONFIG_PLATFORM_DMP_PHILIPS = n
295 -CONFIG_PLATFORM_TI_DM365 = n
296 +CONFIG_PLATFORM_TI_DM365 = n
297 CONFIG_PLATFORM_MN10300 = n
298 CONFIG_PLATFORM_MSTAR_TITANIA12 = n
299 -CONFIG_PLATFORM_ARM_BCM2708 = y
300 +CONFIG_PLATFORM_MSTAR_A3 = n
301 +CONFIG_PLATFORM_ARM_SUNxI = n
302 +CONFIG_PLATFORM_ARM_SUN6I = n
303
304 CONFIG_DRVEXT_MODULE = n
305
306 export TopDIR ?= $(shell pwd)
307
308
309 -ifeq ($(CONFIG_RTL8712), y)
310 -
311 -RTL871X = rtl8712
312 -
313 -ifeq ($(CONFIG_SDIO_HCI), y)
314 -MODULE_NAME = 8712s
315 -endif
316 -ifeq ($(CONFIG_USB_HCI), y)
317 -MODULE_NAME = 8712u
318 -endif
319 -
320 -endif
321 -
322 ifeq ($(CONFIG_RTL8192C), y)
323
324 RTL871X = rtl8192c
325
326 -ifeq ($(CONFIG_SDIO_HCI), y)
327 -MODULE_NAME = 8192cs
328 -endif
329 ifeq ($(CONFIG_USB_HCI), y)
330 MODULE_NAME = 8192cu
331 FW_FILES := hal/$(RTL871X)/usb/Hal8192CUHWImg.o
332 @@ -100,7 +92,9 @@ MODULE_NAME = 8192ce
333 FW_FILES := hal/$(RTL871X)/pci/Hal8192CEHWImg.o
334 endif
335
336 -CHIP_FILES := hal/$(RTL871X)/$(RTL871X)_sreset.o
337 +CHIP_FILES := \
338 + hal/$(RTL871X)/$(RTL871X)_sreset.o \
339 + hal/$(RTL871X)/$(RTL871X)_xmit.o
340 CHIP_FILES += $(FW_FILES)
341 endif
342
343 @@ -108,111 +102,101 @@ ifeq ($(CONFIG_RTL8192D), y)
344
345 RTL871X = rtl8192d
346
347 -ifeq ($(CONFIG_SDIO_HCI), y)
348 -MODULE_NAME = 8192ds
349 -endif
350 ifeq ($(CONFIG_USB_HCI), y)
351 MODULE_NAME = 8192du
352 -FW_FILES := hal/$(RTL871X)/usb/Hal8192DUHWImg.o \
353 - hal/$(RTL871X)/usb/Hal8192DUTestHWImg.o
354 +FW_FILES := hal/$(RTL871X)/usb/Hal8192DUHWImg.o
355 ifneq ($(CONFIG_WAKE_ON_WLAN), n)
356 FW_FILES += hal/$(RTL871X)/usb/Hal8192DUHWImg_wowlan.o
357 endif
358 endif
359 ifeq ($(CONFIG_PCI_HCI), y)
360 MODULE_NAME = 8192de
361 -FW_FILES := hal/$(RTL871X)/pci/Hal8192DEHWImg.o \
362 - hal/$(RTL871X)/pci/Hal8192DETestHWImg.o
363 +FW_FILES := hal/$(RTL871X)/pci/Hal8192DEHWImg.o
364 endif
365
366 +CHIP_FILES := \
367 + hal/$(RTL871X)/$(RTL871X)_xmit.o
368 CHIP_FILES += $(FW_FILES)
369 endif
370
371 -ifeq ($(CONFIG_SDIO_HCI), y)
372 +ifeq ($(CONFIG_RTL8723A), y)
373
374 -HCI_NAME = sdio
375 -
376 -_OS_INTFS_FILES := os_dep/osdep_service.o \
377 - os_dep/linux/os_intfs.o \
378 - os_dep/linux/sdio_intf.o \
379 - os_dep/linux/ioctl_linux.o \
380 - os_dep/linux/xmit_linux.o \
381 - os_dep/linux/mlme_linux.o \
382 - os_dep/linux/recv_linux.o \
383 - os_dep/linux/rtw_android.o
384 -
385 -_HAL_INTFS_FILES := hal/$(RTL871X)/hal_init.o \
386 - hal/$(RTL871X)/sdio_halinit.o \
387 - hal/$(RTL871X)/sdio_ops.o \
388 - hal/$(RTL871X)/sdio_ops_linux.o
389 +RTL871X = rtl8723a
390
391 +ifeq ($(CONFIG_SDIO_HCI), y)
392 +MODULE_NAME = 8723as
393 +FW_FILES := hal/$(RTL871X)/sdio/Hal8723SHWImg.o
394 endif
395
396 -
397 ifeq ($(CONFIG_USB_HCI), y)
398 +MODULE_NAME = 8723au
399 +FW_FILES := hal/$(RTL871X)/usb/Hal8723UHWImg.o
400 +endif
401
402 -HCI_NAME = usb
403 +ifeq ($(CONFIG_PCI_HCI), y)
404 +MODULE_NAME = 8723ae
405 +FW_FILES := hal/$(RTL871X)/pci/Hal8723EHWImg.o
406 +endif
407
408 -_OS_INTFS_FILES := os_dep/osdep_service.o \
409 - os_dep/linux/os_intfs.o \
410 - os_dep/linux/$(HCI_NAME)_intf.o \
411 - os_dep/linux/ioctl_linux.o \
412 - os_dep/linux/xmit_linux.o \
413 - os_dep/linux/mlme_linux.o \
414 - os_dep/linux/recv_linux.o \
415 - os_dep/linux/ioctl_cfg80211.o \
416 - os_dep/linux/rtw_android.o
417 +PWRSEQ_FILES := hal/HalPwrSeqCmd.o \
418 + hal/$(RTL871X)/Hal8723PwrSeq.o
419
420 -_HAL_INTFS_FILES := hal/hal_init.o \
421 - hal/$(RTL871X)/$(RTL871X)_hal_init.o \
422 - hal/$(RTL871X)/$(RTL871X)_phycfg.o \
423 - hal/$(RTL871X)/$(RTL871X)_rf6052.o \
424 - hal/$(RTL871X)/$(RTL871X)_dm.o \
425 - hal/$(RTL871X)/$(RTL871X)_rxdesc.o \
426 - hal/$(RTL871X)/$(RTL871X)_cmd.o \
427 - hal/$(RTL871X)/$(RTL871X)_mp.o \
428 - hal/$(RTL871X)/usb/usb_ops_linux.o \
429 - hal/$(RTL871X)/usb/usb_halinit.o \
430 - hal/$(RTL871X)/usb/rtl$(MODULE_NAME)_led.o \
431 - hal/$(RTL871X)/usb/rtl$(MODULE_NAME)_xmit.o \
432 - hal/$(RTL871X)/usb/rtl$(MODULE_NAME)_recv.o
433 -
434 -_HAL_INTFS_FILES += $(CHIP_FILES)
435 +CHIP_FILES += $(FW_FILES) $(PWRSEQ_FILES)
436 +
437 +endif
438
439 +ifeq ($(CONFIG_SDIO_HCI), y)
440 +HCI_NAME = sdio
441 endif
442
443 +ifeq ($(CONFIG_USB_HCI), y)
444 +HCI_NAME = usb
445 +endif
446
447 ifeq ($(CONFIG_PCI_HCI), y)
448 -
449 HCI_NAME = pci
450 +endif
451 +
452
453 _OS_INTFS_FILES := os_dep/osdep_service.o \
454 os_dep/linux/os_intfs.o \
455 os_dep/linux/$(HCI_NAME)_intf.o \
456 + os_dep/linux/$(HCI_NAME)_ops_linux.o \
457 os_dep/linux/ioctl_linux.o \
458 os_dep/linux/xmit_linux.o \
459 os_dep/linux/mlme_linux.o \
460 os_dep/linux/recv_linux.o \
461 + os_dep/linux/ioctl_cfg80211.o \
462 os_dep/linux/rtw_android.o
463
464 -_HAL_INTFS_FILES := hal/hal_init.o \
465 - hal/$(RTL871X)/$(RTL871X)_hal_init.o \
466 +
467 +_HAL_INTFS_FILES := hal/hal_intf.o \
468 + hal/hal_com.o \
469 + hal/dm.o \
470 + hal/$(RTL871X)/$(RTL871X)_hal_init.o \
471 hal/$(RTL871X)/$(RTL871X)_phycfg.o \
472 hal/$(RTL871X)/$(RTL871X)_rf6052.o \
473 hal/$(RTL871X)/$(RTL871X)_dm.o \
474 hal/$(RTL871X)/$(RTL871X)_rxdesc.o \
475 hal/$(RTL871X)/$(RTL871X)_cmd.o \
476 - hal/$(RTL871X)/$(RTL871X)_mp.o \
477 - hal/$(RTL871X)/pci/pci_ops_linux.o \
478 - hal/$(RTL871X)/pci/pci_halinit.o \
479 - hal/$(RTL871X)/pci/rtl$(MODULE_NAME)_led.o \
480 - hal/$(RTL871X)/pci/rtl$(MODULE_NAME)_xmit.o \
481 - hal/$(RTL871X)/pci/rtl$(MODULE_NAME)_recv.o
482 + hal/$(RTL871X)/$(HCI_NAME)/$(HCI_NAME)_halinit.o \
483 + hal/$(RTL871X)/$(HCI_NAME)/rtl$(MODULE_NAME)_led.o \
484 + hal/$(RTL871X)/$(HCI_NAME)/rtl$(MODULE_NAME)_xmit.o \
485 + hal/$(RTL871X)/$(HCI_NAME)/rtl$(MODULE_NAME)_recv.o
486
487 -_HAL_INTFS_FILES += $(CHIP_FILES)
488 +ifeq ($(CONFIG_SDIO_HCI), y)
489 +_HAL_INTFS_FILES += hal/$(RTL871X)/$(HCI_NAME)/$(HCI_NAME)_ops.o
490 +else
491 +_HAL_INTFS_FILES += hal/$(RTL871X)/$(HCI_NAME)/$(HCI_NAME)_ops_linux.o
492 +endif
493
494 +ifeq ($(CONFIG_MP_INCLUDED), y)
495 +_HAL_INTFS_FILES += hal/$(RTL871X)/$(RTL871X)_mp.o
496 endif
497
498 +_HAL_INTFS_FILES += $(CHIP_FILES)
499 +
500 +
501 ifeq ($(CONFIG_AUTOCFG_CP), y)
502 $(shell cp $(TopDIR)/autoconf_$(RTL871X)_$(HCI_NAME)_linux.h $(TopDIR)/include/autoconf.h)
503 endif
504 @@ -238,22 +222,18 @@ endif
505
506 ifeq ($(CONFIG_BT_COEXISTENCE), y)
507 EXTRA_CFLAGS += -DCONFIG_BT_COEXISTENCE
508 -endif
509 +endif
510
511 ifeq ($(CONFIG_RTL8192CU_REDEFINE_1X1), y)
512 EXTRA_CFLAGS += -DRTL8192C_RECONFIG_TO_1T1R
513 -endif
514 +endif
515
516 ifeq ($(CONFIG_WAKE_ON_WLAN), y)
517 EXTRA_CFLAGS += -DCONFIG_WAKE_ON_WLAN
518 endif
519
520 -ifeq ($(CONFIG_PLATFORM_ARM_BCM2708), y)
521 -EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
522 -ARCH := arm
523 -CROSS_COMPILE ?=
524 -KVER := 3.6.11+
525 -KSRC := /lib/modules/$(KVER)/build
526 +ifeq ($(CONFIG_INTEL_WIDI), y)
527 +EXTRA_CFLAGS += -DCONFIG_INTEL_WIDI
528 endif
529
530 ifeq ($(CONFIG_PLATFORM_I386_PC), y)
531 @@ -275,11 +255,20 @@ ARCH := arm
532 endif
533
534 ifeq ($(CONFIG_PLATFORM_MSTAR_TITANIA12), y)
535 -EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_MSTAR_TITANIA12
536 +EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_MSTAR -DCONFIG_PLATFORM_MSTAR_TITANIA12
537 ARCH:=mips
538 -CROSS_COMPILE:= /work/mstar/mips-4.3/bin/mips-linux-gnu-
539 +CROSS_COMPILE:= /usr/src/Mstar_kernel/mips-4.3/bin/mips-linux-gnu-
540 KVER:= 2.6.28.9
541 -KSRC:= /work/mstar/2.6.28.9/
542 +KSRC:= /usr/src/Mstar_kernel/2.6.28.9/
543 +endif
544 +
545 +ifeq ($(CONFIG_PLATFORM_MSTAR_A3), y)
546 +EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_MSTAR -DCONFIG_PLATFORM_MSTAR_A3
547 +ARCH:=arm
548 +CROSS_COMPILE:= arm-none-linux-gnueabi-
549 +KVER:= 2.6.35.11
550 +KSRC:= /home/gary/PERFORCE/THEALE/RedLion/2.6.35.11/
551 +MODULE_NAME = wlan
552 endif
553
554 ifeq ($(CONFIG_PLATFORM_ANDROID_X86), y)
555 @@ -291,6 +280,18 @@ KSRC := /media/DATA-2/android-x86/ics-x8
556 MODULE_NAME :=wlan
557 endif
558
559 +ifeq ($(CONFIG_PLATFORM_JB_X86), y)
560 +EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
561 +EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
562 +EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
563 +EXTRA_CFLAGS += -DCONFIG_P2P_IPS
564 +SUBARCH := $(shell uname -m | sed -e s/i.86/i386/)
565 +ARCH := $(SUBARCH)
566 +CROSS_COMPILE := /home/android_sdk/android-x86_JB/prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7/bin/i686-linux-android-
567 +KSRC := /home/android_sdk/android-x86_JB/out/target/product/x86/obj/kernel/
568 +MODULE_NAME :=wlan
569 +endif
570 +
571 ifeq ($(CONFIG_PLATFORM_ARM_PXA2XX), y)
572 EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
573 ARCH := arm
574 @@ -327,7 +328,7 @@ ifeq ($(CONFIG_PLATFORM_MIPS_RMI), y)
575 EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
576 ARCH:=mips
577 CROSS_COMPILE:=mipsisa32r2-uclibc-
578 -KVER:=
579 +KVER:=
580 KSRC:= /root/work/kernel_realtek
581 endif
582
583 @@ -335,7 +336,7 @@ ifeq ($(CONFIG_PLATFORM_MIPS_PLM), y)
584 EXTRA_CFLAGS += -DCONFIG_BIG_ENDIAN
585 ARCH:=mips
586 CROSS_COMPILE:=mipsisa32r2-uclibc-
587 -KVER:=
588 +KVER:=
589 KSRC:= /root/work/kernel_realtek
590 endif
591
592 @@ -366,8 +367,8 @@ ifeq ($(CONFIG_PLATFORM_RTK_DMP), y)
593 EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DRTK_DMP_PLATFORM
594 ARCH:=mips
595 CROSS_COMPILE:=mipsel-linux-
596 -KVER:=
597 -KSRC ?= /usr/src/work/DMP_Kernel/jupiter/linux-2.6.12
598 +KVER:=
599 +KSRC ?= /usr/src/DMP_Kernel/jupiter/linux-2.6.12
600 endif
601
602 ifeq ($(CONFIG_PLATFORM_MT53XX), y)
603 @@ -385,7 +386,16 @@ CROSS_COMPILE := /opt/freescale/usr/loca
604 KVER := 2.6.31
605 KSRC ?= /lib/modules/2.6.31-770-g0e46b52/source
606 endif
607 -
608 +
609 +ifeq ($(CONFIG_PLATFORM_FS_MX61), y)
610 +EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
611 +ARCH := arm
612 +CROSS_COMPILE := /home/share/CusEnv/FreeScale/arm-eabi-4.4.3/bin/arm-eabi-
613 +KSRC ?= /home/share/CusEnv/FreeScale/FS_kernel_env
614 +endif
615 +
616 +
617 +
618 ifeq ($(CONFIG_PLATFORM_ACTIONS_ATJ227X), y)
619 EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_ACTIONS_ATJ227X
620 ARCH := mips
621 @@ -402,27 +412,57 @@ KVER := 2.6.18
622 KSRC := /home/cnsd4/Appro/mv_pro_5.0/montavista/pro/devkit/lsp/ti-davinci/linux-dm365
623 endif
624
625 -ifeq ($(CONFIG_PLATFORM_ARM_TEGRA3), y)
626 -EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN #-DCONFIG_MINIMAL_MEMORY_USAGE
627 -ARCH ?= arm
628 -CROSS_COMPILE ?= /media/DATA-1/nvidia/gingerbread/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
629 -KSRC ?= /media/DATA-1/nvidia/gingerbread/out/debug/target/product/cardhu/obj/KERNEL
630 +ifeq ($(CONFIG_PLATFORM_TEGRA3_CARDHU), y)
631 +EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
632 +# default setting for Android 4.1, 4.2
633 +EXTRA_CFLAGS += -DRTW_ENABLE_WIFI_CONTROL_FUNC
634 +EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
635 +EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
636 +EXTRA_CFLAGS += -DCONFIG_P2P_IPS
637 +ARCH := arm
638 +CROSS_COMPILE := /home/android_sdk/nvidia/tegra-16r3-partner-android-4.1_20120723/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
639 +KSRC := /home/android_sdk/nvidia/tegra-16r3-partner-android-4.1_20120723/out/target/product/cardhu/obj/KERNEL
640 +MODULE_NAME := wlan
641 +endif
642 +
643 +ifeq ($(CONFIG_PLATFORM_TEGRA4_DALMORE), y)
644 +EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
645 +# default setting for Android 4.1, 4.2
646 +EXTRA_CFLAGS += -DRTW_ENABLE_WIFI_CONTROL_FUNC
647 +EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
648 +EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
649 +EXTRA_CFLAGS += -DCONFIG_P2P_IPS
650 +ARCH := arm
651 +CROSS_COMPILE := /home/android_sdk/nvidia/tegra-17r9-partner-android-4.2-dalmore_20130131/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-
652 +KSRC := /home/android_sdk/nvidia/tegra-17r9-partner-android-4.2-dalmore_20130131/out/target/product/dalmore/obj/KERNEL
653 MODULE_NAME := wlan
654 endif
655
656 ifeq ($(CONFIG_PLATFORM_ARM_TCC8900), y)
657 -EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_MINIMAL_MEMORY_USAGE
658 -ARCH ?= arm
659 -CROSS_COMPILE ?= /media/DATA-1/telechips/SDK_2302_20110425/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
660 -KSRC ?=/media/DATA-1/telechips/SDK_2302_20110425/kernel
661 +EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
662 +ARCH := arm
663 +CROSS_COMPILE := /home/android_sdk/Telechips/SDK_2304_20110613/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
664 +KSRC := /home/android_sdk/Telechips/SDK_2304_20110613/kernel
665 MODULE_NAME := wlan
666 endif
667
668 ifeq ($(CONFIG_PLATFORM_ARM_TCC8920), y)
669 -EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN #-DCONFIG_MINIMAL_MEMORY_USAGE
670 +EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
671 ARCH := arm
672 -CROSS_COMPILE := /media/DATA-2/telechips/ics_sdk/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
673 -KSRC := /media/DATA-2/telechips/ics_sdk/kernel
674 +CROSS_COMPILE := /home/android_sdk/Telechips/v12.06_r1-tcc-android-4.0.4/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
675 +KSRC := /home/android_sdk/Telechips/v12.06_r1-tcc-android-4.0.4/kernel
676 +MODULE_NAME := wlan
677 +endif
678 +
679 +ifeq ($(CONFIG_PLATFORM_ARM_TCC8920_JB42), y)
680 +EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
681 +# default setting for Android 4.1, 4.2
682 +EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
683 +EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
684 +EXTRA_CFLAGS += -DCONFIG_P2P_IPS
685 +ARCH := arm
686 +CROSS_COMPILE := /home/android_sdk/Telechips/v13.03_r1-tcc-android-4.2.2_ds_patched/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-
687 +KSRC := /home/android_sdk/Telechips/v13.03_r1-tcc-android-4.2.2_ds_patched/kernel
688 MODULE_NAME := wlan
689 endif
690
691 @@ -461,11 +501,39 @@ KSRC := /home/winuser/work/Plat_sLD2T_V3
692 INSTALL_PREFIX :=
693 endif
694
695 +ifeq ($(CONFIG_PLATFORM_ARM_SUNxI), y)
696 +EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_ARM_SUNxI
697 +ARCH := arm
698 +CROSS_COMPILE := arm-none-linux-gnueabi-
699 +KVER := 3.0.8
700 +#KSRC:= ../lichee/linux-3.0/
701 +endif
702 +
703 +ifeq ($(CONFIG_PLATFORM_ARM_SUN6I), y)
704 +EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
705 +EXTRA_CFLAGS += -DCONFIG_PLATFORM_ARM_SUN6I
706 +EXTRA_CFLAGS += -DCONFIG_USE_USB_BUFFER_ALLOC_TX
707 +EXTRA_CFLAGS += -DCONFIG_TRAFFIC_PROTECT
708 +# default setting for Android 4.1, 4.2
709 +EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
710 +EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
711 +EXTRA_CFLAGS += -DCONFIG_P2P_IPS
712 +ARCH := arm
713 +CROSS_COMPILE := arm-none-linux-gnueabi-
714 +KVER := 3.3.0
715 +#KSRC:= ../lichee/linux-3.3/
716 +endif
717 +
718 +ifneq ($(USER_MODULE_NAME),)
719 +MODULE_NAME := $(USER_MODULE_NAME)
720 +endif
721 +
722 ifeq ($(CONFIG_MP_INCLUDED), y)
723 MODULE_NAME := $(MODULE_NAME)_mp
724 EXTRA_CFLAGS += -DCONFIG_MP_INCLUDED
725 endif
726
727 +
728 ifneq ($(KERNELRELEASE),)
729
730
731 @@ -483,23 +551,26 @@ rtk_core := core/rtw_cmd.o \
732 core/rtw_rf.o \
733 core/rtw_recv.o \
734 core/rtw_sta_mgt.o \
735 + core/rtw_ap.o \
736 core/rtw_xmit.o \
737 core/rtw_p2p.o \
738 + core/rtw_tdls.o \
739 core/rtw_br_ext.o \
740 - core/rtw_iol.o
741 + core/rtw_iol.o \
742 + core/rtw_sreset.o
743
744 $(MODULE_NAME)-y += $(rtk_core)
745 -
746 +
747 +$(MODULE_NAME)-$(CONFIG_INTEL_WIDI) += core/rtw_intel_widi.o
748 +
749 $(MODULE_NAME)-y += core/efuse/rtw_efuse.o
750
751 $(MODULE_NAME)-y += $(_HAL_INTFS_FILES)
752
753 $(MODULE_NAME)-y += $(_OS_INTFS_FILES)
754
755 -
756 $(MODULE_NAME)-$(CONFIG_MP_INCLUDED) += core/rtw_mp.o \
757 - core/rtw_mp_ioctl.o \
758 - core/rtw_ioctl_rtl.o
759 + core/rtw_mp_ioctl.o
760
761 obj-$(CONFIG_RTL8192CU) := $(MODULE_NAME).o
762
763 @@ -522,12 +593,12 @@ install:
764 uninstall:
765 rm -f $(MODDESTDIR)/$(MODULE_NAME).ko
766 /sbin/depmod -a ${KVER}
767 -
768 -
769 +
770 +
771 config_r:
772 @echo "make config"
773 /bin/bash script/Configure script/config.in
774 -
775 +
776 .PHONY: modules clean
777
778 clean:
779 @@ -535,11 +606,11 @@ clean:
780 rm .tmp_versions -fr ; rm Module.symvers -fr
781 rm -fr Module.markers ; rm -fr modules.order
782 cd core/efuse ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
783 - cd core ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
784 - cd hal/$(RTL871X)/$(HCI_NAME) ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
785 - cd hal/$(RTL871X) ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
786 - cd hal ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
787 - cd os_dep/linux ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
788 - cd os_dep ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
789 + cd core ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
790 + cd hal/$(RTL871X)/$(HCI_NAME) ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
791 + cd hal/$(RTL871X) ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
792 + cd hal ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
793 + cd os_dep/linux ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
794 + cd os_dep ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
795 endif
796
797 --- a/drivers/net/wireless/rtl8192cu/clean
798 +++ b/drivers/net/wireless/rtl8192cu/clean
799 @@ -3,7 +3,3 @@ rmmod 8192cu
800 rmmod 8192ce
801 rmmod 8192du
802 rmmod 8192de
803 -
804 -rmmod rtl8192cu
805 -rmmod rtl8192c_common
806 -rmmod rtlwifi
807 \ No newline at end of file
808 --- a/drivers/net/wireless/rtl8192cu/core/efuse/rtw_efuse.c
809 +++ b/drivers/net/wireless/rtl8192cu/core/efuse/rtw_efuse.c
810 @@ -1,7 +1,7 @@
811 /******************************************************************************
812 *
813 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
814 - *
815 + *
816 * This program is free software; you can redistribute it and/or modify it
817 * under the terms of version 2 of the GNU General Public License as
818 * published by the Free Software Foundation.
819 @@ -54,6 +54,11 @@ BOOLEAN
820 Efuse_Read1ByteFromFakeContent(
821 IN PADAPTER pAdapter,
822 IN u16 Offset,
823 + IN OUT u8 *Value );
824 +BOOLEAN
825 +Efuse_Read1ByteFromFakeContent(
826 + IN PADAPTER pAdapter,
827 + IN u16 Offset,
828 IN OUT u8 *Value )
829 {
830 if(Offset >= EFUSE_MAX_HW_SIZE)
831 @@ -67,6 +72,12 @@ Efuse_Read1ByteFromFakeContent(
832 *Value = fakeBTEfuseContent[fakeEfuseBank-1][Offset];
833 return _TRUE;
834 }
835 +
836 +BOOLEAN
837 +Efuse_Write1ByteToFakeContent(
838 + IN PADAPTER pAdapter,
839 + IN u16 Offset,
840 + IN u8 Value );
841 BOOLEAN
842 Efuse_Write1ByteToFakeContent(
843 IN PADAPTER pAdapter,
844 @@ -210,7 +221,7 @@ ReadEFuseByte(
845 value32 = rtw_read32(Adapter, EFUSE_CTRL);
846
847 *pbuf = (u8)(value32 & 0xff);
848 - //MSG_8192C("ReadEFuseByte _offset:%08u, in %d ms\n",_offset ,rtw_get_passing_time_ms(start));
849 + //DBG_871X("ReadEFuseByte _offset:%08u, in %d ms\n",_offset ,rtw_get_passing_time_ms(start));
850
851 }
852
853 @@ -232,6 +243,16 @@ ReadEFuseByte(
854 // 2008/12/22 MH Read Efuse must check if we write section 1 data again!!! Sec1
855 // write addr must be after sec5.
856 //
857 +
858 +VOID
859 +efuse_ReadEFuse(
860 + PADAPTER Adapter,
861 + u8 efuseType,
862 + u16 _offset,
863 + u16 _size_byte,
864 + u8 *pbuf,
865 + IN BOOLEAN bPseudoTest
866 + );
867 VOID
868 efuse_ReadEFuse(
869 PADAPTER Adapter,
870 @@ -250,7 +271,7 @@ EFUSE_GetEfuseDefinition(
871 IN PADAPTER pAdapter,
872 IN u8 efuseType,
873 IN u8 type,
874 - OUT PVOID *pOut,
875 + OUT void *pOut,
876 IN BOOLEAN bPseudoTest
877 )
878 {
879 @@ -337,6 +358,12 @@ EFUSE_Read1Byte(
880 * 09/23/2008 MHC Copy from WMAC.
881 *
882 *---------------------------------------------------------------------------*/
883 +
884 +void
885 +EFUSE_Write1Byte(
886 + IN PADAPTER Adapter,
887 + IN u16 Address,
888 + IN u8 Value);
889 void
890 EFUSE_Write1Byte(
891 IN PADAPTER Adapter,
892 @@ -709,12 +736,12 @@ u8 rtw_efuse_map_write(PADAPTER padapter
893
894 if (word_en != 0xF) {
895 ret = Efuse_PgPacketWrite(padapter, offset, word_en, newdata, _FALSE);
896 - DBG_8192C("offset=%x \n",offset);
897 - DBG_8192C("word_en=%x \n",word_en);
898 + DBG_871X("offset=%x \n",offset);
899 + DBG_871X("word_en=%x \n",word_en);
900
901 for(i=0;i<PGPKT_DATA_SIZE;i++)
902 {
903 - DBG_8192C("data=%x \t",newdata[i]);
904 + DBG_871X("data=%x \t",newdata[i]);
905 }
906 if (ret == _FAIL) break;
907 }
908 @@ -759,6 +786,12 @@ Efuse_ReadAllMap(
909 IN PADAPTER pAdapter,
910 IN u8 efuseType,
911 IN OUT u8 *Efuse,
912 + IN BOOLEAN bPseudoTest);
913 +VOID
914 +Efuse_ReadAllMap(
915 + IN PADAPTER pAdapter,
916 + IN u8 efuseType,
917 + IN OUT u8 *Efuse,
918 IN BOOLEAN bPseudoTest)
919 {
920 u16 mapLen=0;
921 @@ -851,6 +884,13 @@ efuse_ShadowRead4Byte(
922 * 11/12/2008 MHC Create Version 0.
923 *
924 *---------------------------------------------------------------------------*/
925 +#ifdef PLATFORM
926 +static VOID
927 +efuse_ShadowWrite1Byte(
928 + IN PADAPTER pAdapter,
929 + IN u16 Offset,
930 + IN u8 Value);
931 +#endif //PLATFORM
932 static VOID
933 efuse_ShadowWrite1Byte(
934 IN PADAPTER pAdapter,
935 @@ -990,7 +1030,13 @@ EFUSE_ShadowRead(
936 * 11/12/2008 MHC Create Version 0.
937 *
938 *---------------------------------------------------------------------------*/
939 -extern VOID
940 +VOID
941 +EFUSE_ShadowWrite(
942 + IN PADAPTER pAdapter,
943 + IN u8 Type,
944 + IN u16 Offset,
945 + IN OUT u32 Value);
946 +VOID
947 EFUSE_ShadowWrite(
948 IN PADAPTER pAdapter,
949 IN u8 Type,
950 @@ -1013,6 +1059,10 @@ EFUSE_ShadowWrite(
951 VOID
952 Efuse_InitSomeVar(
953 IN PADAPTER pAdapter
954 + );
955 +VOID
956 +Efuse_InitSomeVar(
957 + IN PADAPTER pAdapter
958 )
959 {
960 u8 i;
961 @@ -1056,7 +1106,7 @@ int storeAdaptorInfoFile(char *path, str
962 else
963 ret = _FAIL;
964 } else {
965 - DBG_8192C("%s NULL pointer\n",__FUNCTION__);
966 + DBG_871X("%s NULL pointer\n",__FUNCTION__);
967 ret = _FAIL;
968 }
969 return ret;
970 @@ -1086,7 +1136,7 @@ int retriveAdaptorInfoFile(char *path, s
971 #endif
972
973 } else {
974 - DBG_8192C("%s NULL pointer\n",__FUNCTION__);
975 + DBG_871X("%s NULL pointer\n",__FUNCTION__);
976 ret = _FAIL;
977 }
978 return ret;
979 --- /dev/null
980 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_ap.c
981 @@ -0,0 +1,2940 @@
982 +/******************************************************************************
983 + *
984 + * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
985 + *
986 + * This program is free software; you can redistribute it and/or modify it
987 + * under the terms of version 2 of the GNU General Public License as
988 + * published by the Free Software Foundation.
989 + *
990 + * This program is distributed in the hope that it will be useful, but WITHOUT
991 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
992 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
993 + * more details.
994 + *
995 + * You should have received a copy of the GNU General Public License along with
996 + * this program; if not, write to the Free Software Foundation, Inc.,
997 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
998 + *
999 + *
1000 + ******************************************************************************/
1001 +#define _RTW_AP_C_
1002 +
1003 +#include <drv_conf.h>
1004 +#include <osdep_service.h>
1005 +#include <drv_types.h>
1006 +#include <wifi.h>
1007 +
1008 +
1009 +#ifdef CONFIG_AP_MODE
1010 +
1011 +extern unsigned char RTW_WPA_OUI[];
1012 +extern unsigned char WMM_OUI[];
1013 +extern unsigned char WPS_OUI[];
1014 +extern unsigned char P2P_OUI[];
1015 +extern unsigned char WFD_OUI[];
1016 +
1017 +void init_mlme_ap_info(_adapter *padapter)
1018 +{
1019 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
1020 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
1021 + struct sta_priv *pstapriv = &padapter->stapriv;
1022 + struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
1023 +
1024 +
1025 + _rtw_spinlock_init(&pmlmepriv->bcn_update_lock);
1026 +
1027 + //for ACL
1028 + _rtw_init_queue(&pacl_list->acl_node_q);
1029 +
1030 + //pmlmeext->bstart_bss = _FALSE;
1031 +
1032 + start_ap_mode(padapter);
1033 +}
1034 +
1035 +void free_mlme_ap_info(_adapter *padapter)
1036 +{
1037 + _irqL irqL;
1038 + struct sta_info *psta=NULL;
1039 + struct sta_priv *pstapriv = &padapter->stapriv;
1040 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
1041 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
1042 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
1043 +
1044 + //stop_ap_mode(padapter);
1045 +
1046 + pmlmepriv->update_bcn = _FALSE;
1047 + pmlmeext->bstart_bss = _FALSE;
1048 +
1049 + rtw_sta_flush(padapter);
1050 +
1051 + pmlmeinfo->state = _HW_STATE_NOLINK_;
1052 +
1053 + //free_assoc_sta_resources
1054 + rtw_free_all_stainfo(padapter);
1055 +
1056 + //free bc/mc sta_info
1057 + psta = rtw_get_bcmc_stainfo(padapter);
1058 + _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
1059 + rtw_free_stainfo(padapter, psta);
1060 + _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
1061 +
1062 +
1063 + _rtw_spinlock_free(&pmlmepriv->bcn_update_lock);
1064 +
1065 +}
1066 +
1067 +static void update_BCNTIM(_adapter *padapter)
1068 +{
1069 + struct sta_priv *pstapriv = &padapter->stapriv;
1070 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
1071 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
1072 + WLAN_BSSID_EX *pnetwork_mlmeext = &(pmlmeinfo->network);
1073 + unsigned char *pie = pnetwork_mlmeext->IEs;
1074 +
1075 + //DBG_871X("%s\n", __FUNCTION__);
1076 +
1077 + //update TIM IE
1078 + //if(pstapriv->tim_bitmap)
1079 + if(_TRUE)
1080 + {
1081 + u8 *p, *dst_ie, *premainder_ie=NULL, *pbackup_remainder_ie=NULL;
1082 + u16 tim_bitmap_le;
1083 + uint offset, tmp_len, tim_ielen, tim_ie_offset, remainder_ielen;
1084 +
1085 + tim_bitmap_le = cpu_to_le16(pstapriv->tim_bitmap);
1086 +
1087 + p = rtw_get_ie(pie + _FIXED_IE_LENGTH_, _TIM_IE_, &tim_ielen, pnetwork_mlmeext->IELength - _FIXED_IE_LENGTH_);
1088 + if (p != NULL && tim_ielen>0)
1089 + {
1090 + tim_ielen += 2;
1091 +
1092 + premainder_ie = p+tim_ielen;
1093 +
1094 + tim_ie_offset = (sint)(p -pie);
1095 +
1096 + remainder_ielen = pnetwork_mlmeext->IELength - tim_ie_offset - tim_ielen;
1097 +
1098 + //append TIM IE from dst_ie offset
1099 + dst_ie = p;
1100 + }
1101 + else
1102 + {
1103 + tim_ielen = 0;
1104 +
1105 + //calucate head_len
1106 + offset = _FIXED_IE_LENGTH_;
1107 +
1108 + /* get ssid_ie len */
1109 + p = rtw_get_ie(pie + _BEACON_IE_OFFSET_, _SSID_IE_, &tmp_len, (pnetwork_mlmeext->IELength - _BEACON_IE_OFFSET_));
1110 + if (p != NULL)
1111 + offset += tmp_len+2;
1112 +
1113 + // get supported rates len
1114 + p = rtw_get_ie(pie + _BEACON_IE_OFFSET_, _SUPPORTEDRATES_IE_, &tmp_len, (pnetwork_mlmeext->IELength - _BEACON_IE_OFFSET_));
1115 + if (p != NULL)
1116 + {
1117 + offset += tmp_len+2;
1118 + }
1119 +
1120 + //DS Parameter Set IE, len=3
1121 + offset += 3;
1122 +
1123 + premainder_ie = pie + offset;
1124 +
1125 + remainder_ielen = pnetwork_mlmeext->IELength - offset - tim_ielen;
1126 +
1127 + //append TIM IE from offset
1128 + dst_ie = pie + offset;
1129 +
1130 + }
1131 +
1132 +
1133 + if(remainder_ielen>0)
1134 + {
1135 + pbackup_remainder_ie = rtw_malloc(remainder_ielen);
1136 + if(pbackup_remainder_ie && premainder_ie)
1137 + _rtw_memcpy(pbackup_remainder_ie, premainder_ie, remainder_ielen);
1138 + }
1139 +
1140 + *dst_ie++=_TIM_IE_;
1141 +
1142 + if((pstapriv->tim_bitmap&0xff00) && (pstapriv->tim_bitmap&0x00fc))
1143 + tim_ielen = 5;
1144 + else
1145 + tim_ielen = 4;
1146 +
1147 + *dst_ie++= tim_ielen;
1148 +
1149 + *dst_ie++=0;//DTIM count
1150 + *dst_ie++=1;//DTIM peroid
1151 +
1152 + if(pstapriv->tim_bitmap&BIT(0))//for bc/mc frames
1153 + *dst_ie++ = BIT(0);//bitmap ctrl
1154 + else
1155 + *dst_ie++ = 0;
1156 +
1157 + if(tim_ielen==4)
1158 + {
1159 + *dst_ie++ = *(u8*)&tim_bitmap_le;
1160 + }
1161 + else if(tim_ielen==5)
1162 + {
1163 + _rtw_memcpy(dst_ie, &tim_bitmap_le, 2);
1164 + dst_ie+=2;
1165 + }
1166 +
1167 + //copy remainder IE
1168 + if(pbackup_remainder_ie)
1169 + {
1170 + _rtw_memcpy(dst_ie, pbackup_remainder_ie, remainder_ielen);
1171 +
1172 + rtw_mfree(pbackup_remainder_ie, remainder_ielen);
1173 + }
1174 +
1175 + offset = (uint)(dst_ie - pie);
1176 + pnetwork_mlmeext->IELength = offset + remainder_ielen;
1177 +
1178 + }
1179 +
1180 +#ifndef CONFIG_INTERRUPT_BASED_TXBCN
1181 +#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
1182 + set_tx_beacon_cmd(padapter);
1183 +#endif
1184 +#endif //!CONFIG_INTERRUPT_BASED_TXBCN
1185 +
1186 +
1187 +}
1188 +
1189 +void rtw_add_bcn_ie(_adapter *padapter, WLAN_BSSID_EX *pnetwork, u8 index, u8 *data, u8 len)
1190 +{
1191 + PNDIS_802_11_VARIABLE_IEs pIE;
1192 + u8 bmatch = _FALSE;
1193 + u8 *pie = pnetwork->IEs;
1194 + u8 *p, *dst_ie, *premainder_ie=NULL, *pbackup_remainder_ie=NULL;
1195 + u32 i, offset, ielen, ie_offset, remainder_ielen = 0;
1196 +
1197 + for (i = sizeof(NDIS_802_11_FIXED_IEs); i < pnetwork->IELength;)
1198 + {
1199 + pIE = (PNDIS_802_11_VARIABLE_IEs)(pnetwork->IEs + i);
1200 +
1201 + if (pIE->ElementID > index)
1202 + {
1203 + break;
1204 + }
1205 + else if(pIE->ElementID == index) // already exist the same IE
1206 + {
1207 + p = (u8 *)pIE;
1208 + ielen = pIE->Length;
1209 + bmatch = _TRUE;
1210 + break;
1211 + }
1212 +
1213 + p = (u8 *)pIE;
1214 + ielen = pIE->Length;
1215 + i += (pIE->Length + 2);
1216 + }
1217 +
1218 + if (p != NULL && ielen>0)
1219 + {
1220 + ielen += 2;
1221 +
1222 + premainder_ie = p+ielen;
1223 +
1224 + ie_offset = (sint)(p -pie);
1225 +
1226 + remainder_ielen = pnetwork->IELength - ie_offset - ielen;
1227 +
1228 + if(bmatch)
1229 + dst_ie = p;
1230 + else
1231 + dst_ie = (p+ielen);
1232 + }
1233 +
1234 + if(remainder_ielen>0)
1235 + {
1236 + pbackup_remainder_ie = rtw_malloc(remainder_ielen);
1237 + if(pbackup_remainder_ie && premainder_ie)
1238 + _rtw_memcpy(pbackup_remainder_ie, premainder_ie, remainder_ielen);
1239 + }
1240 +
1241 + *dst_ie++=index;
1242 + *dst_ie++=len;
1243 +
1244 + _rtw_memcpy(dst_ie, data, len);
1245 + dst_ie+=len;
1246 +
1247 + //copy remainder IE
1248 + if(pbackup_remainder_ie)
1249 + {
1250 + _rtw_memcpy(dst_ie, pbackup_remainder_ie, remainder_ielen);
1251 +
1252 + rtw_mfree(pbackup_remainder_ie, remainder_ielen);
1253 + }
1254 +
1255 + offset = (uint)(dst_ie - pie);
1256 + pnetwork->IELength = offset + remainder_ielen;
1257 +}
1258 +
1259 +void rtw_remove_bcn_ie(_adapter *padapter, WLAN_BSSID_EX *pnetwork, u8 index)
1260 +{
1261 + u8 *p, *dst_ie, *premainder_ie=NULL, *pbackup_remainder_ie=NULL;
1262 + uint offset, ielen, ie_offset, remainder_ielen = 0;
1263 + u8 *pie = pnetwork->IEs;
1264 +
1265 + p = rtw_get_ie(pie + _FIXED_IE_LENGTH_, index, &ielen, pnetwork->IELength - _FIXED_IE_LENGTH_);
1266 + if (p != NULL && ielen>0)
1267 + {
1268 + ielen += 2;
1269 +
1270 + premainder_ie = p+ielen;
1271 +
1272 + ie_offset = (sint)(p -pie);
1273 +
1274 + remainder_ielen = pnetwork->IELength - ie_offset - ielen;
1275 +
1276 + dst_ie = p;
1277 + }
1278 + else {
1279 + return;
1280 + }
1281 +
1282 + if(remainder_ielen>0)
1283 + {
1284 + pbackup_remainder_ie = rtw_malloc(remainder_ielen);
1285 + if(pbackup_remainder_ie && premainder_ie)
1286 + _rtw_memcpy(pbackup_remainder_ie, premainder_ie, remainder_ielen);
1287 + }
1288 +
1289 + //copy remainder IE
1290 + if(pbackup_remainder_ie)
1291 + {
1292 + _rtw_memcpy(dst_ie, pbackup_remainder_ie, remainder_ielen);
1293 +
1294 + rtw_mfree(pbackup_remainder_ie, remainder_ielen);
1295 + }
1296 +
1297 + offset = (uint)(dst_ie - pie);
1298 + pnetwork->IELength = offset + remainder_ielen;
1299 +}
1300 +
1301 +
1302 +u8 chk_sta_is_alive(struct sta_info *psta);
1303 +u8 chk_sta_is_alive(struct sta_info *psta)
1304 +{
1305 + u8 ret = _FALSE;
1306 + #ifdef DBG_EXPIRATION_CHK
1307 + DBG_871X("sta:"MAC_FMT", rssi:%d, rx:"STA_PKTS_FMT", expire_to:%u, %s%ssq_len:%u\n"
1308 + , MAC_ARG(psta->hwaddr)
1309 + , psta->rssi_stat.UndecoratedSmoothedPWDB
1310 + //, STA_RX_PKTS_ARG(psta)
1311 + , STA_RX_PKTS_DIFF_ARG(psta)
1312 + , psta->expire_to
1313 + , psta->state&WIFI_SLEEP_STATE?"PS, ":""
1314 + , psta->state&WIFI_STA_ALIVE_CHK_STATE?"SAC, ":""
1315 + , psta->sleepq_len
1316 + );
1317 + #endif
1318 +
1319 + //if(sta_last_rx_pkts(psta) == sta_rx_pkts(psta))
1320 + if((psta->sta_stats.last_rx_data_pkts + psta->sta_stats.last_rx_ctrl_pkts) == (psta->sta_stats.rx_data_pkts + psta->sta_stats.rx_ctrl_pkts))
1321 + {
1322 + #if 0
1323 + if(psta->state&WIFI_SLEEP_STATE)
1324 + ret = _TRUE;
1325 + #endif
1326 + }
1327 + else
1328 + {
1329 + ret = _TRUE;
1330 + }
1331 +
1332 + sta_update_last_rx_pkts(psta);
1333 +
1334 + return ret;
1335 +}
1336 +
1337 +void expire_timeout_chk(_adapter *padapter)
1338 +{
1339 + _irqL irqL;
1340 + _list *phead, *plist;
1341 + u8 updated;
1342 + struct sta_info *psta=NULL;
1343 + struct sta_priv *pstapriv = &padapter->stapriv;
1344 + u8 chk_alive_num = 0;
1345 + char chk_alive_list[NUM_STA];
1346 + int i;
1347 +
1348 + _enter_critical_bh(&pstapriv->auth_list_lock, &irqL);
1349 +
1350 + phead = &pstapriv->auth_list;
1351 + plist = get_next(phead);
1352 +
1353 + //check auth_queue
1354 + #ifdef DBG_EXPIRATION_CHK
1355 + if (rtw_end_of_queue_search(phead, plist) == _FALSE) {
1356 + DBG_871X(FUNC_NDEV_FMT" auth_list, cnt:%u\n"
1357 + , FUNC_NDEV_ARG(padapter->pnetdev), pstapriv->auth_list_cnt);
1358 + }
1359 + #endif
1360 + while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
1361 + {
1362 + psta = LIST_CONTAINOR(plist, struct sta_info, auth_list);
1363 + plist = get_next(plist);
1364 +
1365 + if(psta->expire_to>0)
1366 + {
1367 + psta->expire_to--;
1368 + if (psta->expire_to == 0)
1369 + {
1370 + rtw_list_delete(&psta->auth_list);
1371 + pstapriv->auth_list_cnt--;
1372 +
1373 + DBG_871X("auth expire %02X%02X%02X%02X%02X%02X\n",
1374 + psta->hwaddr[0],psta->hwaddr[1],psta->hwaddr[2],psta->hwaddr[3],psta->hwaddr[4],psta->hwaddr[5]);
1375 +
1376 + _exit_critical_bh(&pstapriv->auth_list_lock, &irqL);
1377 +
1378 + _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
1379 + rtw_free_stainfo(padapter, psta);
1380 + _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
1381 +
1382 + _enter_critical_bh(&pstapriv->auth_list_lock, &irqL);
1383 + }
1384 + }
1385 +
1386 + }
1387 +
1388 + _exit_critical_bh(&pstapriv->auth_list_lock, &irqL);
1389 +
1390 + psta = NULL;
1391 +
1392 +
1393 + _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
1394 +
1395 + phead = &pstapriv->asoc_list;
1396 + plist = get_next(phead);
1397 +
1398 + //check asoc_queue
1399 + #ifdef DBG_EXPIRATION_CHK
1400 + if (rtw_end_of_queue_search(phead, plist) == _FALSE) {
1401 + DBG_871X(FUNC_NDEV_FMT" asoc_list, cnt:%u\n"
1402 + , FUNC_NDEV_ARG(padapter->pnetdev), pstapriv->asoc_list_cnt);
1403 + }
1404 + #endif
1405 + while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
1406 + {
1407 + psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
1408 + plist = get_next(plist);
1409 +
1410 + if (chk_sta_is_alive(psta) || !psta->expire_to) {
1411 + psta->expire_to = pstapriv->expire_to;
1412 + psta->keep_alive_trycnt = 0;
1413 + #ifdef CONFIG_TX_MCAST2UNI
1414 + psta->under_exist_checking = 0;
1415 + #endif // CONFIG_TX_MCAST2UNI
1416 + } else {
1417 + psta->expire_to--;
1418 + }
1419 +
1420 +#ifndef CONFIG_ACTIVE_KEEP_ALIVE_CHECK
1421 +#ifdef CONFIG_TX_MCAST2UNI
1422 + if ( (psta->flags & WLAN_STA_HT) && (psta->htpriv.agg_enable_bitmap || psta->under_exist_checking) ) {
1423 + // check sta by delba(addba) for 11n STA
1424 + // ToDo: use CCX report to check for all STAs
1425 + //DBG_871X("asoc check by DELBA/ADDBA! (pstapriv->expire_to=%d s)(psta->expire_to=%d s), [%02x, %d]\n", pstapriv->expire_to*2, psta->expire_to*2, psta->htpriv.agg_enable_bitmap, psta->under_exist_checking);
1426 +
1427 + if ( psta->expire_to <= (pstapriv->expire_to - 50 ) ) {
1428 + DBG_871X("asoc expire by DELBA/ADDBA! (%d s)\n", (pstapriv->expire_to-psta->expire_to)*2);
1429 + psta->under_exist_checking = 0;
1430 + psta->expire_to = 0;
1431 + } else if ( psta->expire_to <= (pstapriv->expire_to - 3) && (psta->under_exist_checking==0)) {
1432 + DBG_871X("asoc check by DELBA/ADDBA! (%d s)\n", (pstapriv->expire_to-psta->expire_to)*2);
1433 + psta->under_exist_checking = 1;
1434 + //tear down TX AMPDU
1435 + send_delba(padapter, 1, psta->hwaddr);// // originator
1436 + psta->htpriv.agg_enable_bitmap = 0x0;//reset
1437 + psta->htpriv.candidate_tid_bitmap = 0x0;//reset
1438 + }
1439 + }
1440 +#endif // CONFIG_TX_MCAST2UNI
1441 +#endif //CONFIG_ACTIVE_KEEP_ALIVE_CHECK
1442 +
1443 + if (psta->expire_to <= 0)
1444 + {
1445 + #ifdef CONFIG_ACTIVE_KEEP_ALIVE_CHECK
1446 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
1447 +
1448 + if (padapter->registrypriv.wifi_spec == 1)
1449 + {
1450 + psta->expire_to = pstapriv->expire_to;
1451 + continue;
1452 + }
1453 +
1454 + if (psta->state & WIFI_SLEEP_STATE) {
1455 + if (!(psta->state & WIFI_STA_ALIVE_CHK_STATE)) {
1456 + //to check if alive by another methods if staion is at ps mode.
1457 + psta->expire_to = pstapriv->expire_to;
1458 + psta->state |= WIFI_STA_ALIVE_CHK_STATE;
1459 +
1460 + //DBG_871X("alive chk, sta:" MAC_FMT " is at ps mode!\n", MAC_ARG(psta->hwaddr));
1461 +
1462 + //to update bcn with tim_bitmap for this station
1463 + pstapriv->tim_bitmap |= BIT(psta->aid);
1464 + update_beacon(padapter, _TIM_IE_, NULL, _FALSE);
1465 +
1466 + if(!pmlmeext->active_keep_alive_check)
1467 + continue;
1468 + }
1469 + }
1470 +
1471 + if (pmlmeext->active_keep_alive_check) {
1472 + int stainfo_offset;
1473 +
1474 + stainfo_offset = rtw_stainfo_offset(pstapriv, psta);
1475 + if (stainfo_offset_valid(stainfo_offset)) {
1476 + chk_alive_list[chk_alive_num++] = stainfo_offset;
1477 + }
1478 +
1479 + continue;
1480 + }
1481 + #endif /* CONFIG_ACTIVE_KEEP_ALIVE_CHECK */
1482 +
1483 + rtw_list_delete(&psta->asoc_list);
1484 + pstapriv->asoc_list_cnt--;
1485 +
1486 + DBG_871X("asoc expire "MAC_FMT", state=0x%x\n", MAC_ARG(psta->hwaddr), psta->state);
1487 + updated = ap_free_sta(padapter, psta, _FALSE, WLAN_REASON_DEAUTH_LEAVING);
1488 + }
1489 + else
1490 + {
1491 + /* TODO: Aging mechanism to digest frames in sleep_q to avoid running out of xmitframe */
1492 + if (psta->sleepq_len > (NR_XMITFRAME/pstapriv->asoc_list_cnt)
1493 + && padapter->xmitpriv.free_xmitframe_cnt < (NR_XMITFRAME/pstapriv->asoc_list_cnt/2)
1494 + ){
1495 + DBG_871X("%s sta:"MAC_FMT", sleepq_len:%u, free_xmitframe_cnt:%u, asoc_list_cnt:%u, clear sleep_q\n", __func__
1496 + , MAC_ARG(psta->hwaddr)
1497 + , psta->sleepq_len, padapter->xmitpriv.free_xmitframe_cnt, pstapriv->asoc_list_cnt);
1498 + wakeup_sta_to_xmit(padapter, psta);
1499 + }
1500 + }
1501 + }
1502 +
1503 + _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
1504 +
1505 +#ifdef CONFIG_ACTIVE_KEEP_ALIVE_CHECK
1506 +if (chk_alive_num) {
1507 +
1508 + u8 backup_oper_channel=0;
1509 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
1510 + /* switch to correct channel of current network before issue keep-alive frames */
1511 + if (rtw_get_oper_ch(padapter) != pmlmeext->cur_channel) {
1512 + backup_oper_channel = rtw_get_oper_ch(padapter);
1513 + SelectChannel(padapter, pmlmeext->cur_channel);
1514 + }
1515 +
1516 + /* issue null data to check sta alive*/
1517 + for (i = 0; i < chk_alive_num; i++) {
1518 +
1519 + int ret = _FAIL;
1520 +
1521 + psta = rtw_get_stainfo_by_offset(pstapriv, chk_alive_list[i]);
1522 + if(!(psta->state &_FW_LINKED))
1523 + continue;
1524 +
1525 + if (psta->state & WIFI_SLEEP_STATE)
1526 + ret = issue_nulldata(padapter, psta->hwaddr, 0, 1, 50);
1527 + else
1528 + ret = issue_nulldata(padapter, psta->hwaddr, 0, 3, 50);
1529 +
1530 + psta->keep_alive_trycnt++;
1531 + if (ret == _SUCCESS)
1532 + {
1533 + DBG_871X("asoc check, sta(" MAC_FMT ") is alive\n", MAC_ARG(psta->hwaddr));
1534 + psta->expire_to = pstapriv->expire_to;
1535 + psta->keep_alive_trycnt = 0;
1536 + continue;
1537 + }
1538 + else if (psta->keep_alive_trycnt <= 3)
1539 + {
1540 + DBG_871X("ack check for asoc expire, keep_alive_trycnt=%d\n", psta->keep_alive_trycnt);
1541 + psta->expire_to = 1;
1542 + continue;
1543 + }
1544 +
1545 + psta->keep_alive_trycnt = 0;
1546 +
1547 + DBG_871X("asoc expire "MAC_FMT", state=0x%x\n", MAC_ARG(psta->hwaddr), psta->state);
1548 + _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
1549 + if (rtw_is_list_empty(&psta->asoc_list)==_FALSE) {
1550 + rtw_list_delete(&psta->asoc_list);
1551 + pstapriv->asoc_list_cnt--;
1552 + updated = ap_free_sta(padapter, psta, _FALSE, WLAN_REASON_DEAUTH_LEAVING);
1553 + }
1554 + _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
1555 +
1556 + }
1557 +
1558 + if (backup_oper_channel>0) /* back to the original operation channel */
1559 + SelectChannel(padapter, backup_oper_channel);
1560 +}
1561 +#endif /* CONFIG_ACTIVE_KEEP_ALIVE_CHECK */
1562 +
1563 + associated_clients_update(padapter, updated);
1564 +}
1565 +
1566 +
1567 +static void add_RATid(_adapter *padapter, struct sta_info *psta)
1568 +{
1569 + int i;
1570 + u8 rf_type;
1571 + u32 init_rate=0;
1572 + unsigned char sta_band = 0, raid, shortGIrate = _FALSE;
1573 + unsigned char limit;
1574 + unsigned int tx_ra_bitmap=0;
1575 + struct ht_priv *psta_ht = NULL;
1576 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
1577 + WLAN_BSSID_EX *pcur_network = (WLAN_BSSID_EX *)&pmlmepriv->cur_network.network;
1578 +
1579 +
1580 + if(psta)
1581 + psta_ht = &psta->htpriv;
1582 + else
1583 + return;
1584 +
1585 + //b/g mode ra_bitmap
1586 + for (i=0; i<sizeof(psta->bssrateset); i++)
1587 + {
1588 + if (psta->bssrateset[i])
1589 + tx_ra_bitmap |= rtw_get_bit_value_from_ieee_value(psta->bssrateset[i]&0x7f);
1590 + }
1591 +
1592 + //n mode ra_bitmap
1593 + if(psta_ht->ht_option)
1594 + {
1595 + rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
1596 + if(rf_type == RF_2T2R)
1597 + limit=16;// 2R
1598 + else
1599 + limit=8;// 1R
1600 +
1601 + for (i=0; i<limit; i++) {
1602 + if (psta_ht->ht_cap.supp_mcs_set[i/8] & BIT(i%8))
1603 + tx_ra_bitmap |= BIT(i+12);
1604 + }
1605 +
1606 + //max short GI rate
1607 + shortGIrate = psta_ht->sgi;
1608 + }
1609 +
1610 +
1611 +#if 0//gtest
1612 + if(get_rf_mimo_mode(padapter) == RTL8712_RF_2T2R)
1613 + {
1614 + //is this a 2r STA?
1615 + if((pstat->tx_ra_bitmap & 0x0ff00000) != 0 && !(priv->pshare->has_2r_sta & BIT(pstat->aid)))
1616 + {
1617 + priv->pshare->has_2r_sta |= BIT(pstat->aid);
1618 + if(rtw_read16(padapter, 0x102501f6) != 0xffff)
1619 + {
1620 + rtw_write16(padapter, 0x102501f6, 0xffff);
1621 + reset_1r_sta_RA(priv, 0xffff);
1622 + Switch_1SS_Antenna(priv, 3);
1623 + }
1624 + }
1625 + else// bg or 1R STA?
1626 + {
1627 + if((priv->pmib->dot11BssType.net_work_type & WIRELESS_11N) && pstat->ht_cap_len && priv->pshare->has_2r_sta == 0)
1628 + {
1629 + if(rtw_read16(padapter, 0x102501f6) != 0x7777)
1630 + { // MCS7 SGI
1631 + rtw_write16(padapter, 0x102501f6,0x7777);
1632 + reset_1r_sta_RA(priv, 0x7777);
1633 + Switch_1SS_Antenna(priv, 2);
1634 + }
1635 + }
1636 + }
1637 +
1638 + }
1639 +
1640 + if ((pstat->rssi_level < 1) || (pstat->rssi_level > 3))
1641 + {
1642 + if (pstat->rssi >= priv->pshare->rf_ft_var.raGoDownUpper)
1643 + pstat->rssi_level = 1;
1644 + else if ((pstat->rssi >= priv->pshare->rf_ft_var.raGoDown20MLower) ||
1645 + ((priv->pshare->is_40m_bw) && (pstat->ht_cap_len) &&
1646 + (pstat->rssi >= priv->pshare->rf_ft_var.raGoDown40MLower) &&
1647 + (pstat->ht_cap_buf.ht_cap_info & cpu_to_le16(_HTCAP_SUPPORT_CH_WDTH_))))
1648 + pstat->rssi_level = 2;
1649 + else
1650 + pstat->rssi_level = 3;
1651 + }
1652 +
1653 + // rate adaptive by rssi
1654 + if ((priv->pmib->dot11BssType.net_work_type & WIRELESS_11N) && pstat->ht_cap_len)
1655 + {
1656 + if ((get_rf_mimo_mode(priv) == MIMO_1T2R) || (get_rf_mimo_mode(priv) == MIMO_1T1R))
1657 + {
1658 + switch (pstat->rssi_level) {
1659 + case 1:
1660 + pstat->tx_ra_bitmap &= 0x100f0000;
1661 + break;
1662 + case 2:
1663 + pstat->tx_ra_bitmap &= 0x100ff000;
1664 + break;
1665 + case 3:
1666 + if (priv->pshare->is_40m_bw)
1667 + pstat->tx_ra_bitmap &= 0x100ff005;
1668 + else
1669 + pstat->tx_ra_bitmap &= 0x100ff001;
1670 +
1671 + break;
1672 + }
1673 + }
1674 + else
1675 + {
1676 + switch (pstat->rssi_level) {
1677 + case 1:
1678 + pstat->tx_ra_bitmap &= 0x1f0f0000;
1679 + break;
1680 + case 2:
1681 + pstat->tx_ra_bitmap &= 0x1f0ff000;
1682 + break;
1683 + case 3:
1684 + if (priv->pshare->is_40m_bw)
1685 + pstat->tx_ra_bitmap &= 0x000ff005;
1686 + else
1687 + pstat->tx_ra_bitmap &= 0x000ff001;
1688 +
1689 + break;
1690 + }
1691 +
1692 + // Don't need to mask high rates due to new rate adaptive parameters
1693 + //if (pstat->is_broadcom_sta) // use MCS12 as the highest rate vs. Broadcom sta
1694 + // pstat->tx_ra_bitmap &= 0x81ffffff;
1695 +
1696 + // NIC driver will report not supporting MCS15 and MCS14 in asoc req
1697 + //if (pstat->is_rtl8190_sta && !pstat->is_2t_mimo_sta)
1698 + // pstat->tx_ra_bitmap &= 0x83ffffff; // if Realtek 1x2 sta, don't use MCS15 and MCS14
1699 + }
1700 + }
1701 + else if ((priv->pmib->dot11BssType.net_work_type & WIRELESS_11G) && isErpSta(pstat))
1702 + {
1703 + switch (pstat->rssi_level) {
1704 + case 1:
1705 + pstat->tx_ra_bitmap &= 0x00000f00;
1706 + break;
1707 + case 2:
1708 + pstat->tx_ra_bitmap &= 0x00000ff0;
1709 + break;
1710 + case 3:
1711 + pstat->tx_ra_bitmap &= 0x00000ff5;
1712 + break;
1713 + }
1714 + }
1715 + else
1716 + {
1717 + pstat->tx_ra_bitmap &= 0x0000000d;
1718 + }
1719 +
1720 + // disable tx short GI when station cannot rx MCS15(AP is 2T2R)
1721 + // disable tx short GI when station cannot rx MCS7 (AP is 1T2R or 1T1R)
1722 + // if there is only 1r STA and we are 2T2R, DO NOT mask SGI rate
1723 + if ((!(pstat->tx_ra_bitmap & 0x8000000) && (priv->pshare->has_2r_sta > 0) && (get_rf_mimo_mode(padapter) == RTL8712_RF_2T2R)) ||
1724 + (!(pstat->tx_ra_bitmap & 0x80000) && (get_rf_mimo_mode(padapter) != RTL8712_RF_2T2R)))
1725 + {
1726 + pstat->tx_ra_bitmap &= ~BIT(28);
1727 + }
1728 +#endif
1729 +
1730 + if ( pcur_network->Configuration.DSConfig > 14 ) {
1731 + // 5G band
1732 + if (tx_ra_bitmap & 0xffff000)
1733 + sta_band |= WIRELESS_11_5N | WIRELESS_11A;
1734 + else
1735 + sta_band |= WIRELESS_11A;
1736 + } else {
1737 + if (tx_ra_bitmap & 0xffff000)
1738 + sta_band |= WIRELESS_11_24N | WIRELESS_11G | WIRELESS_11B;
1739 + else if (tx_ra_bitmap & 0xff0)
1740 + sta_band |= WIRELESS_11G |WIRELESS_11B;
1741 + else
1742 + sta_band |= WIRELESS_11B;
1743 + }
1744 +
1745 + raid = networktype_to_raid(sta_band);
1746 + init_rate = get_highest_rate_idx(tx_ra_bitmap&0x0fffffff)&0x3f;
1747 +
1748 + if (psta->aid < NUM_STA)
1749 + {
1750 + u8 arg = 0;
1751 +
1752 + arg = psta->mac_id&0x1f;
1753 +
1754 + arg |= BIT(7);//support entry 2~31
1755 +
1756 + if (shortGIrate==_TRUE)
1757 + arg |= BIT(5);
1758 +
1759 + tx_ra_bitmap |= ((raid<<28)&0xf0000000);
1760 +
1761 + DBG_871X("%s=> mac_id:%d , raid:%d , bitmap=0x%x, arg=0x%x\n",
1762 + __FUNCTION__ , psta->mac_id, raid ,tx_ra_bitmap, arg);
1763 +
1764 + //bitmap[0:27] = tx_rate_bitmap
1765 + //bitmap[28:31]= Rate Adaptive id
1766 + //arg[0:4] = macid
1767 + //arg[5] = Short GI
1768 + rtw_hal_add_ra_tid(padapter, tx_ra_bitmap, arg);
1769 +
1770 + if (shortGIrate==_TRUE)
1771 + init_rate |= BIT(6);
1772 +
1773 + //set ra_id, init_rate
1774 + psta->raid = raid;
1775 + psta->init_rate = init_rate;
1776 +
1777 + }
1778 + else
1779 + {
1780 + DBG_871X("station aid %d exceed the max number\n", psta->aid);
1781 + }
1782 +
1783 +}
1784 +
1785 +static void update_bmc_sta(_adapter *padapter)
1786 +{
1787 + _irqL irqL;
1788 + u32 init_rate=0;
1789 + unsigned char network_type, raid;
1790 + int i, supportRateNum = 0;
1791 + unsigned int tx_ra_bitmap=0;
1792 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
1793 + WLAN_BSSID_EX *pcur_network = (WLAN_BSSID_EX *)&pmlmepriv->cur_network.network;
1794 + struct sta_info *psta = rtw_get_bcmc_stainfo(padapter);
1795 +
1796 + if(psta)
1797 + {
1798 + psta->aid = 0;//default set to 0
1799 + //psta->mac_id = psta->aid+4;
1800 + psta->mac_id = psta->aid + 1;
1801 +
1802 + psta->qos_option = 0;
1803 + psta->htpriv.ht_option = _FALSE;
1804 +
1805 + psta->ieee8021x_blocked = 0;
1806 +
1807 + _rtw_memset((void*)&psta->sta_stats, 0, sizeof(struct stainfo_stats));
1808 +
1809 + //psta->dot118021XPrivacy = _NO_PRIVACY_;//!!! remove it, because it has been set before this.
1810 +
1811 +
1812 +
1813 + //prepare for add_RATid
1814 + supportRateNum = rtw_get_rateset_len((u8*)&pcur_network->SupportedRates);
1815 + network_type = rtw_check_network_type((u8*)&pcur_network->SupportedRates, supportRateNum, 1);
1816 +
1817 + _rtw_memcpy(psta->bssrateset, &pcur_network->SupportedRates, supportRateNum);
1818 + psta->bssratelen = supportRateNum;
1819 +
1820 + //b/g mode ra_bitmap
1821 + for (i=0; i<supportRateNum; i++)
1822 + {
1823 + if (psta->bssrateset[i])
1824 + tx_ra_bitmap |= rtw_get_bit_value_from_ieee_value(psta->bssrateset[i]&0x7f);
1825 + }
1826 +
1827 + if ( pcur_network->Configuration.DSConfig > 14 ) {
1828 + //force to A mode. 5G doesn't support CCK rates
1829 + network_type = WIRELESS_11A;
1830 + tx_ra_bitmap = 0x150; // 6, 12, 24 Mbps
1831 + } else {
1832 + //force to b mode
1833 + network_type = WIRELESS_11B;
1834 + tx_ra_bitmap = 0xf;
1835 + }
1836 +
1837 + //tx_ra_bitmap = update_basic_rate(pcur_network->SupportedRates, supportRateNum);
1838 +
1839 + raid = networktype_to_raid(network_type);
1840 + init_rate = get_highest_rate_idx(tx_ra_bitmap&0x0fffffff)&0x3f;
1841 +
1842 + //DBG_871X("Add id %d val %08x to ratr for bmc sta\n", psta->aid, tx_ra_bitmap);
1843 +
1844 + //if(pHalData->fw_ractrl == _TRUE)
1845 + {
1846 + u8 arg = 0;
1847 +
1848 + arg = psta->mac_id&0x1f;
1849 +
1850 + arg |= BIT(7);
1851 +
1852 + //if (shortGIrate==_TRUE)
1853 + // arg |= BIT(5);
1854 +
1855 + tx_ra_bitmap |= ((raid<<28)&0xf0000000);
1856 +
1857 + DBG_871X("update_bmc_sta, mask=0x%x, arg=0x%x\n", tx_ra_bitmap, arg);
1858 +
1859 + //bitmap[0:27] = tx_rate_bitmap
1860 + //bitmap[28:31]= Rate Adaptive id
1861 + //arg[0:4] = macid
1862 + //arg[5] = Short GI
1863 + rtw_hal_add_ra_tid(padapter, tx_ra_bitmap, arg);
1864 +
1865 + }
1866 +
1867 + //set ra_id, init_rate
1868 + psta->raid = raid;
1869 + psta->init_rate = init_rate;
1870 +
1871 + _enter_critical_bh(&psta->lock, &irqL);
1872 + psta->state = _FW_LINKED;
1873 + _exit_critical_bh(&psta->lock, &irqL);
1874 +
1875 + }
1876 + else
1877 + {
1878 + DBG_871X("add_RATid_bmc_sta error!\n");
1879 + }
1880 +
1881 +}
1882 +
1883 +//notes:
1884 +//AID: 1~MAX for sta and 0 for bc/mc in ap/adhoc mode
1885 +//MAC_ID = AID+1 for sta in ap/adhoc mode
1886 +//MAC_ID = 1 for bc/mc for sta/ap/adhoc
1887 +//MAC_ID = 0 for bssid for sta/ap/adhoc
1888 +//CAM_ID = //0~3 for default key, cmd_id=macid + 3, macid=aid+1;
1889 +
1890 +void update_sta_info_apmode(_adapter *padapter, struct sta_info *psta)
1891 +{
1892 + _irqL irqL;
1893 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
1894 + struct security_priv *psecuritypriv = &padapter->securitypriv;
1895 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
1896 + struct ht_priv *phtpriv_ap = &pmlmepriv->htpriv;
1897 + struct ht_priv *phtpriv_sta = &psta->htpriv;
1898 +
1899 + //set intf_tag to if1
1900 + //psta->intf_tag = 0;
1901 +
1902 + //psta->mac_id = psta->aid+4;
1903 + psta->mac_id = psta->aid+1;
1904 +
1905 + if(psecuritypriv->dot11AuthAlgrthm==dot11AuthAlgrthm_8021X)
1906 + psta->ieee8021x_blocked = _TRUE;
1907 + else
1908 + psta->ieee8021x_blocked = _FALSE;
1909 +
1910 +
1911 + //update sta's cap
1912 +
1913 + //ERP
1914 + VCS_update(padapter, psta);
1915 +
1916 + //HT related cap
1917 + if(phtpriv_sta->ht_option)
1918 + {
1919 + //check if sta supports rx ampdu
1920 + phtpriv_sta->ampdu_enable = phtpriv_ap->ampdu_enable;
1921 +
1922 + //check if sta support s Short GI
1923 + if((phtpriv_sta->ht_cap.cap_info & phtpriv_ap->ht_cap.cap_info) & cpu_to_le16(IEEE80211_HT_CAP_SGI_20|IEEE80211_HT_CAP_SGI_40))
1924 + {
1925 + phtpriv_sta->sgi = _TRUE;
1926 + }
1927 +
1928 + // bwmode
1929 + if((phtpriv_sta->ht_cap.cap_info & phtpriv_ap->ht_cap.cap_info) & cpu_to_le16(IEEE80211_HT_CAP_SUP_WIDTH))
1930 + {
1931 + //phtpriv_sta->bwmode = HT_CHANNEL_WIDTH_40;
1932 + phtpriv_sta->bwmode = pmlmeext->cur_bwmode;
1933 + phtpriv_sta->ch_offset = pmlmeext->cur_ch_offset;
1934 +
1935 + }
1936 +
1937 + psta->qos_option = _TRUE;
1938 +
1939 + }
1940 + else
1941 + {
1942 + phtpriv_sta->ampdu_enable = _FALSE;
1943 +
1944 + phtpriv_sta->sgi = _FALSE;
1945 + phtpriv_sta->bwmode = HT_CHANNEL_WIDTH_20;
1946 + phtpriv_sta->ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
1947 + }
1948 +
1949 + //Rx AMPDU
1950 + send_delba(padapter, 0, psta->hwaddr);// recipient
1951 +
1952 + //TX AMPDU
1953 + send_delba(padapter, 1, psta->hwaddr);// // originator
1954 + phtpriv_sta->agg_enable_bitmap = 0x0;//reset
1955 + phtpriv_sta->candidate_tid_bitmap = 0x0;//reset
1956 +
1957 +
1958 + //todo: init other variables
1959 +
1960 + _rtw_memset((void*)&psta->sta_stats, 0, sizeof(struct stainfo_stats));
1961 +
1962 +
1963 + //add ratid
1964 + //add_RATid(padapter, psta);//move to ap_sta_info_defer_update()
1965 +
1966 +
1967 + _enter_critical_bh(&psta->lock, &irqL);
1968 + psta->state |= _FW_LINKED;
1969 + _exit_critical_bh(&psta->lock, &irqL);
1970 +
1971 +
1972 +}
1973 +
1974 +static void update_hw_ht_param(_adapter *padapter)
1975 +{
1976 + unsigned char max_AMPDU_len;
1977 + unsigned char min_MPDU_spacing;
1978 + struct registry_priv *pregpriv = &padapter->registrypriv;
1979 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
1980 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
1981 +
1982 + DBG_871X("%s\n", __FUNCTION__);
1983 +
1984 +
1985 + //handle A-MPDU parameter field
1986 + /*
1987 + AMPDU_para [1:0]:Max AMPDU Len => 0:8k , 1:16k, 2:32k, 3:64k
1988 + AMPDU_para [4:2]:Min MPDU Start Spacing
1989 + */
1990 + max_AMPDU_len = pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x03;
1991 +
1992 + min_MPDU_spacing = (pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x1c) >> 2;
1993 +
1994 + rtw_hal_set_hwreg(padapter, HW_VAR_AMPDU_MIN_SPACE, (u8 *)(&min_MPDU_spacing));
1995 +
1996 + rtw_hal_set_hwreg(padapter, HW_VAR_AMPDU_FACTOR, (u8 *)(&max_AMPDU_len));
1997 +
1998 + //
1999 + // Config SM Power Save setting
2000 + //
2001 + pmlmeinfo->SM_PS = (pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info & 0x0C) >> 2;
2002 + if(pmlmeinfo->SM_PS == WLAN_HT_CAP_SM_PS_STATIC)
2003 + {
2004 + /*u8 i;
2005 + //update the MCS rates
2006 + for (i = 0; i < 16; i++)
2007 + {
2008 + pmlmeinfo->HT_caps.HT_cap_element.MCS_rate[i] &= MCS_rate_1R[i];
2009 + }*/
2010 + DBG_871X("%s(): WLAN_HT_CAP_SM_PS_STATIC\n",__FUNCTION__);
2011 + }
2012 +
2013 + //
2014 + // Config current HT Protection mode.
2015 + //
2016 + //pmlmeinfo->HT_protection = pmlmeinfo->HT_info.infos[1] & 0x3;
2017 +
2018 +}
2019 +
2020 +static void start_bss_network(_adapter *padapter, u8 *pbuf)
2021 +{
2022 + u8 *p;
2023 + u8 val8, cur_channel, cur_bwmode, cur_ch_offset;
2024 + u16 bcn_interval;
2025 + u32 acparm;
2026 + int ie_len;
2027 + struct registry_priv *pregpriv = &padapter->registrypriv;
2028 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
2029 + struct security_priv* psecuritypriv=&(padapter->securitypriv);
2030 + WLAN_BSSID_EX *pnetwork = (WLAN_BSSID_EX *)&pmlmepriv->cur_network.network;
2031 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
2032 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
2033 + WLAN_BSSID_EX *pnetwork_mlmeext = &(pmlmeinfo->network);
2034 + struct HT_info_element *pht_info=NULL;
2035 +#ifdef CONFIG_P2P
2036 + struct wifidirect_info *pwdinfo = &(padapter->wdinfo);
2037 +#endif //CONFIG_P2P
2038 + u8 cbw40_enable=0;
2039 + u8 change_band = _FALSE;
2040 + //DBG_871X("%s\n", __FUNCTION__);
2041 +
2042 + bcn_interval = (u16)pnetwork->Configuration.BeaconPeriod;
2043 + cur_channel = pnetwork->Configuration.DSConfig;
2044 + cur_bwmode = HT_CHANNEL_WIDTH_20;;
2045 + cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
2046 +
2047 +
2048 + //check if there is wps ie,
2049 + //if there is wpsie in beacon, the hostapd will update beacon twice when stating hostapd,
2050 + //and at first time the security ie ( RSN/WPA IE) will not include in beacon.
2051 + if(NULL == rtw_get_wps_ie(pnetwork->IEs+_FIXED_IE_LENGTH_, pnetwork->IELength-_FIXED_IE_LENGTH_, NULL, NULL))
2052 + {
2053 + pmlmeext->bstart_bss = _TRUE;
2054 + }
2055 +
2056 + //todo: update wmm, ht cap
2057 + //pmlmeinfo->WMM_enable;
2058 + //pmlmeinfo->HT_enable;
2059 + if(pmlmepriv->qospriv.qos_option)
2060 + pmlmeinfo->WMM_enable = _TRUE;
2061 +
2062 + if(pmlmepriv->htpriv.ht_option)
2063 + {
2064 + pmlmeinfo->WMM_enable = _TRUE;
2065 + pmlmeinfo->HT_enable = _TRUE;
2066 + //pmlmeinfo->HT_info_enable = _TRUE;
2067 + //pmlmeinfo->HT_caps_enable = _TRUE;
2068 +
2069 + update_hw_ht_param(padapter);
2070 + }
2071 +
2072 +
2073 + if(pmlmepriv->cur_network.join_res != _TRUE) //setting only at first time
2074 + {
2075 + //WEP Key will be set before this function, do not clear CAM.
2076 + if ((psecuritypriv->dot11PrivacyAlgrthm != _WEP40_) && (psecuritypriv->dot11PrivacyAlgrthm != _WEP104_))
2077 + flush_all_cam_entry(padapter); //clear CAM
2078 + }
2079 +
2080 + //set MSR to AP_Mode
2081 + Set_MSR(padapter, _HW_STATE_AP_);
2082 +
2083 + //Set BSSID REG
2084 + rtw_hal_set_hwreg(padapter, HW_VAR_BSSID, pnetwork->MacAddress);
2085 +
2086 + //Set EDCA param reg
2087 +#ifdef CONFIG_CONCURRENT_MODE
2088 + acparm = 0x005ea42b;
2089 +#else
2090 + acparm = 0x002F3217; // VO
2091 +#endif
2092 + rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_VO, (u8 *)(&acparm));
2093 + acparm = 0x005E4317; // VI
2094 + rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_VI, (u8 *)(&acparm));
2095 + //acparm = 0x00105320; // BE
2096 + acparm = 0x005ea42b;
2097 + rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_BE, (u8 *)(&acparm));
2098 + acparm = 0x0000A444; // BK
2099 + rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_BK, (u8 *)(&acparm));
2100 +
2101 + //Set Security
2102 + val8 = (psecuritypriv->dot11AuthAlgrthm == dot11AuthAlgrthm_8021X)? 0xcc: 0xcf;
2103 + rtw_hal_set_hwreg(padapter, HW_VAR_SEC_CFG, (u8 *)(&val8));
2104 +
2105 + //Beacon Control related register
2106 + rtw_hal_set_hwreg(padapter, HW_VAR_BEACON_INTERVAL, (u8 *)(&bcn_interval));
2107 +
2108 + if(pmlmepriv->cur_network.join_res != _TRUE) //setting only at first time
2109 + {
2110 + u32 initialgain;
2111 +
2112 + initialgain = 0x1e;
2113 +
2114 +
2115 + //disable dynamic functions, such as high power, DIG
2116 + //Save_DM_Func_Flag(padapter);
2117 + //Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);
2118 +
2119 +#ifdef CONFIG_CONCURRENT_MODE
2120 + if(padapter->adapter_type > PRIMARY_ADAPTER)
2121 + {
2122 + if(rtw_buddy_adapter_up(padapter))
2123 + {
2124 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
2125 +
2126 + //turn on dynamic functions on PRIMARY_ADAPTER, dynamic functions only runs at PRIMARY_ADAPTER
2127 + Switch_DM_Func(pbuddy_adapter, DYNAMIC_FUNC_DIG|DYNAMIC_FUNC_HP|DYNAMIC_FUNC_SS, _TRUE);
2128 +
2129 + rtw_hal_set_hwreg(pbuddy_adapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));
2130 + }
2131 + }
2132 + else
2133 +#endif
2134 + {
2135 + //turn on dynamic functions
2136 + Switch_DM_Func(padapter, DYNAMIC_FUNC_DIG|DYNAMIC_FUNC_HP|DYNAMIC_FUNC_SS, _TRUE);
2137 +
2138 + rtw_hal_set_hwreg(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));
2139 + }
2140 +
2141 + }
2142 +
2143 + //set channel, bwmode
2144 + p = rtw_get_ie((pnetwork->IEs + sizeof(NDIS_802_11_FIXED_IEs)), _HT_ADD_INFO_IE_, &ie_len, (pnetwork->IELength - sizeof(NDIS_802_11_FIXED_IEs)));
2145 + if( p && ie_len)
2146 + {
2147 + pht_info = (struct HT_info_element *)(p+2);
2148 +
2149 + if( pmlmeext->cur_channel > 14 )
2150 + {
2151 + if( pregpriv->cbw40_enable & BIT(1) )
2152 + cbw40_enable = 1;
2153 + }
2154 + else
2155 + if( pregpriv->cbw40_enable & BIT(0) )
2156 + cbw40_enable = 1;
2157 +
2158 + if ((cbw40_enable) && (pht_info->infos[0] & BIT(2)))
2159 + {
2160 + //switch to the 40M Hz mode
2161 + //pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40;
2162 + cur_bwmode = HT_CHANNEL_WIDTH_40;
2163 + switch (pht_info->infos[0] & 0x3)
2164 + {
2165 + case 1:
2166 + //pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
2167 + cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
2168 + break;
2169 +
2170 + case 3:
2171 + //pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
2172 + cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
2173 + break;
2174 +
2175 + default:
2176 + //pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
2177 + cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
2178 + break;
2179 + }
2180 +
2181 + }
2182 +
2183 + }
2184 +
2185 +#ifdef CONFIG_DUALMAC_CONCURRENT
2186 + dc_set_ap_channel_bandwidth(padapter, cur_channel, cur_ch_offset, cur_bwmode);
2187 +#else
2188 + //TODO: need to judge the phy parameters on concurrent mode for single phy
2189 + //set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
2190 +#ifdef CONFIG_CONCURRENT_MODE
2191 + if(!check_buddy_fwstate(padapter, _FW_LINKED|_FW_UNDER_LINKING|_FW_UNDER_SURVEY))
2192 + {
2193 + set_channel_bwmode(padapter, cur_channel, cur_ch_offset, cur_bwmode);
2194 + }
2195 + else if(check_buddy_fwstate(padapter, _FW_LINKED)==_TRUE)//only second adapter can enter AP Mode
2196 + {
2197 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
2198 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
2199 +
2200 + //To sync cur_channel/cur_bwmode/cur_ch_offset with primary adapter
2201 + DBG_871X("primary iface is at linked state, sync cur_channel/cur_bwmode/cur_ch_offset\n");
2202 + DBG_871X("primary adapter, CH=%d, BW=%d, offset=%d\n", pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_bwmode, pbuddy_mlmeext->cur_ch_offset);
2203 + DBG_871X("second adapter, CH=%d, BW=%d, offset=%d\n", cur_channel, cur_bwmode, cur_ch_offset);
2204 +
2205 + if((cur_channel <= 14 && pbuddy_mlmeext->cur_channel >= 36) ||
2206 + (cur_channel >= 36 && pbuddy_mlmeext->cur_channel <= 14))
2207 + change_band = _TRUE;
2208 +
2209 + cur_channel = pbuddy_mlmeext->cur_channel;
2210 + if(cur_bwmode == HT_CHANNEL_WIDTH_40)
2211 + {
2212 + if(pht_info)
2213 + pht_info->infos[0] &= ~(BIT(0)|BIT(1));
2214 +
2215 + if(pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40)
2216 + {
2217 + cur_ch_offset = pbuddy_mlmeext->cur_ch_offset;
2218 +
2219 + //to update cur_ch_offset value in beacon
2220 + if(pht_info)
2221 + {
2222 + switch(cur_ch_offset)
2223 + {
2224 + case HAL_PRIME_CHNL_OFFSET_LOWER:
2225 + pht_info->infos[0] |= 0x1;
2226 + break;
2227 + case HAL_PRIME_CHNL_OFFSET_UPPER:
2228 + pht_info->infos[0] |= 0x3;
2229 + break;
2230 + case HAL_PRIME_CHNL_OFFSET_DONT_CARE:
2231 + default:
2232 + break;
2233 + }
2234 + }
2235 +
2236 + }
2237 + else if(pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_20)
2238 + {
2239 + cur_bwmode = HT_CHANNEL_WIDTH_20;
2240 + cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
2241 +
2242 + if(cur_channel>0 && cur_channel<5)
2243 + {
2244 + if(pht_info)
2245 + pht_info->infos[0] |= 0x1;
2246 +
2247 + cur_bwmode = HT_CHANNEL_WIDTH_40;
2248 + cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
2249 + }
2250 +
2251 + if(cur_channel>7 && cur_channel<(14+1))
2252 + {
2253 + if(pht_info)
2254 + pht_info->infos[0] |= 0x3;
2255 +
2256 + cur_bwmode = HT_CHANNEL_WIDTH_40;
2257 + cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
2258 + }
2259 +
2260 + set_channel_bwmode(padapter, cur_channel, cur_ch_offset, cur_bwmode);
2261 + }
2262 +
2263 + }
2264 +
2265 + // to update channel value in beacon
2266 + pnetwork->Configuration.DSConfig = cur_channel;
2267 + p = rtw_get_ie((pnetwork->IEs + sizeof(NDIS_802_11_FIXED_IEs)), _DSSET_IE_, &ie_len, (pnetwork->IELength - sizeof(NDIS_802_11_FIXED_IEs)));
2268 + if(p && ie_len>0)
2269 + *(p + 2) = cur_channel;
2270 +
2271 + if(pht_info)
2272 + pht_info->primary_channel = cur_channel;
2273 +
2274 + //set buddy adapter channel, bandwidth, offeset to current adapter
2275 + pmlmeext->cur_channel = cur_channel;
2276 + pmlmeext->cur_bwmode = cur_bwmode;
2277 + pmlmeext->cur_ch_offset = cur_ch_offset;
2278 +
2279 + //buddy interface band is different from current interface, update ERP, support rate, ext support rate IE
2280 + if(change_band == _TRUE)
2281 + change_band_update_ie(padapter, pnetwork);
2282 + }
2283 +#else
2284 + set_channel_bwmode(padapter, cur_channel, cur_ch_offset, cur_bwmode);
2285 +#endif //CONFIG_CONCURRENT_MODE
2286 +
2287 + DBG_871X("CH=%d, BW=%d, offset=%d\n", cur_channel, cur_bwmode, cur_ch_offset);
2288 +
2289 + //
2290 + pmlmeext->cur_channel = cur_channel;
2291 + pmlmeext->cur_bwmode = cur_bwmode;
2292 + pmlmeext->cur_ch_offset = cur_ch_offset;
2293 +#endif //CONFIG_DUALMAC_CONCURRENT
2294 + pmlmeext->cur_wireless_mode = pmlmepriv->cur_network.network_type;
2295 +
2296 + //update cur_wireless_mode
2297 + update_wireless_mode(padapter);
2298 +
2299 + //update RRSR after set channel and bandwidth
2300 + UpdateBrateTbl(padapter, pnetwork->SupportedRates);
2301 + rtw_hal_set_hwreg(padapter, HW_VAR_BASIC_RATE, pnetwork->SupportedRates);
2302 +
2303 + //udpate capability after cur_wireless_mode updated
2304 + update_capinfo(padapter, rtw_get_capability((WLAN_BSSID_EX *)pnetwork));
2305 +
2306 + //let pnetwork_mlmeext == pnetwork_mlme.
2307 + _rtw_memcpy(pnetwork_mlmeext, pnetwork, pnetwork->Length);
2308 +
2309 +#ifdef CONFIG_P2P
2310 + _rtw_memcpy(pwdinfo->p2p_group_ssid, pnetwork->Ssid.Ssid, pnetwork->Ssid.SsidLength);
2311 + pwdinfo->p2p_group_ssid_len = pnetwork->Ssid.SsidLength;
2312 +#endif //CONFIG_P2P
2313 +
2314 + if(_TRUE == pmlmeext->bstart_bss)
2315 + {
2316 + update_beacon(padapter, _TIM_IE_, NULL, _FALSE);
2317 +
2318 +#ifndef CONFIG_INTERRUPT_BASED_TXBCN //other case will tx beacon when bcn interrupt coming in.
2319 +#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
2320 + //issue beacon frame
2321 + if(send_beacon(padapter)==_FAIL)
2322 + {
2323 + DBG_871X("issue_beacon, fail!\n");
2324 + }
2325 +#endif
2326 +#endif //!CONFIG_INTERRUPT_BASED_TXBCN
2327 +
2328 + }
2329 +
2330 +
2331 + //update bc/mc sta_info
2332 + update_bmc_sta(padapter);
2333 +
2334 + //pmlmeext->bstart_bss = _TRUE;
2335 +
2336 +}
2337 +
2338 +int rtw_check_beacon_data(_adapter *padapter, u8 *pbuf, int len)
2339 +{
2340 + int ret=_SUCCESS;
2341 + u8 *p;
2342 + u8 *pHT_caps_ie=NULL;
2343 + u8 *pHT_info_ie=NULL;
2344 + struct sta_info *psta = NULL;
2345 + u16 cap, ht_cap=_FALSE;
2346 + uint ie_len = 0;
2347 + int group_cipher, pairwise_cipher;
2348 + u8 channel, network_type, supportRate[NDIS_802_11_LENGTH_RATES_EX];
2349 + int supportRateNum = 0;
2350 + u8 OUI1[] = {0x00, 0x50, 0xf2,0x01};
2351 + u8 wps_oui[4]={0x0,0x50,0xf2,0x04};
2352 + u8 WMM_PARA_IE[] = {0x00, 0x50, 0xf2, 0x02, 0x01, 0x01};
2353 + struct registry_priv *pregistrypriv = &padapter->registrypriv;
2354 + struct security_priv *psecuritypriv = &padapter->securitypriv;
2355 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
2356 + WLAN_BSSID_EX *pbss_network = (WLAN_BSSID_EX *)&pmlmepriv->cur_network.network;
2357 + struct sta_priv *pstapriv = &padapter->stapriv;
2358 + u8 *ie = pbss_network->IEs;
2359 +
2360 +
2361 + /* SSID */
2362 + /* Supported rates */
2363 + /* DS Params */
2364 + /* WLAN_EID_COUNTRY */
2365 + /* ERP Information element */
2366 + /* Extended supported rates */
2367 + /* WPA/WPA2 */
2368 + /* Wi-Fi Wireless Multimedia Extensions */
2369 + /* ht_capab, ht_oper */
2370 + /* WPS IE */
2371 +
2372 + DBG_871X("%s, len=%d\n", __FUNCTION__, len);
2373 +
2374 + if(check_fwstate(pmlmepriv, WIFI_AP_STATE) != _TRUE)
2375 + return _FAIL;
2376 +
2377 +
2378 + if(len>MAX_IE_SZ)
2379 + return _FAIL;
2380 +
2381 + pbss_network->IELength = len;
2382 +
2383 + _rtw_memset(ie, 0, MAX_IE_SZ);
2384 +
2385 + _rtw_memcpy(ie, pbuf, pbss_network->IELength);
2386 +
2387 +
2388 + if(pbss_network->InfrastructureMode!=Ndis802_11APMode)
2389 + return _FAIL;
2390 +
2391 + pbss_network->Rssi = 0;
2392 +
2393 + _rtw_memcpy(pbss_network->MacAddress, myid(&(padapter->eeprompriv)), ETH_ALEN);
2394 +
2395 + //beacon interval
2396 + p = rtw_get_beacon_interval_from_ie(ie);//ie + 8; // 8: TimeStamp, 2: Beacon Interval 2:Capability
2397 + //pbss_network->Configuration.BeaconPeriod = le16_to_cpu(*(unsigned short*)p);
2398 + pbss_network->Configuration.BeaconPeriod = RTW_GET_LE16(p);
2399 +
2400 + //capability
2401 + //cap = *(unsigned short *)rtw_get_capability_from_ie(ie);
2402 + //cap = le16_to_cpu(cap);
2403 + cap = RTW_GET_LE16(ie);
2404 +
2405 + //SSID
2406 + p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _SSID_IE_, &ie_len, (pbss_network->IELength -_BEACON_IE_OFFSET_));
2407 + if(p && ie_len>0)
2408 + {
2409 + _rtw_memset(&pbss_network->Ssid, 0, sizeof(NDIS_802_11_SSID));
2410 + _rtw_memcpy(pbss_network->Ssid.Ssid, (p + 2), ie_len);
2411 + pbss_network->Ssid.SsidLength = ie_len;
2412 + }
2413 +
2414 + //chnnel
2415 + channel = 0;
2416 + pbss_network->Configuration.Length = 0;
2417 + p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _DSSET_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
2418 + if(p && ie_len>0)
2419 + channel = *(p + 2);
2420 +
2421 + pbss_network->Configuration.DSConfig = channel;
2422 +
2423 +
2424 + _rtw_memset(supportRate, 0, NDIS_802_11_LENGTH_RATES_EX);
2425 + // get supported rates
2426 + p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _SUPPORTEDRATES_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
2427 + if (p != NULL)
2428 + {
2429 + _rtw_memcpy(supportRate, p+2, ie_len);
2430 + supportRateNum = ie_len;
2431 + }
2432 +
2433 + //get ext_supported rates
2434 + p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _EXT_SUPPORTEDRATES_IE_, &ie_len, pbss_network->IELength - _BEACON_IE_OFFSET_);
2435 + if (p != NULL)
2436 + {
2437 + _rtw_memcpy(supportRate+supportRateNum, p+2, ie_len);
2438 + supportRateNum += ie_len;
2439 +
2440 + }
2441 +
2442 + network_type = rtw_check_network_type(supportRate, supportRateNum, channel);
2443 +
2444 + rtw_set_supported_rate(pbss_network->SupportedRates, network_type);
2445 +
2446 +
2447 + //parsing ERP_IE
2448 + p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _ERPINFO_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
2449 + if(p && ie_len>0)
2450 + {
2451 + ERP_IE_handler(padapter, (PNDIS_802_11_VARIABLE_IEs)p);
2452 + }
2453 +
2454 + //update privacy/security
2455 + if (cap & BIT(4))
2456 + pbss_network->Privacy = 1;
2457 + else
2458 + pbss_network->Privacy = 0;
2459 +
2460 + psecuritypriv->wpa_psk = 0;
2461 +
2462 + //wpa2
2463 + group_cipher = 0; pairwise_cipher = 0;
2464 + psecuritypriv->wpa2_group_cipher = _NO_PRIVACY_;
2465 + psecuritypriv->wpa2_pairwise_cipher = _NO_PRIVACY_;
2466 + p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _RSN_IE_2_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
2467 + if(p && ie_len>0)
2468 + {
2469 + if(rtw_parse_wpa2_ie(p, ie_len+2, &group_cipher, &pairwise_cipher) == _SUCCESS)
2470 + {
2471 + psecuritypriv->dot11AuthAlgrthm= dot11AuthAlgrthm_8021X;
2472 +
2473 + psecuritypriv->dot8021xalg = 1;//psk, todo:802.1x
2474 + psecuritypriv->wpa_psk |= BIT(1);
2475 +
2476 + psecuritypriv->wpa2_group_cipher = group_cipher;
2477 + psecuritypriv->wpa2_pairwise_cipher = pairwise_cipher;
2478 +#if 0
2479 + switch(group_cipher)
2480 + {
2481 + case WPA_CIPHER_NONE:
2482 + psecuritypriv->wpa2_group_cipher = _NO_PRIVACY_;
2483 + break;
2484 + case WPA_CIPHER_WEP40:
2485 + psecuritypriv->wpa2_group_cipher = _WEP40_;
2486 + break;
2487 + case WPA_CIPHER_TKIP:
2488 + psecuritypriv->wpa2_group_cipher = _TKIP_;
2489 + break;
2490 + case WPA_CIPHER_CCMP:
2491 + psecuritypriv->wpa2_group_cipher = _AES_;
2492 + break;
2493 + case WPA_CIPHER_WEP104:
2494 + psecuritypriv->wpa2_group_cipher = _WEP104_;
2495 + break;
2496 + }
2497 +
2498 + switch(pairwise_cipher)
2499 + {
2500 + case WPA_CIPHER_NONE:
2501 + psecuritypriv->wpa2_pairwise_cipher = _NO_PRIVACY_;
2502 + break;
2503 + case WPA_CIPHER_WEP40:
2504 + psecuritypriv->wpa2_pairwise_cipher = _WEP40_;
2505 + break;
2506 + case WPA_CIPHER_TKIP:
2507 + psecuritypriv->wpa2_pairwise_cipher = _TKIP_;
2508 + break;
2509 + case WPA_CIPHER_CCMP:
2510 + psecuritypriv->wpa2_pairwise_cipher = _AES_;
2511 + break;
2512 + case WPA_CIPHER_WEP104:
2513 + psecuritypriv->wpa2_pairwise_cipher = _WEP104_;
2514 + break;
2515 + }
2516 +#endif
2517 + }
2518 +
2519 + }
2520 +
2521 + //wpa
2522 + ie_len = 0;
2523 + group_cipher = 0; pairwise_cipher = 0;
2524 + psecuritypriv->wpa_group_cipher = _NO_PRIVACY_;
2525 + psecuritypriv->wpa_pairwise_cipher = _NO_PRIVACY_;
2526 + for (p = ie + _BEACON_IE_OFFSET_; ;p += (ie_len + 2))
2527 + {
2528 + p = rtw_get_ie(p, _SSN_IE_1_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_ - (ie_len + 2)));
2529 + if ((p) && (_rtw_memcmp(p+2, OUI1, 4)))
2530 + {
2531 + if(rtw_parse_wpa_ie(p, ie_len+2, &group_cipher, &pairwise_cipher) == _SUCCESS)
2532 + {
2533 + psecuritypriv->dot11AuthAlgrthm= dot11AuthAlgrthm_8021X;
2534 +
2535 + psecuritypriv->dot8021xalg = 1;//psk, todo:802.1x
2536 +
2537 + psecuritypriv->wpa_psk |= BIT(0);
2538 +
2539 + psecuritypriv->wpa_group_cipher = group_cipher;
2540 + psecuritypriv->wpa_pairwise_cipher = pairwise_cipher;
2541 +
2542 +#if 0
2543 + switch(group_cipher)
2544 + {
2545 + case WPA_CIPHER_NONE:
2546 + psecuritypriv->wpa_group_cipher = _NO_PRIVACY_;
2547 + break;
2548 + case WPA_CIPHER_WEP40:
2549 + psecuritypriv->wpa_group_cipher = _WEP40_;
2550 + break;
2551 + case WPA_CIPHER_TKIP:
2552 + psecuritypriv->wpa_group_cipher = _TKIP_;
2553 + break;
2554 + case WPA_CIPHER_CCMP:
2555 + psecuritypriv->wpa_group_cipher = _AES_;
2556 + break;
2557 + case WPA_CIPHER_WEP104:
2558 + psecuritypriv->wpa_group_cipher = _WEP104_;
2559 + break;
2560 + }
2561 +
2562 + switch(pairwise_cipher)
2563 + {
2564 + case WPA_CIPHER_NONE:
2565 + psecuritypriv->wpa_pairwise_cipher = _NO_PRIVACY_;
2566 + break;
2567 + case WPA_CIPHER_WEP40:
2568 + psecuritypriv->wpa_pairwise_cipher = _WEP40_;
2569 + break;
2570 + case WPA_CIPHER_TKIP:
2571 + psecuritypriv->wpa_pairwise_cipher = _TKIP_;
2572 + break;
2573 + case WPA_CIPHER_CCMP:
2574 + psecuritypriv->wpa_pairwise_cipher = _AES_;
2575 + break;
2576 + case WPA_CIPHER_WEP104:
2577 + psecuritypriv->wpa_pairwise_cipher = _WEP104_;
2578 + break;
2579 + }
2580 +#endif
2581 + }
2582 +
2583 + break;
2584 +
2585 + }
2586 +
2587 + if ((p == NULL) || (ie_len == 0))
2588 + {
2589 + break;
2590 + }
2591 +
2592 + }
2593 +
2594 + //wmm
2595 + ie_len = 0;
2596 + pmlmepriv->qospriv.qos_option = 0;
2597 + if(pregistrypriv->wmm_enable)
2598 + {
2599 + for (p = ie + _BEACON_IE_OFFSET_; ;p += (ie_len + 2))
2600 + {
2601 + p = rtw_get_ie(p, _VENDOR_SPECIFIC_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_ - (ie_len + 2)));
2602 + if((p) && _rtw_memcmp(p+2, WMM_PARA_IE, 6))
2603 + {
2604 + pmlmepriv->qospriv.qos_option = 1;
2605 +
2606 + *(p+8) |= BIT(7);//QoS Info, support U-APSD
2607 +
2608 + /* disable all ACM bits since the WMM admission control is not supported */
2609 + *(p + 10) &= ~BIT(4); /* BE */
2610 + *(p + 14) &= ~BIT(4); /* BK */
2611 + *(p + 18) &= ~BIT(4); /* VI */
2612 + *(p + 22) &= ~BIT(4); /* VO */
2613 +
2614 + break;
2615 + }
2616 +
2617 + if ((p == NULL) || (ie_len == 0))
2618 + {
2619 + break;
2620 + }
2621 + }
2622 + }
2623 +
2624 + //parsing HT_CAP_IE
2625 + p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _HT_CAPABILITY_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
2626 + if(p && ie_len>0)
2627 + {
2628 + u8 rf_type;
2629 +
2630 + struct rtw_ieee80211_ht_cap *pht_cap = (struct rtw_ieee80211_ht_cap *)(p+2);
2631 +
2632 + pHT_caps_ie=p;
2633 +
2634 +
2635 + ht_cap = _TRUE;
2636 + network_type |= WIRELESS_11_24N;
2637 +
2638 +
2639 + rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
2640 +
2641 + if((psecuritypriv->wpa_pairwise_cipher & WPA_CIPHER_CCMP) ||
2642 + (psecuritypriv->wpa2_pairwise_cipher & WPA_CIPHER_CCMP))
2643 + {
2644 + pht_cap->ampdu_params_info |= (IEEE80211_HT_CAP_AMPDU_DENSITY&(0x07<<2));
2645 + }
2646 + else
2647 + {
2648 + pht_cap->ampdu_params_info |= (IEEE80211_HT_CAP_AMPDU_DENSITY&0x00);
2649 + }
2650 +
2651 + pht_cap->ampdu_params_info |= (IEEE80211_HT_CAP_AMPDU_FACTOR & 0x03); //set Max Rx AMPDU size to 64K
2652 +
2653 + if(rf_type == RF_1T1R)
2654 + {
2655 + pht_cap->supp_mcs_set[0] = 0xff;
2656 + pht_cap->supp_mcs_set[1] = 0x0;
2657 + }
2658 +
2659 + _rtw_memcpy(&pmlmepriv->htpriv.ht_cap, p+2, ie_len);
2660 +
2661 + }
2662 +
2663 + //parsing HT_INFO_IE
2664 + p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _HT_ADD_INFO_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
2665 + if(p && ie_len>0)
2666 + {
2667 + pHT_info_ie=p;
2668 + }
2669 +
2670 + switch(network_type)
2671 + {
2672 + case WIRELESS_11B:
2673 + pbss_network->NetworkTypeInUse = Ndis802_11DS;
2674 + break;
2675 + case WIRELESS_11G:
2676 + case WIRELESS_11BG:
2677 + case WIRELESS_11G_24N:
2678 + case WIRELESS_11BG_24N:
2679 + pbss_network->NetworkTypeInUse = Ndis802_11OFDM24;
2680 + break;
2681 + case WIRELESS_11A:
2682 + pbss_network->NetworkTypeInUse = Ndis802_11OFDM5;
2683 + break;
2684 + default :
2685 + pbss_network->NetworkTypeInUse = Ndis802_11OFDM24;
2686 + break;
2687 + }
2688 +
2689 + pmlmepriv->cur_network.network_type = network_type;
2690 +
2691 +
2692 + pmlmepriv->htpriv.ht_option = _FALSE;
2693 +#ifdef CONFIG_80211N_HT
2694 + if( (psecuritypriv->wpa2_pairwise_cipher&WPA_CIPHER_TKIP) ||
2695 + (psecuritypriv->wpa_pairwise_cipher&WPA_CIPHER_TKIP))
2696 + {
2697 + //todo:
2698 + //ht_cap = _FALSE;
2699 + }
2700 +
2701 + //ht_cap
2702 + if(pregistrypriv->ht_enable && ht_cap==_TRUE)
2703 + {
2704 + pmlmepriv->htpriv.ht_option = _TRUE;
2705 + pmlmepriv->qospriv.qos_option = 1;
2706 +
2707 + if(pregistrypriv->ampdu_enable==1)
2708 + {
2709 + pmlmepriv->htpriv.ampdu_enable = _TRUE;
2710 + }
2711 +
2712 + HT_caps_handler(padapter, (PNDIS_802_11_VARIABLE_IEs)pHT_caps_ie);
2713 +
2714 + HT_info_handler(padapter, (PNDIS_802_11_VARIABLE_IEs)pHT_info_ie);
2715 + }
2716 +#endif
2717 +
2718 +
2719 + pbss_network->Length = get_WLAN_BSSID_EX_sz((WLAN_BSSID_EX *)pbss_network);
2720 +
2721 + //issue beacon to start bss network
2722 + start_bss_network(padapter, (u8*)pbss_network);
2723 +
2724 +
2725 + //alloc sta_info for ap itself
2726 + psta = rtw_get_stainfo(&padapter->stapriv, pbss_network->MacAddress);
2727 + if(!psta)
2728 + {
2729 + psta = rtw_alloc_stainfo(&padapter->stapriv, pbss_network->MacAddress);
2730 + if (psta == NULL)
2731 + {
2732 + return _FAIL;
2733 + }
2734 + }
2735 + psta->state |= WIFI_AP_STATE; //Aries, add,fix bug of flush_cam_entry at STOP AP mode , 0724
2736 + rtw_indicate_connect( padapter);
2737 +
2738 + pmlmepriv->cur_network.join_res = _TRUE;//for check if already set beacon
2739 +
2740 + //update bc/mc sta_info
2741 + //update_bmc_sta(padapter);
2742 +
2743 + return ret;
2744 +
2745 +}
2746 +
2747 +void rtw_set_macaddr_acl(_adapter *padapter, int mode)
2748 +{
2749 + struct sta_priv *pstapriv = &padapter->stapriv;
2750 + struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
2751 +
2752 + DBG_871X("%s, mode=%d\n", __func__, mode);
2753 +
2754 + pacl_list->mode = mode;
2755 +}
2756 +
2757 +int rtw_acl_add_sta(_adapter *padapter, u8 *addr)
2758 +{
2759 + _irqL irqL;
2760 + _list *plist, *phead;
2761 + u8 added = _FALSE;
2762 + int i, ret=0;
2763 + struct rtw_wlan_acl_node *paclnode;
2764 + struct sta_priv *pstapriv = &padapter->stapriv;
2765 + struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
2766 + _queue *pacl_node_q =&pacl_list->acl_node_q;
2767 +
2768 + DBG_871X("%s(acl_num=%d)=" MAC_FMT "\n", __func__, pacl_list->num, MAC_ARG(addr));
2769 +
2770 + if((NUM_ACL-1) < pacl_list->num)
2771 + return (-1);
2772 +
2773 +
2774 + _enter_critical_bh(&(pacl_node_q->lock), &irqL);
2775 +
2776 + phead = get_list_head(pacl_node_q);
2777 + plist = get_next(phead);
2778 +
2779 + while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
2780 + {
2781 + paclnode = LIST_CONTAINOR(plist, struct rtw_wlan_acl_node, list);
2782 + plist = get_next(plist);
2783 +
2784 + if(_rtw_memcmp(paclnode->addr, addr, ETH_ALEN))
2785 + {
2786 + if(paclnode->valid == _TRUE)
2787 + {
2788 + added = _TRUE;
2789 + DBG_871X("%s, sta has been added\n", __func__);
2790 + break;
2791 + }
2792 + }
2793 + }
2794 +
2795 + _exit_critical_bh(&(pacl_node_q->lock), &irqL);
2796 +
2797 +
2798 + if(added == _TRUE)
2799 + return ret;
2800 +
2801 +
2802 + _enter_critical_bh(&(pacl_node_q->lock), &irqL);
2803 +
2804 + for(i=0; i< NUM_ACL; i++)
2805 + {
2806 + paclnode = &pacl_list->aclnode[i];
2807 +
2808 + if(paclnode->valid == _FALSE)
2809 + {
2810 + _rtw_init_listhead(&paclnode->list);
2811 +
2812 + _rtw_memcpy(paclnode->addr, addr, ETH_ALEN);
2813 +
2814 + paclnode->valid = _TRUE;
2815 +
2816 + rtw_list_insert_tail(&paclnode->list, get_list_head(pacl_node_q));
2817 +
2818 + pacl_list->num++;
2819 +
2820 + break;
2821 + }
2822 + }
2823 +
2824 + DBG_871X("%s, acl_num=%d\n", __func__, pacl_list->num);
2825 +
2826 + _exit_critical_bh(&(pacl_node_q->lock), &irqL);
2827 +
2828 + return ret;
2829 +}
2830 +
2831 +int rtw_acl_remove_sta(_adapter *padapter, u8 *addr)
2832 +{
2833 + _irqL irqL;
2834 + _list *plist, *phead;
2835 + int i, ret=0;
2836 + struct rtw_wlan_acl_node *paclnode;
2837 + struct sta_priv *pstapriv = &padapter->stapriv;
2838 + struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
2839 + _queue *pacl_node_q =&pacl_list->acl_node_q;
2840 +
2841 + DBG_871X("%s(acl_num=%d)=" MAC_FMT "\n", __func__, pacl_list->num, MAC_ARG(addr));
2842 +
2843 + _enter_critical_bh(&(pacl_node_q->lock), &irqL);
2844 +
2845 + phead = get_list_head(pacl_node_q);
2846 + plist = get_next(phead);
2847 +
2848 + while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
2849 + {
2850 + paclnode = LIST_CONTAINOR(plist, struct rtw_wlan_acl_node, list);
2851 + plist = get_next(plist);
2852 +
2853 + if(_rtw_memcmp(paclnode->addr, addr, ETH_ALEN))
2854 + {
2855 + if(paclnode->valid == _TRUE)
2856 + {
2857 + paclnode->valid = _FALSE;
2858 +
2859 + rtw_list_delete(&paclnode->list);
2860 +
2861 + pacl_list->num--;
2862 + }
2863 + }
2864 + }
2865 +
2866 + _exit_critical_bh(&(pacl_node_q->lock), &irqL);
2867 +
2868 + DBG_871X("%s, acl_num=%d\n", __func__, pacl_list->num);
2869 +
2870 + return ret;
2871 +
2872 +}
2873 +
2874 +#ifdef CONFIG_NATIVEAP_MLME
2875 +
2876 +static void update_bcn_fixed_ie(_adapter *padapter)
2877 +{
2878 + DBG_871X("%s\n", __FUNCTION__);
2879 +
2880 +}
2881 +
2882 +static void update_bcn_erpinfo_ie(_adapter *padapter)
2883 +{
2884 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
2885 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
2886 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
2887 + WLAN_BSSID_EX *pnetwork = &(pmlmeinfo->network);
2888 + unsigned char *p, *ie = pnetwork->IEs;
2889 + u32 len = 0;
2890 +
2891 + DBG_871X("%s, ERP_enable=%d\n", __FUNCTION__, pmlmeinfo->ERP_enable);
2892 +
2893 + if(!pmlmeinfo->ERP_enable)
2894 + return;
2895 +
2896 + //parsing ERP_IE
2897 + p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _ERPINFO_IE_, &len, (pnetwork->IELength - _BEACON_IE_OFFSET_));
2898 + if(p && len>0)
2899 + {
2900 + PNDIS_802_11_VARIABLE_IEs pIE = (PNDIS_802_11_VARIABLE_IEs)p;
2901 +
2902 + if (pmlmepriv->num_sta_non_erp == 1)
2903 + pIE->data[0] |= RTW_ERP_INFO_NON_ERP_PRESENT|RTW_ERP_INFO_USE_PROTECTION;
2904 + else
2905 + pIE->data[0] &= ~(RTW_ERP_INFO_NON_ERP_PRESENT|RTW_ERP_INFO_USE_PROTECTION);
2906 +
2907 + if(pmlmepriv->num_sta_no_short_preamble > 0)
2908 + pIE->data[0] |= RTW_ERP_INFO_BARKER_PREAMBLE_MODE;
2909 + else
2910 + pIE->data[0] &= ~(RTW_ERP_INFO_BARKER_PREAMBLE_MODE);
2911 +
2912 + ERP_IE_handler(padapter, pIE);
2913 + }
2914 +
2915 +}
2916 +
2917 +static void update_bcn_htcap_ie(_adapter *padapter)
2918 +{
2919 + DBG_871X("%s\n", __FUNCTION__);
2920 +
2921 +}
2922 +
2923 +static void update_bcn_htinfo_ie(_adapter *padapter)
2924 +{
2925 + DBG_871X("%s\n", __FUNCTION__);
2926 +
2927 +}
2928 +
2929 +static void update_bcn_rsn_ie(_adapter *padapter)
2930 +{
2931 + DBG_871X("%s\n", __FUNCTION__);
2932 +
2933 +}
2934 +
2935 +static void update_bcn_wpa_ie(_adapter *padapter)
2936 +{
2937 + DBG_871X("%s\n", __FUNCTION__);
2938 +
2939 +}
2940 +
2941 +static void update_bcn_wmm_ie(_adapter *padapter)
2942 +{
2943 + DBG_871X("%s\n", __FUNCTION__);
2944 +
2945 +}
2946 +
2947 +static void update_bcn_wps_ie(_adapter *padapter)
2948 +{
2949 + u8 *pwps_ie=NULL, *pwps_ie_src, *premainder_ie, *pbackup_remainder_ie=NULL;
2950 + uint wps_ielen=0, wps_offset, remainder_ielen;
2951 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
2952 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
2953 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
2954 + WLAN_BSSID_EX *pnetwork = &(pmlmeinfo->network);
2955 + unsigned char *ie = pnetwork->IEs;
2956 + u32 ielen = pnetwork->IELength;
2957 +
2958 +
2959 + DBG_871X("%s\n", __FUNCTION__);
2960 +
2961 + pwps_ie = rtw_get_wps_ie(ie+_FIXED_IE_LENGTH_, ielen-_FIXED_IE_LENGTH_, NULL, &wps_ielen);
2962 +
2963 + if(pwps_ie==NULL || wps_ielen==0)
2964 + return;
2965 +
2966 + wps_offset = (uint)(pwps_ie-ie);
2967 +
2968 + premainder_ie = pwps_ie + wps_ielen;
2969 +
2970 + remainder_ielen = ielen - wps_offset - wps_ielen;
2971 +
2972 + if(remainder_ielen>0)
2973 + {
2974 + pbackup_remainder_ie = rtw_malloc(remainder_ielen);
2975 + if(pbackup_remainder_ie)
2976 + _rtw_memcpy(pbackup_remainder_ie, premainder_ie, remainder_ielen);
2977 + }
2978 +
2979 +
2980 + pwps_ie_src = pmlmepriv->wps_beacon_ie;
2981 + if(pwps_ie_src == NULL)
2982 + return;
2983 +
2984 +
2985 + wps_ielen = (uint)pwps_ie_src[1];//to get ie data len
2986 + if((wps_offset+wps_ielen+2+remainder_ielen)<=MAX_IE_SZ)
2987 + {
2988 + _rtw_memcpy(pwps_ie, pwps_ie_src, wps_ielen+2);
2989 + pwps_ie += (wps_ielen+2);
2990 +
2991 + if(pbackup_remainder_ie)
2992 + _rtw_memcpy(pwps_ie, pbackup_remainder_ie, remainder_ielen);
2993 +
2994 + //update IELength
2995 + pnetwork->IELength = wps_offset + (wps_ielen+2) + remainder_ielen;
2996 + }
2997 +
2998 + if(pbackup_remainder_ie)
2999 + rtw_mfree(pbackup_remainder_ie, remainder_ielen);
3000 +
3001 +}
3002 +
3003 +static void update_bcn_p2p_ie(_adapter *padapter)
3004 +{
3005 +
3006 +}
3007 +
3008 +static void update_bcn_vendor_spec_ie(_adapter *padapter, u8*oui)
3009 +{
3010 + DBG_871X("%s\n", __FUNCTION__);
3011 +
3012 + if(_rtw_memcmp(RTW_WPA_OUI, oui, 4))
3013 + {
3014 + update_bcn_wpa_ie(padapter);
3015 + }
3016 + else if(_rtw_memcmp(WMM_OUI, oui, 4))
3017 + {
3018 + update_bcn_wmm_ie(padapter);
3019 + }
3020 + else if(_rtw_memcmp(WPS_OUI, oui, 4))
3021 + {
3022 + update_bcn_wps_ie(padapter);
3023 + }
3024 + else if(_rtw_memcmp(P2P_OUI, oui, 4))
3025 + {
3026 + update_bcn_p2p_ie(padapter);
3027 + }
3028 + else
3029 + {
3030 + DBG_871X("unknown OUI type!\n");
3031 + }
3032 +
3033 +
3034 +}
3035 +
3036 +void update_beacon(_adapter *padapter, u8 ie_id, u8 *oui, u8 tx)
3037 +{
3038 + _irqL irqL;
3039 + struct mlme_priv *pmlmepriv;
3040 + struct mlme_ext_priv *pmlmeext;
3041 + //struct mlme_ext_info *pmlmeinfo;
3042 +
3043 + //DBG_871X("%s\n", __FUNCTION__);
3044 +
3045 + if(!padapter)
3046 + return;
3047 +
3048 + pmlmepriv = &(padapter->mlmepriv);
3049 + pmlmeext = &(padapter->mlmeextpriv);
3050 + //pmlmeinfo = &(pmlmeext->mlmext_info);
3051 +
3052 + if(_FALSE == pmlmeext->bstart_bss)
3053 + return;
3054 +
3055 + _enter_critical_bh(&pmlmepriv->bcn_update_lock, &irqL);
3056 +
3057 + switch(ie_id)
3058 + {
3059 + case 0xFF:
3060 +
3061 + update_bcn_fixed_ie(padapter);//8: TimeStamp, 2: Beacon Interval 2:Capability
3062 +
3063 + break;
3064 +
3065 + case _TIM_IE_:
3066 +
3067 + update_BCNTIM(padapter);
3068 +
3069 + break;
3070 +
3071 + case _ERPINFO_IE_:
3072 +
3073 + update_bcn_erpinfo_ie(padapter);
3074 +
3075 + break;
3076 +
3077 + case _HT_CAPABILITY_IE_:
3078 +
3079 + update_bcn_htcap_ie(padapter);
3080 +
3081 + break;
3082 +
3083 + case _RSN_IE_2_:
3084 +
3085 + update_bcn_rsn_ie(padapter);
3086 +
3087 + break;
3088 +
3089 + case _HT_ADD_INFO_IE_:
3090 +
3091 + update_bcn_htinfo_ie(padapter);
3092 +
3093 + break;
3094 +
3095 + case _VENDOR_SPECIFIC_IE_:
3096 +
3097 + update_bcn_vendor_spec_ie(padapter, oui);
3098 +
3099 + break;
3100 +
3101 + default:
3102 + break;
3103 + }
3104 +
3105 + pmlmepriv->update_bcn = _TRUE;
3106 +
3107 + _exit_critical_bh(&pmlmepriv->bcn_update_lock, &irqL);
3108 +
3109 +#ifndef CONFIG_INTERRUPT_BASED_TXBCN
3110 +#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
3111 + if(tx)
3112 + {
3113 + //send_beacon(padapter);//send_beacon must execute on TSR level
3114 + set_tx_beacon_cmd(padapter);
3115 + }
3116 +#else
3117 + {
3118 + //PCI will issue beacon when BCN interrupt occurs.
3119 + }
3120 +#endif
3121 +#endif //!CONFIG_INTERRUPT_BASED_TXBCN
3122 +
3123 +}
3124 +
3125 +#ifdef CONFIG_80211N_HT
3126 +
3127 +/*
3128 +op_mode
3129 +Set to 0 (HT pure) under the followign conditions
3130 + - all STAs in the BSS are 20/40 MHz HT in 20/40 MHz BSS or
3131 + - all STAs in the BSS are 20 MHz HT in 20 MHz BSS
3132 +Set to 1 (HT non-member protection) if there may be non-HT STAs
3133 + in both the primary and the secondary channel
3134 +Set to 2 if only HT STAs are associated in BSS,
3135 + however and at least one 20 MHz HT STA is associated
3136 +Set to 3 (HT mixed mode) when one or more non-HT STAs are associated
3137 + (currently non-GF HT station is considered as non-HT STA also)
3138 +*/
3139 +static int rtw_ht_operation_update(_adapter *padapter)
3140 +{
3141 + u16 cur_op_mode, new_op_mode;
3142 + int op_mode_changes = 0;
3143 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
3144 + struct ht_priv *phtpriv_ap = &pmlmepriv->htpriv;
3145 +
3146 + if(pmlmepriv->htpriv.ht_option == _TRUE)
3147 + return 0;
3148 +
3149 + //if (!iface->conf->ieee80211n || iface->conf->ht_op_mode_fixed)
3150 + // return 0;
3151 +
3152 + DBG_871X("%s current operation mode=0x%X\n",
3153 + __FUNCTION__, pmlmepriv->ht_op_mode);
3154 +
3155 + if (!(pmlmepriv->ht_op_mode & HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT)
3156 + && pmlmepriv->num_sta_ht_no_gf) {
3157 + pmlmepriv->ht_op_mode |=
3158 + HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT;
3159 + op_mode_changes++;
3160 + } else if ((pmlmepriv->ht_op_mode &
3161 + HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT) &&
3162 + pmlmepriv->num_sta_ht_no_gf == 0) {
3163 + pmlmepriv->ht_op_mode &=
3164 + ~HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT;
3165 + op_mode_changes++;
3166 + }
3167 +
3168 + if (!(pmlmepriv->ht_op_mode & HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT) &&
3169 + (pmlmepriv->num_sta_no_ht || pmlmepriv->olbc_ht)) {
3170 + pmlmepriv->ht_op_mode |= HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT;
3171 + op_mode_changes++;
3172 + } else if ((pmlmepriv->ht_op_mode &
3173 + HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT) &&
3174 + (pmlmepriv->num_sta_no_ht == 0 && !pmlmepriv->olbc_ht)) {
3175 + pmlmepriv->ht_op_mode &=
3176 + ~HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT;
3177 + op_mode_changes++;
3178 + }
3179 +
3180 + /* Note: currently we switch to the MIXED op mode if HT non-greenfield
3181 + * station is associated. Probably it's a theoretical case, since
3182 + * it looks like all known HT STAs support greenfield.
3183 + */
3184 + new_op_mode = 0;
3185 + if (pmlmepriv->num_sta_no_ht ||
3186 + (pmlmepriv->ht_op_mode & HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT))
3187 + new_op_mode = OP_MODE_MIXED;
3188 + else if ((phtpriv_ap->ht_cap.cap_info & IEEE80211_HT_CAP_SUP_WIDTH)
3189 + && pmlmepriv->num_sta_ht_20mhz)
3190 + new_op_mode = OP_MODE_20MHZ_HT_STA_ASSOCED;
3191 + else if (pmlmepriv->olbc_ht)
3192 + new_op_mode = OP_MODE_MAY_BE_LEGACY_STAS;
3193 + else
3194 + new_op_mode = OP_MODE_PURE;
3195 +
3196 + cur_op_mode = pmlmepriv->ht_op_mode & HT_INFO_OPERATION_MODE_OP_MODE_MASK;
3197 + if (cur_op_mode != new_op_mode) {
3198 + pmlmepriv->ht_op_mode &= ~HT_INFO_OPERATION_MODE_OP_MODE_MASK;
3199 + pmlmepriv->ht_op_mode |= new_op_mode;
3200 + op_mode_changes++;
3201 + }
3202 +
3203 + DBG_871X("%s new operation mode=0x%X changes=%d\n",
3204 + __FUNCTION__, pmlmepriv->ht_op_mode, op_mode_changes);
3205 +
3206 + return op_mode_changes;
3207 +
3208 +}
3209 +
3210 +#endif /* CONFIG_80211N_HT */
3211 +
3212 +void associated_clients_update(_adapter *padapter, u8 updated)
3213 +{
3214 + //update associcated stations cap.
3215 + if(updated == _TRUE)
3216 + {
3217 + _irqL irqL;
3218 + _list *phead, *plist;
3219 + struct sta_info *psta=NULL;
3220 + struct sta_priv *pstapriv = &padapter->stapriv;
3221 +
3222 + _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
3223 +
3224 + phead = &pstapriv->asoc_list;
3225 + plist = get_next(phead);
3226 +
3227 + //check asoc_queue
3228 + while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
3229 + {
3230 + psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
3231 +
3232 + plist = get_next(plist);
3233 +
3234 + VCS_update(padapter, psta);
3235 + }
3236 +
3237 + _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
3238 +
3239 + }
3240 +
3241 +}
3242 +
3243 +/* called > TSR LEVEL for USB or SDIO Interface*/
3244 +void bss_cap_update_on_sta_join(_adapter *padapter, struct sta_info *psta)
3245 +{
3246 + u8 beacon_updated = _FALSE;
3247 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
3248 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
3249 +
3250 +
3251 +#if 0
3252 + if (!(psta->capability & WLAN_CAPABILITY_SHORT_PREAMBLE) &&
3253 + !psta->no_short_preamble_set) {
3254 + psta->no_short_preamble_set = 1;
3255 + pmlmepriv->num_sta_no_short_preamble++;
3256 + if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
3257 + (pmlmepriv->num_sta_no_short_preamble == 1))
3258 + ieee802_11_set_beacons(hapd->iface);
3259 + }
3260 +#endif
3261 +
3262 +
3263 + if(!(psta->flags & WLAN_STA_SHORT_PREAMBLE))
3264 + {
3265 + if(!psta->no_short_preamble_set)
3266 + {
3267 + psta->no_short_preamble_set = 1;
3268 +
3269 + pmlmepriv->num_sta_no_short_preamble++;
3270 +
3271 + if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
3272 + (pmlmepriv->num_sta_no_short_preamble == 1))
3273 + {
3274 + beacon_updated = _TRUE;
3275 + update_beacon(padapter, 0xFF, NULL, _TRUE);
3276 + }
3277 +
3278 + }
3279 + }
3280 + else
3281 + {
3282 + if(psta->no_short_preamble_set)
3283 + {
3284 + psta->no_short_preamble_set = 0;
3285 +
3286 + pmlmepriv->num_sta_no_short_preamble--;
3287 +
3288 + if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
3289 + (pmlmepriv->num_sta_no_short_preamble == 0))
3290 + {
3291 + beacon_updated = _TRUE;
3292 + update_beacon(padapter, 0xFF, NULL, _TRUE);
3293 + }
3294 +
3295 + }
3296 + }
3297 +
3298 +#if 0
3299 + if (psta->flags & WLAN_STA_NONERP && !psta->nonerp_set) {
3300 + psta->nonerp_set = 1;
3301 + pmlmepriv->num_sta_non_erp++;
3302 + if (pmlmepriv->num_sta_non_erp == 1)
3303 + ieee802_11_set_beacons(hapd->iface);
3304 + }
3305 +#endif
3306 +
3307 + if(psta->flags & WLAN_STA_NONERP)
3308 + {
3309 + if(!psta->nonerp_set)
3310 + {
3311 + psta->nonerp_set = 1;
3312 +
3313 + pmlmepriv->num_sta_non_erp++;
3314 +
3315 + if (pmlmepriv->num_sta_non_erp == 1)
3316 + {
3317 + beacon_updated = _TRUE;
3318 + update_beacon(padapter, _ERPINFO_IE_, NULL, _TRUE);
3319 + }
3320 + }
3321 +
3322 + }
3323 + else
3324 + {
3325 + if(psta->nonerp_set)
3326 + {
3327 + psta->nonerp_set = 0;
3328 +
3329 + pmlmepriv->num_sta_non_erp--;
3330 +
3331 + if (pmlmepriv->num_sta_non_erp == 0)
3332 + {
3333 + beacon_updated = _TRUE;
3334 + update_beacon(padapter, _ERPINFO_IE_, NULL, _TRUE);
3335 + }
3336 + }
3337 +
3338 + }
3339 +
3340 +
3341 +#if 0
3342 + if (!(psta->capability & WLAN_CAPABILITY_SHORT_SLOT) &&
3343 + !psta->no_short_slot_time_set) {
3344 + psta->no_short_slot_time_set = 1;
3345 + pmlmepriv->num_sta_no_short_slot_time++;
3346 + if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
3347 + (pmlmepriv->num_sta_no_short_slot_time == 1))
3348 + ieee802_11_set_beacons(hapd->iface);
3349 + }
3350 +#endif
3351 +
3352 + if(!(psta->capability & WLAN_CAPABILITY_SHORT_SLOT))
3353 + {
3354 + if(!psta->no_short_slot_time_set)
3355 + {
3356 + psta->no_short_slot_time_set = 1;
3357 +
3358 + pmlmepriv->num_sta_no_short_slot_time++;
3359 +
3360 + if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
3361 + (pmlmepriv->num_sta_no_short_slot_time == 1))
3362 + {
3363 + beacon_updated = _TRUE;
3364 + update_beacon(padapter, 0xFF, NULL, _TRUE);
3365 + }
3366 +
3367 + }
3368 + }
3369 + else
3370 + {
3371 + if(psta->no_short_slot_time_set)
3372 + {
3373 + psta->no_short_slot_time_set = 0;
3374 +
3375 + pmlmepriv->num_sta_no_short_slot_time--;
3376 +
3377 + if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
3378 + (pmlmepriv->num_sta_no_short_slot_time == 0))
3379 + {
3380 + beacon_updated = _TRUE;
3381 + update_beacon(padapter, 0xFF, NULL, _TRUE);
3382 + }
3383 + }
3384 + }
3385 +
3386 +#ifdef CONFIG_80211N_HT
3387 +
3388 + if (psta->flags & WLAN_STA_HT)
3389 + {
3390 + u16 ht_capab = le16_to_cpu(psta->htpriv.ht_cap.cap_info);
3391 +
3392 + DBG_871X("HT: STA " MAC_FMT " HT Capabilities "
3393 + "Info: 0x%04x\n", MAC_ARG(psta->hwaddr), ht_capab);
3394 +
3395 + if (psta->no_ht_set) {
3396 + psta->no_ht_set = 0;
3397 + pmlmepriv->num_sta_no_ht--;
3398 + }
3399 +
3400 + if ((ht_capab & IEEE80211_HT_CAP_GRN_FLD) == 0) {
3401 + if (!psta->no_ht_gf_set) {
3402 + psta->no_ht_gf_set = 1;
3403 + pmlmepriv->num_sta_ht_no_gf++;
3404 + }
3405 + DBG_871X("%s STA " MAC_FMT " - no "
3406 + "greenfield, num of non-gf stations %d\n",
3407 + __FUNCTION__, MAC_ARG(psta->hwaddr),
3408 + pmlmepriv->num_sta_ht_no_gf);
3409 + }
3410 +
3411 + if ((ht_capab & IEEE80211_HT_CAP_SUP_WIDTH) == 0) {
3412 + if (!psta->ht_20mhz_set) {
3413 + psta->ht_20mhz_set = 1;
3414 + pmlmepriv->num_sta_ht_20mhz++;
3415 + }
3416 + DBG_871X("%s STA " MAC_FMT " - 20 MHz HT, "
3417 + "num of 20MHz HT STAs %d\n",
3418 + __FUNCTION__, MAC_ARG(psta->hwaddr),
3419 + pmlmepriv->num_sta_ht_20mhz);
3420 + }
3421 +
3422 + }
3423 + else
3424 + {
3425 + if (!psta->no_ht_set) {
3426 + psta->no_ht_set = 1;
3427 + pmlmepriv->num_sta_no_ht++;
3428 + }
3429 + if(pmlmepriv->htpriv.ht_option == _TRUE) {
3430 + DBG_871X("%s STA " MAC_FMT
3431 + " - no HT, num of non-HT stations %d\n",
3432 + __FUNCTION__, MAC_ARG(psta->hwaddr),
3433 + pmlmepriv->num_sta_no_ht);
3434 + }
3435 + }
3436 +
3437 + if (rtw_ht_operation_update(padapter) > 0)
3438 + {
3439 + update_beacon(padapter, _HT_CAPABILITY_IE_, NULL, _FALSE);
3440 + update_beacon(padapter, _HT_ADD_INFO_IE_, NULL, _TRUE);
3441 + }
3442 +
3443 +#endif /* CONFIG_80211N_HT */
3444 +
3445 + //update associcated stations cap.
3446 + associated_clients_update(padapter, beacon_updated);
3447 +
3448 + DBG_871X("%s, updated=%d\n", __func__, beacon_updated);
3449 +
3450 +}
3451 +
3452 +u8 bss_cap_update_on_sta_leave(_adapter *padapter, struct sta_info *psta)
3453 +{
3454 + u8 beacon_updated = _FALSE;
3455 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
3456 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
3457 +
3458 + if(!psta)
3459 + return beacon_updated;
3460 +
3461 + if (psta->no_short_preamble_set) {
3462 + psta->no_short_preamble_set = 0;
3463 + pmlmepriv->num_sta_no_short_preamble--;
3464 + if (pmlmeext->cur_wireless_mode > WIRELESS_11B
3465 + && pmlmepriv->num_sta_no_short_preamble == 0)
3466 + {
3467 + beacon_updated = _TRUE;
3468 + update_beacon(padapter, 0xFF, NULL, _TRUE);
3469 + }
3470 + }
3471 +
3472 + if (psta->nonerp_set) {
3473 + psta->nonerp_set = 0;
3474 + pmlmepriv->num_sta_non_erp--;
3475 + if (pmlmepriv->num_sta_non_erp == 0)
3476 + {
3477 + beacon_updated = _TRUE;
3478 + update_beacon(padapter, _ERPINFO_IE_, NULL, _TRUE);
3479 + }
3480 + }
3481 +
3482 + if (psta->no_short_slot_time_set) {
3483 + psta->no_short_slot_time_set = 0;
3484 + pmlmepriv->num_sta_no_short_slot_time--;
3485 + if (pmlmeext->cur_wireless_mode > WIRELESS_11B
3486 + && pmlmepriv->num_sta_no_short_slot_time == 0)
3487 + {
3488 + beacon_updated = _TRUE;
3489 + update_beacon(padapter, 0xFF, NULL, _TRUE);
3490 + }
3491 + }
3492 +
3493 +#ifdef CONFIG_80211N_HT
3494 +
3495 + if (psta->no_ht_gf_set) {
3496 + psta->no_ht_gf_set = 0;
3497 + pmlmepriv->num_sta_ht_no_gf--;
3498 + }
3499 +
3500 + if (psta->no_ht_set) {
3501 + psta->no_ht_set = 0;
3502 + pmlmepriv->num_sta_no_ht--;
3503 + }
3504 +
3505 + if (psta->ht_20mhz_set) {
3506 + psta->ht_20mhz_set = 0;
3507 + pmlmepriv->num_sta_ht_20mhz--;
3508 + }
3509 +
3510 + if (rtw_ht_operation_update(padapter) > 0)
3511 + {
3512 + update_beacon(padapter, _HT_CAPABILITY_IE_, NULL, _FALSE);
3513 + update_beacon(padapter, _HT_ADD_INFO_IE_, NULL, _TRUE);
3514 + }
3515 +
3516 +#endif /* CONFIG_80211N_HT */
3517 +
3518 + //update associcated stations cap.
3519 + //associated_clients_update(padapter, beacon_updated); //move it to avoid deadlock
3520 +
3521 + DBG_871X("%s, updated=%d\n", __func__, beacon_updated);
3522 +
3523 + return beacon_updated;
3524 +
3525 +}
3526 +
3527 +u8 ap_free_sta(_adapter *padapter, struct sta_info *psta, bool active, u16 reason)
3528 +{
3529 + _irqL irqL;
3530 + u8 beacon_updated = _FALSE;
3531 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
3532 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
3533 + struct sta_priv *pstapriv = &padapter->stapriv;
3534 +
3535 + if(!psta)
3536 + return beacon_updated;
3537 +
3538 + if (active == _TRUE)
3539 + {
3540 +#ifdef CONFIG_80211N_HT
3541 + //tear down Rx AMPDU
3542 + send_delba(padapter, 0, psta->hwaddr);// recipient
3543 +
3544 + //tear down TX AMPDU
3545 + send_delba(padapter, 1, psta->hwaddr);// // originator
3546 +
3547 +#endif //CONFIG_80211N_HT
3548 +
3549 + issue_deauth(padapter, psta->hwaddr, reason);
3550 + }
3551 +
3552 + psta->htpriv.agg_enable_bitmap = 0x0;//reset
3553 + psta->htpriv.candidate_tid_bitmap = 0x0;//reset
3554 +
3555 +
3556 + //report_del_sta_event(padapter, psta->hwaddr, reason);
3557 +
3558 + //clear cam entry / key
3559 + //clear_cam_entry(padapter, (psta->mac_id + 3));
3560 + rtw_clearstakey_cmd(padapter, (u8*)psta, (u8)(psta->mac_id + 3), _TRUE);
3561 +
3562 +
3563 + _enter_critical_bh(&psta->lock, &irqL);
3564 + psta->state &= ~_FW_LINKED;
3565 + _exit_critical_bh(&psta->lock, &irqL);
3566 +
3567 + #ifdef CONFIG_IOCTL_CFG80211
3568 + if (1) {
3569 + #ifdef COMPAT_KERNEL_RELEASE
3570 + rtw_cfg80211_indicate_sta_disassoc(padapter, psta->hwaddr, reason);
3571 + #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
3572 + rtw_cfg80211_indicate_sta_disassoc(padapter, psta->hwaddr, reason);
3573 + #else //(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
3574 + /* will call rtw_cfg80211_indicate_sta_disassoc() in cmd_thread for old API context */
3575 + #endif //(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
3576 + } else
3577 + #endif //CONFIG_IOCTL_CFG80211
3578 + {
3579 + rtw_indicate_sta_disassoc_event(padapter, psta);
3580 + }
3581 +
3582 + report_del_sta_event(padapter, psta->hwaddr, reason);
3583 +
3584 + beacon_updated = bss_cap_update_on_sta_leave(padapter, psta);
3585 +
3586 + _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
3587 + rtw_free_stainfo(padapter, psta);
3588 + _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
3589 +
3590 +
3591 + return beacon_updated;
3592 +
3593 +}
3594 +
3595 +int rtw_ap_inform_ch_switch(_adapter *padapter, u8 new_ch, u8 ch_offset)
3596 +{
3597 + _irqL irqL;
3598 + _list *phead, *plist;
3599 + int ret=0;
3600 + struct sta_info *psta = NULL;
3601 + struct sta_priv *pstapriv = &padapter->stapriv;
3602 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
3603 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
3604 + u8 bc_addr[ETH_ALEN] = {0xff,0xff,0xff,0xff,0xff,0xff};
3605 +
3606 + if((pmlmeinfo->state&0x03) != WIFI_FW_AP_STATE)
3607 + return ret;
3608 +
3609 + DBG_871X(FUNC_NDEV_FMT" with ch:%u, offset:%u\n",
3610 + FUNC_NDEV_ARG(padapter->pnetdev), new_ch, ch_offset);
3611 +
3612 + _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
3613 + phead = &pstapriv->asoc_list;
3614 + plist = get_next(phead);
3615 +
3616 + /* for each sta in asoc_queue */
3617 + while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
3618 + {
3619 + psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
3620 + plist = get_next(plist);
3621 +
3622 + issue_action_spct_ch_switch(padapter, psta->hwaddr, new_ch, ch_offset);
3623 + psta->expire_to = ((pstapriv->expire_to * 2) > 5) ? 5 : (pstapriv->expire_to * 2);
3624 + }
3625 + _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
3626 +
3627 + issue_action_spct_ch_switch(padapter, bc_addr, new_ch, ch_offset);
3628 +
3629 + return ret;
3630 +}
3631 +
3632 +int rtw_sta_flush(_adapter *padapter)
3633 +{
3634 + _irqL irqL;
3635 + _list *phead, *plist;
3636 + int ret=0;
3637 + struct sta_info *psta = NULL;
3638 + struct sta_priv *pstapriv = &padapter->stapriv;
3639 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
3640 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
3641 + u8 bc_addr[ETH_ALEN] = {0xff,0xff,0xff,0xff,0xff,0xff};
3642 + u8 chk_alive_num = 0;
3643 + char chk_alive_list[NUM_STA];
3644 + int i;
3645 +
3646 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(padapter->pnetdev));
3647 +
3648 + if((pmlmeinfo->state&0x03) != WIFI_FW_AP_STATE)
3649 + return ret;
3650 +
3651 + _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
3652 + phead = &pstapriv->asoc_list;
3653 + plist = get_next(phead);
3654 +
3655 + while ((rtw_end_of_queue_search(phead, plist)) == _FALSE) {
3656 + int stainfo_offset;
3657 +
3658 + psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
3659 + plist = get_next(plist);
3660 +
3661 + /* Remove sta from asoc_list */
3662 + rtw_list_delete(&psta->asoc_list);
3663 + pstapriv->asoc_list_cnt--;
3664 +
3665 + /* Keep sta for ap_free_sta() beyond this asoc_list loop */
3666 + stainfo_offset = rtw_stainfo_offset(pstapriv, psta);
3667 + if (stainfo_offset_valid(stainfo_offset)) {
3668 + chk_alive_list[chk_alive_num++] = stainfo_offset;
3669 + }
3670 + }
3671 + _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
3672 +
3673 +
3674 + /* For each sta in chk_alive_list, call ap_free_sta */
3675 + for (i = 0; i < chk_alive_num; i++) {
3676 + psta = rtw_get_stainfo_by_offset(pstapriv, chk_alive_list[i]);
3677 + ap_free_sta(padapter, psta, _TRUE, WLAN_REASON_DEAUTH_LEAVING);
3678 + }
3679 +
3680 + issue_deauth(padapter, bc_addr, WLAN_REASON_DEAUTH_LEAVING);
3681 +
3682 + associated_clients_update(padapter, _TRUE);
3683 +
3684 + return ret;
3685 +
3686 +}
3687 +
3688 +/* called > TSR LEVEL for USB or SDIO Interface*/
3689 +void sta_info_update(_adapter *padapter, struct sta_info *psta)
3690 +{
3691 + int flags = psta->flags;
3692 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
3693 +
3694 +
3695 + //update wmm cap.
3696 + if(WLAN_STA_WME&flags)
3697 + psta->qos_option = 1;
3698 + else
3699 + psta->qos_option = 0;
3700 +
3701 + if(pmlmepriv->qospriv.qos_option == 0)
3702 + psta->qos_option = 0;
3703 +
3704 +
3705 +#ifdef CONFIG_80211N_HT
3706 + //update 802.11n ht cap.
3707 + if(WLAN_STA_HT&flags)
3708 + {
3709 + psta->htpriv.ht_option = _TRUE;
3710 + psta->qos_option = 1;
3711 + }
3712 + else
3713 + {
3714 + psta->htpriv.ht_option = _FALSE;
3715 + }
3716 +
3717 + if(pmlmepriv->htpriv.ht_option == _FALSE)
3718 + psta->htpriv.ht_option = _FALSE;
3719 +#endif
3720 +
3721 +
3722 + update_sta_info_apmode(padapter, psta);
3723 +
3724 +
3725 +}
3726 +
3727 +/* called >= TSR LEVEL for USB or SDIO Interface*/
3728 +void ap_sta_info_defer_update(_adapter *padapter, struct sta_info *psta)
3729 +{
3730 + if(psta->state & _FW_LINKED)
3731 + {
3732 + //add ratid
3733 + add_RATid(padapter, psta);
3734 + }
3735 +}
3736 +
3737 +/* restore hw setting from sw data structures */
3738 +void rtw_ap_restore_network(_adapter *padapter)
3739 +{
3740 + struct mlme_priv *mlmepriv = &padapter->mlmepriv;
3741 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
3742 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
3743 + struct sta_priv * pstapriv = &padapter->stapriv;
3744 + struct sta_info *psta;
3745 + struct security_priv* psecuritypriv=&(padapter->securitypriv);
3746 + _irqL irqL;
3747 + _list *phead, *plist;
3748 + u8 chk_alive_num = 0;
3749 + char chk_alive_list[NUM_STA];
3750 + int i;
3751 +
3752 + rtw_setopmode_cmd(padapter, Ndis802_11APMode);
3753 +
3754 + set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
3755 +
3756 + start_bss_network(padapter, (u8*)&mlmepriv->cur_network.network);
3757 +
3758 + if((padapter->securitypriv.dot11PrivacyAlgrthm == _TKIP_) ||
3759 + (padapter->securitypriv.dot11PrivacyAlgrthm == _AES_))
3760 + {
3761 + /* restore group key, WEP keys is restored in ips_leave() */
3762 + rtw_set_key(padapter, psecuritypriv, psecuritypriv->dot118021XGrpKeyid, 0);
3763 + }
3764 +
3765 + /* per sta pairwise key and settings */
3766 + if((padapter->securitypriv.dot11PrivacyAlgrthm != _TKIP_) &&
3767 + (padapter->securitypriv.dot11PrivacyAlgrthm != _AES_)) {
3768 + return;
3769 + }
3770 +
3771 + _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
3772 +
3773 + phead = &pstapriv->asoc_list;
3774 + plist = get_next(phead);
3775 +
3776 + while ((rtw_end_of_queue_search(phead, plist)) == _FALSE) {
3777 + int stainfo_offset;
3778 +
3779 + psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
3780 + plist = get_next(plist);
3781 +
3782 + stainfo_offset = rtw_stainfo_offset(pstapriv, psta);
3783 + if (stainfo_offset_valid(stainfo_offset)) {
3784 + chk_alive_list[chk_alive_num++] = stainfo_offset;
3785 + }
3786 + }
3787 +
3788 + _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
3789 +
3790 + for (i = 0; i < chk_alive_num; i++) {
3791 + psta = rtw_get_stainfo_by_offset(pstapriv, chk_alive_list[i]);
3792 +
3793 + if (psta == NULL) {
3794 + DBG_871X(FUNC_ADPT_FMT" sta_info is null\n", FUNC_ADPT_ARG(padapter));
3795 + } else if (psta->state &_FW_LINKED) {
3796 + Update_RA_Entry(padapter, psta->mac_id);
3797 + //pairwise key
3798 + rtw_setstakey_cmd(padapter, (unsigned char *)psta, _TRUE);
3799 + }
3800 + }
3801 +
3802 +}
3803 +
3804 +void start_ap_mode(_adapter *padapter)
3805 +{
3806 + int i;
3807 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
3808 + struct sta_priv *pstapriv = &padapter->stapriv;
3809 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
3810 + struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
3811 +
3812 + pmlmepriv->update_bcn = _FALSE;
3813 +
3814 + //init_mlme_ap_info(padapter);
3815 + pmlmeext->bstart_bss = _FALSE;
3816 +
3817 + pmlmepriv->num_sta_non_erp = 0;
3818 +
3819 + pmlmepriv->num_sta_no_short_slot_time = 0;
3820 +
3821 + pmlmepriv->num_sta_no_short_preamble = 0;
3822 +
3823 + pmlmepriv->num_sta_ht_no_gf = 0;
3824 +
3825 + pmlmepriv->num_sta_no_ht = 0;
3826 +
3827 + pmlmepriv->num_sta_ht_20mhz = 0;
3828 +
3829 + pmlmepriv->olbc = _FALSE;
3830 +
3831 + pmlmepriv->olbc_ht = _FALSE;
3832 +
3833 +#ifdef CONFIG_80211N_HT
3834 + pmlmepriv->ht_op_mode = 0;
3835 +#endif
3836 +
3837 + for(i=0; i<NUM_STA; i++)
3838 + pstapriv->sta_aid[i] = NULL;
3839 +
3840 + pmlmepriv->wps_beacon_ie = NULL;
3841 + pmlmepriv->wps_probe_resp_ie = NULL;
3842 + pmlmepriv->wps_assoc_resp_ie = NULL;
3843 +
3844 + pmlmepriv->p2p_beacon_ie = NULL;
3845 + pmlmepriv->p2p_probe_resp_ie = NULL;
3846 +
3847 +
3848 + //for ACL
3849 + _rtw_init_listhead(&(pacl_list->acl_node_q.queue));
3850 + pacl_list->num = 0;
3851 + pacl_list->mode = 0;
3852 + for(i = 0; i < NUM_ACL; i++)
3853 + {
3854 + _rtw_init_listhead(&pacl_list->aclnode[i].list);
3855 + pacl_list->aclnode[i].valid = _FALSE;
3856 + }
3857 +
3858 +}
3859 +
3860 +void stop_ap_mode(_adapter *padapter)
3861 +{
3862 + _irqL irqL;
3863 + _list *phead, *plist;
3864 + struct rtw_wlan_acl_node *paclnode;
3865 + struct sta_info *psta=NULL;
3866 + struct sta_priv *pstapriv = &padapter->stapriv;
3867 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
3868 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
3869 + struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
3870 + _queue *pacl_node_q =&pacl_list->acl_node_q;
3871 +
3872 + pmlmepriv->update_bcn = _FALSE;
3873 + pmlmeext->bstart_bss = _FALSE;
3874 + //_rtw_spinlock_free(&pmlmepriv->bcn_update_lock);
3875 +
3876 + //reset and init security priv , this can refine with rtw_reset_securitypriv
3877 + _rtw_memset((unsigned char *)&padapter->securitypriv, 0, sizeof (struct security_priv));
3878 + padapter->securitypriv.ndisauthtype = Ndis802_11AuthModeOpen;
3879 + padapter->securitypriv.ndisencryptstatus = Ndis802_11WEPDisabled;
3880 +
3881 + //for ACL
3882 + _enter_critical_bh(&(pacl_node_q->lock), &irqL);
3883 + phead = get_list_head(pacl_node_q);
3884 + plist = get_next(phead);
3885 + while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
3886 + {
3887 + paclnode = LIST_CONTAINOR(plist, struct rtw_wlan_acl_node, list);
3888 + plist = get_next(plist);
3889 +
3890 + if(paclnode->valid == _TRUE)
3891 + {
3892 + paclnode->valid = _FALSE;
3893 +
3894 + rtw_list_delete(&paclnode->list);
3895 +
3896 + pacl_list->num--;
3897 + }
3898 + }
3899 + _exit_critical_bh(&(pacl_node_q->lock), &irqL);
3900 +
3901 + DBG_871X("%s, free acl_node_queue, num=%d\n", __func__, pacl_list->num);
3902 +
3903 + rtw_sta_flush(padapter);
3904 +
3905 + //free_assoc_sta_resources
3906 + rtw_free_all_stainfo(padapter);
3907 +
3908 + psta = rtw_get_bcmc_stainfo(padapter);
3909 + _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
3910 + rtw_free_stainfo(padapter, psta);
3911 + _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
3912 +
3913 + rtw_init_bcmc_stainfo(padapter);
3914 +
3915 + rtw_free_mlme_priv_ie_data(pmlmepriv);
3916 +
3917 +}
3918 +
3919 +#endif //CONFIG_NATIVEAP_MLME
3920 +#endif //CONFIG_AP_MODE
3921 +
3922 --- a/drivers/net/wireless/rtl8192cu/core/rtw_br_ext.c
3923 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_br_ext.c
3924 @@ -126,10 +126,10 @@ static int skb_pull_and_merge(struct sk_
3925 int tail_len;
3926 unsigned long end, tail;
3927
3928 - if ((src+len) > skb->tail || skb->len < len)
3929 + if ((src+len) > skb_tail_pointer(skb) || skb->len < len)
3930 return -1;
3931
3932 - tail = (unsigned long)skb->tail;
3933 + tail = (unsigned long)skb_tail_pointer(skb);
3934 end = (unsigned long)src+len;
3935 if (tail < end)
3936 return -1;
3937 @@ -522,7 +522,7 @@ static void __nat25_db_network_insert(_a
3938 db = db->next_hash;
3939 }
3940
3941 - db = (struct nat25_network_db_entry *) _rtw_malloc(sizeof(*db));
3942 + db = (struct nat25_network_db_entry *) rtw_malloc(sizeof(*db));
3943 if(db == NULL) {
3944 _exit_critical_bh(&priv->br_ext_lock, &irqL);
3945 return;
3946 @@ -633,7 +633,7 @@ void nat25_db_cleanup(_adapter *priv)
3947 int i;
3948 _irqL irqL;
3949 _enter_critical_bh(&priv->br_ext_lock, &irqL);
3950 -
3951 +
3952 for(i=0; i<NAT25_HASH_SIZE; i++)
3953 {
3954 struct nat25_network_db_entry *f;
3955 @@ -649,7 +649,7 @@ void nat25_db_cleanup(_adapter *priv)
3956 priv->scdb_entry = NULL;
3957 }
3958 __network_hash_unlink(f);
3959 - _rtw_mfree((u8 *) f, sizeof(struct nat25_network_db_entry));
3960 + rtw_mfree((u8 *) f, sizeof(struct nat25_network_db_entry));
3961
3962 f = g;
3963 }
3964 @@ -664,7 +664,7 @@ void nat25_db_expire(_adapter *priv)
3965 int i;
3966 _irqL irqL;
3967 _enter_critical_bh(&priv->br_ext_lock, &irqL);
3968 -
3969 +
3970 //if(!priv->ethBrExtInfo.nat25_disable)
3971 {
3972 for (i=0; i<NAT25_HASH_SIZE; i++)
3973 @@ -739,7 +739,7 @@ void nat25_db_expire(_adapter *priv)
3974 priv->scdb_entry = NULL;
3975 }
3976 __network_hash_unlink(f);
3977 - _rtw_mfree((u8 *) f, sizeof(struct nat25_network_db_entry));
3978 + rtw_mfree((u8 *) f, sizeof(struct nat25_network_db_entry));
3979 }
3980 }
3981
3982 @@ -848,6 +848,11 @@ int nat25_db_handle(_adapter *priv, stru
3983 else {
3984 // forward unknow IP packet to upper TCP/IP
3985 DEBUG_INFO("NAT25: Replace DA with BR's MAC\n");
3986 + if ( (*(u32 *)priv->br_mac) == 0 && (*(u16 *)(priv->br_mac+4)) == 0 ) {
3987 + void netdev_br_init(struct net_device *netdev);
3988 + printk("Re-init netdev_br_init() due to br_mac==0!\n");
3989 + netdev_br_init(priv->pnetdev);
3990 + }
3991 memcpy(skb->data, priv->br_mac, ETH_ALEN);
3992 }
3993 }
3994 @@ -1533,7 +1538,7 @@ int nat25_handle_frame(_adapter *priv, s
3995 _exit_critical_bh(&priv->br_ext_lock, &irqL);
3996
3997 retval = nat25_db_handle(priv, skb, NAT25_LOOKUP);
3998 - }
3999 + }
4000 }
4001 else {
4002 if (((*((unsigned short *)(skb->data+ETH_ALEN*2)) == __constant_htons(ETH_P_IP)) &&
4003 @@ -1633,13 +1638,13 @@ void dhcp_flag_bcast(_adapter *priv, str
4004
4005 if(iph->protocol == IPPROTO_UDP) // UDP
4006 {
4007 - struct udphdr *udph = (struct udphdr *)((unsigned int)iph + (iph->ihl << 2));
4008 + struct udphdr *udph = (struct udphdr *)((SIZE_PTR)iph + (iph->ihl << 2));
4009
4010 if((udph->source == __constant_htons(CLIENT_PORT))
4011 && (udph->dest == __constant_htons(SERVER_PORT))) // DHCP request
4012 {
4013 struct dhcpMessage *dhcph =
4014 - (struct dhcpMessage *)((unsigned int)udph + sizeof(struct udphdr));
4015 + (struct dhcpMessage *)((SIZE_PTR)udph + sizeof(struct udphdr));
4016
4017 if(dhcph->cookie == __constant_htonl(DHCP_MAGIC)) // match magic word
4018 {
4019 --- a/drivers/net/wireless/rtl8192cu/core/rtw_cmd.c
4020 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_cmd.c
4021 @@ -16,7 +16,7 @@
4022 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
4023 *
4024 *
4025 -******************************************************************************/
4026 + ******************************************************************************/
4027 #define _RTW_CMD_C_
4028
4029 #include <drv_conf.h>
4030 @@ -58,9 +58,8 @@ _func_enter_;
4031 goto exit;
4032 }
4033
4034 - //pcmdpriv->cmd_buf = pcmdpriv->cmd_allocated_buf + CMDBUFF_ALIGN_SZ - ( (SIZE_PTR)(pcmdpriv->cmd_allocated_buf) & (CMDBUFF_ALIGN_SZ-1));
4035 - pcmdpriv->cmd_buf = (u8 *)N_BYTE_ALIGMENT((SIZE_PTR)(pcmdpriv->cmd_allocated_buf ), CMDBUFF_ALIGN_SZ);
4036 -
4037 + pcmdpriv->cmd_buf = pcmdpriv->cmd_allocated_buf + CMDBUFF_ALIGN_SZ - ( (SIZE_PTR)(pcmdpriv->cmd_allocated_buf) & (CMDBUFF_ALIGN_SZ-1));
4038 +
4039 pcmdpriv->rsp_allocated_buf = rtw_zmalloc(MAX_RSPSZ + 4);
4040
4041 if (pcmdpriv->rsp_allocated_buf == NULL){
4042 @@ -68,9 +67,8 @@ _func_enter_;
4043 goto exit;
4044 }
4045
4046 - //pcmdpriv->rsp_buf = pcmdpriv->rsp_allocated_buf + 4 - ( (SIZE_PTR)(pcmdpriv->rsp_allocated_buf) & 3);
4047 - pcmdpriv->rsp_buf = (u8 *)N_BYTE_ALIGMENT((SIZE_PTR)(pcmdpriv->rsp_allocated_buf ), 4);
4048 -
4049 + pcmdpriv->rsp_buf = pcmdpriv->rsp_allocated_buf + 4 - ( (SIZE_PTR)(pcmdpriv->rsp_allocated_buf) & 3);
4050 +
4051 pcmdpriv->cmd_issued_cnt = pcmdpriv->cmd_done_cnt = pcmdpriv->rsp_cnt = 0;
4052
4053 exit:
4054 @@ -81,7 +79,9 @@ _func_exit_;
4055
4056 }
4057
4058 -
4059 +#ifdef CONFIG_C2H_WK
4060 +static void c2h_wk_callback(_workitem *work);
4061 +#endif
4062 sint _rtw_init_evt_priv(struct evt_priv *pevtpriv)
4063 {
4064 sint res=_SUCCESS;
4065 @@ -109,8 +109,7 @@ _func_enter_;
4066 res= _FAIL;
4067 goto exit;
4068 }
4069 - //pevtpriv->evt_buf = pevtpriv->evt_allocated_buf + 4 - ((unsigned int)(pevtpriv->evt_allocated_buf) & 3);
4070 - pevtpriv->evt_buf = (u8 *)N_BYTE_ALIGMENT((SIZE_PTR)(pevtpriv->evt_allocated_buf ), 4);
4071 + pevtpriv->evt_buf = pevtpriv->evt_allocated_buf + 4 - ((unsigned int)(pevtpriv->evt_allocated_buf) & 3);
4072
4073
4074 #ifdef CONFIG_SDIO_HCI
4075 @@ -121,10 +120,8 @@ _func_enter_;
4076 goto exit;
4077 }
4078
4079 - //pevtpriv->c2h_mem = pevtpriv->allocated_c2h_mem + 4
4080 - //- ( (u32)(pevtpriv->allocated_c2h_mem) & 3);
4081 - pevtpriv->c2h_mem = (u8 *)N_BYTE_ALIGMENT((SIZE_PTR)(pevtpriv->allocated_c2h_mem ), 4);
4082 -
4083 + pevtpriv->c2h_mem = pevtpriv->allocated_c2h_mem + 4\
4084 + - ( (u32)(pevtpriv->allocated_c2h_mem) & 3);
4085 #ifdef PLATFORM_OS_XP
4086 pevtpriv->pc2h_mdl= IoAllocateMdl((u8 *)pevtpriv->c2h_mem, C2H_MEM_SZ , FALSE, FALSE, NULL);
4087
4088 @@ -142,6 +139,12 @@ exit:
4089
4090 #endif //end of CONFIG_EVENT_THREAD_MODE
4091
4092 +#ifdef CONFIG_C2H_WK
4093 + _init_workitem(&pevtpriv->c2h_wk, c2h_wk_callback, NULL);
4094 + pevtpriv->c2h_wk_alive = _FALSE;
4095 + pevtpriv->c2h_queue = rtw_cbuf_alloc(C2H_QUEUE_MAX_LEN+1);
4096 +#endif
4097 +
4098 _func_exit_;
4099
4100 return res;
4101 @@ -162,6 +165,21 @@ _func_enter_;
4102 rtw_mfree(pevtpriv->evt_allocated_buf, MAX_EVTSZ + 4);
4103 #endif
4104
4105 +#ifdef CONFIG_C2H_WK
4106 + _cancel_workitem_sync(&pevtpriv->c2h_wk);
4107 + while(pevtpriv->c2h_wk_alive)
4108 + rtw_msleep_os(10);
4109 +
4110 + while (!rtw_cbuf_empty(pevtpriv->c2h_queue)) {
4111 + void *c2h;
4112 + if ((c2h = rtw_cbuf_pop(pevtpriv->c2h_queue)) != NULL
4113 + && c2h != (void *)pevtpriv) {
4114 + rtw_mfree(c2h, 16);
4115 + }
4116 + }
4117 + rtw_cbuf_free(pevtpriv->c2h_queue);
4118 +#endif
4119 +
4120 RT_TRACE(_module_rtl871x_cmd_c_,_drv_info_,("-_rtw_free_evt_priv \n"));
4121
4122 _func_exit_;
4123 @@ -229,8 +247,7 @@ struct cmd_obj *_rtw_dequeue_cmd(_queue
4124 _func_enter_;
4125
4126 //_enter_critical_bh(&(queue->lock), &irqL);
4127 - _enter_critical(&(queue->lock), &irqL);
4128 -
4129 + _enter_critical(&queue->lock, &irqL);
4130 if (rtw_is_list_empty(&(queue->queue)))
4131 obj = NULL;
4132 else
4133 @@ -240,7 +257,7 @@ _func_enter_;
4134 }
4135
4136 //_exit_critical_bh(&(queue->lock), &irqL);
4137 - _exit_critical(&(queue->lock), &irqL);
4138 + _exit_critical(&queue->lock, &irqL);
4139
4140 _func_exit_;
4141
4142 @@ -281,6 +298,7 @@ _func_enter_;
4143 _func_exit_;
4144 }
4145
4146 +int rtw_cmd_filter(struct cmd_priv *pcmdpriv, struct cmd_obj *cmd_obj);
4147 int rtw_cmd_filter(struct cmd_priv *pcmdpriv, struct cmd_obj *cmd_obj)
4148 {
4149 u8 bAllow = _FALSE; //set to _TRUE to allow enqueuing cmd when hw_init_completed is _FALSE
4150 @@ -292,23 +310,23 @@ int rtw_cmd_filter(struct cmd_priv *pcmd
4151 )
4152 {
4153 if(cmd_obj->cmdcode == GEN_CMD_CODE(_Set_Drv_Extra) )
4154 - {
4155 + {
4156 struct drvextra_cmd_parm *pdrvextra_cmd_parm = (struct drvextra_cmd_parm *)cmd_obj->parmbuf;
4157 if(pdrvextra_cmd_parm->ec_id == POWER_SAVING_CTRL_WK_CID)
4158 {
4159 - //DBG_8192C("==>enqueue POWER_SAVING_CTRL_WK_CID\n");
4160 + //DBG_871X("==>enqueue POWER_SAVING_CTRL_WK_CID\n");
4161 bAllow = _TRUE;
4162 }
4163 }
4164 }
4165 -#endif
4166 + #endif
4167
4168 if(cmd_obj->cmdcode == GEN_CMD_CODE(_SetChannelPlan))
4169 bAllow = _TRUE;
4170
4171 if( (pcmdpriv->padapter->hw_init_completed ==_FALSE && bAllow == _FALSE)
4172 - || pcmdpriv->cmdthd_running== _FALSE //com_thread not running
4173 - )
4174 + || pcmdpriv->cmdthd_running== _FALSE //com_thread not running
4175 + )
4176 {
4177 //DBG_871X("%s:%s: drop cmdcode:%u, hw_init_completed:%u, cmdthd_running:%u\n", caller_func, __FUNCTION__,
4178 // cmd_obj->cmdcode,
4179 @@ -326,6 +344,7 @@ int rtw_cmd_filter(struct cmd_priv *pcmd
4180 u32 rtw_enqueue_cmd(struct cmd_priv *pcmdpriv, struct cmd_obj *cmd_obj)
4181 {
4182 int res = _FAIL;
4183 + PADAPTER padapter = pcmdpriv->padapter;
4184
4185 _func_enter_;
4186
4187 @@ -333,6 +352,14 @@ _func_enter_;
4188 goto exit;
4189 }
4190
4191 + cmd_obj->padapter = padapter;
4192 +
4193 +#ifdef CONFIG_CONCURRENT_MODE
4194 + //change pcmdpriv to primary's pcmdpriv
4195 + if (padapter->adapter_type != PRIMARY_ADAPTER && padapter->pbuddy_adapter)
4196 + pcmdpriv = &(padapter->pbuddy_adapter->cmdpriv);
4197 +#endif
4198 +
4199 if( _FAIL == (res=rtw_cmd_filter(pcmdpriv, cmd_obj)) ) {
4200 rtw_free_cmd_obj(cmd_obj);
4201 goto exit;
4202 @@ -395,6 +422,16 @@ _func_enter_;
4203 _func_exit_;
4204 }
4205
4206 +void rtw_stop_cmd_thread(_adapter *adapter)
4207 +{
4208 + if(adapter->cmdThread && adapter->cmdpriv.cmdthd_running == _TRUE
4209 + && adapter->cmdpriv.stop_req == 0)
4210 + {
4211 + adapter->cmdpriv.stop_req = 1;
4212 + _rtw_up_sema(&adapter->cmdpriv.cmd_queue_sema);
4213 + _rtw_down_sema(&adapter->cmdpriv.terminate_cmdthread_sema);
4214 + }
4215 +}
4216
4217 thread_return rtw_cmd_thread(thread_context context)
4218 {
4219 @@ -408,11 +445,12 @@ thread_return rtw_cmd_thread(thread_cont
4220
4221 _func_enter_;
4222
4223 - thread_enter(padapter);
4224 + thread_enter("RTW_CMD_THREAD");
4225
4226 pcmdbuf = pcmdpriv->cmd_buf;
4227 prspbuf = pcmdpriv->rsp_buf;
4228
4229 + pcmdpriv->stop_req = 0;
4230 pcmdpriv->cmdthd_running=_TRUE;
4231 _rtw_up_sema(&pcmdpriv->terminate_cmdthread_sema);
4232
4233 @@ -420,24 +458,35 @@ _func_enter_;
4234
4235 while(1)
4236 {
4237 - if ((_rtw_down_sema(&(pcmdpriv->cmd_queue_sema))) == _FAIL)
4238 + if ((_rtw_down_sema(&(pcmdpriv->cmd_queue_sema))) == _FAIL) {
4239 + LOG_LEVEL(_drv_err_, FUNC_ADPT_FMT" _rtw_down_sema(&pcmdpriv->cmd_queue_sema) return _FAIL, break\n", FUNC_ADPT_ARG(padapter));
4240 break;
4241 + }
4242
4243 + if (pcmdpriv->stop_req) {
4244 + LOG_LEVEL(_drv_err_, FUNC_ADPT_FMT" stop_req:%u, break\n", FUNC_ADPT_ARG(padapter), pcmdpriv->stop_req);
4245 + break;
4246 + }
4247 +
4248 +#ifdef CONFIG_LPS_LCLK
4249 if (rtw_register_cmd_alive(padapter) != _SUCCESS)
4250 {
4251 continue;
4252 }
4253 +#endif
4254
4255 _next:
4256 - if ((padapter->bDriverStopped == _TRUE)||(padapter->bSurpriseRemoved== _TRUE))
4257 + if ((padapter->bDriverStopped == _TRUE)||(padapter->bSurpriseRemoved == _TRUE))
4258 {
4259 - DBG_8192C("###> rtw_cmd_thread break.................\n");
4260 - RT_TRACE(_module_rtl871x_cmd_c_, _drv_info_, ("rtw_cmd_thread:bDriverStopped(%d) OR bSurpriseRemoved(%d)", padapter->bDriverStopped, padapter->bSurpriseRemoved));
4261 + LOG_LEVEL(_drv_err_, "%s: DriverStopped(%d) SurpriseRemoved(%d) break at line %d\n",
4262 + __FUNCTION__, padapter->bDriverStopped, padapter->bSurpriseRemoved, __LINE__);
4263 break;
4264 }
4265
4266 if(!(pcmd = rtw_dequeue_cmd(pcmdpriv))) {
4267 +#ifdef CONFIG_LPS_LCLK
4268 rtw_unregister_cmd_alive(padapter);
4269 +#endif
4270 continue;
4271 }
4272
4273 @@ -447,6 +496,11 @@ _next:
4274 goto post_process;
4275 }
4276
4277 + if( _FAIL == rtw_cmd_filter(pcmdpriv, pcmd) ) {
4278 + rtw_free_cmd_obj(pcmd);
4279 + continue;
4280 + }
4281 +
4282 pcmdpriv->cmd_issued_cnt++;
4283
4284 pcmd->cmdsz = _RND4((pcmd->cmdsz));//_RND4
4285 @@ -459,11 +513,11 @@ _next:
4286
4287 if (cmd_hdl)
4288 {
4289 - ret = cmd_hdl(padapter, pcmdbuf);
4290 + ret = cmd_hdl(pcmd->padapter, pcmdbuf);
4291 pcmd->res = ret;
4292 }
4293
4294 - pcmdpriv->cmd_seq++;
4295 + pcmdpriv->cmd_seq++;
4296 }
4297 else
4298 {
4299 @@ -473,7 +527,7 @@ _next:
4300 cmd_hdl = NULL;
4301
4302 post_process:
4303 -
4304 +
4305 //call callback function for post-processed
4306 if(pcmd->cmdcode <= (sizeof(rtw_cmd_callback) /sizeof(struct _cmd_callback)))
4307 {
4308 @@ -486,20 +540,17 @@ post_process:
4309 else
4310 {
4311 //todo: !!! fill rsp_buf to pcmd->rsp if (pcmd->rsp!=NULL)
4312 - pcmd_callback(padapter, pcmd);//need conider that free cmd_obj in rtw_cmd_callback
4313 + pcmd_callback(pcmd->padapter, pcmd);//need conider that free cmd_obj in rtw_cmd_callback
4314 }
4315 - }
4316 -
4317 + }
4318
4319 flush_signals_thread();
4320
4321 goto _next;
4322
4323 }
4324 -
4325 pcmdpriv->cmdthd_running=_FALSE;
4326
4327 - DBG_871X("%s: leaving... check & free all cmd_obj resources\n", __FUNCTION__);
4328
4329 // free all cmd_obj resources
4330 do{
4331 @@ -507,13 +558,11 @@ post_process:
4332 if(pcmd==NULL)
4333 break;
4334
4335 - DBG_871X("%s: leaving... drop cmdcode:%u\n", __FUNCTION__, pcmd->cmdcode);
4336 + //DBG_871X("%s: leaving... drop cmdcode:%u\n", __FUNCTION__, pcmd->cmdcode);
4337
4338 rtw_free_cmd_obj(pcmd);
4339 }while(1);
4340
4341 - DBG_871X("%s: leaving... call up terminate_cmdthread_sema\n", __FUNCTION__);
4342 -
4343 _rtw_up_sema(&pcmdpriv->terminate_cmdthread_sema);
4344
4345 _func_exit_;
4346 @@ -644,28 +693,28 @@ rtw_sitesurvey_cmd(~)
4347 ### NOTE:#### (!!!!)
4348 MUST TAKE CARE THAT BEFORE CALLING THIS FUNC, YOU SHOULD HAVE LOCKED pmlmepriv->lock
4349 */
4350 -u8 rtw_sitesurvey_cmd(_adapter *padapter, NDIS_802_11_SSID *pssid, int ssid_max_num)
4351 +u8 rtw_sitesurvey_cmd(_adapter *padapter, NDIS_802_11_SSID *ssid, int ssid_num,
4352 + struct rtw_ieee80211_channel *ch, int ch_num)
4353 {
4354 u8 res = _FAIL;
4355 struct cmd_obj *ph2c;
4356 struct sitesurvey_parm *psurveyPara;
4357 struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
4358 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
4359 -#ifdef CONFIG_P2P
4360 - struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
4361 -#endif //CONFIG_P2P
4362
4363 -_func_enter_;
4364 -
4365 +_func_enter_;
4366 +
4367 #ifdef CONFIG_LPS
4368 if(check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE){
4369 rtw_lps_ctrl_wk_cmd(padapter, LPS_CTRL_SCAN, 1);
4370 }
4371 #endif
4372
4373 -#ifdef CONFIG_P2P
4374 - p2p_ps_wk_cmd(padapter, P2P_PS_SCAN, 1);
4375 -#endif //CONFIG_P2P
4376 +#ifdef CONFIG_P2P_PS
4377 + if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) {
4378 + p2p_ps_wk_cmd(padapter, P2P_PS_SCAN, 1);
4379 + }
4380 +#endif // CONFIG_P2P_PS
4381
4382 ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
4383 if (ph2c == NULL)
4384 @@ -683,18 +732,33 @@ _func_enter_;
4385
4386 init_h2fwcmd_w_parm_no_rsp(ph2c, psurveyPara, GEN_CMD_CODE(_SiteSurvey));
4387
4388 - psurveyPara->bsslimit = 48;
4389 + /* psurveyPara->bsslimit = 48; */
4390 psurveyPara->scan_mode = pmlmepriv->scan_mode;
4391
4392 - _rtw_memset(psurveyPara->ssid, 0, sizeof(NDIS_802_11_SSID)*RTW_SSID_SCAN_AMOUNT);
4393 + /* prepare ssid list */
4394 + if (ssid) {
4395 + int i;
4396 + for (i=0; i<ssid_num && i< RTW_SSID_SCAN_AMOUNT; i++) {
4397 + if (ssid[i].SsidLength) {
4398 + _rtw_memcpy(&psurveyPara->ssid[i], &ssid[i], sizeof(NDIS_802_11_SSID));
4399 + psurveyPara->ssid_num++;
4400 + if (0)
4401 + DBG_871X(FUNC_ADPT_FMT" ssid:(%s, %d)\n", FUNC_ADPT_ARG(padapter),
4402 + psurveyPara->ssid[i].Ssid, psurveyPara->ssid[i].SsidLength);
4403 + }
4404 + }
4405 + }
4406
4407 - if(pssid){
4408 + /* prepare channel list */
4409 + if (ch) {
4410 int i;
4411 - for(i=0; i<ssid_max_num && i< RTW_SSID_SCAN_AMOUNT; i++){
4412 - if(pssid[i].SsidLength){
4413 - _rtw_memcpy(&psurveyPara->ssid[i], &pssid[i], sizeof(NDIS_802_11_SSID));
4414 - //DBG_871X("%s scan for specific ssid: %s, %d\n", __FUNCTION__
4415 - // , psurveyPara->ssid[i].Ssid, psurveyPara->ssid[i].SsidLength);
4416 + for (i=0; i<ch_num && i< RTW_CHANNEL_SCAN_AMOUNT; i++) {
4417 + if (ch[i].hw_value && !(ch[i].flags & RTW_IEEE80211_CHAN_DISABLED)) {
4418 + _rtw_memcpy(&psurveyPara->ch[i], &ch[i], sizeof(struct rtw_ieee80211_channel));
4419 + psurveyPara->ch_num++;
4420 + if (0)
4421 + DBG_871X(FUNC_ADPT_FMT" ch:%u\n", FUNC_ADPT_ARG(padapter),
4422 + psurveyPara->ch[i].hw_value);
4423 }
4424 }
4425 }
4426 @@ -707,7 +771,16 @@ _func_enter_;
4427
4428 pmlmepriv->scan_start_time = rtw_get_current_time();
4429
4430 - _set_timer(&pmlmepriv->scan_to_timer, SCANNING_TIMEOUT);
4431 +#ifdef CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
4432 + if (padapter->pbuddy_adapter == NULL )
4433 + goto full_scan_timeout;
4434 + if((padapter->pbuddy_adapter->mlmeextpriv.mlmext_info.state&0x03) == WIFI_FW_AP_STATE)
4435 + _set_timer(&pmlmepriv->scan_to_timer,
4436 + SURVEY_TO * ( padapter->mlmeextpriv.max_chan_nums + ( padapter->mlmeextpriv.max_chan_nums / RTW_SCAN_NUM_OF_CH ) * RTW_STAY_AP_CH_MILLISECOND ) + 1000 );
4437 + else
4438 +#endif //CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
4439 +full_scan_timeout:
4440 + _set_timer(&pmlmepriv->scan_to_timer, SCANNING_TIMEOUT);
4441
4442 rtw_led_control(padapter, LED_CTL_SITE_SURVEY);
4443
4444 @@ -1219,7 +1292,7 @@ _func_enter_;
4445 {
4446 //rtw_restructure_ht_ie
4447 rtw_restructure_ht_ie(padapter, &pnetwork->network.IEs[0], &psecnetwork->IEs[0],
4448 - pnetwork->network.IELength, &psecnetwork->IELength);
4449 + pnetwork->network.IELength, &psecnetwork->IELength, (u8)psecnetwork->Configuration.DSConfig );
4450 }
4451 }
4452
4453 @@ -1276,38 +1349,42 @@ _func_exit_;
4454 return res;
4455 }
4456
4457 -u8 rtw_disassoc_cmd(_adapter*padapter) // for sta_mode
4458 +u8 rtw_disassoc_cmd(_adapter*padapter, u32 deauth_timeout_ms, bool enqueue) /* for sta_mode */
4459 {
4460 - struct cmd_obj* pdisconnect_cmd;
4461 - struct disconnect_parm* pdisconnect;
4462 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
4463 - struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
4464 -
4465 - u8 res=_SUCCESS;
4466 + struct cmd_obj *cmdobj = NULL;
4467 + struct disconnect_parm *param = NULL;
4468 + struct cmd_priv *cmdpriv = &padapter->cmdpriv;
4469 + u8 res = _SUCCESS;
4470
4471 _func_enter_;
4472
4473 RT_TRACE(_module_rtl871x_cmd_c_, _drv_notice_, ("+rtw_disassoc_cmd\n"));
4474 -
4475 - //if ((check_fwstate(pmlmepriv, _FW_LINKED)) == _TRUE) {
4476
4477 - pdisconnect_cmd = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
4478 - if(pdisconnect_cmd == NULL){
4479 - res=_FAIL;
4480 - goto exit;
4481 - }
4482 + /* prepare cmd parameter */
4483 + param = (struct disconnect_parm *)rtw_zmalloc(sizeof(*param));
4484 + if (param == NULL) {
4485 + res = _FAIL;
4486 + goto exit;
4487 + }
4488 + param->deauth_timeout_ms = deauth_timeout_ms;
4489
4490 - pdisconnect = (struct disconnect_parm*)rtw_zmalloc(sizeof(struct disconnect_parm));
4491 - if(pdisconnect == NULL) {
4492 - rtw_mfree((u8 *)pdisconnect_cmd, sizeof(struct cmd_obj));
4493 - res= _FAIL;
4494 + if (enqueue) {
4495 + /* need enqueue, prepare cmd_obj and enqueue */
4496 + cmdobj = (struct cmd_obj *)rtw_zmalloc(sizeof(*cmdobj));
4497 + if (cmdobj == NULL) {
4498 + res = _FAIL;
4499 + rtw_mfree((u8 *)param, sizeof(*param));
4500 goto exit;
4501 }
4502 -
4503 - init_h2fwcmd_w_parm_no_rsp(pdisconnect_cmd, pdisconnect, _DisConnect_CMD_);
4504 - res = rtw_enqueue_cmd(pcmdpriv, pdisconnect_cmd);
4505 - //}
4506 -
4507 + init_h2fwcmd_w_parm_no_rsp(cmdobj, param, _DisConnect_CMD_);
4508 + res = rtw_enqueue_cmd(cmdpriv, cmdobj);
4509 + } else {
4510 + /* no need to enqueue, do the cmd hdl directly and free cmd parameter */
4511 + if (H2C_SUCCESS != disconnect_hdl(padapter, (u8 *)param))
4512 + res = _FAIL;
4513 + rtw_mfree((u8 *)param, sizeof(*param));
4514 + }
4515 +
4516 exit:
4517
4518 _func_exit_;
4519 @@ -1396,7 +1473,7 @@ _func_enter_;
4520 if(sta->tdls_sta_state&TDLS_LINKED_STATE)
4521 psetstakey_para->algorithm=(u8)sta->dot118021XPrivacy;
4522 else
4523 -#endif
4524 +#endif //CONFIG_TDLS
4525 psetstakey_para->algorithm =(unsigned char) psecuritypriv->dot11PrivacyAlgrthm;
4526 }else{
4527 GET_ENCRY_ALGO(psecuritypriv, sta, psetstakey_para->algorithm, _FALSE);
4528 @@ -1404,10 +1481,10 @@ _func_enter_;
4529
4530 if (unicast_key == _TRUE) {
4531 #ifdef CONFIG_TDLS
4532 - if((sta->tdls_sta_state&TDLS_LINKED_STATE)==TDLS_LINKED_STATE)
4533 + if(sta->tdls_sta_state&TDLS_LINKED_STATE)
4534 _rtw_memcpy(&psetstakey_para->key, sta->tpk.tk, 16);
4535 else
4536 -#endif
4537 +#endif //CONFIG_TDLS
4538 _rtw_memcpy(&psetstakey_para->key, &sta->dot118021x_UncstKey, 16);
4539 } else {
4540 _rtw_memcpy(&psetstakey_para->key, &psecuritypriv->dot118021XGrpKey[psecuritypriv->dot118021XGrpKeyid].skey, 16);
4541 @@ -1425,6 +1502,67 @@ _func_exit_;
4542 return res;
4543 }
4544
4545 +u8 rtw_clearstakey_cmd(_adapter *padapter, u8 *psta, u8 entry, u8 enqueue)
4546 +{
4547 + struct cmd_obj* ph2c;
4548 + struct set_stakey_parm *psetstakey_para;
4549 + struct cmd_priv *pcmdpriv=&padapter->cmdpriv;
4550 + struct set_stakey_rsp *psetstakey_rsp = NULL;
4551 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
4552 + struct security_priv *psecuritypriv = &padapter->securitypriv;
4553 + struct sta_info* sta = (struct sta_info* )psta;
4554 + u8 res=_SUCCESS;
4555 +
4556 +_func_enter_;
4557 +
4558 + if(!enqueue)
4559 + {
4560 + clear_cam_entry(padapter, entry);
4561 + }
4562 + else
4563 + {
4564 + ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
4565 + if ( ph2c == NULL){
4566 + res= _FAIL;
4567 + goto exit;
4568 + }
4569 +
4570 + psetstakey_para = (struct set_stakey_parm*)rtw_zmalloc(sizeof(struct set_stakey_parm));
4571 + if(psetstakey_para==NULL){
4572 + rtw_mfree((u8 *) ph2c, sizeof(struct cmd_obj));
4573 + res=_FAIL;
4574 + goto exit;
4575 + }
4576 +
4577 + psetstakey_rsp = (struct set_stakey_rsp*)rtw_zmalloc(sizeof(struct set_stakey_rsp));
4578 + if(psetstakey_rsp == NULL){
4579 + rtw_mfree((u8 *) ph2c, sizeof(struct cmd_obj));
4580 + rtw_mfree((u8 *) psetstakey_para, sizeof(struct set_stakey_parm));
4581 + res=_FAIL;
4582 + goto exit;
4583 + }
4584 +
4585 + init_h2fwcmd_w_parm_no_rsp(ph2c, psetstakey_para, _SetStaKey_CMD_);
4586 + ph2c->rsp = (u8 *) psetstakey_rsp;
4587 + ph2c->rspsz = sizeof(struct set_stakey_rsp);
4588 +
4589 + _rtw_memcpy(psetstakey_para->addr, sta->hwaddr, ETH_ALEN);
4590 +
4591 + psetstakey_para->algorithm = _NO_PRIVACY_;
4592 +
4593 + psetstakey_para->id = entry;
4594 +
4595 + res = rtw_enqueue_cmd(pcmdpriv, ph2c);
4596 +
4597 + }
4598 +
4599 +exit:
4600 +
4601 +_func_exit_;
4602 +
4603 + return res;
4604 +}
4605 +
4606 u8 rtw_setrttbl_cmd(_adapter *padapter, struct setratable_parm *prate_table)
4607 {
4608 struct cmd_obj* ph2c;
4609 @@ -1570,8 +1708,47 @@ _func_enter_;
4610
4611 init_h2fwcmd_w_parm_no_rsp(ph2c, paddbareq_parm, GEN_CMD_CODE(_AddBAReq));
4612
4613 - //DBG_8192C("rtw_addbareq_cmd, tid=%d\n", tid);
4614 + //DBG_871X("rtw_addbareq_cmd, tid=%d\n", tid);
4615 +
4616 + //rtw_enqueue_cmd(pcmdpriv, ph2c);
4617 + res = rtw_enqueue_cmd(pcmdpriv, ph2c);
4618 +
4619 +exit:
4620 +
4621 +_func_exit_;
4622 +
4623 + return res;
4624 +}
4625 +//add for CONFIG_IEEE80211W, none 11w can use it
4626 +u8 rtw_reset_securitypriv_cmd(_adapter*padapter)
4627 +{
4628 + struct cmd_obj* ph2c;
4629 + struct drvextra_cmd_parm *pdrvextra_cmd_parm;
4630 + struct cmd_priv *pcmdpriv=&padapter->cmdpriv;
4631 + u8 res=_SUCCESS;
4632 +
4633 +_func_enter_;
4634 +
4635 + ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
4636 + if(ph2c==NULL){
4637 + res= _FAIL;
4638 + goto exit;
4639 + }
4640 +
4641 + pdrvextra_cmd_parm = (struct drvextra_cmd_parm*)rtw_zmalloc(sizeof(struct drvextra_cmd_parm));
4642 + if(pdrvextra_cmd_parm==NULL){
4643 + rtw_mfree((unsigned char *)ph2c, sizeof(struct cmd_obj));
4644 + res= _FAIL;
4645 + goto exit;
4646 + }
4647 +
4648 + pdrvextra_cmd_parm->ec_id = RESET_SECURITYPRIV;
4649 + pdrvextra_cmd_parm->type_size = 0;
4650 + pdrvextra_cmd_parm->pbuf = (u8 *)padapter;
4651
4652 + init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
4653 +
4654 +
4655 //rtw_enqueue_cmd(pcmdpriv, ph2c);
4656 res = rtw_enqueue_cmd(pcmdpriv, ph2c);
4657
4658 @@ -1580,8 +1757,50 @@ exit:
4659 _func_exit_;
4660
4661 return res;
4662 +
4663 }
4664
4665 +u8 rtw_free_assoc_resources_cmd(_adapter*padapter)
4666 +{
4667 + struct cmd_obj* ph2c;
4668 + struct drvextra_cmd_parm *pdrvextra_cmd_parm;
4669 + struct cmd_priv *pcmdpriv=&padapter->cmdpriv;
4670 + u8 res=_SUCCESS;
4671 +
4672 +_func_enter_;
4673 +
4674 + ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
4675 + if(ph2c==NULL){
4676 + res= _FAIL;
4677 + goto exit;
4678 + }
4679 +
4680 + pdrvextra_cmd_parm = (struct drvextra_cmd_parm*)rtw_zmalloc(sizeof(struct drvextra_cmd_parm));
4681 + if(pdrvextra_cmd_parm==NULL){
4682 + rtw_mfree((unsigned char *)ph2c, sizeof(struct cmd_obj));
4683 + res= _FAIL;
4684 + goto exit;
4685 + }
4686 +
4687 + pdrvextra_cmd_parm->ec_id = FREE_ASSOC_RESOURCES;
4688 + pdrvextra_cmd_parm->type_size = 0;
4689 + pdrvextra_cmd_parm->pbuf = (u8 *)padapter;
4690 +
4691 + init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
4692 +
4693 +
4694 + //rtw_enqueue_cmd(pcmdpriv, ph2c);
4695 + res = rtw_enqueue_cmd(pcmdpriv, ph2c);
4696 +
4697 +exit:
4698 +
4699 +_func_exit_;
4700 +
4701 + return res;
4702 +
4703 +}
4704 +
4705 +
4706 u8 rtw_dynamic_chk_wk_cmd(_adapter*padapter)
4707 {
4708 struct cmd_obj* ph2c;
4709 @@ -1591,6 +1810,15 @@ u8 rtw_dynamic_chk_wk_cmd(_adapter*padap
4710
4711 _func_enter_;
4712
4713 + if ((padapter->bDriverStopped == _TRUE)||(padapter->bSurpriseRemoved== _TRUE))
4714 + goto exit;
4715 +
4716 +
4717 +#ifdef CONFIG_CONCURRENT_MODE
4718 + if (padapter->adapter_type != PRIMARY_ADAPTER && padapter->pbuddy_adapter)
4719 + pcmdpriv = &(padapter->pbuddy_adapter->cmdpriv);
4720 +#endif
4721 +
4722 ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
4723 if(ph2c==NULL){
4724 res= _FAIL;
4725 @@ -1606,7 +1834,7 @@ _func_enter_;
4726
4727 pdrvextra_cmd_parm->ec_id = DYNAMIC_CHK_WK_CID;
4728 pdrvextra_cmd_parm->type_size = 0;
4729 - pdrvextra_cmd_parm->pbuf = NULL;
4730 + pdrvextra_cmd_parm->pbuf = (u8 *)padapter;
4731
4732 init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
4733
4734 @@ -1622,11 +1850,65 @@ _func_exit_;
4735
4736 }
4737
4738 +u8 rtw_set_ch_cmd(_adapter*padapter, u8 ch, u8 bw, u8 ch_offset, u8 enqueue)
4739 +{
4740 + struct cmd_obj *pcmdobj;
4741 + struct set_ch_parm *set_ch_parm;
4742 + struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
4743 +
4744 + u8 res=_SUCCESS;
4745 +
4746 +_func_enter_;
4747 +
4748 + DBG_871X(FUNC_NDEV_FMT" ch:%u, bw:%u, ch_offset:%u\n",
4749 + FUNC_NDEV_ARG(padapter->pnetdev), ch, bw, ch_offset);
4750 +
4751 + /* check input parameter */
4752 +
4753 + /* prepare cmd parameter */
4754 + set_ch_parm = (struct set_ch_parm *)rtw_zmalloc(sizeof(*set_ch_parm));
4755 + if (set_ch_parm == NULL) {
4756 + res= _FAIL;
4757 + goto exit;
4758 + }
4759 + set_ch_parm->ch = ch;
4760 + set_ch_parm->bw = bw;
4761 + set_ch_parm->ch_offset = ch_offset;
4762 +
4763 + if (enqueue) {
4764 + /* need enqueue, prepare cmd_obj and enqueue */
4765 + pcmdobj = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
4766 + if(pcmdobj == NULL){
4767 + rtw_mfree((u8 *)set_ch_parm, sizeof(*set_ch_parm));
4768 + res=_FAIL;
4769 + goto exit;
4770 + }
4771 +
4772 + init_h2fwcmd_w_parm_no_rsp(pcmdobj, set_ch_parm, GEN_CMD_CODE(_SetChannel));
4773 + res = rtw_enqueue_cmd(pcmdpriv, pcmdobj);
4774 + } else {
4775 + /* no need to enqueue, do the cmd hdl directly and free cmd parameter */
4776 + if( H2C_SUCCESS !=set_ch_hdl(padapter, (u8 *)set_ch_parm) )
4777 + res = _FAIL;
4778 +
4779 + rtw_mfree((u8 *)set_ch_parm, sizeof(*set_ch_parm));
4780 + }
4781 +
4782 + /* do something based on res... */
4783 +
4784 +exit:
4785 +
4786 + DBG_871X(FUNC_NDEV_FMT" res:%u\n", FUNC_NDEV_ARG(padapter->pnetdev), res);
4787 +
4788 +_func_exit_;
4789 +
4790 + return res;
4791 +}
4792 +
4793 u8 rtw_set_chplan_cmd(_adapter*padapter, u8 chplan, u8 enqueue)
4794 {
4795 struct cmd_obj* pcmdobj;
4796 struct SetChannelPlan_param *setChannelPlan_param;
4797 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
4798 struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
4799
4800 u8 res=_SUCCESS;
4801 @@ -1738,7 +2020,7 @@ _func_enter_;
4802 goto exit;
4803 }
4804
4805 - setChannelSwitch_param = (struct SetChannelSwitch_param *)rtw_zmalloc(sizeof(struct SetChannelSwitch_param));
4806 + setChannelSwitch_param = (struct SetChannelSwitch_param *)rtw_zmalloc(sizeof(struct SetChannelSwitch_param));
4807 if(setChannelSwitch_param == NULL) {
4808 rtw_mfree((u8 *)pcmdobj, sizeof(struct cmd_obj));
4809 res= _FAIL;
4810 @@ -1806,9 +2088,8 @@ static void traffic_status_watchdog(_ada
4811 {
4812 #ifdef CONFIG_LPS
4813 u8 bEnterPS;
4814 - u32 trx_threshold;
4815 - u32 rx_threshold;
4816 #endif
4817 + u16 BusyThreshold = 100;
4818 u8 bBusyTraffic = _FALSE, bTxBusyTraffic = _FALSE, bRxBusyTraffic = _FALSE;
4819 u8 bHigherBusyTraffic = _FALSE, bHigherBusyRxTraffic = _FALSE, bHigherBusyTxTraffic = _FALSE;
4820 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
4821 @@ -1816,6 +2097,8 @@ static void traffic_status_watchdog(_ada
4822 struct tdls_info *ptdlsinfo = &(padapter->tdlsinfo);
4823 #endif //CONFIG_TDLS
4824
4825 + RT_LINK_DETECT_T * link_detect = &pmlmepriv->LinkDetectInfo;
4826 +
4827 //
4828 // Determine if our traffic is busy now
4829 //
4830 @@ -1823,15 +2106,18 @@ static void traffic_status_watchdog(_ada
4831 /*&& !MgntInitAdapterInProgress(pMgntInfo)*/)
4832 {
4833
4834 - if( pmlmepriv->LinkDetectInfo.NumRxOkInPeriod > 100 ||
4835 - pmlmepriv->LinkDetectInfo.NumTxOkInPeriod > 100 )
4836 + // if we raise bBusyTraffic in last watchdog, using lower threshold.
4837 + if (pmlmepriv->LinkDetectInfo.bBusyTraffic)
4838 + BusyThreshold = 75;
4839 + if( pmlmepriv->LinkDetectInfo.NumRxOkInPeriod > BusyThreshold ||
4840 + pmlmepriv->LinkDetectInfo.NumTxOkInPeriod > BusyThreshold )
4841 {
4842 bBusyTraffic = _TRUE;
4843
4844 - if(pmlmepriv->LinkDetectInfo.NumRxOkInPeriod > 100)
4845 + if(pmlmepriv->LinkDetectInfo.NumRxOkInPeriod > BusyThreshold)
4846 bRxBusyTraffic = _TRUE;
4847
4848 - if(pmlmepriv->LinkDetectInfo.NumTxOkInPeriod > 100)
4849 + if(pmlmepriv->LinkDetectInfo.NumTxOkInPeriod > BusyThreshold)
4850 bTxBusyTraffic = _TRUE;
4851 }
4852
4853 @@ -1849,29 +2135,39 @@ static void traffic_status_watchdog(_ada
4854 if(pmlmepriv->LinkDetectInfo.NumTxOkInPeriod > 5000)
4855 bHigherBusyTxTraffic = _TRUE;
4856 }
4857 -
4858 +
4859 +#ifdef CONFIG_TRAFFIC_PROTECT
4860 +#define TX_ACTIVE_TH 2
4861 +#define RX_ACTIVE_TH 1
4862 +#define TRAFFIC_PROTECT_PERIOD_MS 4500
4863 +
4864 + if (link_detect->NumTxOkInPeriod > TX_ACTIVE_TH
4865 + || link_detect->NumRxUnicastOkInPeriod > RX_ACTIVE_TH) {
4866 +
4867 + LOG_LEVEL(_drv_info_, FUNC_ADPT_FMT" acqiure wake_lock for %u ms(tx:%d,rx_unicast:%d)\n",
4868 + FUNC_ADPT_ARG(padapter),
4869 + TRAFFIC_PROTECT_PERIOD_MS,
4870 + link_detect->NumTxOkInPeriod,
4871 + link_detect->NumRxUnicastOkInPeriod);
4872 +
4873 + rtw_lock_suspend_timeout(TRAFFIC_PROTECT_PERIOD_MS);
4874 + }
4875 +#endif
4876 +
4877 #ifdef CONFIG_TDLS
4878 #ifdef CONFIG_TDLS_AUTOSETUP
4879 - if( ( ptdlsinfo->watchdog_count % TDLS_WATCHDOG_PERIOD ) == 0 ) //10 * 2sec, periodically sending
4880 + if( ( ptdlsinfo->watchdog_count % TDLS_WATCHDOG_PERIOD ) == 0 ) //TDLS_WATCHDOG_PERIOD * 2sec, periodically sending
4881 issue_tdls_dis_req( padapter, NULL );
4882 ptdlsinfo->watchdog_count++;
4883 #endif //CONFIG_TDLS_AUTOSETUP
4884 #endif //CONFIG_TDLS
4885 -
4886 +
4887 #ifdef CONFIG_LPS
4888 // check traffic for powersaving.
4889 - if(padapter->registrypriv.intel_class_mode==1){
4890 - trx_threshold=1;
4891 - rx_threshold=1;
4892 - }
4893 - else{
4894 - trx_threshold=8;
4895 - rx_threshold=2;
4896 - }
4897 - if( ((pmlmepriv->LinkDetectInfo.NumRxUnicastOkInPeriod + pmlmepriv->LinkDetectInfo.NumTxOkInPeriod) > trx_threshold ) ||
4898 - (pmlmepriv->LinkDetectInfo.NumRxUnicastOkInPeriod > rx_threshold) )
4899 + if( ((pmlmepriv->LinkDetectInfo.NumRxUnicastOkInPeriod + pmlmepriv->LinkDetectInfo.NumTxOkInPeriod) > 8 ) ||
4900 + (pmlmepriv->LinkDetectInfo.NumRxUnicastOkInPeriod > 2) )
4901 {
4902 - //DBG_8192C("Tx = %d, Rx = %d \n",pmlmepriv->LinkDetectInfo.NumTxOkInPeriod,pmlmepriv->LinkDetectInfo.NumRxUnicastOkInPeriod);
4903 + //DBG_871X("Tx = %d, Rx = %d \n",pmlmepriv->LinkDetectInfo.NumTxOkInPeriod,pmlmepriv->LinkDetectInfo.NumRxUnicastOkInPeriod);
4904 bEnterPS= _FALSE;
4905 }
4906 else
4907 @@ -1905,15 +2201,39 @@ static void traffic_status_watchdog(_ada
4908 pmlmepriv->LinkDetectInfo.bRxBusyTraffic = bRxBusyTraffic;
4909 pmlmepriv->LinkDetectInfo.bHigherBusyTraffic = bHigherBusyTraffic;
4910 pmlmepriv->LinkDetectInfo.bHigherBusyRxTraffic = bHigherBusyRxTraffic;
4911 + pmlmepriv->LinkDetectInfo.bHigherBusyTxTraffic = bHigherBusyTxTraffic;
4912 +
4913 }
4914
4915 +void dynamic_chk_wk_hdl(_adapter *padapter, u8 *pbuf, int sz);
4916 void dynamic_chk_wk_hdl(_adapter *padapter, u8 *pbuf, int sz)
4917 {
4918 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
4919 - //struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
4920 + struct mlme_priv *pmlmepriv;
4921 +
4922 + if ((padapter->bDriverStopped == _TRUE)||(padapter->bSurpriseRemoved== _TRUE))
4923 + return;
4924 +
4925 + if((void*)padapter != (void*)pbuf && padapter->pbuddy_adapter == NULL)
4926 + return;
4927 +
4928 + padapter = (_adapter *)pbuf;
4929 +
4930 + if ((padapter->bDriverStopped == _TRUE)||(padapter->bSurpriseRemoved== _TRUE))
4931 + return;
4932 +
4933 + pmlmepriv = &(padapter->mlmepriv);
4934 +
4935 +#ifdef CONFIG_ACTIVE_KEEP_ALIVE_CHECK
4936 +#ifdef CONFIG_AP_MODE
4937 + if(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
4938 + {
4939 + expire_timeout_chk(padapter);
4940 + }
4941 +#endif
4942 +#endif //CONFIG_ACTIVE_KEEP_ALIVE_CHECK
4943 +
4944 #ifdef DBG_CONFIG_ERROR_DETECT
4945 - if(padapter->HalFunc.sreset_xmit_status_check)
4946 - padapter->HalFunc.sreset_xmit_status_check(padapter);
4947 + rtw_hal_sreset_xmit_status_check(padapter);
4948 #endif
4949
4950 //if(check_fwstate(pmlmepriv, _FW_UNDER_LINKING|_FW_UNDER_SURVEY)==_FALSE)
4951 @@ -1922,13 +2242,15 @@ void dynamic_chk_wk_hdl(_adapter *padapt
4952 traffic_status_watchdog(padapter);
4953 }
4954
4955 - padapter->HalFunc.hal_dm_watchdog(padapter);
4956 + rtw_hal_dm_watchdog(padapter);
4957
4958 //check_hw_pbc(padapter, pdrvextra_cmd->pbuf, pdrvextra_cmd->type_size);
4959
4960 }
4961
4962 #ifdef CONFIG_LPS
4963 +
4964 +void lps_ctrl_wk_hdl(_adapter *padapter, u8 lps_ctrl_type);
4965 void lps_ctrl_wk_hdl(_adapter *padapter, u8 lps_ctrl_type)
4966 {
4967 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
4968 @@ -1946,28 +2268,28 @@ _func_enter_;
4969 switch(lps_ctrl_type)
4970 {
4971 case LPS_CTRL_SCAN:
4972 - //DBG_8192C("LPS_CTRL_SCAN \n");
4973 + //DBG_871X("LPS_CTRL_SCAN \n");
4974 LeaveAllPowerSaveMode(padapter);
4975 break;
4976 case LPS_CTRL_JOINBSS:
4977 - //DBG_8192C("LPS_CTRL_JOINBSS \n");
4978 + //DBG_871X("LPS_CTRL_JOINBSS \n");
4979 LPS_Leave(padapter);
4980 break;
4981 case LPS_CTRL_CONNECT:
4982 - //DBG_8192C("LPS_CTRL_CONNECT \n");
4983 + //DBG_871X("LPS_CTRL_CONNECT \n");
4984 mstatus = 1;
4985 // Reset LPS Setting
4986 padapter->pwrctrlpriv.LpsIdleCount = 0;
4987 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_H2C_FW_JOINBSSRPT, (u8 *)(&mstatus));
4988 + rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_JOINBSSRPT, (u8 *)(&mstatus));
4989 break;
4990 case LPS_CTRL_DISCONNECT:
4991 - //DBG_8192C("LPS_CTRL_DISCONNECT \n");
4992 + //DBG_871X("LPS_CTRL_DISCONNECT \n");
4993 mstatus = 0;
4994 LPS_Leave(padapter);
4995 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_H2C_FW_JOINBSSRPT, (u8 *)(&mstatus));
4996 + rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_JOINBSSRPT, (u8 *)(&mstatus));
4997 break;
4998 case LPS_CTRL_SPECIAL_PACKET:
4999 - //DBG_8192C("LPS_CTRL_SPECIAL_PACKET \n");
5000 + //DBG_871X("LPS_CTRL_SPECIAL_PACKET \n");
5001 pwrpriv->DelayLPSLastTimeStamp = rtw_get_current_time();
5002 LPS_Leave(padapter);
5003 break;
5004 @@ -1984,7 +2306,7 @@ u8 rtw_lps_ctrl_wk_cmd(_adapter*padapter
5005 struct cmd_obj *ph2c;
5006 struct drvextra_cmd_parm *pdrvextra_cmd_parm;
5007 struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
5008 - struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
5009 + //struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
5010 u8 res = _SUCCESS;
5011
5012 _func_enter_;
5013 @@ -1992,6 +2314,11 @@ _func_enter_;
5014 //if(!pwrctrlpriv->bLeisurePs)
5015 // return res;
5016
5017 +#ifdef CONFIG_CONCURRENT_MODE
5018 + if (padapter->iface_type != IFACE_PORT0)
5019 + return res;
5020 +#endif
5021 +
5022 if(enqueue)
5023 {
5024 ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
5025 @@ -2033,7 +2360,7 @@ _func_exit_;
5026
5027 void antenna_select_wk_hdl(_adapter *padapter, u8 antenna)
5028 {
5029 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_ANTENNA_DIVERSITY_SELECT, (u8 *)(&antenna));
5030 + rtw_hal_set_hwreg(padapter, HW_VAR_ANTENNA_DIVERSITY_SELECT, (u8 *)(&antenna));
5031 }
5032
5033 u8 rtw_antenna_select_cmd(_adapter*padapter, u8 antenna,u8 enqueue)
5034 @@ -2045,7 +2372,7 @@ u8 rtw_antenna_select_cmd(_adapter*padap
5035 u8 res = _SUCCESS;
5036
5037 _func_enter_;
5038 - padapter->HalFunc.GetHalDefVarHandler(padapter, HAL_DEF_IS_SUPPORT_ANT_DIV, &(bSupportAntDiv));
5039 + rtw_hal_get_def_var(padapter, HAL_DEF_IS_SUPPORT_ANT_DIV, &(bSupportAntDiv));
5040 if(_FALSE == bSupportAntDiv ) return res;
5041
5042 if(_TRUE == enqueue)
5043 @@ -2082,11 +2409,23 @@ _func_exit_;
5044 }
5045 #endif
5046
5047 +void power_saving_wk_hdl(_adapter *padapter, u8 *pbuf, int sz);
5048 void power_saving_wk_hdl(_adapter *padapter, u8 *pbuf, int sz)
5049 {
5050 rtw_ps_processor(padapter);
5051 }
5052
5053 +//add for CONFIG_IEEE80211W, none 11w can use it
5054 +void reset_securitypriv_hdl(_adapter *padapter)
5055 +{
5056 + rtw_reset_securitypriv(padapter);
5057 +}
5058 +
5059 +void free_assoc_resources_hdl(_adapter *padapter)
5060 +{
5061 + rtw_free_assoc_resources(padapter, 1);
5062 +}
5063 +
5064 #ifdef CONFIG_P2P
5065 u8 p2p_protocol_wk_cmd(_adapter*padapter, int intCmdType )
5066 {
5067 @@ -2098,7 +2437,7 @@ u8 p2p_protocol_wk_cmd(_adapter*padapter
5068
5069 _func_enter_;
5070
5071 - if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
5072 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
5073 {
5074 return res;
5075 }
5076 @@ -2141,6 +2480,11 @@ u8 rtw_ps_cmd(_adapter*padapter)
5077
5078 u8 res = _SUCCESS;
5079 _func_enter_;
5080 +
5081 +#ifdef CONFIG_CONCURRENT_MODE
5082 + if (padapter->adapter_type != PRIMARY_ADAPTER)
5083 + goto exit;
5084 +#endif
5085
5086 ppscmd = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
5087 if(ppscmd==NULL){
5088 @@ -2157,7 +2501,6 @@ _func_enter_;
5089
5090 pdrvextra_cmd_parm->ec_id = POWER_SAVING_CTRL_WK_CID;
5091 pdrvextra_cmd_parm->pbuf = NULL;
5092 - DBG_8192C("==> %s , enqueue CMD \n",__FUNCTION__);
5093 init_h2fwcmd_w_parm_no_rsp(ppscmd, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
5094
5095 res = rtw_enqueue_cmd(pcmdpriv, ppscmd);
5096 @@ -2241,6 +2584,108 @@ exit:
5097 }
5098 #endif
5099
5100 +u8 rtw_c2h_wk_cmd(PADAPTER padapter, u8 *c2h_evt)
5101 +{
5102 + struct cmd_obj *ph2c;
5103 + struct drvextra_cmd_parm *pdrvextra_cmd_parm;
5104 + struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
5105 + u8 res = _SUCCESS;
5106 +
5107 + ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
5108 + if (ph2c == NULL) {
5109 + res = _FAIL;
5110 + goto exit;
5111 + }
5112 +
5113 + pdrvextra_cmd_parm = (struct drvextra_cmd_parm*)rtw_zmalloc(sizeof(struct drvextra_cmd_parm));
5114 + if (pdrvextra_cmd_parm == NULL) {
5115 + rtw_mfree((u8*)ph2c, sizeof(struct cmd_obj));
5116 + res = _FAIL;
5117 + goto exit;
5118 + }
5119 +
5120 + pdrvextra_cmd_parm->ec_id = C2H_WK_CID;
5121 + pdrvextra_cmd_parm->type_size = c2h_evt?16:0;
5122 + pdrvextra_cmd_parm->pbuf = c2h_evt;
5123 +
5124 + init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
5125 +
5126 + res = rtw_enqueue_cmd(pcmdpriv, ph2c);
5127 +
5128 +exit:
5129 +
5130 + return res;
5131 +}
5132 +
5133 +s32 c2h_evt_hdl(_adapter *adapter, struct c2h_evt_hdr *c2h_evt, c2h_id_filter filter)
5134 +{
5135 + s32 ret = _FAIL;
5136 + u8 buf[16];
5137 +
5138 + if (!c2h_evt) {
5139 + /* No c2h event in cmd_obj, read c2h event before handling*/
5140 + if (c2h_evt_read(adapter, buf) == _SUCCESS) {
5141 + c2h_evt = (struct c2h_evt_hdr *)buf;
5142 +
5143 + if (filter && filter(c2h_evt->id) == _FALSE)
5144 + goto exit;
5145 +
5146 + ret = rtw_hal_c2h_handler(adapter, c2h_evt);
5147 + }
5148 + } else {
5149 +
5150 + if (filter && filter(c2h_evt->id) == _FALSE)
5151 + goto exit;
5152 +
5153 + ret = rtw_hal_c2h_handler(adapter, c2h_evt);
5154 + }
5155 +exit:
5156 + return ret;
5157 +}
5158 +
5159 +#ifdef CONFIG_C2H_WK
5160 +static void c2h_wk_callback(_workitem *work)
5161 +{
5162 + struct evt_priv *evtpriv = container_of(work, struct evt_priv, c2h_wk);
5163 + _adapter *adapter = container_of(evtpriv, _adapter, evtpriv);
5164 + struct c2h_evt_hdr *c2h_evt;
5165 + c2h_id_filter ccx_id_filter = rtw_hal_c2h_id_filter_ccx(adapter);
5166 +
5167 + evtpriv->c2h_wk_alive = _TRUE;
5168 +
5169 + while (!rtw_cbuf_empty(evtpriv->c2h_queue)) {
5170 + if ((c2h_evt = (struct c2h_evt_hdr *)rtw_cbuf_pop(evtpriv->c2h_queue)) != NULL) {
5171 + /* This C2H event is read, clear it */
5172 + c2h_evt_clear(adapter);
5173 + } else if ((c2h_evt = (struct c2h_evt_hdr *)rtw_malloc(16)) != NULL) {
5174 + /* This C2H event is not read, read & clear now */
5175 + if (c2h_evt_read(adapter, (u8*)c2h_evt) != _SUCCESS)
5176 + continue;
5177 + }
5178 +
5179 + /* Special pointer to trigger c2h_evt_clear only */
5180 + if ((void *)c2h_evt == (void *)evtpriv)
5181 + continue;
5182 +
5183 + if (!c2h_evt_exist(c2h_evt)) {
5184 + rtw_mfree((u8*)c2h_evt, 16);
5185 + continue;
5186 + }
5187 +
5188 + if (ccx_id_filter(c2h_evt->id) == _TRUE) {
5189 + /* Handle CCX report here */
5190 + rtw_hal_c2h_handler(adapter, c2h_evt);
5191 + rtw_mfree((u8*)c2h_evt, 16);
5192 + } else {
5193 + /* Enqueue into cmd_thread for others */
5194 + rtw_c2h_wk_cmd(adapter, (u8 *)c2h_evt);
5195 + }
5196 + }
5197 +
5198 + evtpriv->c2h_wk_alive = _FALSE;
5199 +}
5200 +#endif
5201 +
5202 u8 rtw_drvextra_cmd_hdl(_adapter *padapter, unsigned char *pbuf)
5203 {
5204 struct drvextra_cmd_parm *pdrvextra_cmd;
5205 @@ -2268,24 +2713,39 @@ u8 rtw_drvextra_cmd_hdl(_adapter *padapt
5206 antenna_select_wk_hdl(padapter, pdrvextra_cmd->type_size);
5207 break;
5208 #endif
5209 -#ifdef CONFIG_P2P
5210 +#ifdef CONFIG_P2P_PS
5211 case P2P_PS_WK_CID:
5212 p2p_ps_wk_hdl(padapter, pdrvextra_cmd->type_size);
5213 break;
5214 +#endif // CONFIG_P2P_PS
5215 case P2P_PROTO_WK_CID:
5216 // Commented by Albert 2011/07/01
5217 // I used the type_size as the type command
5218 p2p_protocol_wk_hdl( padapter, pdrvextra_cmd->type_size );
5219 break;
5220 -#endif //CONFIG_P2P
5221 #ifdef CONFIG_AP_MODE
5222 case CHECK_HIQ_WK_CID:
5223 rtw_chk_hi_queue_hdl(padapter);
5224 break;
5225 -#endif //CONFIG_AP_MODE
5226 - default:
5227 +#endif //CONFIG_AP_MODE
5228 +#ifdef CONFIG_INTEL_WIDI
5229 + case INTEl_WIDI_WK_CID:
5230 + intel_widi_wk_hdl(padapter, pdrvextra_cmd->type_size, pdrvextra_cmd->pbuf);
5231 + break;
5232 +#endif //CONFIG_INTEL_WIDI
5233 + //add for CONFIG_IEEE80211W, none 11w can use it
5234 + case RESET_SECURITYPRIV:
5235 + reset_securitypriv_hdl(padapter);
5236 + break;
5237 + case FREE_ASSOC_RESOURCES:
5238 + free_assoc_resources_hdl(padapter);
5239 + break;
5240 + case C2H_WK_CID:
5241 + c2h_evt_hdl(padapter, (struct c2h_evt_hdr *)pdrvextra_cmd->pbuf, NULL);
5242 break;
5243
5244 + default:
5245 + break;
5246 }
5247
5248
5249 @@ -2552,13 +3012,14 @@ _func_enter_;
5250
5251 set_fwstate(pmlmepriv, _FW_LINKED);
5252 _exit_critical_bh(&pmlmepriv->lock, &irqL);
5253 -
5254 -exit:
5255 +
5256 +exit:
5257 rtw_free_cmd_obj(pcmd);
5258 -
5259 +
5260 _func_exit_;
5261 }
5262
5263 +void rtw_getrttbl_cmd_cmdrsp_callback(_adapter* padapter, struct cmd_obj *pcmd);
5264 void rtw_getrttbl_cmd_cmdrsp_callback(_adapter* padapter, struct cmd_obj *pcmd)
5265 {
5266 _func_enter_;
5267 --- a/drivers/net/wireless/rtl8192cu/core/rtw_debug.c
5268 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_debug.c
5269 @@ -1,7 +1,7 @@
5270 /******************************************************************************
5271 *
5272 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
5273 - *
5274 + *
5275 * This program is free software; you can redistribute it and/or modify it
5276 * under the terms of version 2 of the GNU General Public License as
5277 * published by the Free Software Foundation.
5278 @@ -21,10 +21,11 @@
5279
5280
5281 #include <rtw_debug.h>
5282 +#include <../hal/dm.h>
5283
5284 -#ifdef CONFIG_DEBUG_RTL871X
5285 +//#ifdef CONFIG_DEBUG_RTL871X
5286
5287 - u32 GlobalDebugLevel = _drv_info_;
5288 + u32 GlobalDebugLevel = _drv_err_;
5289
5290 u64 GlobalDebugComponents = \
5291 _module_rtl871x_xmit_c_ |
5292 @@ -52,12 +53,12 @@
5293 _module_hci_ops_os_c_|
5294 _module_rtl871x_ioctl_os_c|
5295 _module_rtl8712_cmd_c_|
5296 - _module_rtl8192c_xmit_c_|
5297 + _module_hal_xmit_c_|
5298 _module_rtl8712_recv_c_ |
5299 _module_mp_ |
5300 _module_efuse_;
5301
5302 -#endif
5303 +//#endif
5304
5305 #ifdef CONFIG_PROC_DEBUG
5306 #include <rtw_version.h>
5307 @@ -76,6 +77,65 @@ int proc_get_drv_version(char *page, cha
5308 return len;
5309 }
5310
5311 +int proc_get_log_level(char *page, char **start,
5312 + off_t offset, int count,
5313 + int *eof, void *data)
5314 +{
5315 + struct net_device *dev = data;
5316 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5317 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
5318 +
5319 + int len = 0;
5320 +
5321 + len += snprintf(page + len, count - len,
5322 + "log_level:%d\n",
5323 + GlobalDebugLevel
5324 + );
5325 +
5326 + *eof = 1;
5327 + return len;
5328 +}
5329 +
5330 +int proc_set_log_level(struct file *file, const char *buffer,
5331 + unsigned long count, void *data)
5332 +{
5333 + struct net_device *dev = (struct net_device *)data;
5334 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5335 + char tmp[32];
5336 + u32 is_signal_dbg;
5337 +
5338 + if (count < 1)
5339 + return -EFAULT;
5340 +
5341 + if (buffer && !copy_from_user(tmp, buffer, sizeof(tmp))) {
5342 +
5343 + int num = sscanf(tmp, "%d ", &is_signal_dbg);
5344 +
5345 + if( is_signal_dbg >= 0 && is_signal_dbg < 10 )
5346 + {
5347 + GlobalDebugLevel= is_signal_dbg;
5348 + printk("%d\n", GlobalDebugLevel);
5349 + }
5350 + }
5351 +
5352 + return count;
5353 +
5354 +}
5355 +
5356 +#ifdef DBG_MEM_ALLOC
5357 +int proc_get_mstat(char *page, char **start,
5358 + off_t offset, int count,
5359 + int *eof, void *data)
5360 +{
5361 + int len = 0;
5362 +
5363 + len += _rtw_mstat_dump(page+len, count-len);
5364 + *eof = 1;
5365 +
5366 + return len;
5367 +}
5368 +#endif /* DBG_MEM_ALLOC */
5369 +
5370 int proc_get_write_reg(char *page, char **start,
5371 off_t offset, int count,
5372 int *eof, void *data)
5373 @@ -94,7 +154,7 @@ int proc_set_write_reg(struct file *file
5374
5375 if (count < 3)
5376 {
5377 - DBG_8192C("argument size is less than 3\n");
5378 + DBG_871X("argument size is less than 3\n");
5379 return -EFAULT;
5380 }
5381
5382 @@ -103,7 +163,7 @@ int proc_set_write_reg(struct file *file
5383 int num = sscanf(tmp, "%x %x %x", &addr, &val, &len);
5384
5385 if (num != 3) {
5386 - DBG_8192C("invalid write_reg parameter!\n");
5387 + DBG_871X("invalid write_reg parameter!\n");
5388 return count;
5389 }
5390
5391 @@ -119,7 +179,7 @@ int proc_set_write_reg(struct file *file
5392 rtw_write32(padapter, addr, val);
5393 break;
5394 default:
5395 - DBG_8192C("error write length=%d", len);
5396 + DBG_871X("error write length=%d", len);
5397 break;
5398 }
5399
5400 @@ -171,14 +231,12 @@ int proc_get_read_reg(char *page, char *
5401 int proc_set_read_reg(struct file *file, const char *buffer,
5402 unsigned long count, void *data)
5403 {
5404 - struct net_device *dev = (struct net_device *)data;
5405 - _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5406 char tmp[16];
5407 u32 addr, len;
5408
5409 if (count < 2)
5410 {
5411 - DBG_8192C("argument size is less than 2\n");
5412 + DBG_871X("argument size is less than 2\n");
5413 return -EFAULT;
5414 }
5415
5416 @@ -187,7 +245,7 @@ int proc_set_read_reg(struct file *file,
5417 int num = sscanf(tmp, "%x %x", &addr, &len);
5418
5419 if (num != 2) {
5420 - DBG_8192C("invalid read_reg parameter!\n");
5421 + DBG_871X("invalid read_reg parameter!\n");
5422 return count;
5423 }
5424
5425 @@ -289,17 +347,17 @@ int proc_get_rf_info(char *page, char **
5426 int *eof, void *data)
5427 {
5428 struct net_device *dev = data;
5429 - _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5430 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
5431 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5432 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
5433 int len = 0;
5434
5435 - len += snprintf(page + len, count - len, "cur_ch=%d, cur_bw=%d, cur_ch_offet=%d\n",
5436 - pmlmeext->cur_channel, pmlmeext->cur_bwmode, pmlmeext->cur_ch_offset);
5437 -
5438 -
5439 + len += snprintf(page + len, count - len, "cur_ch=%d, cur_bw=%d, cur_ch_offet=%d\n"
5440 + "oper_ch=%d, oper_bw=%d, oper_ch_offet=%d\n",
5441 + pmlmeext->cur_channel, pmlmeext->cur_bwmode, pmlmeext->cur_ch_offset,
5442 + rtw_get_oper_ch(padapter), rtw_get_oper_bw(padapter), rtw_get_oper_choffset(padapter));
5443 *eof = 1;
5444 - return len;
5445
5446 + return len;
5447 }
5448
5449 int proc_get_ap_info(char *page, char **start,
5450 @@ -371,23 +429,282 @@ int proc_get_trx_info(char *page, char *
5451 off_t offset, int count,
5452 int *eof, void *data)
5453 {
5454 + int i;
5455 struct net_device *dev = data;
5456 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5457 struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
5458 struct recv_priv *precvpriv = &padapter->recvpriv;
5459 + struct dvobj_priv *pdvobj = adapter_to_dvobj(padapter);
5460 + struct hw_xmit *phwxmit;
5461 int len = 0;
5462
5463 - len += snprintf(page + len, count - len, "free_xmitbuf_cnt=%d, free_xmitframe_cnt=%d, free_ext_xmitbuf_cnt=%d, free_recvframe_cnt=%d\n",
5464 - pxmitpriv->free_xmitbuf_cnt, pxmitpriv->free_xmitframe_cnt,pxmitpriv->free_xmit_extbuf_cnt, precvpriv->free_recvframe_cnt);
5465 + len += snprintf(page + len, count - len, "free_xmitbuf_cnt=%d, free_xmitframe_cnt=%d"
5466 + ", free_ext_xmitbuf_cnt=%d, free_xframe_ext_cnt=%d"
5467 + ", free_recvframe_cnt=%d\n",
5468 + pxmitpriv->free_xmitbuf_cnt, pxmitpriv->free_xmitframe_cnt,
5469 + pxmitpriv->free_xmit_extbuf_cnt, pxmitpriv->free_xframe_ext_cnt,
5470 + precvpriv->free_recvframe_cnt);
5471 #ifdef CONFIG_USB_HCI
5472 - len += snprintf(page + len, count - len, "rx_urb_pending_cn=%d\n", precvpriv->rx_pending_cnt);
5473 + len += snprintf(page + len, count - len, "rx_urb_pending_cnt=%d\n", precvpriv->rx_pending_cnt);
5474 #endif
5475
5476 + len += snprintf(page + len, count - len, "recvbuf_skb_alloc_fail_cnt=%d\n", precvpriv->recvbuf_skb_alloc_fail_cnt);
5477 + len += snprintf(page + len, count - len, "recvbuf_null_cnt=%d\n", precvpriv->recvbuf_null_cnt);
5478 + len += snprintf(page + len, count - len, "read_port_complete_EINPROGRESS_cnt=%d\n", precvpriv->read_port_complete_EINPROGRESS_cnt);
5479 + len += snprintf(page + len, count - len, "read_port_complete_other_urb_err_cnt=%d\n", precvpriv->read_port_complete_other_urb_err_cnt);
5480 + len += snprintf(page + len, count - len, "hw_init_completed=%d\n", padapter->hw_init_completed);
5481 +#ifdef CONFIG_USB_HCI
5482 + len += snprintf(page + len, count - len, "continual_urb_error=%d\n", atomic_read(&pdvobj->continual_urb_error));
5483 +#endif
5484 +
5485 + for(i = 0; i < 4; i++)
5486 + {
5487 + phwxmit = pxmitpriv->hwxmits + i;
5488 + len += snprintf(page + len, count - len, "%d, hwq.accnt=%d\n", i, phwxmit->accnt);
5489 + }
5490 +
5491 + *eof = 1;
5492 + return len;
5493 +
5494 +}
5495 +
5496 +
5497 +
5498 +int proc_get_mac_reg_dump1(char *page, char **start,
5499 + off_t offset, int count,
5500 + int *eof, void *data)
5501 +{
5502 + struct net_device *dev = data;
5503 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5504 + int len = 0;
5505 + int i,j=1;
5506 +
5507 + len += snprintf(page + len, count - len, "\n======= MAC REG =======\n");
5508 +
5509 + for(i=0x0;i<0x300;i+=4)
5510 + {
5511 + if(j%4==1) len += snprintf(page + len, count - len,"0x%02x",i);
5512 + len += snprintf(page + len, count - len," 0x%08x ",rtw_read32(padapter,i));
5513 + if((j++)%4 == 0) len += snprintf(page + len, count - len,"\n");
5514 + }
5515 +
5516 *eof = 1;
5517 return len;
5518
5519 }
5520 +
5521 +int proc_get_mac_reg_dump2(char *page, char **start,
5522 + off_t offset, int count,
5523 + int *eof, void *data)
5524 +{
5525 + struct net_device *dev = data;
5526 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5527 + int len = 0;
5528 + int i,j=1;
5529 +
5530 + len += snprintf(page + len, count - len, "\n======= MAC REG =======\n");
5531 + memset(page, 0, count);
5532 + for(i=0x300;i<0x600;i+=4)
5533 + {
5534 + if(j%4==1) len += snprintf(page + len, count - len,"0x%02x",i);
5535 + len += snprintf(page + len, count - len," 0x%08x ",rtw_read32(padapter,i));
5536 + if((j++)%4 == 0) len += snprintf(page + len, count - len,"\n");
5537 + }
5538 +
5539 + *eof = 1;
5540 + return len;
5541 +
5542 +}
5543 +
5544 +int proc_get_mac_reg_dump3(char *page, char **start,
5545 + off_t offset, int count,
5546 + int *eof, void *data)
5547 +{
5548 + struct net_device *dev = data;
5549 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5550 + int len = 0;
5551 + int i,j=1;
5552 +
5553 + len += snprintf(page + len, count - len, "\n======= MAC REG =======\n");
5554 +
5555 + for(i=0x600;i<0x800;i+=4)
5556 + {
5557 + if(j%4==1) len += snprintf(page + len, count - len,"0x%02x",i);
5558 + len += snprintf(page + len, count - len," 0x%08x ",rtw_read32(padapter,i));
5559 + if((j++)%4 == 0) len += snprintf(page + len, count - len,"\n");
5560 + }
5561 +
5562 + *eof = 1;
5563 + return len;
5564 +
5565 +}
5566 +
5567 +int proc_get_bb_reg_dump1(char *page, char **start,
5568 + off_t offset, int count,
5569 + int *eof, void *data)
5570 +{
5571 + struct net_device *dev = data;
5572 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5573 + int len = 0;
5574 + int i,j=1;
5575 +
5576 + len += snprintf(page + len, count - len, "\n======= BB REG =======\n");
5577 + for(i=0x800;i<0xB00;i+=4)
5578 + {
5579 + if(j%4==1) len += snprintf(page + len, count - len,"0x%02x",i);
5580 + len += snprintf(page + len, count - len," 0x%08x ",rtw_read32(padapter,i));
5581 + if((j++)%4 == 0) len += snprintf(page + len, count - len,"\n");
5582 + }
5583 + *eof = 1;
5584 + return len;
5585 +}
5586 +
5587 +int proc_get_bb_reg_dump2(char *page, char **start,
5588 + off_t offset, int count,
5589 + int *eof, void *data)
5590 +{
5591 + struct net_device *dev = data;
5592 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5593 + int len = 0;
5594 + int i,j=1;
5595 +
5596 + len += snprintf(page + len, count - len, "\n======= BB REG =======\n");
5597 + for(i=0xB00;i<0xE00;i+=4)
5598 + {
5599 + if(j%4==1) len += snprintf(page + len, count - len,"0x%02x",i);
5600 + len += snprintf(page + len, count - len," 0x%08x ",rtw_read32(padapter,i));
5601 + if((j++)%4 == 0) len += snprintf(page + len, count - len,"\n");
5602 + }
5603 + *eof = 1;
5604 + return len;
5605 +}
5606 +
5607 +int proc_get_bb_reg_dump3(char *page, char **start,
5608 + off_t offset, int count,
5609 + int *eof, void *data)
5610 +{
5611 + struct net_device *dev = data;
5612 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5613 + int len = 0;
5614 + int i,j=1;
5615 +
5616 + len += snprintf(page + len, count - len, "\n======= BB REG =======\n");
5617 + for(i=0xE00;i<0x1000;i+=4)
5618 + {
5619 + if(j%4==1) len += snprintf(page + len, count - len,"0x%02x",i);
5620 + len += snprintf(page + len, count - len," 0x%08x ",rtw_read32(padapter,i));
5621 + if((j++)%4 == 0) len += snprintf(page + len, count - len,"\n");
5622 + }
5623 + *eof = 1;
5624 + return len;
5625 +}
5626 +
5627 +int proc_get_rf_reg_dump1(char *page, char **start,
5628 + off_t offset, int count,
5629 + int *eof, void *data)
5630 +{
5631 + struct net_device *dev = data;
5632 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5633 + int len = 0;
5634 + int i,j=1,path;
5635 + u32 value;
5636
5637 + len += snprintf(page + len, count - len, "\n======= RF REG =======\n");
5638 + path = 1;
5639 + len += snprintf(page + len, count - len, "\nRF_Path(%x)\n",path);
5640 + for(i=0;i<0xC0;i++)
5641 + {
5642 + //value = PHY_QueryRFReg(padapter, (RF90_RADIO_PATH_E)path,i, bMaskDWord);
5643 + value =rtw_hal_read_rfreg(padapter, path, i, 0xffffffff);
5644 + if(j%4==1) len += snprintf(page + len, count - len, "0x%02x ",i);
5645 + len += snprintf(page + len, count - len, " 0x%08x ",value);
5646 + if((j++)%4==0) len += snprintf(page + len, count - len, "\n");
5647 + }
5648 +
5649 + *eof = 1;
5650 + return len;
5651 +}
5652 +
5653 +
5654 +int proc_get_rf_reg_dump2(char *page, char **start,
5655 + off_t offset, int count,
5656 + int *eof, void *data)
5657 +{
5658 + struct net_device *dev = data;
5659 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5660 + int len = 0;
5661 + int i,j=1,path;
5662 + u32 value;
5663 +
5664 + len += snprintf(page + len, count - len, "\n======= RF REG =======\n");
5665 + path = 1;
5666 + len += snprintf(page + len, count - len, "\nRF_Path(%x)\n",path);
5667 + for(i=0xC0;i<0x100;i++)
5668 + {
5669 + //value = PHY_QueryRFReg(padapter, (RF90_RADIO_PATH_E)path,i, bMaskDWord);
5670 + value =rtw_hal_read_rfreg(padapter, path, i, 0xffffffff);
5671 + if(j%4==1) len += snprintf(page + len, count - len, "0x%02x ",i);
5672 + len += snprintf(page + len, count - len, " 0x%08x ",value);
5673 + if((j++)%4==0) len += snprintf(page + len, count - len, "\n");
5674 + }
5675 + *eof = 1;
5676 + return len;
5677 +}
5678 +
5679 +
5680 +int proc_get_rf_reg_dump3(char *page, char **start,
5681 + off_t offset, int count,
5682 + int *eof, void *data)
5683 +{
5684 + struct net_device *dev = data;
5685 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5686 + int len = 0;
5687 + int i,j=1,path;
5688 + u32 value;
5689 +
5690 + len += snprintf(page + len, count - len, "\n======= RF REG =======\n");
5691 + path = 2;
5692 + len += snprintf(page + len, count - len, "\nRF_Path(%x)\n",path);
5693 + for(i=0;i<0xC0;i++)
5694 + {
5695 + //value = PHY_QueryRFReg(padapter, (RF90_RADIO_PATH_E)path,i, bMaskDWord);
5696 + value =rtw_hal_read_rfreg(padapter, path, i, 0xffffffff);
5697 + if(j%4==1) len += snprintf(page + len, count - len, "0x%02x ",i);
5698 + len += snprintf(page + len, count - len, " 0x%08x ",value);
5699 + if((j++)%4==0) len += snprintf(page + len, count - len, "\n");
5700 + }
5701 +
5702 + *eof = 1;
5703 + return len;
5704 +}
5705 +
5706 +
5707 +int proc_get_rf_reg_dump4(char *page, char **start,
5708 + off_t offset, int count,
5709 + int *eof, void *data)
5710 +{
5711 + struct net_device *dev = data;
5712 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5713 + int len = 0;
5714 + int i,j=1,path;
5715 + u32 value;
5716 +
5717 + len += snprintf(page + len, count - len, "\n======= RF REG =======\n");
5718 + path = 2;
5719 + len += snprintf(page + len, count - len, "\nRF_Path(%x)\n",path);
5720 + for(i=0xC0;i<0x100;i++)
5721 + {
5722 + //value = PHY_QueryRFReg(padapter, (RF90_RADIO_PATH_E)path,i, bMaskDWord);
5723 + value =rtw_hal_read_rfreg(padapter, path, i, 0xffffffff);
5724 + if(j%4==1) len += snprintf(page + len, count - len, "0x%02x ",i);
5725 + len += snprintf(page + len, count - len, " 0x%08x ",value);
5726 + if((j++)%4==0) len += snprintf(page + len, count - len, "\n");
5727 + }
5728 + *eof = 1;
5729 + return len;
5730 +}
5731 +
5732 +
5733
5734 int proc_get_rx_signal(char *page, char **start,
5735 off_t offset, int count,
5736 @@ -453,6 +770,101 @@ int proc_set_rx_signal(struct file *file
5737
5738 }
5739
5740 +int proc_get_ht_enable(char *page, char **start,
5741 + off_t offset, int count,
5742 + int *eof, void *data)
5743 +{
5744 + struct net_device *dev = data;
5745 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5746 + struct registry_priv *pregpriv = &padapter->registrypriv;
5747 +
5748 + int len = 0;
5749 +
5750 + if(pregpriv)
5751 + len += snprintf(page + len, count - len,
5752 + "%d\n",
5753 + pregpriv->ht_enable
5754 + );
5755 +
5756 + *eof = 1;
5757 + return len;
5758 +}
5759 +
5760 +int proc_set_ht_enable(struct file *file, const char *buffer,
5761 + unsigned long count, void *data)
5762 +{
5763 + struct net_device *dev = (struct net_device *)data;
5764 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5765 + struct registry_priv *pregpriv = &padapter->registrypriv;
5766 + char tmp[32];
5767 + u32 mode;
5768 +
5769 + if (count < 1)
5770 + return -EFAULT;
5771 +
5772 + if (buffer && !copy_from_user(tmp, buffer, sizeof(tmp))) {
5773 +
5774 + int num = sscanf(tmp, "%d ", &mode);
5775 +
5776 + if( pregpriv && mode >= 0 && mode < 2 )
5777 + {
5778 + pregpriv->ht_enable= mode;
5779 + printk("ht_enable=%d\n", pregpriv->ht_enable);
5780 + }
5781 + }
5782 +
5783 + return count;
5784 +
5785 +}
5786 +
5787 +
5788 +int proc_get_cbw40_enable(char *page, char **start,
5789 + off_t offset, int count,
5790 + int *eof, void *data)
5791 +{
5792 + struct net_device *dev = data;
5793 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5794 + struct registry_priv *pregpriv = &padapter->registrypriv;
5795 +
5796 + int len = 0;
5797 +
5798 + if(pregpriv)
5799 + len += snprintf(page + len, count - len,
5800 + "%d\n",
5801 + pregpriv->cbw40_enable
5802 + );
5803 +
5804 + *eof = 1;
5805 + return len;
5806 +}
5807 +
5808 +int proc_set_cbw40_enable(struct file *file, const char *buffer,
5809 + unsigned long count, void *data)
5810 +{
5811 + struct net_device *dev = (struct net_device *)data;
5812 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5813 + struct registry_priv *pregpriv = &padapter->registrypriv;
5814 + char tmp[32];
5815 + u32 mode;
5816 +
5817 + if (count < 1)
5818 + return -EFAULT;
5819 +
5820 + if (buffer && !copy_from_user(tmp, buffer, sizeof(tmp))) {
5821 +
5822 + int num = sscanf(tmp, "%d ", &mode);
5823 +
5824 + if( pregpriv && mode >= 0 && mode < 2 )
5825 + {
5826 + pregpriv->cbw40_enable= mode;
5827 + printk("cbw40_enable=%d\n", mode);
5828 + }
5829 + }
5830 +
5831 + return count;
5832 +
5833 +}
5834 +
5835 int proc_get_ampdu_enable(char *page, char **start,
5836 off_t offset, int count,
5837 int *eof, void *data)
5838 @@ -500,6 +912,112 @@ int proc_set_ampdu_enable(struct file *f
5839
5840 }
5841
5842 +
5843 +int proc_get_two_path_rssi(char *page, char **start,
5844 + off_t offset, int count,
5845 + int *eof, void *data)
5846 +{
5847 + struct net_device *dev = data;
5848 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5849 +
5850 + int len = 0;
5851 +
5852 + if(padapter)
5853 + len += snprintf(page + len, count - len,
5854 + "%d %d\n",
5855 + padapter->recvpriv.RxRssi[0],
5856 + padapter->recvpriv.RxRssi[1]
5857 + );
5858 +
5859 + *eof = 1;
5860 + return len;
5861 +}
5862 +
5863 +int proc_get_rx_stbc(char *page, char **start,
5864 + off_t offset, int count,
5865 + int *eof, void *data)
5866 +{
5867 + struct net_device *dev = data;
5868 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5869 + struct registry_priv *pregpriv = &padapter->registrypriv;
5870 +
5871 + int len = 0;
5872 +
5873 + if(pregpriv)
5874 + len += snprintf(page + len, count - len,
5875 + "%d\n",
5876 + pregpriv->rx_stbc
5877 + );
5878 +
5879 + *eof = 1;
5880 + return len;
5881 +}
5882 +
5883 +int proc_set_rx_stbc(struct file *file, const char *buffer,
5884 + unsigned long count, void *data)
5885 +{
5886 + struct net_device *dev = (struct net_device *)data;
5887 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5888 + struct registry_priv *pregpriv = &padapter->registrypriv;
5889 + char tmp[32];
5890 + u32 mode;
5891 +
5892 + if (count < 1)
5893 + return -EFAULT;
5894 +
5895 + if (buffer && !copy_from_user(tmp, buffer, sizeof(tmp))) {
5896 +
5897 + int num = sscanf(tmp, "%d ", &mode);
5898 +
5899 + if( pregpriv && (mode == 0 || mode == 1|| mode == 2|| mode == 3))
5900 + {
5901 + pregpriv->rx_stbc= mode;
5902 + printk("rx_stbc=%d\n", mode);
5903 + }
5904 + }
5905 +
5906 + return count;
5907 +
5908 +}
5909 +
5910 +int proc_get_vid(char *page, char **start,
5911 + off_t offset, int count,
5912 + int *eof, void *data)
5913 +{
5914 + struct net_device *dev = data;
5915 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5916 + u16 VID=0;
5917 + int len = 0;
5918 +
5919 + rtw_hal_get_hwreg(padapter, HW_VAR_VID, (u8 *)&VID);
5920 + len += snprintf(page + len, count - len,
5921 + "%04x\n",
5922 + VID
5923 + );
5924 +
5925 + *eof = 1;
5926 + return len;
5927 +}
5928 +
5929 +int proc_get_pid(char *page, char **start,
5930 + off_t offset, int count,
5931 + int *eof, void *data)
5932 +{
5933 + struct net_device *dev = data;
5934 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5935 + u16 PID=0;
5936 + int len = 0;
5937 +
5938 + rtw_hal_get_hwreg(padapter, HW_VAR_PID, (u8 *)&PID);
5939 + len += snprintf(page + len, count - len,
5940 + "%04x\n",
5941 + PID
5942 + );
5943 +
5944 + *eof = 1;
5945 + return len;
5946 +}
5947 +
5948 int proc_get_rssi_disp(char *page, char **start,
5949 off_t offset, int count,
5950 int *eof, void *data)
5951 @@ -703,7 +1221,117 @@ int proc_get_best_channel(char *page, ch
5952 return len;
5953
5954 }
5955 +
5956 +int proc_set_best_channel(struct file *file, const char *buffer,
5957 + unsigned long count, void *data)
5958 +{
5959 + struct net_device *dev = (struct net_device *)data;
5960 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5961 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
5962 + char tmp[32];
5963 +
5964 + if(count < 1)
5965 + return -EFAULT;
5966 +
5967 + if(buffer && !copy_from_user(tmp, buffer, sizeof(tmp)))
5968 + {
5969 + int i;
5970 + for(i = 0; pmlmeext->channel_set[i].ChannelNum != 0; i++)
5971 + {
5972 + pmlmeext->channel_set[i].rx_count = 0;
5973 + }
5974 +
5975 + DBG_871X("set %s\n", "Clean Best Channel Count");
5976 + }
5977 +
5978 + return count;
5979 +}
5980 #endif /* CONFIG_FIND_BEST_CHANNEL */
5981 +
5982 +#if defined(DBG_CONFIG_ERROR_DETECT)
5983 +#include <rtw_sreset.h>
5984 +int proc_get_sreset(char *page, char **start, off_t offset, int count, int *eof, void *data)
5985 +{
5986 + struct net_device *dev = data;
5987 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5988 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
5989
5990 + int len = 0;
5991 +
5992 + *eof = 1;
5993 + return len;
5994 +}
5995 +
5996 +int proc_set_sreset(struct file *file, const char *buffer, unsigned long count, void *data)
5997 +{
5998 + struct net_device *dev = (struct net_device *)data;
5999 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
6000 + char tmp[32];
6001 + s32 trigger_point;
6002 +
6003 + if (count < 1)
6004 + return -EFAULT;
6005 +
6006 + if (buffer && !copy_from_user(tmp, buffer, sizeof(tmp))) {
6007 +
6008 + int num = sscanf(tmp, "%d", &trigger_point);
6009 +
6010 + if (trigger_point == SRESET_TGP_NULL)
6011 + rtw_hal_sreset_reset(padapter);
6012 + else
6013 + sreset_set_trigger_point(padapter, trigger_point);
6014 + }
6015 +
6016 + return count;
6017 +
6018 +}
6019 +#endif /* DBG_CONFIG_ERROR_DETECT */
6020 +
6021 +#ifdef CONFIG_DM_ADAPTIVITY
6022 +int proc_get_dm_adaptivity(char *page, char **start,
6023 + off_t offset, int count,
6024 + int *eof, void *data)
6025 +{
6026 + struct net_device *dev = data;
6027 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
6028 + int len = 0;
6029 +
6030 + len += dm_adaptivity_get_parm_str(padapter, page, count);
6031 +
6032 + *eof = 1;
6033 + return len;
6034 +}
6035 +
6036 +int proc_set_dm_adaptivity(struct file *file, const char *buffer,
6037 + unsigned long count, void *data)
6038 +{
6039 + struct net_device *dev = (struct net_device *)data;
6040 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
6041 + char tmp[32];
6042 + u32 TH_L2H_ini;
6043 + s8 TH_EDCCA_HL_diff;
6044 + u32 IGI_Base;
6045 + int ForceEDCCA;
6046 + u8 AdapEn_RSSI;
6047 + u8 IGI_LowerBound;
6048 +
6049 + if (count < 1)
6050 + return -EFAULT;
6051 +
6052 + if (buffer && !copy_from_user(tmp, buffer, sizeof(tmp))) {
6053 +
6054 + int num = sscanf(tmp, "%x %hhd %x %d %hhu %hhu",
6055 + &TH_L2H_ini, &TH_EDCCA_HL_diff, &IGI_Base, &ForceEDCCA, &AdapEn_RSSI, &IGI_LowerBound);
6056 +
6057 + if (num != 6)
6058 + return count;
6059 +
6060 + dm_adaptivity_set_parm(padapter, (s8)TH_L2H_ini, TH_EDCCA_HL_diff, (s8)IGI_Base, (bool)ForceEDCCA, AdapEn_RSSI, IGI_LowerBound);
6061 + }
6062 +
6063 + return count;
6064 +}
6065 +#endif /* CONFIG_DM_ADAPTIVITY */
6066 +
6067 #endif
6068
6069 --- a/drivers/net/wireless/rtl8192cu/core/rtw_eeprom.c
6070 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_eeprom.c
6071 @@ -16,8 +16,7 @@
6072 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
6073 *
6074 *
6075 -
6076 -******************************************************************************/
6077 + ******************************************************************************/
6078 #define _RTW_EEPROM_C_
6079
6080 #include <drv_conf.h>
6081 --- a/drivers/net/wireless/rtl8192cu/core/rtw_ieee80211.c
6082 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_ieee80211.c
6083 @@ -25,7 +25,27 @@
6084 #include <osdep_service.h>
6085 #include <wlan_bssdef.h>
6086
6087 -
6088 +u8 RTW_WPA_OUI_TYPE[] = { 0x00, 0x50, 0xf2, 1 };
6089 +u16 RTW_WPA_VERSION = 1;
6090 +u8 WPA_AUTH_KEY_MGMT_NONE[] = { 0x00, 0x50, 0xf2, 0 };
6091 +u8 WPA_AUTH_KEY_MGMT_UNSPEC_802_1X[] = { 0x00, 0x50, 0xf2, 1 };
6092 +u8 WPA_AUTH_KEY_MGMT_PSK_OVER_802_1X[] = { 0x00, 0x50, 0xf2, 2 };
6093 +u8 WPA_CIPHER_SUITE_NONE[] = { 0x00, 0x50, 0xf2, 0 };
6094 +u8 WPA_CIPHER_SUITE_WEP40[] = { 0x00, 0x50, 0xf2, 1 };
6095 +u8 WPA_CIPHER_SUITE_TKIP[] = { 0x00, 0x50, 0xf2, 2 };
6096 +u8 WPA_CIPHER_SUITE_WRAP[] = { 0x00, 0x50, 0xf2, 3 };
6097 +u8 WPA_CIPHER_SUITE_CCMP[] = { 0x00, 0x50, 0xf2, 4 };
6098 +u8 WPA_CIPHER_SUITE_WEP104[] = { 0x00, 0x50, 0xf2, 5 };
6099 +
6100 +u16 RSN_VERSION_BSD = 1;
6101 +u8 RSN_AUTH_KEY_MGMT_UNSPEC_802_1X[] = { 0x00, 0x0f, 0xac, 1 };
6102 +u8 RSN_AUTH_KEY_MGMT_PSK_OVER_802_1X[] = { 0x00, 0x0f, 0xac, 2 };
6103 +u8 RSN_CIPHER_SUITE_NONE[] = { 0x00, 0x0f, 0xac, 0 };
6104 +u8 RSN_CIPHER_SUITE_WEP40[] = { 0x00, 0x0f, 0xac, 1 };
6105 +u8 RSN_CIPHER_SUITE_TKIP[] = { 0x00, 0x0f, 0xac, 2 };
6106 +u8 RSN_CIPHER_SUITE_WRAP[] = { 0x00, 0x0f, 0xac, 3 };
6107 +u8 RSN_CIPHER_SUITE_CCMP[] = { 0x00, 0x0f, 0xac, 4 };
6108 +u8 RSN_CIPHER_SUITE_WEP104[] = { 0x00, 0x0f, 0xac, 5 };
6109 //-----------------------------------------------------------
6110 // for adhoc-master to generate ie and provide supported-rate to fw
6111 //-----------------------------------------------------------
6112 @@ -147,7 +167,58 @@ _func_enter_;
6113 _func_exit_;
6114 }
6115
6116 +inline u8 *rtw_set_ie_ch_switch(u8 *buf, u32 *buf_len, u8 ch_switch_mode,
6117 + u8 new_ch, u8 ch_switch_cnt)
6118 +{
6119 + u8 ie_data[3];
6120 +
6121 + ie_data[0] = ch_switch_mode;
6122 + ie_data[1] = new_ch;
6123 + ie_data[2] = ch_switch_cnt;
6124 + return rtw_set_ie(buf, WLAN_EID_CHANNEL_SWITCH, 3, ie_data, buf_len);
6125 +}
6126 +
6127 +inline u8 secondary_ch_offset_to_hal_ch_offset(u8 ch_offset)
6128 +{
6129 + if (ch_offset == SCN)
6130 + return HAL_PRIME_CHNL_OFFSET_DONT_CARE;
6131 + else if(ch_offset == SCA)
6132 + return HAL_PRIME_CHNL_OFFSET_UPPER;
6133 + else if(ch_offset == SCB)
6134 + return HAL_PRIME_CHNL_OFFSET_LOWER;
6135
6136 + return HAL_PRIME_CHNL_OFFSET_DONT_CARE;
6137 +}
6138 +
6139 +inline u8 hal_ch_offset_to_secondary_ch_offset(u8 ch_offset)
6140 +{
6141 + if (ch_offset == HAL_PRIME_CHNL_OFFSET_DONT_CARE)
6142 + return SCN;
6143 + else if(ch_offset == HAL_PRIME_CHNL_OFFSET_LOWER)
6144 + return SCB;
6145 + else if(ch_offset == HAL_PRIME_CHNL_OFFSET_UPPER)
6146 + return SCA;
6147 +
6148 + return SCN;
6149 +}
6150 +
6151 +inline u8 *rtw_set_ie_secondary_ch_offset(u8 *buf, u32 *buf_len, u8 secondary_ch_offset)
6152 +{
6153 + return rtw_set_ie(buf, WLAN_EID_SECONDARY_CHANNEL_OFFSET, 1, &secondary_ch_offset, buf_len);
6154 +}
6155 +
6156 +inline u8 *rtw_set_ie_mesh_ch_switch_parm(u8 *buf, u32 *buf_len, u8 ttl,
6157 + u8 flags, u16 reason, u16 precedence)
6158 +{
6159 + u8 ie_data[6];
6160 +
6161 + ie_data[0] = ttl;
6162 + ie_data[1] = flags;
6163 + RTW_PUT_LE16((u8*)&ie_data[2], reason);
6164 + RTW_PUT_LE16((u8*)&ie_data[4], precedence);
6165 +
6166 + return rtw_set_ie(buf, 0x118, 6, ie_data, buf_len);
6167 +}
6168
6169 /*----------------------------------------------------------------------------
6170 index: the information element id index, limit is the limit for search
6171 @@ -185,6 +256,104 @@ _func_exit_;
6172 return NULL;
6173 }
6174
6175 +/**
6176 + * rtw_get_ie_ex - Search specific IE from a series of IEs
6177 + * @in_ie: Address of IEs to search
6178 + * @in_len: Length limit from in_ie
6179 + * @eid: Element ID to match
6180 + * @oui: OUI to match
6181 + * @oui_len: OUI length
6182 + * @ie: If not NULL and the specific IE is found, the IE will be copied to the buf starting from the specific IE
6183 + * @ielen: If not NULL and the specific IE is found, will set to the length of the entire IE
6184 + *
6185 + * Returns: The address of the specific IE found, or NULL
6186 + */
6187 +u8 *rtw_get_ie_ex(u8 *in_ie, uint in_len, u8 eid, u8 *oui, u8 oui_len, u8 *ie, uint *ielen)
6188 +{
6189 + uint cnt;
6190 + u8 *target_ie = NULL;
6191 +
6192 +
6193 + if(ielen)
6194 + *ielen = 0;
6195 +
6196 + if(!in_ie || in_len<=0)
6197 + return target_ie;
6198 +
6199 + cnt = 0;
6200 +
6201 + while(cnt<in_len)
6202 + {
6203 + if(eid == in_ie[cnt]
6204 + && ( !oui || _rtw_memcmp(&in_ie[cnt+2], oui, oui_len) == _TRUE))
6205 + {
6206 + target_ie = &in_ie[cnt];
6207 +
6208 + if(ie)
6209 + _rtw_memcpy(ie, &in_ie[cnt], in_ie[cnt+1]+2);
6210 +
6211 + if(ielen)
6212 + *ielen = in_ie[cnt+1]+2;
6213 +
6214 + break;
6215 + }
6216 + else
6217 + {
6218 + cnt+=in_ie[cnt+1]+2; //goto next
6219 + }
6220 +
6221 + }
6222 +
6223 + return target_ie;
6224 +}
6225 +
6226 +/**
6227 + * rtw_ies_remove_ie - Find matching IEs and remove
6228 + * @ies: Address of IEs to search
6229 + * @ies_len: Pointer of length of ies, will update to new length
6230 + * @offset: The offset to start scarch
6231 + * @eid: Element ID to match
6232 + * @oui: OUI to match
6233 + * @oui_len: OUI length
6234 + *
6235 + * Returns: _SUCCESS: ies is updated, _FAIL: not updated
6236 + */
6237 +int rtw_ies_remove_ie(u8 *ies, uint *ies_len, uint offset, u8 eid, u8 *oui, u8 oui_len)
6238 +{
6239 + int ret = _FAIL;
6240 + u8 *target_ie;
6241 + u32 target_ielen;
6242 + u8 *start;
6243 + uint search_len;
6244 +
6245 + if(!ies || !ies_len || *ies_len <= offset)
6246 + goto exit;
6247 +
6248 + start = ies + offset;
6249 + search_len = *ies_len - offset;
6250 +
6251 + while (1) {
6252 + target_ie = rtw_get_ie_ex(start, search_len, eid, oui, oui_len, NULL, &target_ielen);
6253 + if (target_ie && target_ielen) {
6254 + u8 buf[MAX_IE_SZ] = {0};
6255 + u8 *remain_ies = target_ie + target_ielen;
6256 + uint remain_len = search_len - (remain_ies - start);
6257 +
6258 + _rtw_memcpy(buf, remain_ies, remain_len);
6259 + _rtw_memcpy(target_ie, buf, remain_len);
6260 + *ies_len = *ies_len - target_ielen;
6261 + ret = _SUCCESS;
6262 +
6263 + start = target_ie;
6264 + search_len = remain_len;
6265 + } else {
6266 + break;
6267 + }
6268 + }
6269 +exit:
6270 + return ret;
6271 +}
6272 +
6273 void rtw_set_supported_rate(u8* SupportedRates, uint mode)
6274 {
6275 _func_enter_;
6276 @@ -328,10 +497,10 @@ _func_exit_;
6277 }
6278
6279 unsigned char *rtw_get_wpa_ie(unsigned char *pie, int *wpa_ie_len, int limit)
6280 -{
6281 +{
6282 int len;
6283 u16 val16;
6284 - unsigned char wpa_oui_type[] = {0x00, 0x50, 0xf2, 0x01};
6285 + unsigned char wpa_oui_type[] = {0x00, 0x50, 0xf2, 0x01};
6286 u8 *pbuf = pie;
6287
6288 while(1)
6289 @@ -351,34 +520,31 @@ unsigned char *rtw_get_wpa_ie(unsigned c
6290
6291 val16 = le16_to_cpu(val16);
6292 if (val16 != 0x0001)
6293 - goto check_next_ie;
6294 + goto check_next_ie;
6295
6296 *wpa_ie_len = *(pbuf + 1);
6297
6298 return pbuf;
6299 -
6300 }
6301 else {
6302
6303 - *wpa_ie_len = 0;
6304 + *wpa_ie_len = 0;
6305 return NULL;
6306 }
6307
6308 check_next_ie:
6309
6310 - limit = limit - (pbuf - pie) - 2 - len;
6311 + limit -= (2 + len);
6312
6313 if (limit <= 0)
6314 break;
6315
6316 pbuf += (2 + len);
6317 -
6318 }
6319 -
6320 +
6321 *wpa_ie_len = 0;
6322 -
6323 - return NULL;
6324
6325 + return NULL;
6326 }
6327
6328 unsigned char *rtw_get_wpa2_ie(unsigned char *pie, int *rsn_ie_len, int limit)
6329 @@ -434,7 +600,7 @@ int rtw_parse_wpa_ie(u8* wpa_ie, int wpa
6330
6331
6332 if ((*wpa_ie != _WPA_IE_ID_) || (*(wpa_ie+1) != (u8)(wpa_ie_len - 2)) ||
6333 - (_rtw_memcmp(wpa_ie+2, WPA_OUI_TYPE, WPA_SELECTOR_LEN) != _TRUE) )
6334 + (_rtw_memcmp(wpa_ie+2, RTW_WPA_OUI_TYPE, WPA_SELECTOR_LEN) != _TRUE) )
6335 {
6336 return _FAIL;
6337 }
6338 @@ -787,7 +953,7 @@ u8 *rtw_get_wps_attr_content(u8 *wps_ie,
6339 }
6340
6341 static int rtw_ieee802_11_parse_vendor_specific(u8 *pos, uint elen,
6342 - struct ieee802_11_elems *elems,
6343 + struct rtw_ieee802_11_elems *elems,
6344 int show_errors)
6345 {
6346 unsigned int oui;
6347 @@ -892,7 +1058,7 @@ static int rtw_ieee802_11_parse_vendor_s
6348 * Returns: Parsing result
6349 */
6350 ParseRes rtw_ieee802_11_parse_elems(u8 *start, uint len,
6351 - struct ieee802_11_elems *elems,
6352 + struct rtw_ieee802_11_elems *elems,
6353 int show_errors)
6354 {
6355 uint left = len;
6356 @@ -1018,7 +1184,8 @@ ParseRes rtw_ieee802_11_parse_elems(u8 *
6357
6358 }
6359
6360 -u8 key_char2num(u8 ch)
6361 +static u8 key_char2num(u8 ch);
6362 +static u8 key_char2num(u8 ch)
6363 {
6364 if((ch>='0')&&(ch<='9'))
6365 return ch - '0';
6366 @@ -1030,16 +1197,23 @@ u8 key_char2num(u8 ch)
6367 return 0xff;
6368 }
6369
6370 +u8 str_2char2num(u8 hch, u8 lch);
6371 u8 str_2char2num(u8 hch, u8 lch)
6372 {
6373 return ((key_char2num(hch) * 10 ) + key_char2num(lch));
6374 }
6375
6376 +u8 key_2char2num(u8 hch, u8 lch);
6377 u8 key_2char2num(u8 hch, u8 lch)
6378 {
6379 return ((key_char2num(hch) << 4) | key_char2num(lch));
6380 }
6381
6382 +u8 convert_ip_addr(u8 hch, u8 mch, u8 lch)
6383 +{
6384 + return ((key_char2num(hch) * 100) + (key_char2num(mch) * 10 ) + key_char2num(lch));
6385 +}
6386 +
6387 extern char* rtw_initmac;
6388 void rtw_macaddr_cfg(u8 *mac_addr)
6389 {
6390 @@ -1074,10 +1248,10 @@ void rtw_macaddr_cfg(u8 *mac_addr)
6391 mac[5] = 0x00;
6392 // use default mac addresss
6393 _rtw_memcpy(mac_addr, mac, ETH_ALEN);
6394 - DBG_8192C("MAC Address from efuse error, assign default one !!!\n");
6395 + DBG_871X("MAC Address from efuse error, assign default one !!!\n");
6396 }
6397
6398 - DBG_8192C("rtw_macaddr_cfg MAC Address = "MAC_FMT"\n", MAC_ARG(mac_addr));
6399 + DBG_871X("rtw_macaddr_cfg MAC Address = "MAC_FMT"\n", MAC_ARG(mac_addr));
6400 }
6401
6402 void dump_ies(u8 *buf, u32 buf_len) {
6403 @@ -1122,6 +1296,77 @@ void dump_wps_ie(u8 *ie, u32 ie_len) {
6404 }
6405
6406 #ifdef CONFIG_P2P
6407 +/**
6408 + * rtw_get_p2p_merged_len - Get merged ie length from muitiple p2p ies.
6409 + * @in_ie: Pointer of the first p2p ie
6410 + * @in_len: Total len of muiltiple p2p ies
6411 + * Returns: Length of merged p2p ie length
6412 + */
6413 +u32 rtw_get_p2p_merged_ies_len(u8 *in_ie, u32 in_len)
6414 +{
6415 + PNDIS_802_11_VARIABLE_IEs pIE;
6416 + u8 OUI[4] = { 0x50, 0x6f, 0x9a, 0x09 };
6417 + int i=0;
6418 + int j=0, len=0;
6419 +
6420 + while( i < in_len)
6421 + {
6422 + pIE = (PNDIS_802_11_VARIABLE_IEs)(in_ie+ i);
6423 +
6424 + if( pIE->ElementID == _VENDOR_SPECIFIC_IE_ && _rtw_memcmp(pIE->data, OUI, 4) )
6425 + {
6426 + len += pIE->Length-4; // 4 is P2P OUI length, don't count it in this loop
6427 + }
6428 +
6429 + i += (pIE->Length + 2);
6430 + }
6431 +
6432 + return len + 4; // Append P2P OUI length at last.
6433 +}
6434 +
6435 +/**
6436 + * rtw_p2p_merge_ies - Merge muitiple p2p ies into one
6437 + * @in_ie: Pointer of the first p2p ie
6438 + * @in_len: Total len of muiltiple p2p ies
6439 + * @merge_ie: Pointer of merged ie
6440 + * Returns: Length of merged p2p ie
6441 + */
6442 +int rtw_p2p_merge_ies(u8 *in_ie, u32 in_len, u8 *merge_ie)
6443 +{
6444 + PNDIS_802_11_VARIABLE_IEs pIE;
6445 + u8 len = 0;
6446 + u8 OUI[4] = { 0x50, 0x6f, 0x9a, 0x09 };
6447 + u8 ELOUI[6] = { 0xDD, 0x00, 0x50, 0x6f, 0x9a, 0x09 }; //EID;Len;OUI, Len would copy at the end of function
6448 + int i=0;
6449 +
6450 + if( merge_ie != NULL)
6451 + {
6452 + //Set first P2P OUI
6453 + _rtw_memcpy(merge_ie, ELOUI, 6);
6454 + merge_ie += 6;
6455 +
6456 + while( i < in_len)
6457 + {
6458 + pIE = (PNDIS_802_11_VARIABLE_IEs)(in_ie+ i);
6459 +
6460 + // Take out the rest of P2P OUIs
6461 + if( pIE->ElementID == _VENDOR_SPECIFIC_IE_ && _rtw_memcmp(pIE->data, OUI, 4) )
6462 + {
6463 + _rtw_memcpy( merge_ie, pIE->data +4, pIE->Length -4);
6464 + len += pIE->Length-4;
6465 + merge_ie += pIE->Length-4;
6466 + }
6467 +
6468 + i += (pIE->Length + 2);
6469 + }
6470 +
6471 + return len + 4; // 4 is for P2P OUI
6472 +
6473 + }
6474 +
6475 + return 0;
6476 +}
6477 +
6478 void dump_p2p_ie(u8 *ie, u32 ie_len) {
6479 u8* pos = (u8*)ie;
6480 u8 id;
6481 @@ -1154,7 +1399,7 @@ void dump_p2p_ie(u8 *ie, u32 ie_len) {
6482 *
6483 * Returns: The address of the P2P IE found, or NULL
6484 */
6485 -u8 *rtw_get_p2p_ie(u8 *in_ie, uint in_len, u8 *p2p_ie, uint *p2p_ielen)
6486 +u8 *rtw_get_p2p_ie(u8 *in_ie, int in_len, u8 *p2p_ie, uint *p2p_ielen)
6487 {
6488 uint cnt = 0;
6489 u8 *p2p_ie_ptr;
6490 @@ -1166,7 +1411,12 @@ u8 *rtw_get_p2p_ie(u8 *in_ie, uint in_le
6491 while(cnt<in_len)
6492 {
6493 eid = in_ie[cnt];
6494 -
6495 + if ((in_len < 0) || (cnt > MAX_IE_SZ)) {
6496 +#ifdef PLATFORM_LINUX
6497 + dump_stack();
6498 +#endif
6499 + return NULL;
6500 + }
6501 if( ( eid == _VENDOR_SPECIFIC_IE_ ) && ( _rtw_memcmp( &in_ie[cnt+2], p2p_oui, 4) == _TRUE ) )
6502 {
6503 p2p_ie_ptr = in_ie + cnt;
6504 @@ -1215,7 +1465,7 @@ u8 *rtw_get_p2p_attr(u8 *p2p_ie, uint p2
6505 if(len_attr)
6506 *len_attr = 0;
6507
6508 - if ( ( p2p_ie[0] != _VENDOR_SPECIFIC_IE_ ) ||
6509 + if ( !p2p_ie || ( p2p_ie[0] != _VENDOR_SPECIFIC_IE_ ) ||
6510 ( _rtw_memcmp( p2p_ie + 2, p2p_oui , 4 ) != _TRUE ) )
6511 {
6512 return attr_ptr;
6513 @@ -1381,8 +1631,10 @@ void rtw_WLAN_BSSID_EX_remove_p2p_attr(W
6514 }
6515 }
6516
6517 +#endif //CONFIG_P2P
6518 +
6519 #ifdef CONFIG_WFD
6520 -int rtw_get_wfd_ie(u8 *in_ie, uint in_len, u8 *wfd_ie, uint *wfd_ielen)
6521 +int rtw_get_wfd_ie(u8 *in_ie, int in_len, u8 *wfd_ie, uint *wfd_ielen)
6522 {
6523 int match;
6524 uint cnt = 0;
6525 @@ -1390,6 +1642,12 @@ int rtw_get_wfd_ie(u8 *in_ie, uint in_le
6526
6527
6528 match=_FALSE;
6529 +
6530 + if ( in_len < 0 )
6531 + {
6532 + return match;
6533 + }
6534 +
6535 while(cnt<in_len)
6536 {
6537 eid = in_ie[cnt];
6538 @@ -1399,10 +1657,7 @@ int rtw_get_wfd_ie(u8 *in_ie, uint in_le
6539 if ( wfd_ie != NULL )
6540 {
6541 _rtw_memcpy( wfd_ie, &in_ie[ cnt ], in_ie[ cnt + 1 ] + 2 );
6542 - if ( wfd_ielen != NULL )
6543 - {
6544 - *wfd_ielen = in_ie[ cnt + 1 ] + 2;
6545 - }
6546 +
6547 }
6548 else
6549 {
6550 @@ -1412,6 +1667,11 @@ int rtw_get_wfd_ie(u8 *in_ie, uint in_le
6551 }
6552 }
6553
6554 + if ( wfd_ielen != NULL )
6555 + {
6556 + *wfd_ielen = in_ie[ cnt + 1 ] + 2;
6557 + }
6558 +
6559 cnt += in_ie[ cnt + 1 ] + 2;
6560
6561 match = _TRUE;
6562 @@ -1454,7 +1714,7 @@ int rtw_get_wfd_attr_content(u8 *wfd_ie,
6563 cnt = 6;
6564 while( cnt < wfd_ielen )
6565 {
6566 - u16 attrlen = RTW_GET_BE16(wfd_ie + cnt + 1);
6567 + u16 attrlen = RTW_GET_BE16(wfd_ie + cnt + 1);
6568
6569 attr_id = wfd_ie[cnt];
6570 if( attr_id == target_attr_id )
6571 @@ -1464,7 +1724,7 @@ int rtw_get_wfd_attr_content(u8 *wfd_ie,
6572 _rtw_memcpy( attr_content, &wfd_ie[ cnt + 3 ], attrlen );
6573
6574 if(attr_contentlen)
6575 - *attr_contentlen = attrlen;
6576 + *attr_contentlen = attrlen;
6577
6578 cnt += attrlen + 3;
6579
6580 @@ -1482,5 +1742,174 @@ int rtw_get_wfd_attr_content(u8 *wfd_ie,
6581
6582 }
6583 #endif // CONFIG_WFD
6584 -#endif // CONFIG_P2P
6585 +
6586 +//Baron adds to avoid FreeBSD warning
6587 +int ieee80211_is_empty_essid(const char *essid, int essid_len)
6588 +{
6589 + /* Single white space is for Linksys APs */
6590 + if (essid_len == 1 && essid[0] == ' ')
6591 + return 1;
6592 +
6593 + /* Otherwise, if the entire essid is 0, we assume it is hidden */
6594 + while (essid_len) {
6595 + essid_len--;
6596 + if (essid[essid_len] != '\0')
6597 + return 0;
6598 + }
6599 +
6600 + return 1;
6601 +}
6602 +
6603 +int ieee80211_get_hdrlen(u16 fc)
6604 +{
6605 + int hdrlen = 24;
6606 +
6607 + switch (WLAN_FC_GET_TYPE(fc)) {
6608 + case RTW_IEEE80211_FTYPE_DATA:
6609 + if (fc & RTW_IEEE80211_STYPE_QOS_DATA)
6610 + hdrlen += 2;
6611 + if ((fc & RTW_IEEE80211_FCTL_FROMDS) && (fc & RTW_IEEE80211_FCTL_TODS))
6612 + hdrlen += 6; /* Addr4 */
6613 + break;
6614 + case RTW_IEEE80211_FTYPE_CTL:
6615 + switch (WLAN_FC_GET_STYPE(fc)) {
6616 + case RTW_IEEE80211_STYPE_CTS:
6617 + case RTW_IEEE80211_STYPE_ACK:
6618 + hdrlen = 10;
6619 + break;
6620 + default:
6621 + hdrlen = 16;
6622 + break;
6623 + }
6624 + break;
6625 + }
6626 +
6627 + return hdrlen;
6628 +}
6629 +
6630 +//show MCS rate, unit: 100Kbps
6631 +u16 rtw_mcs_rate(u8 rf_type, u8 bw_40MHz, u8 short_GI_20, u8 short_GI_40, unsigned char * MCS_rate)
6632 +{
6633 + u16 max_rate = 0;
6634 +
6635 + if(rf_type == RF_1T1R)
6636 + {
6637 + if(MCS_rate[0] & BIT(7))
6638 + max_rate = (bw_40MHz) ? ((short_GI_40)?1500:1350):((short_GI_20)?722:650);
6639 + else if(MCS_rate[0] & BIT(6))
6640 + max_rate = (bw_40MHz) ? ((short_GI_40)?1350:1215):((short_GI_20)?650:585);
6641 + else if(MCS_rate[0] & BIT(5))
6642 + max_rate = (bw_40MHz) ? ((short_GI_40)?1200:1080):((short_GI_20)?578:520);
6643 + else if(MCS_rate[0] & BIT(4))
6644 + max_rate = (bw_40MHz) ? ((short_GI_40)?900:810):((short_GI_20)?433:390);
6645 + else if(MCS_rate[0] & BIT(3))
6646 + max_rate = (bw_40MHz) ? ((short_GI_40)?600:540):((short_GI_20)?289:260);
6647 + else if(MCS_rate[0] & BIT(2))
6648 + max_rate = (bw_40MHz) ? ((short_GI_40)?450:405):((short_GI_20)?217:195);
6649 + else if(MCS_rate[0] & BIT(1))
6650 + max_rate = (bw_40MHz) ? ((short_GI_40)?300:270):((short_GI_20)?144:130);
6651 + else if(MCS_rate[0] & BIT(0))
6652 + max_rate = (bw_40MHz) ? ((short_GI_40)?150:135):((short_GI_20)?72:65);
6653 + }
6654 + else
6655 + {
6656 + if(MCS_rate[1])
6657 + {
6658 + if(MCS_rate[1] & BIT(7))
6659 + max_rate = (bw_40MHz) ? ((short_GI_40)?3000:2700):((short_GI_20)?1444:1300);
6660 + else if(MCS_rate[1] & BIT(6))
6661 + max_rate = (bw_40MHz) ? ((short_GI_40)?2700:2430):((short_GI_20)?1300:1170);
6662 + else if(MCS_rate[1] & BIT(5))
6663 + max_rate = (bw_40MHz) ? ((short_GI_40)?2400:2160):((short_GI_20)?1156:1040);
6664 + else if(MCS_rate[1] & BIT(4))
6665 + max_rate = (bw_40MHz) ? ((short_GI_40)?1800:1620):((short_GI_20)?867:780);
6666 + else if(MCS_rate[1] & BIT(3))
6667 + max_rate = (bw_40MHz) ? ((short_GI_40)?1200:1080):((short_GI_20)?578:520);
6668 + else if(MCS_rate[1] & BIT(2))
6669 + max_rate = (bw_40MHz) ? ((short_GI_40)?900:810):((short_GI_20)?433:390);
6670 + else if(MCS_rate[1] & BIT(1))
6671 + max_rate = (bw_40MHz) ? ((short_GI_40)?600:540):((short_GI_20)?289:260);
6672 + else if(MCS_rate[1] & BIT(0))
6673 + max_rate = (bw_40MHz) ? ((short_GI_40)?300:270):((short_GI_20)?144:130);
6674 + }
6675 + else
6676 + {
6677 + if(MCS_rate[0] & BIT(7))
6678 + max_rate = (bw_40MHz) ? ((short_GI_40)?1500:1350):((short_GI_20)?722:650);
6679 + else if(MCS_rate[0] & BIT(6))
6680 + max_rate = (bw_40MHz) ? ((short_GI_40)?1350:1215):((short_GI_20)?650:585);
6681 + else if(MCS_rate[0] & BIT(5))
6682 + max_rate = (bw_40MHz) ? ((short_GI_40)?1200:1080):((short_GI_20)?578:520);
6683 + else if(MCS_rate[0] & BIT(4))
6684 + max_rate = (bw_40MHz) ? ((short_GI_40)?900:810):((short_GI_20)?433:390);
6685 + else if(MCS_rate[0] & BIT(3))
6686 + max_rate = (bw_40MHz) ? ((short_GI_40)?600:540):((short_GI_20)?289:260);
6687 + else if(MCS_rate[0] & BIT(2))
6688 + max_rate = (bw_40MHz) ? ((short_GI_40)?450:405):((short_GI_20)?217:195);
6689 + else if(MCS_rate[0] & BIT(1))
6690 + max_rate = (bw_40MHz) ? ((short_GI_40)?300:270):((short_GI_20)?144:130);
6691 + else if(MCS_rate[0] & BIT(0))
6692 + max_rate = (bw_40MHz) ? ((short_GI_40)?150:135):((short_GI_20)?72:65);
6693 + }
6694 + }
6695 + return max_rate;
6696 +}
6697 +
6698 +int rtw_action_frame_parse(const u8 *frame, u32 frame_len, u8* category, u8 *action)
6699 +{
6700 + const u8 *frame_body = frame + sizeof(struct rtw_ieee80211_hdr_3addr);
6701 + u16 fc;
6702 + u8 c, a;
6703 +
6704 + fc = le16_to_cpu(((struct rtw_ieee80211_hdr_3addr *)frame)->frame_ctl);
6705 +
6706 + if ((fc & (RTW_IEEE80211_FCTL_FTYPE|RTW_IEEE80211_FCTL_STYPE))
6707 + != (RTW_IEEE80211_FTYPE_MGMT|RTW_IEEE80211_STYPE_ACTION)
6708 + )
6709 + {
6710 + return _FALSE;
6711 + }
6712 +
6713 + c = frame_body[0];
6714 +
6715 + switch(c) {
6716 + case RTW_WLAN_CATEGORY_P2P: /* vendor-specific */
6717 + break;
6718 + default:
6719 + a = frame_body[1];
6720 + }
6721 +
6722 + if (category)
6723 + *category = c;
6724 + if (action)
6725 + *action = a;
6726 +
6727 + return _TRUE;
6728 +}
6729 +
6730 +static const char *_action_public_str[] = {
6731 + "ACT_PUB_BSSCOEXIST",
6732 + "ACT_PUB_DSE_ENABLE",
6733 + "ACT_PUB_DSE_DEENABLE",
6734 + "ACT_PUB_DSE_REG_LOCATION",
6735 + "ACT_PUB_EXT_CHL_SWITCH",
6736 + "ACT_PUB_DSE_MSR_REQ",
6737 + "ACT_PUB_DSE_MSR_RPRT",
6738 + "ACT_PUB_MP",
6739 + "ACT_PUB_DSE_PWR_CONSTRAINT",
6740 + "ACT_PUB_VENDOR",
6741 + "ACT_PUB_GAS_INITIAL_REQ",
6742 + "ACT_PUB_GAS_INITIAL_RSP",
6743 + "ACT_PUB_GAS_COMEBACK_REQ",
6744 + "ACT_PUB_GAS_COMEBACK_RSP",
6745 + "ACT_PUB_TDLS_DISCOVERY_RSP",
6746 + "ACT_PUB_LOCATION_TRACK",
6747 + "ACT_PUB_RSVD",
6748 +};
6749 +
6750 +const char *action_public_str(u8 action)
6751 +{
6752 + action = (action >= ACT_PUBLIC_MAX) ? ACT_PUBLIC_MAX : action;
6753 + return _action_public_str[action];
6754 +}
6755
6756 --- a/drivers/net/wireless/rtl8192cu/core/rtw_io.c
6757 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_io.c
6758 @@ -1,7 +1,7 @@
6759 /******************************************************************************
6760 *
6761 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
6762 - *
6763 + *
6764 * This program is free software; you can redistribute it and/or modify it
6765 * under the terms of version 2 of the GNU General Public License as
6766 * published by the Free Software Foundation.
6767 @@ -16,13 +16,12 @@
6768 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
6769 *
6770 *
6771 -
6772 -******************************************************************************/
6773 + ******************************************************************************/
6774 /*
6775
6776 The purpose of rtw_io.c
6777
6778 -a. provides the API
6779 +a. provides the API
6780
6781 b. provides the protocol engine
6782
6783 @@ -101,7 +100,7 @@ u16 _rtw_read16(_adapter *adapter, u32 a
6784 _func_exit_;
6785 return r_val;
6786 }
6787 -
6788 +
6789 u32 _rtw_read32(_adapter *adapter, u32 addr)
6790 {
6791 u32 r_val;
6792 @@ -114,7 +113,7 @@ u32 _rtw_read32(_adapter *adapter, u32 a
6793
6794 r_val = _read32(pintfhdl, addr);
6795 _func_exit_;
6796 - return r_val;
6797 + return r_val;
6798
6799 }
6800
6801 @@ -142,7 +141,7 @@ int _rtw_write16(_adapter *adapter, u32
6802 int ret;
6803 _func_enter_;
6804 _write16 = pintfhdl->io_ops._write16;
6805 -
6806 +
6807 ret = _write16(pintfhdl, addr, val);
6808 _func_exit_;
6809
6810 @@ -174,7 +173,7 @@ int _rtw_writeN(_adapter *adapter, u32 a
6811 _func_enter_;
6812 _writeN = pintfhdl->io_ops._writeN;
6813
6814 - ret = _writeN(pintfhdl, addr,length,pdata);
6815 + ret = _writeN(pintfhdl, addr,length,pdata);
6816 _func_exit_;
6817
6818 return RTW_STATUS_CODE(ret);
6819 @@ -188,8 +187,8 @@ int _rtw_write8_async(_adapter *adapter,
6820 int ret;
6821 _func_enter_;
6822 _write8_async = pintfhdl->io_ops._write8_async;
6823 -
6824 - ret = _write8_async(pintfhdl, addr, val);
6825 +
6826 + ret = _write8_async(pintfhdl, addr, val);
6827 _func_exit_;
6828
6829 return RTW_STATUS_CODE(ret);
6830 @@ -203,8 +202,8 @@ int _rtw_write16_async(_adapter *adapter
6831 int ret;
6832 _func_enter_;
6833 _write16_async = pintfhdl->io_ops._write16_async;
6834 -
6835 - ret = _write16_async(pintfhdl, addr, val);
6836 +
6837 + ret = _write16_async(pintfhdl, addr, val);
6838 _func_exit_;
6839
6840 return RTW_STATUS_CODE(ret);
6841 @@ -218,71 +217,71 @@ int _rtw_write32_async(_adapter *adapter
6842 int ret;
6843 _func_enter_;
6844 _write32_async = pintfhdl->io_ops._write32_async;
6845 -
6846 - ret = _write32_async(pintfhdl, addr, val);
6847 +
6848 + ret = _write32_async(pintfhdl, addr, val);
6849 _func_exit_;
6850
6851 return RTW_STATUS_CODE(ret);
6852 }
6853 void _rtw_read_mem(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem)
6854 {
6855 - void (*_read_mem)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
6856 + void (*_read_mem)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
6857 //struct io_queue *pio_queue = (struct io_queue *)adapter->pio_queue;
6858 struct io_priv *pio_priv = &adapter->iopriv;
6859 struct intf_hdl *pintfhdl = &(pio_priv->intf);
6860 -
6861 +
6862 _func_enter_;
6863
6864 if( (adapter->bDriverStopped ==_TRUE) || (adapter->bSurpriseRemoved == _TRUE))
6865 {
6866 RT_TRACE(_module_rtl871x_io_c_, _drv_info_, ("rtw_read_mem:bDriverStopped(%d) OR bSurpriseRemoved(%d)", adapter->bDriverStopped, adapter->bSurpriseRemoved));
6867 return;
6868 - }
6869 -
6870 + }
6871 +
6872 _read_mem = pintfhdl->io_ops._read_mem;
6873 -
6874 +
6875 _read_mem(pintfhdl, addr, cnt, pmem);
6876 -
6877 +
6878 _func_exit_;
6879 -
6880 +
6881 }
6882
6883 void _rtw_write_mem(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem)
6884 -{
6885 - void (*_write_mem)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
6886 +{
6887 + void (*_write_mem)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
6888 //struct io_queue *pio_queue = (struct io_queue *)adapter->pio_queue;
6889 struct io_priv *pio_priv = &adapter->iopriv;
6890 struct intf_hdl *pintfhdl = &(pio_priv->intf);
6891
6892 _func_enter_;
6893 -
6894 +
6895 _write_mem = pintfhdl->io_ops._write_mem;
6896 -
6897 +
6898 _write_mem(pintfhdl, addr, cnt, pmem);
6899 -
6900 - _func_exit_;
6901 -
6902 +
6903 + _func_exit_;
6904 +
6905 }
6906
6907 void _rtw_read_port(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem)
6908 -{
6909 - u32 (*_read_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
6910 +{
6911 + u32 (*_read_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
6912 //struct io_queue *pio_queue = (struct io_queue *)adapter->pio_queue;
6913 struct io_priv *pio_priv = &adapter->iopriv;
6914 struct intf_hdl *pintfhdl = &(pio_priv->intf);
6915 -
6916 - _func_enter_;
6917 +
6918 + _func_enter_;
6919
6920 if( (adapter->bDriverStopped ==_TRUE) || (adapter->bSurpriseRemoved == _TRUE))
6921 {
6922 RT_TRACE(_module_rtl871x_io_c_, _drv_info_, ("rtw_read_port:bDriverStopped(%d) OR bSurpriseRemoved(%d)", adapter->bDriverStopped, adapter->bSurpriseRemoved));
6923 return;
6924 - }
6925 + }
6926
6927 _read_port = pintfhdl->io_ops._read_port;
6928 -
6929 +
6930 _read_port(pintfhdl, addr, cnt, pmem);
6931 -
6932 +
6933 _func_exit_;
6934
6935 }
6936 @@ -292,51 +291,48 @@ void _rtw_read_port_cancel(_adapter *ada
6937 void (*_read_port_cancel)(struct intf_hdl *pintfhdl);
6938 struct io_priv *pio_priv = &adapter->iopriv;
6939 struct intf_hdl *pintfhdl = &(pio_priv->intf);
6940 -
6941 +
6942 _read_port_cancel = pintfhdl->io_ops._read_port_cancel;
6943
6944 if(_read_port_cancel)
6945 - _read_port_cancel(pintfhdl);
6946 -
6947 + _read_port_cancel(pintfhdl);
6948 +
6949 }
6950
6951 -void _rtw_write_port(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem)
6952 -{
6953 +u32 _rtw_write_port(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem)
6954 +{
6955 u32 (*_write_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
6956 //struct io_queue *pio_queue = (struct io_queue *)adapter->pio_queue;
6957 struct io_priv *pio_priv = &adapter->iopriv;
6958 struct intf_hdl *pintfhdl = &(pio_priv->intf);
6959 -
6960 - _func_enter_;
6961 -
6962 + u32 ret = _SUCCESS;
6963 +
6964 + _func_enter_;
6965 +
6966 _write_port = pintfhdl->io_ops._write_port;
6967
6968 - _write_port(pintfhdl, addr, cnt, pmem);
6969 -
6970 + ret = _write_port(pintfhdl, addr, cnt, pmem);
6971 +
6972 _func_exit_;
6973 -
6974 +
6975 + return ret;
6976 }
6977
6978 -int _rtw_write_port_sync(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem)
6979 +u32 _rtw_write_port_and_wait(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem, int timeout_ms)
6980 {
6981 - int (*_write_port_sync)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
6982 - //struct io_queue *pio_queue = (struct io_queue *)adapter->pio_queue;
6983 - struct io_priv *pio_priv = &adapter->iopriv;
6984 - struct intf_hdl *pintfhdl = &(pio_priv->intf);
6985 int ret = _SUCCESS;
6986 -
6987 - _func_enter_;
6988 + struct xmit_buf *pxmitbuf = (struct xmit_buf *)pmem;
6989 + struct submit_ctx sctx;
6990
6991 - _write_port_sync = pintfhdl->io_ops._write_port_sync;
6992 + rtw_sctx_init(&sctx, timeout_ms);
6993 + pxmitbuf->sctx = &sctx;
6994
6995 - if(_write_port_sync)
6996 - ret = _write_port_sync(pintfhdl, addr, cnt, pmem);
6997 - else
6998 - ret = _FAIL;
6999 + ret = _rtw_write_port(adapter, addr, cnt, pmem);
7000
7001 - _func_exit_;
7002 + if (ret == _SUCCESS)
7003 + ret = rtw_sctx_wait(&sctx);
7004
7005 - return ret;
7006 + return ret;
7007 }
7008
7009 void _rtw_write_port_cancel(_adapter *adapter)
7010 @@ -344,143 +340,121 @@ void _rtw_write_port_cancel(_adapter *ad
7011 void (*_write_port_cancel)(struct intf_hdl *pintfhdl);
7012 struct io_priv *pio_priv = &adapter->iopriv;
7013 struct intf_hdl *pintfhdl = &(pio_priv->intf);
7014 -
7015 +
7016 _write_port_cancel = pintfhdl->io_ops._write_port_cancel;
7017
7018 if(_write_port_cancel)
7019 - _write_port_cancel(pintfhdl);
7020 + _write_port_cancel(pintfhdl);
7021
7022 }
7023
7024 -
7025 -void _rtw_attrib_read(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem){
7026 -#ifdef CONFIG_SDIO_HCI
7027 - void (*_attrib_read)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
7028 -
7029 - //struct io_queue *pio_queue = (struct io_queue *)adapter->pio_queue;
7030 - struct io_priv *pio_priv = &adapter->iopriv;
7031 - struct intf_hdl *pintfhdl = &(pio_priv->intf);
7032 -
7033 - _func_enter_;
7034 -
7035 - _attrib_read= pintfhdl->io_ops._attrib_read;
7036 -
7037 - _attrib_read(pintfhdl, addr, cnt, pmem);
7038 -
7039 - _func_exit_;
7040 -#endif
7041 -}
7042 -
7043 -void _rtw_attrib_write(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem){
7044 -#ifdef CONFIG_SDIO_HCI
7045 - void (*_attrib_write)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
7046 -
7047 - //struct io_queue *pio_queue = (struct io_queue *)adapter->pio_queue;
7048 - struct io_priv *pio_priv = &adapter->iopriv;
7049 - struct intf_hdl *pintfhdl = &(pio_priv->intf);
7050 -
7051 - _func_enter_;
7052 -
7053 - _attrib_write= pintfhdl->io_ops._attrib_write;
7054 -
7055 - _attrib_write(pintfhdl, addr, cnt, pmem);
7056 -
7057 - _func_exit_;
7058 -
7059 -#endif
7060 -}
7061 -
7062 -int rtw_init_io_priv(_adapter *padapter)
7063 -{
7064 - void (*set_intf_ops)(struct _io_ops *pops);
7065 +int rtw_init_io_priv(_adapter *padapter, void (*set_intf_ops)(struct _io_ops *pops))
7066 +{
7067 struct io_priv *piopriv = &padapter->iopriv;
7068 struct intf_hdl *pintf = &piopriv->intf;
7069
7070 + if (set_intf_ops == NULL)
7071 + return _FAIL;
7072 +
7073 piopriv->padapter = padapter;
7074 pintf->padapter = padapter;
7075 - pintf->pintf_dev = &padapter->dvobjpriv;
7076 + pintf->pintf_dev = adapter_to_dvobj(padapter);
7077
7078 -
7079 -#ifdef CONFIG_SDIO_HCI
7080 - set_intf_ops = &sdio_set_intf_ops;
7081 -#endif //END OF CONFIG_SDIO_HCI
7082 + set_intf_ops(&pintf->io_ops);
7083
7084 + return _SUCCESS;
7085 +}
7086
7087 -#ifdef CONFIG_USB_HCI
7088 +#ifdef DBG_IO
7089
7090 - if(padapter->chip_type == RTL8188C_8192C)
7091 - {
7092 -#ifdef CONFIG_RTL8192C
7093 - set_intf_ops = &rtl8192cu_set_intf_ops;
7094 -#endif
7095 +u16 read_sniff_ranges[][2] = {
7096 + //{0x550, 0x551},
7097 +};
7098 +
7099 +u16 write_sniff_ranges[][2] = {
7100 + //{0x550, 0x551},
7101 + //{0x4c, 0x4c},
7102 +};
7103 +
7104 +int read_sniff_num = sizeof(read_sniff_ranges)/sizeof(u16)/2;
7105 +int write_sniff_num = sizeof(write_sniff_ranges)/sizeof(u16)/2;
7106 +
7107 +bool match_read_sniff_ranges(u16 addr, u16 len)
7108 +{
7109 + int i;
7110 + for (i = 0; i<read_sniff_num; i++) {
7111 + if (addr + len > read_sniff_ranges[i][0] && addr <= read_sniff_ranges[i][1])
7112 + return _TRUE;
7113 }
7114 - else if(padapter->chip_type == RTL8192D)
7115 - {
7116 -#ifdef CONFIG_RTL8192D
7117 - set_intf_ops = &rtl8192du_set_intf_ops;
7118 -#endif
7119 - }
7120 - else
7121 - {
7122 - set_intf_ops = NULL;
7123 +
7124 + return _FALSE;
7125 +}
7126 +
7127 +bool match_write_sniff_ranges(u16 addr, u16 len)
7128 +{
7129 + int i;
7130 + for (i = 0; i<write_sniff_num; i++) {
7131 + if (addr + len > write_sniff_ranges[i][0] && addr <= write_sniff_ranges[i][1])
7132 + return _TRUE;
7133 }
7134 -#endif //END OF CONFIG_USB_HCI
7135 +
7136 + return _FALSE;
7137 +}
7138
7139 -#ifdef CONFIG_PCI_HCI
7140 +u8 dbg_rtw_read8(_adapter *adapter, u32 addr, const char *caller, const int line)
7141 +{
7142 + u8 val = _rtw_read8(adapter, addr);
7143
7144 - if(padapter->chip_type == RTL8188C_8192C)
7145 - {
7146 -#ifdef CONFIG_RTL8192C
7147 - set_intf_ops = &rtl8192ce_set_intf_ops;
7148 -#endif
7149 - }
7150 - else if(padapter->chip_type == RTL8192D)
7151 - {
7152 -#ifdef CONFIG_RTL8192D
7153 - set_intf_ops = &rtl8192de_set_intf_ops;
7154 -#endif
7155 - }
7156 - else
7157 - {
7158 - set_intf_ops = NULL;
7159 - }
7160 -#endif //END OF CONFIG_PCI_HCI
7161 + if (match_read_sniff_ranges(addr, 1))
7162 + DBG_871X("DBG_IO %s:%d rtw_read8(0x%04x) return 0x%02x\n", caller, line, addr, val);
7163
7164 + return val;
7165 +}
7166
7167 - if(set_intf_ops==NULL)
7168 - return _FAIL;
7169 +u16 dbg_rtw_read16(_adapter *adapter, u32 addr, const char *caller, const int line)
7170 +{
7171 + u16 val = _rtw_read16(adapter, addr);
7172 +
7173 + if (match_read_sniff_ranges(addr, 2))
7174 + DBG_871X("DBG_IO %s:%d rtw_read16(0x%04x) return 0x%04x\n", caller, line, addr, val);
7175
7176 - set_intf_ops(&pintf->io_ops);
7177 + return val;
7178 +}
7179
7180 - return _SUCCESS;
7181 +u32 dbg_rtw_read32(_adapter *adapter, u32 addr, const char *caller, const int line)
7182 +{
7183 + u32 val = _rtw_read32(adapter, addr);
7184 +
7185 + if (match_read_sniff_ranges(addr, 4))
7186 + DBG_871X("DBG_IO %s:%d rtw_read32(0x%04x) return 0x%08x\n", caller, line, addr, val);
7187
7188 + return val;
7189 }
7190
7191 -#ifdef DBG_IO
7192 int dbg_rtw_write8(_adapter *adapter, u32 addr, u8 val, const char *caller, const int line)
7193 {
7194 - if(addr + 1 > DBG_IO_WRITE_SNIFF_ADDR_START && addr <= DBG_IO_WRITE_SNIFF_ADDR_END)
7195 + if (match_write_sniff_ranges(addr, 1))
7196 DBG_871X("DBG_IO %s:%d rtw_write8(0x%04x, 0x%02x)\n", caller, line, addr, val);
7197
7198 return _rtw_write8(adapter, addr, val);
7199 }
7200 int dbg_rtw_write16(_adapter *adapter, u32 addr, u16 val, const char *caller, const int line)
7201 {
7202 - if(addr + 2 > DBG_IO_WRITE_SNIFF_ADDR_START && addr <= DBG_IO_WRITE_SNIFF_ADDR_END)
7203 + if (match_write_sniff_ranges(addr, 2))
7204 DBG_871X("DBG_IO %s:%d rtw_write16(0x%04x, 0x%04x)\n", caller, line, addr, val);
7205
7206 return _rtw_write16(adapter, addr, val);
7207 }
7208 int dbg_rtw_write32(_adapter *adapter, u32 addr, u32 val, const char *caller, const int line)
7209 {
7210 - if(addr + 4 > DBG_IO_WRITE_SNIFF_ADDR_START && addr <= DBG_IO_WRITE_SNIFF_ADDR_END)
7211 + if (match_write_sniff_ranges(addr, 4))
7212 DBG_871X("DBG_IO %s:%d rtw_write32(0x%04x, 0x%08x)\n", caller, line, addr, val);
7213
7214 return _rtw_write32(adapter, addr, val);
7215 }
7216 int dbg_rtw_writeN(_adapter *adapter, u32 addr ,u32 length , u8 *data, const char *caller, const int line)
7217 {
7218 - if(addr + length> DBG_IO_WRITE_SNIFF_ADDR_START && addr <= DBG_IO_WRITE_SNIFF_ADDR_END)
7219 + if (match_write_sniff_ranges(addr, length))
7220 DBG_871X("DBG_IO %s:%d rtw_writeN(0x%04x, %u)\n", caller, line, addr, length);
7221
7222 return _rtw_writeN(adapter, addr, length, data);
7223 --- a/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_query.c
7224 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_query.c
7225 @@ -16,8 +16,7 @@
7226 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
7227 *
7228 *
7229 -
7230 -******************************************************************************/
7231 + ******************************************************************************/
7232 #define _RTW_IOCTL_QUERY_C_
7233
7234 #include <drv_conf.h>
7235 --- a/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_rtl.c
7236 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_rtl.c
7237 @@ -16,8 +16,7 @@
7238 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
7239 *
7240 *
7241 -
7242 -******************************************************************************/
7243 + ******************************************************************************/
7244 #define _RTW_IOCTL_RTL_C_
7245
7246 #include <drv_conf.h>
7247 --- a/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_set.c
7248 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_set.c
7249 @@ -16,7 +16,7 @@
7250 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
7251 *
7252 *
7253 -******************************************************************************/
7254 + ******************************************************************************/
7255 #define _RTW_IOCTL_SET_C_
7256
7257
7258 @@ -24,7 +24,7 @@
7259 #include <osdep_service.h>
7260 #include <drv_types.h>
7261 #include <rtw_ioctl_set.h>
7262 -#include <hal_init.h>
7263 +#include <hal_intf.h>
7264
7265 #ifdef CONFIG_USB_HCI
7266 #include <usb_osintf.h>
7267 @@ -43,6 +43,20 @@ extern void indicate_wx_scan_complete_ev
7268 (addr[4] == 0xff) && (addr[5] == 0xff) ) ? _TRUE : _FALSE \
7269 )
7270
7271 +u8 rtw_validate_bssid(u8 *bssid)
7272 +{
7273 + u8 ret = _TRUE;
7274 +
7275 + if (is_zero_mac_addr(bssid)
7276 + || is_broadcast_mac_addr(bssid)
7277 + || is_multicast_mac_addr(bssid)
7278 + ) {
7279 + ret = _FALSE;
7280 + }
7281 +
7282 + return ret;
7283 +}
7284 +
7285 u8 rtw_validate_ssid(NDIS_802_11_SSID *ssid)
7286 {
7287 u8 i;
7288 @@ -56,6 +70,7 @@ _func_enter_;
7289 goto exit;
7290 }
7291
7292 +#ifdef CONFIG_VALIDATE_SSID
7293 for(i = 0; i < ssid->SsidLength; i++)
7294 {
7295 //wifi, printable ascii code must be supported
7296 @@ -65,6 +80,7 @@ _func_enter_;
7297 break;
7298 }
7299 }
7300 +#endif /* CONFIG_VALIDATE_SSID */
7301
7302 exit:
7303
7304 @@ -73,6 +89,7 @@ _func_exit_;
7305 return ret;
7306 }
7307
7308 +u8 rtw_do_join(_adapter * padapter);
7309 u8 rtw_do_join(_adapter * padapter)
7310 {
7311 _irqL irqL;
7312 @@ -81,7 +98,7 @@ u8 rtw_do_join(_adapter * padapter)
7313 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
7314 _queue *queue = &(pmlmepriv->scanned_queue);
7315 u8 ret=_SUCCESS;
7316 -
7317 +
7318 _func_enter_;
7319
7320 _enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
7321 @@ -106,15 +123,13 @@ _func_enter_;
7322 //when set_ssid/set_bssid for rtw_do_join(), but scanning queue is empty
7323 //we try to issue sitesurvey firstly
7324
7325 - if(pmlmepriv->LinkDetectInfo.bBusyTraffic==_FALSE
7326 - #ifdef CONFIG_LAYER2_ROAMING
7327 - || pmlmepriv->to_roaming >0
7328 - #endif
7329 + if (pmlmepriv->LinkDetectInfo.bBusyTraffic ==_FALSE
7330 + || rtw_to_roaming(padapter) > 0
7331 )
7332 {
7333 RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("rtw_do_join(): site survey if scanned_queue is empty\n."));
7334 // submit site_survey_cmd
7335 - if(_SUCCESS!=(ret=rtw_sitesurvey_cmd(padapter, &pmlmepriv->assoc_ssid, 1)) ) {
7336 + if(_SUCCESS!=(ret=rtw_sitesurvey_cmd(padapter, &pmlmepriv->assoc_ssid, 1, NULL, 0)) ) {
7337 RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_err_,("rtw_do_join(): site survey return error\n."));
7338 }
7339 }
7340 @@ -133,7 +148,7 @@ _func_enter_;
7341 else if(ret == 2)//there is no need to wait for join
7342 {
7343 ret = _SUCCESS;
7344 - clr_fwstate(pmlmepriv, _FW_UNDER_LINKING);
7345 + _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
7346 rtw_indicate_connect(padapter);
7347 }
7348 else
7349 @@ -182,7 +197,7 @@ _func_enter_;
7350 // funk will reconnect, but funk will not sitesurvey before reconnect
7351 RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("for funk to do roaming"));
7352 if(pmlmepriv->sitesurveyctrl.traffic_busy==_FALSE)
7353 - rtw_sitesurvey_cmd(padapter, &pmlmepriv->assoc_ssid, 1);
7354 + rtw_sitesurvey_cmd(padapter, &pmlmepriv->assoc_ssid, 1, NULL, 0);
7355 }
7356
7357 }
7358 @@ -191,13 +206,11 @@ _func_enter_;
7359 //when set_ssid/set_bssid for rtw_do_join(), but there are no desired bss in scanning queue
7360 //we try to issue sitesurvey firstly
7361 if(pmlmepriv->LinkDetectInfo.bBusyTraffic==_FALSE
7362 - #ifdef CONFIG_LAYER2_ROAMING
7363 - || pmlmepriv->to_roaming >0
7364 - #endif
7365 + || rtw_to_roaming(padapter) > 0
7366 )
7367 {
7368 - //DBG_8192C("rtw_do_join() when no desired bss in scanning queue \n");
7369 - if( _SUCCESS!=(ret=rtw_sitesurvey_cmd(padapter, &pmlmepriv->assoc_ssid, 1)) ){
7370 + //DBG_871X("rtw_do_join() when no desired bss in scanning queue \n");
7371 + if( _SUCCESS!=(ret=rtw_sitesurvey_cmd(padapter, &pmlmepriv->assoc_ssid, 1, NULL, 0)) ){
7372 RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_err_,("do_join(): site survey return error\n."));
7373 }
7374 }
7375 @@ -317,8 +330,8 @@ u8 rtw_set_802_11_bssid(_adapter* padapt
7376 _irqL irqL;
7377 u8 status=_SUCCESS;
7378 u32 cur_time = 0;
7379 +
7380 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
7381 - _queue *queue = &pmlmepriv->scanned_queue;
7382
7383 _func_enter_;
7384
7385 @@ -355,7 +368,7 @@ _func_enter_;
7386 RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("set_bssid="MAC_FMT"\n", MAC_ARG(bssid) ));
7387 RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("cur_bssid="MAC_FMT"\n", MAC_ARG(pmlmepriv->cur_network.network.MacAddress) ));
7388
7389 - rtw_disassoc_cmd(padapter);
7390 + rtw_disassoc_cmd(padapter, 0, _TRUE);
7391
7392 if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)
7393 rtw_indicate_disconnect(padapter);
7394 @@ -370,24 +383,10 @@ _func_enter_;
7395 }
7396
7397 handle_tkip_countermeasure:
7398 - //should we add something here...?
7399 -
7400 -#ifdef PLATFORM_LINUX
7401 - if (padapter->securitypriv.btkip_countermeasure == _TRUE) {
7402 - cur_time = rtw_get_current_time();
7403 -
7404 - if( (cur_time - padapter->securitypriv.btkip_countermeasure_time) > 60 * HZ )
7405 - {
7406 - padapter->securitypriv.btkip_countermeasure = _FALSE;
7407 - padapter->securitypriv.btkip_countermeasure_time = 0;
7408 - }
7409 - else
7410 - {
7411 - status = _FAIL;
7412 - goto release_mlme_lock;
7413 - }
7414 + if (rtw_handle_tkip_countermeasure(padapter, __func__) == _FAIL) {
7415 + status = _FAIL;
7416 + goto release_mlme_lock;
7417 }
7418 -#endif
7419
7420 _rtw_memcpy(&pmlmepriv->assoc_bssid, bssid, ETH_ALEN);
7421 pmlmepriv->assoc_by_bssid=_TRUE;
7422 @@ -419,7 +418,6 @@ u8 rtw_set_802_11_ssid(_adapter* padapte
7423
7424 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
7425 struct wlan_network *pnetwork = &pmlmepriv->cur_network;
7426 -
7427
7428 _func_enter_;
7429
7430 @@ -460,7 +458,7 @@ _func_enter_;
7431 if(rtw_is_same_ibss(padapter, pnetwork) == _FALSE)
7432 {
7433 //if in WIFI_ADHOC_MASTER_STATE | WIFI_ADHOC_STATE, create bss or rejoin again
7434 - rtw_disassoc_cmd(padapter);
7435 + rtw_disassoc_cmd(padapter, 0, _TRUE);
7436
7437 if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)
7438 rtw_indicate_disconnect(padapter);
7439 @@ -489,7 +487,7 @@ _func_enter_;
7440 RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("set_ssid=[%s] len=0x%x\n", ssid->Ssid, (unsigned int)ssid->SsidLength));
7441 RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("assoc_ssid=[%s] len=0x%x\n", pmlmepriv->assoc_ssid.Ssid, (unsigned int)pmlmepriv->assoc_ssid.SsidLength));
7442
7443 - rtw_disassoc_cmd(padapter);
7444 + rtw_disassoc_cmd(padapter, 0, _TRUE);
7445
7446 if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)
7447 rtw_indicate_disconnect(padapter);
7448 @@ -504,56 +502,15 @@ _func_enter_;
7449 }
7450
7451 handle_tkip_countermeasure:
7452 -#ifdef PLATFORM_WINDOWS
7453 - if (padapter->securitypriv.btkip_countermeasure==_TRUE)
7454 - {
7455 - LARGE_INTEGER sys_time;
7456 - u32 diff_time,cur_time ;
7457 - RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("rtw_set_802_11_ssid:padapter->securitypriv.btkip_countermeasure==_TRUE\n"));
7458 - NdisGetCurrentSystemTime(&sys_time);
7459 - cur_time=(u32)(sys_time.QuadPart/10); // In micro-second.
7460 - RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("rtw_set_802_11_ssid:cur_time=0x%x\n",cur_time));
7461 - RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("rtw_set_802_11_ssid:psecuritypriv->last_mic_err_time=0x%x\n",padapter->securitypriv.btkip_countermeasure_time));
7462 - diff_time = cur_time -padapter->securitypriv.btkip_countermeasure_time; // In micro-second.
7463 - RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("rtw_set_802_11_ssid:diff_time=0x%x\n",diff_time));
7464 -
7465 - if (diff_time > 60000000) {
7466 - RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("rtw_set_802_11_ssid(): countermeasure time >60s.\n"));
7467 - padapter->securitypriv.btkip_countermeasure=_FALSE;
7468 - // Update MIC error time.
7469 - padapter->securitypriv.btkip_countermeasure_time=0;
7470 - } else {
7471 - // can't join in 60 seconds.
7472 - status = _FAIL;
7473 - RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("rtw_set_802_11_ssid(): countermeasure time <60s.\n"));
7474 - goto release_mlme_lock;
7475 - }
7476 - }
7477 -#endif
7478 -
7479 -#ifdef PLATFORM_LINUX
7480 - if (padapter->securitypriv.btkip_countermeasure == _TRUE) {
7481 - cur_time = rtw_get_current_time();
7482 -
7483 - if( (cur_time - padapter->securitypriv.btkip_countermeasure_time) > 60 * HZ )
7484 - {
7485 - padapter->securitypriv.btkip_countermeasure = _FALSE;
7486 - padapter->securitypriv.btkip_countermeasure_time = 0;
7487 - }
7488 - else
7489 - {
7490 - status = _FAIL;
7491 - goto release_mlme_lock;
7492 - }
7493 + if (rtw_handle_tkip_countermeasure(padapter, __func__) == _FAIL) {
7494 + status = _FAIL;
7495 + goto release_mlme_lock;
7496 }
7497 -#endif
7498
7499 - #ifdef CONFIG_VALIDATE_SSID
7500 if (rtw_validate_ssid(ssid) == _FALSE) {
7501 status = _FAIL;
7502 goto release_mlme_lock;
7503 }
7504 - #endif
7505
7506 _rtw_memcpy(&pmlmepriv->assoc_ssid, ssid, sizeof(NDIS_802_11_SSID));
7507 pmlmepriv->assoc_by_bssid=_FALSE;
7508 @@ -578,6 +535,84 @@ _func_exit_;
7509
7510 }
7511
7512 +u8 rtw_set_802_11_connect(_adapter* padapter, u8 *bssid, NDIS_802_11_SSID *ssid)
7513 +{
7514 + _irqL irqL;
7515 + u8 status = _SUCCESS;
7516 + u32 cur_time = 0;
7517 + bool bssid_valid = _TRUE;
7518 + bool ssid_valid = _TRUE;
7519 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
7520 +
7521 +_func_enter_;
7522 +
7523 + if (!ssid || rtw_validate_ssid(ssid) == _FALSE)
7524 + ssid_valid = _FALSE;
7525 +
7526 + if (!bssid || rtw_validate_bssid(bssid) == _FALSE)
7527 + bssid_valid = _FALSE;
7528 +
7529 + if (ssid_valid == _FALSE && bssid_valid == _FALSE) {
7530 + DBG_871X(FUNC_ADPT_FMT" ssid:%p, ssid_valid:%d, bssid:%p, bssid_valid:%d\n",
7531 + FUNC_ADPT_ARG(padapter), ssid, ssid_valid, bssid, bssid_valid);
7532 + status = _FAIL;
7533 + goto exit;
7534 + }
7535 +
7536 + if(padapter->hw_init_completed==_FALSE){
7537 + RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_,
7538 + ("set_ssid: hw_init_completed==_FALSE=>exit!!!\n"));
7539 + status = _FAIL;
7540 + goto exit;
7541 + }
7542 +
7543 + _enter_critical_bh(&pmlmepriv->lock, &irqL);
7544 +
7545 + LOG_LEVEL(_drv_info_, FUNC_ADPT_FMT" fw_state=0x%08x\n",
7546 + FUNC_ADPT_ARG(padapter), get_fwstate(pmlmepriv));
7547 +
7548 + if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY) == _TRUE) {
7549 + goto handle_tkip_countermeasure;
7550 + } else if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING) == _TRUE) {
7551 + goto release_mlme_lock;
7552 + }
7553 +
7554 +handle_tkip_countermeasure:
7555 + if (rtw_handle_tkip_countermeasure(padapter, __func__) == _FAIL) {
7556 + status = _FAIL;
7557 + goto release_mlme_lock;
7558 + }
7559 +
7560 + if (ssid && ssid_valid)
7561 + _rtw_memcpy(&pmlmepriv->assoc_ssid, ssid, sizeof(NDIS_802_11_SSID));
7562 +
7563 + if (bssid && bssid_valid) {
7564 + _rtw_memcpy(&pmlmepriv->assoc_bssid, bssid, ETH_ALEN);
7565 + pmlmepriv->assoc_by_bssid = _TRUE;
7566 + }
7567 +
7568 + if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY) == _TRUE) {
7569 + pmlmepriv->to_join = _TRUE;
7570 + }
7571 + else {
7572 + status = rtw_do_join(padapter);
7573 + }
7574 +
7575 +release_mlme_lock:
7576 + _exit_critical_bh(&pmlmepriv->lock, &irqL);
7577 +
7578 +exit:
7579 +
7580 +_func_exit_;
7581 +
7582 + return status;
7583 +}
7584 +
7585 +/*
7586 +rtw_set_802_11_infrastructure_mode(~)
7587 + ### NOTE:#### (!!!!)
7588 + MUST TAKE CARE THAT BEFORE CALLING THIS FUNC, YOU SHOULD HAVE LOCKED pmlmepriv->lock and scanned_queue->lock in sequence
7589 +*/
7590 u8 rtw_set_802_11_infrastructure_mode(_adapter* padapter,
7591 NDIS_802_11_NETWORK_INFRASTRUCTURE networktype)
7592 {
7593 @@ -594,24 +629,10 @@ _func_enter_;
7594
7595 if(*pold_state != networktype)
7596 {
7597 - _enter_critical_bh(&pmlmepriv->lock, &irqL);
7598
7599 RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,(" change mode!"));
7600 //DBG_871X("change mode, old_mode=%d, new_mode=%d, fw_state=0x%x\n", *pold_state, networktype, get_fwstate(pmlmepriv));
7601
7602 - if((check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE) ||(*pold_state==Ndis802_11IBSS))
7603 - rtw_disassoc_cmd(padapter);
7604 -
7605 - if((check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE) ||
7606 - (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)== _TRUE) )
7607 - rtw_free_assoc_resources(padapter, 1);
7608 -
7609 -
7610 - if((check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE) || (*pold_state==Ndis802_11Infrastructure) ||(*pold_state==Ndis802_11IBSS))
7611 - {
7612 - rtw_indicate_disconnect(padapter); //will clr Linked_state; before this function, we must have chked whether issue dis-assoc_cmd or not
7613 - }
7614 -
7615 if(*pold_state==Ndis802_11APMode)
7616 {
7617 //change to other mode from Ndis802_11APMode
7618 @@ -621,12 +642,25 @@ _func_enter_;
7619 stop_ap_mode(padapter);
7620 #endif
7621 }
7622 -
7623 +
7624 + if((check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE) ||(*pold_state==Ndis802_11IBSS))
7625 + rtw_disassoc_cmd(padapter, 0, _TRUE);
7626 +
7627 + if((check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE) ||
7628 + (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)== _TRUE) )
7629 + rtw_free_assoc_resources(padapter, 0);
7630 +
7631 + if((*pold_state == Ndis802_11Infrastructure) ||(*pold_state == Ndis802_11IBSS))
7632 + {
7633 + if(check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)
7634 + {
7635 + rtw_indicate_disconnect(padapter); //will clr Linked_state; before this function, we must have chked whether issue dis-assoc_cmd or not
7636 + }
7637 + }
7638 +
7639 *pold_state = networktype;
7640
7641 - // clear WIFI_STATION_STATE; WIFI_AP_STATE; WIFI_ADHOC_STATE; WIFI_ADHOC_MASTER_STATE
7642 - //pmlmepriv->fw_state &= 0xffffff87;
7643 - _clr_fwstate_(pmlmepriv, WIFI_STATION_STATE|WIFI_AP_STATE|WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE);
7644 + _clr_fwstate_(pmlmepriv, ~WIFI_NULL_STATE);
7645
7646 switch(networktype)
7647 {
7648 @@ -657,7 +691,6 @@ _func_enter_;
7649 //RT_TRACE(COMP_OID_SET, DBG_LOUD, ("set_infrastructure: fw_state:%x after changing mode\n",
7650 // get_fwstate(pmlmepriv) ));
7651
7652 - _exit_critical_bh(&pmlmepriv->lock, &irqL);
7653 }
7654
7655 _func_exit_;
7656 @@ -679,9 +712,10 @@ _func_enter_;
7657 {
7658 RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("MgntActrtw_set_802_11_disassociate: rtw_indicate_disconnect\n"));
7659
7660 - rtw_disassoc_cmd(padapter);
7661 + rtw_disassoc_cmd(padapter, 0, _TRUE);
7662 rtw_indicate_disconnect(padapter);
7663 - rtw_free_assoc_resources(padapter, 1);
7664 + //modify for CONFIG_IEEE80211W, none 11w can use it
7665 + rtw_free_assoc_resources_cmd(padapter);
7666 }
7667
7668 _exit_critical_bh(&pmlmepriv->lock, &irqL);
7669 @@ -691,7 +725,7 @@ _func_exit_;
7670 return _TRUE;
7671 }
7672
7673 -u8 rtw_set_802_11_bssid_list_scan(_adapter* padapter)
7674 +u8 rtw_set_802_11_bssid_list_scan(_adapter* padapter, NDIS_802_11_SSID *pssid, int ssid_max_num)
7675 {
7676 _irqL irqL;
7677 struct mlme_priv *pmlmepriv= &padapter->mlmepriv;
7678 @@ -724,17 +758,15 @@ _func_enter_;
7679 RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_err_,("\n###pmlmepriv->sitesurveyctrl.traffic_busy==_TRUE\n\n"));
7680 }
7681 } else {
7682 - #ifdef CONFIG_SET_SCAN_DENY_TIMER
7683 - if(ATOMIC_READ(&pmlmepriv->set_scan_deny)==1){
7684 - DBG_871X("%s:%d CONFIG_SET_SCAN_DENY_TIMER deny scan\n", __FUNCTION__, __LINE__);
7685 + if (rtw_is_scan_deny(padapter)) {
7686 + DBG_871X(FUNC_ADPT_FMT": scan deny\n", FUNC_ADPT_ARG(padapter));
7687 indicate_wx_scan_complete_event(padapter);
7688 return _SUCCESS;
7689 }
7690 - #endif
7691
7692 _enter_critical_bh(&pmlmepriv->lock, &irqL);
7693
7694 - res = rtw_sitesurvey_cmd(padapter, NULL, 0);
7695 + res = rtw_sitesurvey_cmd(padapter, pssid, ssid_max_num, NULL, 0);
7696
7697 _exit_critical_bh(&pmlmepriv->lock, &irqL);
7698 }
7699 @@ -1300,67 +1332,80 @@ _func_exit_;
7700 }
7701
7702 /*
7703 -* rtw_get_network_max_rate -
7704 +* rtw_get_cur_max_rate -
7705 * @adapter: pointer to _adapter structure
7706 -* @bss:
7707 *
7708 -* Return 0 or Mbps
7709 +* Return 0 or 100Kbps
7710 */
7711 -u16 rtw_get_network_max_rate(_adapter *adapter, WLAN_BSSID_EX *bss)
7712 +u16 rtw_get_cur_max_rate(_adapter *adapter)
7713 {
7714 - int i =0;
7715 - u8 *p;
7716 - u16 rate = 0, max_rate = 0, ht_cap=_FALSE;
7717 - u32 ht_ielen = 0;
7718 + int i = 0;
7719 + u8 *p;
7720 + u16 rate = 0, max_rate = 0;
7721 + struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
7722 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
7723 + struct registry_priv *pregistrypriv = &adapter->registrypriv;
7724 struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
7725 + WLAN_BSSID_EX *pcur_bss = &pmlmepriv->cur_network.network;
7726 +#ifdef CONFIG_80211N_HT
7727 struct rtw_ieee80211_ht_cap *pht_capie;
7728 - u8 bw_40MHz=0, short_GI=0;
7729 - u16 mcs_rate=0;
7730 u8 rf_type = 0;
7731 - struct registry_priv *pregpriv = &adapter->registrypriv;
7732 + u8 bw_40MHz=0, short_GI_20=0, short_GI_40=0;
7733 + u16 mcs_rate=0;
7734 + u32 ht_ielen = 0;
7735 +#endif
7736
7737 #ifdef CONFIG_MP_INCLUDED
7738 - if (check_fwstate(pmlmepriv, WIFI_MP_STATE) == _TRUE)
7739 - return 0;
7740 + if (adapter->registrypriv.mp_mode == 1)
7741 + {
7742 + if (check_fwstate(pmlmepriv, WIFI_MP_STATE) == _TRUE)
7743 + return 0;
7744 + }
7745 #endif
7746
7747 if((check_fwstate(pmlmepriv, _FW_LINKED) != _TRUE)
7748 && (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) != _TRUE))
7749 return 0;
7750 -
7751
7752 - p = rtw_get_ie(&bss->IEs[12], _HT_CAPABILITY_IE_, &ht_ielen, bss->IELength-12);
7753 - if(p && ht_ielen>0)
7754 - {
7755 - ht_cap = _TRUE;
7756 - pht_capie = (struct rtw_ieee80211_ht_cap *)(p+2);
7757 -
7758 - _rtw_memcpy(&mcs_rate , pht_capie->supp_mcs_set, 2);
7759 -
7760 - bw_40MHz = (pht_capie->cap_info&IEEE80211_HT_CAP_SUP_WIDTH) ? 1:0;
7761 - short_GI = (pht_capie->cap_info&(IEEE80211_HT_CAP_SGI_20|IEEE80211_HT_CAP_SGI_40)) ? 1:0;
7762 - }
7763 -
7764 - while( (bss->SupportedRates[i]!=0) && (bss->SupportedRates[i]!=0xFF))
7765 - {
7766 - rate = bss->SupportedRates[i]&0x7F;
7767 - if(rate>max_rate)
7768 - max_rate = rate;
7769 - i++;
7770 - }
7771 +#ifdef CONFIG_80211N_HT
7772 + if (pmlmeext->cur_wireless_mode & (WIRELESS_11_24N|WIRELESS_11_5N)) {
7773 + p = rtw_get_ie(&pcur_bss->IEs[12], _HT_CAPABILITY_IE_, &ht_ielen, pcur_bss->IELength-12);
7774 + if(p && ht_ielen>0)
7775 + {
7776 + pht_capie = (struct rtw_ieee80211_ht_cap *)(p+2);
7777 +
7778 + _rtw_memcpy(&mcs_rate , pht_capie->supp_mcs_set, 2);
7779
7780 - //TODO: should consider case of WEP and TKIP
7781 - if(ht_cap == _TRUE)
7782 - {
7783 - adapter->HalFunc.GetHwRegHandler(adapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
7784 - if(rf_type == RF_1T1R)
7785 - max_rate = (bw_40MHz) ? ((short_GI)?150:135):((short_GI)?72:65);
7786 - else
7787 - max_rate = (bw_40MHz) ? ((short_GI)?300:270):((short_GI)?144:130);
7788 - }
7789 + //bw_40MHz = (pht_capie->cap_info&IEEE80211_HT_CAP_SUP_WIDTH) ? 1:0;
7790 + //cur_bwmod is updated by beacon, pmlmeinfo is updated by association response
7791 + bw_40MHz = (pmlmeext->cur_bwmode && (HT_INFO_HT_PARAM_REC_TRANS_CHNL_WIDTH & pmlmeinfo->HT_info.infos[0])) ? 1:0;
7792 +
7793 + //short_GI = (pht_capie->cap_info&(IEEE80211_HT_CAP_SGI_20|IEEE80211_HT_CAP_SGI_40)) ? 1:0;
7794 + short_GI_20 = (pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info&IEEE80211_HT_CAP_SGI_20) ? 1:0;
7795 + short_GI_40 = (pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info&IEEE80211_HT_CAP_SGI_40) ? 1:0;
7796 +
7797 + rtw_hal_get_hwreg(adapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
7798 + max_rate = rtw_mcs_rate(
7799 + rf_type,
7800 + bw_40MHz & (pregistrypriv->cbw40_enable),
7801 + short_GI_20,
7802 + short_GI_40,
7803 + pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate
7804 + );
7805 + }
7806 + }
7807 else
7808 +#endif //CONFIG_80211N_HT
7809 {
7810 - max_rate/=2;
7811 + while( (pcur_bss->SupportedRates[i]!=0) && (pcur_bss->SupportedRates[i]!=0xFF))
7812 + {
7813 + rate = pcur_bss->SupportedRates[i]&0x7F;
7814 + if(rate>max_rate)
7815 + max_rate = rate;
7816 + i++;
7817 + }
7818 +
7819 + max_rate = max_rate*10/2;
7820 }
7821
7822 return max_rate;
7823 @@ -1408,19 +1453,42 @@ int rtw_set_channel_plan(_adapter *adapt
7824 */
7825 int rtw_set_country(_adapter *adapter, const char *country_code)
7826 {
7827 - int channel_plan = RT_CHANNEL_DOMAIN_FCC;
7828 + int channel_plan = RT_CHANNEL_DOMAIN_WORLD_WIDE_5G;
7829 +
7830 + DBG_871X("%s country_code:%s\n", __func__, country_code);
7831
7832 //TODO: should have a table to match country code and RT_CHANNEL_DOMAIN
7833 - //TODO: should consider 2-character and 3-character counter code
7834 + //TODO: should consider 2-character and 3-character country code
7835 if(0 == strcmp(country_code, "US"))
7836 channel_plan = RT_CHANNEL_DOMAIN_FCC;
7837 else if(0 == strcmp(country_code, "EU"))
7838 channel_plan = RT_CHANNEL_DOMAIN_ETSI;
7839 else if(0 == strcmp(country_code, "JP"))
7840 channel_plan = RT_CHANNEL_DOMAIN_MKK;
7841 + else if(0 == strcmp(country_code, "CN"))
7842 + channel_plan = RT_CHANNEL_DOMAIN_CHINA;
7843 else
7844 DBG_871X("%s unknown country_code:%s\n", __FUNCTION__, country_code);
7845
7846 return rtw_set_channel_plan(adapter, channel_plan);
7847 }
7848
7849 +/*
7850 +* rtw_set_band -
7851 +* @adapter: pointer to _adapter structure
7852 +* @band: band to set
7853 +*
7854 +* Return _SUCCESS or _FAIL
7855 +*/
7856 +int rtw_set_band(_adapter *adapter, enum _BAND band)
7857 +{
7858 + if (rtw_band_valid(band)) {
7859 + DBG_871X(FUNC_ADPT_FMT" band:%d\n", FUNC_ADPT_ARG(adapter), band);
7860 + adapter->setband = band;
7861 + return _SUCCESS;
7862 + }
7863 +
7864 + DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" band:%d fail\n", FUNC_ADPT_ARG(adapter), band);
7865 + return _FAIL;
7866 +}
7867 +
7868 --- a/drivers/net/wireless/rtl8192cu/core/rtw_iol.c
7869 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_iol.c
7870 @@ -38,7 +38,7 @@ struct xmit_frame *rtw_IOL_accquire_xmit
7871 if ((xmitbuf = rtw_alloc_xmitbuf(pxmitpriv)) == NULL)
7872 {
7873 DBG_871X("%s rtw_alloc_xmitbuf return null\n", __FUNCTION__);
7874 - rtw_free_xmitframe_ex(pxmitpriv, xmit_frame);
7875 + rtw_free_xmitframe(pxmitpriv, xmit_frame);
7876 xmit_frame=NULL;
7877 goto exit;
7878 }
7879 @@ -145,7 +145,7 @@ int _rtw_IOL_append_WD_cmd(struct xmit_f
7880 #ifdef DBG_IO
7881 int dbg_rtw_IOL_append_WB_cmd(struct xmit_frame *xmit_frame, u16 addr, u8 value, const char *caller, const int line)
7882 {
7883 - if(addr + 1 > DBG_IO_WRITE_SNIFF_ADDR_START && addr <= DBG_IO_WRITE_SNIFF_ADDR_END)
7884 + if (match_write_sniff_ranges(addr, 1))
7885 DBG_871X("DBG_IO %s:%d IOL_WB(0x%04x, 0x%02x)\n", caller, line, addr, value);
7886
7887 return _rtw_IOL_append_WB_cmd(xmit_frame, addr, value);
7888 @@ -153,7 +153,7 @@ int dbg_rtw_IOL_append_WB_cmd(struct xmi
7889
7890 int dbg_rtw_IOL_append_WW_cmd(struct xmit_frame *xmit_frame, u16 addr, u16 value, const char *caller, const int line)
7891 {
7892 - if(addr + 2 > DBG_IO_WRITE_SNIFF_ADDR_START && addr <= DBG_IO_WRITE_SNIFF_ADDR_END)
7893 + if (match_write_sniff_ranges(addr, 2))
7894 DBG_871X("DBG_IO %s:%d IOL_WW(0x%04x, 0x%04x)\n", caller, line, addr, value);
7895
7896 return _rtw_IOL_append_WW_cmd(xmit_frame, addr, value);
7897 @@ -161,7 +161,7 @@ int dbg_rtw_IOL_append_WW_cmd(struct xmi
7898
7899 int dbg_rtw_IOL_append_WD_cmd(struct xmit_frame *xmit_frame, u16 addr, u32 value, const char *caller, const int line)
7900 {
7901 - if(addr + 4 > DBG_IO_WRITE_SNIFF_ADDR_START && addr <= DBG_IO_WRITE_SNIFF_ADDR_END)
7902 + if (match_write_sniff_ranges(addr, 4))
7903 DBG_871X("DBG_IO %s:%d IOL_WD(0x%04x, 0x%08x)\n", caller, line, addr, value);
7904
7905 return _rtw_IOL_append_WD_cmd(xmit_frame, addr, value);
7906 @@ -224,10 +224,7 @@ int rtw_IOL_append_END_cmd(struct xmit_f
7907
7908 int rtw_IOL_exec_cmds_sync(ADAPTER *adapter, struct xmit_frame *xmit_frame, u32 max_wating_ms)
7909 {
7910 - if(adapter->HalFunc.IOL_exec_cmds_sync)
7911 - return adapter->HalFunc.IOL_exec_cmds_sync(adapter, xmit_frame, max_wating_ms);
7912 -
7913 - return _FAIL;
7914 + return rtw_hal_iol_cmd(adapter, xmit_frame, max_wating_ms);
7915 }
7916
7917 int rtw_IOL_exec_cmd_array_sync(PADAPTER adapter, u8 *IOL_cmds, u32 cmd_num, u32 max_wating_ms)
7918 @@ -255,7 +252,7 @@ bool rtw_IOL_applied(ADAPTER *adapter)
7919 return _TRUE;
7920
7921 #ifdef CONFIG_USB_HCI
7922 - if(!adapter->dvobjpriv.ishighspeed)
7923 + if(!adapter_to_dvobj(adapter)->ishighspeed)
7924 return _TRUE;
7925 #endif
7926
7927 --- a/drivers/net/wireless/rtl8192cu/core/rtw_mlme.c
7928 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_mlme.c
7929 @@ -16,7 +16,7 @@
7930 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
7931 *
7932 *
7933 -******************************************************************************/
7934 + ******************************************************************************/
7935 #define _RTW_MLME_C_
7936
7937
7938 @@ -25,7 +25,7 @@
7939 #include <drv_types.h>
7940 #include <recv_osdep.h>
7941 #include <xmit_osdep.h>
7942 -#include <hal_init.h>
7943 +#include <hal_intf.h>
7944 #include <mlme_osdep.h>
7945 #include <sta_info.h>
7946 #include <wifi.h>
7947 @@ -35,6 +35,14 @@
7948 extern void indicate_wx_scan_complete_event(_adapter *padapter);
7949 extern u8 rtw_do_join(_adapter * padapter);
7950
7951 +#ifdef CONFIG_DISABLE_MCS13TO15
7952 +extern unsigned char MCS_rate_2R_MCS13TO15_OFF[16];
7953 +extern unsigned char MCS_rate_2R[16];
7954 +#else //CONFIG_DISABLE_MCS13TO15
7955 +extern unsigned char MCS_rate_2R[16];
7956 +#endif //CONFIG_DISABLE_MCS13TO15
7957 +extern unsigned char MCS_rate_1R[16];
7958 +
7959 sint _rtw_init_mlme_priv (_adapter* padapter)
7960 {
7961 sint i;
7962 @@ -55,7 +63,7 @@ _func_enter_;
7963 pmlmepriv->cur_network.network.InfrastructureMode = Ndis802_11AutoUnknown;
7964 pmlmepriv->scan_mode=SCAN_ACTIVE;// 1: active, 0: pasive. Maybe someday we should rename this varable to "active_mode" (Jeff)
7965
7966 - _rtw_spinlock_init(&(pmlmepriv->lock));
7967 + _rtw_spinlock_init(&(pmlmepriv->lock));
7968 _rtw_init_queue(&(pmlmepriv->free_bss_pool));
7969 _rtw_init_queue(&(pmlmepriv->scanned_queue));
7970
7971 @@ -84,9 +92,7 @@ _func_enter_;
7972
7973 //allocate DMA-able/Non-Page memory for cmd_buf and rsp_buf
7974
7975 - #ifdef CONFIG_SET_SCAN_DENY_TIMER
7976 - ATOMIC_SET(&pmlmepriv->set_scan_deny, 0);
7977 - #endif
7978 + rtw_clear_scan_deny(padapter);
7979
7980 rtw_init_mlme_timer(padapter);
7981
7982 @@ -97,6 +103,7 @@ _func_exit_;
7983 return res;
7984 }
7985
7986 +void rtw_mfree_mlme_priv_lock (struct mlme_priv *pmlmepriv);
7987 void rtw_mfree_mlme_priv_lock (struct mlme_priv *pmlmepriv)
7988 {
7989 _rtw_spinlock_free(&pmlmepriv->lock);
7990 @@ -108,7 +115,7 @@ static void rtw_free_mlme_ie_data(u8 **p
7991 {
7992 if(*ppie)
7993 {
7994 - _rtw_mfree(*ppie, *plen);
7995 + rtw_mfree(*ppie, *plen);
7996 *plen = 0;
7997 *ppie=NULL;
7998 }
7999 @@ -117,6 +124,8 @@ static void rtw_free_mlme_ie_data(u8 **p
8000 void rtw_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv)
8001 {
8002 #if defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME)
8003 + rtw_buf_free(&pmlmepriv->assoc_req, &pmlmepriv->assoc_req_len);
8004 + rtw_buf_free(&pmlmepriv->assoc_rsp, &pmlmepriv->assoc_rsp_len);
8005 rtw_free_mlme_ie_data(&pmlmepriv->wps_beacon_ie, &pmlmepriv->wps_beacon_ie_len);
8006 rtw_free_mlme_ie_data(&pmlmepriv->wps_probe_req_ie, &pmlmepriv->wps_probe_req_ie_len);
8007 rtw_free_mlme_ie_data(&pmlmepriv->wps_probe_resp_ie, &pmlmepriv->wps_probe_resp_ie_len);
8008 @@ -128,6 +137,15 @@ void rtw_free_mlme_priv_ie_data(struct m
8009 rtw_free_mlme_ie_data(&pmlmepriv->p2p_go_probe_resp_ie, &pmlmepriv->p2p_go_probe_resp_ie_len);
8010 rtw_free_mlme_ie_data(&pmlmepriv->p2p_assoc_req_ie, &pmlmepriv->p2p_assoc_req_ie_len);
8011 #endif
8012 +
8013 +#if defined(CONFIG_WFD) && defined(CONFIG_IOCTL_CFG80211)
8014 + rtw_free_mlme_ie_data(&pmlmepriv->wfd_beacon_ie, &pmlmepriv->wfd_beacon_ie_len);
8015 + rtw_free_mlme_ie_data(&pmlmepriv->wfd_probe_req_ie, &pmlmepriv->wfd_probe_req_ie_len);
8016 + rtw_free_mlme_ie_data(&pmlmepriv->wfd_probe_resp_ie, &pmlmepriv->wfd_probe_resp_ie_len);
8017 + rtw_free_mlme_ie_data(&pmlmepriv->wfd_go_probe_resp_ie, &pmlmepriv->wfd_go_probe_resp_ie_len);
8018 + rtw_free_mlme_ie_data(&pmlmepriv->wfd_assoc_req_ie, &pmlmepriv->wfd_assoc_req_ie_len);
8019 +#endif
8020 +
8021 }
8022
8023 void _rtw_free_mlme_priv (struct mlme_priv *pmlmepriv)
8024 @@ -278,6 +296,17 @@ _func_enter_;
8025 }
8026
8027 #endif
8028 +
8029 +#ifdef PLATFORM_FREEBSD
8030 + //i think needs to check again
8031 + delta_time = (curr_time -pnetwork->last_scanned)/hz;
8032 +
8033 + if(delta_time < lifetime)// unit:sec
8034 + {
8035 + goto exit;
8036 + }
8037 +
8038 +#endif
8039 }
8040
8041 _enter_critical_bh(&free_queue->lock, &irqL);
8042 @@ -385,8 +414,6 @@ void _rtw_free_network_queue(_adapter *p
8043 struct wlan_network *pnetwork;
8044 struct mlme_priv* pmlmepriv = &padapter->mlmepriv;
8045 _queue *scanned_queue = &pmlmepriv->scanned_queue;
8046 - _queue *free_queue = &pmlmepriv->free_bss_pool;
8047 - u8 *mybssid = get_bssid(pmlmepriv);
8048
8049 _func_enter_;
8050
8051 @@ -494,6 +521,7 @@ _func_enter_;
8052 _func_exit_;
8053 }
8054
8055 +int rtw_enqueue_network(_queue *queue, struct wlan_network *pnetwork);
8056 int rtw_enqueue_network(_queue *queue, struct wlan_network *pnetwork)
8057 {
8058 int res;
8059 @@ -504,7 +532,7 @@ _func_exit_;
8060 }
8061
8062
8063 -
8064 +#ifndef PLATFORM_FREEBSD //Baron
8065 static struct wlan_network *rtw_dequeue_network(_queue *queue)
8066 {
8067 struct wlan_network *pnetwork;
8068 @@ -513,8 +541,9 @@ _func_enter_;
8069 _func_exit_;
8070 return pnetwork;
8071 }
8072 +#endif //PLATFORM_FREEBSD
8073
8074 -
8075 +struct wlan_network *rtw_alloc_network(struct mlme_priv *pmlmepriv );
8076 struct wlan_network *rtw_alloc_network(struct mlme_priv *pmlmepriv )//(_queue *free_queue)
8077 {
8078 struct wlan_network *pnetwork;
8079 @@ -524,6 +553,7 @@ _func_exit_;
8080 return pnetwork;
8081 }
8082
8083 +void rtw_free_network(struct mlme_priv *pmlmepriv, struct wlan_network *pnetwork, u8 is_freeall);
8084 void rtw_free_network(struct mlme_priv *pmlmepriv, struct wlan_network *pnetwork, u8 is_freeall)//(struct wlan_network *pnetwork, _queue *free_queue)
8085 {
8086 _func_enter_;
8087 @@ -532,7 +562,7 @@ _func_enter_;
8088 _func_exit_;
8089 }
8090
8091 -
8092 +void rtw_free_network_nolock(struct mlme_priv *pmlmepriv, struct wlan_network *pnetwork );
8093 void rtw_free_network_nolock(struct mlme_priv *pmlmepriv, struct wlan_network *pnetwork )
8094 {
8095 _func_enter_;
8096 @@ -585,6 +615,7 @@ int rtw_is_same_ibss(_adapter *adapter,
8097
8098 }
8099
8100 +inline int is_same_ess(WLAN_BSSID_EX *a, WLAN_BSSID_EX *b);
8101 inline int is_same_ess(WLAN_BSSID_EX *a, WLAN_BSSID_EX *b)
8102 {
8103 //RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("(%s,%d)(%s,%d)\n",
8104 @@ -593,7 +624,7 @@ inline int is_same_ess(WLAN_BSSID_EX *a,
8105 && _rtw_memcmp(a->Ssid.Ssid, b->Ssid.Ssid, a->Ssid.SsidLength)==_TRUE;
8106 }
8107
8108 -static int is_same_network(WLAN_BSSID_EX *src, WLAN_BSSID_EX *dst)
8109 +int is_same_network(WLAN_BSSID_EX *src, WLAN_BSSID_EX *dst)
8110 {
8111 u16 s_cap, d_cap;
8112
8113 @@ -667,9 +698,9 @@ _func_exit_;
8114
8115 }
8116
8117 -static void update_network(WLAN_BSSID_EX *dst, WLAN_BSSID_EX *src,_adapter * padapter)
8118 +static void update_network(WLAN_BSSID_EX *dst, WLAN_BSSID_EX *src,
8119 + _adapter * padapter, bool update_ie)
8120 {
8121 - u32 last_evm = 0, tmpVal;
8122 u8 ss_ori = dst->PhyInfo.SignalStrength;
8123 u8 sq_ori = dst->PhyInfo.SignalQuality;
8124 long rssi_ori = dst->Rssi;
8125 @@ -678,16 +709,20 @@ static void update_network(WLAN_BSSID_EX
8126 u8 sq_smp = src->PhyInfo.SignalQuality;
8127 long rssi_smp = src->Rssi;
8128
8129 + u8 ss_final;
8130 + u8 sq_final;
8131 + long rssi_final;
8132 +
8133 _func_enter_;
8134
8135 #ifdef CONFIG_ANTENNA_DIVERSITY
8136 - padapter->HalFunc.SwAntDivCompareHandler(padapter, dst, src);
8137 + rtw_hal_antdiv_rssi_compared(padapter, dst, src); //this will update src.Rssi, need consider again
8138 #endif
8139
8140 - #if defined(DBG_RX_SIGNAL_DISPLAY_PROCESSING) && 1
8141 + #if defined(DBG_RX_SIGNAL_DISPLAY_SSID_MONITORED) && 1
8142 if(strcmp(dst->Ssid.Ssid, DBG_RX_SIGNAL_DISPLAY_SSID_MONITORED) == 0) {
8143 - DBG_871X("%s %s("MAC_FMT", ch%u) ss_ori:%3u, sq_ori:%3u, rssi_ori:%3ld, ss_smp:%3u, sq_smp:%3u, rssi_smp:%3ld\n"
8144 - , __FUNCTION__
8145 + DBG_871X(FUNC_ADPT_FMT" %s("MAC_FMT", ch%u) ss_ori:%3u, sq_ori:%3u, rssi_ori:%3ld, ss_smp:%3u, sq_smp:%3u, rssi_smp:%3ld\n"
8146 + , FUNC_ADPT_ARG(padapter)
8147 , src->Ssid.Ssid, MAC_ARG(src->MacAddress), src->Configuration.DSConfig
8148 ,ss_ori, sq_ori, rssi_ori
8149 ,ss_smp, sq_smp, rssi_smp
8150 @@ -695,56 +730,52 @@ _func_enter_;
8151 }
8152 #endif
8153
8154 -
8155 - //Update signal strength first. Alwlays using the newest value will cause large vibration of scan result's signal strength
8156 - //The rule below is 1/5 for sample value, 4/5 for history value
8157 + /* The rule below is 1/5 for sample value, 4/5 for history value */
8158 if (check_fwstate(&padapter->mlmepriv, _FW_LINKED) && is_same_network(&(padapter->mlmepriv.cur_network.network), src)) {
8159 - //Because we've process the rx phy info in rtl8192c_process_phy_info/rtl8192d_process_phy_info,
8160 - //we can just take the recvpriv's value
8161 - src->PhyInfo.SignalStrength = padapter->recvpriv.signal_strength;
8162 - src->PhyInfo.SignalQuality = padapter->recvpriv.signal_qual;
8163 - // the rssi value here is undecorated, and will be used for antenna diversity
8164 - if(src->PhyInfo.SignalQuality != 101)
8165 - src->Rssi = (src->Rssi+dst->Rssi*4)/5;
8166 + /* Take the recvpriv's value for the connected AP*/
8167 + ss_final = padapter->recvpriv.signal_strength;
8168 + sq_final = padapter->recvpriv.signal_qual;
8169 + /* the rssi value here is undecorated, and will be used for antenna diversity */
8170 + if(sq_smp != 101) /* from the right channel */
8171 + rssi_final = (src->Rssi+dst->Rssi*4)/5;
8172 else
8173 - src->Rssi = dst->Rssi;
8174 + rssi_final = rssi_ori;
8175 }
8176 else {
8177 - if(src->PhyInfo.SignalQuality != 101) {
8178 - // handle bss info receving from the right channel
8179 - src->PhyInfo.SignalStrength = ((u32)(src->PhyInfo.SignalStrength)+(u32)(dst->PhyInfo.SignalStrength)*4)/5;
8180 - src->PhyInfo.SignalQuality = ((u32)(src->PhyInfo.SignalQuality)+(u32)(dst->PhyInfo.SignalQuality)*4)/5;
8181 - src->Rssi = (src->Rssi+dst->Rssi*4)/5; // the rssi value here is undecorated, and will be used for antenna diversity
8182 + if(sq_smp != 101) { /* from the right channel */
8183 + ss_final = ((u32)(src->PhyInfo.SignalStrength)+(u32)(dst->PhyInfo.SignalStrength)*4)/5;
8184 + sq_final = ((u32)(src->PhyInfo.SignalQuality)+(u32)(dst->PhyInfo.SignalQuality)*4)/5;
8185 + rssi_final = (src->Rssi+dst->Rssi*4)/5;
8186 } else {
8187 - // bss info not receving from the right channel, use the original RX signal infos
8188 - src->PhyInfo.SignalStrength = dst->PhyInfo.SignalStrength;
8189 - src->PhyInfo.SignalQuality = dst->PhyInfo.SignalQuality;
8190 - src->Rssi = dst->Rssi;
8191 + /* bss info not receving from the right channel, use the original RX signal infos */
8192 + ss_final = dst->PhyInfo.SignalStrength;
8193 + sq_final = dst->PhyInfo.SignalQuality;
8194 + rssi_final = dst->Rssi;
8195 }
8196
8197 }
8198
8199 + if (update_ie)
8200 + _rtw_memcpy((u8 *)dst, (u8 *)src, get_WLAN_BSSID_EX_sz(src));
8201
8202 - _rtw_memcpy((u8 *)dst, (u8 *)src, get_WLAN_BSSID_EX_sz(src));
8203 -
8204 - src->PhyInfo.SignalStrength = ss_smp;
8205 - src->PhyInfo.SignalQuality = sq_smp;
8206 - src->Rssi = rssi_smp;
8207 + dst->PhyInfo.SignalStrength = ss_final;
8208 + dst->PhyInfo.SignalQuality = sq_final;
8209 + dst->Rssi = rssi_final;
8210
8211 - #if defined(DBG_RX_SIGNAL_DISPLAY_PROCESSING) && 1
8212 - if(strcmp(dst->Ssid.Ssid, DBG_RX_SIGNAL_DISPLAY_SSID_MONITORED) == 0) {
8213 - DBG_871X("%s %s("MAC_FMT"), SignalStrength:%u, SignalQuality:%u, RawRSSI:%ld\n"
8214 - , __FUNCTION__
8215 + #if defined(DBG_RX_SIGNAL_DISPLAY_SSID_MONITORED) && 1
8216 + if(strcmp(dst->Ssid.Ssid, DBG_RX_SIGNAL_DISPLAY_SSID_MONITORED) == 0) {
8217 + DBG_871X(FUNC_ADPT_FMT" %s("MAC_FMT"), SignalStrength:%u, SignalQuality:%u, RawRSSI:%ld\n"
8218 + , FUNC_ADPT_ARG(padapter)
8219 , dst->Ssid.Ssid, MAC_ARG(dst->MacAddress), dst->PhyInfo.SignalStrength, dst->PhyInfo.SignalQuality, dst->Rssi);
8220 - }
8221 - #endif
8222 + }
8223 + #endif
8224
8225 #if 0 // old codes, may be useful one day...
8226 -// DBG_8192C("update_network: rssi=0x%lx dst->Rssi=%d ,dst->Rssi=0x%lx , src->Rssi=0x%lx",(dst->Rssi+src->Rssi)/2,dst->Rssi,dst->Rssi,src->Rssi);
8227 +// DBG_871X("update_network: rssi=0x%lx dst->Rssi=%d ,dst->Rssi=0x%lx , src->Rssi=0x%lx",(dst->Rssi+src->Rssi)/2,dst->Rssi,dst->Rssi,src->Rssi);
8228 if (check_fwstate(&padapter->mlmepriv, _FW_LINKED) && is_same_network(&(padapter->mlmepriv.cur_network.network), src))
8229 {
8230
8231 - //DBG_8192C("b:ssid=%s update_network: src->rssi=0x%d padapter->recvpriv.ui_rssi=%d\n",src->Ssid.Ssid,src->Rssi,padapter->recvpriv.signal);
8232 + //DBG_871X("b:ssid=%s update_network: src->rssi=0x%d padapter->recvpriv.ui_rssi=%d\n",src->Ssid.Ssid,src->Rssi,padapter->recvpriv.signal);
8233 if(padapter->recvpriv.signal_qual_data.total_num++ >= PHY_LINKQUALITY_SLID_WIN_MAX)
8234 {
8235 padapter->recvpriv.signal_qual_data.total_num = PHY_LINKQUALITY_SLID_WIN_MAX;
8236 @@ -757,7 +788,7 @@ _func_enter_;
8237 if(padapter->recvpriv.signal_qual_data.index >= PHY_LINKQUALITY_SLID_WIN_MAX)
8238 padapter->recvpriv.signal_qual_data.index = 0;
8239
8240 - //DBG_8192C("Total SQ=%d pattrib->signal_qual= %d\n", padapter->recvpriv.signal_qual_data.total_val, src->Rssi);
8241 + //DBG_871X("Total SQ=%d pattrib->signal_qual= %d\n", padapter->recvpriv.signal_qual_data.total_val, src->Rssi);
8242
8243 // <1> Showed on UI for user,in percentage.
8244 tmpVal = padapter->recvpriv.signal_qual_data.total_val/padapter->recvpriv.signal_qual_data.total_num;
8245 @@ -766,11 +797,11 @@ _func_enter_;
8246 src->Rssi= translate_percentage_to_dbm(padapter->recvpriv.signal) ;
8247 }
8248 else{
8249 -// DBG_8192C("ELSE:ssid=%s update_network: src->rssi=0x%d dst->rssi=%d\n",src->Ssid.Ssid,src->Rssi,dst->Rssi);
8250 +// DBG_871X("ELSE:ssid=%s update_network: src->rssi=0x%d dst->rssi=%d\n",src->Ssid.Ssid,src->Rssi,dst->Rssi);
8251 src->Rssi=(src->Rssi +dst->Rssi)/2;//dBM
8252 }
8253
8254 -// DBG_8192C("a:update_network: src->rssi=0x%d padapter->recvpriv.ui_rssi=%d\n",src->Rssi,padapter->recvpriv.signal);
8255 +// DBG_871X("a:update_network: src->rssi=0x%d padapter->recvpriv.ui_rssi=%d\n",src->Rssi,padapter->recvpriv.signal);
8256
8257 #endif
8258
8259 @@ -796,7 +827,7 @@ _func_enter_;
8260
8261 //if(pmlmepriv->cur_network.network.IELength<= pnetwork->IELength)
8262 {
8263 - update_network(&(pmlmepriv->cur_network.network), pnetwork,adapter);
8264 + update_network(&(pmlmepriv->cur_network.network), pnetwork,adapter, _TRUE);
8265 rtw_update_protection(adapter, (pmlmepriv->cur_network.network.IEs) + sizeof (NDIS_802_11_FIXED_IEs),
8266 pmlmepriv->cur_network.network.IELength);
8267 }
8268 @@ -824,6 +855,7 @@ void rtw_update_scanned_network(_adapter
8269 struct wlan_network *oldest = NULL;
8270
8271 _func_enter_;
8272 +
8273 _enter_critical_bh(&queue->lock, &irqL);
8274 phead = get_list_head(queue);
8275 plist = get_next(phead);
8276 @@ -865,17 +897,21 @@ _func_enter_;
8277
8278 #ifdef CONFIG_ANTENNA_DIVERSITY
8279 //target->PhyInfo.Optimum_antenna = pHalData->CurAntenna;//optimum_antenna=>For antenna diversity
8280 - adapter->HalFunc.GetHalDefVarHandler(adapter, HAL_DEF_CURRENT_ANTENNA, &(target->PhyInfo.Optimum_antenna));
8281 + rtw_hal_get_def_var(adapter, HAL_DEF_CURRENT_ANTENNA, &(target->PhyInfo.Optimum_antenna));
8282 #endif
8283 _rtw_memcpy(&(pnetwork->network), target, get_WLAN_BSSID_EX_sz(target));
8284 - pnetwork->last_scanned = rtw_get_current_time();
8285 - //variable initialize
8286 + //pnetwork->last_scanned = rtw_get_current_time();
8287 + // variable initialize
8288 pnetwork->fixed = _FALSE;
8289 pnetwork->last_scanned = rtw_get_current_time();
8290
8291 pnetwork->network_type = 0;
8292 pnetwork->aid=0;
8293 pnetwork->join_res=0;
8294 +
8295 + /* bss info not receving from the right channel */
8296 + if (pnetwork->network.PhyInfo.SignalQuality == 101)
8297 + pnetwork->network.PhyInfo.SignalQuality = 0;
8298 }
8299 else {
8300 /* Otherwise just pull from the free list */
8301 @@ -891,10 +927,16 @@ _func_enter_;
8302 target->Length = bssid_ex_sz;
8303 #ifdef CONFIG_ANTENNA_DIVERSITY
8304 //target->PhyInfo.Optimum_antenna = pHalData->CurAntenna;
8305 - adapter->HalFunc.GetHalDefVarHandler(adapter, HAL_DEF_CURRENT_ANTENNA, &(target->PhyInfo.Optimum_antenna));
8306 + rtw_hal_get_def_var(adapter, HAL_DEF_CURRENT_ANTENNA, &(target->PhyInfo.Optimum_antenna));
8307 #endif
8308 _rtw_memcpy(&(pnetwork->network), target, bssid_ex_sz );
8309
8310 + pnetwork->last_scanned = rtw_get_current_time();
8311 +
8312 + /* bss info not receving from the right channel */
8313 + if (pnetwork->network.PhyInfo.SignalQuality == 101)
8314 + pnetwork->network.PhyInfo.SignalQuality = 0;
8315 +
8316 rtw_list_insert_tail(&(pnetwork->list),&(queue->queue));
8317
8318 }
8319 @@ -904,23 +946,24 @@ _func_enter_;
8320 * be already expired. In this case we do the same as we found a new
8321 * net and call the new_net handler
8322 */
8323 - //target.Reserved[0]==1, means that scaned network is a bcn frame.
8324 - if((pnetwork->network.IELength>target->IELength) && (target->Reserved[0]==1))
8325 - goto exit;
8326 -
8327 - update_network(&(pnetwork->network),target,adapter);
8328 + bool update_ie = _TRUE;
8329
8330 pnetwork->last_scanned = rtw_get_current_time();
8331
8332 + //target.Reserved[0]==1, means that scaned network is a bcn frame.
8333 + if((pnetwork->network.IELength>target->IELength) && (target->Reserved[0]==1))
8334 + update_ie = _FALSE;
8335 +
8336 + update_network(&(pnetwork->network), target,adapter, update_ie);
8337 }
8338
8339 exit:
8340 _exit_critical_bh(&queue->lock, &irqL);
8341 -_func_exit_;
8342
8343 +_func_exit_;
8344 }
8345
8346 -
8347 +void rtw_add_network(_adapter *adapter, WLAN_BSSID_EX *pnetwork);
8348 void rtw_add_network(_adapter *adapter, WLAN_BSSID_EX *pnetwork)
8349 {
8350 _irqL irqL;
8351 @@ -950,6 +993,7 @@ _func_exit_;
8352 // (3) WMM
8353 // (4) HT
8354 // (5) others
8355 +int rtw_is_desired_network(_adapter *adapter, struct wlan_network *pnetwork);
8356 int rtw_is_desired_network(_adapter *adapter, struct wlan_network *pnetwork)
8357 {
8358 struct security_priv *psecuritypriv = &adapter->securitypriv;
8359 @@ -965,7 +1009,7 @@ int rtw_is_desired_network(_adapter *ada
8360 desired_encmode = psecuritypriv->ndisencryptstatus;
8361 privacy = pnetwork->network.Privacy;
8362
8363 - if(psecuritypriv->wps_phase == _TRUE)
8364 + if(check_fwstate(pmlmepriv, WIFI_UNDER_WPS))
8365 {
8366 if(rtw_get_wps_ie(pnetwork->network.IEs+_FIXED_IE_LENGTH_, pnetwork->network.IELength-_FIXED_IE_LENGTH_, NULL, &wps_ielen)!=NULL)
8367 {
8368 @@ -978,8 +1022,20 @@ int rtw_is_desired_network(_adapter *ada
8369 }
8370 if (adapter->registrypriv.wifi_spec == 1) //for correct flow of 8021X to do....
8371 {
8372 + u8 *p=NULL;
8373 + uint ie_len=0;
8374 +
8375 if ((desired_encmode == Ndis802_11EncryptionDisabled) && (privacy != 0))
8376 bselected = _FALSE;
8377 +
8378 + if ( psecuritypriv->ndisauthtype == Ndis802_11AuthModeWPA2PSK) {
8379 + p = rtw_get_ie(pnetwork->network.IEs + _BEACON_IE_OFFSET_, _RSN_IE_2_, &ie_len, (pnetwork->network.IELength - _BEACON_IE_OFFSET_));
8380 + if (p && ie_len>0) {
8381 + bselected = _TRUE;
8382 + } else {
8383 + bselected = _FALSE;
8384 + }
8385 + }
8386 }
8387
8388
8389 @@ -1097,6 +1153,7 @@ _func_exit_;
8390 void rtw_surveydone_event_callback(_adapter *adapter, u8 *pbuf)
8391 {
8392 _irqL irqL;
8393 + u8 timer_cancelled = _FALSE;
8394 struct mlme_priv *pmlmepriv = &(adapter->mlmepriv);
8395
8396 #ifdef CONFIG_MLME_EXT
8397 @@ -1108,7 +1165,6 @@ void rtw_surveydone_event_callback(_adap
8398 _func_enter_;
8399
8400 _enter_critical_bh(&pmlmepriv->lock, &irqL);
8401 -
8402 if(pmlmepriv->wps_probe_req_ie)
8403 {
8404 u32 free_len = pmlmepriv->wps_probe_req_ie_len;
8405 @@ -1121,21 +1177,29 @@ _func_enter_;
8406
8407 if (check_fwstate(pmlmepriv,_FW_UNDER_SURVEY))
8408 {
8409 - u8 timer_cancelled;
8410 -
8411 - _cancel_timer(&pmlmepriv->scan_to_timer, &timer_cancelled);
8412 + //u8 timer_cancelled;
8413 +
8414 + timer_cancelled = _TRUE;
8415 + //_cancel_timer(&pmlmepriv->scan_to_timer, &timer_cancelled);
8416
8417 _clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY);
8418 }
8419 else {
8420
8421 RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("nic status =%x, survey done event comes too late!\n", get_fwstate(pmlmepriv)));
8422 - }
8423 -
8424 + }
8425 + _exit_critical_bh(&pmlmepriv->lock, &irqL);
8426 +
8427 + if(timer_cancelled)
8428 + _cancel_timer(&pmlmepriv->scan_to_timer, &timer_cancelled);
8429 +
8430 +
8431 + _enter_critical_bh(&pmlmepriv->lock, &irqL);
8432 +
8433 #ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
8434 rtw_set_signal_stat_timer(&adapter->recvpriv);
8435 #endif
8436 -
8437 +
8438 if(pmlmepriv->to_join == _TRUE)
8439 {
8440 if((check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)==_TRUE) )
8441 @@ -1191,18 +1255,21 @@ _func_enter_;
8442 }
8443 else
8444 {
8445 + DBG_871X("try_to_join, but select scanning queue fail, to_roaming:%d\n", rtw_to_roaming(adapter));
8446 #ifdef CONFIG_LAYER2_ROAMING
8447 - DBG_871X("try_to_join, but select scanning queue fail, to_roaming:%d\n", pmlmepriv->to_roaming);
8448 - #else
8449 - DBG_871X("try_to_join, but select scanning queue fail\n");
8450 - #endif
8451 -
8452 - #ifdef CONFIG_LAYER2_ROAMING
8453 - if(pmlmepriv->to_roaming!=0) {
8454 + if (rtw_to_roaming(adapter) != 0) {
8455 if( --pmlmepriv->to_roaming == 0
8456 - || _SUCCESS != rtw_sitesurvey_cmd(adapter, &pmlmepriv->assoc_ssid, 1)
8457 + || _SUCCESS != rtw_sitesurvey_cmd(adapter, &pmlmepriv->assoc_ssid, 1, NULL, 0)
8458 ) {
8459 - pmlmepriv->to_roaming = 0;
8460 + rtw_set_roaming(adapter, 0);
8461 +#ifdef CONFIG_INTEL_WIDI
8462 + if(adapter->mlmepriv.widi_state == INTEL_WIDI_STATE_ROAMING)
8463 + {
8464 + _rtw_memset(pmlmepriv->sa_ext, 0x00, L2SDTA_SERVICE_VE_LEN);
8465 + intel_widi_wk_cmd(adapter, INTEL_WIDI_LISTEN_WK, NULL);
8466 + DBG_871X("change to widi listen\n");
8467 + }
8468 +#endif // CONFIG_INTEL_WIDI
8469 rtw_free_assoc_resources(adapter, 1);
8470 rtw_indicate_disconnect(adapter);
8471 } else {
8472 @@ -1213,32 +1280,42 @@ _func_enter_;
8473 _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
8474 }
8475 }
8476 - }
8477 + }
8478
8479 indicate_wx_scan_complete_event(adapter);
8480 //DBG_871X("scan complete in %dms\n",rtw_get_passing_time_ms(pmlmepriv->scan_start_time));
8481
8482 _exit_critical_bh(&pmlmepriv->lock, &irqL);
8483
8484 -#ifdef CONFIG_P2P
8485 - p2p_ps_wk_cmd(adapter, P2P_PS_SCAN_DONE, 0);
8486 -#endif //CONFIG_P2P
8487 +#ifdef CONFIG_P2P_PS
8488 + if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) {
8489 + p2p_ps_wk_cmd(adapter, P2P_PS_SCAN_DONE, 0);
8490 + }
8491 +#endif // CONFIG_P2P_PS
8492
8493 rtw_os_xmit_schedule(adapter);
8494 +#ifdef CONFIG_CONCURRENT_MODE
8495 + rtw_os_xmit_schedule(adapter->pbuddy_adapter);
8496 +#endif
8497 +#ifdef CONFIG_DUALMAC_CONCURRENT
8498 + dc_resume_xmit(adapter);
8499 +#endif
8500
8501 #ifdef CONFIG_DRVEXT_MODULE_WSC
8502 drvext_surveydone_callback(&adapter->drvextpriv);
8503 #endif
8504
8505 #ifdef DBG_CONFIG_ERROR_DETECT
8506 +#ifdef CONFIG_INTEL_WIDI
8507 + if (adapter->mlmepriv.widi_state == INTEL_WIDI_STATE_NONE)
8508 +#endif
8509 {
8510 struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
8511 if(pmlmeext->sitesurvey_res.bss_cnt == 0){
8512 - if(adapter->HalFunc.silentreset)
8513 - adapter->HalFunc.silentreset(adapter);
8514 + rtw_hal_sreset_reset(adapter);
8515 }
8516 }
8517 - #endif
8518 +#endif
8519
8520 #ifdef CONFIG_IOCTL_CFG80211
8521 rtw_cfg80211_surveydone_event_callback(adapter);
8522 @@ -1297,19 +1374,15 @@ void rtw_free_assoc_resources(_adapter *
8523 _irqL irqL;
8524 struct wlan_network* pwlan = NULL;
8525 struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
8526 - struct mlme_ext_info *pmlmeinfo = &adapter->mlmeextpriv.mlmext_info;
8527 struct sta_priv *pstapriv = &adapter->stapriv;
8528 struct wlan_network *tgt_network = &pmlmepriv->cur_network;
8529
8530 #ifdef CONFIG_TDLS
8531 struct tdls_info *ptdlsinfo = &adapter->tdlsinfo;
8532 -#endif //CONFIG_TDLS
8533 +#endif //CONFIG_TDLS
8534 _func_enter_;
8535
8536 RT_TRACE(_module_rtl871x_mlme_c_, _drv_notice_, ("+rtw_free_assoc_resources\n"));
8537 -
8538 -
8539 -
8540 RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_, ("tgt_network->network.MacAddress="MAC_FMT" ssid=%s\n",
8541 MAC_ARG(tgt_network->network.MacAddress), tgt_network->network.Ssid.Ssid));
8542
8543 @@ -1320,22 +1393,19 @@ _func_enter_;
8544 psta = rtw_get_stainfo(&adapter->stapriv, tgt_network->network.MacAddress);
8545
8546 #ifdef CONFIG_TDLS
8547 - if(ptdlsinfo->setup_state != UN_TDLS_STATE)
8548 + if(ptdlsinfo->setup_state != TDLS_STATE_NONE)
8549 {
8550 rtw_tdls_cmd(adapter, myid(&(adapter->eeprompriv)), TDLS_RS_RCR);
8551 - ptdlsinfo->setup_state = UN_TDLS_STATE;
8552 + rtw_reset_tdls_info(adapter);
8553 rtw_free_all_stainfo(adapter);
8554 _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
8555 }
8556 else
8557 +#endif //CONFIG_TDLS
8558 {
8559 _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
8560 rtw_free_stainfo(adapter, psta);
8561 }
8562 -#else
8563 - _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
8564 - rtw_free_stainfo(adapter, psta);
8565 -#endif //CONFIG_TDLS
8566
8567 _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
8568
8569 @@ -1359,10 +1429,36 @@ _func_enter_;
8570 _enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
8571
8572 pwlan = rtw_find_network(&pmlmepriv->scanned_queue, tgt_network->network.MacAddress);
8573 - if(pwlan)
8574 + if(pwlan)
8575 {
8576 pwlan->fixed = _FALSE;
8577 - }
8578 +#ifdef CONFIG_P2P
8579 + if(!rtw_p2p_chk_state(&adapter->wdinfo, P2P_STATE_NONE))
8580 + {
8581 + u32 p2p_ielen=0;
8582 + u8 *p2p_ie;
8583 + //u16 capability;
8584 + u8 *pcap = NULL;
8585 + u32 capability_len=0;
8586 +
8587 + //DBG_871X("free disconnecting network\n");
8588 + //rtw_free_network_nolock(pmlmepriv, pwlan);
8589 +
8590 + if((p2p_ie=rtw_get_p2p_ie(pwlan->network.IEs+_FIXED_IE_LENGTH_, pwlan->network.IELength-_FIXED_IE_LENGTH_, NULL, &p2p_ielen)))
8591 + {
8592 + pcap = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CAPABILITY, NULL, &capability_len);
8593 + if(pcap && capability_len==2)
8594 + {
8595 + u16 cap = *(u16*)pcap ;
8596 + *(u16*)pcap = cap&0x00ff;//clear group capability when free this network
8597 + }
8598 + }
8599 +
8600 + rtw_set_scan_deny(adapter, 2000);
8601 + //rtw_clear_scan_deny(adapter);
8602 + }
8603 +#endif //CONFIG_P2P
8604 + }
8605 else
8606 {
8607 RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("rtw_free_assoc_resources : pwlan== NULL \n\n"));
8608 @@ -1372,15 +1468,15 @@ _func_enter_;
8609 if((check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) && (adapter->stapriv.asoc_sta_count== 1))
8610 /*||check_fwstate(pmlmepriv, WIFI_STATION_STATE)*/)
8611 {
8612 - rtw_free_network_nolock(pmlmepriv, pwlan);
8613 + rtw_free_network_nolock(pmlmepriv, pwlan);
8614 }
8615
8616 if(lock_scanned_queue)
8617 _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
8618
8619 - pmlmepriv->key_mask = 0;
8620 + adapter->securitypriv.key_mask = 0;
8621
8622 -_func_exit_;
8623 +_func_exit_;
8624
8625 }
8626
8627 @@ -1397,12 +1493,16 @@ _func_enter_;
8628 RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_, ("+rtw_indicate_connect\n"));
8629
8630 pmlmepriv->to_join = _FALSE;
8631 +
8632 + if(!check_fwstate(&padapter->mlmepriv, _FW_LINKED))
8633 + {
8634 +
8635 #ifdef CONFIG_SW_ANTENNA_DIVERSITY
8636 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_ANTENNA_DIVERSITY_LINK, 0);
8637 + rtw_hal_set_hwreg(padapter, HW_VAR_ANTENNA_DIVERSITY_LINK, 0);
8638 #endif
8639 set_fwstate(pmlmepriv, _FW_LINKED);
8640
8641 - rtw_led_control(padapter, LED_CTL_LINK);
8642 + rtw_led_control(padapter, LED_CTL_LINK);
8643
8644 #ifdef CONFIG_DRVEXT_MODULE
8645 if(padapter->drvextpriv.enable_wpa)
8646 @@ -1415,13 +1515,20 @@ _func_enter_;
8647 rtw_os_indicate_connect(padapter);
8648 }
8649
8650 - #ifdef CONFIG_LAYER2_ROAMING
8651 - pmlmepriv->to_roaming=0;
8652 - #endif
8653 + }
8654
8655 - #ifdef CONFIG_SET_SCAN_DENY_TIMER
8656 - rtw_set_scan_deny(pmlmepriv, 3000);
8657 - #endif
8658 + rtw_set_roaming(padapter, 0);
8659 +
8660 +#ifdef CONFIG_INTEL_WIDI
8661 + if(padapter->mlmepriv.widi_state == INTEL_WIDI_STATE_ROAMING)
8662 + {
8663 + _rtw_memset(pmlmepriv->sa_ext, 0x00, L2SDTA_SERVICE_VE_LEN);
8664 + intel_widi_wk_cmd(padapter, INTEL_WIDI_LISTEN_WK, NULL);
8665 + DBG_871X("change to widi listen\n");
8666 + }
8667 +#endif // CONFIG_INTEL_WIDI
8668 +
8669 + rtw_set_scan_deny(padapter, 3000);
8670
8671 RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_, ("-rtw_indicate_connect: fw_state=0x%08x\n", get_fwstate(pmlmepriv)));
8672
8673 @@ -1441,24 +1548,39 @@ _func_enter_;
8674
8675 RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_, ("+rtw_indicate_disconnect\n"));
8676
8677 - _clr_fwstate_(pmlmepriv, _FW_LINKED|_FW_UNDER_LINKING);
8678 + _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING|WIFI_UNDER_WPS);
8679
8680 - rtw_led_control(padapter, LED_CTL_NO_LINK);
8681 + if(rtw_to_roaming(padapter) > 0)
8682 + _clr_fwstate_(pmlmepriv, _FW_LINKED);
8683
8684 - #ifdef CONFIG_LAYER2_ROAMING
8685 - if(pmlmepriv->to_roaming<=0)
8686 - #endif
8687 + if(check_fwstate(&padapter->mlmepriv, _FW_LINKED)
8688 + || (rtw_to_roaming(padapter) <= 0)
8689 + )
8690 + {
8691 rtw_os_indicate_disconnect(padapter);
8692
8693 -#ifdef CONFIG_LPS
8694 - if(padapter->pwrctrlpriv.wowlan_mode==_FALSE){
8695 - rtw_lps_ctrl_wk_cmd(padapter, LPS_CTRL_DISCONNECT, 1);
8696 + //set ips_deny_time to avoid enter IPS before LPS leave
8697 + padapter->pwrctrlpriv.ips_deny_time = rtw_get_current_time() + rtw_ms_to_systime(3000);
8698 +
8699 + _clr_fwstate_(pmlmepriv, _FW_LINKED);
8700 +
8701 + rtw_led_control(padapter, LED_CTL_NO_LINK);
8702 +
8703 + rtw_clear_scan_deny(padapter);
8704 +
8705 }
8706 -#endif
8707
8708 -#ifdef CONFIG_P2P
8709 +#ifdef CONFIG_P2P_PS
8710 p2p_ps_wk_cmd(padapter, P2P_PS_DISABLE, 1);
8711 -#endif //CONFIG_P2P
8712 +#endif // CONFIG_P2P_PS
8713 +
8714 +#ifdef CONFIG_LPS
8715 +#ifdef CONFIG_WOWLAN
8716 + if(padapter->pwrctrlpriv.wowlan_mode==_FALSE)
8717 +#endif //CONFIG_WOWLAN
8718 + rtw_lps_ctrl_wk_cmd(padapter, LPS_CTRL_DISCONNECT, 1);
8719 +
8720 +#endif
8721
8722 _func_exit_;
8723 }
8724 @@ -1468,16 +1590,45 @@ inline void rtw_indicate_scan_done( _ada
8725 rtw_os_indicate_scan_done(padapter, aborted);
8726 }
8727
8728 +void rtw_scan_abort(_adapter *adapter)
8729 +{
8730 + u32 cnt=0;
8731 + u32 start;
8732 + struct mlme_priv *pmlmepriv = &(adapter->mlmepriv);
8733 + struct mlme_ext_priv *pmlmeext = &(adapter->mlmeextpriv);
8734 +
8735 + start = rtw_get_current_time();
8736 + pmlmeext->scan_abort = _TRUE;
8737 + while (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY)
8738 + && rtw_get_passing_time_ms(start) <= 200) {
8739 +
8740 + if (adapter->bDriverStopped || adapter->bSurpriseRemoved)
8741 + break;
8742 +
8743 + DBG_871X(FUNC_NDEV_FMT"fw_state=_FW_UNDER_SURVEY!\n", FUNC_NDEV_ARG(adapter->pnetdev));
8744 + rtw_msleep_os(20);
8745 + }
8746 +
8747 + if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY)) {
8748 + if (!adapter->bDriverStopped && !adapter->bSurpriseRemoved)
8749 + DBG_871X(FUNC_NDEV_FMT"waiting for scan_abort time out!\n", FUNC_NDEV_ARG(adapter->pnetdev));
8750 + #ifdef CONFIG_PLATFORM_MSTAR
8751 + //_clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY);
8752 + set_survey_timer(pmlmeext, 0);
8753 + _set_timer(&pmlmepriv->scan_to_timer, 50);
8754 + #endif
8755 + rtw_indicate_scan_done(adapter, _TRUE);
8756 + }
8757 + pmlmeext->scan_abort = _FALSE;
8758 +}
8759 +
8760 static struct sta_info *rtw_joinbss_update_stainfo(_adapter *padapter, struct wlan_network *pnetwork)
8761 {
8762 int i;
8763 struct sta_info *bmc_sta, *psta=NULL;
8764 struct recv_reorder_ctrl *preorder_ctrl;
8765 struct sta_priv *pstapriv = &padapter->stapriv;
8766 -#ifdef CONFIG_CONCURRENT_MODE
8767 - PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
8768 - struct mlme_priv *pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
8769 -#endif
8770 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
8771
8772 psta = rtw_get_stainfo(pstapriv, pnetwork->network.MacAddress);
8773 if(psta==NULL) {
8774 @@ -1490,16 +1641,16 @@ static struct sta_info *rtw_joinbss_upda
8775
8776 psta->aid = pnetwork->join_res;
8777 #ifdef CONFIG_CONCURRENT_MODE
8778 - if((check_fwstate(pbuddy_mlmepriv, WIFI_STATION_STATE) == _TRUE)
8779 - && (check_fwstate(pbuddy_mlmepriv, _FW_LINKED) == _TRUE))
8780 - {
8781 - psta->mac_id=2;
8782 - }
8783 - else
8784 -#endif
8785 - {
8786 +
8787 + if(PRIMARY_ADAPTER == padapter->adapter_type)
8788 psta->mac_id=0;
8789 - }
8790 + else
8791 + psta->mac_id=2;
8792 +#else
8793 + psta->mac_id=0;
8794 +#endif
8795 +
8796 + psta->raid = networktype_to_raid(pmlmeext->cur_wireless_mode);
8797
8798 //security related
8799 if(padapter->securitypriv.dot11AuthAlgrthm== dot11AuthAlgrthm_8021X)
8800 @@ -1516,10 +1667,22 @@ static struct sta_info *rtw_joinbss_upda
8801 _rtw_memset((u8 *)&psta->dot11tkiprxmickey, 0, sizeof (union Keytype));
8802 _rtw_memset((u8 *)&psta->dot11tkiptxmickey, 0, sizeof (union Keytype));
8803
8804 - _rtw_memset((u8 *)&psta->dot11txpn, 0, sizeof (union pn48));
8805 + _rtw_memset((u8 *)&psta->dot11txpn, 0, sizeof (union pn48));
8806 +#ifdef CONFIG_IEEE80211W
8807 + _rtw_memset((u8 *)&psta->dot11wtxpn, 0, sizeof (union pn48));
8808 +#endif //CONFIG_IEEE80211W
8809 _rtw_memset((u8 *)&psta->dot11rxpn, 0, sizeof (union pn48));
8810 }
8811
8812 + // Commented by Albert 2012/07/21
8813 + // When doing the WPS, the wps_ie_len won't equal to 0
8814 + // And the Wi-Fi driver shouldn't allow the data packet to be tramsmitted.
8815 + if ( padapter->securitypriv.wps_ie_len != 0 )
8816 + {
8817 + psta->ieee8021x_blocked=_TRUE;
8818 + padapter->securitypriv.wps_ie_len = 0;
8819 + }
8820 +
8821
8822 //for A-MPDU Rx reordering buffer control for bmc_sta & sta_info
8823 //if A-MPDU Rx is enabled, reseting rx_ordering_ctrl wstart_b(indicate_seq) to default value=0xffff
8824 @@ -1582,7 +1745,6 @@ static void rtw_joinbss_update_network(_
8825
8826 // why not use ptarget_wlan??
8827 _rtw_memcpy(&cur_network->network, &pnetwork->network, pnetwork->network.Length);
8828 - //_rtw_memcpy(&cur_network->network, &ptarget_wlan->network, ptarget_wlan->network.Length);
8829
8830 cur_network->aid = pnetwork->join_res;
8831
8832 @@ -1594,15 +1756,29 @@ static void rtw_joinbss_update_network(_
8833 padapter->recvpriv.signal_qual = ptarget_wlan->network.PhyInfo.SignalQuality;
8834 //the ptarget_wlan->network.Rssi is raw data, we use ptarget_wlan->network.PhyInfo.SignalStrength instead (has scaled)
8835 padapter->recvpriv.rssi = translate_percentage_to_dbm(ptarget_wlan->network.PhyInfo.SignalStrength);
8836 + #if defined(DBG_RX_SIGNAL_DISPLAY_PROCESSING) && 1
8837 + DBG_871X(FUNC_ADPT_FMT" signal_strength:%3u, rssi:%3d, signal_qual:%3u"
8838 + "\n"
8839 + , FUNC_ADPT_ARG(padapter)
8840 + , padapter->recvpriv.signal_strength
8841 + , padapter->recvpriv.rssi
8842 + , padapter->recvpriv.signal_qual
8843 + );
8844 + #endif
8845 #ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
8846 rtw_set_signal_stat_timer(&padapter->recvpriv);
8847 #endif
8848
8849 //update fw_state //will clr _FW_UNDER_LINKING here indirectly
8850 switch(pnetwork->network.InfrastructureMode)
8851 - {
8852 + {
8853 case Ndis802_11Infrastructure:
8854 - pmlmepriv->fw_state = WIFI_STATION_STATE;
8855 +
8856 + if(pmlmepriv->fw_state&WIFI_UNDER_WPS)
8857 + pmlmepriv->fw_state = WIFI_STATION_STATE|WIFI_UNDER_WPS;
8858 + else
8859 + pmlmepriv->fw_state = WIFI_STATION_STATE;
8860 +
8861 break;
8862 case Ndis802_11IBSS:
8863 pmlmepriv->fw_state = WIFI_ADHOC_STATE;
8864 @@ -1617,7 +1793,7 @@ static void rtw_joinbss_update_network(_
8865 (cur_network->network.IELength));
8866
8867 #ifdef CONFIG_80211N_HT
8868 - rtw_update_ht_cap(padapter, cur_network->network.IEs, cur_network->network.IELength);
8869 + rtw_update_ht_cap(padapter, cur_network->network.IEs, cur_network->network.IELength, (u8) cur_network->network.Configuration.DSConfig);
8870 #endif
8871
8872
8873 @@ -1634,7 +1810,6 @@ static void rtw_joinbss_update_network(_
8874 void rtw_joinbss_event_prehandle(_adapter *adapter, u8 *pbuf)
8875 {
8876 _irqL irqL,irqL2;
8877 - int res;
8878 static u8 retry=0;
8879 u8 timer_cancelled;
8880 struct sta_info *ptarget_sta= NULL, *pcur_sta = NULL;
8881 @@ -1690,7 +1865,7 @@ _func_enter_;
8882 RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("\n\n ***joinbss_evt_callback return a wrong bss ***\n\n"));
8883 goto ignore_joinbss_callback;
8884 }
8885 -
8886 +
8887 _enter_critical_bh(&pmlmepriv->lock, &irqL);
8888
8889 RT_TRACE(_module_rtl871x_mlme_c_,_drv_info_,("\n rtw_joinbss_event_callback !! _enter_critical \n"));
8890 @@ -1746,9 +1921,9 @@ _func_enter_;
8891 _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
8892 goto ignore_joinbss_callback;
8893 }
8894 -
8895
8896 - //s3. find ptarget_sta & update ptarget_sta after update cur_network only for station mode
8897 +
8898 + //s3. find ptarget_sta & update ptarget_sta after update cur_network only for station mode
8899 if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) == _TRUE)
8900 {
8901 ptarget_sta = rtw_joinbss_update_stainfo(adapter, pnetwork);
8902 @@ -1758,9 +1933,9 @@ _func_enter_;
8903 _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
8904 goto ignore_joinbss_callback;
8905 }
8906 - }
8907 -
8908 - //s4. indicate connect
8909 + }
8910 +
8911 + //s4. indicate connect
8912 if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) == _TRUE)
8913 {
8914 rtw_indicate_connect(adapter);
8915 @@ -1770,13 +1945,13 @@ _func_enter_;
8916 //adhoc mode will rtw_indicate_connect when rtw_stassoc_event_callback
8917 RT_TRACE(_module_rtl871x_mlme_c_,_drv_info_,("adhoc mode, fw_state:%x", get_fwstate(pmlmepriv)));
8918 }
8919 -
8920 +
8921
8922 //s5. Cancle assoc_timer
8923 _cancel_timer(&pmlmepriv->assoc_timer, &timer_cancelled);
8924 -
8925 +
8926 RT_TRACE(_module_rtl871x_mlme_c_,_drv_info_,("Cancle assoc_timer\n"));
8927 -
8928 +
8929 }
8930 else
8931 {
8932 @@ -1847,16 +2022,21 @@ ignore_joinbss_callback:
8933 void rtw_joinbss_event_callback(_adapter *adapter, u8 *pbuf)
8934 {
8935 struct wlan_network *pnetwork = (struct wlan_network *)pbuf;
8936 - struct xmit_priv *pxmitpriv = &adapter->xmitpriv;
8937
8938 _func_enter_;
8939
8940 mlmeext_joinbss_event_callback(adapter, pnetwork->join_res);
8941
8942 - //Set Value to 1 to xmit data frame.
8943 - ATOMIC_SET(&pxmitpriv->HwRdyXmitData, 1);
8944 rtw_os_xmit_schedule(adapter);
8945
8946 +#ifdef CONFIG_CONCURRENT_MODE
8947 + rtw_os_xmit_schedule(adapter->pbuddy_adapter);
8948 +#endif
8949 +
8950 +#ifdef CONFIG_DUALMAC_CONCURRENT
8951 + dc_resume_xmit(adapter);
8952 +#endif
8953 +
8954 _func_exit_;
8955 }
8956
8957 @@ -1871,8 +2051,7 @@ void rtw_stassoc_event_callback(_adapter
8958
8959 _func_enter_;
8960
8961 - // to do:
8962 - if(rtw_access_ctrl(&adapter->acl_list, pstassoc->macaddr) == _FALSE)
8963 + if(rtw_access_ctrl(adapter, pstassoc->macaddr) == _FALSE)
8964 return;
8965
8966 #if defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME)
8967 @@ -1882,7 +2061,9 @@ _func_enter_;
8968 if(psta)
8969 {
8970 #ifdef CONFIG_IOCTL_CFG80211
8971 -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37)) || defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
8972 +#ifdef COMPAT_KERNEL_RELEASE
8973 +
8974 +#elif (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37)) || defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
8975 u8 *passoc_req = NULL;
8976 u32 assoc_req_len;
8977
8978 @@ -1895,7 +2076,7 @@ _func_enter_;
8979 assoc_req_len = psta->assoc_req_len;
8980 _rtw_memcpy(passoc_req, psta->passoc_req, assoc_req_len);
8981
8982 - _rtw_mfree(psta->passoc_req , psta->assoc_req_len);
8983 + rtw_mfree(psta->passoc_req , psta->assoc_req_len);
8984 psta->passoc_req = NULL;
8985 psta->assoc_req_len = 0;
8986 }
8987 @@ -1906,14 +2087,14 @@ _func_enter_;
8988 {
8989 rtw_cfg80211_indicate_sta_assoc(adapter, passoc_req, assoc_req_len);
8990
8991 - _rtw_mfree(passoc_req, assoc_req_len);
8992 + rtw_mfree(passoc_req, assoc_req_len);
8993 }
8994 -#endif //LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37)) || defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
8995 -#endif //CONFIG_IOCTL_CFG80211
8996 +#endif //(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37)) || defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
8997 +#endif //CONFIG_IOCTL_CFG80211
8998
8999 - //bss_cap_update(adapter, psta);
9000 + //bss_cap_update_on_sta_join(adapter, psta);
9001 //sta_info_update(adapter, psta);
9002 - ap_sta_info_defer_update(adapter, psta);
9003 + ap_sta_info_defer_update(adapter, psta);
9004 }
9005
9006 goto exit;
9007 @@ -1992,15 +2173,19 @@ void rtw_stadel_event_callback(_adapter
9008
9009 _func_enter_;
9010
9011 - if(check_fwstate(pmlmepriv, WIFI_AP_STATE))
9012 - {
9013 + if(check_fwstate(pmlmepriv, WIFI_AP_STATE))
9014 + {
9015 #ifdef CONFIG_IOCTL_CFG80211
9016 -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37)) || defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
9017 +#ifdef COMPAT_KERNEL_RELEASE
9018 +
9019 +#elif (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37)) || defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
9020 rtw_cfg80211_indicate_sta_disassoc(adapter, pstadel->macaddr, *(u16*)pstadel->rsvd);
9021 #endif //(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37)) || defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
9022 #endif //CONFIG_IOCTL_CFG80211
9023 +
9024 return;
9025 - }
9026 + }
9027 +
9028
9029 mlmeext_sta_del_event_callback(adapter);
9030
9031 @@ -2008,17 +2193,19 @@ _func_enter_;
9032
9033 if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) )
9034 {
9035 -
9036 #ifdef CONFIG_LAYER2_ROAMING
9037 - if(pmlmepriv->to_roaming > 0)
9038 - pmlmepriv->to_roaming--; // this stadel_event is caused by roaming, decrease to_roaming
9039 - else if(pmlmepriv->to_roaming ==0)
9040 - pmlmepriv->to_roaming= adapter->registrypriv.max_roaming_times;
9041 -
9042 - if(*((unsigned short *)(pstadel->rsvd)) !=65535 ) //if stadel_event isn't caused by no rx
9043 - pmlmepriv->to_roaming=0; // don't roam
9044 - #endif //CONFIG_LAYER2_ROAMING
9045 + if (rtw_to_roaming(adapter) > 0)
9046 + pmlmepriv->to_roaming--; /* this stadel_event is caused by roaming, decrease to_roaming */
9047 + else if (rtw_to_roaming(adapter) == 0)
9048 + rtw_set_roaming(adapter, adapter->registrypriv.max_roaming_times);
9049 +#ifdef CONFIG_INTEL_WIDI
9050 + if(adapter->mlmepriv.widi_state != INTEL_WIDI_STATE_CONNECTED)
9051 +#endif // CONFIG_INTEL_WIDI
9052 + if(*((unsigned short *)(pstadel->rsvd)) != WLAN_REASON_EXPIRATION_CHK)
9053 + rtw_set_roaming(adapter, 0); /* don't roam */
9054 + #endif
9055
9056 + rtw_free_uc_swdec_pending_queue(adapter);
9057
9058 rtw_free_assoc_resources(adapter, 1);
9059 rtw_indicate_disconnect(adapter);
9060 @@ -2030,10 +2217,13 @@ _func_enter_;
9061 rtw_free_network_nolock(pmlmepriv, pwlan);
9062 }
9063 _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
9064 - #ifdef CONFIG_LAYER2_ROAMING
9065 +
9066 _rtw_roaming(adapter, tgt_network);
9067 - #endif //CONFIG_LAYER2_ROAMING
9068
9069 +#ifdef CONFIG_INTEL_WIDI
9070 + if (!rtw_to_roaming(adapter))
9071 + process_intel_widi_disconnect(adapter, 1);
9072 +#endif // CONFIG_INTEL_WIDI
9073 }
9074
9075 if ( check_fwstate(pmlmepriv,WIFI_ADHOC_MASTER_STATE) ||
9076 @@ -2096,16 +2286,19 @@ _func_exit_;
9077 }
9078
9079
9080 -void rtw_cpwm_event_callback(_adapter *adapter, u8 *pbuf)
9081 +void rtw_cpwm_event_callback(PADAPTER padapter, u8 *pbuf)
9082 {
9083 - struct reportpwrstate_parm *preportpwrstate = (struct reportpwrstate_parm *)pbuf;
9084 +#ifdef CONFIG_LPS_LCLK
9085 + struct reportpwrstate_parm *preportpwrstate;
9086 +#endif
9087
9088 _func_enter_;
9089
9090 RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("rtw_cpwm_event_callback !!!\n"));
9091 -#ifdef CONFIG_PWRCTRL
9092 - preportpwrstate->state |= (u8)(adapter->pwrctrlpriv.cpwm_tog + 0x80);
9093 - cpwm_int_hdl(adapter, preportpwrstate);
9094 +#ifdef CONFIG_LPS_LCLK
9095 + preportpwrstate = (struct reportpwrstate_parm*)pbuf;
9096 + preportpwrstate->state |= (u8)(padapter->pwrctrlpriv.cpwm_tog + 0x80);
9097 + cpwm_int_hdl(padapter, preportpwrstate);
9098 #endif
9099
9100 _func_exit_;
9101 @@ -2120,7 +2313,9 @@ void _rtw_join_timeout_handler (_adapter
9102 {
9103 _irqL irqL;
9104 struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
9105 +#ifdef CONFIG_LAYER2_ROAMING
9106 int do_join_r;
9107 +#endif //CONFIG_LAYER2_ROAMING
9108
9109 #if 0
9110 if (adapter->bDriverStopped == _TRUE){
9111 @@ -2130,6 +2325,24 @@ void _rtw_join_timeout_handler (_adapter
9112 #endif
9113
9114 _func_enter_;
9115 +#ifdef PLATFORM_FREEBSD
9116 + rtw_mtx_lock(NULL);
9117 + if (callout_pending(&adapter->mlmepriv.assoc_timer.callout)) {
9118 + /* callout was reset */
9119 + //mtx_unlock(&sc->sc_mtx);
9120 + rtw_mtx_unlock(NULL);
9121 + return;
9122 + }
9123 + if (!callout_active(&adapter->mlmepriv.assoc_timer.callout)) {
9124 + /* callout was stopped */
9125 + //mtx_unlock(&sc->sc_mtx);
9126 + rtw_mtx_unlock(NULL);
9127 + return;
9128 + }
9129 + callout_deactivate(&adapter->mlmepriv.assoc_timer.callout);
9130 +
9131 +
9132 +#endif
9133
9134 DBG_871X("%s, fw_state=%x\n", __FUNCTION__, get_fwstate(pmlmepriv));
9135
9136 @@ -2140,10 +2353,10 @@ _func_enter_;
9137 _enter_critical_bh(&pmlmepriv->lock, &irqL);
9138
9139 #ifdef CONFIG_LAYER2_ROAMING
9140 - if(pmlmepriv->to_roaming>0) { // join timeout caused by roaming
9141 + if (rtw_to_roaming(adapter) > 0) { /* join timeout caused by roaming */
9142 while(1) {
9143 pmlmepriv->to_roaming--;
9144 - if(pmlmepriv->to_roaming!=0) { //try another ,
9145 + if (rtw_to_roaming(adapter) != 0) { /* try another */
9146 DBG_871X("%s try another roaming\n", __FUNCTION__);
9147 if( _SUCCESS!=(do_join_r=rtw_do_join(adapter)) ) {
9148 DBG_871X("%s roaming do_join return %d\n", __FUNCTION__ ,do_join_r);
9149 @@ -2151,6 +2364,14 @@ _func_enter_;
9150 }
9151 break;
9152 } else {
9153 +#ifdef CONFIG_INTEL_WIDI
9154 + if(adapter->mlmepriv.widi_state == INTEL_WIDI_STATE_ROAMING)
9155 + {
9156 + _rtw_memset(pmlmepriv->sa_ext, 0x00, L2SDTA_SERVICE_VE_LEN);
9157 + intel_widi_wk_cmd(adapter, INTEL_WIDI_LISTEN_WK, NULL);
9158 + DBG_871X("change to widi listen\n");
9159 + }
9160 +#endif // CONFIG_INTEL_WIDI
9161 DBG_871X("%s We've try roaming but fail\n", __FUNCTION__);
9162 rtw_indicate_disconnect(adapter);
9163 break;
9164 @@ -2162,6 +2383,12 @@ _func_enter_;
9165 {
9166 rtw_indicate_disconnect(adapter);
9167 free_scanqueue(pmlmepriv);//???
9168 +
9169 +#ifdef CONFIG_IOCTL_CFG80211
9170 + //indicate disconnect for the case that join_timeout and check_fwstate != FW_LINKED
9171 + rtw_cfg80211_indicate_disconnect(adapter);
9172 +#endif //CONFIG_IOCTL_CFG80211
9173 +
9174 }
9175
9176 _exit_critical_bh(&pmlmepriv->lock, &irqL);
9177 @@ -2170,12 +2397,14 @@ _func_enter_;
9178 #ifdef CONFIG_DRVEXT_MODULE_WSC
9179 drvext_assoc_fail_indicate(&adapter->drvextpriv);
9180 #endif
9181 +#ifdef PLATFORM_FREEBSD
9182 + rtw_mtx_unlock(NULL);
9183 +#endif
9184
9185 _func_exit_;
9186
9187 }
9188
9189 -
9190 /*
9191 * rtw_scan_timeout_handler - Timeout/Faliure handler for CMD SiteSurvey
9192 * @adapter: pointer to _adapter structure
9193 @@ -2185,18 +2414,16 @@ void rtw_scan_timeout_handler (_adapter
9194 _irqL irqL;
9195 struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
9196
9197 - DBG_871X("%s, fw_state=%x\n", __FUNCTION__, get_fwstate(pmlmepriv));
9198 + DBG_871X(FUNC_ADPT_FMT" fw_state=%x\n", FUNC_ADPT_ARG(adapter), get_fwstate(pmlmepriv));
9199
9200 - if(adapter->bDriverStopped ||adapter->bSurpriseRemoved)
9201 - return;
9202 -
9203 _enter_critical_bh(&pmlmepriv->lock, &irqL);
9204
9205 _clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY);
9206 -
9207 +
9208 _exit_critical_bh(&pmlmepriv->lock, &irqL);
9209
9210 rtw_indicate_scan_done(adapter, _TRUE);
9211 +
9212 }
9213
9214 static void rtw_auto_scan_handler(_adapter *padapter)
9215 @@ -2210,26 +2437,35 @@ static void rtw_auto_scan_handler(_adapt
9216 pmlmepriv->scan_interval--;
9217 if(pmlmepriv->scan_interval==0)
9218 {
9219 - if( pwrctrlpriv->power_mgnt != PS_MODE_ACTIVE )
9220 - return;
9221 -
9222 /*
9223 if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY|_FW_UNDER_LINKING) == _TRUE)
9224 {
9225 - DBG_8192C("exit %s when _FW_UNDER_SURVEY|_FW_UNDER_LINKING -> \n", __FUNCTION__);
9226 + DBG_871X("exit %s when _FW_UNDER_SURVEY|_FW_UNDER_LINKING -> \n", __FUNCTION__);
9227 return;
9228 }
9229
9230 if(pmlmepriv->sitesurveyctrl.traffic_busy == _TRUE)
9231 {
9232 - DBG_8192C("%s exit cause traffic_busy(%x)\n",__FUNCTION__, pmlmepriv->sitesurveyctrl.traffic_busy);
9233 + DBG_871X("%s exit cause traffic_busy(%x)\n",__FUNCTION__, pmlmepriv->sitesurveyctrl.traffic_busy);
9234 return;
9235 }
9236 */
9237
9238 +#ifdef CONFIG_CONCURRENT_MODE
9239 + if (rtw_buddy_adapter_up(padapter))
9240 + {
9241 + if ((check_buddy_fwstate(padapter, _FW_UNDER_SURVEY|_FW_UNDER_LINKING) == _TRUE) ||
9242 + (padapter->pbuddy_adapter->mlmepriv.LinkDetectInfo.bBusyTraffic == _TRUE))
9243 + {
9244 + DBG_871X("%s, but buddy_intf is under scanning or linking or BusyTraffic\n", __FUNCTION__);
9245 + return;
9246 + }
9247 + }
9248 +#endif
9249 +
9250 DBG_871X("%s\n", __FUNCTION__);
9251
9252 - rtw_set_802_11_bssid_list_scan(padapter);
9253 + rtw_set_802_11_bssid_list_scan(padapter, NULL, 0);
9254
9255 pmlmepriv->scan_interval = SCAN_INTERVAL;// 30*2 sec = 60sec
9256
9257 @@ -2245,6 +2481,12 @@ void rtw_dynamic_check_timer_handlder(_a
9258 struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
9259 #endif //CONFIG_AP_MODE
9260 struct registry_priv *pregistrypriv = &adapter->registrypriv;
9261 +#ifdef CONFIG_CONCURRENT_MODE
9262 + PADAPTER pbuddy_adapter = adapter->pbuddy_adapter;
9263 +#endif
9264 +
9265 + if(!adapter)
9266 + return;
9267
9268 if(adapter->hw_init_completed == _FALSE)
9269 return;
9270 @@ -2252,8 +2494,21 @@ void rtw_dynamic_check_timer_handlder(_a
9271 if ((adapter->bDriverStopped == _TRUE)||(adapter->bSurpriseRemoved== _TRUE))
9272 return;
9273
9274 +
9275 +#ifdef CONFIG_CONCURRENT_MODE
9276 + if(pbuddy_adapter)
9277 + {
9278 + if(adapter->net_closed == _TRUE && pbuddy_adapter->net_closed == _TRUE)
9279 + {
9280 + return;
9281 + }
9282 + }
9283 + else
9284 +#endif //CONFIG_CONCURRENT_MODE
9285 if(adapter->net_closed == _TRUE)
9286 + {
9287 return;
9288 + }
9289
9290 rtw_dynamic_chk_wk_cmd(adapter);
9291
9292 @@ -2269,12 +2524,14 @@ void rtw_dynamic_check_timer_handlder(_a
9293 }
9294 }
9295
9296 +#ifndef CONFIG_ACTIVE_KEEP_ALIVE_CHECK
9297 #ifdef CONFIG_AP_MODE
9298 if(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
9299 {
9300 expire_timeout_chk(adapter);
9301 }
9302 #endif
9303 +#endif //!CONFIG_ACTIVE_KEEP_ALIVE_CHECK
9304
9305 #ifdef CONFIG_BR_EXT
9306
9307 @@ -2313,27 +2570,58 @@ void rtw_dynamic_check_timer_handlder(_a
9308
9309
9310 #ifdef CONFIG_SET_SCAN_DENY_TIMER
9311 -void rtw_set_scan_deny_timer_hdl(_adapter *adapter)
9312 +inline bool rtw_is_scan_deny(_adapter *adapter)
9313 {
9314 struct mlme_priv *mlmepriv = &adapter->mlmepriv;
9315 + return (ATOMIC_READ(&mlmepriv->set_scan_deny) != 0) ? _TRUE : _FALSE;
9316 +}
9317
9318 - //allowed set scan
9319 +inline void rtw_clear_scan_deny(_adapter *adapter)
9320 +{
9321 + struct mlme_priv *mlmepriv = &adapter->mlmepriv;
9322 ATOMIC_SET(&mlmepriv->set_scan_deny, 0);
9323 + if (0)
9324 + DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(adapter));
9325 }
9326
9327 -void rtw_set_scan_deny(struct mlme_priv *mlmepriv, u32 ms)
9328 +void rtw_set_scan_deny_timer_hdl(_adapter *adapter)
9329 {
9330 + rtw_clear_scan_deny(adapter);
9331 +}
9332 +
9333 +void rtw_set_scan_deny(_adapter *adapter, u32 ms)
9334 +{
9335 + struct mlme_priv *mlmepriv = &adapter->mlmepriv;
9336 +#ifdef CONFIG_CONCURRENT_MODE
9337 + struct mlme_priv *b_mlmepriv;
9338 +#endif
9339 +
9340 + if (0)
9341 + DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(adapter));
9342 ATOMIC_SET(&mlmepriv->set_scan_deny, 1);
9343 _set_timer(&mlmepriv->set_scan_deny_timer, ms);
9344 +
9345 +#ifdef CONFIG_CONCURRENT_MODE
9346 + if (!adapter->pbuddy_adapter)
9347 + return;
9348 +
9349 + if (0)
9350 + DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(adapter->pbuddy_adapter));
9351 + b_mlmepriv = &adapter->pbuddy_adapter->mlmepriv;
9352 + ATOMIC_SET(&b_mlmepriv->set_scan_deny, 1);
9353 + _set_timer(&b_mlmepriv->set_scan_deny_timer, ms);
9354 +#endif
9355 +
9356 }
9357 #endif
9358
9359 -
9360 #if defined(IEEE80211_SCAN_RESULT_EXPIRE)
9361 #define RTW_SCAN_RESULT_EXPIRE IEEE80211_SCAN_RESULT_EXPIRE/HZ*1000 -1000 //3000 -1000
9362 #else
9363 #define RTW_SCAN_RESULT_EXPIRE 2000
9364 #endif
9365 +
9366 +#ifndef PLATFORM_FREEBSD
9367 /*
9368 * Select a new join candidate from the original @param candidate and @param competitor
9369 * @return _TRUE: candidate is updated
9370 @@ -2364,7 +2652,7 @@ static int rtw_check_join_candidate(stru
9371 goto exit;
9372
9373 #ifdef CONFIG_LAYER2_ROAMING
9374 - if(pmlmepriv->to_roaming) {
9375 + if(rtw_to_roaming(adapter) > 0) {
9376 if( rtw_get_passing_time_ms((u32)competitor->last_scanned) >= RTW_SCAN_RESULT_EXPIRE
9377 || is_same_ess(&competitor->network, &pmlmepriv->cur_network.network) == _FALSE
9378 )
9379 @@ -2393,7 +2681,7 @@ static int rtw_check_join_candidate(stru
9380 }
9381 } else
9382 #ifdef CONFIG_LAYER2_ROAMING
9383 - if(pmlmepriv->to_roaming) { // roaming
9384 + if(rtw_to_roaming(adapter)) { // roaming
9385 if( (*candidate == NULL ||(*candidate)->network.Rssi<competitor->network.Rssi )
9386 && is_same_ess(&competitor->network, &pmlmepriv->cur_network.network)
9387 //&&(!is_same_network(&competitor->network, &pmlmepriv->cur_network.network))
9388 @@ -2423,14 +2711,15 @@ static int rtw_check_join_candidate(stru
9389 #ifdef CONFIG_LAYER2_ROAMING
9390 "[to_roaming:%u] "
9391 #endif
9392 - "new candidate: %s("MAC_FMT") rssi:%d\n",
9393 + "new candidate: %s("MAC_FMT", ch%u) rssi:%d\n",
9394 pmlmepriv->assoc_by_bssid,
9395 pmlmepriv->assoc_ssid.Ssid,
9396 #ifdef CONFIG_LAYER2_ROAMING
9397 - pmlmepriv->to_roaming,
9398 + rtw_to_roaming(adapter),
9399 #endif
9400 (*candidate)->network.Ssid.Ssid,
9401 MAC_ARG((*candidate)->network.MacAddress),
9402 + (*candidate)->network.Configuration.DSConfig,
9403 (int)(*candidate)->network.Rssi
9404 );
9405 }
9406 @@ -2439,7 +2728,6 @@ exit:
9407 return updated;
9408 }
9409
9410 -
9411 /*
9412 Calling context:
9413 The caller of the sub-routine will be in critical section...
9414 @@ -2450,7 +2738,7 @@ pmlmepriv->lock
9415
9416
9417 */
9418 -#if 1
9419 +
9420 int rtw_select_and_join_from_scanned_queue(struct mlme_priv *pmlmepriv )
9421 {
9422 _irqL irqL;
9423 @@ -2494,8 +2782,9 @@ _func_enter_;
9424 ret = _FAIL;
9425 goto exit;
9426 } else {
9427 - DBG_871X("%s: candidate: %s("MAC_FMT")\n", __FUNCTION__,
9428 - candidate->network.Ssid.Ssid, MAC_ARG(candidate->network.MacAddress));;
9429 + DBG_871X("%s: candidate: %s("MAC_FMT", ch:%u)\n", __FUNCTION__,
9430 + candidate->network.Ssid.Ssid, MAC_ARG(candidate->network.MacAddress),
9431 + candidate->network.Configuration.DSConfig);
9432 }
9433
9434
9435 @@ -2517,40 +2806,42 @@ _func_enter_;
9436 else
9437 #endif
9438 {
9439 - rtw_disassoc_cmd(adapter);
9440 + rtw_disassoc_cmd(adapter, 0, _TRUE);
9441 rtw_indicate_disconnect(adapter);
9442 rtw_free_assoc_resources(adapter, 0);
9443 }
9444 }
9445
9446 #ifdef CONFIG_ANTENNA_DIVERSITY
9447 - adapter->HalFunc.GetHalDefVarHandler(adapter, HAL_DEF_IS_SUPPORT_ANT_DIV, &(bSupportAntDiv));
9448 + rtw_hal_get_def_var(adapter, HAL_DEF_IS_SUPPORT_ANT_DIV, &(bSupportAntDiv));
9449 if(_TRUE == bSupportAntDiv)
9450 {
9451 u8 CurrentAntenna;
9452 - adapter->HalFunc.GetHalDefVarHandler(adapter, HAL_DEF_CURRENT_ANTENNA, &(CurrentAntenna));
9453 - DBG_8192C("#### Opt_Ant_(%s) , cur_Ant(%s)\n",
9454 + rtw_hal_get_def_var(adapter, HAL_DEF_CURRENT_ANTENNA, &(CurrentAntenna));
9455 + DBG_871X("#### Opt_Ant_(%s) , cur_Ant(%s)\n",
9456 (2==candidate->network.PhyInfo.Optimum_antenna)?"A":"B",
9457 (2==CurrentAntenna)?"A":"B"
9458 );
9459 }
9460 #endif
9461 -
9462 + set_fwstate(pmlmepriv, _FW_UNDER_LINKING);
9463 ret = rtw_joinbss_cmd(adapter, candidate);
9464
9465 exit:
9466 _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
9467 +
9468 _func_exit_;
9469
9470 return ret;
9471 -
9472 }
9473 #else
9474 int rtw_select_and_join_from_scanned_queue(struct mlme_priv *pmlmepriv )
9475 {
9476 _irqL irqL;
9477 _list *phead;
9478 +#ifdef CONFIG_ANTENNA_DIVERSITY
9479 u8 CurrentAntenna;
9480 +#endif
9481 unsigned char *dst_ssid, *src_ssid;
9482 _adapter *adapter;
9483 _queue *queue = &(pmlmepriv->scanned_queue);
9484 @@ -2607,7 +2898,7 @@ _func_enter_;
9485 }
9486 else
9487 {
9488 - rtw_disassoc_cmd(adapter);
9489 + rtw_disassoc_cmd(adapter, 0, _TRUE);
9490 rtw_indicate_disconnect(adapter);
9491 rtw_free_assoc_resources(adapter, 0);
9492 _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
9493 @@ -2623,11 +2914,12 @@ _func_enter_;
9494
9495 }
9496
9497 - } else if (pmlmepriv->assoc_ssid.SsidLength == 0) {
9498 + } else if (pmlmepriv->assoc_ssid.SsidLength == 0) {
9499 + _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
9500 goto ask_for_joinbss;//anyway, join first selected(dequeued) pnetwork if ssid_len=0
9501
9502 #ifdef CONFIG_LAYER2_ROAMING
9503 - } else if(pmlmepriv->to_roaming>0) {
9504 + } else if (rtw_to_roaming(adapter) > 0) {
9505
9506 if( (roaming_candidate == NULL ||roaming_candidate->network.Rssi<pnetwork->network.Rssi )
9507 && is_same_ess(&pnetwork->network, &pmlmepriv->cur_network.network)
9508 @@ -2651,8 +2943,8 @@ _func_enter_;
9509 {
9510 RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("dst_ssid=%s, src_ssid=%s \n", dst_ssid, src_ssid));
9511 #ifdef CONFIG_ANTENNA_DIVERSITY
9512 - adapter->HalFunc.GetHalDefVarHandler(adapter, HAL_DEF_CURRENT_ANTENNA, &(CurrentAntenna));
9513 - DBG_8192C("#### dst_ssid=(%s) Opt_Ant_(%s) , cur_Ant(%s)\n", dst_ssid,
9514 + rtw_hal_get_def_var(adapter, HAL_DEF_CURRENT_ANTENNA, &(CurrentAntenna));
9515 + DBG_871X("#### dst_ssid=(%s) Opt_Ant_(%s) , cur_Ant(%s)\n", dst_ssid,
9516 (2==pnetwork->network.PhyInfo.Optimum_antenna)?"A":"B",
9517 (2==CurrentAntenna)?"A":"B");
9518 #endif
9519 @@ -2685,7 +2977,7 @@ _func_enter_;
9520 else
9521 #endif
9522 {
9523 - rtw_disassoc_cmd(adapter);
9524 + rtw_disassoc_cmd(adapter, 0, _TRUE);
9525 //rtw_indicate_disconnect(adapter);//
9526 rtw_free_assoc_resources(adapter, 0);
9527 _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
9528 @@ -2706,7 +2998,7 @@ _func_enter_;
9529 }
9530 _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
9531 #ifdef CONFIG_LAYER2_ROAMING
9532 - if(pmlmepriv->to_roaming>0 && roaming_candidate ){
9533 + if(rtw_to_roaming(adapter) > 0 && roaming_candidate ){
9534 pnetwork=roaming_candidate;
9535 DBG_871X("select_and_join_from_scanned_queue: roaming_candidate: %s("MAC_FMT")\n",
9536 pnetwork->network.Ssid.Ssid, MAC_ARG(pnetwork->network.MacAddress));
9537 @@ -2735,7 +3027,7 @@ _func_exit_;
9538 return rtw_joinbss_cmd(adapter, pnetwork);
9539
9540 }
9541 -#endif
9542 +#endif //PLATFORM_FREEBSD
9543
9544
9545 sint rtw_set_auth(_adapter * adapter,struct security_priv *psecuritypriv)
9546 @@ -2821,15 +3113,10 @@ _func_enter_;
9547 }
9548 psetkeyparm->keyid = (u8)keyid;//0~3
9549 psetkeyparm->set_tx = set_tx;
9550 - pmlmepriv->key_mask |= BIT(psetkeyparm->keyid);
9551 -#ifdef CONFIG_AUTOSUSPEND
9552 - if( _TRUE == adapter->pwrctrlpriv.bInternalAutoSuspend)
9553 - {
9554 - adapter->pwrctrlpriv.wepkeymask = pmlmepriv->key_mask;
9555 - DBG_8192C("....AutoSuspend pwrctrlpriv.wepkeymask(%x)\n",adapter->pwrctrlpriv.wepkeymask);
9556 - }
9557 -#endif
9558 - DBG_8192C("==> rtw_set_key algorithm(%x),keyid(%x),key_mask(%x)\n",psetkeyparm->algorithm,psetkeyparm->keyid,pmlmepriv->key_mask);
9559 + if (is_wep_enc(psetkeyparm->algorithm))
9560 + psecuritypriv->key_mask |= BIT(psetkeyparm->keyid);
9561 +
9562 + DBG_871X("==> rtw_set_key algorithm(%x),keyid(%x),key_mask(%x)\n",psetkeyparm->algorithm,psetkeyparm->keyid, psecuritypriv->key_mask);
9563 RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("\n rtw_set_key: psetkeyparm->algorithm=%d psetkeyparm->keyid=(u8)keyid=%d \n",psetkeyparm->algorithm, keyid));
9564
9565 switch(psetkeyparm->algorithm){
9566 @@ -3016,37 +3303,37 @@ _func_enter_;
9567 //copy fixed ie only
9568 _rtw_memcpy(out_ie, in_ie,12);
9569 ielength=12;
9570 -
9571 if((ndisauthmode==Ndis802_11AuthModeWPA)||(ndisauthmode==Ndis802_11AuthModeWPAPSK))
9572 authmode=_WPA_IE_ID_;
9573 if((ndisauthmode==Ndis802_11AuthModeWPA2)||(ndisauthmode==Ndis802_11AuthModeWPA2PSK))
9574 authmode=_WPA2_IE_ID_;
9575
9576 - if(psecuritypriv->wps_phase == _TRUE)
9577 + if(check_fwstate(pmlmepriv, WIFI_UNDER_WPS))
9578 {
9579 - //DBG_871X("wps_phase == _TRUE\n");
9580 -
9581 _rtw_memcpy(out_ie+ielength, psecuritypriv->wps_ie, psecuritypriv->wps_ie_len);
9582
9583 ielength += psecuritypriv->wps_ie_len;
9584 - psecuritypriv->wps_phase = _FALSE;
9585 -
9586 }
9587 - else if((ndisauthmode==Ndis802_11AuthModeWPA)||(ndisauthmode==Ndis802_11AuthModeWPAPSK)||(ndisauthmode==Ndis802_11AuthModeWPA2)||(ndisauthmode==Ndis802_11AuthModeWPA2PSK))
9588 + else if((authmode==_WPA_IE_ID_)||(authmode==_WPA2_IE_ID_))
9589 {
9590 //copy RSN or SSN
9591 _rtw_memcpy(&out_ie[ielength], &psecuritypriv->supplicant_ie[0], psecuritypriv->supplicant_ie[1]+2);
9592 + /* debug for CONFIG_IEEE80211W
9593 + {
9594 + int jj;
9595 + printk("supplicant_ie_length=%d &&&&&&&&&&&&&&&&&&&\n", psecuritypriv->supplicant_ie[1]+2);
9596 + for(jj=0; jj < psecuritypriv->supplicant_ie[1]+2; jj++)
9597 + printk(" %02x ", psecuritypriv->supplicant_ie[jj]);
9598 + printk("\n");
9599 + }*/
9600 ielength+=psecuritypriv->supplicant_ie[1]+2;
9601 -
9602 rtw_report_sec_ie(adapter, authmode, psecuritypriv->supplicant_ie);
9603
9604 #ifdef CONFIG_DRVEXT_MODULE
9605 drvext_report_sec_ie(&adapter->drvextpriv, authmode, sec_ie);
9606 #endif
9607 -
9608 -
9609 -
9610 }
9611 +
9612 iEntry = SecIsInPMKIDList(adapter, pmlmepriv->assoc_bssid);
9613 if(iEntry<0)
9614 {
9615 @@ -3097,7 +3384,7 @@ void rtw_update_registrypriv_dev_network
9616 WLAN_BSSID_EX *pdev_network = &pregistrypriv->dev_network;
9617 struct security_priv* psecuritypriv = &adapter->securitypriv;
9618 struct wlan_network *cur_network = &adapter->mlmepriv.cur_network;
9619 - struct xmit_priv *pxmitpriv = &adapter->xmitpriv;
9620 + //struct xmit_priv *pxmitpriv = &adapter->xmitpriv;
9621
9622 _func_enter_;
9623
9624 @@ -3169,9 +3456,6 @@ _func_exit_;
9625
9626 void rtw_get_encrypt_decrypt_from_registrypriv(_adapter* adapter)
9627 {
9628 - u16 wpaconfig=0;
9629 - struct registry_priv* pregistrypriv = &adapter->registrypriv;
9630 - struct security_priv* psecuritypriv= &adapter->securitypriv;
9631 _func_enter_;
9632
9633
9634 @@ -3211,12 +3495,12 @@ void rtw_joinbss_reset(_adapter *padapte
9635 threshold = 1;
9636 else
9637 threshold = 0;
9638 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_RXDMA_AGG_PG_TH, (u8 *)(&threshold));
9639 + rtw_hal_set_hwreg(padapter, HW_VAR_RXDMA_AGG_PG_TH, (u8 *)(&threshold));
9640 }
9641 else
9642 {
9643 threshold = 1;
9644 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_RXDMA_AGG_PG_TH, (u8 *)(&threshold));
9645 + rtw_hal_set_hwreg(padapter, HW_VAR_RXDMA_AGG_PG_TH, (u8 *)(&threshold));
9646 }
9647 #endif
9648
9649 @@ -3228,7 +3512,7 @@ void rtw_joinbss_reset(_adapter *padapte
9650 #ifdef CONFIG_80211N_HT
9651
9652 //the fucntion is >= passive_level
9653 -unsigned int rtw_restructure_ht_ie(_adapter *padapter, u8 *in_ie, u8 *out_ie, uint in_len, uint *pout_len)
9654 +unsigned int rtw_restructure_ht_ie(_adapter *padapter, u8 *in_ie, u8 *out_ie, uint in_len, uint *pout_len, u8 channel)
9655 {
9656 u32 ielen, out_len;
9657 unsigned char *p, *pframe;
9658 @@ -3237,7 +3521,8 @@ unsigned int rtw_restructure_ht_ie(_adap
9659 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
9660 struct qos_priv *pqospriv= &pmlmepriv->qospriv;
9661 struct ht_priv *phtpriv = &pmlmepriv->htpriv;
9662 -
9663 + struct registry_priv *pregpriv = &padapter->registrypriv;
9664 + u8 cbw40_enable = 0;
9665
9666 phtpriv->ht_option = _FALSE;
9667
9668 @@ -3258,19 +3543,31 @@ unsigned int rtw_restructure_ht_ie(_adap
9669
9670 _rtw_memset(&ht_capie, 0, sizeof(struct rtw_ieee80211_ht_cap));
9671
9672 - ht_capie.cap_info = IEEE80211_HT_CAP_SUP_WIDTH |IEEE80211_HT_CAP_SGI_20 |
9673 - IEEE80211_HT_CAP_SGI_40 | IEEE80211_HT_CAP_TX_STBC |
9674 + ht_capie.cap_info = IEEE80211_HT_CAP_SGI_20 | IEEE80211_HT_CAP_TX_STBC |
9675 IEEE80211_HT_CAP_DSSSCCK40;
9676 + //if insert module set only support 20MHZ, don't add the 40MHZ and SGI_40
9677 + if( channel > 14 )
9678 + {
9679 + if( pregpriv->cbw40_enable & BIT(1) )
9680 + cbw40_enable = 1;
9681 + }
9682 + else
9683 + if( pregpriv->cbw40_enable & BIT(0) )
9684 + cbw40_enable = 1;
9685 +
9686 + if ( cbw40_enable != 0 )
9687 + ht_capie.cap_info |= IEEE80211_HT_CAP_SUP_WIDTH | IEEE80211_HT_CAP_SGI_40;
9688 +
9689
9690
9691 {
9692 u32 rx_packet_offset, max_recvbuf_sz;
9693 - padapter->HalFunc.GetHalDefVarHandler(padapter, HAL_DEF_RX_PACKET_OFFSET, &rx_packet_offset);
9694 - padapter->HalFunc.GetHalDefVarHandler(padapter, HAL_DEF_MAX_RECVBUF_SZ, &max_recvbuf_sz);
9695 - if(max_recvbuf_sz-rx_packet_offset>(8191-256)) {
9696 - DBG_871X("%s IEEE80211_HT_CAP_MAX_AMSDU is set\n", __FUNCTION__);
9697 - ht_capie.cap_info = ht_capie.cap_info |IEEE80211_HT_CAP_MAX_AMSDU;
9698 - }
9699 + rtw_hal_get_def_var(padapter, HAL_DEF_RX_PACKET_OFFSET, &rx_packet_offset);
9700 + rtw_hal_get_def_var(padapter, HAL_DEF_MAX_RECVBUF_SZ, &max_recvbuf_sz);
9701 + //if(max_recvbuf_sz-rx_packet_offset>(8191-256)) {
9702 + // DBG_871X("%s IEEE80211_HT_CAP_MAX_AMSDU is set\n", __FUNCTION__);
9703 + // ht_capie.cap_info = ht_capie.cap_info |IEEE80211_HT_CAP_MAX_AMSDU;
9704 + //}
9705 }
9706
9707 ht_capie.ampdu_params_info = (IEEE80211_HT_CAP_AMPDU_FACTOR&0x03);
9708 @@ -3305,7 +3602,7 @@ unsigned int rtw_restructure_ht_ie(_adap
9709 }
9710
9711 //the fucntion is > passive_level (in critical_section)
9712 -void rtw_update_ht_cap(_adapter *padapter, u8 *pie, uint ie_len)
9713 +void rtw_update_ht_cap(_adapter *padapter, u8 *pie, uint ie_len, u8 channel)
9714 {
9715 u8 *p, max_ampdu_sz;
9716 int len;
9717 @@ -3320,7 +3617,7 @@ void rtw_update_ht_cap(_adapter *padapte
9718 //struct wlan_network *pcur_network = &(pmlmepriv->cur_network);;
9719 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
9720 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
9721 -
9722 + u8 cbw40_enable=0;
9723
9724 if(!phtpriv->ht_option)
9725 return;
9726 @@ -3333,11 +3630,12 @@ void rtw_update_ht_cap(_adapter *padapte
9727 //maybe needs check if ap supports rx ampdu.
9728 if((phtpriv->ampdu_enable==_FALSE) &&(pregistrypriv->ampdu_enable==1))
9729 {
9730 - if(pregistrypriv->wifi_spec==1)
9731 + //In the wifi cert. test, the test Lab should turn off the AP's RX AMPDU. client doen't need to close the TX AMPDU
9732 + /*if(pregistrypriv->wifi_spec==1)
9733 {
9734 phtpriv->ampdu_enable = _FALSE;
9735 }
9736 - else
9737 + else*/
9738 {
9739 phtpriv->ampdu_enable = _TRUE;
9740 }
9741 @@ -3357,13 +3655,13 @@ void rtw_update_ht_cap(_adapter *padapte
9742 max_ampdu_sz = (pht_capie->ampdu_params_info & IEEE80211_HT_CAP_AMPDU_FACTOR);
9743 max_ampdu_sz = 1 << (max_ampdu_sz+3); // max_ampdu_sz (kbytes);
9744
9745 - //DBG_8192C("rtw_update_ht_cap(): max_ampdu_sz=%d\n", max_ampdu_sz);
9746 + //DBG_871X("rtw_update_ht_cap(): max_ampdu_sz=%d\n", max_ampdu_sz);
9747 phtpriv->rx_ampdu_maxlen = max_ampdu_sz;
9748
9749 }
9750 -
9751
9752 - len=0;
9753 +
9754 + len=0;
9755 p = rtw_get_ie(pie+sizeof (NDIS_802_11_FIXED_IEs), _HT_ADD_INFO_IE_, &len, ie_len-sizeof (NDIS_802_11_FIXED_IEs));
9756 if(p && len>0)
9757 {
9758 @@ -3371,12 +3669,56 @@ void rtw_update_ht_cap(_adapter *padapte
9759 //todo:
9760 }
9761
9762 + if( channel > 14 )
9763 + {
9764 + if( pregistrypriv->cbw40_enable & BIT(1) )
9765 + cbw40_enable = 1;
9766 + }
9767 + else
9768 + if( pregistrypriv->cbw40_enable & BIT(0) )
9769 + cbw40_enable = 1;
9770 +
9771
9772 //update cur_bwmode & cur_ch_offset
9773 - if ((pregistrypriv->cbw40_enable) &&
9774 - (pmlmeinfo->HT_caps.HT_cap_element.HT_caps_info & BIT(1)) &&
9775 + if ((cbw40_enable) &&
9776 + (pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info & BIT(1)) &&
9777 (pmlmeinfo->HT_info.infos[0] & BIT(2)))
9778 {
9779 + int i;
9780 + u8 rf_type;
9781 +
9782 + rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
9783 +
9784 + //update the MCS rates
9785 + for (i = 0; i < 16; i++)
9786 + {
9787 + if((rf_type == RF_1T1R) || (rf_type == RF_1T2R))
9788 + {
9789 + pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_1R[i];
9790 + }
9791 + else
9792 + {
9793 + #ifdef CONFIG_DISABLE_MCS13TO15
9794 + if(pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40 && pregistrypriv->wifi_spec != 1 )
9795 + {
9796 + pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_2R_MCS13TO15_OFF[i];
9797 + }
9798 + else
9799 + pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_2R[i];
9800 + #else
9801 + pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_2R[i];
9802 + #endif //CONFIG_DISABLE_MCS13TO15
9803 + }
9804 + #ifdef RTL8192C_RECONFIG_TO_1T1R
9805 + {
9806 + pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_1R[i];
9807 + }
9808 + #endif
9809 +
9810 + if(pregistrypriv->special_rf_path)
9811 + pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_1R[i];
9812 +
9813 + }
9814 //switch to the 40M Hz mode accoring to the AP
9815 pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40;
9816 switch ((pmlmeinfo->HT_info.infos[0] & 0x3))
9817 @@ -3392,13 +3734,13 @@ void rtw_update_ht_cap(_adapter *padapte
9818 default:
9819 pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
9820 break;
9821 - }
9822 + }
9823 }
9824
9825 - //
9826 + //
9827 // Config SM Power Save setting
9828 //
9829 - pmlmeinfo->SM_PS = (pmlmeinfo->HT_caps.HT_cap_element.HT_caps_info & 0x0C) >> 2;
9830 + pmlmeinfo->SM_PS = (pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info & 0x0C) >> 2;
9831 if(pmlmeinfo->SM_PS == WLAN_HT_CAP_SM_PS_STATIC)
9832 {
9833 /*u8 i;
9834 @@ -3467,7 +3809,6 @@ void rtw_issue_addbareq_cmd(_adapter *pa
9835 struct sta_info *psta=NULL;
9836 struct ht_priv *phtpriv;
9837 struct pkt_attrib *pattrib =&pxmitframe->attrib;
9838 - struct sta_priv *pstapriv = &padapter->stapriv;
9839 s32 bmcst = IS_MCAST(pattrib->ra);
9840
9841 if(bmcst || (padapter->mlmepriv.LinkDetectInfo.bTxBusyTraffic == _FALSE))
9842 @@ -3478,10 +3819,23 @@ void rtw_issue_addbareq_cmd(_adapter *pa
9843 if (pattrib->psta)
9844 psta = pattrib->psta;
9845 else
9846 + {
9847 + DBG_871X("%s, call rtw_get_stainfo()\n", __func__);
9848 psta = rtw_get_stainfo(&padapter->stapriv, pattrib->ra);
9849 + }
9850
9851 if(psta==NULL)
9852 + {
9853 + DBG_871X("%s, psta==NUL\n", __func__);
9854 return;
9855 + }
9856 +
9857 + if(!(psta->state &_FW_LINKED))
9858 + {
9859 + DBG_871X("%s, psta->state(0x%x) != _FW_LINKED\n", __func__, psta->state);
9860 + return;
9861 + }
9862 +
9863
9864 phtpriv = &psta->htpriv;
9865
9866 @@ -3503,6 +3857,18 @@ void rtw_issue_addbareq_cmd(_adapter *pa
9867 #endif
9868
9869 #ifdef CONFIG_LAYER2_ROAMING
9870 +inline void rtw_set_roaming(_adapter *adapter, u8 to_roaming)
9871 +{
9872 + if (to_roaming == 0)
9873 + adapter->mlmepriv.to_join = _FALSE;
9874 + adapter->mlmepriv.to_roaming = to_roaming;
9875 +}
9876 +
9877 +inline u8 rtw_to_roaming(_adapter *adapter)
9878 +{
9879 + return adapter->mlmepriv.to_roaming;
9880 +}
9881 +
9882 void rtw_roaming(_adapter *padapter, struct wlan_network *tgt_network)
9883 {
9884 _irqL irqL;
9885 @@ -3524,7 +3890,7 @@ void _rtw_roaming(_adapter *padapter, st
9886 else
9887 pnetwork = &pmlmepriv->cur_network;
9888
9889 - if(0 < pmlmepriv->to_roaming) {
9890 + if(0 < rtw_to_roaming(padapter)) {
9891 DBG_871X("roaming from %s("MAC_FMT"), length:%d\n",
9892 pnetwork->network.Ssid.Ssid, MAC_ARG(pnetwork->network.MacAddress),
9893 pnetwork->network.Ssid.SsidLength);
9894 @@ -3539,7 +3905,7 @@ void _rtw_roaming(_adapter *padapter, st
9895 DBG_871X("roaming do_join return %d\n", do_join_r);
9896 pmlmepriv->to_roaming--;
9897
9898 - if(0< pmlmepriv->to_roaming) {
9899 + if(0< rtw_to_roaming(padapter)) {
9900 continue;
9901 } else {
9902 DBG_871X("%s(%d) -to roaming fail, indicate_disconnect\n", __FUNCTION__,__LINE__);
9903 @@ -3553,3 +3919,49 @@ void _rtw_roaming(_adapter *padapter, st
9904 }
9905 #endif
9906
9907 +#ifdef CONFIG_CONCURRENT_MODE
9908 +sint rtw_buddy_adapter_up(_adapter *padapter)
9909 +{
9910 + sint res = _FALSE;
9911 +
9912 + if(padapter == NULL)
9913 + return res;
9914 +
9915 +
9916 + if(padapter->pbuddy_adapter == NULL)
9917 + {
9918 + res = _FALSE;
9919 + }
9920 + else if( (padapter->pbuddy_adapter->bDriverStopped) || (padapter->pbuddy_adapter->bSurpriseRemoved) ||
9921 + (padapter->pbuddy_adapter->bup == _FALSE) || (padapter->pbuddy_adapter->hw_init_completed == _FALSE))
9922 + {
9923 + res = _FALSE;
9924 + }
9925 + else
9926 + {
9927 + res = _TRUE;
9928 + }
9929 +
9930 + return res;
9931 +
9932 +}
9933 +
9934 +sint check_buddy_fwstate(_adapter *padapter, sint state)
9935 +{
9936 + if(padapter == NULL)
9937 + return _FALSE;
9938 +
9939 + if(padapter->pbuddy_adapter == NULL)
9940 + return _FALSE;
9941 +
9942 + if ((state == WIFI_FW_NULL_STATE) &&
9943 + (padapter->pbuddy_adapter->mlmepriv.fw_state == WIFI_FW_NULL_STATE))
9944 + return _TRUE;
9945 +
9946 + if (padapter->pbuddy_adapter->mlmepriv.fw_state & state)
9947 + return _TRUE;
9948 +
9949 + return _FALSE;
9950 +}
9951 +#endif //CONFIG_CONCURRENT_MODE
9952 +
9953 --- a/drivers/net/wireless/rtl8192cu/core/rtw_mlme_ext.c
9954 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_mlme_ext.c
9955 @@ -1,6 +1,6 @@
9956 /******************************************************************************
9957 *
9958 - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
9959 + * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
9960 *
9961 * This program is free software; you can redistribute it and/or modify it
9962 * under the terms of version 2 of the GNU General Public License as
9963 @@ -73,24 +73,33 @@ struct mlme_handler mlme_ap_tbl[]={
9964 #endif
9965
9966 struct action_handler OnAction_tbl[]={
9967 - {RTW_WLAN_CATEGORY_SPECTRUM_MGMT, "ACTION_SPECTRUM_MGMT", &DoReserved},
9968 + {RTW_WLAN_CATEGORY_SPECTRUM_MGMT, "ACTION_SPECTRUM_MGMT", on_action_spct},
9969 {RTW_WLAN_CATEGORY_QOS, "ACTION_QOS", &OnAction_qos},
9970 {RTW_WLAN_CATEGORY_DLS, "ACTION_DLS", &OnAction_dls},
9971 {RTW_WLAN_CATEGORY_BACK, "ACTION_BACK", &OnAction_back},
9972 - {RTW_WLAN_CATEGORY_PUBLIC, "ACTION_PUBLIC", &OnAction_public},
9973 + {RTW_WLAN_CATEGORY_PUBLIC, "ACTION_PUBLIC", on_action_public},
9974 {RTW_WLAN_CATEGORY_RADIO_MEASUREMENT, "ACTION_RADIO_MEASUREMENT", &DoReserved},
9975 {RTW_WLAN_CATEGORY_FT, "ACTION_FT", &DoReserved},
9976 {RTW_WLAN_CATEGORY_HT, "ACTION_HT", &OnAction_ht},
9977 +#ifdef CONFIG_IEEE80211W
9978 + {RTW_WLAN_CATEGORY_SA_QUERY, "ACTION_SA_QUERY", &OnAction_sa_query},
9979 +#else
9980 {RTW_WLAN_CATEGORY_SA_QUERY, "ACTION_SA_QUERY", &DoReserved},
9981 +#endif //CONFIG_IEEE80211W
9982 + //add for CONFIG_IEEE80211W
9983 + {RTW_WLAN_CATEGORY_UNPROTECTED_WNM, "ACTION_UNPROTECTED_WNM", &DoReserved},
9984 + {RTW_WLAN_CATEGORY_SELF_PROTECTED, "ACTION_SELF_PROTECTED", &DoReserved},
9985 {RTW_WLAN_CATEGORY_WMM, "ACTION_WMM", &OnAction_wmm},
9986 {RTW_WLAN_CATEGORY_P2P, "ACTION_P2P", &OnAction_p2p},
9987 };
9988
9989
9990 +u8 null_addr[ETH_ALEN]= {0,0,0,0,0,0};
9991 +
9992 /**************************************************
9993 OUI definitions for the vendor specific IE
9994 ***************************************************/
9995 -unsigned char WPA_OUI[] = {0x00, 0x50, 0xf2, 0x01};
9996 +unsigned char RTW_WPA_OUI[] = {0x00, 0x50, 0xf2, 0x01};
9997 unsigned char WMM_OUI[] = {0x00, 0x50, 0xf2, 0x02};
9998 unsigned char WPS_OUI[] = {0x00, 0x50, 0xf2, 0x04};
9999 unsigned char P2P_OUI[] = {0x50,0x6F,0x9A,0x09};
10000 @@ -108,7 +117,8 @@ extern unsigned char REALTEK_96B_IE[];
10001 MCS rate definitions
10002 *********************************************************/
10003 #ifdef CONFIG_DISABLE_MCS13TO15
10004 -unsigned char MCS_rate_2R[16] = {0xff, 0x1f, 0x0, 0x0, 0x01, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
10005 +unsigned char MCS_rate_2R_MCS13TO15_OFF[16] = {0xff, 0x1f, 0x0, 0x0, 0x01, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
10006 +unsigned char MCS_rate_2R[16] = {0xff, 0xff, 0x0, 0x0, 0x01, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
10007 #else //CONFIG_DISABLE_MCS13TO15
10008 unsigned char MCS_rate_2R[16] = {0xff, 0xff, 0x0, 0x0, 0x01, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
10009 #endif //CONFIG_DISABLE_MCS13TO15
10010 @@ -147,6 +157,7 @@ static RT_CHANNEL_PLAN_2G RTW_ChannelPla
10011 {{1,2,3,4,5,6,7,8,9,10,11},11}, // 0x02, RT_CHANNEL_DOMAIN_2G_FCC1
10012 {{1,2,3,4,5,6,7,8,9,10,11,12,13,14},14}, // 0x03, RT_CHANNEL_DOMAIN_2G_MIKK1
10013 {{10,11,12,13},4}, // 0x04, RT_CHANNEL_DOMAIN_2G_ETSI2
10014 + {{},0}, // 0x05, RT_CHANNEL_DOMAIN_2G_NULL
10015 };
10016
10017 static RT_CHANNEL_PLAN_5G RTW_ChannelPlan5G[RT_CHANNEL_DOMAIN_5G_MAX] = {
10018 @@ -171,6 +182,7 @@ static RT_CHANNEL_PLAN_5G RTW_ChannelPla
10019 //===== Driver self defined for old channel plan Compatible ,Remember to modify if have new channel plan definition =====
10020 {{36,40,44,48,52,56,60,64,100,104,108,112,116,132,136,140,149,153,157,161,165},21}, // 0x11, RT_CHANNEL_DOMAIN_5G_FCC
10021 {{36,40,44,48},4}, // 0x12, RT_CHANNEL_DOMAIN_5G_JAPAN_NO_DFS
10022 + {{36,40,44,48,149,153,157,161},8}, // 0x13, RT_CHANNEL_DOMAIN_5G_FCC4_NO_DFS
10023 };
10024
10025 static RT_CHANNEL_PLAN_MAP RTW_ChannelPlanMap[RT_CHANNEL_DOMAIN_MAX] = {
10026 @@ -180,8 +192,8 @@ static RT_CHANNEL_PLAN_MAP RTW_ChannelPl
10027 {0x01,0x01}, //0x02, RT_CHANNEL_DOMAIN_ETSI
10028 {0x01,0x00}, //0x03, RT_CHANNEL_DOMAIN_SPAIN
10029 {0x01,0x00}, //0x04, RT_CHANNEL_DOMAIN_FRANCE
10030 - {0x01,0x00}, //0x05, RT_CHANNEL_DOMAIN_MKK
10031 - {0x01,0x00}, //0x06, RT_CHANNEL_DOMAIN_MKK1
10032 + {0x03,0x00}, //0x05, RT_CHANNEL_DOMAIN_MKK
10033 + {0x03,0x00}, //0x06, RT_CHANNEL_DOMAIN_MKK1
10034 {0x01,0x09}, //0x07, RT_CHANNEL_DOMAIN_ISRAEL
10035 {0x03,0x09}, //0x08, RT_CHANNEL_DOMAIN_TELEC
10036 {0x03,0x00}, //0x09, RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN
10037 @@ -196,18 +208,17 @@ static RT_CHANNEL_PLAN_MAP RTW_ChannelPl
10038 {0x01,0x12}, //0x12, RT_CHANNEL_DOMAIN_JAPAN_NO_DFS
10039 {0x00,0x04}, //0x13, RT_CHANNEL_DOMAIN_WORLD_WIDE_5G
10040 {0x02,0x10}, //0x14, RT_CHANNEL_DOMAIN_TAIWAN_NO_DFS
10041 - {0x00,0x00}, //0x15,
10042 - {0x00,0x00}, //0x16,
10043 - {0x00,0x00}, //0x17,
10044 - {0x00,0x00}, //0x18,
10045 - {0x00,0x00}, //0x19,
10046 + {0x00,0x12}, //0x15, RT_CHANNEL_DOMAIN_ETSI_NO_DFS
10047 + {0x00,0x13}, //0x16, RT_CHANNEL_DOMAIN_KOREA_NO_DFS
10048 + {0x03,0x12}, //0x17, RT_CHANNEL_DOMAIN_JAPAN_NO_DFS
10049 + {0x05,0x08}, //0x18, RT_CHANNEL_DOMAIN_PAKISTAN_NO_DFS
10050 + {0x02,0x08}, //0x19, RT_CHANNEL_DOMAIN_TAIWAN2_NO_DFS
10051 {0x00,0x00}, //0x1A,
10052 {0x00,0x00}, //0x1B,
10053 {0x00,0x00}, //0x1C,
10054 {0x00,0x00}, //0x1D,
10055 {0x00,0x00}, //0x1E,
10056 - {0x00,0x00}, //0x1F,
10057 -
10058 + {0x05,0x04}, //0x1F, RT_CHANNEL_DOMAIN_WORLD_WIDE_ONLY_5G
10059 //===== 0x20 ~ 0x7F ,New Define =====
10060 {0x00,0x00}, //0x20, RT_CHANNEL_DOMAIN_WORLD_NULL
10061 {0x01,0x00}, //0x21, RT_CHANNEL_DOMAIN_ETSI1_NULL
10062 @@ -244,24 +255,44 @@ static RT_CHANNEL_PLAN_MAP RTW_ChannelPl
10063 {0x02,0x10}, //0x40, RT_CHANNEL_DOMAIN_FCC1_NCC2
10064 };
10065
10066 -static RT_CHANNEL_PLAN_MAP RTW_CHANNEL_PLAN_MAP_REALTEK_DEFINE = {0x02,0x05};
10067 +static RT_CHANNEL_PLAN_MAP RTW_CHANNEL_PLAN_MAP_REALTEK_DEFINE = {0x03,0x02}; //use the conbination for max channel numbers
10068
10069 /*
10070 -* Test if the given @param channel_set contains the channel specified by @param channel_num
10071 -* @param channel_set the given channel set
10072 -* @param channel_num the given channel number
10073 -* @return _TRUE or _FALSE
10074 -*/
10075 -int rtw_is_channel_set_contains_channel(RT_CHANNEL_INFO *channel_set, const u32 channel_num)
10076 + * Search the @param ch in given @param ch_set
10077 + * @ch_set: the given channel set
10078 + * @ch: the given channel number
10079 + *
10080 + * return the index of channel_num in channel_set, -1 if not found
10081 + */
10082 +int rtw_ch_set_search_ch(RT_CHANNEL_INFO *ch_set, const u32 ch)
10083 {
10084 int i;
10085 - for(i=0;channel_set[i].ChannelNum!=0;i++){
10086 - if(channel_num == channel_set[i].ChannelNum)
10087 - return _TRUE;
10088 + for(i=0;ch_set[i].ChannelNum!=0;i++){
10089 + if(ch == ch_set[i].ChannelNum)
10090 + break;
10091 }
10092 - if(channel_set[i].ChannelNum == 0)
10093 - return _FALSE;
10094 - return _TRUE;
10095 +
10096 + if(i >= ch_set[i].ChannelNum)
10097 + return -1;
10098 + return i;
10099 +}
10100 +
10101 +/*
10102 + * Check the @param ch is fit with setband setting of @param adapter
10103 + * @adapter: the given adapter
10104 + * @ch: the given channel number
10105 + *
10106 + * return _TRUE when check valid, _FALSE not valid
10107 + */
10108 +bool rtw_mlme_band_check(_adapter *adapter, const u32 ch)
10109 +{
10110 + if (adapter->setband == GHZ24_50 /* 2.4G and 5G */
10111 + || (adapter->setband == GHZ_24 && ch < 35) /* 2.4G only */
10112 + || (adapter->setband == GHZ_50 && ch > 35) /* 5G only */
10113 + ) {
10114 + return _TRUE;
10115 + }
10116 + return _FALSE;
10117 }
10118
10119 /****************************************************************************
10120 @@ -286,20 +317,21 @@ static void init_mlme_ext_priv_value(_ad
10121 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
10122 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
10123
10124 -#ifdef CONFIG_TDLS
10125 - u8 i;
10126 -#endif
10127 -
10128 //unsigned char default_channel_set[MAX_CHANNEL_NUM] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, 0};
10129 unsigned char mixed_datarate[NumRates] = {_1M_RATE_, _2M_RATE_, _5M_RATE_, _11M_RATE_, _6M_RATE_,_9M_RATE_, _12M_RATE_, _18M_RATE_, _24M_RATE_, _36M_RATE_, _48M_RATE_, _54M_RATE_, 0xff};
10130 - unsigned char mixed_basicrate[NumRates] ={_1M_RATE_, _2M_RATE_, _5M_RATE_, _11M_RATE_, 0xff,};
10131 + unsigned char mixed_basicrate[NumRates] ={_1M_RATE_, _2M_RATE_, _5M_RATE_, _11M_RATE_, _6M_RATE_, _12M_RATE_, _24M_RATE_, 0xff,};
10132
10133 ATOMIC_SET(&pmlmeext->event_seq, 0);
10134 pmlmeext->mgnt_seq = 0;//reset to zero when disconnect at client mode
10135 -
10136 +#ifdef CONFIG_IEEE80211W
10137 + pmlmeext->sa_query_seq = 0;
10138 + pmlmeext->mgnt_80211w_IPN=0;
10139 + pmlmeext->mgnt_80211w_IPN_rx=0;
10140 +#endif //CONFIG_IEEE80211W
10141 pmlmeext->cur_channel = padapter->registrypriv.channel;
10142 pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
10143 pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
10144 +
10145 pmlmeext->retry = 0;
10146
10147 pmlmeext->cur_wireless_mode = padapter->registrypriv.wireless_mode;
10148 @@ -309,10 +341,14 @@ static void init_mlme_ext_priv_value(_ad
10149 _rtw_memcpy(pmlmeext->datarate, mixed_datarate, NumRates);
10150 _rtw_memcpy(pmlmeext->basicrate, mixed_basicrate, NumRates);
10151
10152 + if(pmlmeext->cur_channel > 14)
10153 + pmlmeext->tx_rate = IEEE80211_OFDM_RATE_6MB;
10154 + else
10155 + pmlmeext->tx_rate = IEEE80211_CCK_RATE_1MB;
10156 +
10157 pmlmeext->sitesurvey_res.state = SCAN_DISABLE;
10158 pmlmeext->sitesurvey_res.channel_idx = 0;
10159 pmlmeext->sitesurvey_res.bss_cnt = 0;
10160 -
10161 pmlmeext->scan_abort = _FALSE;
10162
10163 pmlmeinfo->state = WIFI_FW_NULL_STATE;
10164 @@ -333,6 +369,79 @@ static void init_mlme_ext_priv_value(_ad
10165 pmlmeinfo->preamble_mode = PREAMBLE_AUTO;
10166
10167 pmlmeinfo->dialogToken = 0;
10168 +
10169 + pmlmeext->action_public_rxseq = 0xffff;
10170 + pmlmeext->action_public_dialog_token = 0xff;
10171 +}
10172 +
10173 +static int has_channel(RT_CHANNEL_INFO *channel_set,
10174 + u8 chanset_size,
10175 + u8 chan) {
10176 + int i;
10177 +
10178 + for (i = 0; i < chanset_size; i++) {
10179 + if (channel_set[i].ChannelNum == chan) {
10180 + return 1;
10181 + }
10182 + }
10183 +
10184 + return 0;
10185 +}
10186 +
10187 +static void init_channel_list(_adapter *padapter, RT_CHANNEL_INFO *channel_set,
10188 + u8 chanset_size,
10189 + struct p2p_channels *channel_list) {
10190 +
10191 + struct p2p_oper_class_map op_class[] = {
10192 + { IEEE80211G, 81, 1, 13, 1, BW20 },
10193 + { IEEE80211G, 82, 14, 14, 1, BW20 },
10194 +#if 0 /* Do not enable HT40 on 2 GHz */
10195 + { IEEE80211G, 83, 1, 9, 1, BW40PLUS },
10196 + { IEEE80211G, 84, 5, 13, 1, BW40MINUS },
10197 +#endif
10198 + { IEEE80211A, 115, 36, 48, 4, BW20 },
10199 + { IEEE80211A, 116, 36, 44, 8, BW40PLUS },
10200 + { IEEE80211A, 117, 40, 48, 8, BW40MINUS },
10201 + { IEEE80211A, 124, 149, 161, 4, BW20 },
10202 + { IEEE80211A, 125, 149, 169, 4, BW20 },
10203 + { IEEE80211A, 126, 149, 157, 8, BW40PLUS },
10204 + { IEEE80211A, 127, 153, 161, 8, BW40MINUS },
10205 + { -1, 0, 0, 0, 0, BW20 }
10206 + };
10207 +
10208 + int cla, op;
10209 +
10210 + cla = 0;
10211 +
10212 + for (op = 0; op_class[op].op_class; op++) {
10213 + u8 ch;
10214 + struct p2p_oper_class_map *o = &op_class[op];
10215 + struct p2p_reg_class *reg = NULL;
10216 +
10217 + for (ch = o->min_chan; ch <= o->max_chan; ch += o->inc) {
10218 + if (!has_channel(channel_set, chanset_size, ch)) {
10219 + continue;
10220 + }
10221 +
10222 + if ((0 == padapter->registrypriv.ht_enable) && (8 == o->inc))
10223 + continue;
10224 +
10225 + if ((0 == (padapter->registrypriv.cbw40_enable & BIT(1))) &&
10226 + ((BW40MINUS == o->bw) || (BW40PLUS == o->bw)))
10227 + continue;
10228 +
10229 + if (reg == NULL) {
10230 + reg = &channel_list->reg_class[cla];
10231 + cla++;
10232 + reg->reg_class = o->op_class;
10233 + reg->channels = 0;
10234 + }
10235 + reg->channel[reg->channels] = ch;
10236 + reg->channels++;
10237 + }
10238 + }
10239 + channel_list->reg_classes = cla;
10240 +
10241 }
10242
10243 static u8 init_channel_set(_adapter* padapter, u8 ChannelPlan, RT_CHANNEL_INFO *channel_set)
10244 @@ -407,7 +516,7 @@ static u8 init_channel_set(_adapter* pad
10245 if ( channel_set[chanset_size].ChannelNum <= 48
10246 || channel_set[chanset_size].ChannelNum >= 149 )
10247 {
10248 - if(RT_CHANNEL_DOMAIN_WORLD_WIDE_5G== ChannelPlan)//passive scan for all 5G channels
10249 + if(RT_CHANNEL_DOMAIN_WORLD_WIDE_5G == ChannelPlan)//passive scan for all 5G channels
10250 channel_set[chanset_size].ScanType = SCAN_PASSIVE;
10251 else
10252 channel_set[chanset_size].ScanType = SCAN_ACTIVE;
10253 @@ -421,7 +530,7 @@ static u8 init_channel_set(_adapter* pad
10254 if ( RTW_ChannelPlan5G[Index5G].Channel[index] <= 48
10255 || RTW_ChannelPlan5G[Index5G].Channel[index] >= 149 ) {
10256 channel_set[chanset_size].ChannelNum = RTW_ChannelPlan5G[Index5G].Channel[index];
10257 - if(RT_CHANNEL_DOMAIN_WORLD_WIDE_5G== ChannelPlan)//passive scan for all 5G channels
10258 + if(RT_CHANNEL_DOMAIN_WORLD_WIDE_5G == ChannelPlan)//passive scan for all 5G channels
10259 channel_set[chanset_size].ScanType = SCAN_PASSIVE;
10260 else
10261 channel_set[chanset_size].ScanType = SCAN_ACTIVE;
10262 @@ -460,10 +569,16 @@ int init_mlme_ext_priv(_adapter* padapte
10263 #endif
10264
10265 pmlmeext->max_chan_nums = init_channel_set(padapter, pmlmepriv->ChannelPlan,pmlmeext->channel_set);
10266 -
10267 + init_channel_list(padapter, pmlmeext->channel_set, pmlmeext->max_chan_nums, &pmlmeext->channel_list);
10268 +
10269 pmlmeext->chan_scan_time = SURVEY_TO;
10270 pmlmeext->mlmeext_init = _TRUE;
10271
10272 +
10273 +#ifdef CONFIG_ACTIVE_KEEP_ALIVE_CHECK
10274 + pmlmeext->active_keep_alive_check = _TRUE;
10275 +#endif
10276 +
10277 return res;
10278
10279 }
10280 @@ -483,69 +598,6 @@ void free_mlme_ext_priv (struct mlme_ext
10281 }
10282 }
10283
10284 -#ifdef CONFIG_TDLS
10285 -int rtw_init_tdls_info(_adapter* padapter)
10286 -{
10287 - int res = _SUCCESS;
10288 - int i;
10289 - struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
10290 -
10291 - _rtw_memset(ptdlsinfo, 0, sizeof(struct tdls_info) );
10292 -
10293 - ptdlsinfo->ap_prohibited = _FALSE;
10294 - ptdlsinfo->setup_state = UN_TDLS_STATE;
10295 - ptdlsinfo->sta_cnt = 0;
10296 - ptdlsinfo->sta_maximum = _FALSE;
10297 - ptdlsinfo->cam_entry_to_write = 6;
10298 - ptdlsinfo->cam_entry_to_clear = 0;
10299 - ptdlsinfo->ch_sensing = 0;
10300 - ptdlsinfo->cur_channel = 0;
10301 - ptdlsinfo->candidate_ch = 1; //when inplement channel switching, default candidate channel is 1
10302 -
10303 - _rtw_spinlock_init(&ptdlsinfo->cmd_lock);
10304 - _rtw_spinlock_init(&ptdlsinfo->hdl_lock);
10305 -
10306 - return res;
10307 -
10308 -}
10309 -
10310 -void rtw_free_tdls_info(struct tdls_info *ptdlsinfo)
10311 -{
10312 - _rtw_spinlock_free(&ptdlsinfo->cmd_lock);
10313 - _rtw_spinlock_free(&ptdlsinfo->hdl_lock);
10314 -
10315 - _rtw_memset(ptdlsinfo, 0, sizeof(struct tdls_info) );
10316 -
10317 -}
10318 -#endif //CONFIG_TDLS
10319 -
10320 -static void UpdateBrateTbl(
10321 - IN PADAPTER Adapter,
10322 - IN u8 *mBratesOS
10323 -)
10324 -{
10325 - u8 i;
10326 - u8 rate;
10327 -
10328 - // 1M, 2M, 5.5M, 11M, 6M, 12M, 24M are mandatory.
10329 - for(i=0;i<NDIS_802_11_LENGTH_RATES_EX;i++)
10330 - {
10331 - rate = mBratesOS[i] & 0x7f;
10332 - switch(rate)
10333 - {
10334 - case IEEE80211_CCK_RATE_1MB:
10335 - case IEEE80211_CCK_RATE_2MB:
10336 - case IEEE80211_CCK_RATE_5MB:
10337 - case IEEE80211_CCK_RATE_11MB:
10338 - case IEEE80211_OFDM_RATE_6MB:
10339 - case IEEE80211_OFDM_RATE_12MB:
10340 - case IEEE80211_OFDM_RATE_24MB:
10341 - mBratesOS[i] |= IEEE80211_BASIC_RATE_MASK;
10342 - break;
10343 - }
10344 - }
10345 -
10346 -}
10347 static u8 cmp_pkt_chnl_diff(_adapter *padapter,u8* pframe,uint packet_len)
10348 { // if the channel is same, return 0. else return channel differential
10349 uint len;
10350 @@ -569,11 +621,11 @@ static u8 cmp_pkt_chnl_diff(_adapter *pa
10351 return 0;
10352 }
10353 }
10354 +
10355 static void _mgt_dispatcher(_adapter *padapter, struct mlme_handler *ptable, union recv_frame *precv_frame)
10356 {
10357 u8 bc_addr[ETH_ALEN] = {0xff,0xff,0xff,0xff,0xff,0xff};
10358 u8 *pframe = precv_frame->u.hdr.rx_data;
10359 - uint len = precv_frame->u.hdr.len;
10360
10361 if(ptable->func)
10362 {
10363 @@ -593,10 +645,12 @@ void mgt_dispatcher(_adapter *padapter,
10364 {
10365 int index;
10366 struct mlme_handler *ptable;
10367 +#ifdef CONFIG_AP_MODE
10368 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
10369 +#endif //CONFIG_AP_MODE
10370 u8 bc_addr[ETH_ALEN] = {0xff,0xff,0xff,0xff,0xff,0xff};
10371 u8 *pframe = precv_frame->u.hdr.rx_data;
10372 - uint len = precv_frame->u.hdr.len;
10373 + struct sta_info *psta = rtw_get_stainfo(&padapter->stapriv, GetAddr2Ptr(pframe));
10374
10375 RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
10376 ("+mgt_dispatcher: type(0x%x) subtype(0x%x)\n",
10377 @@ -606,11 +660,11 @@ void mgt_dispatcher(_adapter *padapter,
10378 {
10379 u8 *pbuf;
10380 pbuf = GetAddr1Ptr(pframe);
10381 - DBG_8192C("A1-%x:%x:%x:%x:%x:%x\n", *pbuf, *(pbuf+1), *(pbuf+2), *(pbuf+3), *(pbuf+4), *(pbuf+5));
10382 + DBG_871X("A1-%x:%x:%x:%x:%x:%x\n", *pbuf, *(pbuf+1), *(pbuf+2), *(pbuf+3), *(pbuf+4), *(pbuf+5));
10383 pbuf = GetAddr2Ptr(pframe);
10384 - DBG_8192C("A2-%x:%x:%x:%x:%x:%x\n", *pbuf, *(pbuf+1), *(pbuf+2), *(pbuf+3), *(pbuf+4), *(pbuf+5));
10385 + DBG_871X("A2-%x:%x:%x:%x:%x:%x\n", *pbuf, *(pbuf+1), *(pbuf+2), *(pbuf+3), *(pbuf+4), *(pbuf+5));
10386 pbuf = GetAddr3Ptr(pframe);
10387 - DBG_8192C("A3-%x:%x:%x:%x:%x:%x\n", *pbuf, *(pbuf+1), *(pbuf+2), *(pbuf+3), *(pbuf+4), *(pbuf+5));
10388 + DBG_871X("A3-%x:%x:%x:%x:%x:%x\n", *pbuf, *(pbuf+1), *(pbuf+2), *(pbuf+3), *(pbuf+4), *(pbuf+5));
10389 }
10390 #endif
10391
10392 @@ -633,13 +687,15 @@ void mgt_dispatcher(_adapter *padapter,
10393
10394 #ifdef CONFIG_TDLS
10395 if((index << 4)==WIFI_ACTION){
10396 - //category==public (4), action==TDLS_DISCOVERY_RESPONSE
10397 - if(*(pframe+24)==0x04 && *(pframe+25)==TDLS_DISCOVERY_RESPONSE){
10398 - DBG_8192C("recv tdls discovery response frame\n");
10399 + //category==RTW_WLAN_CATEGORY_PUBLIC, action==TDLS_DISCOVERY_RESPONSE
10400 + if(*(pframe + IEEE80211_MGMT_HDR_LEN ) == RTW_WLAN_CATEGORY_PUBLIC
10401 + && *(pframe + IEEE80211_MGMT_HDR_LEN + 1) == TDLS_DISCOVERY_RESPONSE )
10402 + {
10403 + DBG_871X("recv tdls discovery response frame\n");
10404 On_TDLS_Dis_Rsp(padapter, precv_frame);
10405 }
10406 }
10407 -#endif
10408 +#endif //CONFIG_TDLS
10409
10410 if (index > 13)
10411 {
10412 @@ -648,18 +704,19 @@ void mgt_dispatcher(_adapter *padapter,
10413 }
10414 ptable += index;
10415
10416 -#if 0//gtest
10417 - sa = get_sa(pframe);
10418 - psta = search_assoc_sta(sa, padapter);
10419 - // only check last cache seq number for management frame
10420 - if (psta != NULL) {
10421 - if (GetRetry(pframe)) {
10422 - if (GetTupleCache(pframe) == psta->rxcache->nonqos_seq){
10423 - RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("drop due to decache!\n"));
10424 +#if 1
10425 + if (psta != NULL)
10426 + {
10427 + if (GetRetry(pframe))
10428 + {
10429 + if (precv_frame->u.hdr.attrib.seq_num == psta->RxMgmtFrameSeqNum)
10430 + {
10431 + /* drop the duplicate management frame */
10432 + DBG_871X("Drop duplicate management frame with seq_num = %d.\n", precv_frame->u.hdr.attrib.seq_num);
10433 return;
10434 }
10435 }
10436 - psta->rxcache->nonqos_seq = GetTupleCache(pframe);
10437 + psta->RxMgmtFrameSeqNum = precv_frame->u.hdr.attrib.seq_num;
10438 }
10439 #else
10440
10441 @@ -723,7 +780,37 @@ void mgt_dispatcher(_adapter *padapter,
10442 #ifdef CONFIG_P2P
10443 u32 p2p_listen_state_process(_adapter *padapter, unsigned char *da)
10444 {
10445 - issue_probersp_p2p( padapter, da);
10446 + bool response = _TRUE;
10447 +
10448 +#ifdef CONFIG_IOCTL_CFG80211
10449 + if( padapter->wdinfo.driver_interface == DRIVER_CFG80211 )
10450 + {
10451 + if (wdev_to_priv(padapter->rtw_wdev)->p2p_enabled == _FALSE
10452 + || padapter->mlmepriv.wps_probe_resp_ie == NULL
10453 + || padapter->mlmepriv.p2p_probe_resp_ie == NULL
10454 + )
10455 + {
10456 + DBG_871X("DON'T issue_probersp_p2p: p2p_enabled:%d, wps_probe_resp_ie:%p, p2p_probe_resp_ie:%p\n",
10457 + wdev_to_priv(padapter->rtw_wdev)->p2p_enabled,
10458 + padapter->mlmepriv.wps_probe_resp_ie,
10459 + padapter->mlmepriv.p2p_probe_resp_ie);
10460 + response = _FALSE;
10461 + }
10462 + }
10463 + else
10464 +#endif //CONFIG_IOCTL_CFG80211
10465 + if( padapter->wdinfo.driver_interface == DRIVER_WEXT )
10466 + {
10467 + // do nothing if the device name is empty
10468 + if ( !padapter->wdinfo.device_name_len )
10469 + {
10470 + response = _FALSE;
10471 + }
10472 + }
10473 +
10474 + if (response == _TRUE)
10475 + issue_probersp_p2p( padapter, da);
10476 +
10477 return _SUCCESS;
10478 }
10479 #endif //CONFIG_P2P
10480 @@ -750,6 +837,7 @@ unsigned int OnProbeReq(_adapter *padapt
10481 #ifdef CONFIG_P2P
10482 struct wifidirect_info *pwdinfo = &(padapter->wdinfo);
10483 struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.attrib;
10484 + u8 wifi_test_chk_rate = 1;
10485
10486 if ( !rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE) &&
10487 !rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE) &&
10488 @@ -764,7 +852,17 @@ unsigned int OnProbeReq(_adapter *padapt
10489 // mcs_rate = 2 -> CCK 5.5M rate
10490 // mcs_rate = 3 -> CCK 11M rate
10491 // In the P2P mode, the driver should not support the CCK rate
10492 - if ( pattrib->mcs_rate > 3 )
10493 +
10494 + // Commented by Kurt 2012/10/16
10495 + // IOT issue: Google Nexus7 use 1M rate to send p2p_probe_req after GO nego completed and Nexus7 is client
10496 +#ifdef CONFIG_WIFI_TEST
10497 + if ( pattrib->mcs_rate <= 3 )
10498 + {
10499 + wifi_test_chk_rate = 0;
10500 + }
10501 +#endif //CONFIG_WIFI_TEST
10502 +
10503 + if( wifi_test_chk_rate == 1 )
10504 {
10505 if((is_valid_p2p_probereq = process_probe_req_p2p_ie(pwdinfo, pframe, len)) == _TRUE)
10506 {
10507 @@ -800,6 +898,131 @@ _continue:
10508
10509 //DBG_871X("+OnProbeReq\n");
10510
10511 +#ifdef CONFIG_AUTO_AP_MODE
10512 + if(check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE &&
10513 + pmlmepriv->cur_network.join_res == _TRUE)
10514 + {
10515 + _irqL irqL;
10516 + struct sta_info *psta;
10517 + u8 *mac_addr, *peer_addr;
10518 + struct sta_priv *pstapriv = &padapter->stapriv;
10519 + u8 RC_OUI[4]={0x00,0xE0,0x4C,0x0A};
10520 + //EID[1] + EID_LEN[1] + RC_OUI[4] + MAC[6] + PairingID[2] + ChannelNum[2]
10521 +
10522 + p = rtw_get_ie(pframe + WLAN_HDR_A3_LEN + _PROBEREQ_IE_OFFSET_, _VENDOR_SPECIFIC_IE_, (int *)&ielen,
10523 + len - WLAN_HDR_A3_LEN - _PROBEREQ_IE_OFFSET_);
10524 +
10525 + if(!p || ielen !=14)
10526 + goto _non_rc_device;
10527 +
10528 + if(!_rtw_memcmp(p+2, RC_OUI, sizeof(RC_OUI)))
10529 + goto _non_rc_device;
10530 +
10531 + if(!_rtw_memcmp(p+6, get_sa(pframe), ETH_ALEN))
10532 + {
10533 + DBG_871X("%s, do rc pairing ("MAC_FMT"), but mac addr mismatch!("MAC_FMT")\n", __FUNCTION__,
10534 + MAC_ARG(get_sa(pframe)), MAC_ARG(p+6));
10535 +
10536 + goto _non_rc_device;
10537 + }
10538 +
10539 + DBG_871X("%s, got the pairing device("MAC_FMT")\n", __FUNCTION__, MAC_ARG(get_sa(pframe)));
10540 +
10541 + //new a station
10542 + psta = rtw_get_stainfo(pstapriv, get_sa(pframe));
10543 + if (psta == NULL)
10544 + {
10545 + // allocate a new one
10546 + DBG_871X("going to alloc stainfo for rc="MAC_FMT"\n", MAC_ARG(get_sa(pframe)));
10547 + psta = rtw_alloc_stainfo(pstapriv, get_sa(pframe));
10548 + if (psta == NULL)
10549 + {
10550 + //TODO:
10551 + DBG_871X(" Exceed the upper limit of supported clients...\n");
10552 + return _SUCCESS;
10553 + }
10554 +
10555 + _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
10556 + if (rtw_is_list_empty(&psta->asoc_list))
10557 + {
10558 + psta->expire_to = pstapriv->expire_to;
10559 + rtw_list_insert_tail(&psta->asoc_list, &pstapriv->asoc_list);
10560 + pstapriv->asoc_list_cnt++;
10561 + }
10562 + _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
10563 +
10564 + //generate pairing ID
10565 + mac_addr = myid(&(padapter->eeprompriv));
10566 + peer_addr = psta->hwaddr;
10567 + psta->pid = (u16)(((mac_addr[4]<<8) + mac_addr[5]) + ((peer_addr[4]<<8) + peer_addr[5]));
10568 +
10569 + //update peer stainfo
10570 + psta->isrc = _TRUE;
10571 + //psta->aid = 0;
10572 + //psta->mac_id = 2;
10573 +
10574 + /* get a unique AID */
10575 + if (psta->aid > 0) {
10576 + DBG_871X("old AID %d\n", psta->aid);
10577 + } else {
10578 + for (psta->aid = 1; psta->aid <= NUM_STA; psta->aid++)
10579 + if (pstapriv->sta_aid[psta->aid - 1] == NULL)
10580 + break;
10581 +
10582 + if (psta->aid > pstapriv->max_num_sta) {
10583 + psta->aid = 0;
10584 + DBG_871X("no room for more AIDs\n");
10585 + return _SUCCESS;
10586 + } else {
10587 + pstapriv->sta_aid[psta->aid - 1] = psta;
10588 + DBG_871X("allocate new AID = (%d)\n", psta->aid);
10589 + }
10590 + }
10591 +
10592 + psta->qos_option = 1;
10593 + psta->htpriv.ht_option = _TRUE;
10594 + psta->ieee8021x_blocked = _FALSE;
10595 + psta->htpriv.ampdu_enable = _FALSE;
10596 + psta->htpriv.sgi = _FALSE;
10597 + psta->htpriv.bwmode = HT_CHANNEL_WIDTH_20;
10598 + psta->htpriv.ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
10599 +
10600 + //rtw_hal_set_odm_var(padapter, HAL_ODM_STA_INFO, psta, _TRUE);
10601 +
10602 + psta->htpriv.agg_enable_bitmap = 0x0;//reset
10603 + psta->htpriv.candidate_tid_bitmap = 0x0;//reset
10604 +
10605 + _rtw_memset((void*)&psta->sta_stats, 0, sizeof(struct stainfo_stats));
10606 +
10607 + _enter_critical_bh(&psta->lock, &irqL);
10608 + psta->state |= _FW_LINKED;
10609 + _exit_critical_bh(&psta->lock, &irqL);
10610 +
10611 + report_add_sta_event(padapter, psta->hwaddr, psta->aid);
10612 +
10613 + }
10614 +
10615 + issue_probersp(padapter, get_sa(pframe), _FALSE);
10616 +
10617 + return _SUCCESS;
10618 +
10619 + }
10620 +
10621 +_non_rc_device:
10622 +
10623 + return _SUCCESS;
10624 +#endif //CONFIG_AUTO_AP_MODE
10625 +
10626 +
10627 +#ifdef CONFIG_CONCURRENT_MODE
10628 + if(((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE) &&
10629 + check_buddy_fwstate(padapter, _FW_UNDER_LINKING|_FW_UNDER_SURVEY))
10630 + {
10631 + //don't process probe req
10632 + return _SUCCESS;
10633 + }
10634 +#endif
10635 +
10636 p = rtw_get_ie(pframe + WLAN_HDR_A3_LEN + _PROBEREQ_IE_OFFSET_, _SSID_IE_, (int *)&ielen,
10637 len - WLAN_HDR_A3_LEN - _PROBEREQ_IE_OFFSET_);
10638
10639 @@ -826,7 +1049,7 @@ _issue_probersp:
10640 {
10641 //DBG_871X("+issue_probersp during ap mode\n");
10642 issue_probersp(padapter, get_sa(pframe), is_valid_p2p_probereq);
10643 - }
10644 + }
10645
10646 }
10647
10648 @@ -857,7 +1080,6 @@ unsigned int OnProbeRsp(_adapter *padapt
10649 {
10650 pwdinfo->tx_prov_disc_info.benable = _FALSE;
10651 issue_p2p_provision_request( padapter,
10652 - pwdinfo->tx_prov_disc_info.peerIFAddr,
10653 pwdinfo->tx_prov_disc_info.ssid.Ssid,
10654 pwdinfo->tx_prov_disc_info.ssid.SsidLength,
10655 pwdinfo->tx_prov_disc_info.peerDevAddr );
10656 @@ -866,7 +1088,6 @@ unsigned int OnProbeRsp(_adapter *padapt
10657 {
10658 pwdinfo->tx_prov_disc_info.benable = _FALSE;
10659 issue_p2p_provision_request( padapter,
10660 - pwdinfo->tx_prov_disc_info.peerIFAddr,
10661 NULL,
10662 0,
10663 pwdinfo->tx_prov_disc_info.peerDevAddr );
10664 @@ -887,12 +1108,30 @@ unsigned int OnProbeRsp(_adapter *padapt
10665 }
10666 }
10667 }
10668 + else if( rtw_p2p_chk_state(pwdinfo, P2P_STATE_TX_INVITE_REQ ) )
10669 + {
10670 + if ( _TRUE == pwdinfo->invitereq_info.benable )
10671 + {
10672 + DBG_871X( "[%s] P2P_STATE_TX_INVITE_REQ!\n", __FUNCTION__ );
10673 + if( _rtw_memcmp( pwdinfo->invitereq_info.peer_macaddr, GetAddr2Ptr(pframe), ETH_ALEN ) )
10674 + {
10675 + pwdinfo->invitereq_info.benable = _FALSE;
10676 + issue_p2p_invitation_request( padapter, pwdinfo->invitereq_info.peer_macaddr );
10677 + }
10678 + }
10679 + }
10680 #endif
10681
10682
10683 if (pmlmeext->sitesurvey_res.state == SCAN_PROCESS)
10684 {
10685 report_survey_event(padapter, precv_frame);
10686 +#ifdef CONFIG_CONCURRENT_MODE
10687 + report_survey_event(padapter->pbuddy_adapter, precv_frame);
10688 +#endif
10689 +#ifdef CONFIG_DUALMAC_CONCURRENT
10690 + dc_report_survey_event(padapter, precv_frame);
10691 +#endif
10692 return _SUCCESS;
10693 }
10694
10695 @@ -922,10 +1161,33 @@ unsigned int OnBeacon(_adapter *padapter
10696 struct sta_priv *pstapriv = &padapter->stapriv;
10697 u8 *pframe = precv_frame->u.hdr.rx_data;
10698 uint len = precv_frame->u.hdr.len;
10699 + u8 *p = NULL;
10700 + u32 ielen = 0;
10701 +
10702 +#ifdef CONFIG_ATTEMPT_TO_FIX_AP_BEACON_ERROR
10703 + p = rtw_get_ie(pframe + sizeof(struct rtw_ieee80211_hdr_3addr) + _BEACON_IE_OFFSET_, _EXT_SUPPORTEDRATES_IE_, &ielen, precv_frame->u.hdr.len -sizeof(struct rtw_ieee80211_hdr_3addr) - _BEACON_IE_OFFSET_);
10704 + if ((p != NULL) && (ielen > 0))
10705 + {
10706 + if ((*(p + 1 + ielen) == 0x2D) && (*(p + 2 + ielen) != 0x2D))
10707 + {
10708 + /* Invalid value 0x2D is detected in Extended Supported Rates (ESR) IE. Try to fix the IE length to avoid failed Beacon parsing. */
10709 + DBG_871X("[WIFIDBG] Error in ESR IE is detected in Beacon of BSSID:"MAC_FMT". Fix the length of ESR IE to avoid failed Beacon parsing.\n", MAC_ARG(GetAddr3Ptr(pframe)));
10710 + *(p + 1) = ielen - 1;
10711 + }
10712 + }
10713 +#endif
10714
10715 if (pmlmeext->sitesurvey_res.state == SCAN_PROCESS)
10716 {
10717 report_survey_event(padapter, precv_frame);
10718 +#ifdef CONFIG_CONCURRENT_MODE
10719 + report_survey_event(padapter->pbuddy_adapter, precv_frame);
10720 +#endif
10721 +
10722 +#ifdef CONFIG_DUALMAC_CONCURRENT
10723 + dc_report_survey_event(padapter, precv_frame);
10724 +#endif
10725 +
10726 return _SUCCESS;
10727 }
10728
10729 @@ -935,6 +1197,10 @@ unsigned int OnBeacon(_adapter *padapter
10730 {
10731 //check the vendor of the assoc AP
10732 pmlmeinfo->assoc_AP_vendor = check_assoc_AP(pframe+sizeof(struct rtw_ieee80211_hdr_3addr), len-sizeof(struct rtw_ieee80211_hdr_3addr));
10733 +#ifdef CONFIG_P2P_PS
10734 + // do P2P PS Before link ? , ToDo
10735 + //process_p2p_ps_ie(padapter, (pframe + WLAN_HDR_A3_LEN), (len - WLAN_HDR_A3_LEN));
10736 +#endif // CONFIG_P2P_PS
10737
10738 //update TSF Value
10739 update_TSF(pmlmeext, pframe, len);
10740 @@ -973,9 +1239,10 @@ unsigned int OnBeacon(_adapter *padapter
10741 process_csa_ie(padapter, pframe, len); //channel switch announcement
10742 #endif //CONFIG_DFS
10743
10744 -#ifdef CONFIG_P2P
10745 +#ifdef CONFIG_P2P_PS
10746 + //if(psta->ieee8021x_blocked == _FALSE) // do not allow P2P PS during EAPOL handshake ?
10747 process_p2p_ps_ie(padapter, (pframe + WLAN_HDR_A3_LEN), (len - WLAN_HDR_A3_LEN));
10748 -#endif //CONFIG_P2P
10749 +#endif //CONFIG_P2P_PS
10750
10751 #if 0 //move to validate_recv_mgnt_frame
10752 psta->sta_stats.rx_mgnt_pkts++;
10753 @@ -1045,6 +1312,16 @@ unsigned int OnAuth(_adapter *padapter,
10754 u8 *pframe = precv_frame->u.hdr.rx_data;
10755 uint len = precv_frame->u.hdr.len;
10756
10757 +
10758 +#ifdef CONFIG_CONCURRENT_MODE
10759 + if(((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE) &&
10760 + check_buddy_fwstate(padapter, _FW_UNDER_LINKING|_FW_UNDER_SURVEY))
10761 + {
10762 + //don't process auth request;
10763 + return _SUCCESS;
10764 + }
10765 +#endif //CONFIG_CONCURRENT_MODE
10766 +
10767 if((pmlmeinfo->state&0x03) != WIFI_FW_AP_STATE)
10768 return _FAIL;
10769
10770 @@ -1053,8 +1330,8 @@ unsigned int OnAuth(_adapter *padapter,
10771 sa = GetAddr2Ptr(pframe);
10772
10773 auth_mode = psecuritypriv->dot11AuthAlgrthm;
10774 - seq = cpu_to_le16(*(unsigned short *)((unsigned int)pframe + WLAN_HDR_A3_LEN + 2));
10775 - algorithm = cpu_to_le16(*(unsigned short *)((unsigned int)pframe + WLAN_HDR_A3_LEN));
10776 + seq = cpu_to_le16(*(u16*)((SIZE_PTR)pframe + WLAN_HDR_A3_LEN + 2));
10777 + algorithm = cpu_to_le16(*(u16*)((SIZE_PTR)pframe + WLAN_HDR_A3_LEN));
10778
10779 if (GetPrivacy(pframe))
10780 {
10781 @@ -1096,7 +1373,7 @@ unsigned int OnAuth(_adapter *padapter,
10782 goto auth_fail;
10783 }
10784
10785 -#if 0 //TODO:ACL control
10786 +#if 0 //ACL control
10787 phead = &priv->wlan_acl_list;
10788 plist = phead->next;
10789 //check sa
10790 @@ -1125,13 +1402,19 @@ unsigned int OnAuth(_adapter *padapter,
10791 RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,"auth abort because ACL!\n");
10792 return FAIL;
10793 }
10794 +#else
10795 + if(rtw_access_ctrl(padapter, sa) == _FALSE)
10796 + {
10797 + status = _STATS_UNABLE_HANDLE_STA_;
10798 + goto auth_fail;
10799 + }
10800 #endif
10801
10802 pstat = rtw_get_stainfo(pstapriv, sa);
10803 if (pstat == NULL)
10804 {
10805 // allocate a new one
10806 - DBG_871X("going to alloc stainfo for sa=%02X%02X%02X%02X%02X%02X\n", sa[0],sa[1],sa[2],sa[3],sa[4],sa[5]);
10807 + DBG_871X("going to alloc stainfo for sa="MAC_FMT"\n", MAC_ARG(sa));
10808 pstat = rtw_alloc_stainfo(pstapriv, sa);
10809 if (pstat == NULL)
10810 {
10811 @@ -1152,6 +1435,7 @@ unsigned int OnAuth(_adapter *padapter,
10812 if(rtw_is_list_empty(&pstat->asoc_list)==_FALSE)
10813 {
10814 rtw_list_delete(&pstat->asoc_list);
10815 + pstapriv->asoc_list_cnt--;
10816 if (pstat->expire_to > 0)
10817 {
10818 //TODO: STA re_auth within expire_to
10819 @@ -1168,6 +1452,7 @@ unsigned int OnAuth(_adapter *padapter,
10820 if (rtw_is_list_empty(&pstat->auth_list))
10821 {
10822 rtw_list_insert_tail(&pstat->auth_list, &pstapriv->auth_list);
10823 + pstapriv->auth_list_cnt++;
10824 }
10825 _exit_critical_bh(&pstapriv->auth_list_lock, &irqL);
10826
10827 @@ -1266,13 +1551,13 @@ unsigned int OnAuth(_adapter *padapter,
10828
10829 auth_fail:
10830
10831 - if (pstat)
10832 - {
10833 - pstat = &stat;
10834 - _rtw_memset((char *)pstat, '\0', sizeof(stat));
10835 - pstat->auth_seq = 2;
10836 - _rtw_memcpy(pstat->hwaddr, sa, 6);
10837 - }
10838 + if(pstat)
10839 + rtw_free_stainfo(padapter , pstat);
10840 +
10841 + pstat = &stat;
10842 + _rtw_memset((char *)pstat, '\0', sizeof(stat));
10843 + pstat->auth_seq = 2;
10844 + _rtw_memcpy(pstat->hwaddr, sa, 6);
10845
10846 #ifdef CONFIG_NATIVEAP_MLME
10847 issue_auth(padapter, pstat, (unsigned short)status);
10848 @@ -1334,7 +1619,7 @@ unsigned int OnAuthClient(_adapter *pada
10849
10850 if (p == NULL)
10851 {
10852 - //DBG_8192C("marc: no challenge text?\n");
10853 + //DBG_871X("marc: no challenge text?\n");
10854 goto authclnt_fail;
10855 }
10856
10857 @@ -1365,7 +1650,7 @@ unsigned int OnAuthClient(_adapter *pada
10858 else
10859 {
10860 // this is also illegal
10861 - //DBG_8192C("marc: clnt auth failed due to illegal seq=%x\n", seq);
10862 + //DBG_871X("marc: clnt auth failed due to illegal seq=%x\n", seq);
10863 goto authclnt_fail;
10864 }
10865
10866 @@ -1388,13 +1673,11 @@ unsigned int OnAssocReq(_adapter *padapt
10867 #ifdef CONFIG_AP_MODE
10868 _irqL irqL;
10869 u16 capab_info, listen_interval;
10870 - struct ieee802_11_elems elems;
10871 + struct rtw_ieee802_11_elems elems;
10872 struct sta_info *pstat;
10873 unsigned char reassoc, *p, *pos, *wpa_ie;
10874 - unsigned char rsnie_hdr[4]={0x00, 0x50, 0xf2, 0x01};
10875 unsigned char WMM_IE[] = {0x00, 0x50, 0xf2, 0x02, 0x00, 0x01};
10876 int i, ie_len, wpa_ie_len, left;
10877 - unsigned long flags;
10878 unsigned char supportRate[16];
10879 int supportRateNum;
10880 unsigned short status = _STATS_SUCCESSFUL_;
10881 @@ -1418,6 +1701,15 @@ unsigned int OnAssocReq(_adapter *padapt
10882 #endif // CONFIG_WFD
10883 #endif //CONFIG_P2P
10884
10885 +#ifdef CONFIG_CONCURRENT_MODE
10886 + if(((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE) &&
10887 + check_buddy_fwstate(padapter, _FW_UNDER_LINKING|_FW_UNDER_SURVEY))
10888 + {
10889 + //don't process assoc request;
10890 + return _SUCCESS;
10891 + }
10892 +#endif //CONFIG_CONCURRENT_MODE
10893 +
10894 if((pmlmeinfo->state&0x03) != WIFI_FW_AP_STATE)
10895 return _FAIL;
10896
10897 @@ -1668,7 +1960,7 @@ unsigned int OnAssocReq(_adapter *padapt
10898 {
10899 u8 selected_registrar = 0;
10900
10901 - rtw_get_wps_attr_content(pmlmepriv->wps_beacon_ie, pmlmepriv->wps_beacon_ie_len, WPA_ATTR_SELECTED_REGISTRAR , &selected_registrar, NULL);
10902 + rtw_get_wps_attr_content(pmlmepriv->wps_beacon_ie, pmlmepriv->wps_beacon_ie_len, WPS_ATTR_SELECTED_REGISTRAR , &selected_registrar, NULL);
10903
10904 if(!selected_registrar)
10905 {
10906 @@ -1709,7 +2001,7 @@ unsigned int OnAssocReq(_adapter *padapt
10907 copy_len = ((wpa_ie_len+2) > sizeof(pstat->wpa_ie)) ? (sizeof(pstat->wpa_ie)):(wpa_ie_len+2);
10908 }
10909
10910 -
10911 +
10912 if(copy_len>0)
10913 _rtw_memcpy(pstat->wpa_ie, wpa_ie-2, copy_len);
10914
10915 @@ -1859,12 +2151,12 @@ unsigned int OnAssocReq(_adapter *padapt
10916 rtw_get_wfd_attr_content( wfd_ie, wfd_ielen, WFD_ATTR_DEVICE_INFO, attr_content, &attr_contentlen);
10917 if ( attr_contentlen )
10918 {
10919 - pwdinfo->wfd_info.peer_rtsp_ctrlport = RTW_GET_BE16( attr_content + 2 );
10920 - DBG_8192C( "[%s] Peer PORT NUM = %d\n", __FUNCTION__, pwdinfo->wfd_info.peer_rtsp_ctrlport );
10921 + pwdinfo->wfd_info->peer_rtsp_ctrlport = RTW_GET_BE16( attr_content + 2 );
10922 + DBG_8192C( "[%s] Peer PORT NUM = %d\n", __FUNCTION__, pwdinfo->wfd_info->peer_rtsp_ctrlport );
10923 }
10924 }
10925 #endif
10926 - }
10927 + }
10928 pstat->p2p_status_code = p2p_status_code;
10929 #endif //CONFIG_P2P
10930
10931 @@ -1910,6 +2202,7 @@ unsigned int OnAssocReq(_adapter *padapt
10932 if (!rtw_is_list_empty(&pstat->auth_list))
10933 {
10934 rtw_list_delete(&pstat->auth_list);
10935 + pstapriv->auth_list_cnt--;
10936 }
10937 _exit_critical_bh(&pstapriv->auth_list_lock, &irqL);
10938
10939 @@ -1917,7 +2210,8 @@ unsigned int OnAssocReq(_adapter *padapt
10940 if (rtw_is_list_empty(&pstat->asoc_list))
10941 {
10942 pstat->expire_to = pstapriv->expire_to;
10943 - rtw_list_insert_tail(&pstat->asoc_list, &pstapriv->asoc_list);
10944 + rtw_list_insert_tail(&pstat->asoc_list, &pstapriv->asoc_list);
10945 + pstapriv->asoc_list_cnt++;
10946 }
10947 _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
10948
10949 @@ -1926,53 +2220,54 @@ unsigned int OnAssocReq(_adapter *padapt
10950 {
10951 #ifdef CONFIG_NATIVEAP_MLME
10952 //.1 bss_cap_update & sta_info_update
10953 - bss_cap_update(padapter, pstat);
10954 + bss_cap_update_on_sta_join(padapter, pstat);
10955 sta_info_update(padapter, pstat);
10956 -
10957 - //.2 - report to upper layer
10958 - DBG_871X("indicate_sta_join_event to upper layer - hostapd\n");
10959 - {
10960 -#ifdef CONFIG_IOCTL_CFG80211
10961 - struct wireless_dev *pwdev = padapter->rtw_wdev;
10962
10963 - if(pwdev->iftype == NL80211_IFTYPE_AP)
10964 - {
10965 - #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
10966 - rtw_cfg80211_indicate_sta_assoc(padapter, pframe, pkt_len);
10967 - #else //(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
10968 - _enter_critical_bh(&pstat->lock, &irqL);
10969 - if(pstat->passoc_req)
10970 - {
10971 - rtw_mfree(pstat->passoc_req, pstat->assoc_req_len);
10972 - pstat->passoc_req = NULL;
10973 - pstat->assoc_req_len = 0;
10974 - }
10975 + //issue assoc rsp before notify station join event.
10976 + if (frame_type == WIFI_ASSOCREQ)
10977 + issue_asocrsp(padapter, status, pstat, WIFI_ASSOCRSP);
10978 + else
10979 + issue_asocrsp(padapter, status, pstat, WIFI_REASSOCRSP);
10980
10981 - pstat->passoc_req = rtw_zmalloc(pkt_len);
10982 - if(pstat->passoc_req)
10983 - {
10984 - _rtw_memcpy(pstat->passoc_req, pframe, pkt_len);
10985 - pstat->assoc_req_len = pkt_len;
10986 - }
10987 - _exit_critical_bh(&pstat->lock, &irqL);
10988 - #endif //(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
10989 - }
10990 - else
10991 -#endif //CONFIG_IOCTL_CFG80211
10992 - {
10993 - rtw_indicate_sta_assoc_event(padapter, pstat);
10994 - }
10995 + //.2 - report to upper layer
10996 + DBG_871X("indicate_sta_join_event to upper layer - hostapd\n");
10997
10998 +#ifdef CONFIG_IOCTL_CFG80211
10999 + #ifdef COMPAT_KERNEL_RELEASE
11000 + rtw_cfg80211_indicate_sta_assoc(padapter, pframe, pkt_len);
11001 + #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
11002 + rtw_cfg80211_indicate_sta_assoc(padapter, pframe, pkt_len);
11003 + #else //(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
11004 + _enter_critical_bh(&pstat->lock, &irqL);
11005 + if(pstat->passoc_req)
11006 + {
11007 + rtw_mfree(pstat->passoc_req, pstat->assoc_req_len);
11008 + pstat->passoc_req = NULL;
11009 + pstat->assoc_req_len = 0;
11010 }
11011
11012 + pstat->passoc_req = rtw_zmalloc(pkt_len);
11013 + if(pstat->passoc_req)
11014 + {
11015 + _rtw_memcpy(pstat->passoc_req, pframe, pkt_len);
11016 + pstat->assoc_req_len = pkt_len;
11017 + }
11018 + _exit_critical_bh(&pstat->lock, &irqL);
11019 + #endif //(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
11020 +#else
11021 + rtw_indicate_sta_assoc_event(padapter, pstat);
11022 +#endif //CONFIG_IOCTL_CFG80211
11023
11024 //.3-(1) report sta add event
11025 report_add_sta_event(padapter, pstat->hwaddr, pstat->aid);
11026
11027 +/*
11028 + //issue assoc rsp before notify station join event.
11029 if (frame_type == WIFI_ASSOCREQ)
11030 issue_asocrsp(padapter, status, pstat, WIFI_ASSOCRSP);
11031 else
11032 issue_asocrsp(padapter, status, pstat, WIFI_REASSOCRSP);
11033 +*/
11034
11035 #endif
11036 }
11037 @@ -2011,6 +2306,7 @@ unsigned int OnAssocRsp(_adapter *padapt
11038 int res;
11039 unsigned short status;
11040 PNDIS_802_11_VARIABLE_IEs pIE;
11041 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
11042 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
11043 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
11044 //WLAN_BSSID_EX *cur_network = &(pmlmeinfo->network);
11045 @@ -2063,13 +2359,13 @@ unsigned int OnAssocRsp(_adapter *padapt
11046 {
11047 WMM_param_handler(padapter, pIE);
11048 }
11049 -#ifdef CONFIG_WFD
11050 +#if defined(CONFIG_P2P) && defined(CONFIG_WFD)
11051 else if ( _rtw_memcmp(pIE->data, WFD_OUI, 4)) //WFD
11052 {
11053 - printk( "[%s] Found WFD IE\n", __FUNCTION__ );
11054 + DBG_871X( "[%s] Found WFD IE\n", __FUNCTION__ );
11055 WFD_info_handler( padapter, pIE );
11056 }
11057 -#endif
11058 +#endif
11059 break;
11060
11061 case _HT_CAPABILITY_IE_: //HT caps
11062 @@ -2096,10 +2392,22 @@ unsigned int OnAssocRsp(_adapter *padapt
11063 //Update Basic Rate Table for spec, 2010-12-28 , by thomas
11064 UpdateBrateTbl(padapter, pmlmeinfo->network.SupportedRates);
11065
11066 +#ifdef CONFIG_IOCTL_CFG80211
11067 + if (!rtw_cfg80211_check_bss(padapter)) {
11068 + DBG_871X("rtw_cfg80211_check_bss() : BSS not found !!\n");
11069 + res = -2;
11070 + goto report_assoc_result;
11071 + }
11072 +#endif
11073 +
11074 report_assoc_result:
11075 + if (res > 0) {
11076 + rtw_buf_update(&pmlmepriv->assoc_rsp, &pmlmepriv->assoc_rsp_len, pframe, pkt_len);
11077 + } else {
11078 + rtw_buf_free(&pmlmepriv->assoc_rsp, &pmlmepriv->assoc_rsp_len);
11079 + }
11080
11081 report_join_res(padapter, res);
11082 -
11083 return _SUCCESS;
11084 }
11085
11086 @@ -2110,11 +2418,22 @@ unsigned int OnDeAuth(_adapter *padapter
11087 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
11088 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
11089 u8 *pframe = precv_frame->u.hdr.rx_data;
11090 +#ifdef CONFIG_P2P
11091 + struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
11092 +#endif //CONFIG_P2P
11093
11094 //check A3
11095 if (!(_rtw_memcmp(GetAddr3Ptr(pframe), get_my_bssid(&pmlmeinfo->network), ETH_ALEN)))
11096 return _SUCCESS;
11097
11098 +#ifdef CONFIG_P2P
11099 + if ( pwdinfo->rx_invitereq_info.scan_op_ch_only )
11100 + {
11101 + _cancel_timer_ex( &pwdinfo->reset_ch_sitesurvey );
11102 + _set_timer( &pwdinfo->reset_ch_sitesurvey, 10 );
11103 + }
11104 +#endif //CONFIG_P2P
11105 +
11106 reason = le16_to_cpu(*(unsigned short *)(pframe + WLAN_HDR_A3_LEN));
11107
11108 DBG_871X("%s Reason code(%d)\n", __FUNCTION__,reason);
11109 @@ -2128,48 +2447,87 @@ unsigned int OnDeAuth(_adapter *padapter
11110
11111 //_enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
11112 //rtw_free_stainfo(padapter, psta);
11113 - //_exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
11114 + //_exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
11115
11116 DBG_871X("%s, STA:" MAC_FMT "\n", __FUNCTION__, MAC_ARG(GetAddr2Ptr(pframe)));
11117
11118 - psta = rtw_get_stainfo(pstapriv, GetAddr2Ptr(pframe));
11119 + psta = rtw_get_stainfo(pstapriv, GetAddr2Ptr(pframe));
11120 if(psta)
11121 {
11122 + u8 updated;
11123 +
11124 _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
11125 if(rtw_is_list_empty(&psta->asoc_list)==_FALSE)
11126 {
11127 rtw_list_delete(&psta->asoc_list);
11128 - ap_free_sta(padapter, psta);
11129 + pstapriv->asoc_list_cnt--;
11130 + updated = ap_free_sta(padapter, psta, _FALSE, reason);
11131 +
11132 }
11133 _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
11134 +
11135 + associated_clients_update(padapter, updated);
11136 }
11137 +
11138
11139 return _SUCCESS;
11140 }
11141 else
11142 #endif
11143 {
11144 - DBG_871X("%s, STA:" MAC_FMT "\n", __FUNCTION__, MAC_ARG(GetAddr3Ptr(pframe)));
11145 -
11146 - receive_disconnect(padapter, GetAddr3Ptr(pframe) ,reason);
11147 - }
11148 - pmlmepriv->LinkDetectInfo.bBusyTraffic = _FALSE;
11149 - return _SUCCESS;
11150 -
11151 -}
11152 + int ignore_received_deauth = 0;
11153
11154 -unsigned int OnDisassoc(_adapter *padapter, union recv_frame *precv_frame)
11155 + // Commented by Albert 20130604
11156 + // Before sending the auth frame to start the STA/GC mode connection with AP/GO,
11157 + // we will send the deauth first.
11158 + // However, the Win8.1 with BRCM Wi-Fi will send the deauth with reason code 6 to us after receieving our deauth.
11159 + // Added the following code to avoid this case.
11160 + if ( ( pmlmeinfo->state & WIFI_FW_AUTH_STATE ) ||
11161 + ( pmlmeinfo->state & WIFI_FW_ASSOC_STATE ) )
11162 + {
11163 + if ( reason == WLAN_REASON_CLASS2_FRAME_FROM_NONAUTH_STA )
11164 + {
11165 + ignore_received_deauth = 1;
11166 + } else if (WLAN_REASON_PREV_AUTH_NOT_VALID == reason) {
11167 + // TODO: 802.11r
11168 + ignore_received_deauth = 1;
11169 + }
11170 + }
11171 +
11172 + DBG_871X("%s, STA:" MAC_FMT ", ignore = %d\n", __FUNCTION__, MAC_ARG(GetAddr3Ptr(pframe)), ignore_received_deauth);
11173 + if ( 0 == ignore_received_deauth )
11174 + {
11175 + receive_disconnect(padapter, GetAddr3Ptr(pframe) ,reason);
11176 + }
11177 + }
11178 + pmlmepriv->LinkDetectInfo.bBusyTraffic = _FALSE;
11179 + return _SUCCESS;
11180 +
11181 +}
11182 +
11183 +unsigned int OnDisassoc(_adapter *padapter, union recv_frame *precv_frame)
11184 {
11185 unsigned short reason;
11186 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
11187 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
11188 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
11189 u8 *pframe = precv_frame->u.hdr.rx_data;
11190 +#ifdef CONFIG_P2P
11191 + struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
11192 +#endif //CONFIG_P2P
11193
11194 //check A3
11195 if (!(_rtw_memcmp(GetAddr3Ptr(pframe), get_my_bssid(&pmlmeinfo->network), ETH_ALEN)))
11196 return _SUCCESS;
11197
11198 +#ifdef CONFIG_P2P
11199 + if ( pwdinfo->rx_invitereq_info.scan_op_ch_only )
11200 + {
11201 + _cancel_timer_ex( &pwdinfo->reset_ch_sitesurvey );
11202 + _set_timer( &pwdinfo->reset_ch_sitesurvey, 10 );
11203 + }
11204 +#endif //CONFIG_P2P
11205 +
11206 reason = le16_to_cpu(*(unsigned short *)(pframe + WLAN_HDR_A3_LEN));
11207
11208 DBG_871X("%s Reason code(%d)\n", __FUNCTION__,reason);
11209 @@ -2183,21 +2541,26 @@ unsigned int OnDisassoc(_adapter *padapt
11210
11211 //_enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
11212 //rtw_free_stainfo(padapter, psta);
11213 - //_exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
11214 + //_exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
11215
11216 DBG_871X("%s, STA:" MAC_FMT "\n", __FUNCTION__, MAC_ARG(GetAddr2Ptr(pframe)));
11217
11218 psta = rtw_get_stainfo(pstapriv, GetAddr2Ptr(pframe));
11219 if(psta)
11220 {
11221 + u8 updated;
11222 +
11223 _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
11224 if(rtw_is_list_empty(&psta->asoc_list)==_FALSE)
11225 - {
11226 + {
11227 rtw_list_delete(&psta->asoc_list);
11228 - ap_free_sta(padapter, psta);
11229 + pstapriv->asoc_list_cnt--;
11230 + updated = ap_free_sta(padapter, psta, _FALSE, reason);
11231
11232 }
11233 _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
11234 +
11235 + associated_clients_update(padapter, updated);
11236 }
11237
11238 return _SUCCESS;
11239 @@ -2220,6 +2583,107 @@ unsigned int OnAtim(_adapter *padapter,
11240 return _SUCCESS;
11241 }
11242
11243 +unsigned int on_action_spct_ch_switch(_adapter *padapter, struct sta_info *psta, u8 *ies, uint ies_len)
11244 +{
11245 + unsigned int ret = _FAIL;
11246 + struct mlme_ext_priv *mlmeext = &padapter->mlmeextpriv;
11247 + struct mlme_ext_info *pmlmeinfo = &(mlmeext->mlmext_info);
11248 +
11249 + if (!(pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS)) {
11250 + ret = _SUCCESS;
11251 + goto exit;
11252 + }
11253 +
11254 + if ((pmlmeinfo->state & 0x03) == WIFI_FW_STATION_STATE) {
11255 +
11256 + int ch_switch_mode = -1, ch = -1, ch_switch_cnt = -1;
11257 + int ch_offset = -1;
11258 + u8 bwmode;
11259 + struct ieee80211_info_element *ie;
11260 +
11261 + DBG_871X(FUNC_NDEV_FMT" from "MAC_FMT"\n",
11262 + FUNC_NDEV_ARG(padapter->pnetdev), MAC_ARG(psta->hwaddr));
11263 +
11264 + for_each_ie(ie, ies, ies_len) {
11265 + if (ie->id == WLAN_EID_CHANNEL_SWITCH) {
11266 + ch_switch_mode = ie->data[0];
11267 + ch = ie->data[1];
11268 + ch_switch_cnt = ie->data[2];
11269 + DBG_871X("ch_switch_mode:%d, ch:%d, ch_switch_cnt:%d\n",
11270 + ch_switch_mode, ch, ch_switch_cnt);
11271 + }
11272 + else if (ie->id == WLAN_EID_SECONDARY_CHANNEL_OFFSET) {
11273 + ch_offset = secondary_ch_offset_to_hal_ch_offset(ie->data[0]);
11274 + DBG_871X("ch_offset:%d\n", ch_offset);
11275 + }
11276 + }
11277 +
11278 + if (ch == -1)
11279 + return _SUCCESS;
11280 +
11281 + if (ch_offset == -1)
11282 + bwmode = mlmeext->cur_bwmode;
11283 + else
11284 + bwmode = (ch_offset == HAL_PRIME_CHNL_OFFSET_DONT_CARE) ?
11285 + HT_CHANNEL_WIDTH_20 : HT_CHANNEL_WIDTH_40;
11286 +
11287 + ch_offset = (ch_offset == -1) ? mlmeext->cur_ch_offset : ch_offset;
11288 +
11289 + /* todo:
11290 + * 1. the decision of channel switching
11291 + * 2. things after channel switching
11292 + */
11293 +
11294 + ret = rtw_set_ch_cmd(padapter, ch, bwmode, ch_offset, _TRUE);
11295 + }
11296 +
11297 +exit:
11298 + return ret;
11299 +}
11300 +
11301 +unsigned int on_action_spct(_adapter *padapter, union recv_frame *precv_frame)
11302 +{
11303 + unsigned int ret = _FAIL;
11304 + struct sta_info *psta = NULL;
11305 + struct sta_priv *pstapriv = &padapter->stapriv;
11306 + u8 *pframe = precv_frame->u.hdr.rx_data;
11307 + uint frame_len = precv_frame->u.hdr.len;
11308 + u8 *frame_body = (u8 *)(pframe + sizeof(struct rtw_ieee80211_hdr_3addr));
11309 + u8 category;
11310 + u8 action;
11311 +
11312 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(padapter->pnetdev));
11313 +
11314 + psta = rtw_get_stainfo(pstapriv, GetAddr2Ptr(pframe));
11315 +
11316 + if (!psta)
11317 + goto exit;
11318 +
11319 + category = frame_body[0];
11320 + if(category != RTW_WLAN_CATEGORY_SPECTRUM_MGMT)
11321 + goto exit;
11322 +
11323 + action = frame_body[1];
11324 + switch (action) {
11325 + case RTW_WLAN_ACTION_SPCT_MSR_REQ:
11326 + case RTW_WLAN_ACTION_SPCT_MSR_RPRT:
11327 + case RTW_WLAN_ACTION_SPCT_TPC_REQ:
11328 + case RTW_WLAN_ACTION_SPCT_TPC_RPRT:
11329 + break;
11330 + case RTW_WLAN_ACTION_SPCT_CHL_SWITCH:
11331 + #ifdef CONFIG_SPCT_CH_SWITCH
11332 + ret = on_action_spct_ch_switch(padapter, psta, &frame_body[2],
11333 + frame_len-(frame_body-pframe)-2);
11334 + #endif
11335 + break;
11336 + default:
11337 + break;
11338 + }
11339 +
11340 +exit:
11341 + return ret;
11342 +}
11343 +
11344 unsigned int OnAction_qos(_adapter *padapter, union recv_frame *precv_frame)
11345 {
11346 return _SUCCESS;
11347 @@ -2242,8 +2706,6 @@ unsigned int OnAction_back(_adapter *pad
11348 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
11349 u8 *pframe = precv_frame->u.hdr.rx_data;
11350 struct sta_priv *pstapriv = &padapter->stapriv;
11351 -
11352 - uint len = precv_frame->u.hdr.len;
11353
11354 //check RA matches or not
11355 if (!_rtw_memcmp(myid(&(padapter->eeprompriv)), GetAddr1Ptr(pframe), ETH_ALEN))//for if1, sta/ap mode
11356 @@ -2271,6 +2733,15 @@ unsigned int OnAction_back(_adapter *pad
11357 category = frame_body[0];
11358 if (category == RTW_WLAN_CATEGORY_BACK)// representing Block Ack
11359 {
11360 +#ifdef CONFIG_TDLS
11361 + if((psta->tdls_sta_state & TDLS_LINKED_STATE) &&
11362 + (psta->htpriv.ht_option==_TRUE) &&
11363 + (psta->htpriv.ampdu_enable==_TRUE) )
11364 + {
11365 + //do nothing; just don't want to return _SUCCESS;
11366 + }
11367 + else
11368 +#endif //CONFIG_TDLS
11369 if (!pmlmeinfo->HT_enable)
11370 {
11371 return _SUCCESS;
11372 @@ -2314,7 +2785,7 @@ unsigned int OnAction_back(_adapter *pad
11373 psta->htpriv.agg_enable_bitmap &= ~BIT(tid);
11374 }
11375
11376 - //DBG_8192C("marc: ADDBA RSP: %x\n", pmlmeinfo->agg_enable_bitmap);
11377 + //DBG_871X("marc: ADDBA RSP: %x\n", pmlmeinfo->agg_enable_bitmap);
11378 break;
11379
11380 case RTW_WLAN_ACTION_DELBA: //DELBA
11381 @@ -2339,7 +2810,7 @@ unsigned int OnAction_back(_adapter *pad
11382 #endif
11383 }
11384
11385 - DBG_8192C("%s(): DELBA: %x(%x)\n", __FUNCTION__,pmlmeinfo->agg_enable_bitmap, reason_code);
11386 + DBG_871X("%s(): DELBA: %x(%x)\n", __FUNCTION__,pmlmeinfo->agg_enable_bitmap, reason_code);
11387 //todo: how to notify the host while receiving DELETE BA
11388 break;
11389
11390 @@ -2352,6 +2823,45 @@ unsigned int OnAction_back(_adapter *pad
11391 }
11392
11393 #ifdef CONFIG_P2P
11394 +
11395 +static int get_reg_classes_full_count(struct p2p_channels channel_list) {
11396 + int cnt = 0;
11397 + int i;
11398 +
11399 + for (i = 0; i < channel_list.reg_classes; i++) {
11400 + cnt += channel_list.reg_class[i].channels;
11401 + }
11402 +
11403 + return cnt;
11404 +}
11405 +
11406 +static void get_channel_cnt_24g_5gl_5gh( struct mlme_ext_priv *pmlmeext, u8* p24g_cnt, u8* p5gl_cnt, u8* p5gh_cnt )
11407 +{
11408 + int i = 0;
11409 +
11410 + *p24g_cnt = 0;
11411 + *p5gl_cnt = 0;
11412 + *p5gh_cnt = 0;
11413 +
11414 + for( i = 0; i < pmlmeext->max_chan_nums; i++ )
11415 + {
11416 + if ( pmlmeext->channel_set[ i ].ChannelNum <= 14 )
11417 + {
11418 + (*p24g_cnt)++;
11419 + }
11420 + else if ( ( pmlmeext->channel_set[ i ].ChannelNum > 14 ) && ( pmlmeext->channel_set[ i ].ChannelNum <= 48 ) )
11421 + {
11422 + // Just include the channel 36, 40, 44, 48 channels for 5G low
11423 + (*p5gl_cnt)++;
11424 + }
11425 + else if ( ( pmlmeext->channel_set[ i ].ChannelNum >= 149 ) && ( pmlmeext->channel_set[ i ].ChannelNum <= 161 ) )
11426 + {
11427 + // Just include the channel 149, 153, 157, 161 channels for 5G high
11428 + (*p5gh_cnt)++;
11429 + }
11430 + }
11431 +}
11432 +
11433 void issue_p2p_GO_request(_adapter *padapter, u8* raddr)
11434 {
11435
11436 @@ -2361,10 +2871,11 @@ void issue_p2p_GO_request(_adapter *pada
11437 u8 oui_subtype = P2P_GO_NEGO_REQ;
11438 u8 wpsie[ 255 ] = { 0x00 }, p2pie[ 255 ] = { 0x00 };
11439 u8 wpsielen = 0, p2pielen = 0, i;
11440 - u16 chnum = 0;
11441 + u8 channel_cnt_24g = 0, channel_cnt_5gl = 0, channel_cnt_5gh = 0;
11442 + u16 len_channellist_attr = 0;
11443 #ifdef CONFIG_WFD
11444 u32 wfdielen = 0;
11445 -#endif //CONFIG_WFD
11446 +#endif //CONFIG_WFD
11447
11448 struct xmit_frame *pmgntframe;
11449 struct pkt_attrib *pattrib;
11450 @@ -2382,7 +2893,7 @@ void issue_p2p_GO_request(_adapter *pada
11451 return;
11452 }
11453
11454 - DBG_8192C( "[%s] In\n", __FUNCTION__ );
11455 + DBG_871X( "[%s] In\n", __FUNCTION__ );
11456 //update attribute
11457 pattrib = &pmgntframe->attrib;
11458 update_mgntframe_attrib(padapter, pattrib);
11459 @@ -2494,12 +3005,18 @@ void issue_p2p_GO_request(_adapter *pada
11460
11461 // Value:
11462 // Device Capability Bitmap, 1 byte
11463 - // Be able to participate in additional P2P Groups and
11464 - // support the P2P Invitation Procedure
11465 - p2pie[ p2pielen++ ] = P2P_DEVCAP_INVITATION_PROC;
11466 -
11467 + p2pie[ p2pielen++ ] = DMP_P2P_DEVCAP_SUPPORT;
11468 +
11469 // Group Capability Bitmap, 1 byte
11470 - p2pie[ p2pielen++ ] = 0x00;
11471 + if ( pwdinfo->persistent_supported )
11472 + {
11473 + p2pie[ p2pielen++ ] = P2P_GRPCAP_CROSS_CONN | P2P_GRPCAP_PERSISTENT_GROUP;
11474 + }
11475 + else
11476 + {
11477 + p2pie[ p2pielen++ ] = P2P_GRPCAP_CROSS_CONN;
11478 + }
11479 +
11480
11481 // Group Owner Intent
11482 // Type:
11483 @@ -2536,8 +3053,8 @@ void issue_p2p_GO_request(_adapter *pada
11484
11485 // Value:
11486 // Country String
11487 - p2pie[ p2pielen++ ] = 'U';
11488 - p2pie[ p2pielen++ ] = 'S';
11489 + p2pie[ p2pielen++ ] = 'X';
11490 + p2pie[ p2pielen++ ] = 'X';
11491
11492 // The third byte should be set to 0x04.
11493 // Described in the "Operating Channel Attribute" section.
11494 @@ -2585,33 +3102,104 @@ void issue_p2p_GO_request(_adapter *pada
11495 // Type:
11496 p2pie[ p2pielen++ ] = P2P_ATTR_CH_LIST;
11497
11498 - // Length:
11499 - chnum = ( u16 ) pmlmeext->max_chan_nums;
11500 - *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 5 + chnum );
11501 + // Length:
11502 + // Country String(3)
11503 + // + ( Operating Class (1) + Number of Channels(1) ) * Operation Classes (?)
11504 + // + number of channels in all classes
11505 + len_channellist_attr = 3
11506 + + (1 + 1) * (u16)(pmlmeext->channel_list.reg_classes)
11507 + + get_reg_classes_full_count(pmlmeext->channel_list);
11508 +
11509 +#ifdef CONFIG_CONCURRENT_MODE
11510 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
11511 + {
11512 + *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 5 + 1 );
11513 + }
11514 + else
11515 + {
11516 + *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( len_channellist_attr );
11517 + }
11518 +#else
11519 +
11520 + *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( len_channellist_attr );
11521 +
11522 +#endif
11523 p2pielen += 2;
11524
11525 // Value:
11526 // Country String
11527 - p2pie[ p2pielen++ ] = 'U';
11528 - p2pie[ p2pielen++ ] = 'S';
11529 + p2pie[ p2pielen++ ] = 'X';
11530 + p2pie[ p2pielen++ ] = 'X';
11531
11532 // The third byte should be set to 0x04.
11533 // Described in the "Operating Channel Attribute" section.
11534 p2pie[ p2pielen++ ] = 0x04;
11535
11536 // Channel Entry List
11537 - // Operating Class
11538 - p2pie[ p2pielen++ ] = 0x51; // Copy from SD7
11539
11540 - // Number of Channels
11541 - // Depends on the channel plan
11542 - p2pie[ p2pielen++ ] = pmlmeext->max_chan_nums;
11543 +#ifdef CONFIG_CONCURRENT_MODE
11544 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
11545 + {
11546 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
11547 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
11548
11549 - // Channel List
11550 - for( i = 0; i < pmlmeext->max_chan_nums; i++ )
11551 + // Operating Class
11552 + if ( pbuddy_mlmeext->cur_channel > 14 )
11553 + {
11554 + if ( pbuddy_mlmeext->cur_channel >= 149 )
11555 + {
11556 + p2pie[ p2pielen++ ] = 0x7c;
11557 + }
11558 + else
11559 + {
11560 + p2pie[ p2pielen++ ] = 0x73;
11561 + }
11562 + }
11563 + else
11564 + {
11565 + p2pie[ p2pielen++ ] = 0x51;
11566 + }
11567 +
11568 + // Number of Channels
11569 + // Just support 1 channel and this channel is AP's channel
11570 + p2pie[ p2pielen++ ] = 1;
11571 +
11572 + // Channel List
11573 + p2pie[ p2pielen++ ] = pbuddy_mlmeext->cur_channel;
11574 + }
11575 + else
11576 + {
11577 + int i,j;
11578 + for (j = 0; j < pmlmeext->channel_list.reg_classes; j++) {
11579 + // Operating Class
11580 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].reg_class;
11581 +
11582 + // Number of Channels
11583 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channels;
11584 +
11585 + // Channel List
11586 + for (i = 0; i < pmlmeext->channel_list.reg_class[j].channels; i++) {
11587 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channel[i];
11588 + }
11589 + }
11590 + }
11591 +#else // CONFIG_CONCURRENT_MODE
11592 {
11593 - p2pie[ p2pielen++ ] = pmlmeext->channel_set[ i ].ChannelNum;
11594 + int i,j;
11595 + for (j = 0; j < pmlmeext->channel_list.reg_classes; j++) {
11596 + // Operating Class
11597 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].reg_class;
11598 +
11599 + // Number of Channels
11600 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channels;
11601 +
11602 + // Channel List
11603 + for (i = 0; i < pmlmeext->channel_list.reg_class[j].channels; i++) {
11604 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channel[i];
11605 + }
11606 + }
11607 }
11608 +#endif // CONFIG_CONCURRENT_MODE
11609
11610 // Device Info
11611 // Type:
11612 @@ -2637,7 +3225,7 @@ void issue_p2p_GO_request(_adapter *pada
11613
11614 // Primary Device Type
11615 // Category ID
11616 - *(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_CID_RTK_WIDI );
11617 + *(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_CID_MULIT_MEDIA );
11618 p2pielen += 2;
11619
11620 // OUI
11621 @@ -2645,7 +3233,7 @@ void issue_p2p_GO_request(_adapter *pada
11622 p2pielen += 4;
11623
11624 // Sub Category ID
11625 - *(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_SCID_RTK_DMP );
11626 + *(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_SCID_MEDIA_SERVER );
11627 p2pielen += 2;
11628
11629 // Number of Secondary Device Types
11630 @@ -2675,16 +3263,30 @@ void issue_p2p_GO_request(_adapter *pada
11631
11632 // Value:
11633 // Country String
11634 - p2pie[ p2pielen++ ] = 'U';
11635 - p2pie[ p2pielen++ ] = 'S';
11636 + p2pie[ p2pielen++ ] = 'X';
11637 + p2pie[ p2pielen++ ] = 'X';
11638
11639 // The third byte should be set to 0x04.
11640 // Described in the "Operating Channel Attribute" section.
11641 p2pie[ p2pielen++ ] = 0x04;
11642
11643 // Operating Class
11644 - p2pie[ p2pielen++ ] = 0x51; // Copy from SD7
11645 -
11646 + if ( pwdinfo->operating_channel <= 14 )
11647 + {
11648 + // Operating Class
11649 + p2pie[ p2pielen++ ] = 0x51;
11650 + }
11651 + else if ( ( pwdinfo->operating_channel >= 36 ) && ( pwdinfo->operating_channel <= 48 ) )
11652 + {
11653 + // Operating Class
11654 + p2pie[ p2pielen++ ] = 0x73;
11655 + }
11656 + else
11657 + {
11658 + // Operating Class
11659 + p2pie[ p2pielen++ ] = 0x7c;
11660 + }
11661 +
11662 // Channel Number
11663 p2pie[ p2pielen++ ] = pwdinfo->operating_channel; // operating channel number
11664
11665 @@ -2717,10 +3319,8 @@ void issue_p2p_GO_response(_adapter *pad
11666 uint wpsielen = 0;
11667 u16 wps_devicepassword_id = 0x0000;
11668 uint wps_devicepassword_id_len = 0;
11669 - u16 chnum = 0;
11670 -#ifdef CONFIG_WFD
11671 - u32 wfdielen = 0;
11672 -#endif //CONFIG_WFD
11673 + u8 channel_cnt_24g = 0, channel_cnt_5gl = 0, channel_cnt_5gh;
11674 + u16 len_channellist_attr = 0;
11675
11676 struct xmit_frame *pmgntframe;
11677 struct pkt_attrib *pattrib;
11678 @@ -2732,13 +3332,16 @@ void issue_p2p_GO_response(_adapter *pad
11679 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
11680 struct wifidirect_info *pwdinfo = &( padapter->wdinfo);
11681
11682 +#ifdef CONFIG_WFD
11683 + u32 wfdielen = 0;
11684 +#endif //CONFIG_WFD
11685
11686 if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
11687 {
11688 return;
11689 }
11690
11691 - DBG_8192C( "[%s] In\n", __FUNCTION__ );
11692 + DBG_871X( "[%s] In, result = %d\n", __FUNCTION__, result );
11693 //update attribute
11694 pattrib = &pmgntframe->attrib;
11695 update_mgntframe_attrib(padapter, pattrib);
11696 @@ -2839,7 +3442,7 @@ void issue_p2p_GO_response(_adapter *pad
11697 _rtw_memcpy( pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, "pbc", 3 );
11698 }
11699 }
11700 -
11701 +
11702 pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, wpsielen, (unsigned char *) wpsie, &pattrib->pktlen );
11703
11704
11705 @@ -2899,13 +3502,18 @@ void issue_p2p_GO_response(_adapter *pad
11706 else
11707 {
11708 // Be group owner or meet the error case
11709 - // Be able to participate in additional P2P Groups and
11710 - // support the P2P Invitation Procedure
11711 - p2pie[ p2pielen++ ] = P2P_DEVCAP_INVITATION_PROC;
11712 + p2pie[ p2pielen++ ] = DMP_P2P_DEVCAP_SUPPORT;
11713 }
11714
11715 // Group Capability Bitmap, 1 byte
11716 - p2pie[ p2pielen++ ] = 0x00;
11717 + if ( pwdinfo->persistent_supported )
11718 + {
11719 + p2pie[ p2pielen++ ] = P2P_GRPCAP_CROSS_CONN | P2P_GRPCAP_PERSISTENT_GROUP;
11720 + }
11721 + else
11722 + {
11723 + p2pie[ p2pielen++ ] = P2P_GRPCAP_CROSS_CONN;
11724 + }
11725
11726 // Group Owner Intent
11727 // Type:
11728 @@ -2950,15 +3558,29 @@ void issue_p2p_GO_response(_adapter *pad
11729
11730 // Value:
11731 // Country String
11732 - p2pie[ p2pielen++ ] = 'U';
11733 - p2pie[ p2pielen++ ] = 'S';
11734 + p2pie[ p2pielen++ ] = 'X';
11735 + p2pie[ p2pielen++ ] = 'X';
11736
11737 // The third byte should be set to 0x04.
11738 // Described in the "Operating Channel Attribute" section.
11739 p2pie[ p2pielen++ ] = 0x04;
11740
11741 // Operating Class
11742 - p2pie[ p2pielen++ ] = 0x51; // Copy from SD7
11743 + if ( pwdinfo->operating_channel <= 14 )
11744 + {
11745 + // Operating Class
11746 + p2pie[ p2pielen++ ] = 0x51;
11747 + }
11748 + else if ( ( pwdinfo->operating_channel >= 36 ) && ( pwdinfo->operating_channel <= 48 ) )
11749 + {
11750 + // Operating Class
11751 + p2pie[ p2pielen++ ] = 0x73;
11752 + }
11753 + else
11754 + {
11755 + // Operating Class
11756 + p2pie[ p2pielen++ ] = 0x7c;
11757 + }
11758
11759 // Channel Number
11760 p2pie[ p2pielen++ ] = pwdinfo->operating_channel; // operating channel number
11761 @@ -2979,33 +3601,103 @@ void issue_p2p_GO_response(_adapter *pad
11762 // Type:
11763 p2pie[ p2pielen++ ] = P2P_ATTR_CH_LIST;
11764
11765 - // Length:
11766 - chnum = ( u16 ) pmlmeext->max_chan_nums;
11767 - *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 5 + chnum );
11768 + // Country String(3)
11769 + // + ( Operating Class (1) + Number of Channels(1) ) * Operation Classes (?)
11770 + // + number of channels in all classes
11771 + len_channellist_attr = 3
11772 + + (1 + 1) * (u16)pmlmeext->channel_list.reg_classes
11773 + + get_reg_classes_full_count(pmlmeext->channel_list);
11774 +
11775 +#ifdef CONFIG_CONCURRENT_MODE
11776 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
11777 + {
11778 + *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 5 + 1 );
11779 + }
11780 + else
11781 + {
11782 + *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( len_channellist_attr );
11783 + }
11784 +#else
11785 +
11786 + *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( len_channellist_attr );
11787 +
11788 + #endif
11789 p2pielen += 2;
11790
11791 // Value:
11792 // Country String
11793 - p2pie[ p2pielen++ ] = 'U';
11794 - p2pie[ p2pielen++ ] = 'S';
11795 + p2pie[ p2pielen++ ] = 'X';
11796 + p2pie[ p2pielen++ ] = 'X';
11797
11798 // The third byte should be set to 0x04.
11799 // Described in the "Operating Channel Attribute" section.
11800 p2pie[ p2pielen++ ] = 0x04;
11801
11802 // Channel Entry List
11803 - // Operating Class
11804 - p2pie[ p2pielen++ ] = 0x51; // Copy from SD7
11805
11806 - // Number of Channels
11807 - // Depends on the channel plan
11808 - p2pie[ p2pielen++ ] = pmlmeext->max_chan_nums;
11809 +#ifdef CONFIG_CONCURRENT_MODE
11810 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
11811 + {
11812 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
11813 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
11814
11815 - // Channel List
11816 - for( i = 0; i < pmlmeext->max_chan_nums; i++ )
11817 + // Operating Class
11818 + if ( pbuddy_mlmeext->cur_channel > 14 )
11819 + {
11820 + if ( pbuddy_mlmeext->cur_channel >= 149 )
11821 + {
11822 + p2pie[ p2pielen++ ] = 0x7c;
11823 + }
11824 + else
11825 + {
11826 + p2pie[ p2pielen++ ] = 0x73;
11827 + }
11828 + }
11829 + else
11830 + {
11831 + p2pie[ p2pielen++ ] = 0x51;
11832 + }
11833 +
11834 + // Number of Channels
11835 + // Just support 1 channel and this channel is AP's channel
11836 + p2pie[ p2pielen++ ] = 1;
11837 +
11838 + // Channel List
11839 + p2pie[ p2pielen++ ] = pbuddy_mlmeext->cur_channel;
11840 + }
11841 + else
11842 + {
11843 + int i, j;
11844 + for (j = 0; j < pmlmeext->channel_list.reg_classes; j++) {
11845 + // Operating Class
11846 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].reg_class;
11847 +
11848 + // Number of Channels
11849 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channels;
11850 +
11851 + // Channel List
11852 + for (i = 0; i < pmlmeext->channel_list.reg_class[j].channels; i++) {
11853 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channel[i];
11854 + }
11855 + }
11856 + }
11857 +#else // CONFIG_CONCURRENT_MODE
11858 {
11859 - p2pie[ p2pielen++ ] = pmlmeext->channel_set[ i ].ChannelNum;
11860 + int i, j;
11861 + for (j = 0; j < pmlmeext->channel_list.reg_classes; j++) {
11862 + // Operating Class
11863 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].reg_class;
11864 +
11865 + // Number of Channels
11866 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channels;
11867 +
11868 + // Channel List
11869 + for (i = 0; i < pmlmeext->channel_list.reg_class[j].channels; i++) {
11870 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channel[i];
11871 + }
11872 + }
11873 }
11874 +#endif // CONFIG_CONCURRENT_MODE
11875
11876 // Device Info
11877 // Type:
11878 @@ -3031,7 +3723,7 @@ void issue_p2p_GO_response(_adapter *pad
11879
11880 // Primary Device Type
11881 // Category ID
11882 - *(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_CID_RTK_WIDI );
11883 + *(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_CID_MULIT_MEDIA );
11884 p2pielen += 2;
11885
11886 // OUI
11887 @@ -3039,7 +3731,7 @@ void issue_p2p_GO_response(_adapter *pad
11888 p2pielen += 4;
11889
11890 // Sub Category ID
11891 - *(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_SCID_RTK_DMP );
11892 + *(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_SCID_MEDIA_SERVER );
11893 p2pielen += 2;
11894
11895 // Number of Secondary Device Types
11896 @@ -3080,12 +3772,12 @@ void issue_p2p_GO_response(_adapter *pad
11897 }
11898
11899 pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *) p2pie, &pattrib->pktlen );
11900 -
11901 +
11902 #ifdef CONFIG_WFD
11903 wfdielen = build_nego_resp_wfd_ie(pwdinfo, pframe);
11904 pframe += wfdielen;
11905 pattrib->pktlen += wfdielen;
11906 -#endif //CONFIG_WFD
11907 +#endif //CONFIG_WFD
11908
11909 pattrib->last_txcmdsz = pattrib->pktlen;
11910
11911 @@ -3104,9 +3796,6 @@ void issue_p2p_GO_confirm(_adapter *pada
11912 u8 oui_subtype = P2P_GO_NEGO_CONF;
11913 u8 wpsie[ 255 ] = { 0x00 }, p2pie[ 255 ] = { 0x00 };
11914 u8 wpsielen = 0, p2pielen = 0;
11915 -#ifdef CONFIG_WFD
11916 - u32 wfdielen = 0;
11917 -#endif //CONFIG_WFD
11918
11919 struct xmit_frame *pmgntframe;
11920 struct pkt_attrib *pattrib;
11921 @@ -3117,14 +3806,16 @@ void issue_p2p_GO_confirm(_adapter *pada
11922 struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
11923 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
11924 struct wifidirect_info *pwdinfo = &( padapter->wdinfo);
11925 -
11926 +#ifdef CONFIG_WFD
11927 + u32 wfdielen = 0;
11928 +#endif //CONFIG_WFD
11929
11930 if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
11931 {
11932 return;
11933 }
11934
11935 - DBG_8192C( "[%s] In\n", __FUNCTION__ );
11936 + DBG_871X( "[%s] In\n", __FUNCTION__ );
11937 //update attribute
11938 pattrib = &pmgntframe->attrib;
11939 update_mgntframe_attrib(padapter, pattrib);
11940 @@ -3194,12 +3885,17 @@ void issue_p2p_GO_confirm(_adapter *pada
11941
11942 // Value:
11943 // Device Capability Bitmap, 1 byte
11944 - // Be able to participate in additional P2P Groups and
11945 - // support the P2P Invitation Procedure
11946 - p2pie[ p2pielen++ ] = P2P_DEVCAP_INVITATION_PROC;
11947 + p2pie[ p2pielen++ ] = DMP_P2P_DEVCAP_SUPPORT;
11948
11949 // Group Capability Bitmap, 1 byte
11950 - p2pie[ p2pielen++ ] = 0x00;
11951 + if ( pwdinfo->persistent_supported )
11952 + {
11953 + p2pie[ p2pielen++ ] = P2P_GRPCAP_CROSS_CONN | P2P_GRPCAP_PERSISTENT_GROUP;
11954 + }
11955 + else
11956 + {
11957 + p2pie[ p2pielen++ ] = P2P_GRPCAP_CROSS_CONN;
11958 + }
11959
11960
11961 // Operating Channel
11962 @@ -3212,24 +3908,54 @@ void issue_p2p_GO_confirm(_adapter *pada
11963
11964 // Value:
11965 // Country String
11966 - p2pie[ p2pielen++ ] = 'U';
11967 - p2pie[ p2pielen++ ] = 'S';
11968 + p2pie[ p2pielen++ ] = 'X';
11969 + p2pie[ p2pielen++ ] = 'X';
11970
11971 // The third byte should be set to 0x04.
11972 // Described in the "Operating Channel Attribute" section.
11973 p2pie[ p2pielen++ ] = 0x04;
11974
11975 - // Operating Class
11976 - p2pie[ p2pielen++ ] = 0x51; // Copy from SD7
11977
11978 if ( rtw_p2p_chk_role(pwdinfo, P2P_ROLE_CLIENT) )
11979 {
11980 - p2pie[ p2pielen++ ] = pwdinfo->peer_operating_ch;
11981 - }
11982 - else
11983 - {
11984 - // Channel Number
11985 - p2pie[ p2pielen++ ] = pwdinfo->operating_channel; // Use the listen channel as the operating channel
11986 + if ( pwdinfo->peer_operating_ch <= 14 )
11987 + {
11988 + // Operating Class
11989 + p2pie[ p2pielen++ ] = 0x51;
11990 + }
11991 + else if ( ( pwdinfo->peer_operating_ch >= 36 ) && ( pwdinfo->peer_operating_ch <= 48 ) )
11992 + {
11993 + // Operating Class
11994 + p2pie[ p2pielen++ ] = 0x73;
11995 + }
11996 + else
11997 + {
11998 + // Operating Class
11999 + p2pie[ p2pielen++ ] = 0x7c;
12000 + }
12001 +
12002 + p2pie[ p2pielen++ ] = pwdinfo->peer_operating_ch;
12003 + }
12004 + else
12005 + {
12006 + if ( pwdinfo->operating_channel <= 14 )
12007 + {
12008 + // Operating Class
12009 + p2pie[ p2pielen++ ] = 0x51;
12010 + }
12011 + else if ( ( pwdinfo->operating_channel >= 36 ) && ( pwdinfo->operating_channel <= 48 ) )
12012 + {
12013 + // Operating Class
12014 + p2pie[ p2pielen++ ] = 0x73;
12015 + }
12016 + else
12017 + {
12018 + // Operating Class
12019 + p2pie[ p2pielen++ ] = 0x7c;
12020 + }
12021 +
12022 + // Channel Number
12023 + p2pie[ p2pielen++ ] = pwdinfo->operating_channel; // Use the listen channel as the operating channel
12024 }
12025
12026
12027 @@ -3237,29 +3963,60 @@ void issue_p2p_GO_confirm(_adapter *pada
12028 // Type:
12029 p2pie[ p2pielen++ ] = P2P_ATTR_CH_LIST;
12030
12031 - // Length:
12032 - *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 5 + pwdinfo->channel_cnt );
12033 + *(u16*) ( p2pie + p2pielen ) = 6;
12034 p2pielen += 2;
12035
12036 - // Value:
12037 // Country String
12038 - p2pie[ p2pielen++ ] = 'U';
12039 - p2pie[ p2pielen++ ] = 'S';
12040 + p2pie[ p2pielen++ ] = 'X';
12041 + p2pie[ p2pielen++ ] = 'X';
12042
12043 // The third byte should be set to 0x04.
12044 // Described in the "Operating Channel Attribute" section.
12045 p2pie[ p2pielen++ ] = 0x04;
12046
12047 - // Channel Entry List
12048 - // Operating Class
12049 - p2pie[ p2pielen++ ] = 0x51; // Copy from SD7
12050 -
12051 - // Number of Channels
12052 - p2pie[ p2pielen++ ] = pwdinfo->channel_cnt;
12053 -
12054 - // Channel List
12055 - _rtw_memcpy( p2pie + p2pielen, pwdinfo->channel_list, pwdinfo->channel_cnt );
12056 - p2pielen += pwdinfo->channel_cnt;
12057 + // Value:
12058 + if ( rtw_p2p_chk_role(pwdinfo, P2P_ROLE_CLIENT) )
12059 + {
12060 + if ( pwdinfo->peer_operating_ch <= 14 )
12061 + {
12062 + // Operating Class
12063 + p2pie[ p2pielen++ ] = 0x51;
12064 + }
12065 + else if ( ( pwdinfo->peer_operating_ch >= 36 ) && ( pwdinfo->peer_operating_ch <= 48 ) )
12066 + {
12067 + // Operating Class
12068 + p2pie[ p2pielen++ ] = 0x73;
12069 + }
12070 + else
12071 + {
12072 + // Operating Class
12073 + p2pie[ p2pielen++ ] = 0x7c;
12074 + }
12075 + p2pie[ p2pielen++ ] = 1;
12076 + p2pie[ p2pielen++ ] = pwdinfo->peer_operating_ch;
12077 + }
12078 + else
12079 + {
12080 + if ( pwdinfo->operating_channel <= 14 )
12081 + {
12082 + // Operating Class
12083 + p2pie[ p2pielen++ ] = 0x51;
12084 + }
12085 + else if ( ( pwdinfo->operating_channel >= 36 ) && ( pwdinfo->operating_channel <= 48 ) )
12086 + {
12087 + // Operating Class
12088 + p2pie[ p2pielen++ ] = 0x73;
12089 + }
12090 + else
12091 + {
12092 + // Operating Class
12093 + p2pie[ p2pielen++ ] = 0x7c;
12094 + }
12095 +
12096 + // Channel Number
12097 + p2pie[ p2pielen++ ] = 1;
12098 + p2pie[ p2pielen++ ] = pwdinfo->operating_channel; // Use the listen channel as the operating channel
12099 + }
12100
12101 if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO) )
12102 {
12103 @@ -3282,12 +4039,12 @@ void issue_p2p_GO_confirm(_adapter *pada
12104 }
12105
12106 pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *) p2pie, &pattrib->pktlen );
12107 -
12108 +
12109 #ifdef CONFIG_WFD
12110 wfdielen = build_nego_confirm_wfd_ie(pwdinfo, pframe);
12111 pframe += wfdielen;
12112 pattrib->pktlen += wfdielen;
12113 -#endif //CONFIG_WFD
12114 +#endif //CONFIG_WFD
12115
12116 pattrib->last_txcmdsz = pattrib->pktlen;
12117
12118 @@ -3305,9 +4062,20 @@ void issue_p2p_invitation_request(_adapt
12119 u32 p2poui = cpu_to_be32(P2POUI);
12120 u8 oui_subtype = P2P_INVIT_REQ;
12121 u8 p2pie[ 255 ] = { 0x00 };
12122 - u8 p2pielen = 0;
12123 + u8 p2pielen = 0, i;
12124 u8 dialogToken = 3;
12125 -
12126 + u8 channel_cnt_24g = 0, channel_cnt_5gl = 0, channel_cnt_5gh = 0;
12127 + u16 len_channellist_attr = 0;
12128 +#ifdef CONFIG_WFD
12129 + u32 wfdielen = 0;
12130 +#endif //CONFIG_WFD
12131 +#ifdef CONFIG_CONCURRENT_MODE
12132 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
12133 + struct wifidirect_info *pbuddy_wdinfo = &pbuddy_adapter->wdinfo;
12134 + struct mlme_priv *pbuddy_mlmepriv = &pbuddy_adapter->mlmepriv;
12135 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
12136 +#endif
12137 +
12138 struct xmit_frame *pmgntframe;
12139 struct pkt_attrib *pattrib;
12140 unsigned char *pframe;
12141 @@ -3367,7 +4135,7 @@ void issue_p2p_invitation_request(_adapt
12142 // 1. Configuration Timeout
12143 // 2. Invitation Flags
12144 // 3. Operating Channel ( Only GO )
12145 - // 4. P2P Group BSSID ( Only GO )
12146 + // 4. P2P Group BSSID ( Should be included if I am the GO )
12147 // 5. Channel List
12148 // 6. P2P Group ID
12149 // 7. P2P Device Info
12150 @@ -3396,42 +4164,153 @@ void issue_p2p_invitation_request(_adapt
12151 p2pie[ p2pielen++ ] = P2P_INVITATION_FLAGS_PERSISTENT;
12152
12153
12154 - // Channel List
12155 + // Operating Channel
12156 // Type:
12157 - p2pie[ p2pielen++ ] = P2P_ATTR_CH_LIST;
12158 + p2pie[ p2pielen++ ] = P2P_ATTR_OPERATING_CH;
12159
12160 // Length:
12161 - *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 0x0010 );
12162 + *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 0x0005 );
12163 p2pielen += 2;
12164
12165 // Value:
12166 // Country String
12167 - p2pie[ p2pielen++ ] = 'U';
12168 - p2pie[ p2pielen++ ] = 'S';
12169 + p2pie[ p2pielen++ ] = 'X';
12170 + p2pie[ p2pielen++ ] = 'X';
12171
12172 // The third byte should be set to 0x04.
12173 // Described in the "Operating Channel Attribute" section.
12174 p2pie[ p2pielen++ ] = 0x04;
12175
12176 - // Channel Entry List
12177 // Operating Class
12178 - p2pie[ p2pielen++ ] = 0x51; // Copy from SD7
12179 + if ( pwdinfo->invitereq_info.operating_ch <= 14 )
12180 + p2pie[ p2pielen++ ] = 0x51;
12181 + else if ( ( pwdinfo->invitereq_info.operating_ch >= 36 ) && ( pwdinfo->invitereq_info.operating_ch <= 48 ) )
12182 + p2pie[ p2pielen++ ] = 0x73;
12183 + else
12184 + p2pie[ p2pielen++ ] = 0x7c;
12185 +
12186 + // Channel Number
12187 + p2pie[ p2pielen++ ] = pwdinfo->invitereq_info.operating_ch; // operating channel number
12188 +
12189 + if ( _rtw_memcmp( myid( &padapter->eeprompriv ), pwdinfo->invitereq_info.go_bssid, ETH_ALEN ) )
12190 + {
12191 + // P2P Group BSSID
12192 + // Type:
12193 + p2pie[ p2pielen++ ] = P2P_ATTR_GROUP_BSSID;
12194
12195 - // Number of Channels
12196 - p2pie[ p2pielen++ ] = 0x0B; // support channel 1 - 11
12197 + // Length:
12198 + *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( ETH_ALEN );
12199 + p2pielen += 2;
12200 +
12201 + // Value:
12202 + // P2P Device Address for GO
12203 + _rtw_memcpy( p2pie + p2pielen, pwdinfo->invitereq_info.go_bssid, ETH_ALEN );
12204 + p2pielen += ETH_ALEN;
12205 + }
12206
12207 // Channel List
12208 - p2pie[ p2pielen++ ] = 0x01;
12209 - p2pie[ p2pielen++ ] = 0x02;
12210 - p2pie[ p2pielen++ ] = 0x03;
12211 + // Type:
12212 + p2pie[ p2pielen++ ] = P2P_ATTR_CH_LIST;
12213 +
12214 +
12215 + // Length:
12216 + // Country String(3)
12217 + // + ( Operating Class (1) + Number of Channels(1) ) * Operation Classes (?)
12218 + // + number of channels in all classes
12219 + len_channellist_attr = 3
12220 + + (1 + 1) * (u16)pmlmeext->channel_list.reg_classes
12221 + + get_reg_classes_full_count(pmlmeext->channel_list);
12222 +
12223 +#ifdef CONFIG_CONCURRENT_MODE
12224 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
12225 + {
12226 + *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 5 + 1 );
12227 + }
12228 + else
12229 + {
12230 + *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( len_channellist_attr );
12231 + }
12232 +#else
12233 +
12234 + *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( len_channellist_attr );
12235 +
12236 + #endif
12237 + p2pielen += 2;
12238 +
12239 + // Value:
12240 + // Country String
12241 + p2pie[ p2pielen++ ] = 'X';
12242 + p2pie[ p2pielen++ ] = 'X';
12243 +
12244 + // The third byte should be set to 0x04.
12245 + // Described in the "Operating Channel Attribute" section.
12246 p2pie[ p2pielen++ ] = 0x04;
12247 - p2pie[ p2pielen++ ] = 0x05;
12248 - p2pie[ p2pielen++ ] = 0x06;
12249 - p2pie[ p2pielen++ ] = 0x07;
12250 - p2pie[ p2pielen++ ] = 0x08;
12251 - p2pie[ p2pielen++ ] = 0x09;
12252 - p2pie[ p2pielen++ ] = 0x0A;
12253 - p2pie[ p2pielen++ ] = 0x0B;
12254 +
12255 + // Channel Entry List
12256 +#ifdef CONFIG_CONCURRENT_MODE
12257 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
12258 + {
12259 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
12260 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
12261 +
12262 + // Operating Class
12263 + if ( pbuddy_mlmeext->cur_channel > 14 )
12264 + {
12265 + if ( pbuddy_mlmeext->cur_channel >= 149 )
12266 + {
12267 + p2pie[ p2pielen++ ] = 0x7c;
12268 + }
12269 + else
12270 + {
12271 + p2pie[ p2pielen++ ] = 0x73;
12272 + }
12273 + }
12274 + else
12275 + {
12276 + p2pie[ p2pielen++ ] = 0x51;
12277 + }
12278 +
12279 + // Number of Channels
12280 + // Just support 1 channel and this channel is AP's channel
12281 + p2pie[ p2pielen++ ] = 1;
12282 +
12283 + // Channel List
12284 + p2pie[ p2pielen++ ] = pbuddy_mlmeext->cur_channel;
12285 + }
12286 + else
12287 + {
12288 + int i, j;
12289 + for (j = 0; j < pmlmeext->channel_list.reg_classes; j++) {
12290 + // Operating Class
12291 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].reg_class;
12292 +
12293 + // Number of Channels
12294 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channels;
12295 +
12296 + // Channel List
12297 + for (i = 0; i < pmlmeext->channel_list.reg_class[j].channels; i++) {
12298 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channel[i];
12299 + }
12300 + }
12301 + }
12302 +#else // CONFIG_CONCURRENT_MODE
12303 + {
12304 + int i, j;
12305 + for (j = 0; j < pmlmeext->channel_list.reg_classes; j++) {
12306 + // Operating Class
12307 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].reg_class;
12308 +
12309 + // Number of Channels
12310 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channels;
12311 +
12312 + // Channel List
12313 + for (i = 0; i < pmlmeext->channel_list.reg_class[j].channels; i++) {
12314 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channel[i];
12315 + }
12316 + }
12317 + }
12318 +#endif // CONFIG_CONCURRENT_MODE
12319 +
12320
12321 // P2P Group ID
12322 // Type:
12323 @@ -3443,11 +4322,11 @@ void issue_p2p_invitation_request(_adapt
12324
12325 // Value:
12326 // P2P Device Address for GO
12327 - _rtw_memcpy( p2pie + p2pielen, raddr, ETH_ALEN );
12328 + _rtw_memcpy( p2pie + p2pielen, pwdinfo->invitereq_info.go_bssid, ETH_ALEN );
12329 p2pielen += ETH_ALEN;
12330
12331 // SSID
12332 - _rtw_memcpy( p2pie + p2pielen, pwdinfo->invitereq_info.ssid, pwdinfo->invitereq_info.ssidlen );
12333 + _rtw_memcpy( p2pie + p2pielen, pwdinfo->invitereq_info.go_ssid, pwdinfo->invitereq_info.ssidlen );
12334 p2pielen += pwdinfo->invitereq_info.ssidlen;
12335
12336
12337 @@ -3473,7 +4352,7 @@ void issue_p2p_invitation_request(_adapt
12338
12339 // Primary Device Type
12340 // Category ID
12341 - *(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_CID_RTK_WIDI );
12342 + *(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_CID_MULIT_MEDIA );
12343 p2pielen += 2;
12344
12345 // OUI
12346 @@ -3481,7 +4360,7 @@ void issue_p2p_invitation_request(_adapt
12347 p2pielen += 4;
12348
12349 // Sub Category ID
12350 - *(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_SCID_RTK_DMP );
12351 + *(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_SCID_MEDIA_SERVER );
12352 p2pielen += 2;
12353
12354 // Number of Secondary Device Types
12355 @@ -3501,7 +4380,12 @@ void issue_p2p_invitation_request(_adapt
12356 p2pielen += pwdinfo->device_name_len;
12357
12358 pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *) p2pie, &pattrib->pktlen );
12359 -
12360 +
12361 +#ifdef CONFIG_WFD
12362 + wfdielen = build_invitation_req_wfd_ie(pwdinfo, pframe);
12363 + pframe += wfdielen;
12364 + pattrib->pktlen += wfdielen;
12365 +#endif //CONFIG_WFD
12366
12367 pattrib->last_txcmdsz = pattrib->pktlen;
12368
12369 @@ -3511,7 +4395,7 @@ void issue_p2p_invitation_request(_adapt
12370
12371 }
12372
12373 -void issue_p2p_invitation_response(_adapter *padapter, u8* raddr, u8 dialogToken, u8 success)
12374 +void issue_p2p_invitation_response(_adapter *padapter, u8* raddr, u8 dialogToken, u8 status_code)
12375 {
12376
12377 unsigned char category = RTW_WLAN_CATEGORY_PUBLIC;
12378 @@ -3519,7 +4403,18 @@ void issue_p2p_invitation_response(_adap
12379 u32 p2poui = cpu_to_be32(P2POUI);
12380 u8 oui_subtype = P2P_INVIT_RESP;
12381 u8 p2pie[ 255 ] = { 0x00 };
12382 - u8 p2pielen = 0;
12383 + u8 p2pielen = 0, i;
12384 + u8 channel_cnt_24g = 0, channel_cnt_5gl = 0, channel_cnt_5gh = 0;
12385 + u16 len_channellist_attr = 0;
12386 +#ifdef CONFIG_CONCURRENT_MODE
12387 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
12388 + struct wifidirect_info *pbuddy_wdinfo = &pbuddy_adapter->wdinfo;
12389 + struct mlme_priv *pbuddy_mlmepriv = &pbuddy_adapter->mlmepriv;
12390 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
12391 +#endif
12392 +#ifdef CONFIG_WFD
12393 + u32 wfdielen = 0;
12394 +#endif //CONFIG_WFD
12395
12396 struct xmit_frame *pmgntframe;
12397 struct pkt_attrib *pattrib;
12398 @@ -3592,19 +4487,13 @@ void issue_p2p_invitation_response(_adap
12399 p2pielen += 2;
12400
12401 // Value:
12402 - if ( success )
12403 - {
12404 - p2pie[ p2pielen++ ] = P2P_STATUS_SUCCESS;
12405 - }
12406 - else
12407 - {
12408 - // Sent the event receiving the P2P Invitation Req frame to DMP UI.
12409 - // DMP had to compare the MAC address to find out the profile.
12410 - // So, the WiFi driver will send the P2P_STATUS_FAIL_INFO_UNAVAILABLE to NB.
12411 - // If the UI found the corresponding profile, the WiFi driver sends the P2P Invitation Req
12412 - // to NB to rebuild the persistent group.
12413 - p2pie[ p2pielen++ ] = P2P_STATUS_FAIL_INFO_UNAVAILABLE;
12414 - }
12415 + // When status code is P2P_STATUS_FAIL_INFO_UNAVAILABLE.
12416 + // Sent the event receiving the P2P Invitation Req frame to DMP UI.
12417 + // DMP had to compare the MAC address to find out the profile.
12418 + // So, the WiFi driver will send the P2P_STATUS_FAIL_INFO_UNAVAILABLE to NB.
12419 + // If the UI found the corresponding profile, the WiFi driver sends the P2P Invitation Req
12420 + // to NB to rebuild the persistent group.
12421 + p2pie[ p2pielen++ ] = status_code;
12422
12423 // Configuration Timeout
12424 // Type:
12425 @@ -3618,49 +4507,164 @@ void issue_p2p_invitation_response(_adap
12426 p2pie[ p2pielen++ ] = 200; // 2 seconds needed to be the P2P GO
12427 p2pie[ p2pielen++ ] = 200; // 2 seconds needed to be the P2P Client
12428
12429 -
12430 - if ( success )
12431 + if( status_code == P2P_STATUS_SUCCESS )
12432 {
12433 + if( rtw_p2p_chk_role( pwdinfo, P2P_ROLE_GO ) )
12434 + {
12435 + // The P2P Invitation request frame asks this Wi-Fi device to be the P2P GO
12436 + // In this case, the P2P Invitation response frame should carry the two more P2P attributes.
12437 + // First one is operating channel attribute.
12438 + // Second one is P2P Group BSSID attribute.
12439 +
12440 + // Operating Channel
12441 + // Type:
12442 + p2pie[ p2pielen++ ] = P2P_ATTR_OPERATING_CH;
12443 +
12444 + // Length:
12445 + *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 0x0005 );
12446 + p2pielen += 2;
12447 +
12448 + // Value:
12449 + // Country String
12450 + p2pie[ p2pielen++ ] = 'X';
12451 + p2pie[ p2pielen++ ] = 'X';
12452 +
12453 + // The third byte should be set to 0x04.
12454 + // Described in the "Operating Channel Attribute" section.
12455 + p2pie[ p2pielen++ ] = 0x04;
12456 +
12457 + // Operating Class
12458 + p2pie[ p2pielen++ ] = 0x51; // Copy from SD7
12459 +
12460 + // Channel Number
12461 + p2pie[ p2pielen++ ] = pwdinfo->operating_channel; // operating channel number
12462 +
12463 +
12464 + // P2P Group BSSID
12465 + // Type:
12466 + p2pie[ p2pielen++ ] = P2P_ATTR_GROUP_BSSID;
12467 +
12468 + // Length:
12469 + *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( ETH_ALEN );
12470 + p2pielen += 2;
12471 +
12472 + // Value:
12473 + // P2P Device Address for GO
12474 + _rtw_memcpy( p2pie + p2pielen, myid( &padapter->eeprompriv ), ETH_ALEN );
12475 + p2pielen += ETH_ALEN;
12476 +
12477 + }
12478 +
12479 // Channel List
12480 // Type:
12481 p2pie[ p2pielen++ ] = P2P_ATTR_CH_LIST;
12482
12483 // Length:
12484 - *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 0x0010 );
12485 + // Country String(3)
12486 + // + ( Operating Class (1) + Number of Channels(1) ) * Operation Classes (?)
12487 + // + number of channels in all classes
12488 + len_channellist_attr = 3
12489 + + (1 + 1) * (u16)pmlmeext->channel_list.reg_classes
12490 + + get_reg_classes_full_count(pmlmeext->channel_list);
12491 +
12492 +#ifdef CONFIG_CONCURRENT_MODE
12493 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
12494 + {
12495 + *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 5 + 1 );
12496 + }
12497 + else
12498 + {
12499 + *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( len_channellist_attr );
12500 + }
12501 +#else
12502 +
12503 + *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( len_channellist_attr );
12504 +
12505 +#endif
12506 p2pielen += 2;
12507
12508 // Value:
12509 // Country String
12510 - p2pie[ p2pielen++ ] = 'U';
12511 - p2pie[ p2pielen++ ] = 'S';
12512 -
12513 + p2pie[ p2pielen++ ] = 'X';
12514 + p2pie[ p2pielen++ ] = 'X';
12515 +
12516 // The third byte should be set to 0x04.
12517 // Described in the "Operating Channel Attribute" section.
12518 p2pie[ p2pielen++ ] = 0x04;
12519
12520 // Channel Entry List
12521 - // Operating Class
12522 - p2pie[ p2pielen++ ] = 0x51; // Copy from SD7
12523 +#ifdef CONFIG_CONCURRENT_MODE
12524 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
12525 + {
12526 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
12527 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
12528
12529 - // Number of Channels
12530 - p2pie[ p2pielen++ ] = 0x0B; // support channel 1 - 11
12531 + // Operating Class
12532 + if ( pbuddy_mlmeext->cur_channel > 14 )
12533 + {
12534 + if ( pbuddy_mlmeext->cur_channel >= 149 )
12535 + {
12536 + p2pie[ p2pielen++ ] = 0x7c;
12537 + }
12538 + else
12539 + {
12540 + p2pie[ p2pielen++ ] = 0x73;
12541 + }
12542 + }
12543 + else
12544 + {
12545 + p2pie[ p2pielen++ ] = 0x51;
12546 + }
12547
12548 - // Channel List
12549 - p2pie[ p2pielen++ ] = 0x01;
12550 - p2pie[ p2pielen++ ] = 0x02;
12551 - p2pie[ p2pielen++ ] = 0x03;
12552 - p2pie[ p2pielen++ ] = 0x04;
12553 - p2pie[ p2pielen++ ] = 0x05;
12554 - p2pie[ p2pielen++ ] = 0x06;
12555 - p2pie[ p2pielen++ ] = 0x07;
12556 - p2pie[ p2pielen++ ] = 0x08;
12557 - p2pie[ p2pielen++ ] = 0x09;
12558 - p2pie[ p2pielen++ ] = 0x0A;
12559 - p2pie[ p2pielen++ ] = 0x0B;
12560 + // Number of Channels
12561 + // Just support 1 channel and this channel is AP's channel
12562 + p2pie[ p2pielen++ ] = 1;
12563 +
12564 + // Channel List
12565 + p2pie[ p2pielen++ ] = pbuddy_mlmeext->cur_channel;
12566 + }
12567 + else
12568 + {
12569 + int i, j;
12570 + for (j = 0; j < pmlmeext->channel_list.reg_classes; j++) {
12571 + // Operating Class
12572 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].reg_class;
12573 +
12574 + // Number of Channels
12575 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channels;
12576 +
12577 + // Channel List
12578 + for (i = 0; i < pmlmeext->channel_list.reg_class[j].channels; i++) {
12579 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channel[i];
12580 + }
12581 + }
12582 + }
12583 +#else // CONFIG_CONCURRENT_MODE
12584 + {
12585 + int i, j;
12586 + for (j = 0; j < pmlmeext->channel_list.reg_classes; j++) {
12587 + // Operating Class
12588 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].reg_class;
12589 +
12590 + // Number of Channels
12591 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channels;
12592 +
12593 + // Channel List
12594 + for (i = 0; i < pmlmeext->channel_list.reg_class[j].channels; i++) {
12595 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channel[i];
12596 + }
12597 + }
12598 + }
12599 +#endif // CONFIG_CONCURRENT_MODE
12600 }
12601
12602 pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *) p2pie, &pattrib->pktlen );
12603
12604 +#ifdef CONFIG_WFD
12605 + wfdielen = build_invitation_resp_wfd_ie(pwdinfo, pframe);
12606 + pframe += wfdielen;
12607 + pattrib->pktlen += wfdielen;
12608 +#endif //CONFIG_WFD
12609
12610 pattrib->last_txcmdsz = pattrib->pktlen;
12611
12612 @@ -3670,7 +4674,7 @@ void issue_p2p_invitation_response(_adap
12613
12614 }
12615
12616 -void issue_p2p_provision_request(_adapter *padapter, u8* pinterface_raddr, u8* pssid, u8 ussidlen, u8* pdev_raddr )
12617 +void issue_p2p_provision_request(_adapter *padapter, u8* pssid, u8 ussidlen, u8* pdev_raddr )
12618 {
12619 unsigned char category = RTW_WLAN_CATEGORY_PUBLIC;
12620 u8 action = P2P_PUB_ACTION_ACTION;
12621 @@ -3700,7 +4704,7 @@ void issue_p2p_provision_request(_adapte
12622 return;
12623 }
12624
12625 - DBG_8192C( "[%s] In\n", __FUNCTION__ );
12626 + DBG_871X( "[%s] In\n", __FUNCTION__ );
12627 //update attribute
12628 pattrib = &pmgntframe->attrib;
12629 update_mgntframe_attrib(padapter, pattrib);
12630 @@ -3713,10 +4717,9 @@ void issue_p2p_provision_request(_adapte
12631 fctrl = &(pwlanhdr->frame_ctl);
12632 *(fctrl) = 0;
12633
12634 - _rtw_memcpy(pwlanhdr->addr1, pinterface_raddr, ETH_ALEN);
12635 + _rtw_memcpy(pwlanhdr->addr1, pdev_raddr, ETH_ALEN);
12636 _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
12637 - //_rtw_memcpy(pwlanhdr->addr3, myid(&(padapter->eeprompriv)), ETH_ALEN);
12638 - _rtw_memcpy(pwlanhdr->addr3, pinterface_raddr, ETH_ALEN);
12639 + _rtw_memcpy(pwlanhdr->addr3, pdev_raddr, ETH_ALEN);
12640
12641 SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
12642 pmlmeext->mgnt_seq++;
12643 @@ -3783,21 +4786,22 @@ void issue_p2p_provision_request(_adapte
12644
12645 }
12646
12647 +
12648 u8 is_matched_in_profilelist( u8* peermacaddr, struct profile_info* profileinfo )
12649 {
12650 u8 i, match_result = 0;
12651
12652 - DBG_8192C( "[%s] peermac = %.2X %.2X %.2X %.2X %.2X %.2X\n", __FUNCTION__,
12653 + DBG_871X( "[%s] peermac = %.2X %.2X %.2X %.2X %.2X %.2X\n", __FUNCTION__,
12654 peermacaddr[0], peermacaddr[1],peermacaddr[2],peermacaddr[3],peermacaddr[4],peermacaddr[5]);
12655
12656 for( i = 0; i < P2P_MAX_PERSISTENT_GROUP_NUM; i++, profileinfo++ )
12657 {
12658 - DBG_8192C( "[%s] profileinfo_mac = %.2X %.2X %.2X %.2X %.2X %.2X\n", __FUNCTION__,
12659 + DBG_871X( "[%s] profileinfo_mac = %.2X %.2X %.2X %.2X %.2X %.2X\n", __FUNCTION__,
12660 profileinfo->peermac[0], profileinfo->peermac[1],profileinfo->peermac[2],profileinfo->peermac[3],profileinfo->peermac[4],profileinfo->peermac[5]);
12661 if ( _rtw_memcmp( peermacaddr, profileinfo->peermac, ETH_ALEN ) )
12662 {
12663 match_result = 1;
12664 - DBG_8192C( "[%s] Match!\n", __FUNCTION__ );
12665 + DBG_871X( "[%s] Match!\n", __FUNCTION__ );
12666 break;
12667 }
12668 }
12669 @@ -3816,6 +4820,7 @@ void issue_probersp_p2p(_adapter *padapt
12670 struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
12671 struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
12672 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
12673 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
12674 //WLAN_BSSID_EX *cur_network = &(pmlmeinfo->network);
12675 u16 beacon_interval = 100;
12676 u16 capInfo = 0;
12677 @@ -3825,13 +4830,10 @@ void issue_probersp_p2p(_adapter *padapt
12678 #ifdef CONFIG_WFD
12679 u32 wfdielen = 0;
12680 #endif //CONFIG_WFD
12681 -#ifdef CONFIG_IOCTL_CFG80211
12682 - struct cfg80211_wifidirect_info *pcfg80211_wdinfo = &padapter->cfg80211_wdinfo;
12683 - struct ieee80211_channel *ieee_ch = &pcfg80211_wdinfo->remain_on_ch_channel;
12684 - u8 listen_channel = (u8) ieee80211_frequency_to_channel(ieee_ch->center_freq);
12685 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
12686 -#endif //CONFIG_IOCTL_CFG80211
12687 -
12688 +#ifdef CONFIG_INTEL_WIDI
12689 + u8 zero_array_check[L2SDTA_SERVICE_VE_LEN] = { 0x00 };
12690 +#endif //CONFIG_INTEL_WIDI
12691 +
12692 //DBG_871X("%s\n", __FUNCTION__);
12693
12694 if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
12695 @@ -3893,20 +4895,10 @@ void issue_probersp_p2p(_adapter *padapt
12696 pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_, 8, pwdinfo->support_rate, &pattrib->pktlen);
12697
12698 // DS parameter set
12699 -#ifdef CONFIG_IOCTL_CFG80211
12700 - if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled && listen_channel !=0)
12701 - {
12702 - pframe = rtw_set_ie(pframe, _DSSET_IE_, 1, (unsigned char *)&listen_channel, &pattrib->pktlen);
12703 - }
12704 - else
12705 -#endif //CONFIG_IOCTL_CFG80211
12706 - {
12707 - pframe = rtw_set_ie(pframe, _DSSET_IE_, 1, (unsigned char *)&pwdinfo->listen_channel, &pattrib->pktlen);
12708 - }
12709 -
12710 + pframe = rtw_set_ie(pframe, _DSSET_IE_, 1, (unsigned char *)&pwdinfo->listen_channel, &pattrib->pktlen);
12711
12712 #ifdef CONFIG_IOCTL_CFG80211
12713 - if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled)
12714 + if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled && pwdinfo->driver_interface == DRIVER_CFG80211 )
12715 {
12716 if( pmlmepriv->wps_probe_resp_ie != NULL && pmlmepriv->p2p_probe_resp_ie != NULL )
12717 {
12718 @@ -3922,7 +4914,7 @@ void issue_probersp_p2p(_adapter *padapt
12719 }
12720 }
12721 else
12722 -#endif //CONFIG_IOCTL_CFG80211
12723 +#endif //CONFIG_IOCTL_CFG80211
12724 {
12725
12726 // Todo: WPS IE
12727 @@ -3946,6 +4938,41 @@ void issue_probersp_p2p(_adapter *padapt
12728 // Value:
12729 wpsie[wpsielen++] = WPS_VERSION_1; // Version 1.0
12730
12731 +#ifdef CONFIG_INTEL_WIDI
12732 + // Commented by Kurt
12733 + // Appended WiDi info. only if we did issued_probereq_widi(), and then we saved ven. ext. in pmlmepriv->sa_ext.
12734 + if( _rtw_memcmp(pmlmepriv->sa_ext, zero_array_check, L2SDTA_SERVICE_VE_LEN) == _FALSE
12735 + || pmlmepriv->num_p2p_sdt != 0 )
12736 + {
12737 + //Sec dev type
12738 + *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_ATTR_SEC_DEV_TYPE_LIST );
12739 + wpsielen += 2;
12740 +
12741 + // Length:
12742 + *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( 0x0008 );
12743 + wpsielen += 2;
12744 +
12745 + // Value:
12746 + // Category ID
12747 + *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_PDT_CID_DISPLAYS );
12748 + wpsielen += 2;
12749 +
12750 + // OUI
12751 + *(u32*) ( wpsie + wpsielen ) = cpu_to_be32( INTEL_DEV_TYPE_OUI );
12752 + wpsielen += 4;
12753 +
12754 + *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_PDT_SCID_WIDI_CONSUMER_SINK );
12755 + wpsielen += 2;
12756 +
12757 + if( _rtw_memcmp(pmlmepriv->sa_ext, zero_array_check, L2SDTA_SERVICE_VE_LEN) == _FALSE )
12758 + {
12759 + // Vendor Extension
12760 + _rtw_memcpy( wpsie + wpsielen, pmlmepriv->sa_ext, L2SDTA_SERVICE_VE_LEN );
12761 + wpsielen += L2SDTA_SERVICE_VE_LEN;
12762 + }
12763 + }
12764 +#endif //CONFIG_INTEL_WIDI
12765 +
12766 // WiFi Simple Config State
12767 // Type:
12768 *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_ATTR_SIMPLE_CONF_STATE );
12769 @@ -3980,7 +5007,12 @@ void issue_probersp_p2p(_adapter *padapt
12770 wpsielen += 2;
12771
12772 // Value:
12773 - _rtw_memcpy( wpsie + wpsielen, myid( &padapter->eeprompriv ), ETH_ALEN );
12774 + if (pwdinfo->external_uuid == 0) {
12775 + _rtw_memset( wpsie + wpsielen, 0x0, 16 );
12776 + _rtw_memcpy( wpsie + wpsielen, myid( &padapter->eeprompriv ), ETH_ALEN );
12777 + } else {
12778 + _rtw_memcpy( wpsie + wpsielen, pwdinfo->uuid, 0x10 );
12779 + }
12780 wpsielen += 0x10;
12781
12782 // Manufacturer
12783 @@ -4081,7 +5113,7 @@ void issue_probersp_p2p(_adapter *padapt
12784 // Value:
12785 *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( pwdinfo->supported_wps_cm );
12786 wpsielen += 2;
12787 -
12788 +
12789
12790 pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, wpsielen, (unsigned char *) wpsie, &pattrib->pktlen );
12791
12792 @@ -4092,10 +5124,24 @@ void issue_probersp_p2p(_adapter *padapt
12793 }
12794
12795 #ifdef CONFIG_WFD
12796 - wfdielen = build_probe_resp_wfd_ie(pwdinfo, pframe);
12797 - pframe += wfdielen;
12798 - pattrib->pktlen += wfdielen;
12799 -#endif //CONFIG_WFD
12800 +#ifdef CONFIG_IOCTL_CFG80211
12801 + if ( _TRUE == pwdinfo->wfd_info->wfd_enable )
12802 +#endif //CONFIG_IOCTL_CFG80211
12803 + {
12804 + wfdielen = build_probe_resp_wfd_ie(pwdinfo, pframe, 0);
12805 + pframe += wfdielen;
12806 + pattrib->pktlen += wfdielen;
12807 + }
12808 +#ifdef CONFIG_IOCTL_CFG80211
12809 + else if (pmlmepriv->wfd_probe_resp_ie != NULL && pmlmepriv->wfd_probe_resp_ie_len>0)
12810 + {
12811 + //WFD IE
12812 + _rtw_memcpy(pframe, pmlmepriv->wfd_probe_resp_ie, pmlmepriv->wfd_probe_resp_ie_len);
12813 + pattrib->pktlen += pmlmepriv->wfd_probe_resp_ie_len;
12814 + pframe += pmlmepriv->wfd_probe_resp_ie_len;
12815 + }
12816 +#endif //CONFIG_IOCTL_CFG80211
12817 +#endif //CONFIG_WFD
12818
12819 pattrib->last_txcmdsz = pattrib->pktlen;
12820
12821 @@ -4106,8 +5152,9 @@ void issue_probersp_p2p(_adapter *padapt
12822
12823 }
12824
12825 -void issue_probereq_p2p(_adapter *padapter)
12826 +int _issue_probereq_p2p(_adapter *padapter, u8 *da, int wait_ack)
12827 {
12828 + int ret = _FAIL;
12829 struct xmit_frame *pmgntframe;
12830 struct pkt_attrib *pattrib;
12831 unsigned char *pframe;
12832 @@ -4126,12 +5173,13 @@ void issue_probereq_p2p(_adapter *padapt
12833 #ifdef CONFIG_WFD
12834 u32 wfdielen = 0;
12835 #endif //CONFIG_WFD
12836 -#ifdef CONFIG_IOCTL_CFG80211
12837 +
12838 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
12839 -#endif //CONFIG_IOCTL_CFG80211
12840 +
12841 +
12842 if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
12843 {
12844 - return;
12845 + goto exit;
12846 }
12847
12848 //update attribute
12849 @@ -4149,9 +5197,23 @@ void issue_probereq_p2p(_adapter *padapt
12850 fctrl = &(pwlanhdr->frame_ctl);
12851 *(fctrl) = 0;
12852
12853 - // broadcast probe request frame
12854 - _rtw_memcpy(pwlanhdr->addr1, bc_addr, ETH_ALEN);
12855 - _rtw_memcpy(pwlanhdr->addr3, bc_addr, ETH_ALEN);
12856 + if (da) {
12857 + _rtw_memcpy(pwlanhdr->addr1, da, ETH_ALEN);
12858 + _rtw_memcpy(pwlanhdr->addr3, da, ETH_ALEN);
12859 + } else {
12860 + if ( ( pwdinfo->p2p_info.scan_op_ch_only ) || ( pwdinfo->rx_invitereq_info.scan_op_ch_only ) )
12861 + {
12862 + // This two flags will be set when this is only the P2P client mode.
12863 + _rtw_memcpy(pwlanhdr->addr1, pwdinfo->p2p_peer_interface_addr, ETH_ALEN);
12864 + _rtw_memcpy(pwlanhdr->addr3, pwdinfo->p2p_peer_interface_addr, ETH_ALEN);
12865 + }
12866 + else
12867 + {
12868 + // broadcast probe request frame
12869 + _rtw_memcpy(pwlanhdr->addr1, bc_addr, ETH_ALEN);
12870 + _rtw_memcpy(pwlanhdr->addr3, bc_addr, ETH_ALEN);
12871 + }
12872 + }
12873 _rtw_memcpy(pwlanhdr->addr2, mac, ETH_ALEN);
12874
12875 SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
12876 @@ -4168,14 +5230,14 @@ void issue_probereq_p2p(_adapter *padapt
12877 else
12878 {
12879 pframe = rtw_set_ie(pframe, _SSID_IE_, P2P_WILDCARD_SSID_LEN, pwdinfo->p2p_wildcard_ssid, &(pattrib->pktlen));
12880 - }
12881 + }
12882 // Use the OFDM rate in the P2P probe request frame. ( 6(B), 9(B), 12(B), 24(B), 36, 48, 54 )
12883 pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_, 8, pwdinfo->support_rate, &pattrib->pktlen);
12884
12885 #ifdef CONFIG_IOCTL_CFG80211
12886 - if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled)
12887 + if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled && pwdinfo->driver_interface == DRIVER_CFG80211 )
12888 {
12889 - if(pmlmepriv->wps_probe_req_ie != NULL && pmlmepriv->p2p_probe_req_ie != NULL_CHIP_TYPE)
12890 + if( pmlmepriv->wps_probe_req_ie != NULL && pmlmepriv->p2p_probe_req_ie != NULL )
12891 {
12892 //WPS IE
12893 _rtw_memcpy(pframe, pmlmepriv->wps_probe_req_ie, pmlmepriv->wps_probe_req_ie_len);
12894 @@ -4213,6 +5275,40 @@ void issue_probereq_p2p(_adapter *padapt
12895 // Value:
12896 wpsie[wpsielen++] = WPS_VERSION_1; // Version 1.0
12897
12898 + if( pmlmepriv->wps_probe_req_ie == NULL )
12899 + {
12900 + // UUID-E
12901 + // Type:
12902 + *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_ATTR_UUID_E );
12903 + wpsielen += 2;
12904 +
12905 + // Length:
12906 + *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( 0x0010 );
12907 + wpsielen += 2;
12908 +
12909 + // Value:
12910 + if (pwdinfo->external_uuid == 0) {
12911 + _rtw_memset( wpsie + wpsielen, 0x0, 16 );
12912 + _rtw_memcpy( wpsie + wpsielen, myid( &padapter->eeprompriv ), ETH_ALEN );
12913 + } else {
12914 + _rtw_memcpy( wpsie + wpsielen, pwdinfo->uuid, 0x10 );
12915 + }
12916 + wpsielen += 0x10;
12917 +
12918 + // Config Method
12919 + // Type:
12920 + *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_ATTR_CONF_METHOD );
12921 + wpsielen += 2;
12922 +
12923 + // Length:
12924 + *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( 0x0002 );
12925 + wpsielen += 2;
12926 +
12927 + // Value:
12928 + *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( pwdinfo->supported_wps_cm );
12929 + wpsielen += 2;
12930 + }
12931 +
12932 // Device Name
12933 // Type:
12934 *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_ATTR_DEVICE_NAME );
12935 @@ -4237,7 +5333,7 @@ void issue_probereq_p2p(_adapter *padapt
12936
12937 // Value:
12938 // Category ID
12939 - *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_PDT_CID_RTK_WIDI );
12940 + *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_PDT_CID_MULIT_MEDIA );
12941 wpsielen += 2;
12942
12943 // OUI
12944 @@ -4245,7 +5341,20 @@ void issue_probereq_p2p(_adapter *padapt
12945 wpsielen += 4;
12946
12947 // Sub Category ID
12948 - *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_PDT_SCID_RTK_DMP );
12949 + *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_PDT_SCID_MEDIA_SERVER );
12950 + wpsielen += 2;
12951 +
12952 + // Device Password ID
12953 + // Type:
12954 + *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_ATTR_DEVICE_PWID );
12955 + wpsielen += 2;
12956 +
12957 + // Length:
12958 + *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( 0x0002 );
12959 + wpsielen += 2;
12960 +
12961 + // Value:
12962 + *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_DPID_REGISTRAR_SPEC ); // Registrar-specified
12963 wpsielen += 2;
12964
12965 pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, wpsielen, (unsigned char *) wpsie, &pattrib->pktlen );
12966 @@ -4275,12 +5384,13 @@ void issue_probereq_p2p(_adapter *padapt
12967
12968 // Value:
12969 // Device Capability Bitmap, 1 byte
12970 - // Be able to participate in additional P2P Groups and
12971 - // support the P2P Invitation Procedure
12972 - p2pie[ p2pielen++ ] = P2P_DEVCAP_INVITATION_PROC;
12973 + p2pie[ p2pielen++ ] = DMP_P2P_DEVCAP_SUPPORT;
12974
12975 // Group Capability Bitmap, 1 byte
12976 - p2pie[ p2pielen++ ] = 0x00;
12977 + if ( pwdinfo->persistent_supported )
12978 + p2pie[ p2pielen++ ] = P2P_GRPCAP_PERSISTENT_GROUP | DMP_P2P_GRPCAP_SUPPORT;
12979 + else
12980 + p2pie[ p2pielen++ ] = DMP_P2P_GRPCAP_SUPPORT;
12981
12982 // Listen Channel
12983 // Type:
12984 @@ -4292,8 +5402,8 @@ void issue_probereq_p2p(_adapter *padapt
12985
12986 // Value:
12987 // Country String
12988 - p2pie[ p2pielen++ ] = 'U';
12989 - p2pie[ p2pielen++ ] = 'S';
12990 + p2pie[ p2pielen++ ] = 'X';
12991 + p2pie[ p2pielen++ ] = 'X';
12992
12993 // The third byte should be set to 0x04.
12994 // Described in the "Operating Channel Attribute" section.
12995 @@ -4335,8 +5445,8 @@ void issue_probereq_p2p(_adapter *padapt
12996
12997 // Value:
12998 // Country String
12999 - p2pie[ p2pielen++ ] = 'U';
13000 - p2pie[ p2pielen++ ] = 'S';
13001 + p2pie[ p2pielen++ ] = 'X';
13002 + p2pie[ p2pielen++ ] = 'X';
13003
13004 // The third byte should be set to 0x04.
13005 // Described in the "Operating Channel Attribute" section.
13006 @@ -4349,283 +5459,702 @@ void issue_probereq_p2p(_adapter *padapt
13007 p2pie[ p2pielen++ ] = pwdinfo->operating_channel; // operating channel number
13008
13009 }
13010 -
13011 +
13012 pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *) p2pie, &pattrib->pktlen );
13013
13014 + if( pmlmepriv->wps_probe_req_ie != NULL )
13015 + {
13016 + //WPS IE
13017 + _rtw_memcpy(pframe, pmlmepriv->wps_probe_req_ie, pmlmepriv->wps_probe_req_ie_len);
13018 + pattrib->pktlen += pmlmepriv->wps_probe_req_ie_len;
13019 + pframe += pmlmepriv->wps_probe_req_ie_len;
13020 + }
13021 }
13022 -
13023 +
13024 #ifdef CONFIG_WFD
13025 - wfdielen = build_probe_req_wfd_ie(pwdinfo, pframe);
13026 - pframe += wfdielen;
13027 - pattrib->pktlen += wfdielen;
13028 -#endif //CONFIG_WFD
13029 +#ifdef CONFIG_IOCTL_CFG80211
13030 + if ( _TRUE == pwdinfo->wfd_info->wfd_enable )
13031 +#endif
13032 + {
13033 + wfdielen = build_probe_req_wfd_ie(pwdinfo, pframe);
13034 + pframe += wfdielen;
13035 + pattrib->pktlen += wfdielen;
13036 + }
13037 +#ifdef CONFIG_IOCTL_CFG80211
13038 + else if (pmlmepriv->wfd_probe_req_ie != NULL && pmlmepriv->wfd_probe_req_ie_len>0)
13039 + {
13040 + //WFD IE
13041 + _rtw_memcpy(pframe, pmlmepriv->wfd_probe_req_ie, pmlmepriv->wfd_probe_req_ie_len);
13042 + pattrib->pktlen += pmlmepriv->wfd_probe_req_ie_len;
13043 + pframe += pmlmepriv->wfd_probe_req_ie_len;
13044 + }
13045 +#endif //CONFIG_IOCTL_CFG80211
13046 +#endif //CONFIG_WFD
13047
13048 pattrib->last_txcmdsz = pattrib->pktlen;
13049
13050 - RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("issuing probe_req, tx_len=%d\n", pattrib->last_txcmdsz));
13051 + RT_TRACE(_module_rtl871x_mlme_c_,_drv_info_,("issuing probe_req, tx_len=%d\n", pattrib->last_txcmdsz));
13052
13053 - dump_mgntframe(padapter, pmgntframe);
13054 + if (wait_ack) {
13055 + ret = dump_mgntframe_and_wait_ack(padapter, pmgntframe);
13056 + } else {
13057 + dump_mgntframe(padapter, pmgntframe);
13058 + ret = _SUCCESS;
13059 + }
13060
13061 - return;
13062 +exit:
13063 + return ret;
13064 }
13065
13066 -#endif //CONFIG_P2P
13067 +inline void issue_probereq_p2p(_adapter *adapter, u8 *da)
13068 +{
13069 + _issue_probereq_p2p(adapter, da, _FALSE);
13070 +}
13071
13072 -unsigned int OnAction_public(_adapter *padapter, union recv_frame *precv_frame)
13073 +int issue_probereq_p2p_ex(_adapter *adapter, u8 *da, int try_cnt, int wait_ms)
13074 {
13075 - unsigned char *frame_body;
13076 - unsigned char category, action;
13077 - u8 *pframe = precv_frame->u.hdr.rx_data;
13078 - uint len = precv_frame->u.hdr.len;
13079 -#ifdef CONFIG_P2P
13080 - u8 *p2p_ie;
13081 - u32 p2p_ielen, wps_ielen;
13082 - struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
13083 - u8 result = P2P_STATUS_SUCCESS;
13084 - u8 empty_addr[ETH_ALEN] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
13085 -#endif //CONFIG_P2P
13086 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
13087 + int ret;
13088 + int i = 0;
13089 + u32 start = rtw_get_current_time();
13090
13091 - u16 seq_ctrl = ( (precv_frame->u.hdr.attrib.seq_num&0xffff) << 4) |
13092 - (precv_frame->u.hdr.attrib.frag_num & 0xf);
13093 + do
13094 + {
13095 + ret = _issue_probereq_p2p(adapter, da, wait_ms>0?_TRUE:_FALSE);
13096
13097 + i++;
13098
13099 - //check RA matches or not
13100 - if (!_rtw_memcmp(myid(&(padapter->eeprompriv)), GetAddr1Ptr(pframe), ETH_ALEN))//for if1, sta/ap mode
13101 - return _SUCCESS;
13102 + if (adapter->bDriverStopped || adapter->bSurpriseRemoved)
13103 + break;
13104
13105 + if(i < try_cnt && wait_ms > 0 && ret==_FAIL)
13106 + rtw_msleep_os(wait_ms);
13107
13108 - //recv_decache check
13109 - if(GetRetry(pframe))
13110 - {
13111 - if(seq_ctrl == pmlmeext->action_public_rxseq)
13112 - {
13113 - DBG_871X("recv_Action_public_decache, seq_ctrl=0x%x, rxseq=0x%x\n", seq_ctrl, pmlmeext->action_public_rxseq);
13114 + }while((i<try_cnt) && ((ret==_FAIL)||(wait_ms==0)));
13115
13116 - return _FAIL;
13117 + if (ret != _FAIL) {
13118 + ret = _SUCCESS;
13119 + #ifndef DBG_XMIT_ACK
13120 + goto exit;
13121 + #endif
13122 + }
13123 +
13124 + if (try_cnt && wait_ms) {
13125 + if (da)
13126 + DBG_871X(FUNC_ADPT_FMT" to "MAC_FMT", ch:%u%s, %d/%d in %u ms\n",
13127 + FUNC_ADPT_ARG(adapter), MAC_ARG(da), rtw_get_oper_ch(adapter),
13128 + ret==_SUCCESS?", acked":"", i, try_cnt, rtw_get_passing_time_ms(start));
13129 + else
13130 + DBG_871X(FUNC_ADPT_FMT", ch:%u%s, %d/%d in %u ms\n",
13131 + FUNC_ADPT_ARG(adapter), rtw_get_oper_ch(adapter),
13132 + ret==_SUCCESS?", acked":"", i, try_cnt, rtw_get_passing_time_ms(start));
13133 + }
13134 +exit:
13135 + return ret;
13136 +}
13137 +
13138 +#endif //CONFIG_P2P
13139 +
13140 +s32 rtw_action_public_decache(union recv_frame *recv_frame, s32 token)
13141 +{
13142 + _adapter *adapter = recv_frame->u.hdr.adapter;
13143 + struct mlme_ext_priv *mlmeext = &(adapter->mlmeextpriv);
13144 + u8 *frame = recv_frame->u.hdr.rx_data;
13145 + u16 seq_ctrl = ( (recv_frame->u.hdr.attrib.seq_num&0xffff) << 4) |
13146 + (recv_frame->u.hdr.attrib.frag_num & 0xf);
13147 +
13148 + if (GetRetry(frame)) {
13149 + if (token >= 0) {
13150 + if ((seq_ctrl == mlmeext->action_public_rxseq)
13151 + && (token == mlmeext->action_public_dialog_token))
13152 + {
13153 + DBG_871X(FUNC_ADPT_FMT" seq_ctrl=0x%x, rxseq=0x%x, token:%d\n",
13154 + FUNC_ADPT_ARG(adapter), seq_ctrl, mlmeext->action_public_rxseq, token);
13155 + return _FAIL;
13156 + }
13157 + } else {
13158 + if (seq_ctrl == mlmeext->action_public_rxseq) {
13159 + DBG_871X(FUNC_ADPT_FMT" seq_ctrl=0x%x, rxseq=0x%x\n",
13160 + FUNC_ADPT_ARG(adapter), seq_ctrl, mlmeext->action_public_rxseq);
13161 + return _FAIL;
13162 + }
13163 }
13164 }
13165 - pmlmeext->action_public_rxseq = seq_ctrl;
13166
13167 + mlmeext->action_public_rxseq = seq_ctrl;
13168 +
13169 + if (token >= 0)
13170 + mlmeext->action_public_dialog_token = token;
13171 +
13172 + return _SUCCESS;
13173 +}
13174 +
13175 +unsigned int on_action_public_p2p(union recv_frame *precv_frame)
13176 +{
13177 + _adapter *padapter = precv_frame->u.hdr.adapter;
13178 + u8 *pframe = precv_frame->u.hdr.rx_data;
13179 + uint len = precv_frame->u.hdr.len;
13180 + u8 *frame_body;
13181 + u8 dialogToken=0;
13182 +#ifdef CONFIG_P2P
13183 + u8 *p2p_ie;
13184 + u32 p2p_ielen, wps_ielen;
13185 + struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
13186 + u8 result = P2P_STATUS_SUCCESS;
13187 + u8 empty_addr[ETH_ALEN] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
13188 + u8 *merged_p2pie = NULL;
13189 + u32 merged_p2p_ielen = 0;
13190 +#endif //CONFIG_P2P
13191
13192 frame_body = (unsigned char *)(pframe + sizeof(struct rtw_ieee80211_hdr_3addr));
13193
13194 - category = frame_body[0];
13195 - if(category != RTW_WLAN_CATEGORY_PUBLIC)
13196 - return _SUCCESS;
13197 + dialogToken = frame_body[7];
13198
13199 - action = frame_body[ 1 ];
13200 - if ( action == ACT_PUBLIC_P2P ) // IEEE 802.11 P2P Public Action usage.
13201 - {
13202 + if (rtw_action_public_decache(precv_frame, dialogToken) == _FAIL)
13203 + return _FAIL;
13204 +
13205 #ifdef CONFIG_P2P
13206 + _cancel_timer_ex( &pwdinfo->reset_ch_sitesurvey );
13207 +#ifdef CONFIG_IOCTL_CFG80211
13208 + if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled && pwdinfo->driver_interface == DRIVER_CFG80211)
13209 + {
13210 + rtw_cfg80211_rx_p2p_action_public(padapter, pframe, len);
13211 + }
13212 + else
13213 +#endif //CONFIG_IOCTL_CFG80211
13214 + {
13215 // Do nothing if the driver doesn't enable the P2P function.
13216 -#ifndef CONFIG_IOCTL_CFG80211
13217 if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE) || rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE))
13218 return _SUCCESS;
13219 -#endif //CONFIG_IOCTL_CFG80211
13220
13221 - // Commented by Albert 20100908
13222 - // Low byte -> High byte is 0x50, 0x6F, 0x9A, 0x09 for P2P OUI.
13223 - // But the P2POUT is defined as 0x506F9A09 -> should use the cpu_to_be32
13224 - if ( cpu_to_be32( *( ( u32* ) ( frame_body + 2 ) ) ) == P2POUI )
13225 + len -= sizeof(struct rtw_ieee80211_hdr_3addr);
13226 +
13227 + switch( frame_body[ 6 ] )//OUI Subtype
13228 {
13229 -#ifdef CONFIG_IOCTL_CFG80211
13230 - if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled)
13231 + case P2P_GO_NEGO_REQ:
13232 {
13233 - rtw_cfg80211_rx_p2p_action_public(padapter, pframe, len);
13234 + DBG_871X( "[%s] Got GO Nego Req Frame\n", __FUNCTION__);
13235 + _rtw_memset( &pwdinfo->groupid_info, 0x00, sizeof( struct group_id_info ) );
13236 +
13237 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_RX_PROVISION_DIS_REQ))
13238 + {
13239 + rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
13240 + }
13241 +
13242 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_FAIL))
13243 + {
13244 + // Commented by Albert 20110526
13245 + // In this case, this means the previous nego fail doesn't be reset yet.
13246 + _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
13247 + // Restore the previous p2p state
13248 + rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
13249 + DBG_871X( "[%s] Restore the previous p2p state to %d\n", __FUNCTION__, rtw_p2p_state(pwdinfo) );
13250 + }
13251 +#ifdef CONFIG_CONCURRENT_MODE
13252 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
13253 + {
13254 + _cancel_timer_ex( &pwdinfo->ap_p2p_switch_timer );
13255 + }
13256 +#endif // CONFIG_CONCURRENT_MODE
13257 +
13258 + // Commented by Kurt 20110902
13259 + //Add if statement to avoid receiving duplicate prov disc req. such that pre_p2p_state would be covered.
13260 + if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_ING))
13261 + rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
13262 +
13263 + // Commented by Kurt 20120113
13264 + // Get peer_dev_addr here if peer doesn't issue prov_disc frame.
13265 + if( _rtw_memcmp(pwdinfo->rx_prov_disc_info.peerDevAddr, empty_addr, ETH_ALEN) );
13266 + _rtw_memcpy(pwdinfo->rx_prov_disc_info.peerDevAddr, GetAddr2Ptr(pframe), ETH_ALEN);
13267 +
13268 + result = process_p2p_group_negotation_req( pwdinfo, frame_body, len );
13269 + issue_p2p_GO_response( padapter, GetAddr2Ptr(pframe), frame_body, len, result );
13270 +#ifdef CONFIG_INTEL_WIDI
13271 + if( (padapter->mlmepriv.widi_state == INTEL_WIDI_STATE_LISTEN) && (padapter->mlmepriv.widi_state != INTEL_WIDI_STATE_WFD_CONNECTION) )
13272 + {
13273 + padapter->mlmepriv.widi_state = INTEL_WIDI_STATE_WFD_CONNECTION;
13274 + _cancel_timer_ex(&(padapter->mlmepriv.listen_timer));
13275 + intel_widi_wk_cmd(padapter, INTEL_WIDI_LISTEN_STOP_WK, NULL);
13276 + }
13277 +#endif //CONFIG_INTEL_WIDI
13278 +
13279 + // Commented by Albert 20110718
13280 + // No matter negotiating or negotiation failure, the driver should set up the restore P2P state timer.
13281 +#ifdef CONFIG_CONCURRENT_MODE
13282 + // Commented by Albert 20120107
13283 + _set_timer( &pwdinfo->restore_p2p_state_timer, 3000 );
13284 +#else // CONFIG_CONCURRENT_MODE
13285 + _set_timer( &pwdinfo->restore_p2p_state_timer, 5000 );
13286 +#endif // CONFIG_CONCURRENT_MODE
13287 + break;
13288 }
13289 - else
13290 -#endif //CONFIG_IOCTL_CFG80211
13291 + case P2P_GO_NEGO_RESP:
13292 {
13293 - len -= sizeof(struct rtw_ieee80211_hdr_3addr);
13294 -
13295 - switch( frame_body[ 6 ] )//OUI Subtype
13296 + DBG_871X( "[%s] Got GO Nego Resp Frame\n", __FUNCTION__);
13297 +
13298 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_ING))
13299 {
13300 - case P2P_GO_NEGO_REQ:
13301 + // Commented by Albert 20110425
13302 + // The restore timer is enabled when issuing the nego request frame of rtw_p2p_connect function.
13303 + _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
13304 + pwdinfo->nego_req_info.benable = _FALSE;
13305 + result = process_p2p_group_negotation_resp( pwdinfo, frame_body, len);
13306 + issue_p2p_GO_confirm( pwdinfo->padapter, GetAddr2Ptr(pframe), result);
13307 + if ( P2P_STATUS_SUCCESS == result )
13308 {
13309 - DBG_8192C( "[%s] Got GO Nego Req Frame\n", __FUNCTION__);
13310 - _rtw_memset( &pwdinfo->groupid_info, 0x00, sizeof( struct group_id_info ) );
13311 -
13312 - if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_FAIL))
13313 + if ( rtw_p2p_role(pwdinfo) == P2P_ROLE_CLIENT )
13314 {
13315 - // Commented by Albert 20110526
13316 - // In this case, this means the previous nego fail doesn't be reset yet.
13317 - _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
13318 - // Restore the previous p2p state
13319 - rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
13320 - DBG_871X( "[%s] Restore the previous p2p state to %d\n", __FUNCTION__, rtw_p2p_state(pwdinfo) );
13321 - }
13322 -
13323 - // Commented by Kurt 20110902
13324 - //Add if statement to avoid receiving duplicate prov disc req. such that pre_p2p_state would be covered.
13325 - if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_ING))
13326 - rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
13327 -
13328 - // Commented by Kurt 20120113
13329 - // Get peer_dev_addr here if peer doesn't issue prov_disc frame.
13330 - if( _rtw_memcmp(pwdinfo->rx_prov_disc_info.peerDevAddr, empty_addr, ETH_ALEN) );
13331 - _rtw_memcpy(pwdinfo->rx_prov_disc_info.peerDevAddr, GetAddr2Ptr(pframe), ETH_ALEN);
13332 -
13333 - result = process_p2p_group_negotation_req( pwdinfo, frame_body, len );
13334 - issue_p2p_GO_response( padapter, GetAddr2Ptr(pframe), frame_body, len, result );
13335 - // Commented by Albert 20110718
13336 - // No matter negotiating or negotiation failure, the driver should set up the restore P2P state timer.
13337 + pwdinfo->p2p_info.operation_ch[ 0 ] = pwdinfo->peer_operating_ch;
13338 + #ifdef P2P_OP_CHECK_SOCIAL_CH
13339 + pwdinfo->p2p_info.operation_ch[ 1 ] = 1; //Check whether GO is operating in channel 1;
13340 + pwdinfo->p2p_info.operation_ch[ 2 ] = 6; //Check whether GO is operating in channel 6;
13341 + pwdinfo->p2p_info.operation_ch[ 3 ] = 11; //Check whether GO is operating in channel 11;
13342 + #endif //P2P_OP_CHECK_SOCIAL_CH
13343 + pwdinfo->p2p_info.scan_op_ch_only = 1;
13344 + _set_timer( &pwdinfo->reset_ch_sitesurvey2, P2P_RESET_SCAN_CH );
13345 + }
13346 + }
13347 +
13348 + // Reset the dialog token for group negotiation frames.
13349 + pwdinfo->negotiation_dialog_token = 1;
13350 +
13351 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_FAIL))
13352 + {
13353 _set_timer( &pwdinfo->restore_p2p_state_timer, 5000 );
13354 - break;
13355 }
13356 - case P2P_GO_NEGO_RESP:
13357 + }
13358 + else
13359 + {
13360 + DBG_871X( "[%s] Skipped GO Nego Resp Frame (p2p_state != P2P_STATE_GONEGO_ING)\n", __FUNCTION__);
13361 + }
13362 +
13363 + break;
13364 + }
13365 + case P2P_GO_NEGO_CONF:
13366 + {
13367 + DBG_871X( "[%s] Got GO Nego Confirm Frame\n", __FUNCTION__);
13368 + result = process_p2p_group_negotation_confirm( pwdinfo, frame_body, len);
13369 + if ( P2P_STATUS_SUCCESS == result )
13370 + {
13371 + if ( rtw_p2p_role(pwdinfo) == P2P_ROLE_CLIENT )
13372 {
13373 - DBG_871X( "[%s] Got GO Nego Resp Frame\n", __FUNCTION__);
13374 -
13375 - if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_ING))
13376 - {
13377 - // Commented by Albert 20110425
13378 - // The restore timer is enabled when issuing the nego request frame of rtw_p2p_connect function.
13379 - _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
13380 - result = process_p2p_group_negotation_resp( pwdinfo, frame_body, len);
13381 -
13382 - issue_p2p_GO_confirm( pwdinfo->padapter, GetAddr2Ptr(pframe), result);
13383 + pwdinfo->p2p_info.operation_ch[ 0 ] = pwdinfo->peer_operating_ch;
13384 + #ifdef P2P_OP_CHECK_SOCIAL_CH
13385 + pwdinfo->p2p_info.operation_ch[ 1 ] = 1; //Check whether GO is operating in channel 1;
13386 + pwdinfo->p2p_info.operation_ch[ 2 ] = 6; //Check whether GO is operating in channel 6;
13387 + pwdinfo->p2p_info.operation_ch[ 3 ] = 11; //Check whether GO is operating in channel 11;
13388 + #endif //P2P_OP_CHECK_SOCIAL_CH
13389 + pwdinfo->p2p_info.scan_op_ch_only = 1;
13390 + _set_timer( &pwdinfo->reset_ch_sitesurvey2, P2P_RESET_SCAN_CH );
13391 + }
13392 + }
13393 + break;
13394 + }
13395 + case P2P_INVIT_REQ:
13396 + {
13397 + // Added by Albert 2010/10/05
13398 + // Received the P2P Invite Request frame.
13399 +
13400 + DBG_871X( "[%s] Got invite request frame!\n", __FUNCTION__ );
13401 + if ( (p2p_ie=rtw_get_p2p_ie( frame_body + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, NULL, &p2p_ielen)) )
13402 + {
13403 + // Parse the necessary information from the P2P Invitation Request frame.
13404 + // For example: The MAC address of sending this P2P Invitation Request frame.
13405 + u32 attr_contentlen = 0;
13406 + u8 status_code = P2P_STATUS_FAIL_INFO_UNAVAILABLE;
13407 + struct group_id_info group_id;
13408 + u8 invitation_flag = 0;
13409
13410 - // Reset the dialog token for group negotiation frames.
13411 - pwdinfo->negotiation_dialog_token = 1;
13412 + merged_p2p_ielen = rtw_get_p2p_merged_ies_len(frame_body + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_);
13413
13414 - if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_FAIL))
13415 - {
13416 - _set_timer( &pwdinfo->restore_p2p_state_timer, 5000 );
13417 - }
13418 - }
13419 - else
13420 - {
13421 - DBG_8192C( "[%s] Skipped GO Nego Resp Frame (p2p_state != P2P_STATE_GONEGO_ING)\n", __FUNCTION__);
13422 - }
13423 -
13424 - break;
13425 - }
13426 - case P2P_GO_NEGO_CONF:
13427 + merged_p2pie = rtw_malloc(merged_p2p_ielen);
13428 + if (merged_p2pie == NULL)
13429 {
13430 - DBG_8192C( "[%s] Got GO Nego Confirm Frame\n", __FUNCTION__);
13431 - process_p2p_group_negotation_confirm( pwdinfo, frame_body, len);
13432 - break;
13433 + DBG_871X( "[%s] Malloc p2p ie fail\n", __FUNCTION__);
13434 + goto exit;
13435 }
13436 - case P2P_INVIT_REQ:
13437 + _rtw_memset(merged_p2pie, 0x00, merged_p2p_ielen);
13438 +
13439 + merged_p2p_ielen = rtw_p2p_merge_ies(frame_body + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, merged_p2pie);
13440 +
13441 + rtw_get_p2p_attr_content( merged_p2pie, merged_p2p_ielen, P2P_ATTR_INVITATION_FLAGS, &invitation_flag, &attr_contentlen);
13442 + if ( attr_contentlen )
13443 {
13444 - // Added by Albert 2010/10/05
13445 - // Received the P2P Invite Request frame.
13446 -
13447 - DBG_8192C( "[%s] Got invite request frame!\n", __FUNCTION__ );
13448 - if ( (p2p_ie=rtw_get_p2p_ie( frame_body + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, NULL, &p2p_ielen)) )
13449 +
13450 + rtw_get_p2p_attr_content( merged_p2pie, merged_p2p_ielen, P2P_ATTR_GROUP_BSSID, pwdinfo->p2p_peer_interface_addr, &attr_contentlen);
13451 + // Commented by Albert 20120510
13452 + // Copy to the pwdinfo->p2p_peer_interface_addr.
13453 + // So that the WFD UI ( or Sigma ) can get the peer interface address by using the following command.
13454 + // #> iwpriv wlan0 p2p_get peer_ifa
13455 + // After having the peer interface address, the sigma can find the correct conf file for wpa_supplicant.
13456 +
13457 + if ( attr_contentlen )
13458 {
13459 - // Parse the necessary information from the P2P Invitation Request frame.
13460 - // For example: The MAC address of sending this P2P Invitation Request frame.
13461 - u8 groupid[ 38 ] = { 0x00 };
13462 - u32 attr_contentlen = 0;
13463 - u8 match_result = 0;
13464 -
13465 - rtw_get_p2p_attr_content( p2p_ie, p2p_ielen, P2P_ATTR_GROUP_ID, groupid, &attr_contentlen);
13466 - _rtw_memcpy( pwdinfo->p2p_peer_interface_addr, groupid, ETH_ALEN );
13467 - rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ);
13468 - DBG_871X( "[%s] peer address %.2X %.2X %.2X %.2X %.2X %.2X\n", __FUNCTION__,
13469 - groupid[0], groupid[1], groupid[2], groupid[3], groupid[4], groupid[5] );
13470 + DBG_871X( "[%s] GO's BSSID = %.2X %.2X %.2X %.2X %.2X %.2X\n", __FUNCTION__,
13471 + pwdinfo->p2p_peer_interface_addr[0], pwdinfo->p2p_peer_interface_addr[1],
13472 + pwdinfo->p2p_peer_interface_addr[2], pwdinfo->p2p_peer_interface_addr[3],
13473 + pwdinfo->p2p_peer_interface_addr[4], pwdinfo->p2p_peer_interface_addr[5] );
13474 + }
13475
13476 - if ( is_matched_in_profilelist( pwdinfo->p2p_peer_interface_addr, &pwdinfo->profileinfo[ 0 ] ) )
13477 + if ( invitation_flag & P2P_INVITATION_FLAGS_PERSISTENT )
13478 + {
13479 + // Re-invoke the persistent group.
13480 +
13481 + _rtw_memset( &group_id, 0x00, sizeof( struct group_id_info ) );
13482 + rtw_get_p2p_attr_content( merged_p2pie, merged_p2p_ielen, P2P_ATTR_GROUP_ID, ( u8* ) &group_id, &attr_contentlen);
13483 + if ( attr_contentlen )
13484 {
13485 - match_result = 1;
13486 + if ( _rtw_memcmp( group_id.go_device_addr, myid( &padapter->eeprompriv ), ETH_ALEN ) )
13487 + {
13488 + // The p2p device sending this p2p invitation request wants this Wi-Fi device to be the persistent GO.
13489 + rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ_GO );
13490 + rtw_p2p_set_role( pwdinfo, P2P_ROLE_GO );
13491 + status_code = P2P_STATUS_SUCCESS;
13492 + }
13493 + else
13494 + {
13495 + // The p2p device sending this p2p invitation request wants to be the persistent GO.
13496 + if ( is_matched_in_profilelist( pwdinfo->p2p_peer_interface_addr, &pwdinfo->profileinfo[ 0 ] ) )
13497 + {
13498 + u8 operatingch_info[5] = { 0x00 };
13499 +
13500 + if ( rtw_get_p2p_attr_content(merged_p2pie, merged_p2p_ielen, P2P_ATTR_OPERATING_CH, operatingch_info, &attr_contentlen) )
13501 + {
13502 + if( rtw_ch_set_search_ch(padapter->mlmeextpriv.channel_set, (u32)operatingch_info[4] ) >= 0 )
13503 + {
13504 + // The operating channel is acceptable for this device.
13505 + pwdinfo->rx_invitereq_info.operation_ch[0]= operatingch_info[4];
13506 + #ifdef P2P_OP_CHECK_SOCIAL_CH
13507 + pwdinfo->rx_invitereq_info.operation_ch[1]= 1; //Check whether GO is operating in channel 1;
13508 + pwdinfo->rx_invitereq_info.operation_ch[2]= 6; //Check whether GO is operating in channel 6;
13509 + pwdinfo->rx_invitereq_info.operation_ch[3]= 11; //Check whether GO is operating in channel 11;
13510 + #endif //P2P_OP_CHECK_SOCIAL_CH
13511 + pwdinfo->rx_invitereq_info.scan_op_ch_only = 1;
13512 + _set_timer( &pwdinfo->reset_ch_sitesurvey, P2P_RESET_SCAN_CH );
13513 + rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ_MATCH );
13514 + rtw_p2p_set_role( pwdinfo, P2P_ROLE_CLIENT );
13515 + status_code = P2P_STATUS_SUCCESS;
13516 + }
13517 + else
13518 + {
13519 + // The operating channel isn't supported by this device.
13520 + rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ_DISMATCH );
13521 + rtw_p2p_set_role( pwdinfo, P2P_ROLE_DEVICE );
13522 + status_code = P2P_STATUS_FAIL_NO_COMMON_CH;
13523 + _set_timer( &pwdinfo->restore_p2p_state_timer, 3000 );
13524 + }
13525 + }
13526 + else
13527 + {
13528 + // Commented by Albert 20121130
13529 + // Intel will use the different P2P IE to store the operating channel information
13530 + // Workaround for Intel WiDi 3.5
13531 + rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ_MATCH );
13532 + rtw_p2p_set_role( pwdinfo, P2P_ROLE_CLIENT );
13533 + status_code = P2P_STATUS_SUCCESS;
13534 + }
13535 + }
13536 + else
13537 + {
13538 + rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ_DISMATCH );
13539 + #ifdef CONFIG_INTEL_WIDI
13540 + _rtw_memcpy( pwdinfo->p2p_peer_device_addr, group_id.go_device_addr , ETH_ALEN );
13541 + rtw_p2p_set_role( pwdinfo, P2P_ROLE_CLIENT );
13542 + #endif //CONFIG_INTEL_WIDI
13543 +
13544 + status_code = P2P_STATUS_FAIL_UNKNOWN_P2PGROUP;
13545 + }
13546 + }
13547 }
13548 else
13549 {
13550 - match_result = 0;
13551 - }
13552 -
13553 - DBG_8192C( "[%s] match_result = %d\n", __FUNCTION__, match_result );
13554 -
13555 - pwdinfo->inviteresp_info.token = frame_body[ 7 ];
13556 - issue_p2p_invitation_response( padapter, pwdinfo->p2p_peer_interface_addr, pwdinfo->inviteresp_info.token, match_result );
13557 + DBG_871X( "[%s] P2P Group ID Attribute NOT FOUND!\n", __FUNCTION__ );
13558 + status_code = P2P_STATUS_FAIL_INFO_UNAVAILABLE;
13559 + }
13560 }
13561 -
13562 - break;
13563 - }
13564 - case P2P_INVIT_RESP:
13565 - {
13566 - u8 attr_content = 0x00;
13567 - u32 attr_contentlen = 0;
13568 -
13569 - DBG_871X( "[%s] Got invite response frame!\n", __FUNCTION__ );
13570 - if ( (p2p_ie=rtw_get_p2p_ie( frame_body + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, NULL, &p2p_ielen)) )
13571 + else
13572 {
13573 - rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_STATUS, &attr_content, &attr_contentlen);
13574 -
13575 - if ( attr_contentlen == 1 )
13576 + // Received the invitation to join a P2P group.
13577 +
13578 + _rtw_memset( &group_id, 0x00, sizeof( struct group_id_info ) );
13579 + rtw_get_p2p_attr_content( merged_p2pie, merged_p2p_ielen, P2P_ATTR_GROUP_ID, ( u8* ) &group_id, &attr_contentlen);
13580 + if ( attr_contentlen )
13581 {
13582 - DBG_871X( "[%s] Status = %d\n", __FUNCTION__, attr_content );
13583 - if ( attr_content == P2P_STATUS_SUCCESS )
13584 + if ( _rtw_memcmp( group_id.go_device_addr, myid( &padapter->eeprompriv ), ETH_ALEN ) )
13585 {
13586 - rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT);
13587 + // In this case, the GO can't be myself.
13588 + rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ_DISMATCH );
13589 + status_code = P2P_STATUS_FAIL_INFO_UNAVAILABLE;
13590 }
13591 else
13592 {
13593 - rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
13594 + // The p2p device sending this p2p invitation request wants to join an existing P2P group
13595 + // Commented by Albert 2012/06/28
13596 + // In this case, this Wi-Fi device should use the iwpriv command to get the peer device address.
13597 + // The peer device address should be the destination address for the provisioning discovery request.
13598 + // Then, this Wi-Fi device should use the iwpriv command to get the peer interface address.
13599 + // The peer interface address should be the address for WPS mac address
13600 + _rtw_memcpy( pwdinfo->p2p_peer_device_addr, group_id.go_device_addr , ETH_ALEN );
13601 + rtw_p2p_set_role( pwdinfo, P2P_ROLE_CLIENT );
13602 + rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ_JOIN );
13603 + status_code = P2P_STATUS_SUCCESS;
13604 }
13605 }
13606 else
13607 {
13608 - rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
13609 + DBG_871X( "[%s] P2P Group ID Attribute NOT FOUND!\n", __FUNCTION__ );
13610 + status_code = P2P_STATUS_FAIL_INFO_UNAVAILABLE;
13611 }
13612 }
13613 - break;
13614 }
13615 - case P2P_DEVDISC_REQ:
13616 + else
13617 + {
13618 + DBG_871X( "[%s] P2P Invitation Flags Attribute NOT FOUND!\n", __FUNCTION__ );
13619 + status_code = P2P_STATUS_FAIL_INFO_UNAVAILABLE;
13620 + }
13621 +
13622 + DBG_871X( "[%s] status_code = %d\n", __FUNCTION__, status_code );
13623 +
13624 + pwdinfo->inviteresp_info.token = frame_body[ 7 ];
13625 + issue_p2p_invitation_response( padapter, GetAddr2Ptr(pframe), pwdinfo->inviteresp_info.token, status_code );
13626 + _set_timer( &pwdinfo->restore_p2p_state_timer, 3000 );
13627 + }
13628 +#ifdef CONFIG_INTEL_WIDI
13629 + if( (padapter->mlmepriv.widi_state == INTEL_WIDI_STATE_LISTEN) && (padapter->mlmepriv.widi_state != INTEL_WIDI_STATE_WFD_CONNECTION) )
13630 + {
13631 + padapter->mlmepriv.widi_state = INTEL_WIDI_STATE_WFD_CONNECTION;
13632 + _cancel_timer_ex(&(padapter->mlmepriv.listen_timer));
13633 + intel_widi_wk_cmd(padapter, INTEL_WIDI_LISTEN_STOP_WK, NULL);
13634 + }
13635 +#endif //CONFIG_INTEL_WIDI
13636 + break;
13637 + }
13638 + case P2P_INVIT_RESP:
13639 + {
13640 + u8 attr_content = 0x00;
13641 + u32 attr_contentlen = 0;
13642 +
13643 + DBG_871X( "[%s] Got invite response frame!\n", __FUNCTION__ );
13644 + _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
13645 + if ( (p2p_ie=rtw_get_p2p_ie( frame_body + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, NULL, &p2p_ielen)) )
13646 + {
13647 + rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_STATUS, &attr_content, &attr_contentlen);
13648 +
13649 + if ( attr_contentlen == 1 )
13650 + {
13651 + DBG_871X( "[%s] Status = %d\n", __FUNCTION__, attr_content );
13652 + pwdinfo->invitereq_info.benable = _FALSE;
13653
13654 - process_p2p_devdisc_req(pwdinfo, pframe, len);
13655 + if ( attr_content == P2P_STATUS_SUCCESS )
13656 + {
13657 + if ( _rtw_memcmp( pwdinfo->invitereq_info.go_bssid, myid( &padapter->eeprompriv ), ETH_ALEN ))
13658 + {
13659 + rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO );
13660 + }
13661 + else
13662 + {
13663 + rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT);
13664 + }
13665 + rtw_p2p_set_state( pwdinfo, P2P_STATE_RX_INVITE_RESP_OK );
13666 + }
13667 + else
13668 + {
13669 + rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
13670 + rtw_p2p_set_state( pwdinfo, P2P_STATE_RX_INVITE_RESP_FAIL );
13671 + }
13672 + }
13673 + else
13674 + {
13675 + rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
13676 + rtw_p2p_set_state( pwdinfo, P2P_STATE_RX_INVITE_RESP_FAIL );
13677 + }
13678 + }
13679 + else
13680 + {
13681 + rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
13682 + rtw_p2p_set_state( pwdinfo, P2P_STATE_RX_INVITE_RESP_FAIL );
13683 + }
13684
13685 - break;
13686 + if ( rtw_p2p_chk_state( pwdinfo, P2P_STATE_RX_INVITE_RESP_FAIL ) )
13687 + {
13688 + _set_timer( &pwdinfo->restore_p2p_state_timer, 5000 );
13689 + }
13690 + break;
13691 + }
13692 + case P2P_DEVDISC_REQ:
13693
13694 - case P2P_DEVDISC_RESP:
13695 + process_p2p_devdisc_req(pwdinfo, pframe, len);
13696
13697 - process_p2p_devdisc_resp(pwdinfo, pframe, len);
13698 + break;
13699
13700 - break;
13701 + case P2P_DEVDISC_RESP:
13702
13703 - case P2P_PROVISION_DISC_REQ:
13704 - DBG_871X( "[%s] Got Provisioning Discovery Request Frame\n", __FUNCTION__ );
13705 - process_p2p_provdisc_req(pwdinfo, pframe, len);
13706 - _rtw_memcpy(pwdinfo->rx_prov_disc_info.peerDevAddr, GetAddr2Ptr(pframe), ETH_ALEN);
13707 -
13708 - //20110902 Kurt
13709 - //Add the following statement to avoid receiving duplicate prov disc req. such that pre_p2p_state would be covered.
13710 - if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_RX_PROVISION_DIS_REQ))
13711 - rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
13712 + process_p2p_devdisc_resp(pwdinfo, pframe, len);
13713
13714 - rtw_p2p_set_state(pwdinfo, P2P_STATE_RX_PROVISION_DIS_REQ);
13715 - _set_timer( &pwdinfo->restore_p2p_state_timer, P2P_PROVISION_TIMEOUT );
13716 - break;
13717 + break;
13718
13719 - case P2P_PROVISION_DISC_RESP:
13720 - // Commented by Albert 20110707
13721 - // Should we check the pwdinfo->tx_prov_disc_info.bsent flag here??
13722 - DBG_871X( "[%s] Got Provisioning Discovery Response Frame\n", __FUNCTION__ );
13723 - // Commented by Albert 20110426
13724 - // The restore timer is enabled when issuing the provisioing request frame in rtw_p2p_prov_disc function.
13725 - _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
13726 - rtw_p2p_set_state(pwdinfo, P2P_STATE_RX_PROVISION_DIS_RSP);
13727 - process_p2p_provdisc_resp(pwdinfo, pframe);
13728 - _set_timer( &pwdinfo->restore_p2p_state_timer, P2P_PROVISION_TIMEOUT );
13729 - break;
13730 + case P2P_PROVISION_DISC_REQ:
13731 + DBG_871X( "[%s] Got Provisioning Discovery Request Frame\n", __FUNCTION__ );
13732 + process_p2p_provdisc_req(pwdinfo, pframe, len);
13733 + _rtw_memcpy(pwdinfo->rx_prov_disc_info.peerDevAddr, GetAddr2Ptr(pframe), ETH_ALEN);
13734
13735 - }
13736 - }
13737 + //20110902 Kurt
13738 + //Add the following statement to avoid receiving duplicate prov disc req. such that pre_p2p_state would be covered.
13739 + if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_RX_PROVISION_DIS_REQ))
13740 + rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
13741 +
13742 + rtw_p2p_set_state(pwdinfo, P2P_STATE_RX_PROVISION_DIS_REQ);
13743 + _set_timer( &pwdinfo->restore_p2p_state_timer, P2P_PROVISION_TIMEOUT );
13744 +#ifdef CONFIG_INTEL_WIDI
13745 + if( (padapter->mlmepriv.widi_state == INTEL_WIDI_STATE_LISTEN) && (padapter->mlmepriv.widi_state != INTEL_WIDI_STATE_WFD_CONNECTION) )
13746 + {
13747 + padapter->mlmepriv.widi_state = INTEL_WIDI_STATE_WFD_CONNECTION;
13748 + _cancel_timer_ex(&(padapter->mlmepriv.listen_timer));
13749 + intel_widi_wk_cmd(padapter, INTEL_WIDI_LISTEN_STOP_WK, NULL);
13750 + }
13751 +#endif //CONFIG_INTEL_WIDI
13752 + break;
13753 +
13754 + case P2P_PROVISION_DISC_RESP:
13755 + // Commented by Albert 20110707
13756 + // Should we check the pwdinfo->tx_prov_disc_info.bsent flag here??
13757 + DBG_871X( "[%s] Got Provisioning Discovery Response Frame\n", __FUNCTION__ );
13758 + // Commented by Albert 20110426
13759 + // The restore timer is enabled when issuing the provisioing request frame in rtw_p2p_prov_disc function.
13760 + _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
13761 + rtw_p2p_set_state(pwdinfo, P2P_STATE_RX_PROVISION_DIS_RSP);
13762 + process_p2p_provdisc_resp(pwdinfo, pframe);
13763 + _set_timer( &pwdinfo->restore_p2p_state_timer, P2P_PROVISION_TIMEOUT );
13764 + break;
13765
13766 - }
13767 + }
13768 + }
13769 #endif //CONFIG_P2P
13770 +
13771 +exit:
13772 +
13773 + if(merged_p2pie)
13774 + {
13775 + rtw_mfree(merged_p2pie, merged_p2p_ielen);
13776 }
13777 -
13778 +
13779 return _SUCCESS;
13780 }
13781
13782 +unsigned int on_action_public_vendor(union recv_frame *precv_frame)
13783 +{
13784 + unsigned int ret = _FAIL;
13785 + u8 *pframe = precv_frame->u.hdr.rx_data;
13786 + uint frame_len = precv_frame->u.hdr.len;
13787 + u8 *frame_body = pframe + sizeof(struct rtw_ieee80211_hdr_3addr);
13788 +
13789 + if (_rtw_memcmp(frame_body + 2, P2P_OUI, 4) == _TRUE) {
13790 + ret = on_action_public_p2p(precv_frame);
13791 + }
13792 +
13793 + return ret;
13794 +}
13795 +
13796 +unsigned int on_action_public_default(union recv_frame *precv_frame, u8 action)
13797 +{
13798 + unsigned int ret = _FAIL;
13799 + u8 *pframe = precv_frame->u.hdr.rx_data;
13800 + uint frame_len = precv_frame->u.hdr.len;
13801 + u8 *frame_body = pframe + sizeof(struct rtw_ieee80211_hdr_3addr);
13802 + u8 token;
13803 + _adapter *adapter = precv_frame->u.hdr.adapter;
13804 + int cnt = 0;
13805 + char msg[64];
13806 +
13807 + token = frame_body[2];
13808 +
13809 + if (rtw_action_public_decache(precv_frame, token) == _FAIL)
13810 + goto exit;
13811 +
13812 + #ifdef CONFIG_IOCTL_CFG80211
13813 + cnt += sprintf((msg+cnt), "%s(token:%u)", action_public_str(action), token);
13814 + rtw_cfg80211_rx_action(adapter, pframe, frame_len, msg);
13815 + #endif
13816 +
13817 + ret = _SUCCESS;
13818 +
13819 +exit:
13820 + return ret;
13821 +}
13822 +
13823 +unsigned int on_action_public(_adapter *padapter, union recv_frame *precv_frame)
13824 +{
13825 + unsigned int ret = _FAIL;
13826 + u8 *pframe = precv_frame->u.hdr.rx_data;
13827 + uint frame_len = precv_frame->u.hdr.len;
13828 + u8 *frame_body = pframe + sizeof(struct rtw_ieee80211_hdr_3addr);
13829 + u8 category, action;
13830 +
13831 + /* check RA matches or not */
13832 + if (!_rtw_memcmp(myid(&(padapter->eeprompriv)), GetAddr1Ptr(pframe), ETH_ALEN))
13833 + goto exit;
13834 +
13835 + category = frame_body[0];
13836 + if(category != RTW_WLAN_CATEGORY_PUBLIC)
13837 + goto exit;
13838 +
13839 + action = frame_body[1];
13840 + switch (action) {
13841 + case ACT_PUBLIC_VENDOR:
13842 + ret = on_action_public_vendor(precv_frame);
13843 + break;
13844 + default:
13845 + ret = on_action_public_default(precv_frame, action);
13846 + break;
13847 + }
13848 +
13849 +exit:
13850 + return ret;
13851 +}
13852 +
13853 unsigned int OnAction_ht(_adapter *padapter, union recv_frame *precv_frame)
13854 {
13855 return _SUCCESS;
13856 }
13857
13858 +#ifdef CONFIG_IEEE80211W
13859 +unsigned int OnAction_sa_query(_adapter *padapter, union recv_frame *precv_frame)
13860 +{
13861 + u8 *pframe = precv_frame->u.hdr.rx_data;
13862 + struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.attrib;
13863 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
13864 + unsigned short tid;
13865 + //Baron
13866 +
13867 + DBG_871X("OnAction_sa_query\n");
13868 +
13869 + switch (pframe[WLAN_HDR_A3_LEN+1])
13870 + {
13871 + case 0: //SA Query req
13872 + _rtw_memcpy(&tid, &pframe[WLAN_HDR_A3_LEN+2], sizeof(unsigned short));
13873 + DBG_871X("OnAction_sa_query request,action=%d, tid=%04x\n", pframe[WLAN_HDR_A3_LEN+1], tid);
13874 + issue_action_SA_Query(padapter, GetAddr2Ptr(pframe), 1, tid);
13875 + break;
13876 +
13877 + case 1: //SA Query rsp
13878 + _cancel_timer_ex(&pmlmeext->sa_query_timer);
13879 + DBG_871X("OnAction_sa_query response,action=%d, tid=%04x, cancel timer\n", pframe[WLAN_HDR_A3_LEN+1], pframe[WLAN_HDR_A3_LEN+2]);
13880 + break;
13881 + default:
13882 + break;
13883 + }
13884 + if(0)
13885 + {
13886 + int pp;
13887 + printk("pattrib->pktlen = %d =>", pattrib->pkt_len);
13888 + for(pp=0;pp< pattrib->pkt_len; pp++)
13889 + printk(" %02x ", pframe[pp]);
13890 + printk("\n");
13891 + }
13892 +
13893 + return _SUCCESS;
13894 +}
13895 +#endif //CONFIG_IEEE80211W
13896 +
13897 unsigned int OnAction_wmm(_adapter *padapter, union recv_frame *precv_frame)
13898 {
13899 return _SUCCESS;
13900 @@ -4657,7 +6186,7 @@ unsigned int OnAction_p2p(_adapter *pada
13901 return _SUCCESS;
13902
13903 #ifdef CONFIG_IOCTL_CFG80211
13904 - if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled)
13905 + if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled && pwdinfo->driver_interface == DRIVER_CFG80211 )
13906 {
13907 rtw_cfg80211_rx_action_p2p(padapter, pframe, len);
13908 return _SUCCESS;
13909 @@ -4665,7 +6194,7 @@ unsigned int OnAction_p2p(_adapter *pada
13910 else
13911 #endif //CONFIG_IOCTL_CFG80211
13912 {
13913 - len -= sizeof(struct rtw_ieee80211_hdr_3addr);
13914 + len -= sizeof(struct rtw_ieee80211_hdr_3addr);
13915 OUI_Subtype = frame_body[5];
13916 dialogToken = frame_body[6];
13917
13918 @@ -4694,7 +6223,6 @@ unsigned int OnAction_p2p(_adapter *pada
13919
13920 }
13921 }
13922 -
13923 #endif //CONFIG_P2P
13924
13925 return _SUCCESS;
13926 @@ -4728,43 +6256,53 @@ unsigned int OnAction(_adapter *padapter
13927
13928 unsigned int DoReserved(_adapter *padapter, union recv_frame *precv_frame)
13929 {
13930 - u8 *pframe = precv_frame->u.hdr.rx_data;
13931 - uint len = precv_frame->u.hdr.len;
13932
13933 //DBG_871X("rcvd mgt frame(%x, %x)\n", (GetFrameSubType(pframe) >> 4), *(unsigned int *)GetAddr1Ptr(pframe));
13934 return _SUCCESS;
13935 }
13936
13937 -struct xmit_frame *alloc_mgtxmitframe(struct xmit_priv *pxmitpriv)
13938 +struct xmit_frame *_alloc_mgtxmitframe(struct xmit_priv *pxmitpriv, bool once)
13939 {
13940 - struct xmit_frame *pmgntframe;
13941 - struct xmit_buf *pxmitbuf;
13942 + struct xmit_frame *pmgntframe;
13943 + struct xmit_buf *pxmitbuf;
13944
13945 - if ((pmgntframe = rtw_alloc_xmitframe(pxmitpriv)) == NULL)
13946 - {
13947 - DBG_871X("%s, alloc xmitframe fail\n", __FUNCTION__);
13948 - return NULL;
13949 + if (once)
13950 + pmgntframe = rtw_alloc_xmitframe_once(pxmitpriv);
13951 + else
13952 + pmgntframe = rtw_alloc_xmitframe_ext(pxmitpriv);
13953 +
13954 + if (pmgntframe == NULL) {
13955 + DBG_871X(FUNC_ADPT_FMT" alloc xmitframe fail, once:%d\n", FUNC_ADPT_ARG(pxmitpriv->adapter), once);
13956 + goto exit;
13957 }
13958
13959 - if ((pxmitbuf = rtw_alloc_xmitbuf_ext(pxmitpriv)) == NULL)
13960 - {
13961 - DBG_871X("%s, alloc xmitbuf fail\n", __FUNCTION__);
13962 - rtw_free_xmitframe_ex(pxmitpriv, pmgntframe);
13963 - return NULL;
13964 + if ((pxmitbuf = rtw_alloc_xmitbuf_ext(pxmitpriv)) == NULL) {
13965 + DBG_871X(FUNC_ADPT_FMT" alloc xmitbuf fail\n", FUNC_ADPT_ARG(pxmitpriv->adapter));
13966 + rtw_free_xmitframe(pxmitpriv, pmgntframe);
13967 + pmgntframe = NULL;
13968 + goto exit;
13969 }
13970
13971 pmgntframe->frame_tag = MGNT_FRAMETAG;
13972 -
13973 pmgntframe->pxmitbuf = pxmitbuf;
13974 -
13975 pmgntframe->buf_addr = pxmitbuf->pbuf;
13976 -
13977 pxmitbuf->priv_data = pmgntframe;
13978
13979 +exit:
13980 return pmgntframe;
13981
13982 }
13983
13984 +inline struct xmit_frame *alloc_mgtxmitframe(struct xmit_priv *pxmitpriv)
13985 +{
13986 + return _alloc_mgtxmitframe(pxmitpriv, _FALSE);
13987 +}
13988 +
13989 +inline struct xmit_frame *alloc_mgtxmitframe_once(struct xmit_priv *pxmitpriv)
13990 +{
13991 + return _alloc_mgtxmitframe(pxmitpriv, _TRUE);
13992 +}
13993 +
13994
13995 /****************************************************************************
13996
13997 @@ -4772,6 +6310,15 @@ Following are some TX fuctions for WiFi
13998
13999 *****************************************************************************/
14000
14001 +void update_mgnt_tx_rate(_adapter *padapter, u8 rate)
14002 +{
14003 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
14004 +
14005 + pmlmeext->tx_rate = rate;
14006 +
14007 + //DBG_871X("%s(): rate = %x\n",__FUNCTION__, rate);
14008 +}
14009 +
14010 void update_mgntframe_attrib(_adapter *padapter, struct pkt_attrib *pattrib)
14011 {
14012 struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
14013 @@ -4810,810 +6357,135 @@ void dump_mgntframe(_adapter *padapter,
14014 {
14015 if(padapter->bSurpriseRemoved == _TRUE ||
14016 padapter->bDriverStopped == _TRUE)
14017 - return;
14018 -
14019 - padapter->HalFunc.mgnt_xmit(padapter, pmgntframe);
14020 -}
14021 -
14022 -//Commented by Kurt
14023 -#ifdef CONFIG_TDLS
14024 -void issue_nulldata_to_TDLS_peer_STA(_adapter *padapter, struct sta_info *ptdls_sta, unsigned int power_mode)
14025 -{
14026 - struct xmit_frame *pmgntframe;
14027 - struct pkt_attrib *pattrib;
14028 - unsigned char *pframe;
14029 - struct rtw_ieee80211_hdr *pwlanhdr;
14030 - unsigned short *fctrl;
14031 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
14032 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
14033 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
14034 -
14035 - if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
14036 {
14037 + rtw_free_xmitbuf(&padapter->xmitpriv, pmgntframe->pxmitbuf);
14038 + rtw_free_xmitframe(&padapter->xmitpriv, pmgntframe);
14039 return;
14040 }
14041
14042 - //update attribute
14043 - pattrib = &pmgntframe->attrib;
14044 - update_mgntframe_attrib(padapter, pattrib);
14045 -
14046 - _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
14047 + rtw_hal_mgnt_xmit(padapter, pmgntframe);
14048 +}
14049
14050 - pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
14051 - pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
14052 +s32 dump_mgntframe_and_wait(_adapter *padapter, struct xmit_frame *pmgntframe, int timeout_ms)
14053 +{
14054 + s32 ret = _FAIL;
14055 + _irqL irqL;
14056 + struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
14057 + struct xmit_buf *pxmitbuf = pmgntframe->pxmitbuf;
14058 + struct submit_ctx sctx;
14059
14060 - fctrl = &(pwlanhdr->frame_ctl);
14061 - *(fctrl) = 0;
14062 -// SetToDs(fctrl);
14063 - if (power_mode)
14064 + if(padapter->bSurpriseRemoved == _TRUE ||
14065 + padapter->bDriverStopped == _TRUE)
14066 {
14067 - SetPwrMgt(fctrl);
14068 + rtw_free_xmitbuf(&padapter->xmitpriv, pmgntframe->pxmitbuf);
14069 + rtw_free_xmitframe(&padapter->xmitpriv, pmgntframe);
14070 + return ret;
14071 }
14072
14073 - _rtw_memcpy(pwlanhdr->addr1, ptdls_sta->hwaddr, ETH_ALEN);
14074 - _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
14075 - _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
14076 -
14077 - ptdls_sta->sta_xmitpriv.txseq_tid[pattrib->priority]++;
14078 - ptdls_sta->sta_xmitpriv.txseq_tid[pattrib->priority] &= 0xFFF;
14079 - pattrib->seqnum = ptdls_sta->sta_xmitpriv.txseq_tid[pattrib->priority];
14080 - SetSeqNum(pwlanhdr, pattrib->seqnum);
14081 + rtw_sctx_init(&sctx, timeout_ms);
14082 + pxmitbuf->sctx = &sctx;
14083
14084 - SetFrameSubType(pframe, WIFI_DATA_NULL);
14085 + ret = rtw_hal_mgnt_xmit(padapter, pmgntframe);
14086
14087 - pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
14088 - pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
14089 + if (ret == _SUCCESS)
14090 + ret = rtw_sctx_wait(&sctx);
14091
14092 - pattrib->last_txcmdsz = pattrib->pktlen;
14093 - dump_mgntframe(padapter, pmgntframe);
14094 + _enter_critical(&pxmitpriv->lock_sctx, &irqL);
14095 + pxmitbuf->sctx = NULL;
14096 + _exit_critical(&pxmitpriv->lock_sctx, &irqL);
14097
14098 - return;
14099 + return ret;
14100 }
14101
14102 -s32 update_tdls_attrib(_adapter *padapter, struct pkt_attrib *pattrib)
14103 +s32 dump_mgntframe_and_wait_ack(_adapter *padapter, struct xmit_frame *pmgntframe)
14104 {
14105 +#ifdef CONFIG_XMIT_ACK
14106 + s32 ret = _FAIL;
14107 + u32 timeout_ms = 500;// 500ms
14108 + struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
14109 + #ifdef CONFIG_CONCURRENT_MODE
14110 + if (padapter->pbuddy_adapter && !padapter->isprimary)
14111 + pxmitpriv = &(padapter->pbuddy_adapter->xmitpriv);
14112 + #endif
14113
14114 - struct sta_info *psta = NULL;
14115 - struct sta_priv *pstapriv = &padapter->stapriv;
14116 - struct security_priv *psecuritypriv = &padapter->securitypriv;
14117 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
14118 - struct qos_priv *pqospriv= &pmlmepriv->qospriv;
14119 -
14120 - s32 res=_SUCCESS;
14121 - sint bmcast;
14122 -
14123 - bmcast = IS_MCAST(pattrib->ra);
14124 -
14125 - psta = rtw_get_stainfo(pstapriv, pattrib->ra);
14126 - if (psta == NULL) {
14127 - res =_FAIL;
14128 - goto exit;
14129 + if(padapter->bSurpriseRemoved == _TRUE ||
14130 + padapter->bDriverStopped == _TRUE)
14131 + {
14132 + rtw_free_xmitbuf(&padapter->xmitpriv, pmgntframe->pxmitbuf);
14133 + rtw_free_xmitframe(&padapter->xmitpriv, pmgntframe);
14134 + return -1;
14135 }
14136
14137 - pattrib->mac_id = psta->mac_id;
14138 -
14139 - pattrib->psta = psta;
14140 -
14141 - pattrib->ack_policy = 0;
14142 - // get ether_hdr_len
14143 - pattrib->pkt_hdrlen = ETH_HLEN;//(pattrib->ether_type == 0x8100) ? (14 + 4 ): 14; //vlan tag
14144 + _enter_critical_mutex(&pxmitpriv->ack_tx_mutex, NULL);
14145 + pxmitpriv->ack_tx = _TRUE;
14146
14147 - if (pqospriv->qos_option && psta->qos_option) {
14148 - pattrib->priority = 1; //tdls management frame should be AC_BK
14149 - pattrib->hdrlen = WLAN_HDR_A3_QOS_LEN;
14150 - pattrib->subtype = WIFI_QOS_DATA_TYPE;
14151 - } else {
14152 - pattrib->hdrlen = WLAN_HDR_A3_LEN;
14153 - pattrib->subtype = WIFI_DATA_TYPE;
14154 - pattrib->priority = 0;
14155 + pmgntframe->ack_report = 1;
14156 + if (rtw_hal_mgnt_xmit(padapter, pmgntframe) == _SUCCESS) {
14157 + ret = rtw_ack_tx_wait(pxmitpriv, timeout_ms);
14158 }
14159
14160 - if (psta->ieee8021x_blocked == _TRUE)
14161 - {
14162 - pattrib->encrypt = 0;
14163 - }
14164 - else
14165 - {
14166 - GET_ENCRY_ALGO(psecuritypriv, psta, pattrib->encrypt, bmcast);
14167 + pxmitpriv->ack_tx = _FALSE;
14168 + _exit_critical_mutex(&pxmitpriv->ack_tx_mutex, NULL);
14169 +
14170 + return ret;
14171 +#else //!CONFIG_XMIT_ACK
14172 + dump_mgntframe(padapter, pmgntframe);
14173 + rtw_msleep_os(50);
14174 + return _SUCCESS;
14175 +#endif //!CONFIG_XMIT_ACK
14176 +}
14177 +
14178 +int update_hidden_ssid(u8 *ies, u32 ies_len, u8 hidden_ssid_mode)
14179 +{
14180 + u8 *ssid_ie;
14181 + sint ssid_len_ori;
14182 + int len_diff = 0;
14183 +
14184 + ssid_ie = rtw_get_ie(ies, WLAN_EID_SSID, &ssid_len_ori, ies_len);
14185
14186 - switch(psecuritypriv->dot11AuthAlgrthm)
14187 + //DBG_871X("%s hidden_ssid_mode:%u, ssid_ie:%p, ssid_len_ori:%d\n", __FUNCTION__, hidden_ssid_mode, ssid_ie, ssid_len_ori);
14188 +
14189 + if(ssid_ie && ssid_len_ori>0)
14190 + {
14191 + switch(hidden_ssid_mode)
14192 {
14193 - case dot11AuthAlgrthm_Open:
14194 - case dot11AuthAlgrthm_Shared:
14195 - case dot11AuthAlgrthm_Auto:
14196 - pattrib->key_idx = (u8)psecuritypriv->dot11PrivacyKeyIndex;
14197 + case 1:
14198 + {
14199 + u8 *next_ie = ssid_ie + 2 + ssid_len_ori;
14200 + u32 remain_len = 0;
14201 +
14202 + remain_len = ies_len -(next_ie-ies);
14203 +
14204 + ssid_ie[1] = 0;
14205 + _rtw_memcpy(ssid_ie+2, next_ie, remain_len);
14206 + len_diff -= ssid_len_ori;
14207 +
14208 break;
14209 - case dot11AuthAlgrthm_8021X:
14210 - pattrib->key_idx = 0;
14211 + }
14212 + case 2:
14213 + _rtw_memset(&ssid_ie[2], 0, ssid_len_ori);
14214 break;
14215 default:
14216 - pattrib->key_idx = 0;
14217 break;
14218 }
14219 }
14220
14221 - switch (pattrib->encrypt)
14222 - {
14223 - case _WEP40_:
14224 - case _WEP104_:
14225 - pattrib->iv_len = 4;
14226 - pattrib->icv_len = 4;
14227 - break;
14228 - case _TKIP_:
14229 - pattrib->iv_len = 8;
14230 - pattrib->icv_len = 4;
14231 - if(padapter->securitypriv.busetkipkey==_FAIL)
14232 - {
14233 - res =_FAIL;
14234 - goto exit;
14235 - }
14236 - break;
14237 - case _AES_:
14238 - pattrib->iv_len = 8;
14239 - pattrib->icv_len = 8;
14240 - break;
14241 - default:
14242 - pattrib->iv_len = 0;
14243 - pattrib->icv_len = 0;
14244 - break;
14245 - }
14246 -
14247 - if (pattrib->encrypt &&
14248 - ((padapter->securitypriv.sw_encrypt == _TRUE) || (psecuritypriv->hw_decrypted == _FALSE)))
14249 - {
14250 - pattrib->bswenc = _TRUE;
14251 - } else {
14252 - pattrib->bswenc = _FALSE;
14253 - }
14254 -
14255 - //qos_en, ht_en, init rate, ,bw, ch_offset, sgi
14256 - pattrib->qos_en = psta->qos_option;
14257 - pattrib->ht_en = psta->htpriv.ht_option;
14258 - pattrib->raid = psta->raid;
14259 - pattrib->bwmode = psta->htpriv.bwmode;
14260 - pattrib->ch_offset = psta->htpriv.ch_offset;
14261 - pattrib->sgi= psta->htpriv.sgi;
14262 - pattrib->ampdu_en = _FALSE;
14263 -
14264 - if(pattrib->ht_en && psta->htpriv.ampdu_enable)
14265 - {
14266 - if(psta->htpriv.agg_enable_bitmap & BIT(pattrib->priority))
14267 - pattrib->ampdu_en = _TRUE;
14268 - }
14269 -
14270 -exit:
14271 -
14272 - return res;
14273 + return len_diff;
14274 }
14275
14276 -void free_tdls_sta(_adapter *padapter, struct sta_info *ptdls_sta)
14277 -{
14278 - struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
14279 - struct sta_priv *pstapriv = &padapter->stapriv;
14280 - _irqL irqL;
14281 -
14282 - //free peer sta_info
14283 - DBG_8192C("Free sta_info\n");
14284 - _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
14285 - ptdlsinfo->sta_cnt--;
14286 - _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
14287 - if( ptdlsinfo->sta_cnt < (NUM_STA - 1 ) )
14288 - {
14289 - ptdlsinfo->sta_maximum = _FALSE;
14290 - _rtw_memset( &ptdlsinfo->ss_record, 0x00, sizeof(struct tdls_ss_record) );
14291 - }
14292 - //ready to clear cam
14293 - if(ptdls_sta->cam_entry!=0){
14294 - ptdlsinfo->cam_entry_to_clear=ptdls_sta->cam_entry;
14295 - rtw_setstakey_cmd(padapter, (u8 *)ptdls_sta, _TRUE);
14296 - }
14297 -
14298 - if(ptdlsinfo->sta_cnt==0){
14299 - rtw_tdls_cmd(padapter, myid(&(padapter->eeprompriv)), TDLS_RS_RCR);
14300 - ptdlsinfo->setup_state=UN_TDLS_STATE;
14301 - }
14302 -
14303 - rtw_free_stainfo(padapter, ptdls_sta);
14304 -
14305 -}
14306 -
14307 -void issue_tdls_setup_req(_adapter *padapter, u8 *mac_addr)
14308 -{
14309 - struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
14310 - struct xmit_frame *pmgntframe;
14311 - struct pkt_attrib *pattrib;
14312 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
14313 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
14314 - struct sta_priv *pstapriv = &padapter->stapriv;
14315 - struct sta_info *ptdls_sta= NULL;
14316 - _irqL irqL;
14317 - static u8 dialogtoken = 0;
14318 - u32 timeout_interval= TPK_RESEND_COUNT * 1000; //retry timer should set at least 301 sec, using TPK_count counting 301 times.
14319 -
14320 - if(ptdlsinfo->ap_prohibited == _TRUE)
14321 - goto exit;
14322 -
14323 - if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
14324 - {
14325 - return;
14326 - }
14327 -
14328 - //update attribute
14329 - pattrib = &pmgntframe->attrib;
14330 -
14331 - pmgntframe->frame_tag = DATA_FRAMETAG;
14332 - pattrib->ether_type = 0x890d;
14333 - pattrib->pctrl =0;
14334 -
14335 - _rtw_memcpy(pattrib->dst, mac_addr, ETH_ALEN);
14336 - _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
14337 -
14338 - _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
14339 - _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
14340 -
14341 - update_tdls_attrib(padapter, pattrib);
14342 -
14343 - //init peer sta_info
14344 - ptdls_sta = rtw_get_stainfo(pstapriv, mac_addr);
14345 - if(ptdls_sta==NULL)
14346 - {
14347 - ptdls_sta = rtw_alloc_stainfo(pstapriv, mac_addr);
14348 - if(ptdls_sta)
14349 - {
14350 - _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
14351 - ptdlsinfo->sta_cnt++;
14352 - _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
14353 - if( ptdlsinfo->sta_cnt == (NUM_STA - 1) )
14354 - {
14355 - ptdlsinfo->sta_maximum = _TRUE;
14356 - }
14357 - }
14358 - else
14359 - {
14360 - rtw_free_xmitbuf(pxmitpriv,pmgntframe->pxmitbuf);
14361 - rtw_free_xmitframe_ex(pxmitpriv, pmgntframe);
14362 - goto exit;
14363 - }
14364 - }
14365 -
14366 - if(ptdls_sta){
14367 - ptdls_sta->tdls_sta_state |= TDLS_RESPONDER_STATE;
14368 - //for tdls; ptdls_sta->aid is used to fill dialogtoken
14369 - ptdls_sta->dialog = dialogtoken;
14370 - dialogtoken = (dialogtoken+1)%256;
14371 - ptdls_sta->TDLS_PeerKey_Lifetime = timeout_interval;
14372 - _set_timer( &ptdls_sta->handshake_timer, TDLS_HANDSHAKE_TIME );
14373 - }
14374 -
14375 - pattrib->qsel=pattrib->priority;
14376 - if(rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_SETUP_REQUEST) !=_SUCCESS ){
14377 - rtw_free_xmitbuf(pxmitpriv,pmgntframe->pxmitbuf);
14378 - rtw_free_xmitframe_ex(pxmitpriv, pmgntframe);
14379 - goto exit;
14380 - }
14381 - rtw_dump_xframe(padapter, pmgntframe);
14382 -
14383 -exit:
14384 -
14385 - return;
14386 -}
14387 -
14388 -void issue_tdls_teardown(_adapter *padapter, u8 *mac_addr)
14389 -{
14390 - struct xmit_frame *pmgntframe;
14391 - struct pkt_attrib *pattrib;
14392 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
14393 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
14394 - struct sta_priv *pstapriv = &padapter->stapriv;
14395 - struct sta_info *ptdls_sta=NULL;
14396 - _irqL irqL;
14397 -
14398 - ptdls_sta = rtw_get_stainfo(pstapriv, mac_addr);
14399 - if(ptdls_sta==NULL){
14400 - DBG_8192C("issue tdls teardown unsuccessful\n");
14401 - return;
14402 - }else{
14403 - ptdls_sta->tdls_sta_state=UN_TDLS_STATE;
14404 - }
14405 -
14406 - if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
14407 - {
14408 - return;
14409 - }
14410 -
14411 - //update attribute
14412 - pattrib = &pmgntframe->attrib;
14413 -
14414 - pmgntframe->frame_tag = DATA_FRAMETAG;
14415 - pattrib->ether_type = 0x890d;
14416 - pattrib->pctrl =0;
14417 -
14418 - _rtw_memcpy(pattrib->dst, mac_addr, ETH_ALEN);
14419 - _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
14420 -
14421 - _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
14422 - _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
14423 -
14424 - update_tdls_attrib(padapter, pattrib);
14425 - pattrib->qsel=pattrib->priority;
14426 - if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_TEARDOWN) != _SUCCESS) {
14427 - rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
14428 - rtw_free_xmitframe_ex(pxmitpriv, pmgntframe);
14429 - goto exit;
14430 - }
14431 - rtw_dump_xframe(padapter, pmgntframe);
14432 -
14433 - if(ptdls_sta->tdls_sta_state & TDLS_CH_SWITCH_ON_STATE){
14434 - ptdls_sta->option =3;
14435 - rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CS_OFF);
14436 - }
14437 -
14438 - if( ptdls_sta->timer_flag == 1 )
14439 - {
14440 - _enter_critical_bh(&(padapter->tdlsinfo.hdl_lock), &irqL);
14441 - ptdls_sta->timer_flag = 2;
14442 - _exit_critical_bh(&(padapter->tdlsinfo.hdl_lock), &irqL);
14443 - }
14444 - else
14445 - rtw_tdls_cmd(padapter, mac_addr, TDLS_FREE_STA );
14446 -
14447 -
14448 -exit:
14449 -
14450 - return;
14451 -}
14452 -
14453 -void issue_tdls_dis_req(_adapter *padapter, u8 *mac_addr)
14454 -{
14455 - struct xmit_frame *pmgntframe;
14456 - struct pkt_attrib *pattrib;
14457 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
14458 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
14459 - u8 baddr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
14460 -
14461 - if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
14462 - {
14463 - return;
14464 - }
14465 -
14466 - //update attribute
14467 - pattrib = &pmgntframe->attrib;
14468 -
14469 - pmgntframe->frame_tag = DATA_FRAMETAG;
14470 - pattrib->ether_type = 0x890d;
14471 - pattrib->pctrl =0;
14472 -
14473 - if(mac_addr == NULL)
14474 - _rtw_memcpy(pattrib->dst, baddr, ETH_ALEN);
14475 - else
14476 - _rtw_memcpy(pattrib->dst, mac_addr, ETH_ALEN);
14477 -
14478 - _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
14479 -
14480 - _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
14481 - _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
14482 -
14483 - update_tdls_attrib(padapter, pattrib);
14484 - pattrib->qsel=pattrib->priority;
14485 - if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_DISCOVERY_REQUEST) != _SUCCESS) {
14486 - rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
14487 - rtw_free_xmitframe_ex(pxmitpriv, pmgntframe);
14488 - goto exit;
14489 - }
14490 - rtw_dump_xframe(padapter, pmgntframe);
14491 - DBG_8192C("issue tdls dis req\n");
14492 -
14493 -exit:
14494 -
14495 - return;
14496 -}
14497 -
14498 -void issue_tdls_setup_rsp(_adapter *padapter, union recv_frame *precv_frame)
14499 -{
14500 - struct xmit_frame *pmgntframe;
14501 - struct pkt_attrib *pattrib;
14502 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
14503 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
14504 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
14505 - struct rx_pkt_attrib *rx_pkt_pattrib = &precv_frame->u.hdr.attrib;
14506 - _irqL irqL;
14507 -
14508 - if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
14509 - {
14510 - return;
14511 - }
14512 -
14513 - //update attribute
14514 - pattrib = &pmgntframe->attrib;
14515 -
14516 - pmgntframe->frame_tag = DATA_FRAMETAG;
14517 - pattrib->ether_type = 0x890d;
14518 - pattrib->pctrl =0;
14519 -
14520 - _rtw_memcpy(pattrib->dst, rx_pkt_pattrib->src, ETH_ALEN);
14521 - _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
14522 -
14523 - _rtw_memcpy(pattrib->ra, rx_pkt_pattrib->bssid, ETH_ALEN);
14524 - _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
14525 -
14526 - update_tdls_attrib(padapter, pattrib);
14527 - pattrib->qsel=pattrib->priority;
14528 - if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_SETUP_RESPONSE) != _SUCCESS) {
14529 - rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
14530 - rtw_free_xmitframe_ex(pxmitpriv, pmgntframe);
14531 - goto exit;
14532 - }
14533 - rtw_dump_xframe(padapter, pmgntframe);
14534 -
14535 -exit:
14536 -
14537 - return;
14538 -
14539 -}
14540 -
14541 -void issue_tdls_setup_cfm(_adapter *padapter, union recv_frame *precv_frame)
14542 -{
14543 - struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
14544 - struct xmit_frame *pmgntframe;
14545 - struct pkt_attrib *pattrib;
14546 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
14547 - struct sta_info *ptdls_sta=NULL;
14548 - _irqL irqL;
14549 -
14550 - struct rx_pkt_attrib *rx_pkt_pattrib = & precv_frame->u.hdr.attrib;
14551 -
14552 - if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
14553 - {
14554 - return;
14555 - }
14556 -
14557 - //update attribute
14558 - pattrib = &pmgntframe->attrib;
14559 -
14560 - pmgntframe->frame_tag = DATA_FRAMETAG;
14561 - pattrib->ether_type = 0x890d;
14562 - pattrib->pctrl =0;
14563 -
14564 - _rtw_memcpy(pattrib->dst, rx_pkt_pattrib->src, ETH_ALEN);
14565 - _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
14566 -
14567 - _rtw_memcpy(pattrib->ra, rx_pkt_pattrib->bssid, ETH_ALEN);
14568 - _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
14569 -
14570 - update_tdls_attrib(padapter, pattrib);
14571 - pattrib->qsel=pattrib->priority;
14572 - if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_SETUP_CONFIRM) != _SUCCESS) {
14573 - rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
14574 - rtw_free_xmitframe_ex(pxmitpriv, pmgntframe);
14575 - goto exit;
14576 - }
14577 -
14578 - rtw_dump_xframe(padapter, pmgntframe);
14579 -
14580 -exit:
14581 -
14582 - return;
14583 -
14584 -}
14585 -
14586 -//TDLS Discovery Response frame is a management action frame
14587 -void issue_tdls_dis_rsp(_adapter *padapter, union recv_frame *precv_frame, u8 dialog)
14588 -{
14589 - struct xmit_frame *pmgntframe;
14590 - struct pkt_attrib *pattrib;
14591 - unsigned char *pframe;
14592 - struct rtw_ieee80211_hdr *pwlanhdr;
14593 - unsigned short *fctrl;
14594 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
14595 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
14596 -
14597 - struct rx_pkt_attrib *rx_pkt_pattrib = &precv_frame->u.hdr.attrib;
14598 -
14599 - if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
14600 - {
14601 - return;
14602 - }
14603 -
14604 - //update attribute
14605 - pattrib = &pmgntframe->attrib;
14606 - update_mgntframe_attrib(padapter, pattrib);
14607 -
14608 - _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
14609 -
14610 - pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
14611 - pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
14612 -
14613 - fctrl = &(pwlanhdr->frame_ctl);
14614 - *(fctrl) = 0;
14615 -
14616 - // unicast probe request frame
14617 - _rtw_memcpy(pwlanhdr->addr1, rx_pkt_pattrib->src, ETH_ALEN);
14618 - _rtw_memcpy(pattrib->dst, pwlanhdr->addr1, ETH_ALEN);
14619 -
14620 - _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
14621 - _rtw_memcpy(pattrib->src, pwlanhdr->addr2, ETH_ALEN);
14622 -
14623 - _rtw_memcpy(pwlanhdr->addr3, rx_pkt_pattrib->bssid, ETH_ALEN);
14624 - _rtw_memcpy(pattrib->ra, pwlanhdr->addr3, ETH_ALEN);
14625 -
14626 - SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
14627 - pmlmeext->mgnt_seq++;
14628 - SetFrameSubType(pframe, WIFI_ACTION);
14629 -
14630 - pframe += sizeof (struct rtw_ieee80211_hdr_3addr);
14631 - pattrib->pktlen = sizeof (struct rtw_ieee80211_hdr_3addr);
14632 -
14633 - rtw_tdls_dis_rsp_fr(padapter, pmgntframe, pframe, dialog);
14634 -
14635 - pattrib->nr_frags = 1;
14636 - pattrib->last_txcmdsz = pattrib->pktlen;
14637 -
14638 - dump_mgntframe(padapter, pmgntframe);
14639 -
14640 - return;
14641 -}
14642 -
14643 -void issue_tdls_peer_traffic_indication(_adapter *padapter, struct sta_info *ptdls_sta)
14644 -{
14645 - struct xmit_frame *pmgntframe;
14646 - struct pkt_attrib *pattrib;
14647 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
14648 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
14649 -
14650 - static u8 dialogtoken=0;
14651 -
14652 - if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
14653 - {
14654 - return;
14655 - }
14656 -
14657 - //update attribute
14658 - pattrib = &pmgntframe->attrib;
14659 -
14660 - pmgntframe->frame_tag = DATA_FRAMETAG;
14661 - pattrib->ether_type = 0x890d;
14662 - pattrib->pctrl =0;
14663 -
14664 - _rtw_memcpy(pattrib->dst, ptdls_sta->hwaddr, ETH_ALEN);
14665 - _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
14666 -
14667 - _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
14668 - _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
14669 -
14670 - //for tdls; pattrib->nr_frags is used to fill dialogtoken
14671 - ptdls_sta->dialog = dialogtoken;
14672 - dialogtoken = (dialogtoken+1)%256;
14673 - //PTI frame's priority should be AC_VO
14674 - pattrib->priority = 7;
14675 -
14676 - update_tdls_attrib(padapter, pattrib);
14677 - pattrib->qsel=pattrib->priority;
14678 - if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_PEER_TRAFFIC_INDICATION) != _SUCCESS) {
14679 - rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
14680 - rtw_free_xmitframe_ex(pxmitpriv, pmgntframe);
14681 - goto exit;
14682 - }
14683 - rtw_dump_xframe(padapter, pmgntframe);
14684 -
14685 -exit:
14686 -
14687 - return;
14688 -}
14689 -
14690 -void issue_tdls_ch_switch_req(_adapter *padapter, u8 *mac_addr)
14691 +void issue_beacon(_adapter *padapter)
14692 {
14693 struct xmit_frame *pmgntframe;
14694 struct pkt_attrib *pattrib;
14695 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
14696 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
14697 -
14698 - if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
14699 - {
14700 - return;
14701 - }
14702 -
14703 - //update attribute
14704 - pattrib = &pmgntframe->attrib;
14705 -
14706 - pmgntframe->frame_tag = DATA_FRAMETAG;
14707 - pattrib->ether_type = 0x890d;
14708 - pattrib->pctrl =0;
14709 -
14710 - _rtw_memcpy(pattrib->dst, mac_addr, ETH_ALEN);
14711 - _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
14712 -
14713 - _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
14714 - _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
14715 -
14716 - update_tdls_attrib(padapter, pattrib);
14717 -
14718 - pattrib->qsel=pattrib->priority;
14719 - if(rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_CHANNEL_SWITCH_REQUEST) !=_SUCCESS ){
14720 - rtw_free_xmitbuf(pxmitpriv,pmgntframe->pxmitbuf);
14721 - rtw_free_xmitframe_ex(pxmitpriv, pmgntframe);
14722 - goto exit;
14723 - }
14724 - rtw_dump_xframe(padapter, pmgntframe);
14725 -
14726 -exit:
14727 -
14728 - return;
14729 -}
14730 -
14731 -void issue_tdls_ch_switch_rsp(_adapter *padapter, u8 *mac_addr)
14732 -{
14733 - struct xmit_frame *pmgntframe;
14734 - struct pkt_attrib *pattrib;
14735 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
14736 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
14737 -
14738 - _irqL irqL;
14739 -
14740 - if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
14741 - {
14742 - return;
14743 - }
14744 -
14745 - //update attribute
14746 - pattrib = &pmgntframe->attrib;
14747 -
14748 - pmgntframe->frame_tag = DATA_FRAMETAG;
14749 - pattrib->ether_type = 0x890d;
14750 - pattrib->pctrl =0;
14751 -
14752 - _rtw_memcpy(pattrib->dst, mac_addr, ETH_ALEN);
14753 - _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
14754 -
14755 - _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
14756 - _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
14757 -
14758 - update_tdls_attrib(padapter, pattrib);
14759 -
14760 - pattrib->qsel=pattrib->priority;
14761 -/*
14762 - _enter_critical_bh(&pxmitpriv->lock, &irqL);
14763 - if(xmitframe_enqueue_for_tdls_sleeping_sta(padapter, pmgntframe)==_TRUE){
14764 - _exit_critical_bh(&pxmitpriv->lock, &irqL);
14765 - return _FALSE;
14766 - }
14767 -*/
14768 - if(rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_CHANNEL_SWITCH_RESPONSE) !=_SUCCESS ){
14769 - rtw_free_xmitbuf(pxmitpriv,pmgntframe->pxmitbuf);
14770 - rtw_free_xmitframe_ex(pxmitpriv, pmgntframe);
14771 - goto exit;
14772 - }
14773 - rtw_dump_xframe(padapter, pmgntframe);
14774 -
14775 -exit:
14776 -
14777 - return;
14778 -}
14779 -
14780 -sint On_TDLS_Dis_Rsp(_adapter *adapter, union recv_frame *precv_frame)
14781 -{
14782 - struct sta_info *ptdls_sta = NULL;
14783 - struct recv_priv *precvpriv = &(adapter->recvpriv);
14784 - u8 *ptr = precv_frame->u.hdr.rx_data, *psa;
14785 - struct rx_pkt_attrib *pattrib = &(precv_frame->u.hdr.attrib);
14786 - struct tdls_info *ptdlsinfo = &(adapter->tdlsinfo);
14787 - u8 empty_addr[ETH_ALEN] = { 0x00 };
14788 -
14789 - psa = get_sa(ptr);
14790 - ptdls_sta = rtw_get_stainfo(&(adapter->stapriv), psa);
14791 -
14792 - if(ptdls_sta != NULL)
14793 - {
14794 - ptdls_sta->tdls_sta_state |= TDLS_ALIVE_STATE;
14795 -
14796 - //Record the tdls sta with lowest signal strength
14797 - if( (ptdlsinfo->sta_maximum == _TRUE) && (ptdls_sta->alive_count >= 1) )
14798 - {
14799 - printk("%s %d\n", __FUNCTION__, __LINE__);
14800 - if( _rtw_memcmp(ptdlsinfo->ss_record.macaddr, empty_addr, ETH_ALEN) )
14801 - {
14802 - printk("%s %d\n", __FUNCTION__, __LINE__);
14803 - _rtw_memcpy(ptdlsinfo->ss_record.macaddr, psa, ETH_ALEN);
14804 - ptdlsinfo->ss_record.signal_strength = pattrib->signal_strength;
14805 - }
14806 - else
14807 - {
14808 - printk("%s %d\n", __FUNCTION__, __LINE__);
14809 - if( ptdlsinfo->ss_record.signal_strength < pattrib->signal_strength )
14810 - {
14811 - printk("%s %d\n", __FUNCTION__, __LINE__);
14812 - _rtw_memcpy(ptdlsinfo->ss_record.macaddr, psa, ETH_ALEN);
14813 - ptdlsinfo->ss_record.signal_strength = pattrib->signal_strength;
14814 - }
14815 - }
14816 - }
14817 -
14818 - }
14819 - else
14820 - {
14821 - if( ptdlsinfo->sta_maximum == _TRUE)
14822 - {
14823 - printk("%s %d\n", __FUNCTION__, __LINE__);
14824 - if( _rtw_memcmp( ptdlsinfo->ss_record.macaddr, empty_addr, ETH_ALEN ) )
14825 - {
14826 - //All traffics are busy, do not set up another direct link.
14827 - printk("%s %d\n", __FUNCTION__, __LINE__);
14828 - return _FAIL;
14829 - }
14830 - else
14831 - {
14832 - if( pattrib->signal_strength > ptdlsinfo->ss_record.signal_strength )
14833 - {
14834 - printk("%s %d\n", __FUNCTION__, __LINE__);
14835 - issue_tdls_teardown(adapter, ptdlsinfo->ss_record.macaddr);
14836 - }
14837 - else
14838 - {
14839 - printk("%s %d\n", __FUNCTION__, __LINE__);
14840 - return _FAIL;
14841 - }
14842 - }
14843 - }
14844 -
14845 - if( pattrib->signal_strength + TDLS_SIGNAL_THRESH >= precvpriv->signal_strength )
14846 - {
14847 - issue_tdls_setup_req(adapter, psa);
14848 - }
14849 - }
14850 -
14851 - return _FAIL;
14852 -}
14853 -
14854 -#endif
14855 -
14856 -int update_hidden_ssid(u8 *ies, u32 ies_len, u8 hidden_ssid_mode)
14857 -{
14858 - u8 *ssid_ie;
14859 - sint ssid_len_ori;
14860 - int len_diff = 0;
14861 -
14862 - ssid_ie = rtw_get_ie(ies, WLAN_EID_SSID, &ssid_len_ori, ies_len);
14863 -
14864 - //DBG_871X("%s hidden_ssid_mode:%u, ssid_ie:%p, ssid_len_ori:%d\n", __FUNCTION__, hidden_ssid_mode, ssid_ie, ssid_len_ori);
14865 -
14866 - if(ssid_ie && ssid_len_ori>0)
14867 - {
14868 - switch(hidden_ssid_mode)
14869 - {
14870 - case 1:
14871 - {
14872 - u8 *next_ie = ssid_ie + 2 + ssid_len_ori;
14873 - u32 remain_len = 0;
14874 -
14875 - remain_len = ies_len -(next_ie-ies);
14876 -
14877 - ssid_ie[1] = 0;
14878 - _rtw_memcpy(ssid_ie+2, next_ie, remain_len);
14879 - len_diff -= ssid_len_ori;
14880 -
14881 - break;
14882 - }
14883 - case 2:
14884 - _rtw_memset(&ssid_ie[2], 0, ssid_len_ori);
14885 - break;
14886 - default:
14887 - break;
14888 - }
14889 - }
14890 -
14891 - return len_diff;
14892 -}
14893 -
14894 -void issue_beacon(_adapter *padapter)
14895 -{
14896 - _irqL irqL;
14897 - struct xmit_frame *pmgntframe;
14898 - struct pkt_attrib *pattrib;
14899 unsigned char *pframe;
14900 struct rtw_ieee80211_hdr *pwlanhdr;
14901 unsigned short *fctrl;
14902 unsigned int rate_len;
14903 struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
14904 +#if defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME)
14905 + _irqL irqL;
14906 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
14907 +#endif //#if defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME)
14908 struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
14909 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
14910 WLAN_BSSID_EX *cur_network = &(pmlmeinfo->network);
14911 @@ -5630,8 +6502,9 @@ void issue_beacon(_adapter *padapter)
14912 DBG_871X("%s, alloc mgnt frame fail\n", __FUNCTION__);
14913 return;
14914 }
14915 -
14916 - _enter_critical_bh(&pmlmepriv->bcn_update_lock, &irqL);
14917 +#if defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME)
14918 + _enter_critical_bh(&pmlmepriv->bcn_update_lock, &irqL);
14919 +#endif //#if defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME)
14920
14921 //update attribute
14922 pattrib = &pmgntframe->attrib;
14923 @@ -5670,7 +6543,7 @@ void issue_beacon(_adapter *padapter)
14924 if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO) && wpsie && wpsielen>0)
14925 {
14926 uint wps_offset, remainder_ielen;
14927 - u8 *premainder_ie, *pframe_wscie;
14928 + u8 *premainder_ie, *pframe_wscie;
14929
14930 wps_offset = (uint)(wpsie - cur_network->IEs);
14931
14932 @@ -5679,24 +6552,22 @@ void issue_beacon(_adapter *padapter)
14933 remainder_ielen = cur_network->IELength - wps_offset - wpsielen;
14934
14935 #ifdef CONFIG_IOCTL_CFG80211
14936 - if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled)
14937 + if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled && pwdinfo->driver_interface == DRIVER_CFG80211 )
14938 {
14939 if(pmlmepriv->wps_beacon_ie && pmlmepriv->wps_beacon_ie_len>0)
14940 {
14941 _rtw_memcpy(pframe, cur_network->IEs, wps_offset);
14942 pframe += wps_offset;
14943 pattrib->pktlen += wps_offset;
14944 -
14945 - _rtw_memcpy(pframe, pmlmepriv->wps_beacon_ie, pmlmepriv->wps_beacon_ie_len);
14946
14947 + _rtw_memcpy(pframe, pmlmepriv->wps_beacon_ie, pmlmepriv->wps_beacon_ie_len);
14948 pframe += pmlmepriv->wps_beacon_ie_len;
14949 - pattrib->pktlen += pmlmepriv->wps_beacon_ie_len;
14950 + pattrib->pktlen += pmlmepriv->wps_beacon_ie_len;
14951
14952 //copy remainder_ie to pframe
14953 _rtw_memcpy(pframe, premainder_ie, remainder_ielen);
14954 pframe += remainder_ielen;
14955 - pattrib->pktlen += remainder_ielen;
14956 -
14957 + pattrib->pktlen += remainder_ielen;
14958 }
14959 else
14960 {
14961 @@ -5708,7 +6579,6 @@ void issue_beacon(_adapter *padapter)
14962 else
14963 #endif //CONFIG_IOCTL_CFG80211
14964 {
14965 -
14966 pframe_wscie = pframe + wps_offset;
14967 _rtw_memcpy(pframe, cur_network->IEs, wps_offset+wpsielen);
14968 pframe += (wps_offset + wpsielen);
14969 @@ -5726,7 +6596,7 @@ void issue_beacon(_adapter *padapter)
14970
14971 // Value:
14972 // Category ID
14973 - *(u16*) ( pframe + insert_len ) = cpu_to_be16( WPS_PDT_CID_RTK_WIDI );
14974 + *(u16*) ( pframe + insert_len ) = cpu_to_be16( WPS_PDT_CID_MULIT_MEDIA );
14975 insert_len += 2;
14976
14977 // OUI
14978 @@ -5734,7 +6604,7 @@ void issue_beacon(_adapter *padapter)
14979 insert_len += 4;
14980
14981 // Sub Category ID
14982 - *(u16*) ( pframe + insert_len ) = cpu_to_be16( WPS_PDT_SCID_RTK_DMP );
14983 + *(u16*) ( pframe + insert_len ) = cpu_to_be16( WPS_PDT_SCID_MEDIA_SERVER );
14984 insert_len += 2;
14985
14986
14987 @@ -5762,9 +6632,8 @@ void issue_beacon(_adapter *padapter)
14988 //copy remainder_ie to pframe
14989 _rtw_memcpy(pframe, premainder_ie, remainder_ielen);
14990 pframe += remainder_ielen;
14991 - pattrib->pktlen += remainder_ielen;
14992 + pattrib->pktlen += remainder_ielen;
14993 }
14994 -
14995 }
14996 else
14997 #endif //CONFIG_P2P
14998 @@ -5780,12 +6649,27 @@ void issue_beacon(_adapter *padapter)
14999 pattrib->pktlen += (cur_network->IELength+len_diff);
15000 }
15001
15002 + {
15003 + u8 *wps_ie;
15004 + uint wps_ielen;
15005 + u8 sr = 0;
15006 + wps_ie = rtw_get_wps_ie(pmgntframe->buf_addr+TXDESC_OFFSET+sizeof (struct rtw_ieee80211_hdr_3addr)+_BEACON_IE_OFFSET_,
15007 + pattrib->pktlen-sizeof (struct rtw_ieee80211_hdr_3addr)-_BEACON_IE_OFFSET_, NULL, &wps_ielen);
15008 + if (wps_ie && wps_ielen>0) {
15009 + rtw_get_wps_attr_content(wps_ie, wps_ielen, WPS_ATTR_SELECTED_REGISTRAR, (u8*)(&sr), NULL);
15010 + }
15011 + if (sr != 0)
15012 + set_fwstate(pmlmepriv, WIFI_UNDER_WPS);
15013 + else
15014 + _clr_fwstate_(pmlmepriv, WIFI_UNDER_WPS);
15015 + }
15016 +
15017 #ifdef CONFIG_P2P
15018 if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
15019 {
15020 u32 len;
15021 #ifdef CONFIG_IOCTL_CFG80211
15022 - if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled)
15023 + if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled && pwdinfo->driver_interface == DRIVER_CFG80211 )
15024 {
15025 len = pmlmepriv->p2p_beacon_ie_len;
15026 if(pmlmepriv->p2p_beacon_ie && len>0)
15027 @@ -5797,11 +6681,26 @@ void issue_beacon(_adapter *padapter)
15028 len = build_beacon_p2p_ie(pwdinfo, pframe);
15029 }
15030
15031 -
15032 pframe += len;
15033 pattrib->pktlen += len;
15034 #ifdef CONFIG_WFD
15035 - len = build_beacon_wfd_ie( pwdinfo, pframe );
15036 +#ifdef CONFIG_IOCTL_CFG80211
15037 + if(_TRUE == pwdinfo->wfd_info->wfd_enable)
15038 +#endif //CONFIG_IOCTL_CFG80211
15039 + {
15040 + len = build_beacon_wfd_ie( pwdinfo, pframe );
15041 + }
15042 +#ifdef CONFIG_IOCTL_CFG80211
15043 + else
15044 + {
15045 + len = 0;
15046 + if(pmlmepriv->wfd_beacon_ie && pmlmepriv->wfd_beacon_ie_len>0)
15047 + {
15048 + len = pmlmepriv->wfd_beacon_ie_len;
15049 + _rtw_memcpy(pframe, pmlmepriv->wfd_beacon_ie, len);
15050 + }
15051 + }
15052 +#endif //CONFIG_IOCTL_CFG80211
15053 pframe += len;
15054 pattrib->pktlen += len;
15055 #endif //CONFIG_WFD
15056 @@ -5867,9 +6766,11 @@ void issue_beacon(_adapter *padapter)
15057
15058 _issue_bcn:
15059
15060 +#if defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME)
15061 pmlmepriv->update_bcn = _FALSE;
15062
15063 _exit_critical_bh(&pmlmepriv->bcn_update_lock, &irqL);
15064 +#endif //#if defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME)
15065
15066 if ((pattrib->pktlen + TXDESC_SIZE) > 512)
15067 {
15068 @@ -5887,8 +6788,6 @@ _issue_bcn:
15069
15070 void issue_probersp(_adapter *padapter, unsigned char *da, u8 is_valid_p2p_probereq)
15071 {
15072 - u8 *pwps_ie;
15073 - uint wps_ielen;
15074 struct xmit_frame *pmgntframe;
15075 struct pkt_attrib *pattrib;
15076 unsigned char *pframe;
15077 @@ -5896,7 +6795,11 @@ void issue_probersp(_adapter *padapter,
15078 unsigned short *fctrl;
15079 unsigned char *mac, *bssid;
15080 struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
15081 +#if defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME)
15082 + u8 *pwps_ie;
15083 + uint wps_ielen;
15084 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
15085 +#endif //#if defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME)
15086 struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
15087 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
15088 WLAN_BSSID_EX *cur_network = &(pmlmeinfo->network);
15089 @@ -5908,8 +6811,6 @@ void issue_probersp(_adapter *padapter,
15090 #endif //CONFIG_WFD
15091 #endif //CONFIG_P2P
15092
15093 -
15094 -
15095 //DBG_871X("%s\n", __FUNCTION__);
15096
15097 if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
15098 @@ -5946,7 +6847,7 @@ void issue_probersp(_adapter *padapter,
15099 pframe += pattrib->hdrlen;
15100
15101
15102 - if(cur_network->IELength>MAX_IE_SZ || cur_network->IELength<_FIXED_IE_LENGTH_)
15103 + if(cur_network->IELength>MAX_IE_SZ)
15104 return;
15105
15106 #if defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME)
15107 @@ -5991,7 +6892,40 @@ void issue_probersp(_adapter *padapter,
15108 pframe += cur_network->IELength;
15109 pattrib->pktlen += cur_network->IELength;
15110 }
15111 -
15112 +
15113 + /* retrieve SSID IE from cur_network->Ssid */
15114 + {
15115 + u8 *ssid_ie;
15116 + sint ssid_ielen;
15117 + sint ssid_ielen_diff;
15118 + u8 buf[MAX_IE_SZ];
15119 + u8 *ies = pmgntframe->buf_addr+TXDESC_OFFSET+sizeof(struct rtw_ieee80211_hdr_3addr);
15120 +
15121 + ssid_ie = rtw_get_ie(ies+_FIXED_IE_LENGTH_, _SSID_IE_, &ssid_ielen,
15122 + (pframe-ies)-_FIXED_IE_LENGTH_);
15123 +
15124 + ssid_ielen_diff = cur_network->Ssid.SsidLength - ssid_ielen;
15125 +
15126 + if (ssid_ie && cur_network->Ssid.SsidLength) {
15127 + uint remainder_ielen;
15128 + u8 *remainder_ie;
15129 + remainder_ie = ssid_ie+2;
15130 + remainder_ielen = (pframe-remainder_ie);
15131 +
15132 + LOG_LEVEL(_drv_warning_, FUNC_ADPT_FMT" remainder_ielen > MAX_IE_SZ\n", FUNC_ADPT_ARG(padapter));
15133 + if (remainder_ielen > MAX_IE_SZ) {
15134 + remainder_ielen = MAX_IE_SZ;
15135 + }
15136 +
15137 + _rtw_memcpy(buf, remainder_ie, remainder_ielen);
15138 + _rtw_memcpy(remainder_ie+ssid_ielen_diff, buf, remainder_ielen);
15139 + *(ssid_ie+1) = cur_network->Ssid.SsidLength;
15140 + _rtw_memcpy(ssid_ie+2, cur_network->Ssid.Ssid, cur_network->Ssid.SsidLength);
15141 +
15142 + pframe += ssid_ielen_diff;
15143 + pattrib->pktlen += ssid_ielen_diff;
15144 + }
15145 + }
15146 }
15147 else
15148 #endif
15149 @@ -6053,11 +6987,11 @@ void issue_probersp(_adapter *padapter,
15150 }
15151
15152 #ifdef CONFIG_P2P
15153 - if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO) && is_valid_p2p_probereq)
15154 + if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO) /*&& is_valid_p2p_probereq*/)
15155 {
15156 u32 len;
15157 #ifdef CONFIG_IOCTL_CFG80211
15158 - if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled)
15159 + if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled && pwdinfo->driver_interface == DRIVER_CFG80211 )
15160 {
15161 //if pwdinfo->role == P2P_ROLE_DEVICE will call issue_probersp_p2p()
15162 len = pmlmepriv->p2p_go_probe_resp_ie_len;
15163 @@ -6065,7 +6999,7 @@ void issue_probersp(_adapter *padapter,
15164 _rtw_memcpy(pframe, pmlmepriv->p2p_go_probe_resp_ie, len);
15165 }
15166 else
15167 -#endif //CONFIG_IOCTL_CFG80211
15168 +#endif //CONFIG_IOCTL_CFG80211
15169 {
15170 len = build_probe_resp_p2p_ie(pwdinfo, pframe);
15171 }
15172 @@ -6074,15 +7008,62 @@ void issue_probersp(_adapter *padapter,
15173 pattrib->pktlen += len;
15174
15175 #ifdef CONFIG_WFD
15176 - wfdielen = build_probe_resp_wfd_ie(pwdinfo, pframe);
15177 - pframe += wfdielen;
15178 - pattrib->pktlen += wfdielen;
15179 +#ifdef CONFIG_IOCTL_CFG80211
15180 + if(_TRUE == pwdinfo->wfd_info->wfd_enable)
15181 +#endif //CONFIG_IOCTL_CFG80211
15182 + {
15183 + len = build_probe_resp_wfd_ie(pwdinfo, pframe, 0);
15184 + }
15185 +#ifdef CONFIG_IOCTL_CFG80211
15186 + else
15187 + {
15188 + len = 0;
15189 + if(pmlmepriv->wfd_probe_resp_ie && pmlmepriv->wfd_probe_resp_ie_len>0)
15190 + {
15191 + len = pmlmepriv->wfd_probe_resp_ie_len;
15192 + _rtw_memcpy(pframe, pmlmepriv->wfd_probe_resp_ie, len);
15193 + }
15194 + }
15195 +#endif //CONFIG_IOCTL_CFG80211
15196 + pframe += len;
15197 + pattrib->pktlen += len;
15198 #endif //CONFIG_WFD
15199
15200 - }
15201 + }
15202 #endif //CONFIG_P2P
15203
15204
15205 +#ifdef CONFIG_AUTO_AP_MODE
15206 +{
15207 + struct sta_info *psta;
15208 + struct sta_priv *pstapriv = &padapter->stapriv;
15209 +
15210 + DBG_871X("(%s)\n", __FUNCTION__);
15211 +
15212 + //check rc station
15213 + psta = rtw_get_stainfo(pstapriv, da);
15214 + if (psta && psta->isrc && psta->pid>0)
15215 + {
15216 + u8 RC_OUI[4]={0x00,0xE0,0x4C,0x0A};
15217 + u8 RC_INFO[14] = {0};
15218 + //EID[1] + EID_LEN[1] + RC_OUI[4] + MAC[6] + PairingID[2] + ChannelNum[2]
15219 + u16 cu_ch = (u16)cur_network->Configuration.DSConfig;
15220 +
15221 + DBG_871X("%s, reply rc(pid=0x%x) device "MAC_FMT" in ch=%d\n", __FUNCTION__,
15222 + psta->pid, MAC_ARG(psta->hwaddr), cu_ch);
15223 +
15224 + //append vendor specific ie
15225 + _rtw_memcpy(RC_INFO, RC_OUI, sizeof(RC_OUI));
15226 + _rtw_memcpy(&RC_INFO[4], mac, ETH_ALEN);
15227 + _rtw_memcpy(&RC_INFO[10], (u8*)&psta->pid, 2);
15228 + _rtw_memcpy(&RC_INFO[12], (u8*)&cu_ch, 2);
15229 +
15230 + pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, sizeof(RC_INFO), RC_INFO, &pattrib->pktlen);
15231 + }
15232 +}
15233 +#endif //CONFIG_AUTO_AP_MODE
15234 +
15235 +
15236 pattrib->last_txcmdsz = pattrib->pktlen;
15237
15238
15239 @@ -6092,8 +7073,9 @@ void issue_probersp(_adapter *padapter,
15240
15241 }
15242
15243 -void issue_probereq(_adapter *padapter, NDIS_802_11_SSID *pssid, u8 blnbc)
15244 +int _issue_probereq(_adapter *padapter, NDIS_802_11_SSID *pssid, u8 *da, int wait_ack)
15245 {
15246 + int ret = _FAIL;
15247 struct xmit_frame *pmgntframe;
15248 struct pkt_attrib *pattrib;
15249 unsigned char *pframe;
15250 @@ -6108,11 +7090,11 @@ void issue_probereq(_adapter *padapter,
15251 int bssrate_len = 0;
15252 u8 bc_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
15253
15254 - RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("+issue_probereq\n"));
15255 + RT_TRACE(_module_rtl871x_mlme_c_,_drv_notice_,("+issue_probereq\n"));
15256
15257 if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
15258 {
15259 - return;
15260 + goto exit;
15261 }
15262
15263 //update attribute
15264 @@ -6130,11 +7112,11 @@ void issue_probereq(_adapter *padapter,
15265 fctrl = &(pwlanhdr->frame_ctl);
15266 *(fctrl) = 0;
15267
15268 - if ( 0 == blnbc )
15269 + if (da)
15270 {
15271 // unicast probe request frame
15272 - _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
15273 - _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
15274 + _rtw_memcpy(pwlanhdr->addr1, da, ETH_ALEN);
15275 + _rtw_memcpy(pwlanhdr->addr3, da, ETH_ALEN);
15276 }
15277 else
15278 {
15279 @@ -6191,11 +7173,64 @@ void issue_probereq(_adapter *padapter,
15280
15281 pattrib->last_txcmdsz = pattrib->pktlen;
15282
15283 - RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("issuing probe_req, tx_len=%d\n", pattrib->last_txcmdsz));
15284 + RT_TRACE(_module_rtl871x_mlme_c_,_drv_notice_,("issuing probe_req, tx_len=%d\n", pattrib->last_txcmdsz));
15285
15286 - dump_mgntframe(padapter, pmgntframe);
15287 + if (wait_ack) {
15288 + ret = dump_mgntframe_and_wait_ack(padapter, pmgntframe);
15289 + } else {
15290 + dump_mgntframe(padapter, pmgntframe);
15291 + ret = _SUCCESS;
15292 + }
15293
15294 - return;
15295 +exit:
15296 + return ret;
15297 +}
15298 +
15299 +inline void issue_probereq(_adapter *padapter, NDIS_802_11_SSID *pssid, u8 *da)
15300 +{
15301 + _issue_probereq(padapter, pssid, da, _FALSE);
15302 +}
15303 +
15304 +int issue_probereq_ex(_adapter *padapter, NDIS_802_11_SSID *pssid, u8 *da,
15305 + int try_cnt, int wait_ms)
15306 +{
15307 + int ret;
15308 + int i = 0;
15309 + u32 start = rtw_get_current_time();
15310 +
15311 + do
15312 + {
15313 + ret = _issue_probereq(padapter, pssid, da, wait_ms>0?_TRUE:_FALSE);
15314 +
15315 + i++;
15316 +
15317 + if (padapter->bDriverStopped || padapter->bSurpriseRemoved)
15318 + break;
15319 +
15320 + if(i < try_cnt && wait_ms > 0 && ret==_FAIL)
15321 + rtw_msleep_os(wait_ms);
15322 +
15323 + }while((i<try_cnt) && ((ret==_FAIL)||(wait_ms==0)));
15324 +
15325 + if (ret != _FAIL) {
15326 + ret = _SUCCESS;
15327 + #ifndef DBG_XMIT_ACK
15328 + goto exit;
15329 + #endif
15330 + }
15331 +
15332 + if (try_cnt && wait_ms) {
15333 + if (da)
15334 + DBG_871X(FUNC_ADPT_FMT" to "MAC_FMT", ch:%u%s, %d/%d in %u ms\n",
15335 + FUNC_ADPT_ARG(padapter), MAC_ARG(da), rtw_get_oper_ch(padapter),
15336 + ret==_SUCCESS?", acked":"", i, try_cnt, rtw_get_passing_time_ms(start));
15337 + else
15338 + DBG_871X(FUNC_ADPT_FMT", ch:%u%s, %d/%d in %u ms\n",
15339 + FUNC_ADPT_ARG(padapter), rtw_get_oper_ch(padapter),
15340 + ret==_SUCCESS?", acked":"", i, try_cnt, rtw_get_passing_time_ms(start));
15341 + }
15342 +exit:
15343 + return ret;
15344 }
15345
15346 // if psta == NULL, indiate we are station(client) now...
15347 @@ -6211,16 +7246,7 @@ void issue_auth(_adapter *padapter, stru
15348 int use_shared_key = 0;
15349 struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
15350 struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
15351 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
15352 -
15353 -/*
15354 - if( (psta == NULL) && (pmlmeinfo->auth_seq != 3) ) {
15355 - // Because of AP's not receiving deauth before
15356 - // AP may: 1)not response auth or 2)deauth us after link is complete
15357 - // issue deauth before issuing auth to deal with the situation
15358 - issue_deauth(padapter, (&(pmlmeinfo->network))->MacAddress, WLAN_REASON_DEAUTH_LEAVING);
15359 - }
15360 -*/
15361 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
15362
15363 if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
15364 {
15365 @@ -6298,12 +7324,12 @@ void issue_auth(_adapter *padapter, stru
15366 val16 = cpu_to_le16(val16);
15367 use_shared_key = 1;
15368 }
15369 - //DBG_8192C("%s auth_algo= %s auth_seq=%d\n",__FUNCTION__,(pmlmeinfo->auth_algo==0)?"OPEN":"SHARED",pmlmeinfo->auth_seq);
15370 + //DBG_871X("%s auth_algo= %s auth_seq=%d\n",__FUNCTION__,(pmlmeinfo->auth_algo==0)?"OPEN":"SHARED",pmlmeinfo->auth_seq);
15371
15372 //setting IV for auth seq #3
15373 if ((pmlmeinfo->auth_seq == 3) && (pmlmeinfo->state & WIFI_FW_AUTH_STATE) && (use_shared_key==1))
15374 {
15375 - //DBG_8192C("==> iv(%d),key_index(%d)\n",pmlmeinfo->iv,pmlmeinfo->key_index);
15376 + //DBG_871X("==> iv(%d),key_index(%d)\n",pmlmeinfo->iv,pmlmeinfo->key_index);
15377 val32 = ((pmlmeinfo->iv++) | (pmlmeinfo->key_index << 30));
15378 val32 = cpu_to_le32(val32);
15379 pframe = rtw_set_fixed_ie(pframe, 4, (unsigned char *)&val32, &(pattrib->pktlen));
15380 @@ -6373,7 +7399,6 @@ void issue_asocrsp(_adapter *padapter, u
15381 #ifdef CONFIG_WFD
15382 u32 wfdielen = 0;
15383 #endif //CONFIG_WFD
15384 -
15385 #endif //CONFIG_P2P
15386
15387 DBG_871X("%s\n", __FUNCTION__);
15388 @@ -6503,21 +7528,30 @@ void issue_asocrsp(_adapter *padapter, u
15389 }
15390
15391 #ifdef CONFIG_P2P
15392 - if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO) && (pstat->is_p2p_device == _TRUE))
15393 + if( padapter->wdinfo.driver_interface == DRIVER_WEXT )
15394 {
15395 - u32 len;
15396 + if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO) && (pstat->is_p2p_device == _TRUE))
15397 + {
15398 + u32 len;
15399
15400 - len = build_assoc_resp_p2p_ie(pwdinfo, pframe, pstat->p2p_status_code);
15401 + len = build_assoc_resp_p2p_ie(pwdinfo, pframe, pstat->p2p_status_code);
15402
15403 - pframe += len;
15404 - pattrib->pktlen += len;
15405 + pframe += len;
15406 + pattrib->pktlen += len;
15407 + }
15408 }
15409 #ifdef CONFIG_WFD
15410 - wfdielen = build_assoc_resp_wfd_ie(pwdinfo, pframe);
15411 - pframe += wfdielen;
15412 - pattrib->pktlen += wfdielen;
15413 + if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO)
15414 +#ifdef CONFIG_IOCTL_CFG80211
15415 + && (_TRUE == pwdinfo->wfd_info->wfd_enable)
15416 +#endif //CONFIG_IOCTL_CFG80211
15417 + )
15418 + {
15419 + wfdielen = build_assoc_resp_wfd_ie(pwdinfo, pframe);
15420 + pframe += wfdielen;
15421 + pattrib->pktlen += wfdielen;
15422 + }
15423 #endif //CONFIG_WFD
15424 -
15425 #endif //CONFIG_P2P
15426
15427 pattrib->last_txcmdsz = pattrib->pktlen;
15428 @@ -6529,6 +7563,7 @@ void issue_asocrsp(_adapter *padapter, u
15429
15430 void issue_assocreq(_adapter *padapter)
15431 {
15432 + int ret = _FAIL;
15433 struct xmit_frame *pmgntframe;
15434 struct pkt_attrib *pattrib;
15435 unsigned char *pframe, *p;
15436 @@ -6544,24 +7579,24 @@ void issue_assocreq(_adapter *padapter)
15437 struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
15438 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
15439 int bssrate_len = 0, sta_bssrate_len = 0;
15440 + u8 cbw40_enable = 0;
15441 #ifdef CONFIG_P2P
15442 struct wifidirect_info *pwdinfo = &(padapter->wdinfo);
15443 u8 p2pie[ 255 ] = { 0x00 };
15444 - u16 p2pielen = 0;
15445 + u16 p2pielen = 0;
15446 #ifdef CONFIG_WFD
15447 u32 wfdielen = 0;
15448 #endif //CONFIG_WFD
15449 -
15450 #endif //CONFIG_P2P
15451
15452 #ifdef CONFIG_DFS
15453 u16 cap;
15454 + u8 pow_cap_ele[2] = { 0x00 };
15455 + u8 sup_ch[ 30 * 2 ] = {0x00 }, sup_ch_idx = 0, idx_5g = 2; //For supported channel
15456 #endif //CONFIG_DFS
15457
15458 if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
15459 - {
15460 - return;
15461 - }
15462 + goto exit;
15463
15464 //update attribute
15465 pattrib = &pmgntframe->attrib;
15466 @@ -6590,7 +7625,8 @@ void issue_assocreq(_adapter *padapter)
15467
15468 #ifdef CONFIG_DFS
15469 _rtw_memcpy(&cap, rtw_get_capability_from_ie(pmlmeinfo->network.IEs), 2);
15470 - cap |= BIT(8);
15471 + if(pmlmeext->cur_channel > 14)
15472 + cap |= BIT(8); //Spectrum Mgmt. Enabled
15473 _rtw_memcpy(pframe, &cap, 2);
15474 #else
15475 _rtw_memcpy(pframe, rtw_get_capability_from_ie(pmlmeinfo->network.IEs), 2);
15476 @@ -6615,6 +7651,12 @@ void issue_assocreq(_adapter *padapter)
15477 get_rate_set(padapter, sta_bssrate, &sta_bssrate_len);
15478 //DBG_871X("sta_bssrate_len=%d\n", sta_bssrate_len);
15479
15480 + if(pmlmeext->cur_channel == 14)// for JAPAN, channel 14 can only uses B Mode(CCK)
15481 + {
15482 + sta_bssrate_len = 4;
15483 + }
15484 +
15485 +
15486 //for (i = 0; i < sta_bssrate_len; i++) {
15487 // DBG_871X("sta_bssrate[%d]=%02X\n", i, sta_bssrate[i]);
15488 //}
15489 @@ -6668,6 +7710,13 @@ void issue_assocreq(_adapter *padapter)
15490 #endif
15491 #endif // Check if the AP's supported rates are also supported by STA.
15492
15493 + if (bssrate_len == 0) {
15494 + rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
15495 + rtw_free_xmitframe(pxmitpriv, pmgntframe);
15496 + goto exit; //don't connect to AP if no joint supported rate
15497 + }
15498 +
15499 +
15500 if (bssrate_len > 8)
15501 {
15502 pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , 8, bssrate, &(pattrib->pktlen));
15503 @@ -6678,6 +7727,32 @@ void issue_assocreq(_adapter *padapter)
15504 pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , bssrate_len , bssrate, &(pattrib->pktlen));
15505 }
15506
15507 +#ifdef CONFIG_DFS
15508 + if(pmlmeext->cur_channel > 14)
15509 + {
15510 + pow_cap_ele[0] = 13; // Minimum transmit power capability
15511 + pow_cap_ele[1] = 21; // Maximum transmit power capability
15512 + pframe = rtw_set_ie(pframe, _POW_CAP_IE_, 2, pow_cap_ele, &(pattrib->pktlen));
15513 +
15514 + //supported channels
15515 + do{
15516 + if( pmlmeext->channel_set[sup_ch_idx].ChannelNum <= 14 )
15517 + {
15518 + sup_ch[0] = 1; //First channel number
15519 + sup_ch[1] = pmlmeext->channel_set[sup_ch_idx].ChannelNum; //Number of channel
15520 + }
15521 + else
15522 + {
15523 + sup_ch[idx_5g++] = pmlmeext->channel_set[sup_ch_idx].ChannelNum;
15524 + sup_ch[idx_5g++] = 1;
15525 + }
15526 + sup_ch_idx++;
15527 + }
15528 + while( pmlmeext->channel_set[sup_ch_idx].ChannelNum != 0 );
15529 + pframe = rtw_set_ie(pframe, _SUPPORTED_CH_IE_, idx_5g, sup_ch, &(pattrib->pktlen));
15530 + }
15531 +#endif //CONFIG_DFS
15532 +
15533 //RSN
15534 p = rtw_get_ie((pmlmeinfo->network.IEs + sizeof(NDIS_802_11_FIXED_IEs)), _RSN_IE_2_, &ie_len, (pmlmeinfo->network.IELength - sizeof(NDIS_802_11_FIXED_IEs)));
15535 if (p != NULL)
15536 @@ -6695,55 +7770,79 @@ void issue_assocreq(_adapter *padapter)
15537 _rtw_memcpy(&(pmlmeinfo->HT_caps), (p + 2), sizeof(struct HT_caps_element));
15538
15539 //to disable 40M Hz support while gd_bw_40MHz_en = 0
15540 - if (pregpriv->cbw40_enable == 0)
15541 + if( pmlmeext->cur_channel > 14)
15542 + {
15543 + if(pregpriv->cbw40_enable & BIT(1) )
15544 + cbw40_enable=1;
15545 + }
15546 + else
15547 + if(pregpriv->cbw40_enable & BIT(0) )
15548 + cbw40_enable=1;
15549 +
15550 + if (cbw40_enable == 0)
15551 {
15552 - pmlmeinfo->HT_caps.HT_cap_element.HT_caps_info &= (~(BIT(6) | BIT(1)));
15553 + pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info &= (~(BIT(6) | BIT(1)));
15554 }
15555 else
15556 {
15557 - pmlmeinfo->HT_caps.HT_cap_element.HT_caps_info |= BIT(1);
15558 + pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= BIT(1);
15559 }
15560
15561 //todo: disable SM power save mode
15562 - pmlmeinfo->HT_caps.HT_cap_element.HT_caps_info |= 0x000c;
15563 + pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= 0x000c;
15564
15565 - padapter->HalFunc.GetHwRegHandler(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
15566 + rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
15567 //switch (pregpriv->rf_config)
15568 switch(rf_type)
15569 {
15570 case RF_1T1R:
15571
15572 if(pregpriv->rx_stbc)
15573 - pmlmeinfo->HT_caps.HT_cap_element.HT_caps_info |= cpu_to_le16(0x0100);//RX STBC One spatial stream
15574 + pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= cpu_to_le16(0x0100);//RX STBC One spatial stream
15575
15576 - _rtw_memcpy(pmlmeinfo->HT_caps.HT_cap_element.MCS_rate, MCS_rate_1R, 16);
15577 + _rtw_memcpy(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_rate_1R, 16);
15578 break;
15579
15580 case RF_2T2R:
15581 case RF_1T2R:
15582 default:
15583 -
15584 +
15585 +
15586 + if(pregpriv->special_rf_path)
15587 + {
15588 + if(pregpriv->rx_stbc)
15589 + pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= cpu_to_le16(0x0100);//RX STBC One spatial stream
15590 + _rtw_memcpy(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_rate_1R, 16);
15591 + break;
15592 + }
15593 +
15594 if((pregpriv->rx_stbc == 0x3) ||//enable for 2.4/5 GHz
15595 ((pmlmeext->cur_wireless_mode & WIRELESS_11_24N) && (pregpriv->rx_stbc == 0x1)) || //enable for 2.4GHz
15596 - ((pmlmeext->cur_wireless_mode & WIRELESS_11_5N) && (pregpriv->rx_stbc == 0x2))) //enable for 5GHz
15597 + ((pmlmeext->cur_wireless_mode & WIRELESS_11_5N) && (pregpriv->rx_stbc == 0x2)) || //enable for 5GHz
15598 + (pregpriv->wifi_spec==1))
15599 {
15600 DBG_871X("declare supporting RX STBC\n");
15601 - pmlmeinfo->HT_caps.HT_cap_element.HT_caps_info |= cpu_to_le16(0x0200);//RX STBC two spatial stream
15602 + pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= cpu_to_le16(0x0200);//RX STBC two spatial stream
15603 }
15604 -
15605 - _rtw_memcpy(pmlmeinfo->HT_caps.HT_cap_element.MCS_rate, MCS_rate_2R, 16);
15606 + #ifdef CONFIG_DISABLE_MCS13TO15
15607 + if(pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40 && (pregpriv->wifi_spec!=1))
15608 + _rtw_memcpy(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_rate_2R_MCS13TO15_OFF, 16);
15609 + else
15610 + _rtw_memcpy(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_rate_2R, 16);
15611 + #else //CONFIG_DISABLE_MCS13TO15
15612 + _rtw_memcpy(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_rate_2R, 16);
15613 + #endif //CONFIG_DISABLE_MCS13TO15
15614 break;
15615 -
15616 }
15617 - #ifdef RTL8192C_RECONFIG_TO_1T1R
15618 +#ifdef RTL8192C_RECONFIG_TO_1T1R
15619 {
15620 - //if(pregpriv->rx_stbc)
15621 - //pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= cpu_to_le16(0x0100);//RX STBC One spatial stream
15622 + if(pregpriv->rx_stbc)
15623 + pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= cpu_to_le16(0x0100);//RX STBC One spatial stream
15624
15625 _rtw_memcpy(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_rate_1R, 16);
15626 }
15627 - #endif
15628 - pmlmeinfo->HT_caps.HT_cap_element.HT_caps_info = cpu_to_le16(pmlmeinfo->HT_caps.HT_cap_element.HT_caps_info);
15629 +#endif
15630 + pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info = cpu_to_le16(pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info);
15631 pframe = rtw_set_ie(pframe, _HT_CAPABILITY_IE_, ie_len , (u8 *)(&(pmlmeinfo->HT_caps)), &(pattrib->pktlen));
15632
15633 }
15634 @@ -6758,17 +7857,19 @@ void issue_assocreq(_adapter *padapter)
15635 switch (pIE->ElementID)
15636 {
15637 case _VENDOR_SPECIFIC_IE_:
15638 - if ((_rtw_memcmp(pIE->data, WPA_OUI, 4)) ||
15639 + if ((_rtw_memcmp(pIE->data, RTW_WPA_OUI, 4)) ||
15640 (_rtw_memcmp(pIE->data, WMM_OUI, 4)) ||
15641 (_rtw_memcmp(pIE->data, WPS_OUI, 4)))
15642 {
15643 - //Commented by Kurt 20110629
15644 - //In some older APs, WPS handshake
15645 - //would be fail if we append vender extensions informations to AP
15646 - if(_rtw_memcmp(pIE->data, WPS_OUI, 4)){
15647 - pIE->Length=14;
15648 + if(!padapter->registrypriv.wifi_spec)
15649 + {
15650 + //Commented by Kurt 20110629
15651 + //In some older APs, WPS handshake
15652 + //would be fail if we append vender extensions informations to AP
15653 + if(_rtw_memcmp(pIE->data, WPS_OUI, 4)){
15654 + pIE->Length=14;
15655 + }
15656 }
15657 -
15658 pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, pIE->Length, pIE->data, &(pattrib->pktlen));
15659 }
15660 break;
15661 @@ -6788,7 +7889,7 @@ void issue_assocreq(_adapter *padapter)
15662 #ifdef CONFIG_P2P
15663
15664 #ifdef CONFIG_IOCTL_CFG80211
15665 - if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled)
15666 + if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled && pwdinfo->driver_interface == DRIVER_CFG80211 )
15667 {
15668 if(pmlmepriv->p2p_assoc_req_ie && pmlmepriv->p2p_assoc_req_ie_len>0)
15669 {
15670 @@ -6829,12 +7930,13 @@ void issue_assocreq(_adapter *padapter)
15671
15672 // Value:
15673 // Device Capability Bitmap, 1 byte
15674 - // Be able to participate in additional P2P Groups and
15675 - // support the P2P Invitation Procedure
15676 - p2pie[ p2pielen++ ] = P2P_DEVCAP_INVITATION_PROC;
15677 -
15678 + p2pie[ p2pielen++ ] = DMP_P2P_DEVCAP_SUPPORT;
15679 +
15680 // Group Capability Bitmap, 1 byte
15681 - p2pie[ p2pielen++ ] = 0x00;
15682 + if ( pwdinfo->persistent_supported )
15683 + p2pie[ p2pielen++ ] = P2P_GRPCAP_PERSISTENT_GROUP | DMP_P2P_GRPCAP_SUPPORT;
15684 + else
15685 + p2pie[ p2pielen++ ] = DMP_P2P_GRPCAP_SUPPORT;
15686
15687 // Extended Listen Timing
15688 // Type:
15689 @@ -6884,7 +7986,7 @@ void issue_assocreq(_adapter *padapter)
15690
15691 // Primary Device Type
15692 // Category ID
15693 - *(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_CID_RTK_WIDI );
15694 + *(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_CID_MULIT_MEDIA );
15695 p2pielen += 2;
15696
15697 // OUI
15698 @@ -6892,7 +7994,7 @@ void issue_assocreq(_adapter *padapter)
15699 p2pielen += 4;
15700
15701 // Sub Category ID
15702 - *(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_SCID_RTK_DMP );
15703 + *(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_SCID_MEDIA_SERVER );
15704 p2pielen += 2;
15705
15706 // Number of Secondary Device Types
15707 @@ -6929,45 +8031,76 @@ void issue_assocreq(_adapter *padapter)
15708 p2pielen += ETH_ALEN;
15709
15710 pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *) p2pie, &pattrib->pktlen );
15711 -
15712 -#ifdef CONFIG_WFD
15713 - wfdielen = build_assoc_req_wfd_ie(pwdinfo, pframe);
15714 - pframe += wfdielen;
15715 - pattrib->pktlen += wfdielen;
15716 -#endif //CONFIG_WFD
15717 - }
15718 - }
15719
15720 #ifdef CONFIG_WFD
15721 - wfdielen = build_assoc_req_wfd_ie(pwdinfo, pframe);
15722 - pframe += wfdielen;
15723 - pattrib->pktlen += wfdielen;
15724 + //wfdielen = build_assoc_req_wfd_ie(pwdinfo, pframe);
15725 + //pframe += wfdielen;
15726 + //pattrib->pktlen += wfdielen;
15727 #endif //CONFIG_WFD
15728 + }
15729 + }
15730
15731 #endif //CONFIG_P2P
15732
15733 +#ifdef CONFIG_WFD
15734 +#ifdef CONFIG_IOCTL_CFG80211
15735 + if ( _TRUE == pwdinfo->wfd_info->wfd_enable )
15736 +#endif //CONFIG_IOCTL_CFG80211
15737 + {
15738 + wfdielen = build_assoc_req_wfd_ie(pwdinfo, pframe);
15739 + pframe += wfdielen;
15740 + pattrib->pktlen += wfdielen;
15741 + }
15742 +#ifdef CONFIG_IOCTL_CFG80211
15743 + else if (pmlmepriv->wfd_assoc_req_ie != NULL && pmlmepriv->wfd_assoc_req_ie_len>0)
15744 + {
15745 + //WFD IE
15746 + _rtw_memcpy(pframe, pmlmepriv->wfd_assoc_req_ie, pmlmepriv->wfd_assoc_req_ie_len);
15747 + pattrib->pktlen += pmlmepriv->wfd_assoc_req_ie_len;
15748 + pframe += pmlmepriv->wfd_assoc_req_ie_len;
15749 + }
15750 +#endif //CONFIG_IOCTL_CFG80211
15751 +#endif //CONFIG_WFD
15752 +
15753 pattrib->last_txcmdsz = pattrib->pktlen;
15754 dump_mgntframe(padapter, pmgntframe);
15755
15756 + ret = _SUCCESS;
15757 +
15758 +exit:
15759 + if (ret == _SUCCESS)
15760 + rtw_buf_update(&pmlmepriv->assoc_req, &pmlmepriv->assoc_req_len, (u8 *)pwlanhdr, pattrib->pktlen);
15761 + else
15762 + rtw_buf_free(&pmlmepriv->assoc_req, &pmlmepriv->assoc_req_len);
15763 +
15764 return;
15765 }
15766
15767 -void issue_nulldata(_adapter *padapter, unsigned int power_mode)
15768 +//when wait_ack is ture, this function shoule be called at process context
15769 +static int _issue_nulldata(_adapter *padapter, unsigned char *da, unsigned int power_mode, int wait_ack)
15770 {
15771 + int ret = _FAIL;
15772 struct xmit_frame *pmgntframe;
15773 struct pkt_attrib *pattrib;
15774 unsigned char *pframe;
15775 struct rtw_ieee80211_hdr *pwlanhdr;
15776 unsigned short *fctrl;
15777 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
15778 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
15779 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
15780 + struct xmit_priv *pxmitpriv;
15781 + struct mlme_ext_priv *pmlmeext;
15782 + struct mlme_ext_info *pmlmeinfo;
15783
15784 //DBG_871X("%s:%d\n", __FUNCTION__, power_mode);
15785
15786 + if(!padapter)
15787 + goto exit;
15788 +
15789 + pxmitpriv = &(padapter->xmitpriv);
15790 + pmlmeext = &(padapter->mlmeextpriv);
15791 + pmlmeinfo = &(pmlmeext->mlmext_info);
15792 +
15793 if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
15794 {
15795 - return;
15796 + goto exit;
15797 }
15798
15799 //update attribute
15800 @@ -6997,7 +8130,7 @@ void issue_nulldata(_adapter *padapter,
15801 SetPwrMgt(fctrl);
15802 }
15803
15804 - _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
15805 + _rtw_memcpy(pwlanhdr->addr1, da, ETH_ALEN);
15806 _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
15807 _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
15808
15809 @@ -7009,14 +8142,75 @@ void issue_nulldata(_adapter *padapter,
15810 pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
15811
15812 pattrib->last_txcmdsz = pattrib->pktlen;
15813 - dump_mgntframe(padapter, pmgntframe);
15814
15815 - return;
15816 + if(wait_ack)
15817 + {
15818 + ret = dump_mgntframe_and_wait_ack(padapter, pmgntframe);
15819 + }
15820 + else
15821 + {
15822 + dump_mgntframe(padapter, pmgntframe);
15823 + ret = _SUCCESS;
15824 + }
15825 +
15826 +exit:
15827 + return ret;
15828 }
15829
15830
15831 -void issue_qos_nulldata(_adapter *padapter, unsigned char *da, u16 tid)
15832 +//when wait_ms >0 , this function shoule be called at process context
15833 +//da == NULL for station mode
15834 +int issue_nulldata(_adapter *padapter, unsigned char *da, unsigned int power_mode, int try_cnt, int wait_ms)
15835 +{
15836 + int ret;
15837 + int i = 0;
15838 + u32 start = rtw_get_current_time();
15839 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
15840 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
15841 +
15842 + /* da == NULL, assum it's null data for sta to ap*/
15843 + if (da == NULL)
15844 + da = get_my_bssid(&(pmlmeinfo->network));
15845 +
15846 + do
15847 + {
15848 + ret = _issue_nulldata(padapter, da, power_mode, wait_ms>0?_TRUE:_FALSE);
15849 +
15850 + i++;
15851 +
15852 + if (padapter->bDriverStopped || padapter->bSurpriseRemoved)
15853 + break;
15854 +
15855 + if(i < try_cnt && wait_ms > 0 && ret==_FAIL)
15856 + rtw_msleep_os(wait_ms);
15857 +
15858 + }while((i<try_cnt) && ((ret==_FAIL)||(wait_ms==0)));
15859 +
15860 + if (ret != _FAIL) {
15861 + ret = _SUCCESS;
15862 + #ifndef DBG_XMIT_ACK
15863 + goto exit;
15864 + #endif
15865 + }
15866 +
15867 + if (try_cnt && wait_ms) {
15868 + if (da)
15869 + DBG_871X(FUNC_ADPT_FMT" to "MAC_FMT", ch:%u%s, %d/%d in %u ms\n",
15870 + FUNC_ADPT_ARG(padapter), MAC_ARG(da), rtw_get_oper_ch(padapter),
15871 + ret==_SUCCESS?", acked":"", i, try_cnt, rtw_get_passing_time_ms(start));
15872 + else
15873 + DBG_871X(FUNC_ADPT_FMT", ch:%u%s, %d/%d in %u ms\n",
15874 + FUNC_ADPT_ARG(padapter), rtw_get_oper_ch(padapter),
15875 + ret==_SUCCESS?", acked":"", i, try_cnt, rtw_get_passing_time_ms(start));
15876 + }
15877 +exit:
15878 + return ret;
15879 +}
15880 +
15881 +//when wait_ack is ture, this function shoule be called at process context
15882 +static int _issue_qos_nulldata(_adapter *padapter, unsigned char *da, u16 tid, int wait_ack)
15883 {
15884 + int ret = _FAIL;
15885 struct xmit_frame *pmgntframe;
15886 struct pkt_attrib *pattrib;
15887 unsigned char *pframe;
15888 @@ -7030,7 +8224,7 @@ void issue_qos_nulldata(_adapter *padapt
15889
15890 if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
15891 {
15892 - return;
15893 + goto exit;
15894 }
15895
15896 //update attribute
15897 @@ -7083,230 +8277,104 @@ void issue_qos_nulldata(_adapter *padapt
15898 pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr_qos);
15899
15900 pattrib->last_txcmdsz = pattrib->pktlen;
15901 - dump_mgntframe(padapter, pmgntframe);
15902 -
15903 -}
15904 -
15905 -void issue_deauth(_adapter *padapter, unsigned char *da, unsigned short reason)
15906 -{
15907 - struct xmit_frame *pmgntframe;
15908 - struct pkt_attrib *pattrib;
15909 - unsigned char *pframe;
15910 - struct rtw_ieee80211_hdr *pwlanhdr;
15911 - unsigned short *fctrl;
15912 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
15913 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
15914 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
15915 -
15916 - DBG_871X("%s to "MAC_FMT"\n", __func__, MAC_ARG(da));
15917
15918 - if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
15919 - {
15920 - return;
15921 - }
15922 -
15923 - //update attribute
15924 - pattrib = &pmgntframe->attrib;
15925 - update_mgntframe_attrib(padapter, pattrib);
15926 - pattrib->retry_ctrl = _FALSE;
15927 -
15928 - _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
15929 -
15930 - pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
15931 - pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
15932 -
15933 - fctrl = &(pwlanhdr->frame_ctl);
15934 - *(fctrl) = 0;
15935 -
15936 - _rtw_memcpy(pwlanhdr->addr1, da, ETH_ALEN);
15937 - _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
15938 - _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
15939 -
15940 - SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
15941 - pmlmeext->mgnt_seq++;
15942 - SetFrameSubType(pframe, WIFI_DEAUTH);
15943 -
15944 - pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
15945 - pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
15946 -
15947 - reason = cpu_to_le16(reason);
15948 - pframe = rtw_set_fixed_ie(pframe, _RSON_CODE_ , (unsigned char *)&reason, &(pattrib->pktlen));
15949 -
15950 - pattrib->last_txcmdsz = pattrib->pktlen;
15951 -
15952 - dump_mgntframe(padapter, pmgntframe);
15953 -}
15954 -
15955 -void issue_action_BA(_adapter *padapter, unsigned char *raddr, unsigned char action, unsigned short status)
15956 -{
15957 - u8 category = RTW_WLAN_CATEGORY_BACK;
15958 - u16 start_seq;
15959 - u16 BA_para_set;
15960 - u16 reason_code;
15961 - u16 BA_timeout_value;
15962 - u16 BA_starting_seqctrl;
15963 - struct xmit_frame *pmgntframe;
15964 - struct pkt_attrib *pattrib;
15965 - u8 *pframe;
15966 - struct rtw_ieee80211_hdr *pwlanhdr;
15967 - u16 *fctrl;
15968 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
15969 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
15970 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
15971 - struct sta_info *psta;
15972 - struct sta_priv *pstapriv = &padapter->stapriv;
15973 - struct registry_priv *pregpriv = &padapter->registrypriv;
15974 -
15975 -
15976 - DBG_871X("%s, category=%d, action=%d, status=%d\n", __FUNCTION__, category, action, status);
15977 -
15978 - if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
15979 + if(wait_ack)
15980 {
15981 - return;
15982 + ret = dump_mgntframe_and_wait_ack(padapter, pmgntframe);
15983 + }
15984 + else
15985 + {
15986 + dump_mgntframe(padapter, pmgntframe);
15987 + ret = _SUCCESS;
15988 }
15989
15990 - //update attribute
15991 - pattrib = &pmgntframe->attrib;
15992 - update_mgntframe_attrib(padapter, pattrib);
15993 -
15994 - _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
15995 -
15996 - pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
15997 - pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
15998 -
15999 - fctrl = &(pwlanhdr->frame_ctl);
16000 - *(fctrl) = 0;
16001 -
16002 - //_rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
16003 - _rtw_memcpy(pwlanhdr->addr1, raddr, ETH_ALEN);
16004 - _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
16005 - _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
16006 -
16007 - SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
16008 - pmlmeext->mgnt_seq++;
16009 - SetFrameSubType(pframe, WIFI_ACTION);
16010 -
16011 - pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
16012 - pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
16013 -
16014 - pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
16015 - pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
16016 -
16017 - status = cpu_to_le16(status);
16018 -
16019 -
16020 - if (category == 3)
16021 - {
16022 - switch (action)
16023 - {
16024 - case 0: //ADDBA req
16025 - do {
16026 - pmlmeinfo->dialogToken++;
16027 - } while (pmlmeinfo->dialogToken == 0);
16028 - pframe = rtw_set_fixed_ie(pframe, 1, &(pmlmeinfo->dialogToken), &(pattrib->pktlen));
16029 -
16030 - BA_para_set = (0x1002 | ((status & 0xf) << 2)); //immediate ack & 64 buffer size
16031 - //sys_mib.BA_para_set = 0x0802; //immediate ack & 32 buffer size
16032 - BA_para_set = cpu_to_le16(BA_para_set);
16033 - pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&(BA_para_set)), &(pattrib->pktlen));
16034 -
16035 - //BA_timeout_value = 0xffff;//max: 65535 TUs(~ 65 ms)
16036 - BA_timeout_value = 5000;//~ 5ms
16037 - BA_timeout_value = cpu_to_le16(BA_timeout_value);
16038 - pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&(BA_timeout_value)), &(pattrib->pktlen));
16039 +exit:
16040 + return ret;
16041 +}
16042
16043 - //if ((psta = rtw_get_stainfo(pstapriv, pmlmeinfo->network.MacAddress)) != NULL)
16044 - if ((psta = rtw_get_stainfo(pstapriv, raddr)) != NULL)
16045 - {
16046 - start_seq = (psta->sta_xmitpriv.txseq_tid[status & 0x07]&0xfff) + 1;
16047 +//when wait_ms >0 , this function shoule be called at process context
16048 +//da == NULL for station mode
16049 +int issue_qos_nulldata(_adapter *padapter, unsigned char *da, u16 tid, int try_cnt, int wait_ms)
16050 +{
16051 + int ret;
16052 + int i = 0;
16053 + u32 start = rtw_get_current_time();
16054 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
16055 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
16056
16057 - DBG_871X("BA_starting_seqctrl = %d for TID=%d\n", start_seq, status & 0x07);
16058 -
16059 - psta->BA_starting_seqctrl[status & 0x07] = start_seq;
16060 -
16061 - BA_starting_seqctrl = start_seq << 4;
16062 - }
16063 -
16064 - BA_starting_seqctrl = cpu_to_le16(BA_starting_seqctrl);
16065 - pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&(BA_starting_seqctrl)), &(pattrib->pktlen));
16066 - break;
16067 + /* da == NULL, assum it's null data for sta to ap*/
16068 + if (da == NULL)
16069 + da = get_my_bssid(&(pmlmeinfo->network));
16070 +
16071 + do
16072 + {
16073 + ret = _issue_qos_nulldata(padapter, da, tid, wait_ms>0?_TRUE:_FALSE);
16074
16075 - case 1: //ADDBA rsp
16076 - pframe = rtw_set_fixed_ie(pframe, 1, &(pmlmeinfo->ADDBA_req.dialog_token), &(pattrib->pktlen));
16077 - pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&status), &(pattrib->pktlen));
16078 + i++;
16079
16080 - //BA_para_set = cpu_to_le16((le16_to_cpu(pmlmeinfo->ADDBA_req.BA_para_set) & 0x3f) | 0x1000); //64 buffer size
16081 - BA_para_set = ((le16_to_cpu(pmlmeinfo->ADDBA_req.BA_para_set) & 0x3f) | 0x1000); //64 buffer size
16082 + if (padapter->bDriverStopped || padapter->bSurpriseRemoved)
16083 + break;
16084
16085 - if(pregpriv->ampdu_amsdu==0)//disabled
16086 - BA_para_set = cpu_to_le16(BA_para_set & ~BIT(0));
16087 - else if(pregpriv->ampdu_amsdu==1)//enabled
16088 - BA_para_set = cpu_to_le16(BA_para_set | BIT(0));
16089 - else //auto
16090 - BA_para_set = cpu_to_le16(BA_para_set);
16091 -
16092 - pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&(BA_para_set)), &(pattrib->pktlen));
16093 - pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&(pmlmeinfo->ADDBA_req.BA_timeout_value)), &(pattrib->pktlen));
16094 - break;
16095 - case 2://DELBA
16096 - BA_para_set = (status & 0x1F) << 3;
16097 - BA_para_set = cpu_to_le16(BA_para_set);
16098 - pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&(BA_para_set)), &(pattrib->pktlen));
16099 + if(i < try_cnt && wait_ms > 0 && ret==_FAIL)
16100 + rtw_msleep_os(wait_ms);
16101
16102 - reason_code = 37;//Requested from peer STA as it does not want to use the mechanism
16103 - reason_code = cpu_to_le16(reason_code);
16104 - pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&(reason_code)), &(pattrib->pktlen));
16105 - break;
16106 - default:
16107 - break;
16108 - }
16109 - }
16110 + }while((i<try_cnt) && ((ret==_FAIL)||(wait_ms==0)));
16111
16112 - pattrib->last_txcmdsz = pattrib->pktlen;
16113 + if (ret != _FAIL) {
16114 + ret = _SUCCESS;
16115 + #ifndef DBG_XMIT_ACK
16116 + goto exit;
16117 + #endif
16118 + }
16119
16120 - dump_mgntframe(padapter, pmgntframe);
16121 + if (try_cnt && wait_ms) {
16122 + if (da)
16123 + DBG_871X(FUNC_ADPT_FMT" to "MAC_FMT", ch:%u%s, %d/%d in %u ms\n",
16124 + FUNC_ADPT_ARG(padapter), MAC_ARG(da), rtw_get_oper_ch(padapter),
16125 + ret==_SUCCESS?", acked":"", i, try_cnt, rtw_get_passing_time_ms(start));
16126 + else
16127 + DBG_871X(FUNC_ADPT_FMT", ch:%u%s, %d/%d in %u ms\n",
16128 + FUNC_ADPT_ARG(padapter), rtw_get_oper_ch(padapter),
16129 + ret==_SUCCESS?", acked":"", i, try_cnt, rtw_get_passing_time_ms(start));
16130 + }
16131 +exit:
16132 + return ret;
16133 }
16134
16135 -static void issue_action_BSSCoexistPacket(_adapter *padapter)
16136 -{
16137 - _irqL irqL;
16138 - _list *plist, *phead;
16139 - unsigned char category, action;
16140 +static int _issue_deauth(_adapter *padapter, unsigned char *da, unsigned short reason, u8 wait_ack)
16141 +{
16142 struct xmit_frame *pmgntframe;
16143 struct pkt_attrib *pattrib;
16144 - unsigned char *pframe;
16145 + unsigned char *pframe;
16146 struct rtw_ieee80211_hdr *pwlanhdr;
16147 - unsigned short *fctrl;
16148 - struct wlan_network *pnetwork = NULL;
16149 + unsigned short *fctrl;
16150 struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
16151 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
16152 struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
16153 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
16154 - _queue *queue = &(pmlmepriv->scanned_queue);
16155 - u8 InfoContent[16] = {0};
16156 - u8 ICS[8][15];
16157 -
16158 - if((pmlmepriv->num_FortyMHzIntolerant==0) || (pmlmepriv->num_sta_no_ht==0))
16159 - return;
16160 -
16161 - if(_TRUE == pmlmeinfo->bwmode_updated)
16162 - return;
16163 + int ret = _FAIL;
16164 +#ifdef CONFIG_P2P
16165 + struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
16166 +#endif //CONFIG_P2P
16167
16168 + //DBG_871X("%s to "MAC_FMT"\n", __func__, MAC_ARG(da));
16169
16170 - DBG_871X("%s\n", __FUNCTION__);
16171 -
16172 -
16173 - category = RTW_WLAN_CATEGORY_PUBLIC;
16174 - action = ACT_PUBLIC_BSSCOEXIST;
16175 +#ifdef CONFIG_P2P
16176 + if ( !( rtw_p2p_chk_state( pwdinfo, P2P_STATE_NONE ) ) && ( pwdinfo->rx_invitereq_info.scan_op_ch_only ) )
16177 + {
16178 + _cancel_timer_ex( &pwdinfo->reset_ch_sitesurvey );
16179 + _set_timer( &pwdinfo->reset_ch_sitesurvey, 10 );
16180 + }
16181 +#endif //CONFIG_P2P
16182
16183 if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
16184 {
16185 - return;
16186 + goto exit;
16187 }
16188
16189 //update attribute
16190 pattrib = &pmgntframe->attrib;
16191 update_mgntframe_attrib(padapter, pattrib);
16192 + pattrib->retry_ctrl = _FALSE;
16193
16194 _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
16195
16196 @@ -7316,4715 +8384,4970 @@ static void issue_action_BSSCoexistPacke
16197 fctrl = &(pwlanhdr->frame_ctl);
16198 *(fctrl) = 0;
16199
16200 - _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
16201 + _rtw_memcpy(pwlanhdr->addr1, da, ETH_ALEN);
16202 _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
16203 _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
16204
16205 SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
16206 pmlmeext->mgnt_seq++;
16207 - SetFrameSubType(pframe, WIFI_ACTION);
16208 + SetFrameSubType(pframe, WIFI_DEAUTH);
16209
16210 pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
16211 pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
16212
16213 - pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
16214 - pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
16215 + reason = cpu_to_le16(reason);
16216 + pframe = rtw_set_fixed_ie(pframe, _RSON_CODE_ , (unsigned char *)&reason, &(pattrib->pktlen));
16217
16218 + pattrib->last_txcmdsz = pattrib->pktlen;
16219
16220 - //
16221 - if(pmlmepriv->num_FortyMHzIntolerant>0)
16222 - {
16223 - u8 iedata=0;
16224 -
16225 - iedata |= BIT(2);//20 MHz BSS Width Request
16226
16227 - pframe = rtw_set_ie(pframe, EID_BSSCoexistence, 1, &iedata, &(pattrib->pktlen));
16228 -
16229 + if(wait_ack)
16230 + {
16231 + ret = dump_mgntframe_and_wait_ack(padapter, pmgntframe);
16232 + }
16233 + else
16234 + {
16235 + dump_mgntframe(padapter, pmgntframe);
16236 + ret = _SUCCESS;
16237 }
16238 -
16239 -
16240 - //
16241 - _rtw_memset(ICS, 0, sizeof(ICS));
16242 - if(pmlmepriv->num_sta_no_ht>0)
16243 - {
16244 - int i;
16245 -
16246 - _enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
16247
16248 - phead = get_list_head(queue);
16249 - plist = get_next(phead);
16250 -
16251 - while(1)
16252 - {
16253 - int len;
16254 - u8 *p;
16255 - WLAN_BSSID_EX *pbss_network;
16256 -
16257 - if (rtw_end_of_queue_search(phead,plist)== _TRUE)
16258 - break;
16259 +exit:
16260 + return ret;
16261 +}
16262
16263 - pnetwork = LIST_CONTAINOR(plist, struct wlan_network, list);
16264 -
16265 - plist = get_next(plist);
16266 +int issue_deauth(_adapter *padapter, unsigned char *da, unsigned short reason)
16267 +{
16268 + DBG_871X("%s to "MAC_FMT"\n", __func__, MAC_ARG(da));
16269 + return _issue_deauth(padapter, da, reason, _FALSE);
16270 +}
16271
16272 - pbss_network = (WLAN_BSSID_EX *)&pnetwork->network;
16273 +int issue_deauth_ex(_adapter *padapter, u8 *da, unsigned short reason, int try_cnt,
16274 + int wait_ms)
16275 +{
16276 + int ret;
16277 + int i = 0;
16278 + u32 start = rtw_get_current_time();
16279
16280 - p = rtw_get_ie(pbss_network->IEs + _FIXED_IE_LENGTH_, _HT_CAPABILITY_IE_, &len, pbss_network->IELength - _FIXED_IE_LENGTH_);
16281 - if((p==NULL) || (len==0))//non-HT
16282 - {
16283 - if((pbss_network->Configuration.DSConfig<=0) || (pbss_network->Configuration.DSConfig>14))
16284 - continue;
16285 -
16286 - ICS[0][pbss_network->Configuration.DSConfig]=1;
16287 -
16288 - if(ICS[0][0] == 0)
16289 - ICS[0][0] = 1;
16290 - }
16291 -
16292 - }
16293 + do
16294 + {
16295 + ret = _issue_deauth(padapter, da, reason, wait_ms>0?_TRUE:_FALSE);
16296
16297 - _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
16298 + i++;
16299
16300 + if (padapter->bDriverStopped || padapter->bSurpriseRemoved)
16301 + break;
16302
16303 - for(i= 0;i<8;i++)
16304 - {
16305 - if(ICS[i][0] == 1)
16306 - {
16307 - int j, k = 0;
16308 -
16309 - InfoContent[k] = i;
16310 - //SET_BSS_INTOLERANT_ELE_REG_CLASS(InfoContent,i);
16311 - k++;
16312 -
16313 - for(j=1;j<=14;j++)
16314 - {
16315 - if(ICS[i][j]==1)
16316 - {
16317 - if(k<16)
16318 - {
16319 - InfoContent[k] = j; //channel number
16320 - //SET_BSS_INTOLERANT_ELE_CHANNEL(InfoContent+k, j);
16321 - k++;
16322 - }
16323 - }
16324 - }
16325 + if(i < try_cnt && wait_ms > 0 && ret==_FAIL)
16326 + rtw_msleep_os(wait_ms);
16327
16328 - pframe = rtw_set_ie(pframe, EID_BSSIntolerantChlReport, k, InfoContent, &(pattrib->pktlen));
16329 -
16330 - }
16331 -
16332 - }
16333 -
16334 + }while((i<try_cnt) && ((ret==_FAIL)||(wait_ms==0)));
16335
16336 + if (ret != _FAIL) {
16337 + ret = _SUCCESS;
16338 + #ifndef DBG_XMIT_ACK
16339 + goto exit;
16340 + #endif
16341 }
16342 -
16343 -
16344 - pattrib->last_txcmdsz = pattrib->pktlen;
16345 -
16346 - dump_mgntframe(padapter, pmgntframe);
16347 -
16348 -}
16349 -
16350 -unsigned int send_delba(_adapter *padapter, u8 initiator, u8 *addr)
16351 -{
16352 - struct sta_priv *pstapriv = &padapter->stapriv;
16353 - struct sta_info *psta = NULL;
16354 - //struct recv_reorder_ctrl *preorder_ctrl;
16355 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
16356 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
16357 - u16 tid;
16358 -
16359 - if((pmlmeinfo->state&0x03) != WIFI_FW_AP_STATE)
16360 - if (!(pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS))
16361 - return _SUCCESS;
16362 -
16363 - psta = rtw_get_stainfo(pstapriv, addr);
16364 - if(psta==NULL)
16365 - return _SUCCESS;
16366
16367 - //DBG_8192C("%s:%s\n", __FUNCTION__, (initiator==0)?"RX_DIR":"TX_DIR");
16368 -
16369 - if(initiator==0) // recipient
16370 - {
16371 - for(tid = 0;tid<MAXTID;tid++)
16372 - {
16373 - if(psta->recvreorder_ctrl[tid].enable == _TRUE)
16374 - {
16375 - DBG_8192C("rx agg disable tid(%d)\n",tid);
16376 - issue_action_BA(padapter, addr, RTW_WLAN_ACTION_DELBA, (((tid <<1) |initiator)&0x1F));
16377 - psta->recvreorder_ctrl[tid].enable = _FALSE;
16378 - psta->recvreorder_ctrl[tid].indicate_seq = 0xffff;
16379 - #ifdef DBG_RX_SEQ
16380 - DBG_871X("DBG_RX_SEQ %s:%d indicate_seq:%u \n", __FUNCTION__, __LINE__,
16381 - psta->recvreorder_ctrl[tid].indicate_seq);
16382 - #endif
16383 - }
16384 - }
16385 - }
16386 - else if(initiator == 1)// originator
16387 - {
16388 - //DBG_8192C("tx agg_enable_bitmap(0x%08x)\n", psta->htpriv.agg_enable_bitmap);
16389 - for(tid = 0;tid<MAXTID;tid++)
16390 - {
16391 - if(psta->htpriv.agg_enable_bitmap & BIT(tid))
16392 - {
16393 - DBG_8192C("tx agg disable tid(%d)\n",tid);
16394 - issue_action_BA(padapter, addr, RTW_WLAN_ACTION_DELBA, (((tid <<1) |initiator)&0x1F) );
16395 - psta->htpriv.agg_enable_bitmap &= ~BIT(tid);
16396 - psta->htpriv.candidate_tid_bitmap &= ~BIT(tid);
16397 -
16398 - }
16399 - }
16400 - }
16401 -
16402 - return _SUCCESS;
16403 -
16404 + if (try_cnt && wait_ms) {
16405 + if (da)
16406 + DBG_871X(FUNC_ADPT_FMT" to "MAC_FMT", ch:%u%s, %d/%d in %u ms\n",
16407 + FUNC_ADPT_ARG(padapter), MAC_ARG(da), rtw_get_oper_ch(padapter),
16408 + ret==_SUCCESS?", acked":"", i, try_cnt, rtw_get_passing_time_ms(start));
16409 + else
16410 + DBG_871X(FUNC_ADPT_FMT", ch:%u%s, %d/%d in %u ms\n",
16411 + FUNC_ADPT_ARG(padapter), rtw_get_oper_ch(padapter),
16412 + ret==_SUCCESS?", acked":"", i, try_cnt, rtw_get_passing_time_ms(start));
16413 + }
16414 +exit:
16415 + return ret;
16416 }
16417
16418 -unsigned int send_beacon(_adapter *padapter)
16419 -{
16420 - u8 bxmitok = _FALSE;
16421 - int retry=0;
16422 +void issue_action_spct_ch_switch(_adapter *padapter, u8 *ra, u8 new_ch, u8 ch_offset)
16423 +{
16424 + _irqL irqL;
16425 + _list *plist, *phead;
16426 + struct xmit_frame *pmgntframe;
16427 + struct pkt_attrib *pattrib;
16428 + unsigned char *pframe;
16429 + struct rtw_ieee80211_hdr *pwlanhdr;
16430 + unsigned short *fctrl;
16431 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
16432 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
16433 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
16434 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
16435
16436 - //DBG_871X("%s\n", __FUNCTION__);
16437
16438 -#ifdef CONFIG_PCI_HCI
16439 + DBG_871X(FUNC_NDEV_FMT" ra="MAC_FMT", ch:%u, offset:%u\n",
16440 + FUNC_NDEV_ARG(padapter->pnetdev), MAC_ARG(ra), new_ch, ch_offset);
16441
16442 - issue_beacon(padapter);
16443 + if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
16444 + return;
16445
16446 - return _SUCCESS;
16447 + //update attribute
16448 + pattrib = &pmgntframe->attrib;
16449 + update_mgntframe_attrib(padapter, pattrib);
16450
16451 -#endif
16452 + _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
16453
16454 -#ifdef CONFIG_USB_HCI
16455 - do{
16456 + pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
16457 + pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
16458
16459 - issue_beacon(padapter);
16460 + fctrl = &(pwlanhdr->frame_ctl);
16461 + *(fctrl) = 0;
16462
16463 - padapter->HalFunc.GetHwRegHandler(padapter, HW_VAR_TX_BCN_DONE, (u8 *)(&bxmitok));
16464 + _rtw_memcpy(pwlanhdr->addr1, ra, ETH_ALEN); /* RA */
16465 + _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN); /* TA */
16466 + _rtw_memcpy(pwlanhdr->addr3, ra, ETH_ALEN); /* DA = RA */
16467
16468 - }while((_FALSE == bxmitok) &&((retry++)<100 ));
16469 + SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
16470 + pmlmeext->mgnt_seq++;
16471 + SetFrameSubType(pframe, WIFI_ACTION);
16472
16473 - if(retry == 100)
16474 - {
16475 - DBG_871X("send_beacon, fail!\n");
16476 - return _FAIL;
16477 - }
16478 - else
16479 + pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
16480 + pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
16481 +
16482 + /* category, action */
16483 {
16484 - return _SUCCESS;
16485 + u8 category, action;
16486 + category = RTW_WLAN_CATEGORY_SPECTRUM_MGMT;
16487 + action = RTW_WLAN_ACTION_SPCT_CHL_SWITCH;
16488 +
16489 + pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
16490 + pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
16491 }
16492 -#endif
16493 -
16494 -}
16495
16496 -/****************************************************************************
16497 + pframe = rtw_set_ie_ch_switch(pframe, &(pattrib->pktlen), 0, new_ch, 0);
16498 + pframe = rtw_set_ie_secondary_ch_offset(pframe, &(pattrib->pktlen),
16499 + hal_ch_offset_to_secondary_ch_offset(ch_offset));
16500
16501 -Following are some utitity fuctions for WiFi MLME
16502 + pattrib->last_txcmdsz = pattrib->pktlen;
16503
16504 -*****************************************************************************/
16505 + dump_mgntframe(padapter, pmgntframe);
16506
16507 -BOOLEAN IsLegal5GChannel(
16508 - IN PADAPTER Adapter,
16509 - IN u8 channel)
16510 -{
16511 -
16512 - int i=0;
16513 - u8 Channel_5G[45] = {36,38,40,42,44,46,48,50,52,54,56,58,
16514 - 60,62,64,100,102,104,106,108,110,112,114,116,118,120,122,
16515 - 124,126,128,130,132,134,136,138,140,149,151,153,155,157,159,
16516 - 161,163,165};
16517 - for(i=0;i<sizeof(Channel_5G);i++)
16518 - if(channel == Channel_5G[i])
16519 - return _TRUE;
16520 - return _FALSE;
16521 }
16522
16523 -void site_survey(_adapter *padapter)
16524 +#ifdef CONFIG_IEEE80211W
16525 +void issue_action_SA_Query(_adapter *padapter, unsigned char *raddr, unsigned char action, unsigned short tid)
16526 {
16527 - unsigned char survey_channel = 0, val8;
16528 - RT_SCAN_TYPE ScanType = SCAN_PASSIVE;
16529 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
16530 + u8 category = RTW_WLAN_CATEGORY_SA_QUERY;
16531 + u16 reason_code;
16532 + struct xmit_frame *pmgntframe;
16533 + struct pkt_attrib *pattrib;
16534 + u8 *pframe;
16535 + struct rtw_ieee80211_hdr *pwlanhdr;
16536 + u16 *fctrl;
16537 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
16538 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
16539 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
16540 - u32 initialgain = 0;
16541 -
16542 -#ifdef CONFIG_P2P
16543 - struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
16544 - static unsigned char prev_survey_channel = 0;
16545 - static unsigned int p2p_scan_count = 0;
16546 -
16547 - if(rtw_p2p_findphase_ex_is_social(pwdinfo))
16548 + struct sta_info *psta;
16549 + struct sta_priv *pstapriv = &padapter->stapriv;
16550 + struct registry_priv *pregpriv = &padapter->registrypriv;
16551 +
16552 +
16553 + DBG_871X("%s\n", __FUNCTION__);
16554 +
16555 + if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
16556 {
16557 - // Commented by Albert 2011/06/03
16558 - // The driver is in the find phase, it should go through the social channel.
16559 - survey_channel = pwdinfo->social_chan[pmlmeext->sitesurvey_res.channel_idx];
16560 + DBG_871X("%s: alloc_mgtxmitframe fail\n", __FUNCTION__);
16561 + return;
16562 }
16563 +
16564 + //update attribute
16565 + pattrib = &pmgntframe->attrib;
16566 + update_mgntframe_attrib(padapter, pattrib);
16567 +
16568 + _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
16569 +
16570 + pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
16571 + pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
16572 +
16573 + fctrl = &(pwlanhdr->frame_ctl);
16574 + *(fctrl) = 0;
16575 +
16576 + if(raddr)
16577 + _rtw_memcpy(pwlanhdr->addr1, raddr, ETH_ALEN);
16578 else
16579 -#endif //CONFIG_P2P
16580 - {
16581 - survey_channel = pmlmeext->channel_set[pmlmeext->sitesurvey_res.channel_idx].ChannelNum;
16582 - }
16583 + _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
16584 + _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
16585 + _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
16586
16587 - ScanType = pmlmeext->channel_set[pmlmeext->sitesurvey_res.channel_idx].ScanType;
16588 -
16589 - //DBG_871X("switching to ch:%d (cnt:%u,idx:%d) at %dms, %c%c%c\n"
16590 - // , survey_channel
16591 - // , pwdinfo->find_phase_state_exchange_cnt, pmlmeext->sitesurvey_res.channel_idx
16592 - // , rtw_get_passing_time_ms(padapter->mlmepriv.scan_start_time)
16593 - // , ScanType?'A':'P', pmlmeext->sitesurvey_res.scan_mode?'A':'P'
16594 - // , pmlmeext->sitesurvey_res.ssid[0].SsidLength?'S':' '
16595 - //);
16596 + SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
16597 + pmlmeext->mgnt_seq++;
16598 + SetFrameSubType(pframe, WIFI_ACTION);
16599
16600 - if(survey_channel != 0)
16601 + pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
16602 + pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
16603 +
16604 + pframe = rtw_set_fixed_ie(pframe, 1, &category, &pattrib->pktlen);
16605 + pframe = rtw_set_fixed_ie(pframe, 1, &action, &pattrib->pktlen);
16606 +
16607 + switch (action)
16608 {
16609 - //PAUSE 4-AC Queue when site_survey
16610 - //padapter->HalFunc.GetHwRegHandler(padapter, HW_VAR_TXPAUSE, (u8 *)(&val8));
16611 - //val8 |= 0x0f;
16612 - //padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_TXPAUSE, (u8 *)(&val8));
16613 + case 0: //SA Query req
16614 + pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)&pmlmeext->sa_query_seq, &pattrib->pktlen);
16615 + pmlmeext->sa_query_seq++;
16616 + //send sa query request to AP, AP should reply sa query response in 1 second
16617 + set_sa_query_timer(pmlmeext, 1000);
16618 + break;
16619
16620 - if(pmlmeext->sitesurvey_res.channel_idx == 0)
16621 - {
16622 - set_channel_bwmode(padapter, survey_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
16623 - }
16624 - else
16625 - {
16626 - SelectChannel(padapter, survey_channel);
16627 - }
16628 + case 1: //SA Query rsp
16629 + tid = cpu_to_le16(tid);
16630 + pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)&tid, &pattrib->pktlen);
16631 + break;
16632 + default:
16633 + break;
16634 + }
16635
16636 + pattrib->last_txcmdsz = pattrib->pktlen;
16637
16638 - if(ScanType == SCAN_ACTIVE) //obey the channel plan setting...
16639 - {
16640 - #ifdef CONFIG_P2P
16641 - if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_SCAN) ||
16642 - rtw_p2p_chk_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH)
16643 - )
16644 - {
16645 - issue_probereq_p2p(padapter);
16646 - issue_probereq_p2p(padapter);
16647 - issue_probereq_p2p(padapter);
16648 - }
16649 - else
16650 - #endif //CONFIG_P2P
16651 - {
16652 - int i;
16653 - for(i=0;i<RTW_SSID_SCAN_AMOUNT;i++){
16654 - if(pmlmeext->sitesurvey_res.ssid[i].SsidLength) {
16655 - //todo: to issue two probe req???
16656 - issue_probereq(padapter, &(pmlmeext->sitesurvey_res.ssid[i]),1);
16657 - //rtw_msleep_os(SURVEY_TO>>1);
16658 - issue_probereq(padapter, &(pmlmeext->sitesurvey_res.ssid[i]),1);
16659 - } else {
16660 - break;
16661 - }
16662 - }
16663 + dump_mgntframe(padapter, pmgntframe);
16664 +}
16665 +#endif //CONFIG_IEEE80211W
16666
16667 - if(pmlmeext->sitesurvey_res.scan_mode == SCAN_ACTIVE) {
16668 - //todo: to issue two probe req???
16669 - issue_probereq(padapter, NULL, 1);
16670 - //rtw_msleep_os(SURVEY_TO>>1);
16671 - issue_probereq(padapter, NULL, 1);
16672 - }
16673 - }
16674 - }
16675 +void issue_action_BA(_adapter *padapter, unsigned char *raddr, unsigned char action, unsigned short status)
16676 +{
16677 + u8 category = RTW_WLAN_CATEGORY_BACK;
16678 + u16 start_seq;
16679 + u16 BA_para_set;
16680 + u16 reason_code;
16681 + u16 BA_timeout_value;
16682 + u16 BA_starting_seqctrl;
16683 + struct xmit_frame *pmgntframe;
16684 + struct pkt_attrib *pattrib;
16685 + u8 *pframe;
16686 + struct rtw_ieee80211_hdr *pwlanhdr;
16687 + u16 *fctrl;
16688 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
16689 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
16690 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
16691 + struct sta_info *psta;
16692 + struct sta_priv *pstapriv = &padapter->stapriv;
16693 + struct registry_priv *pregpriv = &padapter->registrypriv;
16694
16695 - set_survey_timer(pmlmeext, pmlmeext->chan_scan_time);
16696
16697 - }
16698 - else
16699 + DBG_871X("%s, category=%d, action=%d, status=%d\n", __FUNCTION__, category, action, status);
16700 +
16701 + if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
16702 {
16703 + return;
16704 + }
16705
16706 - // channel number is 0 or this channel is not valid.
16707 -#ifdef CONFIG_P2P
16708 - if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_SCAN) || rtw_p2p_chk_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH))
16709 - {
16710 - #ifdef CONFIG_DBG_P2P
16711 - DBG_8192C( "[%s] find phase exchange cnt = %d\n", __FUNCTION__, pwdinfo->find_phase_state_exchange_cnt );
16712 - #endif
16713 - }
16714 -
16715 - if(rtw_p2p_findphase_ex_is_needed(pwdinfo))
16716 - {
16717 - // Set the P2P State to the listen state of find phase and set the current channel to the listen channel
16718 - set_channel_bwmode(padapter, pwdinfo->listen_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
16719 - rtw_p2p_set_state(pwdinfo, P2P_STATE_FIND_PHASE_LISTEN);
16720 -
16721 - pmlmeext->sitesurvey_res.state = SCAN_DISABLE;
16722 + //update attribute
16723 + pattrib = &pmgntframe->attrib;
16724 + update_mgntframe_attrib(padapter, pattrib);
16725
16726 - _set_timer( &pwdinfo->find_phase_timer, ( u32 ) ( ( u32 ) ( pwdinfo->listen_dwell ) * 100 ) );
16727 - }
16728 - else
16729 -#endif //CONFIG_P2P
16730 - {
16731 + _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
16732
16733 -#ifdef CONFIG_ANTENNA_DIVERSITY
16734 - // 20100721:Interrupt scan operation here.
16735 - // For SW antenna diversity before link, it needs to switch to another antenna and scan again.
16736 - // It compares the scan result and select beter one to do connection.
16737 - if(padapter->HalFunc.SwAntDivBeforeLinkHandler(padapter))
16738 - {
16739 - pmlmeext->sitesurvey_res.bss_cnt = 0;
16740 - pmlmeext->sitesurvey_res.channel_idx = -1;
16741 - pmlmeext->chan_scan_time = SURVEY_TO /2;
16742 - set_survey_timer(pmlmeext, pmlmeext->chan_scan_time);
16743 - return;
16744 - }
16745 -#endif
16746 + pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
16747 + pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
16748
16749 -#ifdef CONFIG_P2P
16750 - if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_SCAN) || rtw_p2p_chk_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH))
16751 - {
16752 - rtw_p2p_set_state(pwdinfo, P2P_STATE_LISTEN);
16753 - }
16754 - rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_NONE);
16755 -#endif //CONFIG_P2P
16756 -
16757 - pmlmeext->sitesurvey_res.state = SCAN_COMPLETE;
16758 + fctrl = &(pwlanhdr->frame_ctl);
16759 + *(fctrl) = 0;
16760 +
16761 + //_rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
16762 + _rtw_memcpy(pwlanhdr->addr1, raddr, ETH_ALEN);
16763 + _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
16764 + _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
16765 +
16766 + SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
16767 + pmlmeext->mgnt_seq++;
16768 + SetFrameSubType(pframe, WIFI_ACTION);
16769 +
16770 + pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
16771 + pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
16772
16773 - //switch back to the original channel
16774 - //SelectChannel(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset);
16775 + pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
16776 + pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
16777
16778 -#ifdef CONFIG_P2P
16779 - if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_OK)
16780 - && pwdinfo->peer_operating_ch != 0
16781 - )
16782 - {
16783 - DBG_8192C( "[%s] In P2P WPS mode, stay in the peer operating channel = %d\n", __FUNCTION__, pwdinfo->peer_operating_ch );
16784 - set_channel_bwmode(padapter, pwdinfo->peer_operating_ch, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
16785 - }
16786 - else
16787 -#endif //CONFIG_P2P
16788 - {
16789 - set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
16790 - }
16791 + status = cpu_to_le16(status);
16792 +
16793
16794 - //flush 4-AC Queue after site_survey
16795 - //val8 = 0;
16796 - //padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_TXPAUSE, (u8 *)(&val8));
16797 + if (category == 3)
16798 + {
16799 + switch (action)
16800 + {
16801 + case 0: //ADDBA req
16802 + do {
16803 + pmlmeinfo->dialogToken++;
16804 + } while (pmlmeinfo->dialogToken == 0);
16805 + pframe = rtw_set_fixed_ie(pframe, 1, &(pmlmeinfo->dialogToken), &(pattrib->pktlen));
16806
16807 - val8 = 0;
16808 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
16809 + BA_para_set = (0x1002 | ((status & 0xf) << 2)); //immediate ack & 64 buffer size
16810 + //sys_mib.BA_para_set = 0x0802; //immediate ack & 32 buffer size
16811 + BA_para_set = cpu_to_le16(BA_para_set);
16812 + pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&(BA_para_set)), &(pattrib->pktlen));
16813
16814 - //config MSR
16815 - Set_NETYPE0_MSR(padapter, (pmlmeinfo->state & 0x3));
16816 + //BA_timeout_value = 0xffff;//max: 65535 TUs(~ 65 ms)
16817 + BA_timeout_value = 5000;//~ 5ms
16818 + BA_timeout_value = cpu_to_le16(BA_timeout_value);
16819 + pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&(BA_timeout_value)), &(pattrib->pktlen));
16820
16821 - initialgain = 0xff; //restore RX GAIN
16822 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));
16823 - //turn on dynamic functions
16824 - Restore_DM_Func_Flag(padapter);
16825 - //Switch_DM_Func(padapter, DYNAMIC_FUNC_DIG|DYNAMIC_FUNC_HP|DYNAMIC_FUNC_SS, _TRUE);
16826 + //if ((psta = rtw_get_stainfo(pstapriv, pmlmeinfo->network.MacAddress)) != NULL)
16827 + if ((psta = rtw_get_stainfo(pstapriv, raddr)) != NULL)
16828 + {
16829 + start_seq = (psta->sta_xmitpriv.txseq_tid[status & 0x07]&0xfff) + 1;
16830
16831 - if (is_client_associated_to_ap(padapter) == _TRUE)
16832 - {
16833 - //issue null data
16834 - issue_nulldata(padapter, 0);
16835 - }
16836 + DBG_871X("BA_starting_seqctrl = %d for TID=%d\n", start_seq, status & 0x07);
16837 +
16838 + psta->BA_starting_seqctrl[status & 0x07] = start_seq;
16839 +
16840 + BA_starting_seqctrl = start_seq << 4;
16841 + }
16842 +
16843 + BA_starting_seqctrl = cpu_to_le16(BA_starting_seqctrl);
16844 + pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&(BA_starting_seqctrl)), &(pattrib->pktlen));
16845 + break;
16846
16847 - report_surveydone_event(padapter);
16848 + case 1: //ADDBA rsp
16849 + pframe = rtw_set_fixed_ie(pframe, 1, &(pmlmeinfo->ADDBA_req.dialog_token), &(pattrib->pktlen));
16850 + pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&status), &(pattrib->pktlen));
16851
16852 - pmlmeext->chan_scan_time = SURVEY_TO;
16853 - pmlmeext->sitesurvey_res.state = SCAN_DISABLE;
16854 + //BA_para_set = cpu_to_le16((le16_to_cpu(pmlmeinfo->ADDBA_req.BA_para_set) & 0x3f) | 0x1000); //64 buffer size
16855 + BA_para_set = ((le16_to_cpu(pmlmeinfo->ADDBA_req.BA_para_set) & 0x3f) | 0x1000); //64 buffer size
16856
16857 - issue_action_BSSCoexistPacket(padapter);
16858 - issue_action_BSSCoexistPacket(padapter);
16859 - issue_action_BSSCoexistPacket(padapter);
16860 + if(pregpriv->ampdu_amsdu==0)//disabled
16861 + BA_para_set = cpu_to_le16(BA_para_set & ~BIT(0));
16862 + else if(pregpriv->ampdu_amsdu==1)//enabled
16863 + BA_para_set = cpu_to_le16(BA_para_set | BIT(0));
16864 + else //auto
16865 + BA_para_set = cpu_to_le16(BA_para_set);
16866 +
16867 + pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&(BA_para_set)), &(pattrib->pktlen));
16868 + pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&(pmlmeinfo->ADDBA_req.BA_timeout_value)), &(pattrib->pktlen));
16869 + break;
16870 + case 2://DELBA
16871 + BA_para_set = (status & 0x1F) << 3;
16872 + BA_para_set = cpu_to_le16(BA_para_set);
16873 + pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&(BA_para_set)), &(pattrib->pktlen));
16874
16875 + reason_code = 37;//Requested from peer STA as it does not want to use the mechanism
16876 + reason_code = cpu_to_le16(reason_code);
16877 + pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&(reason_code)), &(pattrib->pktlen));
16878 + break;
16879 + default:
16880 + break;
16881 }
16882 -
16883 }
16884
16885 - return;
16886 + pattrib->last_txcmdsz = pattrib->pktlen;
16887
16888 + dump_mgntframe(padapter, pmgntframe);
16889 }
16890
16891 -//collect bss info from Beacon and Probe response frames.
16892 -u8 collect_bss_info(_adapter *padapter, union recv_frame *precv_frame, WLAN_BSSID_EX *bssid)
16893 -{
16894 - int i;
16895 - u32 len;
16896 - u8 *p;
16897 - u16 val16, subtype;
16898 - u8 *pframe = precv_frame->u.hdr.rx_data;
16899 - u32 packet_len = precv_frame->u.hdr.len;
16900 - struct registry_priv *pregistrypriv = &padapter->registrypriv;
16901 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
16902 +static void issue_action_BSSCoexistPacket(_adapter *padapter)
16903 +{
16904 + _irqL irqL;
16905 + _list *plist, *phead;
16906 + unsigned char category, action;
16907 + struct xmit_frame *pmgntframe;
16908 + struct pkt_attrib *pattrib;
16909 + unsigned char *pframe;
16910 + struct rtw_ieee80211_hdr *pwlanhdr;
16911 + unsigned short *fctrl;
16912 + struct wlan_network *pnetwork = NULL;
16913 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
16914 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
16915 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
16916 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
16917 + _queue *queue = &(pmlmepriv->scanned_queue);
16918 + u8 InfoContent[16] = {0};
16919 + u8 ICS[8][15];
16920 +
16921 + if((pmlmepriv->num_FortyMHzIntolerant==0) || (pmlmepriv->num_sta_no_ht==0))
16922 + return;
16923
16924 - len = packet_len - sizeof(struct rtw_ieee80211_hdr_3addr);
16925 + if(_TRUE == pmlmeinfo->bwmode_updated)
16926 + return;
16927 +
16928
16929 - if (len > MAX_IE_SZ)
16930 + DBG_871X("%s\n", __FUNCTION__);
16931 +
16932 +
16933 + category = RTW_WLAN_CATEGORY_PUBLIC;
16934 + action = ACT_PUBLIC_BSSCOEXIST;
16935 +
16936 + if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
16937 {
16938 - //DBG_8192C("IE too long for survey event\n");
16939 - return _FAIL;
16940 + return;
16941 }
16942
16943 - _rtw_memset(bssid, 0, sizeof(WLAN_BSSID_EX));
16944 + //update attribute
16945 + pattrib = &pmgntframe->attrib;
16946 + update_mgntframe_attrib(padapter, pattrib);
16947
16948 - subtype = GetFrameSubType(pframe);
16949 + _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
16950
16951 - if(subtype==WIFI_BEACON)
16952 - bssid->Reserved[0] = 1;
16953 - else
16954 - bssid->Reserved[0] = 0;
16955 -
16956 - bssid->Length = sizeof(WLAN_BSSID_EX) - MAX_IE_SZ + len;
16957 + pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
16958 + pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
16959
16960 - //below is to copy the information element
16961 - bssid->IELength = len;
16962 - _rtw_memcpy(bssid->IEs, (pframe + sizeof(struct rtw_ieee80211_hdr_3addr)), bssid->IELength);
16963 + fctrl = &(pwlanhdr->frame_ctl);
16964 + *(fctrl) = 0;
16965
16966 - //get the signal strength
16967 - bssid->PhyInfo.SignalQuality = precv_frame->u.hdr.attrib.signal_qual;//in percentage
16968 - bssid->PhyInfo.SignalStrength = precv_frame->u.hdr.attrib.signal_strength;//in percentage
16969 - bssid->Rssi = precv_frame->u.hdr.attrib.RecvSignalPower; // in dBM.raw data
16970 -
16971 -#ifdef CONFIG_ANTENNA_DIVERSITY
16972 - //padapter->HalFunc.GetHwRegHandler(padapter, HW_VAR_CURRENT_ANTENNA, (u8 *)(&bssid->PhyInfo.Optimum_antenna));
16973 - padapter->HalFunc.GetHalDefVarHandler(padapter, HAL_DEF_CURRENT_ANTENNA, &bssid->PhyInfo.Optimum_antenna);
16974 -#endif
16975 + _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
16976 + _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
16977 + _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
16978
16979 - // checking SSID
16980 - if ((p = rtw_get_ie(bssid->IEs + _FIXED_IE_LENGTH_, _SSID_IE_, &len, bssid->IELength - _FIXED_IE_LENGTH_)) == NULL)
16981 - {
16982 - DBG_871X("marc: cannot find SSID for survey event\n");
16983 - return _FAIL;
16984 - }
16985 + SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
16986 + pmlmeext->mgnt_seq++;
16987 + SetFrameSubType(pframe, WIFI_ACTION);
16988
16989 - if (*(p + 1))
16990 - {
16991 - _rtw_memcpy(bssid->Ssid.Ssid, (p + 2), *(p + 1));
16992 - bssid->Ssid.SsidLength = *(p + 1);
16993 - }
16994 - else
16995 - {
16996 - bssid->Ssid.SsidLength = 0;
16997 - }
16998 + pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
16999 + pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
17000
17001 - _rtw_memset(bssid->SupportedRates, 0, NDIS_802_11_LENGTH_RATES_EX);
17002 + pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
17003 + pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
17004
17005 - //checking rate info...
17006 - i = 0;
17007 - p = rtw_get_ie(bssid->IEs + _FIXED_IE_LENGTH_, _SUPPORTEDRATES_IE_, &len, bssid->IELength - _FIXED_IE_LENGTH_);
17008 - if (p != NULL)
17009 - {
17010 - _rtw_memcpy(bssid->SupportedRates, (p + 2), len);
17011 - i = len;
17012 - }
17013
17014 - p = rtw_get_ie(bssid->IEs + _FIXED_IE_LENGTH_, _EXT_SUPPORTEDRATES_IE_, &len, bssid->IELength - _FIXED_IE_LENGTH_);
17015 - if (p != NULL)
17016 + //
17017 + if(pmlmepriv->num_FortyMHzIntolerant>0)
17018 {
17019 - _rtw_memcpy(bssid->SupportedRates + i, (p + 2), len);
17020 - }
17021 + u8 iedata=0;
17022 +
17023 + iedata |= BIT(2);//20 MHz BSS Width Request
17024
17025 - //todo:
17026 -#if 0
17027 - if (judge_network_type(bssid->SupportedRates, (len + i)) == WIRELESS_11B)
17028 - {
17029 - bssid->NetworkTypeInUse = Ndis802_11DS;
17030 - }
17031 - else
17032 -#endif
17033 - {
17034 - bssid->NetworkTypeInUse = Ndis802_11OFDM24;
17035 + pframe = rtw_set_ie(pframe, EID_BSSCoexistence, 1, &iedata, &(pattrib->pktlen));
17036 +
17037 }
17038 +
17039
17040 - // Checking for DSConfig
17041 - p = rtw_get_ie(bssid->IEs + _FIXED_IE_LENGTH_, _DSSET_IE_, &len, bssid->IELength - _FIXED_IE_LENGTH_);
17042 -
17043 - bssid->Configuration.DSConfig = 0;
17044 - bssid->Configuration.Length = 0;
17045 + //
17046 + _rtw_memset(ICS, 0, sizeof(ICS));
17047 + if(pmlmepriv->num_sta_no_ht>0)
17048 + {
17049 + int i;
17050 +
17051 + _enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
17052
17053 - if (p)
17054 - {
17055 - bssid->Configuration.DSConfig = *(p + 2);
17056 - }
17057 - else
17058 - {// In 5G, some ap do not have DSSET IE
17059 - // checking HT info for channel
17060 - p = rtw_get_ie(bssid->IEs + _FIXED_IE_LENGTH_, _HT_ADD_INFO_IE_, &len, bssid->IELength - _FIXED_IE_LENGTH_);
17061 - if(p)
17062 + phead = get_list_head(queue);
17063 + plist = get_next(phead);
17064 +
17065 + while(1)
17066 {
17067 - struct HT_info_element *HT_info = (struct HT_info_element *)(p + 2);
17068 - bssid->Configuration.DSConfig = HT_info->primary_channel;
17069 - }
17070 - else
17071 - { // use current channel
17072 - if (padapter->mlmeextpriv.sitesurvey_res.state == SCAN_PROCESS)
17073 - bssid->Configuration.DSConfig = padapter->mlmeextpriv.channel_set[padapter->mlmeextpriv.sitesurvey_res.channel_idx].ChannelNum;
17074 - else
17075 - bssid->Configuration.DSConfig = padapter->mlmeextpriv.cur_channel;
17076 - }
17077 - }
17078 -
17079 - _rtw_memcpy(&bssid->Configuration.BeaconPeriod, rtw_get_beacon_interval_from_ie(bssid->IEs), 2);
17080 -
17081 + int len;
17082 + u8 *p;
17083 + WLAN_BSSID_EX *pbss_network;
17084 +
17085 + if (rtw_end_of_queue_search(phead,plist)== _TRUE)
17086 + break;
17087
17088 - bssid->Configuration.BeaconPeriod = le32_to_cpu(bssid->Configuration.BeaconPeriod);
17089 + pnetwork = LIST_CONTAINOR(plist, struct wlan_network, list);
17090 +
17091 + plist = get_next(plist);
17092
17093 - val16 = rtw_get_capability((WLAN_BSSID_EX *)bssid);
17094 + pbss_network = (WLAN_BSSID_EX *)&pnetwork->network;
17095
17096 - if (val16 & BIT(0))
17097 - {
17098 - bssid->InfrastructureMode = Ndis802_11Infrastructure;
17099 - _rtw_memcpy(bssid->MacAddress, GetAddr2Ptr(pframe), ETH_ALEN);
17100 - }
17101 - else
17102 - {
17103 - bssid->InfrastructureMode = Ndis802_11IBSS;
17104 - _rtw_memcpy(bssid->MacAddress, GetAddr3Ptr(pframe), ETH_ALEN);
17105 - }
17106 + p = rtw_get_ie(pbss_network->IEs + _FIXED_IE_LENGTH_, _HT_CAPABILITY_IE_, &len, pbss_network->IELength - _FIXED_IE_LENGTH_);
17107 + if((p==NULL) || (len==0))//non-HT
17108 + {
17109 + if((pbss_network->Configuration.DSConfig<=0) || (pbss_network->Configuration.DSConfig>14))
17110 + continue;
17111 +
17112 + ICS[0][pbss_network->Configuration.DSConfig]=1;
17113 +
17114 + if(ICS[0][0] == 0)
17115 + ICS[0][0] = 1;
17116 + }
17117 +
17118 + }
17119
17120 - if (val16 & BIT(4))
17121 - bssid->Privacy = 1;
17122 - else
17123 - bssid->Privacy = 0;
17124 + _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
17125
17126 - bssid->Configuration.ATIMWindow = 0;
17127
17128 - //20/40 BSS Coexistence check
17129 - if((pregistrypriv->wifi_spec==1) && (_FALSE == pmlmeinfo->bwmode_updated))
17130 - {
17131 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
17132 -
17133 - p = rtw_get_ie(bssid->IEs + _FIXED_IE_LENGTH_, _HT_CAPABILITY_IE_, &len, bssid->IELength - _FIXED_IE_LENGTH_);
17134 - if(p && len>0)
17135 + for(i= 0;i<8;i++)
17136 {
17137 - struct HT_caps_element *pHT_caps;
17138 - pHT_caps = (struct HT_caps_element *)(p + 2);
17139 -
17140 - if(pHT_caps->HT_cap_element.HT_caps_info&BIT(14))
17141 - {
17142 - pmlmepriv->num_FortyMHzIntolerant++;
17143 + if(ICS[i][0] == 1)
17144 + {
17145 + int j, k = 0;
17146 +
17147 + InfoContent[k] = i;
17148 + //SET_BSS_INTOLERANT_ELE_REG_CLASS(InfoContent,i);
17149 + k++;
17150 +
17151 + for(j=1;j<=14;j++)
17152 + {
17153 + if(ICS[i][j]==1)
17154 + {
17155 + if(k<16)
17156 + {
17157 + InfoContent[k] = j; //channel number
17158 + //SET_BSS_INTOLERANT_ELE_CHANNEL(InfoContent+k, j);
17159 + k++;
17160 + }
17161 + }
17162 + }
17163 +
17164 + pframe = rtw_set_ie(pframe, EID_BSSIntolerantChlReport, k, InfoContent, &(pattrib->pktlen));
17165 +
17166 }
17167 - }
17168 - else
17169 - {
17170 - pmlmepriv->num_sta_no_ht++;
17171 +
17172 }
17173
17174 - }
17175
17176 -
17177 - #if defined(DBG_RX_SIGNAL_DISPLAY_PROCESSING) & 1
17178 - if(strcmp(bssid->Ssid.Ssid, DBG_RX_SIGNAL_DISPLAY_SSID_MONITORED) == 0) {
17179 - DBG_871X("Receiving %s("MAC_FMT", DSConfig:%u) from ch%u with ss:%3u, sq:%3u, RawRSSI:%3ld\n"
17180 - , bssid->Ssid.Ssid, MAC_ARG(bssid->MacAddress), bssid->Configuration.DSConfig
17181 - , padapter->mlmeextpriv.channel_set[padapter->mlmeextpriv.sitesurvey_res.channel_idx].ChannelNum
17182 - , bssid->PhyInfo.SignalStrength, bssid->PhyInfo.SignalQuality, bssid->Rssi
17183 - );
17184 }
17185 - #endif
17186
17187 - // mark bss info receving from nearby channel as SignalQuality 101
17188 - if(bssid->Configuration.DSConfig != padapter->mlmeextpriv.channel_set[padapter->mlmeextpriv.sitesurvey_res.channel_idx].ChannelNum)
17189 - {
17190 - bssid->PhyInfo.SignalQuality= 101;
17191 - }
17192
17193 - return _SUCCESS;
17194 + pattrib->last_txcmdsz = pattrib->pktlen;
17195 +
17196 + dump_mgntframe(padapter, pmgntframe);
17197
17198 }
17199
17200 -void start_create_ibss(_adapter* padapter)
17201 +unsigned int send_delba(_adapter *padapter, u8 initiator, u8 *addr)
17202 {
17203 - unsigned short caps;
17204 - u32 val32;
17205 - u8 val8;
17206 - u8 join_type;
17207 + struct sta_priv *pstapriv = &padapter->stapriv;
17208 + struct sta_info *psta = NULL;
17209 + //struct recv_reorder_ctrl *preorder_ctrl;
17210 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
17211 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
17212 - WLAN_BSSID_EX *pnetwork = (WLAN_BSSID_EX*)(&(pmlmeinfo->network));
17213 - pmlmeext->cur_channel = (u8)pnetwork->Configuration.DSConfig;
17214 - pmlmeinfo->bcn_interval = get_beacon_interval(pnetwork);
17215 + u16 tid;
17216
17217 - //update wireless mode
17218 - update_wireless_mode(padapter);
17219 + if((pmlmeinfo->state&0x03) != WIFI_FW_AP_STATE)
17220 + if (!(pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS))
17221 + return _SUCCESS;
17222 +
17223 + psta = rtw_get_stainfo(pstapriv, addr);
17224 + if(psta==NULL)
17225 + return _SUCCESS;
17226
17227 - //udpate capability
17228 - caps = rtw_get_capability((WLAN_BSSID_EX *)pnetwork);
17229 - update_capinfo(padapter, caps);
17230 - if(caps&cap_IBSS)//adhoc master
17231 + //DBG_871X("%s:%s\n", __FUNCTION__, (initiator==0)?"RX_DIR":"TX_DIR");
17232 +
17233 + if(initiator==0) // recipient
17234 {
17235 - //set_opmode_cmd(padapter, adhoc);//removed
17236 -
17237 - val8 = 0xcf;
17238 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_SEC_CFG, (u8 *)(&val8));
17239 -
17240 - //switch channel
17241 - //SelectChannel(padapter, pmlmeext->cur_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE);
17242 - set_channel_bwmode(padapter, pmlmeext->cur_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
17243 -
17244 - beacon_timing_control(padapter);
17245 -
17246 - //set msr to WIFI_FW_ADHOC_STATE
17247 - pmlmeinfo->state = WIFI_FW_ADHOC_STATE;
17248 - Set_NETYPE0_MSR(padapter, (pmlmeinfo->state & 0x3));
17249 -
17250 - //issue beacon
17251 - if(send_beacon(padapter)==_FAIL)
17252 + for(tid = 0;tid<MAXTID;tid++)
17253 {
17254 - RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("issuing beacon frame fail....\n"));
17255 -
17256 - report_join_res(padapter, -1);
17257 - pmlmeinfo->state = WIFI_FW_NULL_STATE;
17258 - }
17259 - else
17260 - {
17261 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_BSSID, padapter->registrypriv.dev_network.MacAddress);
17262 - join_type = 0;
17263 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_JOIN, (u8 *)(&join_type));
17264 -
17265 - report_join_res(padapter, 1);
17266 - pmlmeinfo->state |= WIFI_FW_ASSOC_SUCCESS;
17267 + if(psta->recvreorder_ctrl[tid].enable == _TRUE)
17268 + {
17269 + DBG_871X("rx agg disable tid(%d)\n",tid);
17270 + issue_action_BA(padapter, addr, RTW_WLAN_ACTION_DELBA, (((tid <<1) |initiator)&0x1F));
17271 + psta->recvreorder_ctrl[tid].enable = _FALSE;
17272 + psta->recvreorder_ctrl[tid].indicate_seq = 0xffff;
17273 + #ifdef DBG_RX_SEQ
17274 + DBG_871X("DBG_RX_SEQ %s:%d indicate_seq:%u \n", __FUNCTION__, __LINE__,
17275 + psta->recvreorder_ctrl[tid].indicate_seq);
17276 + #endif
17277 + }
17278 }
17279 }
17280 - else
17281 + else if(initiator == 1)// originator
17282 {
17283 - DBG_871X("start_create_ibss, invalid cap:%x\n", caps);
17284 - return;
17285 + //DBG_871X("tx agg_enable_bitmap(0x%08x)\n", psta->htpriv.agg_enable_bitmap);
17286 + for(tid = 0;tid<MAXTID;tid++)
17287 + {
17288 + if(psta->htpriv.agg_enable_bitmap & BIT(tid))
17289 + {
17290 + DBG_871X("tx agg disable tid(%d)\n",tid);
17291 + issue_action_BA(padapter, addr, RTW_WLAN_ACTION_DELBA, (((tid <<1) |initiator)&0x1F) );
17292 + psta->htpriv.agg_enable_bitmap &= ~BIT(tid);
17293 + psta->htpriv.candidate_tid_bitmap &= ~BIT(tid);
17294 +
17295 + }
17296 + }
17297 }
17298 -
17299 +
17300 + return _SUCCESS;
17301 +
17302 }
17303
17304 -void start_clnt_join(_adapter* padapter)
17305 +unsigned int send_beacon(_adapter *padapter)
17306 {
17307 - unsigned short caps;
17308 - u8 val8;
17309 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
17310 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
17311 - WLAN_BSSID_EX *pnetwork = (WLAN_BSSID_EX*)(&(pmlmeinfo->network));
17312 + u8 bxmitok = _FALSE;
17313 + int issue=0;
17314 + int poll = 0;
17315 +//#ifdef CONFIG_CONCURRENT_MODE
17316 + //struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
17317 + //struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
17318 + //_adapter *pbuddy_adapter = padapter->pbuddy_adapter;
17319 + //struct mlme_priv *pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
17320 +//#endif
17321
17322 +#ifdef CONFIG_PCI_HCI
17323
17324 - pmlmeext->cur_channel = (u8)pnetwork->Configuration.DSConfig;
17325 - pmlmeinfo->bcn_interval = get_beacon_interval(pnetwork);
17326 + //DBG_871X("%s\n", __FUNCTION__);
17327
17328 - //update wireless mode
17329 - update_wireless_mode(padapter);
17330 + issue_beacon(padapter);
17331
17332 - //udpate capability
17333 - caps = rtw_get_capability((WLAN_BSSID_EX *)pnetwork);
17334 - update_capinfo(padapter, caps);
17335 - if (caps&cap_ESS)
17336 - {
17337 - Set_NETYPE0_MSR(padapter, WIFI_FW_STATION_STATE);
17338 + return _SUCCESS;
17339
17340 - val8 = (pmlmeinfo->auth_algo == dot11AuthAlgrthm_8021X)? 0xcc: 0xcf;
17341 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_SEC_CFG, (u8 *)(&val8));
17342 +#endif
17343
17344 - //switch channel
17345 - set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
17346 +#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
17347 + u32 start = rtw_get_current_time();
17348
17349 - //here wait for receiving the beacon to start auth
17350 - //and enable a timer
17351 - set_link_timer(pmlmeext, decide_wait_for_beacon_timeout(pmlmeinfo->bcn_interval));
17352 + rtw_hal_set_hwreg(padapter, HW_VAR_BCN_VALID, NULL);
17353 + do{
17354 + issue_beacon(padapter);
17355 + issue++;
17356 + do {
17357 + rtw_yield_os();
17358 + rtw_hal_get_hwreg(padapter, HW_VAR_BCN_VALID, (u8 *)(&bxmitok));
17359 + poll++;
17360 + }while((poll%10)!=0 && _FALSE == bxmitok && !padapter->bSurpriseRemoved && !padapter->bDriverStopped);
17361
17362 - pmlmeinfo->state = WIFI_FW_AUTH_NULL | WIFI_FW_STATION_STATE;
17363 + }while(_FALSE == bxmitok && issue<100 && !padapter->bSurpriseRemoved && !padapter->bDriverStopped);
17364 +
17365 + if(padapter->bSurpriseRemoved || padapter->bDriverStopped)
17366 + {
17367 + return _FAIL;
17368 }
17369 - else if (caps&cap_IBSS) //adhoc client
17370 + if(_FALSE == bxmitok)
17371 {
17372 - Set_NETYPE0_MSR(padapter, WIFI_FW_ADHOC_STATE);
17373 -
17374 - val8 = 0xcf;
17375 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_SEC_CFG, (u8 *)(&val8));
17376 -
17377 - //switch channel
17378 - set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
17379 -
17380 - beacon_timing_control(padapter);
17381 -
17382 - pmlmeinfo->state = WIFI_FW_ADHOC_STATE;
17383 -
17384 - report_join_res(padapter, 1);
17385 + DBG_871X("%s fail! %u ms\n", __FUNCTION__, rtw_get_passing_time_ms(start));
17386 + return _FAIL;
17387 }
17388 else
17389 {
17390 - //DBG_8192C("marc: invalid cap:%x\n", caps);
17391 - return;
17392 - }
17393 -
17394 -}
17395 -
17396 -void start_clnt_auth(_adapter* padapter)
17397 -{
17398 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
17399 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
17400 -
17401 - _cancel_timer_ex(&pmlmeext->link_timer);
17402 + u32 passing_time = rtw_get_passing_time_ms(start);
17403
17404 - pmlmeinfo->state &= (~WIFI_FW_AUTH_NULL);
17405 - pmlmeinfo->state |= WIFI_FW_AUTH_STATE;
17406 + if(passing_time > 100 || issue > 3)
17407 + DBG_871X("%s success, issue:%d, poll:%d, %u ms\n", __FUNCTION__, issue, poll, rtw_get_passing_time_ms(start));
17408 + //else
17409 + // DBG_871X("%s success, issue:%d, poll:%d, %u ms\n", __FUNCTION__, issue, poll, rtw_get_passing_time_ms(start));
17410 +
17411 + return _SUCCESS;
17412 + }
17413
17414 - pmlmeinfo->auth_seq = 1;
17415 - pmlmeinfo->reauth_count = 0;
17416 - pmlmeinfo->reassoc_count = 0;
17417 - pmlmeinfo->link_count = 0;
17418 +#endif
17419
17420 +}
17421
17422 - // Because of AP's not receiving deauth before
17423 - // AP may: 1)not response auth or 2)deauth us after link is complete
17424 - // issue deauth before issuing auth to deal with the situation
17425 - issue_deauth(padapter, (&(pmlmeinfo->network))->MacAddress, WLAN_REASON_DEAUTH_LEAVING);
17426 +/****************************************************************************
17427
17428 - issue_auth(padapter, NULL, 0);
17429 +Following are some utitity fuctions for WiFi MLME
17430
17431 - set_link_timer(pmlmeext, REAUTH_TO);
17432 +*****************************************************************************/
17433
17434 +BOOLEAN IsLegal5GChannel(
17435 + IN PADAPTER Adapter,
17436 + IN u8 channel)
17437 +{
17438 +
17439 + int i=0;
17440 + u8 Channel_5G[45] = {36,38,40,42,44,46,48,50,52,54,56,58,
17441 + 60,62,64,100,102,104,106,108,110,112,114,116,118,120,122,
17442 + 124,126,128,130,132,134,136,138,140,149,151,153,155,157,159,
17443 + 161,163,165};
17444 + for(i=0;i<sizeof(Channel_5G);i++)
17445 + if(channel == Channel_5G[i])
17446 + return _TRUE;
17447 + return _FALSE;
17448 }
17449
17450 -
17451 -void start_clnt_assoc(_adapter* padapter)
17452 +void site_survey(_adapter *padapter)
17453 {
17454 + unsigned char survey_channel = 0, val8;
17455 + RT_SCAN_TYPE ScanType = SCAN_PASSIVE;
17456 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
17457 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
17458 + u32 initialgain = 0;
17459 + u8 restore_initial_gain = 1;
17460
17461 - _cancel_timer_ex(&pmlmeext->link_timer);
17462 -
17463 - pmlmeinfo->state &= (~(WIFI_FW_AUTH_NULL | WIFI_FW_AUTH_STATE));
17464 - pmlmeinfo->state |= (WIFI_FW_AUTH_SUCCESS | WIFI_FW_ASSOC_STATE);
17465 +#ifdef CONFIG_P2P
17466
17467 - issue_assocreq(padapter);
17468 +#ifdef CONFIG_CONCURRENT_MODE
17469
17470 - set_link_timer(pmlmeext, REASSOC_TO);
17471 -}
17472 +#ifdef CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
17473 + u8 stay_buddy_ch = 0;
17474 +#endif //CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
17475
17476 -unsigned int receive_disconnect(_adapter *padapter, unsigned char *MacAddr, unsigned short reason)
17477 -{
17478 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
17479 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
17480 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
17481 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
17482 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
17483
17484 - //check A3
17485 - if (!(_rtw_memcmp(MacAddr, get_my_bssid(&pmlmeinfo->network), ETH_ALEN)))
17486 - return _SUCCESS;
17487 +#endif //CONFIG_CONCURRENT_MODE
17488 + struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
17489 + static unsigned char prev_survey_channel = 0;
17490 + static unsigned int p2p_scan_count = 0;
17491
17492 - DBG_871X("%s\n", __FUNCTION__);
17493
17494 - if((pmlmeinfo->state&0x03) == WIFI_FW_STATION_STATE)
17495 + if ( ( pwdinfo->rx_invitereq_info.scan_op_ch_only ) || ( pwdinfo->p2p_info.scan_op_ch_only ) )
17496 {
17497 - if (pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS)
17498 + if ( pwdinfo->rx_invitereq_info.scan_op_ch_only )
17499 {
17500 - pmlmeinfo->state = WIFI_FW_NULL_STATE;
17501 - report_del_sta_event(padapter, MacAddr, reason);
17502 + survey_channel = pwdinfo->rx_invitereq_info.operation_ch[pmlmeext->sitesurvey_res.channel_idx];
17503 }
17504 - else if (pmlmeinfo->state & WIFI_FW_LINKING_STATE)
17505 + else
17506 {
17507 - pmlmeinfo->state = WIFI_FW_NULL_STATE;
17508 - report_join_res(padapter, -2);
17509 + survey_channel = pwdinfo->p2p_info.operation_ch[pmlmeext->sitesurvey_res.channel_idx];
17510 + }
17511 + ScanType = SCAN_ACTIVE;
17512 + }
17513 + else if(rtw_p2p_findphase_ex_is_social(pwdinfo))
17514 + {
17515 + // Commented by Albert 2011/06/03
17516 + // The driver is in the find phase, it should go through the social channel.
17517 + int ch_set_idx;
17518 + survey_channel = pwdinfo->social_chan[pmlmeext->sitesurvey_res.channel_idx];
17519 + ch_set_idx = rtw_ch_set_search_ch(pmlmeext->channel_set, survey_channel);
17520 + if (ch_set_idx >= 0)
17521 + ScanType = pmlmeext->channel_set[ch_set_idx].ScanType;
17522 + else
17523 + ScanType = SCAN_ACTIVE;
17524 + }
17525 + else
17526 +#endif //CONFIG_P2P
17527 + {
17528 + struct rtw_ieee80211_channel *ch;
17529 + if (pmlmeext->sitesurvey_res.channel_idx < pmlmeext->sitesurvey_res.ch_num) {
17530 + ch = &pmlmeext->sitesurvey_res.ch[pmlmeext->sitesurvey_res.channel_idx];
17531 + survey_channel = ch->hw_value;
17532 + ScanType = (ch->flags & RTW_IEEE80211_CHAN_PASSIVE_SCAN) ? SCAN_PASSIVE : SCAN_ACTIVE;
17533 }
17534 }
17535
17536 - return _SUCCESS;
17537 -}
17538 + if (0)
17539 + DBG_871X(FUNC_ADPT_FMT" ch:%u(cnt:%u,idx:%d) at %dms, %c%c%c\n"
17540 + , FUNC_ADPT_ARG(padapter)
17541 + , survey_channel
17542 + , pwdinfo->find_phase_state_exchange_cnt, pmlmeext->sitesurvey_res.channel_idx
17543 + , rtw_get_passing_time_ms(padapter->mlmepriv.scan_start_time)
17544 + , ScanType?'A':'P', pmlmeext->sitesurvey_res.scan_mode?'A':'P'
17545 + , pmlmeext->sitesurvey_res.ssid[0].SsidLength?'S':' '
17546 + );
17547
17548 -/****************************************************************************
17549 + if(survey_channel != 0)
17550 + {
17551 + //PAUSE 4-AC Queue when site_survey
17552 + //rtw_hal_get_hwreg(padapter, HW_VAR_TXPAUSE, (u8 *)(&val8));
17553 + //val8 |= 0x0f;
17554 + //rtw_hal_set_hwreg(padapter, HW_VAR_TXPAUSE, (u8 *)(&val8));
17555 +#ifdef CONFIG_CONCURRENT_MODE
17556 +#ifdef CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
17557 + if((padapter->pbuddy_adapter->mlmeextpriv.mlmext_info.state&0x03) == WIFI_FW_AP_STATE)
17558 + {
17559 + if( pmlmeinfo->scan_cnt == RTW_SCAN_NUM_OF_CH )
17560 + {
17561 + pmlmeinfo->scan_cnt = 0;
17562 + survey_channel = pbuddy_mlmeext->cur_channel;
17563 + stay_buddy_ch = 1;
17564 + }
17565 + else
17566 + {
17567 + if( pmlmeinfo->scan_cnt == 0 )
17568 + stay_buddy_ch = 2;
17569 + pmlmeinfo->scan_cnt++;
17570 + }
17571 + }
17572 +#endif //CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
17573 +#endif //CONFIG_CONCURRENT_MODE
17574 + if(pmlmeext->sitesurvey_res.channel_idx == 0)
17575 + {
17576 + set_channel_bwmode(padapter, survey_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
17577 + }
17578 + else
17579 + {
17580 + SelectChannel(padapter, survey_channel);
17581 + }
17582
17583 -Following are the functions to report events
17584 +#ifdef CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
17585 + if( stay_buddy_ch == 1 )
17586 + {
17587 + val8 = 0; //survey done
17588 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
17589
17590 -*****************************************************************************/
17591 + if(check_buddy_mlmeinfo_state(padapter, WIFI_FW_AP_STATE) &&
17592 + check_buddy_fwstate(padapter, _FW_LINKED))
17593 + {
17594 + update_beacon(padapter->pbuddy_adapter, 0, NULL, _TRUE);
17595 + }
17596 + }
17597 + else if( stay_buddy_ch == 2 )
17598 + {
17599 + val8 = 1; //under site survey
17600 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
17601 + }
17602 +#endif //CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
17603
17604 -void report_survey_event(_adapter *padapter, union recv_frame *precv_frame)
17605 -{
17606 - struct cmd_obj *pcmd_obj;
17607 - u8 *pevtcmd;
17608 - u32 cmdsz;
17609 - struct survey_event *psurvey_evt;
17610 - struct C2HEvent_Header *pc2h_evt_hdr;
17611 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
17612 - struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
17613 - //u8 *pframe = precv_frame->u.hdr.rx_data;
17614 - //uint len = precv_frame->u.hdr.len;
17615 + if(ScanType == SCAN_ACTIVE) //obey the channel plan setting...
17616 + {
17617 + #ifdef CONFIG_P2P
17618 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_SCAN) ||
17619 + rtw_p2p_chk_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH)
17620 + )
17621 + {
17622 + issue_probereq_p2p(padapter, NULL);
17623 + issue_probereq_p2p(padapter, NULL);
17624 + issue_probereq_p2p(padapter, NULL);
17625 + }
17626 + else
17627 + #endif //CONFIG_P2P
17628 + {
17629 + int i;
17630 + for(i=0;i<RTW_SSID_SCAN_AMOUNT;i++){
17631 + if(pmlmeext->sitesurvey_res.ssid[i].SsidLength) {
17632 + //todo: to issue two probe req???
17633 + issue_probereq(padapter, &(pmlmeext->sitesurvey_res.ssid[i]), NULL);
17634 + //rtw_msleep_os(SURVEY_TO>>1);
17635 + issue_probereq(padapter, &(pmlmeext->sitesurvey_res.ssid[i]), NULL);
17636 + } else {
17637 + break;
17638 + }
17639 + }
17640
17641 - if ((pcmd_obj = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj))) == NULL)
17642 - {
17643 - return;
17644 - }
17645 + if(pmlmeext->sitesurvey_res.scan_mode == SCAN_ACTIVE) {
17646 + //todo: to issue two probe req???
17647 + issue_probereq(padapter, NULL, NULL);
17648 + //rtw_msleep_os(SURVEY_TO>>1);
17649 + issue_probereq(padapter, NULL, NULL);
17650 + }
17651 + }
17652 + }
17653 +
17654 +#ifdef CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
17655 + if( stay_buddy_ch == 1 )
17656 + set_survey_timer(pmlmeext, pmlmeext->chan_scan_time * RTW_STAY_AP_CH_MILLISECOND );
17657 + else
17658 +#endif //CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
17659 + set_survey_timer(pmlmeext, pmlmeext->chan_scan_time);
17660
17661 - cmdsz = (sizeof(struct survey_event) + sizeof(struct C2HEvent_Header));
17662 - if ((pevtcmd = (u8*)rtw_zmalloc(cmdsz)) == NULL)
17663 - {
17664 - rtw_mfree((u8 *)pcmd_obj, sizeof(struct cmd_obj));
17665 - return;
17666 }
17667 + else
17668 + {
17669
17670 - _rtw_init_listhead(&pcmd_obj->list);
17671 + // channel number is 0 or this channel is not valid.
17672
17673 - pcmd_obj->cmdcode = GEN_CMD_CODE(_Set_MLME_EVT);
17674 - pcmd_obj->cmdsz = cmdsz;
17675 - pcmd_obj->parmbuf = pevtcmd;
17676 +#ifdef CONFIG_CONCURRENT_MODE
17677 + u8 cur_channel;
17678 + u8 cur_bwmode;
17679 + u8 cur_ch_offset;
17680 +
17681 + if (rtw_get_ch_setting_union(padapter, &cur_channel, &cur_bwmode, &cur_ch_offset) != 0)
17682 + {
17683 + if (0)
17684 + DBG_871X(FUNC_ADPT_FMT" back to linked union - ch:%u, bw:%u, offset:%u\n",
17685 + FUNC_ADPT_ARG(padapter), cur_channel, cur_bwmode, cur_ch_offset);
17686 + }
17687 + #ifdef CONFIG_IOCTL_CFG80211
17688 + else if(padapter->pbuddy_adapter
17689 + && pbuddy_adapter->wdinfo.driver_interface == DRIVER_CFG80211
17690 + && wdev_to_priv(pbuddy_adapter->rtw_wdev)->p2p_enabled
17691 + && rtw_p2p_chk_state(&pbuddy_adapter->wdinfo, P2P_STATE_LISTEN)
17692 + )
17693 + {
17694 + cur_channel = pbuddy_adapter->wdinfo.listen_channel;
17695 + cur_bwmode = pbuddy_mlmeext->cur_bwmode;
17696 + cur_ch_offset = pbuddy_mlmeext->cur_ch_offset;
17697 + }
17698 + #endif
17699 + else
17700 + {
17701 + cur_channel = pmlmeext->cur_channel;
17702 + cur_bwmode = pmlmeext->cur_bwmode;
17703 + cur_ch_offset = pmlmeext->cur_ch_offset;
17704 + }
17705 +#endif
17706
17707 - pcmd_obj->rsp = NULL;
17708 - pcmd_obj->rspsz = 0;
17709 +
17710 +#ifdef CONFIG_P2P
17711 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_SCAN) || rtw_p2p_chk_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH))
17712 + {
17713 + if( ( pwdinfo->rx_invitereq_info.scan_op_ch_only ) || ( pwdinfo->p2p_info.scan_op_ch_only ) )
17714 + {
17715 + // Set the find_phase_state_exchange_cnt to P2P_FINDPHASE_EX_CNT.
17716 + // This will let the following flow to run the scanning end.
17717 + rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_MAX);
17718 + }
17719 + #ifdef CONFIG_DBG_P2P
17720 + DBG_871X( "[%s] find phase exchange cnt = %d\n", __FUNCTION__, pwdinfo->find_phase_state_exchange_cnt );
17721 + #endif
17722 + }
17723
17724 - pc2h_evt_hdr = (struct C2HEvent_Header*)(pevtcmd);
17725 - pc2h_evt_hdr->len = sizeof(struct survey_event);
17726 - pc2h_evt_hdr->ID = GEN_EVT_CODE(_Survey);
17727 - pc2h_evt_hdr->seq = ATOMIC_INC_RETURN(&pmlmeext->event_seq);
17728 + if(rtw_p2p_findphase_ex_is_needed(pwdinfo))
17729 + {
17730 + // Set the P2P State to the listen state of find phase and set the current channel to the listen channel
17731 + set_channel_bwmode(padapter, pwdinfo->listen_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
17732 + rtw_p2p_set_state(pwdinfo, P2P_STATE_FIND_PHASE_LISTEN);
17733 + pmlmeext->sitesurvey_res.state = SCAN_DISABLE;
17734
17735 - psurvey_evt = (struct survey_event*)(pevtcmd + sizeof(struct C2HEvent_Header));
17736 + //turn on dynamic functions
17737 + Restore_DM_Func_Flag(padapter);
17738 + //Switch_DM_Func(padapter, DYNAMIC_FUNC_DIG|DYNAMIC_FUNC_HP|DYNAMIC_FUNC_SS, _TRUE);
17739 +
17740 + _set_timer( &pwdinfo->find_phase_timer, ( u32 ) ( ( u32 ) ( pwdinfo->listen_dwell ) * 100 ) );
17741 + }
17742 + else
17743 +#endif //CONFIG_P2P
17744 + {
17745
17746 - if (collect_bss_info(padapter, precv_frame, (WLAN_BSSID_EX *)&psurvey_evt->bss) == _FAIL)
17747 - {
17748 - rtw_mfree((u8 *)pcmd_obj, sizeof(struct cmd_obj));
17749 - rtw_mfree((u8 *)pevtcmd, cmdsz);
17750 - return;
17751 - }
17752 +#ifdef CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
17753 + pmlmeinfo->scan_cnt = 0;
17754 +#endif //CONFIG_DMP_STA_NODE_SCAN_UNDER_AP_MODE
17755
17756 - rtw_enqueue_cmd(pcmdpriv, pcmd_obj);
17757 +#ifdef CONFIG_ANTENNA_DIVERSITY
17758 + // 20100721:Interrupt scan operation here.
17759 + // For SW antenna diversity before link, it needs to switch to another antenna and scan again.
17760 + // It compares the scan result and select beter one to do connection.
17761 + if(rtw_hal_antdiv_before_linked(padapter))
17762 + {
17763 + pmlmeext->sitesurvey_res.bss_cnt = 0;
17764 + pmlmeext->sitesurvey_res.channel_idx = -1;
17765 + pmlmeext->chan_scan_time = SURVEY_TO /2;
17766 + set_survey_timer(pmlmeext, pmlmeext->chan_scan_time);
17767 + return;
17768 + }
17769 +#endif
17770
17771 - pmlmeext->sitesurvey_res.bss_cnt++;
17772 +#ifdef CONFIG_P2P
17773 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_SCAN) || rtw_p2p_chk_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH))
17774 + {
17775 + #ifdef CONFIG_CONCURRENT_MODE
17776 + if( pwdinfo->driver_interface == DRIVER_WEXT )
17777 + {
17778 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
17779 + {
17780 + _set_timer( &pwdinfo->ap_p2p_switch_timer, 500 );
17781 + }
17782 + }
17783 + rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
17784 + #else
17785 + rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
17786 + #endif
17787 + }
17788 + rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_NONE);
17789 +#endif //CONFIG_P2P
17790 +
17791 + pmlmeext->sitesurvey_res.state = SCAN_COMPLETE;
17792
17793 - return;
17794 + //switch back to the original channel
17795 + //SelectChannel(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset);
17796
17797 -}
17798 + {
17799 +#ifdef CONFIG_CONCURRENT_MODE
17800 + set_channel_bwmode(padapter, cur_channel, cur_ch_offset, cur_bwmode);
17801 +#else
17802 +#ifdef CONFIG_DUALMAC_CONCURRENT
17803 + dc_set_channel_bwmode_survey_done(padapter);
17804 +#else
17805 + if( pwdinfo->driver_interface == DRIVER_WEXT )
17806 + {
17807 + if( rtw_p2p_chk_state(pwdinfo, P2P_STATE_LISTEN) )
17808 + {
17809 + set_channel_bwmode(padapter, pwdinfo->listen_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
17810 + }
17811 + else
17812 + set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
17813 + }
17814 + else if( pwdinfo->driver_interface == DRIVER_CFG80211 )
17815 + {
17816 + set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
17817 + }
17818 +#endif //CONFIG_DUALMAC_CONCURRENT
17819 +#endif //CONFIG_CONCURRENT_MODE
17820 + }
17821
17822 -void report_surveydone_event(_adapter *padapter)
17823 -{
17824 - struct cmd_obj *pcmd_obj;
17825 - u8 *pevtcmd;
17826 - u32 cmdsz;
17827 - struct surveydone_event *psurveydone_evt;
17828 - struct C2HEvent_Header *pc2h_evt_hdr;
17829 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
17830 - struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
17831 + //flush 4-AC Queue after site_survey
17832 + //val8 = 0;
17833 + //rtw_hal_set_hwreg(padapter, HW_VAR_TXPAUSE, (u8 *)(&val8));
17834 +
17835 + val8 = 0; //survey done
17836 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
17837 +
17838 + //config MSR
17839 + Set_MSR(padapter, (pmlmeinfo->state & 0x3));
17840 +
17841 +
17842 +#ifdef CONFIG_IOCTL_CFG80211
17843 + if((wdev_to_priv(padapter->rtw_wdev))->p2p_enabled == _TRUE)
17844 + {
17845 + restore_initial_gain = 0;
17846 + }
17847 +#endif //CONFIG_IOCTL_CFG80211
17848 +
17849 + if(restore_initial_gain == 1)
17850 + {
17851 + initialgain = 0xff; //restore RX GAIN
17852 + rtw_hal_set_hwreg(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));
17853 + }
17854 +
17855 + //turn on dynamic functions
17856 + Restore_DM_Func_Flag(padapter);
17857 + //Switch_DM_Func(padapter, DYNAMIC_FUNC_DIG|DYNAMIC_FUNC_HP|DYNAMIC_FUNC_SS, _TRUE);
17858
17859 - if ((pcmd_obj = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj))) == NULL)
17860 - {
17861 - return;
17862 - }
17863 + if (is_client_associated_to_ap(padapter) == _TRUE)
17864 + {
17865 + issue_nulldata(padapter, NULL, 0, 3, 500);
17866 +
17867 +#ifdef CONFIG_CONCURRENT_MODE
17868 + if(is_client_associated_to_ap(padapter->pbuddy_adapter) == _TRUE)
17869 + {
17870 + DBG_871X("adapter is surveydone(buddy_adapter is linked), issue nulldata(pwrbit=0)\n");
17871 +
17872 + issue_nulldata(padapter->pbuddy_adapter, NULL, 0, 3, 500);
17873 + }
17874 +#endif
17875 + }
17876 +#ifdef CONFIG_CONCURRENT_MODE
17877 + else if(is_client_associated_to_ap(padapter->pbuddy_adapter) == _TRUE)
17878 + {
17879 + issue_nulldata(padapter->pbuddy_adapter, NULL, 0, 3, 500);
17880 + }
17881 +#endif
17882
17883 - cmdsz = (sizeof(struct surveydone_event) + sizeof(struct C2HEvent_Header));
17884 - if ((pevtcmd = (u8*)rtw_zmalloc(cmdsz)) == NULL)
17885 - {
17886 - rtw_mfree((u8 *)pcmd_obj, sizeof(struct cmd_obj));
17887 - return;
17888 - }
17889 + report_surveydone_event(padapter);
17890
17891 - _rtw_init_listhead(&pcmd_obj->list);
17892 + pmlmeext->chan_scan_time = SURVEY_TO;
17893 + pmlmeext->sitesurvey_res.state = SCAN_DISABLE;
17894
17895 - pcmd_obj->cmdcode = GEN_CMD_CODE(_Set_MLME_EVT);
17896 - pcmd_obj->cmdsz = cmdsz;
17897 - pcmd_obj->parmbuf = pevtcmd;
17898 + issue_action_BSSCoexistPacket(padapter);
17899 + issue_action_BSSCoexistPacket(padapter);
17900 + issue_action_BSSCoexistPacket(padapter);
17901
17902 - pcmd_obj->rsp = NULL;
17903 - pcmd_obj->rspsz = 0;
17904 + }
17905
17906 - pc2h_evt_hdr = (struct C2HEvent_Header*)(pevtcmd);
17907 - pc2h_evt_hdr->len = sizeof(struct surveydone_event);
17908 - pc2h_evt_hdr->ID = GEN_EVT_CODE(_SurveyDone);
17909 - pc2h_evt_hdr->seq = ATOMIC_INC_RETURN(&pmlmeext->event_seq);
17910 +#ifdef CONFIG_CONCURRENT_MODE
17911 + if(check_buddy_mlmeinfo_state(padapter, WIFI_FW_AP_STATE) &&
17912 + check_buddy_fwstate(padapter, _FW_LINKED))
17913 + {
17914
17915 - psurveydone_evt = (struct surveydone_event*)(pevtcmd + sizeof(struct C2HEvent_Header));
17916 - psurveydone_evt->bss_cnt = pmlmeext->sitesurvey_res.bss_cnt;
17917 + DBG_871X("survey done, current CH=%d, BW=%d, offset=%d\n", cur_channel, cur_bwmode, cur_ch_offset);
17918
17919 - DBG_871X("survey done event(%x)\n", psurveydone_evt->bss_cnt);
17920 + DBG_871X("restart pbuddy_adapter's beacon\n");
17921 +
17922 + update_beacon(padapter->pbuddy_adapter, 0, NULL, _TRUE);
17923 + }
17924 +#endif
17925
17926 - rtw_enqueue_cmd(pcmdpriv, pcmd_obj);
17927 + }
17928
17929 return;
17930
17931 }
17932
17933 -void report_join_res(_adapter *padapter, int res)
17934 +//collect bss info from Beacon and Probe response frames.
17935 +u8 collect_bss_info(_adapter *padapter, union recv_frame *precv_frame, WLAN_BSSID_EX *bssid)
17936 {
17937 - struct cmd_obj *pcmd_obj;
17938 - u8 *pevtcmd;
17939 - u32 cmdsz;
17940 - struct joinbss_event *pjoinbss_evt;
17941 - struct C2HEvent_Header *pc2h_evt_hdr;
17942 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
17943 + int i;
17944 + u32 len;
17945 + u8 *p;
17946 + u16 val16, subtype;
17947 + u8 *pframe = precv_frame->u.hdr.rx_data;
17948 + u32 packet_len = precv_frame->u.hdr.len;
17949 + struct registry_priv *pregistrypriv = &padapter->registrypriv;
17950 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
17951 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
17952 - struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
17953
17954 - if ((pcmd_obj = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj))) == NULL)
17955 - {
17956 - return;
17957 - }
17958 + len = packet_len - sizeof(struct rtw_ieee80211_hdr_3addr);
17959
17960 - cmdsz = (sizeof(struct joinbss_event) + sizeof(struct C2HEvent_Header));
17961 - if ((pevtcmd = (u8*)rtw_zmalloc(cmdsz)) == NULL)
17962 + if (len > MAX_IE_SZ)
17963 {
17964 - rtw_mfree((u8 *)pcmd_obj, sizeof(struct cmd_obj));
17965 - return;
17966 + //DBG_871X("IE too long for survey event\n");
17967 + return _FAIL;
17968 }
17969
17970 - _rtw_init_listhead(&pcmd_obj->list);
17971 -
17972 - pcmd_obj->cmdcode = GEN_CMD_CODE(_Set_MLME_EVT);
17973 - pcmd_obj->cmdsz = cmdsz;
17974 - pcmd_obj->parmbuf = pevtcmd;
17975 -
17976 - pcmd_obj->rsp = NULL;
17977 - pcmd_obj->rspsz = 0;
17978 + _rtw_memset(bssid, 0, sizeof(WLAN_BSSID_EX));
17979
17980 - pc2h_evt_hdr = (struct C2HEvent_Header*)(pevtcmd);
17981 - pc2h_evt_hdr->len = sizeof(struct joinbss_event);
17982 - pc2h_evt_hdr->ID = GEN_EVT_CODE(_JoinBss);
17983 - pc2h_evt_hdr->seq = ATOMIC_INC_RETURN(&pmlmeext->event_seq);
17984 + subtype = GetFrameSubType(pframe);
17985
17986 - pjoinbss_evt = (struct joinbss_event*)(pevtcmd + sizeof(struct C2HEvent_Header));
17987 - _rtw_memcpy((unsigned char *)(&(pjoinbss_evt->network.network)), &(pmlmeinfo->network), sizeof(WLAN_BSSID_EX));
17988 - pjoinbss_evt->network.join_res = pjoinbss_evt->network.aid = res;
17989 + if(subtype==WIFI_BEACON)
17990 + bssid->Reserved[0] = 1;
17991 + else
17992 + bssid->Reserved[0] = 0;
17993 +
17994 + bssid->Length = sizeof(WLAN_BSSID_EX) - MAX_IE_SZ + len;
17995
17996 - DBG_871X("report_join_res(%d)\n", res);
17997 + //below is to copy the information element
17998 + bssid->IELength = len;
17999 + _rtw_memcpy(bssid->IEs, (pframe + sizeof(struct rtw_ieee80211_hdr_3addr)), bssid->IELength);
18000
18001 + //get the signal strength
18002 + bssid->PhyInfo.SignalQuality = precv_frame->u.hdr.attrib.signal_qual;//in percentage
18003 + bssid->PhyInfo.SignalStrength = precv_frame->u.hdr.attrib.signal_strength;//in percentage
18004 + bssid->Rssi = precv_frame->u.hdr.attrib.RecvSignalPower; // in dBM.raw data
18005
18006 - rtw_joinbss_event_prehandle(padapter, (u8 *)&pjoinbss_evt->network);
18007 -
18008 +#ifdef CONFIG_ANTENNA_DIVERSITY
18009 + //rtw_hal_get_hwreg(padapter, HW_VAR_CURRENT_ANTENNA, (u8 *)(&bssid->PhyInfo.Optimum_antenna));
18010 + rtw_hal_get_def_var(padapter, HAL_DEF_CURRENT_ANTENNA, &bssid->PhyInfo.Optimum_antenna);
18011 +#endif
18012
18013 - rtw_enqueue_cmd(pcmdpriv, pcmd_obj);
18014 + // checking SSID
18015 + if ((p = rtw_get_ie(bssid->IEs + _FIXED_IE_LENGTH_, _SSID_IE_, &len, bssid->IELength - _FIXED_IE_LENGTH_)) == NULL)
18016 + {
18017 + DBG_871X("marc: cannot find SSID for survey event\n");
18018 + return _FAIL;
18019 + }
18020
18021 - return;
18022 + if (*(p + 1))
18023 + {
18024 + if (len > NDIS_802_11_LENGTH_SSID)
18025 + {
18026 + DBG_871X("%s()-%d: IE too long (%d) for survey event\n", __FUNCTION__, __LINE__, len);
18027 + return _FAIL;
18028 + }
18029 + _rtw_memcpy(bssid->Ssid.Ssid, (p + 2), *(p + 1));
18030 + bssid->Ssid.SsidLength = *(p + 1);
18031 + }
18032 + else
18033 + {
18034 + bssid->Ssid.SsidLength = 0;
18035 + }
18036
18037 -}
18038 + _rtw_memset(bssid->SupportedRates, 0, NDIS_802_11_LENGTH_RATES_EX);
18039
18040 -void report_del_sta_event(_adapter *padapter, unsigned char* MacAddr, unsigned short reason)
18041 -{
18042 - struct cmd_obj *pcmd_obj;
18043 - u8 *pevtcmd;
18044 - u32 cmdsz;
18045 - struct stadel_event *pdel_sta_evt;
18046 - struct C2HEvent_Header *pc2h_evt_hdr;
18047 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
18048 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
18049 - struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
18050 + //checking rate info...
18051 + i = 0;
18052 + p = rtw_get_ie(bssid->IEs + _FIXED_IE_LENGTH_, _SUPPORTEDRATES_IE_, &len, bssid->IELength - _FIXED_IE_LENGTH_);
18053 + if (p != NULL)
18054 + {
18055 + if (len > NDIS_802_11_LENGTH_RATES_EX)
18056 + {
18057 + DBG_871X("%s()-%d: IE too long (%d) for survey event\n", __FUNCTION__, __LINE__, len);
18058 + return _FAIL;
18059 + }
18060 + _rtw_memcpy(bssid->SupportedRates, (p + 2), len);
18061 + i = len;
18062 + }
18063
18064 - if ((pcmd_obj = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj))) == NULL)
18065 + p = rtw_get_ie(bssid->IEs + _FIXED_IE_LENGTH_, _EXT_SUPPORTEDRATES_IE_, &len, bssid->IELength - _FIXED_IE_LENGTH_);
18066 + if (p != NULL)
18067 {
18068 - return;
18069 + if (len > (NDIS_802_11_LENGTH_RATES_EX-i))
18070 + {
18071 + DBG_871X("%s()-%d: IE too long (%d) for survey event\n", __FUNCTION__, __LINE__, len);
18072 + return _FAIL;
18073 + }
18074 + _rtw_memcpy(bssid->SupportedRates + i, (p + 2), len);
18075 }
18076
18077 - cmdsz = (sizeof(struct stadel_event) + sizeof(struct C2HEvent_Header));
18078 - if ((pevtcmd = (u8*)rtw_zmalloc(cmdsz)) == NULL)
18079 + //todo:
18080 +#if 0
18081 + if (judge_network_type(bssid->SupportedRates, (len + i)) == WIRELESS_11B)
18082 {
18083 - rtw_mfree((u8 *)pcmd_obj, sizeof(struct cmd_obj));
18084 - return;
18085 + bssid->NetworkTypeInUse = Ndis802_11DS;
18086 + }
18087 + else
18088 +#endif
18089 + {
18090 + bssid->NetworkTypeInUse = Ndis802_11OFDM24;
18091 }
18092
18093 - _rtw_init_listhead(&pcmd_obj->list);
18094 + if (bssid->IELength < 12)
18095 + return _FAIL;
18096
18097 - pcmd_obj->cmdcode = GEN_CMD_CODE(_Set_MLME_EVT);
18098 - pcmd_obj->cmdsz = cmdsz;
18099 - pcmd_obj->parmbuf = pevtcmd;
18100 + // Checking for DSConfig
18101 + p = rtw_get_ie(bssid->IEs + _FIXED_IE_LENGTH_, _DSSET_IE_, &len, bssid->IELength - _FIXED_IE_LENGTH_);
18102
18103 - pcmd_obj->rsp = NULL;
18104 - pcmd_obj->rspsz = 0;
18105 + bssid->Configuration.DSConfig = 0;
18106 + bssid->Configuration.Length = 0;
18107
18108 - pc2h_evt_hdr = (struct C2HEvent_Header*)(pevtcmd);
18109 - pc2h_evt_hdr->len = sizeof(struct stadel_event);
18110 - pc2h_evt_hdr->ID = GEN_EVT_CODE(_DelSTA);
18111 - pc2h_evt_hdr->seq = ATOMIC_INC_RETURN(&pmlmeext->event_seq);
18112 + if (p)
18113 + {
18114 + bssid->Configuration.DSConfig = *(p + 2);
18115 + }
18116 + else
18117 + {// In 5G, some ap do not have DSSET IE
18118 + // checking HT info for channel
18119 + p = rtw_get_ie(bssid->IEs + _FIXED_IE_LENGTH_, _HT_ADD_INFO_IE_, &len, bssid->IELength - _FIXED_IE_LENGTH_);
18120 + if(p)
18121 + {
18122 + struct HT_info_element *HT_info = (struct HT_info_element *)(p + 2);
18123 + bssid->Configuration.DSConfig = HT_info->primary_channel;
18124 + }
18125 + else
18126 + { // use current channel
18127 + bssid->Configuration.DSConfig = rtw_get_oper_ch(padapter);
18128 + }
18129 + }
18130
18131 - pdel_sta_evt = (struct stadel_event*)(pevtcmd + sizeof(struct C2HEvent_Header));
18132 - _rtw_memcpy((unsigned char *)(&(pdel_sta_evt->macaddr)), MacAddr, ETH_ALEN);
18133 - _rtw_memcpy((unsigned char *)(pdel_sta_evt->rsvd),(unsigned char *)(&reason),2);
18134 + _rtw_memcpy(&bssid->Configuration.BeaconPeriod, rtw_get_beacon_interval_from_ie(bssid->IEs), 2);
18135 + bssid->Configuration.BeaconPeriod = le32_to_cpu(bssid->Configuration.BeaconPeriod);
18136
18137 - DBG_871X("report_del_sta_event: delete STA\n");
18138 + val16 = rtw_get_capability((WLAN_BSSID_EX *)bssid);
18139
18140 - rtw_enqueue_cmd(pcmdpriv, pcmd_obj);
18141 + if (val16 & BIT(0))
18142 + {
18143 + bssid->InfrastructureMode = Ndis802_11Infrastructure;
18144 + _rtw_memcpy(bssid->MacAddress, GetAddr2Ptr(pframe), ETH_ALEN);
18145 + }
18146 + else
18147 + {
18148 + bssid->InfrastructureMode = Ndis802_11IBSS;
18149 + _rtw_memcpy(bssid->MacAddress, GetAddr3Ptr(pframe), ETH_ALEN);
18150 + }
18151
18152 - return;
18153 -}
18154 + if (val16 & BIT(4))
18155 + bssid->Privacy = 1;
18156 + else
18157 + bssid->Privacy = 0;
18158
18159 -void report_add_sta_event(_adapter *padapter, unsigned char* MacAddr, int cam_idx)
18160 -{
18161 - struct cmd_obj *pcmd_obj;
18162 - u8 *pevtcmd;
18163 - u32 cmdsz;
18164 - struct stassoc_event *padd_sta_evt;
18165 - struct C2HEvent_Header *pc2h_evt_hdr;
18166 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
18167 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
18168 - struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
18169 + bssid->Configuration.ATIMWindow = 0;
18170
18171 - if ((pcmd_obj = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj))) == NULL)
18172 - {
18173 - return;
18174 + //20/40 BSS Coexistence check
18175 + if((pregistrypriv->wifi_spec==1) && (_FALSE == pmlmeinfo->bwmode_updated))
18176 + {
18177 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
18178 +
18179 + p = rtw_get_ie(bssid->IEs + _FIXED_IE_LENGTH_, _HT_CAPABILITY_IE_, &len, bssid->IELength - _FIXED_IE_LENGTH_);
18180 + if(p && len>0)
18181 + {
18182 + struct HT_caps_element *pHT_caps;
18183 + pHT_caps = (struct HT_caps_element *)(p + 2);
18184 +
18185 + if(pHT_caps->u.HT_cap_element.HT_caps_info&BIT(14))
18186 + {
18187 + pmlmepriv->num_FortyMHzIntolerant++;
18188 + }
18189 + }
18190 + else
18191 + {
18192 + pmlmepriv->num_sta_no_ht++;
18193 + }
18194 +
18195 }
18196
18197 - cmdsz = (sizeof(struct stassoc_event) + sizeof(struct C2HEvent_Header));
18198 - if ((pevtcmd = (u8*)rtw_zmalloc(cmdsz)) == NULL)
18199 +#ifdef CONFIG_INTEL_WIDI
18200 + //process_intel_widi_query_or_tigger(padapter, bssid);
18201 + if(process_intel_widi_query_or_tigger(padapter, bssid))
18202 {
18203 - rtw_mfree((u8 *)pcmd_obj, sizeof(struct cmd_obj));
18204 - return;
18205 + return _FAIL;
18206 }
18207 +#endif // CONFIG_INTEL_WIDI
18208
18209 - _rtw_init_listhead(&pcmd_obj->list);
18210 -
18211 - pcmd_obj->cmdcode = GEN_CMD_CODE(_Set_MLME_EVT);
18212 - pcmd_obj->cmdsz = cmdsz;
18213 - pcmd_obj->parmbuf = pevtcmd;
18214 -
18215 - pcmd_obj->rsp = NULL;
18216 - pcmd_obj->rspsz = 0;
18217 -
18218 - pc2h_evt_hdr = (struct C2HEvent_Header*)(pevtcmd);
18219 - pc2h_evt_hdr->len = sizeof(struct stassoc_event);
18220 - pc2h_evt_hdr->ID = GEN_EVT_CODE(_AddSTA);
18221 - pc2h_evt_hdr->seq = ATOMIC_INC_RETURN(&pmlmeext->event_seq);
18222 -
18223 - padd_sta_evt = (struct stassoc_event*)(pevtcmd + sizeof(struct C2HEvent_Header));
18224 - _rtw_memcpy((unsigned char *)(&(padd_sta_evt->macaddr)), MacAddr, ETH_ALEN);
18225 - padd_sta_evt->cam_id = cam_idx;
18226 -
18227 - DBG_871X("report_add_sta_event: add STA\n");
18228 + #if defined(DBG_RX_SIGNAL_DISPLAY_SSID_MONITORED) & 1
18229 + if(strcmp(bssid->Ssid.Ssid, DBG_RX_SIGNAL_DISPLAY_SSID_MONITORED) == 0) {
18230 + DBG_871X("Receiving %s("MAC_FMT", DSConfig:%u) from ch%u with ss:%3u, sq:%3u, RawRSSI:%3ld\n"
18231 + , bssid->Ssid.Ssid, MAC_ARG(bssid->MacAddress), bssid->Configuration.DSConfig
18232 + , rtw_get_oper_ch(padapter)
18233 + , bssid->PhyInfo.SignalStrength, bssid->PhyInfo.SignalQuality, bssid->Rssi
18234 + );
18235 + }
18236 + #endif
18237
18238 - rtw_enqueue_cmd(pcmdpriv, pcmd_obj);
18239 + // mark bss info receving from nearby channel as SignalQuality 101
18240 + if(bssid->Configuration.DSConfig != rtw_get_oper_ch(padapter))
18241 + {
18242 + bssid->PhyInfo.SignalQuality= 101;
18243 + }
18244
18245 - return;
18246 + return _SUCCESS;
18247 }
18248
18249 -
18250 -/****************************************************************************
18251 -
18252 -Following are the event callback functions
18253 -
18254 -*****************************************************************************/
18255 -
18256 -//for sta/adhoc mode
18257 -void update_sta_info(_adapter *padapter, struct sta_info *psta)
18258 +void start_create_ibss(_adapter* padapter)
18259 {
18260 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
18261 + unsigned short caps;
18262 + u8 val8;
18263 + u8 join_type;
18264 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
18265 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
18266 + WLAN_BSSID_EX *pnetwork = (WLAN_BSSID_EX*)(&(pmlmeinfo->network));
18267 + pmlmeext->cur_channel = (u8)pnetwork->Configuration.DSConfig;
18268 + pmlmeinfo->bcn_interval = get_beacon_interval(pnetwork);
18269
18270 - //ERP
18271 - VCS_update(padapter, psta);
18272 -
18273 + //update wireless mode
18274 + update_wireless_mode(padapter);
18275
18276 - //HT
18277 - if(pmlmepriv->htpriv.ht_option)
18278 + //udpate capability
18279 + caps = rtw_get_capability((WLAN_BSSID_EX *)pnetwork);
18280 + update_capinfo(padapter, caps);
18281 + if(caps&cap_IBSS)//adhoc master
18282 {
18283 - psta->htpriv.ht_option = _TRUE;
18284 -
18285 - psta->htpriv.ampdu_enable = pmlmepriv->htpriv.ampdu_enable;
18286 + //set_opmode_cmd(padapter, adhoc);//removed
18287
18288 - if (support_short_GI(padapter, &(pmlmeinfo->HT_caps)))
18289 - psta->htpriv.sgi = _TRUE;
18290 + val8 = 0xcf;
18291 + rtw_hal_set_hwreg(padapter, HW_VAR_SEC_CFG, (u8 *)(&val8));
18292
18293 - psta->qos_option = _TRUE;
18294 -
18295 - }
18296 - else
18297 - {
18298 - psta->htpriv.ht_option = _FALSE;
18299 + //switch channel
18300 + //SelectChannel(padapter, pmlmeext->cur_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE);
18301 + set_channel_bwmode(padapter, pmlmeext->cur_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
18302
18303 - psta->htpriv.ampdu_enable = _FALSE;
18304 -
18305 - psta->htpriv.sgi = _FALSE;
18306 + beacon_timing_control(padapter);
18307
18308 - psta->qos_option = _FALSE;
18309 + //set msr to WIFI_FW_ADHOC_STATE
18310 + pmlmeinfo->state = WIFI_FW_ADHOC_STATE;
18311 + Set_MSR(padapter, (pmlmeinfo->state & 0x3));
18312
18313 - }
18314 -
18315 - psta->htpriv.bwmode = pmlmeext->cur_bwmode;
18316 - psta->htpriv.ch_offset = pmlmeext->cur_ch_offset;
18317 -
18318 - psta->htpriv.agg_enable_bitmap = 0x0;//reset
18319 - psta->htpriv.candidate_tid_bitmap = 0x0;//reset
18320 -
18321 + //issue beacon
18322 + if(send_beacon(padapter)==_FAIL)
18323 + {
18324 + RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("issuing beacon frame fail....\n"));
18325
18326 - //QoS
18327 - if(pmlmepriv->qospriv.qos_option)
18328 - psta->qos_option = _TRUE;
18329 -
18330 + report_join_res(padapter, -1);
18331 + pmlmeinfo->state = WIFI_FW_NULL_STATE;
18332 + }
18333 + else
18334 + {
18335 + rtw_hal_set_hwreg(padapter, HW_VAR_BSSID, padapter->registrypriv.dev_network.MacAddress);
18336 + join_type = 0;
18337 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_JOIN, (u8 *)(&join_type));
18338
18339 - psta->state = _FW_LINKED;
18340 + report_join_res(padapter, 1);
18341 + pmlmeinfo->state |= WIFI_FW_ASSOC_SUCCESS;
18342 + }
18343 + }
18344 + else
18345 + {
18346 + DBG_871X("start_create_ibss, invalid cap:%x\n", caps);
18347 + return;
18348 + }
18349
18350 }
18351
18352 -u8 null_addr[ETH_ALEN]= {0,0,0,0,0,0};
18353 -
18354 -void mlmeext_joinbss_event_callback(_adapter *padapter, int join_res)
18355 +void start_clnt_join(_adapter* padapter)
18356 {
18357 - struct sta_info *psta, *psta_bmc;
18358 + unsigned short caps;
18359 + u8 val8;
18360 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
18361 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
18362 - WLAN_BSSID_EX *cur_network = &(pmlmeinfo->network);
18363 - struct sta_priv *pstapriv = &padapter->stapriv;
18364 - u8 join_type, init_rts_rate;
18365 + WLAN_BSSID_EX *pnetwork = (WLAN_BSSID_EX*)(&(pmlmeinfo->network));
18366
18367 - if(join_res < 0)
18368 - {
18369 - join_type = 1;
18370 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_JOIN, (u8 *)(&join_type));
18371 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_BSSID, null_addr);
18372 - return;
18373 - }
18374 + //update wireless mode
18375 + update_wireless_mode(padapter);
18376
18377 - if((pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE)
18378 + //udpate capability
18379 + caps = rtw_get_capability((WLAN_BSSID_EX *)pnetwork);
18380 + update_capinfo(padapter, caps);
18381 + if (caps&cap_ESS)
18382 {
18383 - //for bc/mc
18384 - psta_bmc = rtw_get_bcmc_stainfo(padapter);
18385 - if(psta_bmc)
18386 - {
18387 - pmlmeinfo->FW_sta_info[psta_bmc->mac_id].psta = psta_bmc;
18388 - update_bmc_sta_support_rate(padapter, psta_bmc->mac_id);
18389 - Update_RA_Entry(padapter, psta_bmc->mac_id);
18390 - }
18391 - }
18392 -
18393 -
18394 - //turn on dynamic functions
18395 - Switch_DM_Func(padapter, DYNAMIC_FUNC_DIG|DYNAMIC_FUNC_HP|DYNAMIC_FUNC_SS, _TRUE);
18396 + Set_MSR(padapter, WIFI_FW_STATION_STATE);
18397
18398 - // update IOT-releated issue
18399 - update_IOT_info(padapter);
18400 + val8 = (pmlmeinfo->auth_algo == dot11AuthAlgrthm_8021X)? 0xcc: 0xcf;
18401 + rtw_hal_set_hwreg(padapter, HW_VAR_SEC_CFG, (u8 *)(&val8));
18402
18403 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_BASIC_RATE, cur_network->SupportedRates);
18404 + #ifdef CONFIG_DEAUTH_BEFORE_CONNECT
18405 + // Because of AP's not receiving deauth before
18406 + // AP may: 1)not response auth or 2)deauth us after link is complete
18407 + // issue deauth before issuing auth to deal with the situation
18408
18409 - //BCN interval
18410 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_BEACON_INTERVAL, (u8 *)(&pmlmeinfo->bcn_interval));
18411 + // Commented by Albert 2012/07/21
18412 + // For the Win8 P2P connection, it will be hard to have a successful connection if this Wi-Fi doesn't connect to it.
18413 + {
18414 + #ifdef CONFIG_P2P
18415 + _queue *queue = &(padapter->mlmepriv.scanned_queue);
18416 + _list *head = get_list_head(queue);
18417 + _list *pos = get_next(head);
18418 + struct wlan_network *scanned = NULL;
18419 + u8 ie_offset = 0;
18420 + _irqL irqL;
18421 + bool has_p2p_ie = _FALSE;
18422 +
18423 + _enter_critical_bh(&(padapter->mlmepriv.scanned_queue.lock), &irqL);
18424 +
18425 + for (pos = get_next(head);!rtw_end_of_queue_search(head, pos); pos = get_next(pos)) {
18426 +
18427 + scanned = LIST_CONTAINOR(pos, struct wlan_network, list);
18428 + if(scanned==NULL)
18429 + rtw_warn_on(1);
18430 +
18431 + if (_rtw_memcmp(&(scanned->network.Ssid), &(pnetwork->Ssid), sizeof(NDIS_802_11_SSID)) == _TRUE
18432 + && _rtw_memcmp(scanned->network.MacAddress, pnetwork->MacAddress, sizeof(NDIS_802_11_MAC_ADDRESS)) == _TRUE
18433 + ) {
18434 + ie_offset = (scanned->network.Reserved[0] == 2? 0:12);
18435 + if (rtw_get_p2p_ie(scanned->network.IEs+ie_offset, scanned->network.IELength-ie_offset, NULL, NULL))
18436 + has_p2p_ie = _TRUE;
18437 + break;
18438 + }
18439 + }
18440 +
18441 + _exit_critical_bh(&(padapter->mlmepriv.scanned_queue.lock), &irqL);
18442
18443 - //udpate capability
18444 - update_capinfo(padapter, pmlmeinfo->capability);
18445 + if (scanned == NULL || rtw_end_of_queue_search(head, pos) || has_p2p_ie == _FALSE)
18446 + #endif /* CONFIG_P2P */
18447 + issue_deauth_ex(padapter, pnetwork->MacAddress, WLAN_REASON_DEAUTH_LEAVING, 5, 100);
18448 + }
18449 + #endif /* CONFIG_DEAUTH_BEFORE_CONNECT */
18450
18451 - //WMM, Update EDCA param
18452 - WMMOnAssocRsp(padapter);
18453 + //here wait for receiving the beacon to start auth
18454 + //and enable a timer
18455 + set_link_timer(pmlmeext, decide_wait_for_beacon_timeout(pmlmeinfo->bcn_interval));
18456
18457 - //HT
18458 - HTOnAssocRsp(padapter);
18459 + pmlmeinfo->state = WIFI_FW_AUTH_NULL | WIFI_FW_STATION_STATE;
18460 + }
18461 + else if (caps&cap_IBSS) //adhoc client
18462 + {
18463 + Set_MSR(padapter, WIFI_FW_ADHOC_STATE);
18464
18465 + val8 = 0xcf;
18466 + rtw_hal_set_hwreg(padapter, HW_VAR_SEC_CFG, (u8 *)(&val8));
18467
18468 - //Set cur_channel&cur_bwmode&cur_ch_offset
18469 - set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
18470 + //switch channel
18471 + set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
18472
18473 + beacon_timing_control(padapter);
18474
18475 - psta = rtw_get_stainfo(pstapriv, cur_network->MacAddress);
18476 - if (psta) //only for infra. mode
18477 - {
18478 - pmlmeinfo->FW_sta_info[psta->mac_id].psta = psta;
18479 + pmlmeinfo->state = WIFI_FW_ADHOC_STATE;
18480
18481 - //DBG_871X("set_sta_rate\n");
18482 -
18483 - //set per sta rate after updating HT cap.
18484 - set_sta_rate(padapter, psta);
18485 + report_join_res(padapter, 1);
18486 }
18487 -
18488 - join_type = 2;
18489 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_JOIN, (u8 *)(&join_type));
18490 -
18491 - if((pmlmeinfo->state&0x03) == WIFI_FW_STATION_STATE)
18492 + else
18493 {
18494 - // correcting TSF
18495 - correct_TSF(padapter, pmlmeext);
18496 -
18497 - //set_link_timer(pmlmeext, DISCONNECT_TO);
18498 + //DBG_871X("marc: invalid cap:%x\n", caps);
18499 + return;
18500 }
18501
18502 -#ifdef CONFIG_LPS
18503 - rtw_lps_ctrl_wk_cmd(padapter, LPS_CTRL_CONNECT, 0);
18504 -#endif
18505 -
18506 - DBG_871X("=>%s\n", __FUNCTION__);
18507 -
18508 }
18509
18510 -void mlmeext_sta_add_event_callback(_adapter *padapter, struct sta_info *psta)
18511 +void start_clnt_auth(_adapter* padapter)
18512 {
18513 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
18514 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
18515 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
18516 - u8 join_type;
18517
18518 - DBG_871X("%s\n", __FUNCTION__);
18519 + _cancel_timer_ex(&pmlmeext->link_timer);
18520
18521 - if((pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE)
18522 - {
18523 - if(pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS)//adhoc master or sta_count>1
18524 - {
18525 - //nothing to do
18526 - }
18527 - else//adhoc client
18528 - {
18529 - //update TSF Value
18530 - //update_TSF(pmlmeext, pframe, len);
18531 + pmlmeinfo->state &= (~WIFI_FW_AUTH_NULL);
18532 + pmlmeinfo->state |= WIFI_FW_AUTH_STATE;
18533
18534 - // correcting TSF
18535 - correct_TSF(padapter, pmlmeext);
18536 + pmlmeinfo->auth_seq = 1;
18537 + pmlmeinfo->reauth_count = 0;
18538 + pmlmeinfo->reassoc_count = 0;
18539 + pmlmeinfo->link_count = 0;
18540 + pmlmeext->retry = 0;
18541
18542 - //start beacon
18543 - if(send_beacon(padapter)==_FAIL)
18544 - {
18545 - pmlmeinfo->FW_sta_info[psta->mac_id].status = 0;
18546
18547 - pmlmeinfo->state ^= WIFI_FW_ADHOC_STATE;
18548 + issue_auth(padapter, NULL, 0);
18549 +
18550 + set_link_timer(pmlmeext, REAUTH_TO);
18551
18552 - return;
18553 - }
18554 +}
18555
18556 - pmlmeinfo->state |= WIFI_FW_ASSOC_SUCCESS;
18557 -
18558 - }
18559
18560 - join_type = 2;
18561 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_JOIN, (u8 *)(&join_type));
18562 - }
18563 +void start_clnt_assoc(_adapter* padapter)
18564 +{
18565 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
18566 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
18567
18568 - pmlmeinfo->FW_sta_info[psta->mac_id].psta = psta;
18569 + _cancel_timer_ex(&pmlmeext->link_timer);
18570
18571 - //rate radaptive
18572 - Update_RA_Entry(padapter, psta->mac_id);
18573 + pmlmeinfo->state &= (~(WIFI_FW_AUTH_NULL | WIFI_FW_AUTH_STATE));
18574 + pmlmeinfo->state |= (WIFI_FW_AUTH_SUCCESS | WIFI_FW_ASSOC_STATE);
18575
18576 - //update adhoc sta_info
18577 - update_sta_info(padapter, psta);
18578 + issue_assocreq(padapter);
18579
18580 + set_link_timer(pmlmeext, REASSOC_TO);
18581 }
18582
18583 -void mlmeext_sta_del_event_callback(_adapter *padapter)
18584 +unsigned int receive_disconnect(_adapter *padapter, unsigned char *MacAddr, unsigned short reason)
18585 {
18586 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
18587 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
18588
18589 - if (is_client_associated_to_ap(padapter) || is_IBSS_empty(padapter))
18590 + //check A3
18591 + if (!(_rtw_memcmp(MacAddr, get_my_bssid(&pmlmeinfo->network), ETH_ALEN)))
18592 + return _SUCCESS;
18593 +
18594 + DBG_871X("%s\n", __FUNCTION__);
18595 +
18596 + if((pmlmeinfo->state&0x03) == WIFI_FW_STATION_STATE)
18597 {
18598 - //set_opmode_cmd(padapter, infra_client_with_mlme);
18599 + if (pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS)
18600 + {
18601 + pmlmeinfo->state = WIFI_FW_NULL_STATE;
18602 + report_del_sta_event(padapter, MacAddr, reason);
18603
18604 - //switch to the 20M Hz mode after disconnect
18605 - pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
18606 - pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
18607 + }
18608 + else if (pmlmeinfo->state & WIFI_FW_LINKING_STATE)
18609 + {
18610 + pmlmeinfo->state = WIFI_FW_NULL_STATE;
18611 + report_join_res(padapter, -2);
18612 + }
18613 + }
18614
18615 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_DISCONNECT, 0);
18616 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_BSSID, null_addr);
18617 + return _SUCCESS;
18618 +}
18619
18620 - //SelectChannel(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset);
18621 - set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
18622 - flush_all_cam_entry(padapter);
18623 +#ifdef CONFIG_80211D
18624 +static void process_80211d(PADAPTER padapter, WLAN_BSSID_EX *bssid)
18625 +{
18626 + struct registry_priv *pregistrypriv;
18627 + struct mlme_ext_priv *pmlmeext;
18628 + RT_CHANNEL_INFO *chplan_new;
18629 + u8 channel;
18630 + u8 i;
18631
18632 - pmlmeinfo->state = WIFI_FW_NULL_STATE;
18633
18634 - //set MSR to no link state
18635 - Set_NETYPE0_MSR(padapter, _HW_STATE_NOLINK_);
18636 + pregistrypriv = &padapter->registrypriv;
18637 + pmlmeext = &padapter->mlmeextpriv;
18638
18639 - _cancel_timer_ex(&pmlmeext->link_timer);
18640 + // Adjust channel plan by AP Country IE
18641 + if (pregistrypriv->enable80211d &&
18642 + (!pmlmeext->update_channel_plan_by_ap_done))
18643 + {
18644 + u8 *ie, *p;
18645 + u32 len;
18646 + RT_CHANNEL_PLAN chplan_ap;
18647 + RT_CHANNEL_INFO chplan_sta[MAX_CHANNEL_NUM];
18648 + u8 country[4];
18649 + u8 fcn; // first channel number
18650 + u8 noc; // number of channel
18651 + u8 j, k;
18652
18653 - }
18654 + ie = rtw_get_ie(bssid->IEs + _FIXED_IE_LENGTH_, _COUNTRY_IE_, &len, bssid->IELength - _FIXED_IE_LENGTH_);
18655 + if (!ie) return;
18656 + if (len < 6) return;
18657
18658 -}
18659 + ie += 2;
18660 + p = ie;
18661 + ie += len;
18662
18663 -/****************************************************************************
18664 + _rtw_memset(country, 0, 4);
18665 + _rtw_memcpy(country, p, 3);
18666 + p += 3;
18667 + RT_TRACE(_module_rtl871x_mlme_c_, _drv_notice_,
18668 + ("%s: 802.11d country=%s\n", __FUNCTION__, country));
18669
18670 -Following are the functions for the timer handlers
18671 + i = 0;
18672 + while ((ie - p) >= 3)
18673 + {
18674 + fcn = *(p++);
18675 + noc = *(p++);
18676 + p++;
18677
18678 -*****************************************************************************/
18679 + for (j = 0; j < noc; j++)
18680 + {
18681 + if (fcn <= 14) channel = fcn + j; // 2.4 GHz
18682 + else channel = fcn + j*4; // 5 GHz
18683
18684 -void _linked_rx_signal_strehgth_display(_adapter *padapter)
18685 -{
18686 - int UndecoratedSmoothedPWDB;
18687 - DBG_8192C("============ linked status check ===================\n");
18688 - DBG_8192C("pathA Rx SNRdb:%d, pathB Rx SNRdb:%d\n",padapter->recvpriv.RxSNRdB[0],padapter->recvpriv.RxSNRdB[1]);
18689 - DBG_8192C("pathA Rx RSSI:%d,pathB Rx RSSI:%d\n",padapter->recvpriv.RxRssi[0],padapter->recvpriv.RxRssi[1]);
18690 -
18691 - DBG_8192C("pathA Rx PWDB:%d\n",padapter->recvpriv.rxpwdb);
18692 - padapter->HalFunc.GetHalDefVarHandler(padapter, HAL_DEF_UNDERCORATEDSMOOTHEDPWDB, &UndecoratedSmoothedPWDB);
18693 - DBG_8192C("UndecoratedSmoothedPWDB:%d\n",UndecoratedSmoothedPWDB);
18694 - DBG_8192C("Rx RSSI:%d\n",padapter->recvpriv.rssi);
18695 - DBG_8192C("Rx Signal_strength:%d\n",padapter->recvpriv.signal_strength);
18696 - DBG_8192C("Rx Signal_qual:%d \n",padapter->recvpriv.signal_qual);
18697 - DBG_8192C("============ linked status check ===================\n");
18698 - DBG_8192C(" DIG PATH-A(0x%02x), PATH-B(0x%02x)\n",rtw_read8(padapter,0xc50),rtw_read8(padapter,0xc58));
18699 - DBG_8192C(" OFDM -Alarm DA2(0x%04x),DA4(0x%04x),DA6(0x%04x),DA8(0x%04x)\n",
18700 - rtw_read16(padapter,0xDA2),rtw_read16(padapter,0xDA4),rtw_read16(padapter,0xDA6),rtw_read16(padapter,0xDA8));
18701 + chplan_ap.Channel[i++] = channel;
18702 + }
18703 + }
18704 + chplan_ap.Len = i;
18705
18706 - DBG_8192C(" CCK -Alarm A5B(0x%02x),A5C(0x%02x)\n",rtw_read8(padapter,0xA5B),rtw_read8(padapter,0xA5C));
18707 - DBG_8192C(" FalseAlmCnt_all(%d)\n",padapter->recvpriv.FalseAlmCnt_all);
18708 -}
18709 +#ifdef CONFIG_DEBUG_RTL871X
18710 +#ifdef PLATFORM_LINUX
18711 + i = 0;
18712 + printk("%s: AP[%s] channel plan {", __func__, bssid->Ssid.Ssid);
18713 + while ((i < chplan_ap.Len) && (chplan_ap.Channel[i] != 0))
18714 + {
18715 + printk("%02d,", chplan_ap.Channel[i]);
18716 + i++;
18717 + }
18718 + printk("}\n");
18719 +#endif
18720 +#endif
18721
18722 -void linked_status_chk(_adapter *padapter)
18723 -{
18724 - u32 i;
18725 - struct sta_info *psta;
18726 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
18727 - struct recv_priv *precvpriv = &(padapter->recvpriv);
18728 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
18729 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
18730 - struct sta_priv *pstapriv = &padapter->stapriv;
18731 - struct registry_priv *pregistrypriv = &padapter->registrypriv;
18732 + _rtw_memcpy(chplan_sta, pmlmeext->channel_set, sizeof(chplan_sta));
18733 +#ifdef CONFIG_DEBUG_RTL871X
18734 +#ifdef PLATFORM_LINUX
18735 + i = 0;
18736 + printk("%s: STA channel plan {", __func__);
18737 + while ((i < MAX_CHANNEL_NUM) && (chplan_sta[i].ChannelNum != 0))
18738 + {
18739 + printk("%02d(%c),", chplan_sta[i].ChannelNum, chplan_sta[i].ScanType==SCAN_PASSIVE?'p':'a');
18740 + i++;
18741 + }
18742 + printk("}\n");
18743 +#endif
18744 +#endif
18745
18746 - if(padapter->bRxRSSIDisplay)
18747 - _linked_rx_signal_strehgth_display(padapter);
18748 + _rtw_memset(pmlmeext->channel_set, 0, sizeof(pmlmeext->channel_set));
18749 + chplan_new = pmlmeext->channel_set;
18750
18751 - if (is_client_associated_to_ap(padapter))
18752 - {
18753 - //linked infrastructure client mode
18754 - if ((psta = rtw_get_stainfo(pstapriv, pmlmeinfo->network.MacAddress)) != NULL)
18755 + i = j = k = 0;
18756 + if (pregistrypriv->wireless_mode & WIRELESS_11G)
18757 {
18758 - #ifdef DBG_EXPIRATION_CHK
18759 - DBG_871X("%s rx:"STA_PKTS_FMT", BI:%u, retry:%u\n"
18760 - , __FUNCTION__
18761 - , STA_RX_PKTS_ARG(psta)
18762 - , pmlmeinfo->bcn_interval
18763 - , pmlmeext->retry
18764 - );
18765 - #endif
18766 + do {
18767 + if ((i == MAX_CHANNEL_NUM) ||
18768 + (chplan_sta[i].ChannelNum == 0) ||
18769 + (chplan_sta[i].ChannelNum > 14))
18770 + break;
18771
18772 - /*to monitor whether the AP is alive or not*/
18773 - if (sta_last_rx_pkts(psta) == sta_rx_pkts(psta))
18774 - {
18775 - // Commented by Albert 2010/07/21
18776 - // In this case, there is no any rx packet received by driver.
18777 + if ((j == chplan_ap.Len) || (chplan_ap.Channel[j] > 14))
18778 + break;
18779
18780 - #ifdef DBG_ROAMING_TEST
18781 - if(pmlmeext->retry<1)
18782 - #else
18783 - if(pmlmeext->retry<8)// Alter the retry limit to 8
18784 - #endif
18785 + if (chplan_sta[i].ChannelNum == chplan_ap.Channel[j])
18786 {
18787 - if(pmlmeext->retry==0)
18788 - {
18789 - #ifdef DBG_CONFIG_ERROR_DETECT
18790 - if(padapter->HalFunc.sreset_linked_status_check)
18791 - padapter->HalFunc.sreset_linked_status_check(padapter);
18792 - #endif
18793 -
18794 - // In order to know the AP's current state, try to send the probe request
18795 - // to trigger the AP to send the probe response.
18796 - #ifdef CONFIG_P2P
18797 - if(!rtw_p2p_chk_state(&padapter->wdinfo, P2P_STATE_NONE)) {
18798 - #ifdef DBG_EXPIRATION_CHK
18799 - DBG_871X("issue_probereq_p2p to trigger probersp, retry=%d\n", pmlmeext->retry);
18800 - #endif
18801 - issue_probereq_p2p(padapter);
18802 - } else
18803 - #endif
18804 - {
18805 - #ifdef DBG_EXPIRATION_CHK
18806 - DBG_871X("issue_probereq to trigger probersp, retry=%d\n", pmlmeext->retry);
18807 - #endif
18808 - issue_probereq(padapter, &(pmlmeinfo->network.Ssid), 0);
18809 - issue_probereq(padapter, &(pmlmeinfo->network.Ssid), 0);
18810 - issue_probereq(padapter, &(pmlmeinfo->network.Ssid), 0);
18811 - }
18812 - }
18813 -
18814 - pmlmeext->retry++;
18815 + chplan_new[k].ChannelNum = chplan_ap.Channel[j];
18816 + chplan_new[k].ScanType = SCAN_ACTIVE;
18817 + i++;
18818 + j++;
18819 + k++;
18820 }
18821 - else
18822 + else if (chplan_sta[i].ChannelNum < chplan_ap.Channel[j])
18823 {
18824 - pmlmeext->retry = 0;
18825 - DBG_871X("no beacon to call receive_disconnect()\n");
18826 - receive_disconnect(padapter, pmlmeinfo->network.MacAddress
18827 - , 65535// indicate disconnect caused by no rx
18828 - );
18829 - pmlmeinfo->link_count = 0;
18830 - return;
18831 + chplan_new[k].ChannelNum = chplan_sta[i].ChannelNum;
18832 +// chplan_new[k].ScanType = chplan_sta[i].ScanType;
18833 + chplan_new[k].ScanType = SCAN_PASSIVE;
18834 + i++;
18835 + k++;
18836 }
18837 + else if (chplan_sta[i].ChannelNum > chplan_ap.Channel[j])
18838 + {
18839 + chplan_new[k].ChannelNum = chplan_ap.Channel[j];
18840 + chplan_new[k].ScanType = SCAN_ACTIVE;
18841 + j++;
18842 + k++;
18843 + }
18844 + } while (1);
18845 +
18846 + // change AP not support channel to Passive scan
18847 + while ((i < MAX_CHANNEL_NUM) &&
18848 + (chplan_sta[i].ChannelNum != 0) &&
18849 + (chplan_sta[i].ChannelNum <= 14))
18850 + {
18851 + chplan_new[k].ChannelNum = chplan_sta[i].ChannelNum;
18852 +// chplan_new[k].ScanType = chplan_sta[i].ScanType;
18853 + chplan_new[k].ScanType = SCAN_PASSIVE;
18854 + i++;
18855 + k++;
18856 }
18857 - else
18858 - {
18859 - pmlmeext->retry = 0;
18860 - sta_update_last_rx_pkts(psta);
18861 - //set_link_timer(pmlmeext, DISCONNECT_TO);
18862 - }
18863 -
18864 - #ifdef DBG_EXPIRATION_CHK
18865 - DBG_871X("%s tx_pkts:%llu, link_count:%u\n", __FUNCTION__
18866 - , pxmitpriv->tx_pkts
18867 - , pmlmeinfo->link_count
18868 - );
18869 - #endif
18870
18871 - /*to send the AP a nulldata if no frame is xmitted in order to keep alive*/
18872 - if(pxmitpriv->last_tx_pkts == pxmitpriv->tx_pkts)
18873 + // add channel AP supported
18874 + while ((j < chplan_ap.Len) && (chplan_ap.Channel[j] <= 14))
18875 {
18876 - if(pmlmeinfo->link_count++ == 0xf)
18877 - {
18878 - //DBG_871X("(Interface %d)issue nulldata to keep alive\n",padapter->dvobjpriv.InterfaceNumber);
18879 - #ifdef DBG_EXPIRATION_CHK
18880 - DBG_871X("%s issue_nulldata 0\n", __FUNCTION__);
18881 - #endif
18882 - issue_nulldata(padapter, 0);
18883 - pmlmeinfo->link_count = 0;
18884 - }
18885 + chplan_new[k].ChannelNum = chplan_ap.Channel[j];
18886 + chplan_new[k].ScanType = SCAN_ACTIVE;
18887 + j++;
18888 + k++;
18889 }
18890 - else
18891 + }
18892 + else
18893 + {
18894 + // keep original STA 2.4G channel plan
18895 + while ((i < MAX_CHANNEL_NUM) &&
18896 + (chplan_sta[i].ChannelNum != 0) &&
18897 + (chplan_sta[i].ChannelNum <= 14))
18898 + {
18899 + chplan_new[k].ChannelNum = chplan_sta[i].ChannelNum;
18900 + chplan_new[k].ScanType = chplan_sta[i].ScanType;
18901 + i++;
18902 + k++;
18903 + }
18904 +
18905 + // skip AP 2.4G channel plan
18906 + while ((j < chplan_ap.Len) && (chplan_ap.Channel[j] <= 14))
18907 {
18908 - pxmitpriv->last_tx_pkts = pxmitpriv->tx_pkts;
18909 - pmlmeinfo->link_count = 0;
18910 + j++;
18911 }
18912 + }
18913
18914 - } //end of if ((psta = rtw_get_stainfo(pstapriv, passoc_res->network.MacAddress)) != NULL)
18915 - }
18916 - else if (is_client_associated_to_ibss(padapter))
18917 - {
18918 - //linked IBSS mode
18919 - //for each assoc list entry to check the rx pkt counter
18920 - for (i = IBSS_START_MAC_ID; i < NUM_STA; i++)
18921 + if (pregistrypriv->wireless_mode & WIRELESS_11A)
18922 {
18923 - if (pmlmeinfo->FW_sta_info[i].status == 1)
18924 - {
18925 - psta = pmlmeinfo->FW_sta_info[i].psta;
18926 + do {
18927 + if ((i == MAX_CHANNEL_NUM) ||
18928 + (chplan_sta[i].ChannelNum == 0))
18929 + break;
18930
18931 - if(NULL==psta) continue;
18932 + if ((j == chplan_ap.Len) || (chplan_ap.Channel[j] == 0))
18933 + break;
18934
18935 - if (pmlmeinfo->FW_sta_info[i].rx_pkt == sta_rx_pkts(psta))
18936 + if (chplan_sta[i].ChannelNum == chplan_ap.Channel[j])
18937 {
18938 -
18939 - if(pmlmeinfo->FW_sta_info[i].retry<3)
18940 - {
18941 - pmlmeinfo->FW_sta_info[i].retry++;
18942 - }
18943 - else
18944 - {
18945 - pmlmeinfo->FW_sta_info[i].retry = 0;
18946 - pmlmeinfo->FW_sta_info[i].status = 0;
18947 - report_del_sta_event(padapter, psta->hwaddr
18948 - , 65535// indicate disconnect caused by no rx
18949 - );
18950 - }
18951 + chplan_new[k].ChannelNum = chplan_ap.Channel[j];
18952 + chplan_new[k].ScanType = SCAN_ACTIVE;
18953 + i++;
18954 + j++;
18955 + k++;
18956 }
18957 - else
18958 + else if (chplan_sta[i].ChannelNum < chplan_ap.Channel[j])
18959 {
18960 - pmlmeinfo->FW_sta_info[i].retry = 0;
18961 - pmlmeinfo->FW_sta_info[i].rx_pkt = (u32)sta_rx_pkts(psta);
18962 + chplan_new[k].ChannelNum = chplan_sta[i].ChannelNum;
18963 +// chplan_new[k].ScanType = chplan_sta[i].ScanType;
18964 + chplan_new[k].ScanType = SCAN_PASSIVE;
18965 + i++;
18966 + k++;
18967 }
18968 + else if (chplan_sta[i].ChannelNum > chplan_ap.Channel[j])
18969 + {
18970 + chplan_new[k].ChannelNum = chplan_ap.Channel[j];
18971 + chplan_new[k].ScanType = SCAN_ACTIVE;
18972 + j++;
18973 + k++;
18974 + }
18975 + } while (1);
18976 +
18977 + // change AP not support channel to Passive scan
18978 + while ((i < MAX_CHANNEL_NUM) && (chplan_sta[i].ChannelNum != 0))
18979 + {
18980 + chplan_new[k].ChannelNum = chplan_sta[i].ChannelNum;
18981 +// chplan_new[k].ScanType = chplan_sta[i].ScanType;
18982 + chplan_new[k].ScanType = SCAN_PASSIVE;
18983 + i++;
18984 + k++;
18985 + }
18986 +
18987 + // add channel AP supported
18988 + while ((j < chplan_ap.Len) && (chplan_ap.Channel[j] != 0))
18989 + {
18990 + chplan_new[k].ChannelNum = chplan_ap.Channel[j];
18991 + chplan_new[k].ScanType = SCAN_ACTIVE;
18992 + j++;
18993 + k++;
18994 + }
18995 + }
18996 + else
18997 + {
18998 + // keep original STA 5G channel plan
18999 + while ((i < MAX_CHANNEL_NUM) && (chplan_sta[i].ChannelNum != 0))
19000 + {
19001 + chplan_new[k].ChannelNum = chplan_sta[i].ChannelNum;
19002 + chplan_new[k].ScanType = chplan_sta[i].ScanType;
19003 + i++;
19004 + k++;
19005 }
19006 }
19007
19008 - //set_link_timer(pmlmeext, DISCONNECT_TO);
19009 + pmlmeext->update_channel_plan_by_ap_done = 1;
19010 +
19011 +#ifdef CONFIG_DEBUG_RTL871X
19012 +#ifdef PLATFORM_LINUX
19013 + k = 0;
19014 + printk("%s: new STA channel plan {", __func__);
19015 + while ((k < MAX_CHANNEL_NUM) && (chplan_new[k].ChannelNum != 0))
19016 + {
19017 + printk("%02d(%c),", chplan_new[k].ChannelNum, chplan_new[k].ScanType==SCAN_PASSIVE?'p':'c');
19018 + k++;
19019 + }
19020 + printk("}\n");
19021 +#endif
19022 +#endif
19023
19024 +#if 0
19025 + // recover the right channel index
19026 + channel = chplan_sta[pmlmeext->sitesurvey_res.channel_idx].ChannelNum;
19027 + k = 0;
19028 + while ((k < MAX_CHANNEL_NUM) && (chplan_new[k].ChannelNum != 0))
19029 + {
19030 + if (chplan_new[k].ChannelNum == channel) {
19031 + RT_TRACE(_module_rtl871x_mlme_c_, _drv_notice_,
19032 + ("%s: change mlme_ext sitesurvey channel index from %d to %d\n",
19033 + __FUNCTION__, pmlmeext->sitesurvey_res.channel_idx, k));
19034 + pmlmeext->sitesurvey_res.channel_idx = k;
19035 + break;
19036 + }
19037 + k++;
19038 + }
19039 +#endif
19040 }
19041
19042 + // If channel is used by AP, set channel scan type to active
19043 + channel = bssid->Configuration.DSConfig;
19044 + chplan_new = pmlmeext->channel_set;
19045 + i = 0;
19046 + while ((i < MAX_CHANNEL_NUM) && (chplan_new[i].ChannelNum != 0))
19047 + {
19048 + if (chplan_new[i].ChannelNum == channel)
19049 + {
19050 + if (chplan_new[i].ScanType == SCAN_PASSIVE)
19051 + {
19052 + //5G Bnad 2, 3 (DFS) doesn't change to active scan
19053 + if(channel >= 52 && channel <= 144)
19054 + break;
19055 +
19056 + chplan_new[i].ScanType = SCAN_ACTIVE;
19057 + RT_TRACE(_module_rtl871x_mlme_c_, _drv_notice_,
19058 + ("%s: change channel %d scan type from passive to active\n",
19059 + __FUNCTION__, channel));
19060 + }
19061 + break;
19062 + }
19063 + i++;
19064 + }
19065 }
19066 +#endif
19067
19068 -void survey_timer_hdl(_adapter *padapter)
19069 +/****************************************************************************
19070 +
19071 +Following are the functions to report events
19072 +
19073 +*****************************************************************************/
19074 +
19075 +void report_survey_event(_adapter *padapter, union recv_frame *precv_frame)
19076 {
19077 - struct cmd_obj *ph2c;
19078 - struct sitesurvey_parm *psurveyPara;
19079 - struct cmd_priv *pcmdpriv=&padapter->cmdpriv;
19080 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
19081 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
19082 -#ifdef CONFIG_P2P
19083 - struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
19084 -#endif
19085 + struct cmd_obj *pcmd_obj;
19086 + u8 *pevtcmd;
19087 + u32 cmdsz;
19088 + struct survey_event *psurvey_evt;
19089 + struct C2HEvent_Header *pc2h_evt_hdr;
19090 + struct mlme_ext_priv *pmlmeext;
19091 + struct cmd_priv *pcmdpriv;
19092 + //u8 *pframe = precv_frame->u.hdr.rx_data;
19093 + //uint len = precv_frame->u.hdr.len;
19094
19095 - //DBG_8192C("marc: survey timer\n");
19096 + if(!padapter)
19097 + return;
19098
19099 - //issue rtw_sitesurvey_cmd
19100 - if (pmlmeext->sitesurvey_res.state > SCAN_START)
19101 + pmlmeext = &padapter->mlmeextpriv;
19102 + pcmdpriv = &padapter->cmdpriv;
19103 +
19104 +
19105 + if ((pcmd_obj = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj))) == NULL)
19106 {
19107 - if(pmlmeext->sitesurvey_res.state == SCAN_PROCESS)
19108 - pmlmeext->sitesurvey_res.channel_idx++;
19109 + return;
19110 + }
19111
19112 - if(pmlmeext->scan_abort == _TRUE)
19113 - {
19114 - #ifdef CONFIG_P2P
19115 - if(!rtw_p2p_chk_state(&padapter->wdinfo, P2P_STATE_NONE))
19116 - {
19117 - rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_MAX);
19118 - pmlmeext->sitesurvey_res.channel_idx = 3;
19119 - DBG_871X("%s idx:%d, cnt:%u\n", __FUNCTION__
19120 - , pmlmeext->sitesurvey_res.channel_idx
19121 - , pwdinfo->find_phase_state_exchange_cnt
19122 - );
19123 - }
19124 - else
19125 - #endif
19126 - {
19127 - pmlmeext->sitesurvey_res.channel_idx = pmlmeext->max_chan_nums;
19128 - DBG_871X("%s idx:%d\n", __FUNCTION__
19129 - , pmlmeext->sitesurvey_res.channel_idx
19130 - );
19131 - }
19132 + cmdsz = (sizeof(struct survey_event) + sizeof(struct C2HEvent_Header));
19133 + if ((pevtcmd = (u8*)rtw_zmalloc(cmdsz)) == NULL)
19134 + {
19135 + rtw_mfree((u8 *)pcmd_obj, sizeof(struct cmd_obj));
19136 + return;
19137 + }
19138
19139 - pmlmeext->scan_abort = _FALSE;//reset
19140 - }
19141 + _rtw_init_listhead(&pcmd_obj->list);
19142
19143 - if ((ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj))) == NULL)
19144 - {
19145 - goto exit_survey_timer_hdl;
19146 - }
19147 + pcmd_obj->cmdcode = GEN_CMD_CODE(_Set_MLME_EVT);
19148 + pcmd_obj->cmdsz = cmdsz;
19149 + pcmd_obj->parmbuf = pevtcmd;
19150
19151 - if ((psurveyPara = (struct sitesurvey_parm*)rtw_zmalloc(sizeof(struct sitesurvey_parm))) == NULL)
19152 - {
19153 - rtw_mfree((unsigned char *)ph2c, sizeof(struct cmd_obj));
19154 - goto exit_survey_timer_hdl;
19155 - }
19156 + pcmd_obj->rsp = NULL;
19157 + pcmd_obj->rspsz = 0;
19158
19159 - init_h2fwcmd_w_parm_no_rsp(ph2c, psurveyPara, GEN_CMD_CODE(_SiteSurvey));
19160 - rtw_enqueue_cmd(pcmdpriv, ph2c);
19161 + pc2h_evt_hdr = (struct C2HEvent_Header*)(pevtcmd);
19162 + pc2h_evt_hdr->len = sizeof(struct survey_event);
19163 + pc2h_evt_hdr->ID = GEN_EVT_CODE(_Survey);
19164 + pc2h_evt_hdr->seq = ATOMIC_INC_RETURN(&pmlmeext->event_seq);
19165 +
19166 + psurvey_evt = (struct survey_event*)(pevtcmd + sizeof(struct C2HEvent_Header));
19167 +
19168 + if (collect_bss_info(padapter, precv_frame, (WLAN_BSSID_EX *)&psurvey_evt->bss) == _FAIL)
19169 + {
19170 + rtw_mfree((u8 *)pcmd_obj, sizeof(struct cmd_obj));
19171 + rtw_mfree((u8 *)pevtcmd, cmdsz);
19172 + return;
19173 }
19174
19175 +#ifdef CONFIG_80211D
19176 + process_80211d(padapter, &psurvey_evt->bss);
19177 +#endif
19178 +
19179 + rtw_enqueue_cmd(pcmdpriv, pcmd_obj);
19180
19181 -exit_survey_timer_hdl:
19182 + pmlmeext->sitesurvey_res.bss_cnt++;
19183
19184 return;
19185 +
19186 }
19187
19188 -void link_timer_hdl(_adapter *padapter)
19189 +void report_surveydone_event(_adapter *padapter)
19190 {
19191 - static unsigned int rx_pkt = 0;
19192 - static u64 tx_cnt = 0;
19193 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
19194 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
19195 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
19196 - struct sta_priv *pstapriv = &padapter->stapriv;
19197 + struct cmd_obj *pcmd_obj;
19198 + u8 *pevtcmd;
19199 + u32 cmdsz;
19200 + struct surveydone_event *psurveydone_evt;
19201 + struct C2HEvent_Header *pc2h_evt_hdr;
19202 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
19203 + struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
19204
19205 - if (pmlmeinfo->state & WIFI_FW_AUTH_NULL)
19206 + if ((pcmd_obj = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj))) == NULL)
19207 {
19208 - DBG_871X("link_timer_hdl:no beacon while connecting\n");
19209 - pmlmeinfo->state = WIFI_FW_NULL_STATE;
19210 - report_join_res(padapter, -3);
19211 + return;
19212 }
19213 - else if (pmlmeinfo->state & WIFI_FW_AUTH_STATE)
19214 +
19215 + cmdsz = (sizeof(struct surveydone_event) + sizeof(struct C2HEvent_Header));
19216 + if ((pevtcmd = (u8*)rtw_zmalloc(cmdsz)) == NULL)
19217 {
19218 - //re-auth timer
19219 - if (++pmlmeinfo->reauth_count > REAUTH_LIMIT)
19220 - {
19221 - //if (pmlmeinfo->auth_algo != dot11AuthAlgrthm_Auto)
19222 - //{
19223 - pmlmeinfo->state = 0;
19224 - report_join_res(padapter, -1);
19225 - return;
19226 - //}
19227 - //else
19228 - //{
19229 - // pmlmeinfo->auth_algo = dot11AuthAlgrthm_Shared;
19230 - // pmlmeinfo->reauth_count = 0;
19231 - //}
19232 - }
19233 -
19234 - DBG_871X("link_timer_hdl: auth timeout and try again\n");
19235 - pmlmeinfo->auth_seq = 1;
19236 - issue_auth(padapter, NULL, 0);
19237 - set_link_timer(pmlmeext, REAUTH_TO);
19238 + rtw_mfree((u8 *)pcmd_obj, sizeof(struct cmd_obj));
19239 + return;
19240 }
19241 - else if (pmlmeinfo->state & WIFI_FW_ASSOC_STATE)
19242 - {
19243 - //re-assoc timer
19244 - if (++pmlmeinfo->reassoc_count > REASSOC_LIMIT)
19245 - {
19246 - pmlmeinfo->state = WIFI_FW_NULL_STATE;
19247 - report_join_res(padapter, -2);
19248 - return;
19249 - }
19250
19251 - DBG_871X("link_timer_hdl: assoc timeout and try again\n");
19252 - issue_assocreq(padapter);
19253 - set_link_timer(pmlmeext, REASSOC_TO);
19254 - }
19255 -#if 0
19256 - else if (is_client_associated_to_ap(padapter))
19257 - {
19258 - //linked infrastructure client mode
19259 - if ((psta = rtw_get_stainfo(pstapriv, pmlmeinfo->network.MacAddress)) != NULL)
19260 - {
19261 - /*to monitor whether the AP is alive or not*/
19262 - if (rx_pkt == psta->sta_stats.rx_pkts)
19263 - {
19264 - receive_disconnect(padapter, pmlmeinfo->network.MacAddress);
19265 - return;
19266 - }
19267 - else
19268 - {
19269 - rx_pkt = psta->sta_stats.rx_pkts;
19270 - set_link_timer(pmlmeext, DISCONNECT_TO);
19271 - }
19272 + _rtw_init_listhead(&pcmd_obj->list);
19273
19274 - //update the EDCA paramter according to the Tx/RX mode
19275 - update_EDCA_param(padapter);
19276 + pcmd_obj->cmdcode = GEN_CMD_CODE(_Set_MLME_EVT);
19277 + pcmd_obj->cmdsz = cmdsz;
19278 + pcmd_obj->parmbuf = pevtcmd;
19279
19280 - /*to send the AP a nulldata if no frame is xmitted in order to keep alive*/
19281 - if (pmlmeinfo->link_count++ == 0)
19282 - {
19283 - tx_cnt = pxmitpriv->tx_pkts;
19284 - }
19285 - else if ((pmlmeinfo->link_count & 0xf) == 0)
19286 - {
19287 - if (tx_cnt == pxmitpriv->tx_pkts)
19288 - {
19289 - issue_nulldata(padapter, 0);
19290 - }
19291 + pcmd_obj->rsp = NULL;
19292 + pcmd_obj->rspsz = 0;
19293
19294 - tx_cnt = pxmitpriv->tx_pkts;
19295 - }
19296 - } //end of if ((psta = rtw_get_stainfo(pstapriv, passoc_res->network.MacAddress)) != NULL)
19297 - }
19298 - else if (is_client_associated_to_ibss(padapter))
19299 - {
19300 - //linked IBSS mode
19301 - //for each assoc list entry to check the rx pkt counter
19302 - for (i = IBSS_START_MAC_ID; i < NUM_STA; i++)
19303 - {
19304 - if (pmlmeinfo->FW_sta_info[i].status == 1)
19305 - {
19306 - psta = pmlmeinfo->FW_sta_info[i].psta;
19307 + pc2h_evt_hdr = (struct C2HEvent_Header*)(pevtcmd);
19308 + pc2h_evt_hdr->len = sizeof(struct surveydone_event);
19309 + pc2h_evt_hdr->ID = GEN_EVT_CODE(_SurveyDone);
19310 + pc2h_evt_hdr->seq = ATOMIC_INC_RETURN(&pmlmeext->event_seq);
19311
19312 - if (pmlmeinfo->FW_sta_info[i].rx_pkt == psta->sta_stats.rx_pkts)
19313 - {
19314 - pmlmeinfo->FW_sta_info[i].status = 0;
19315 - report_del_sta_event(padapter, psta->hwaddr);
19316 - }
19317 - else
19318 - {
19319 - pmlmeinfo->FW_sta_info[i].rx_pkt = psta->sta_stats.rx_pkts;
19320 - }
19321 - }
19322 - }
19323 + psurveydone_evt = (struct surveydone_event*)(pevtcmd + sizeof(struct C2HEvent_Header));
19324 + psurveydone_evt->bss_cnt = pmlmeext->sitesurvey_res.bss_cnt;
19325
19326 - set_link_timer(pmlmeext, DISCONNECT_TO);
19327 - }
19328 -#endif
19329 + DBG_871X("survey done event(%x) band:%d for "ADPT_FMT"\n", psurveydone_evt->bss_cnt, padapter->setband, ADPT_ARG(padapter));
19330 +
19331 + rtw_enqueue_cmd(pcmdpriv, pcmd_obj);
19332
19333 return;
19334 +
19335 }
19336
19337 -void addba_timer_hdl(struct sta_info *psta)
19338 +void report_join_res(_adapter *padapter, int res)
19339 {
19340 - u8 bitmap;
19341 - u16 tid;
19342 - struct ht_priv *phtpriv;
19343 + struct cmd_obj *pcmd_obj;
19344 + u8 *pevtcmd;
19345 + u32 cmdsz;
19346 + struct joinbss_event *pjoinbss_evt;
19347 + struct C2HEvent_Header *pc2h_evt_hdr;
19348 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
19349 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
19350 + struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
19351
19352 - if(!psta)
19353 + if ((pcmd_obj = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj))) == NULL)
19354 + {
19355 return;
19356 -
19357 - phtpriv = &psta->htpriv;
19358 + }
19359
19360 - if((phtpriv->ht_option==_TRUE) && (phtpriv->ampdu_enable==_TRUE))
19361 + cmdsz = (sizeof(struct joinbss_event) + sizeof(struct C2HEvent_Header));
19362 + if ((pevtcmd = (u8*)rtw_zmalloc(cmdsz)) == NULL)
19363 {
19364 - if(phtpriv->candidate_tid_bitmap)
19365 - phtpriv->candidate_tid_bitmap=0x0;
19366 -
19367 + rtw_mfree((u8 *)pcmd_obj, sizeof(struct cmd_obj));
19368 + return;
19369 }
19370 +
19371 + _rtw_init_listhead(&pcmd_obj->list);
19372 +
19373 + pcmd_obj->cmdcode = GEN_CMD_CODE(_Set_MLME_EVT);
19374 + pcmd_obj->cmdsz = cmdsz;
19375 + pcmd_obj->parmbuf = pevtcmd;
19376 +
19377 + pcmd_obj->rsp = NULL;
19378 + pcmd_obj->rspsz = 0;
19379 +
19380 + pc2h_evt_hdr = (struct C2HEvent_Header*)(pevtcmd);
19381 + pc2h_evt_hdr->len = sizeof(struct joinbss_event);
19382 + pc2h_evt_hdr->ID = GEN_EVT_CODE(_JoinBss);
19383 + pc2h_evt_hdr->seq = ATOMIC_INC_RETURN(&pmlmeext->event_seq);
19384 +
19385 + pjoinbss_evt = (struct joinbss_event*)(pevtcmd + sizeof(struct C2HEvent_Header));
19386 + _rtw_memcpy((unsigned char *)(&(pjoinbss_evt->network.network)), &(pmlmeinfo->network), sizeof(WLAN_BSSID_EX));
19387 + pjoinbss_evt->network.join_res = pjoinbss_evt->network.aid = res;
19388 +
19389 + DBG_871X("report_join_res(%d)\n", res);
19390
19391 -}
19392 +
19393 + rtw_joinbss_event_prehandle(padapter, (u8 *)&pjoinbss_evt->network);
19394 +
19395 +
19396 + rtw_enqueue_cmd(pcmdpriv, pcmd_obj);
19397 +
19398 + return;
19399
19400 -u8 NULL_hdl(_adapter *padapter, u8 *pbuf)
19401 -{
19402 - return H2C_SUCCESS;
19403 }
19404
19405 -u8 setopmode_hdl(_adapter *padapter, u8 *pbuf)
19406 +void report_del_sta_event(_adapter *padapter, unsigned char* MacAddr, unsigned short reason)
19407 {
19408 - u8 type;
19409 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
19410 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
19411 - struct setopmode_parm *psetop = (struct setopmode_parm *)pbuf;
19412 + struct cmd_obj *pcmd_obj;
19413 + u8 *pevtcmd;
19414 + u32 cmdsz;
19415 + struct sta_info *psta;
19416 + int mac_id;
19417 + struct stadel_event *pdel_sta_evt;
19418 + struct C2HEvent_Header *pc2h_evt_hdr;
19419 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
19420 + struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
19421
19422 - if(psetop->mode == Ndis802_11APMode)
19423 - {
19424 - pmlmeinfo->state = WIFI_FW_AP_STATE;
19425 - type = _HW_STATE_AP_;
19426 -#ifdef CONFIG_NATIVEAP_MLME
19427 - //start_ap_mode(padapter);
19428 -#endif
19429 - }
19430 - else if(psetop->mode == Ndis802_11Infrastructure)
19431 + if ((pcmd_obj = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj))) == NULL)
19432 {
19433 - type = _HW_STATE_STATION_;
19434 + return;
19435 }
19436 - else if(psetop->mode == Ndis802_11IBSS)
19437 +
19438 + cmdsz = (sizeof(struct stadel_event) + sizeof(struct C2HEvent_Header));
19439 + if ((pevtcmd = (u8*)rtw_zmalloc(cmdsz)) == NULL)
19440 {
19441 - type = _HW_STATE_ADHOC_;
19442 + rtw_mfree((u8 *)pcmd_obj, sizeof(struct cmd_obj));
19443 + return;
19444 }
19445 +
19446 + _rtw_init_listhead(&pcmd_obj->list);
19447 +
19448 + pcmd_obj->cmdcode = GEN_CMD_CODE(_Set_MLME_EVT);
19449 + pcmd_obj->cmdsz = cmdsz;
19450 + pcmd_obj->parmbuf = pevtcmd;
19451 +
19452 + pcmd_obj->rsp = NULL;
19453 + pcmd_obj->rspsz = 0;
19454 +
19455 + pc2h_evt_hdr = (struct C2HEvent_Header*)(pevtcmd);
19456 + pc2h_evt_hdr->len = sizeof(struct stadel_event);
19457 + pc2h_evt_hdr->ID = GEN_EVT_CODE(_DelSTA);
19458 + pc2h_evt_hdr->seq = ATOMIC_INC_RETURN(&pmlmeext->event_seq);
19459 +
19460 + pdel_sta_evt = (struct stadel_event*)(pevtcmd + sizeof(struct C2HEvent_Header));
19461 + _rtw_memcpy((unsigned char *)(&(pdel_sta_evt->macaddr)), MacAddr, ETH_ALEN);
19462 + _rtw_memcpy((unsigned char *)(pdel_sta_evt->rsvd),(unsigned char *)(&reason),2);
19463 +
19464 +
19465 + psta = rtw_get_stainfo(&padapter->stapriv, MacAddr);
19466 + if(psta)
19467 + mac_id = (int)psta->mac_id;
19468 else
19469 - {
19470 - type = _HW_STATE_NOLINK_;
19471 - }
19472 + mac_id = (-1);
19473
19474 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_SET_OPMODE, (u8 *)(&type));
19475 - //Set_NETYPE0_MSR(padapter, type);
19476 + pdel_sta_evt->mac_id = mac_id;
19477
19478 - return H2C_SUCCESS;
19479 -
19480 + DBG_871X("report_del_sta_event: delete STA, mac_id=%d\n", mac_id);
19481 +
19482 + rtw_enqueue_cmd(pcmdpriv, pcmd_obj);
19483 +
19484 + return;
19485 }
19486
19487 -u8 createbss_hdl(_adapter *padapter, u8 *pbuf)
19488 +void report_add_sta_event(_adapter *padapter, unsigned char* MacAddr, int cam_idx)
19489 {
19490 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
19491 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
19492 - WLAN_BSSID_EX *pnetwork = (WLAN_BSSID_EX*)(&(pmlmeinfo->network));
19493 - struct joinbss_parm *pparm = (struct joinbss_parm *)pbuf;
19494 - u32 initialgain;
19495 + struct cmd_obj *pcmd_obj;
19496 + u8 *pevtcmd;
19497 + u32 cmdsz;
19498 + struct stassoc_event *padd_sta_evt;
19499 + struct C2HEvent_Header *pc2h_evt_hdr;
19500 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
19501 + struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
19502
19503 -
19504 - if(pparm->network.InfrastructureMode == Ndis802_11APMode)
19505 + if ((pcmd_obj = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj))) == NULL)
19506 {
19507 -#ifdef CONFIG_AP_MODE
19508 -
19509 - if(pmlmeinfo->state == WIFI_FW_AP_STATE)
19510 - {
19511 - //todo:
19512 - return H2C_SUCCESS;
19513 - }
19514 -#endif
19515 + return;
19516 }
19517
19518 - //below is for ad-hoc master
19519 - if(pparm->network.InfrastructureMode == Ndis802_11IBSS)
19520 + cmdsz = (sizeof(struct stassoc_event) + sizeof(struct C2HEvent_Header));
19521 + if ((pevtcmd = (u8*)rtw_zmalloc(cmdsz)) == NULL)
19522 {
19523 - rtw_joinbss_reset(padapter);
19524 -
19525 - pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
19526 - pmlmeext->cur_ch_offset= HAL_PRIME_CHNL_OFFSET_DONT_CARE;
19527 - pmlmeinfo->ERP_enable = 0;
19528 - pmlmeinfo->WMM_enable = 0;
19529 - pmlmeinfo->HT_enable = 0;
19530 - pmlmeinfo->HT_caps_enable = 0;
19531 - pmlmeinfo->HT_info_enable = 0;
19532 - pmlmeinfo->agg_enable_bitmap = 0;
19533 - pmlmeinfo->candidate_tid_bitmap = 0;
19534 + rtw_mfree((u8 *)pcmd_obj, sizeof(struct cmd_obj));
19535 + return;
19536 + }
19537
19538 - //disable dynamic functions, such as high power, DIG
19539 - Save_DM_Func_Flag(padapter);
19540 - Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);
19541 + _rtw_init_listhead(&pcmd_obj->list);
19542
19543 - //config the initial gain under linking, need to write the BB registers
19544 - initialgain = 0x1E;
19545 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));
19546 + pcmd_obj->cmdcode = GEN_CMD_CODE(_Set_MLME_EVT);
19547 + pcmd_obj->cmdsz = cmdsz;
19548 + pcmd_obj->parmbuf = pevtcmd;
19549
19550 - //cancel link timer
19551 - _cancel_timer_ex(&pmlmeext->link_timer);
19552 + pcmd_obj->rsp = NULL;
19553 + pcmd_obj->rspsz = 0;
19554
19555 - //clear CAM
19556 - flush_all_cam_entry(padapter);
19557 + pc2h_evt_hdr = (struct C2HEvent_Header*)(pevtcmd);
19558 + pc2h_evt_hdr->len = sizeof(struct stassoc_event);
19559 + pc2h_evt_hdr->ID = GEN_EVT_CODE(_AddSTA);
19560 + pc2h_evt_hdr->seq = ATOMIC_INC_RETURN(&pmlmeext->event_seq);
19561
19562 - _rtw_memcpy(pnetwork, pbuf, FIELD_OFFSET(WLAN_BSSID_EX, IELength));
19563 - pnetwork->IELength = ((WLAN_BSSID_EX *)pbuf)->IELength;
19564 + padd_sta_evt = (struct stassoc_event*)(pevtcmd + sizeof(struct C2HEvent_Header));
19565 + _rtw_memcpy((unsigned char *)(&(padd_sta_evt->macaddr)), MacAddr, ETH_ALEN);
19566 + padd_sta_evt->cam_id = cam_idx;
19567
19568 - if(pnetwork->IELength>MAX_IE_SZ)//Check pbuf->IELength
19569 - return H2C_PARAMETERS_ERROR;
19570 + DBG_871X("report_add_sta_event: add STA\n");
19571
19572 - _rtw_memcpy(pnetwork->IEs, ((WLAN_BSSID_EX *)pbuf)->IEs, pnetwork->IELength);
19573 -
19574 - start_create_ibss(padapter);
19575 + rtw_enqueue_cmd(pcmdpriv, pcmd_obj);
19576
19577 - }
19578 + return;
19579 +}
19580
19581 - return H2C_SUCCESS;
19582
19583 -}
19584 +/****************************************************************************
19585
19586 -u8 join_cmd_hdl(_adapter *padapter, u8 *pbuf)
19587 +Following are the event callback functions
19588 +
19589 +*****************************************************************************/
19590 +
19591 +//for sta/adhoc mode
19592 +void update_sta_info(_adapter *padapter, struct sta_info *psta)
19593 {
19594 - u8 join_type;
19595 - PNDIS_802_11_VARIABLE_IEs pIE;
19596 - struct registry_priv *pregpriv = &padapter->registrypriv;
19597 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
19598 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
19599 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
19600 - WLAN_BSSID_EX *pnetwork = (WLAN_BSSID_EX*)(&(pmlmeinfo->network));
19601 - struct joinbss_parm *pparm = (struct joinbss_parm *)pbuf;
19602 - u32 acparm, initialgain, i;
19603
19604 - //check already connecting to AP or not
19605 - if (pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS)
19606 - {
19607 - if (pmlmeinfo->state & WIFI_FW_STATION_STATE)
19608 - {
19609 - issue_deauth(padapter, pnetwork->MacAddress, WLAN_REASON_DEAUTH_LEAVING);
19610 - }
19611 + //ERP
19612 + VCS_update(padapter, psta);
19613
19614 - pmlmeinfo->state = WIFI_FW_NULL_STATE;
19615 -
19616 - //clear CAM
19617 - flush_all_cam_entry(padapter);
19618 -
19619 - _cancel_timer_ex(&pmlmeext->link_timer);
19620 -
19621 - //set MSR to nolink
19622 - Set_NETYPE0_MSR(padapter, _HW_STATE_NOLINK_);
19623
19624 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_DISCONNECT, 0);
19625 - }
19626 + //HT
19627 + if(pmlmepriv->htpriv.ht_option)
19628 + {
19629 + psta->htpriv.ht_option = _TRUE;
19630
19631 -#ifdef CONFIG_ANTENNA_DIVERSITY
19632 - rtw_antenna_select_cmd(padapter, pparm->network.PhyInfo.Optimum_antenna, _FALSE);
19633 -#endif
19634 + psta->htpriv.ampdu_enable = pmlmepriv->htpriv.ampdu_enable;
19635
19636 - rtw_joinbss_reset(padapter);
19637 -
19638 - pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
19639 - pmlmeext->cur_ch_offset= HAL_PRIME_CHNL_OFFSET_DONT_CARE;
19640 - pmlmeinfo->ERP_enable = 0;
19641 - pmlmeinfo->WMM_enable = 0;
19642 - pmlmeinfo->HT_enable = 0;
19643 - pmlmeinfo->HT_caps_enable = 0;
19644 - pmlmeinfo->HT_info_enable = 0;
19645 - pmlmeinfo->agg_enable_bitmap = 0;
19646 - pmlmeinfo->candidate_tid_bitmap = 0;
19647 - pmlmeinfo->bwmode_updated = _FALSE;
19648 - //pmlmeinfo->assoc_AP_vendor = maxAP;
19649 + if (support_short_GI(padapter, &(pmlmeinfo->HT_caps)))
19650 + psta->htpriv.sgi = _TRUE;
19651
19652 - _rtw_memcpy(pnetwork, pbuf, FIELD_OFFSET(WLAN_BSSID_EX, IELength));
19653 - pnetwork->IELength = ((WLAN_BSSID_EX *)pbuf)->IELength;
19654 -
19655 - if(pnetwork->IELength>MAX_IE_SZ)//Check pbuf->IELength
19656 - return H2C_PARAMETERS_ERROR;
19657 + psta->qos_option = _TRUE;
19658
19659 - _rtw_memcpy(pnetwork->IEs, ((WLAN_BSSID_EX *)pbuf)->IEs, pnetwork->IELength);
19660 -
19661 - //Check AP vendor to move rtw_joinbss_cmd()
19662 - //pmlmeinfo->assoc_AP_vendor = check_assoc_AP(pnetwork->IEs, pnetwork->IELength);
19663 -
19664 - for (i = sizeof(NDIS_802_11_FIXED_IEs); i < pnetwork->IELength;)
19665 + }
19666 + else
19667 {
19668 - pIE = (PNDIS_802_11_VARIABLE_IEs)(pnetwork->IEs + i);
19669 -
19670 - switch (pIE->ElementID)
19671 - {
19672 - case _VENDOR_SPECIFIC_IE_://Get WMM IE.
19673 - if ( _rtw_memcmp(pIE->data, WMM_OUI, 4) )
19674 - {
19675 - pmlmeinfo->WMM_enable = 1;
19676 - }
19677 - break;
19678 -
19679 - case _HT_CAPABILITY_IE_: //Get HT Cap IE.
19680 - pmlmeinfo->HT_caps_enable = 1;
19681 - break;
19682 -
19683 - case _HT_EXTRA_INFO_IE_: //Get HT Info IE.
19684 - pmlmeinfo->HT_info_enable = 1;
19685 -
19686 - //spec case only for cisco's ap because cisco's ap issue assoc rsp using mcs rate @40MHz or @20MHz
19687 - //if(pmlmeinfo->assoc_AP_vendor == ciscoAP)
19688 - {
19689 - struct HT_info_element *pht_info = (struct HT_info_element *)(pIE->data);
19690 -
19691 - if ((pregpriv->cbw40_enable) && (pht_info->infos[0] & BIT(2)))
19692 - {
19693 - //switch to the 40M Hz mode according to the AP
19694 - pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40;
19695 - switch (pht_info->infos[0] & 0x3)
19696 - {
19697 - case 1:
19698 - pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
19699 - break;
19700 -
19701 - case 3:
19702 - pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
19703 - break;
19704 -
19705 - default:
19706 - pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
19707 - break;
19708 - }
19709 -
19710 - DBG_871X("set ch/bw before connected\n");
19711 - }
19712 - }
19713 - break;
19714 -
19715 - default:
19716 - break;
19717 - }
19718 + psta->htpriv.ht_option = _FALSE;
19719
19720 - i += (pIE->Length + 2);
19721 - }
19722 -#if 0
19723 - if (padapter->registrypriv.wifi_spec) {
19724 - // for WiFi test, follow WMM test plan spec
19725 - acparm = 0x002F431C; // VO
19726 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AC_PARAM_VO, (u8 *)(&acparm));
19727 - acparm = 0x005E541C; // VI
19728 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AC_PARAM_VI, (u8 *)(&acparm));
19729 - acparm = 0x0000A525; // BE
19730 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AC_PARAM_BE, (u8 *)(&acparm));
19731 - acparm = 0x0000A549; // BK
19732 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AC_PARAM_BK, (u8 *)(&acparm));
19733 -
19734 - // for WiFi test, mixed mode with intel STA under bg mode throughput issue
19735 - if (padapter->mlmepriv.htpriv.ht_option == _FALSE){
19736 - acparm = 0x00004320;
19737 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AC_PARAM_BE, (u8 *)(&acparm));
19738 - }
19739 - }
19740 - else {
19741 - acparm = 0x002F3217; // VO
19742 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AC_PARAM_VO, (u8 *)(&acparm));
19743 - acparm = 0x005E4317; // VI
19744 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AC_PARAM_VI, (u8 *)(&acparm));
19745 - acparm = 0x00105320; // BE
19746 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AC_PARAM_BE, (u8 *)(&acparm));
19747 - acparm = 0x0000A444; // BK
19748 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AC_PARAM_BK, (u8 *)(&acparm));
19749 - }
19750 -#endif
19751 - //disable dynamic functions, such as high power, DIG
19752 - //Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);
19753 + psta->htpriv.ampdu_enable = _FALSE;
19754 +
19755 + psta->htpriv.sgi = _FALSE;
19756
19757 - //config the initial gain under linking, need to write the BB registers
19758 - #ifndef CONFIG_BEFORE_LINKED_DIG
19759 - initialgain = 0x1E;
19760 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));
19761 - #endif
19762 -
19763 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_BSSID, pmlmeinfo->network.MacAddress);
19764 - join_type = 0;
19765 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_JOIN, (u8 *)(&join_type));
19766 + psta->qos_option = _FALSE;
19767
19768 - //cancel link timer
19769 - _cancel_timer_ex(&pmlmeext->link_timer);
19770 + }
19771
19772 - start_clnt_join(padapter);
19773 + psta->htpriv.bwmode = pmlmeext->cur_bwmode;
19774 + psta->htpriv.ch_offset = pmlmeext->cur_ch_offset;
19775
19776 - return H2C_SUCCESS;
19777 + psta->htpriv.agg_enable_bitmap = 0x0;//reset
19778 + psta->htpriv.candidate_tid_bitmap = 0x0;//reset
19779
19780 +
19781 + //QoS
19782 + if(pmlmepriv->qospriv.qos_option)
19783 + psta->qos_option = _TRUE;
19784 +
19785 +
19786 + psta->state = _FW_LINKED;
19787 +
19788 }
19789
19790 -u8 disconnect_hdl(_adapter *padapter, unsigned char *pbuf)
19791 +void mlmeext_joinbss_event_callback(_adapter *padapter, int join_res)
19792 {
19793 - struct disconnect_parm *pparm = (struct disconnect_parm *)pbuf;
19794 + struct sta_info *psta, *psta_bmc;
19795 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
19796 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
19797 - WLAN_BSSID_EX *pnetwork = (WLAN_BSSID_EX*)(&(pmlmeinfo->network));
19798 - u8 val8;
19799 -
19800 - if (is_client_associated_to_ap(padapter))
19801 - {
19802 - issue_deauth(padapter, pnetwork->MacAddress, WLAN_REASON_DEAUTH_LEAVING);
19803 - }
19804 + WLAN_BSSID_EX *cur_network = &(pmlmeinfo->network);
19805 + struct sta_priv *pstapriv = &padapter->stapriv;
19806 + u8 join_type;
19807
19808 - //set_opmode_cmd(padapter, infra_client_with_mlme);
19809 + if(join_res < 0)
19810 + {
19811 + join_type = 1;
19812 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_JOIN, (u8 *)(&join_type));
19813 + rtw_hal_set_hwreg(padapter, HW_VAR_BSSID, null_addr);
19814
19815 - pmlmeinfo->state = WIFI_FW_NULL_STATE;
19816 -
19817 - //switch to the 20M Hz mode after disconnect
19818 - pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
19819 - pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
19820 -
19821 - //set MSR to no link state
19822 - Set_NETYPE0_MSR(padapter, _HW_STATE_NOLINK_);
19823 + //restore to initial setting.
19824 + update_tx_basic_rate(padapter, padapter->registrypriv.wireless_mode);
19825 +#if 0 //temply remove
19826 +#ifdef CONFIG_INTEL_WIDI
19827 +#ifdef DBG_CONFIG_ERROR_DETECT
19828 + DBG_871X("%s(): do silentreset\n",__FUNCTION__);
19829 + rtw_hal_sreset_reset(padapter);
19830 +#endif
19831 +#endif
19832 +#endif
19833 + goto exit_mlmeext_joinbss_event_callback;
19834 + }
19835
19836 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_DISCONNECT, 0);
19837 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_BSSID, null_addr);
19838 -
19839 - if(((pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE) || ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE))
19840 + if((pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE)
19841 {
19842 - //Stop BCN
19843 - val8 = 0;
19844 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_BCN_FUNC, (u8 *)(&val8));
19845 + //for bc/mc
19846 + psta_bmc = rtw_get_bcmc_stainfo(padapter);
19847 + if(psta_bmc)
19848 + {
19849 + pmlmeinfo->FW_sta_info[psta_bmc->mac_id].psta = psta_bmc;
19850 + update_bmc_sta_support_rate(padapter, psta_bmc->mac_id);
19851 + Update_RA_Entry(padapter, psta_bmc->mac_id);
19852 + }
19853 }
19854
19855 - pmlmeinfo->state = WIFI_FW_NULL_STATE;
19856 -
19857 - set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
19858 -
19859 - flush_all_cam_entry(padapter);
19860 -
19861 - _cancel_timer_ex(&pmlmeext->link_timer);
19862 -
19863 - return H2C_SUCCESS;
19864 -}
19865 -
19866 -u8 sitesurvey_cmd_hdl(_adapter *padapter, u8 *pbuf)
19867 -{
19868 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
19869 - struct sitesurvey_parm *pparm = (struct sitesurvey_parm *)pbuf;
19870 - u8 val8;
19871 - u32 initialgain;
19872 - u32 i;
19873
19874 -#ifdef CONFIG_P2P
19875 - struct wifidirect_info* pwdinfo = &padapter->wdinfo;
19876 -#endif
19877 + //turn on dynamic functions
19878 + Switch_DM_Func(padapter, DYNAMIC_FUNC_DIG|DYNAMIC_FUNC_HP|DYNAMIC_FUNC_SS, _TRUE);
19879
19880 - if (pmlmeext->sitesurvey_res.state == SCAN_DISABLE)
19881 - {
19882 - //for first time sitesurvey_cmd
19883 - pmlmeext->sitesurvey_res.state = SCAN_START;
19884 - pmlmeext->sitesurvey_res.bss_cnt = 0;
19885 - pmlmeext->sitesurvey_res.channel_idx = 0;
19886 + // update IOT-releated issue
19887 + update_IOT_info(padapter);
19888
19889 - for(i=0;i<RTW_SSID_SCAN_AMOUNT;i++){
19890 - if(pparm->ssid[i].SsidLength) {
19891 - _rtw_memcpy(pmlmeext->sitesurvey_res.ssid[i].Ssid, pparm->ssid[i].Ssid, IW_ESSID_MAX_SIZE);
19892 - pmlmeext->sitesurvey_res.ssid[i].SsidLength= pparm->ssid[i].SsidLength;
19893 - } else {
19894 - pmlmeext->sitesurvey_res.ssid[i].SsidLength= 0;
19895 - }
19896 - }
19897 + rtw_hal_set_hwreg(padapter, HW_VAR_BASIC_RATE, cur_network->SupportedRates);
19898
19899 - pmlmeext->sitesurvey_res.scan_mode = pparm->scan_mode;
19900 + //BCN interval
19901 + rtw_hal_set_hwreg(padapter, HW_VAR_BEACON_INTERVAL, (u8 *)(&pmlmeinfo->bcn_interval));
19902
19903 - //issue null data if associating to the AP
19904 - if (is_client_associated_to_ap(padapter) == _TRUE)
19905 - {
19906 - pmlmeext->sitesurvey_res.state = SCAN_TXNULL;
19907 + //udpate capability
19908 + update_capinfo(padapter, pmlmeinfo->capability);
19909
19910 - issue_nulldata(padapter, 1);
19911 - issue_nulldata(padapter, 1);
19912 + //WMM, Update EDCA param
19913 + WMMOnAssocRsp(padapter);
19914
19915 - //delay 50ms to protect nulldata(1).
19916 - set_survey_timer(pmlmeext, 50);
19917 + //HT
19918 + HTOnAssocRsp(padapter);
19919
19920 - return H2C_SUCCESS;
19921 - }
19922 - }
19923 +#ifndef CONFIG_CONCURRENT_MODE
19924 + // Call set_channel_bwmode when the CONFIG_CONCURRENT_MODE doesn't be defined.
19925 + //Set cur_channel&cur_bwmode&cur_ch_offset
19926 + set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
19927 +#endif
19928
19929 - if ((pmlmeext->sitesurvey_res.state == SCAN_START) || (pmlmeext->sitesurvey_res.state == SCAN_TXNULL))
19930 + psta = rtw_get_stainfo(pstapriv, cur_network->MacAddress);
19931 + if (psta) //only for infra. mode
19932 {
19933 -#ifdef CONFIG_FIND_BEST_CHANNEL
19934 -#if 0
19935 - for (i=0; pmlmeext->channel_set[i].ChannelNum !=0; i++) {
19936 - pmlmeext->channel_set[i].rx_count = 0;
19937 - }
19938 -#endif
19939 -#endif /* CONFIG_FIND_BEST_CHANNEL */
19940 + pmlmeinfo->FW_sta_info[psta->mac_id].psta = psta;
19941
19942 - //disable dynamic functions, such as high power, DIG
19943 - Save_DM_Func_Flag(padapter);
19944 - Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);
19945 + //DBG_871X("set_sta_rate\n");
19946 +
19947 + //set per sta rate after updating HT cap.
19948 + set_sta_rate(padapter, psta);
19949 + }
19950
19951 - //config the initial gain under scaning, need to write the BB registers
19952 -#ifdef CONFIG_IOCTL_CFG80211
19953 - if((wdev_to_priv(padapter->rtw_wdev))->p2p_enabled == _TRUE)
19954 - initialgain = 0x27;
19955 - else
19956 -#endif
19957 - initialgain = 0x17;
19958 + join_type = 2;
19959 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_JOIN, (u8 *)(&join_type));
19960
19961 -#ifdef CONFIG_P2P
19962 - if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE) && !rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE))
19963 - initialgain = 0x27;
19964 -#endif //CONFIG_P2P
19965 + if((pmlmeinfo->state&0x03) == WIFI_FW_STATION_STATE)
19966 + {
19967 + // correcting TSF
19968 + correct_TSF(padapter, pmlmeext);
19969 +
19970 + //set_link_timer(pmlmeext, DISCONNECT_TO);
19971 + }
19972
19973 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));
19974 -
19975 - //set MSR to no link state
19976 - Set_NETYPE0_MSR(padapter, _HW_STATE_NOLINK_);
19977 +#ifdef CONFIG_LPS
19978 + rtw_lps_ctrl_wk_cmd(padapter, LPS_CTRL_CONNECT, 0);
19979 +#endif
19980
19981 - val8 = 1; //before site survey
19982 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
19983 +exit_mlmeext_joinbss_event_callback:
19984
19985 - // Commented by Albert 2011/08/05
19986 - // The pre_tx_scan_timer_process will issue the scan H2C command.
19987 - // However, the driver should NOT enter the scanning mode at that time.
19988 - pmlmeext->sitesurvey_res.state = SCAN_PROCESS;
19989 - }
19990 +#ifdef CONFIG_DUALMAC_CONCURRENT
19991 + dc_handle_join_done(padapter, join_res);
19992 +#endif
19993 +#ifdef CONFIG_CONCURRENT_MODE
19994 + concurrent_chk_joinbss_done(padapter, join_res);
19995 +#endif
19996
19997 - site_survey(padapter);
19998 + DBG_871X("=>%s\n", __FUNCTION__);
19999
20000 - return H2C_SUCCESS;
20001 -
20002 }
20003
20004 -u8 setauth_hdl(_adapter *padapter, unsigned char *pbuf)
20005 +void mlmeext_sta_add_event_callback(_adapter *padapter, struct sta_info *psta)
20006 {
20007 - struct setauth_parm *pparm = (struct setauth_parm *)pbuf;
20008 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
20009 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
20010 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
20011 -
20012 - if (pparm->mode < 4)
20013 + u8 join_type;
20014 +
20015 + DBG_871X("%s\n", __FUNCTION__);
20016 +
20017 + if((pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE)
20018 {
20019 - pmlmeinfo->auth_algo = pparm->mode;
20020 + if(pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS)//adhoc master or sta_count>1
20021 + {
20022 + //nothing to do
20023 + }
20024 + else//adhoc client
20025 + {
20026 + //update TSF Value
20027 + //update_TSF(pmlmeext, pframe, len);
20028 +
20029 + // correcting TSF
20030 + correct_TSF(padapter, pmlmeext);
20031 +
20032 + //start beacon
20033 + if(send_beacon(padapter)==_FAIL)
20034 + {
20035 + pmlmeinfo->FW_sta_info[psta->mac_id].status = 0;
20036 +
20037 + pmlmeinfo->state ^= WIFI_FW_ADHOC_STATE;
20038 +
20039 + return;
20040 + }
20041 +
20042 + pmlmeinfo->state |= WIFI_FW_ASSOC_SUCCESS;
20043 +
20044 + }
20045 +
20046 + join_type = 2;
20047 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_JOIN, (u8 *)(&join_type));
20048 }
20049
20050 - return H2C_SUCCESS;
20051 -}
20052 + pmlmeinfo->FW_sta_info[psta->mac_id].psta = psta;
20053
20054 -u8 setkey_hdl(_adapter *padapter, u8 *pbuf)
20055 -{
20056 - unsigned short ctrl;
20057 - struct setkey_parm *pparm = (struct setkey_parm *)pbuf;
20058 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
20059 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
20060 - unsigned char null_sta[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
20061 + //rate radaptive
20062 + Update_RA_Entry(padapter, psta->mac_id);
20063
20064 - //main tx key for wep.
20065 - if(pparm->set_tx)
20066 - pmlmeinfo->key_index = pparm->keyid;
20067 -
20068 - //write cam
20069 - ctrl = BIT(15) | ((pparm->algorithm) << 2) | pparm->keyid;
20070 + //update adhoc sta_info
20071 + update_sta_info(padapter, psta);
20072
20073 - write_cam(padapter, pparm->keyid, ctrl, null_sta, pparm->key);
20074 -
20075 - return H2C_SUCCESS;
20076 }
20077
20078 -u8 set_stakey_hdl(_adapter *padapter, u8 *pbuf)
20079 +void mlmeext_sta_del_event_callback(_adapter *padapter)
20080 {
20081 - unsigned short ctrl=0;
20082 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
20083 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
20084 - struct set_stakey_parm *pparm = (struct set_stakey_parm *)pbuf;
20085 -#ifdef CONFIG_TDLS
20086 - struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
20087 - struct sta_priv *pstapriv = &padapter->stapriv;
20088 - struct sta_info *psta;
20089 -#endif
20090 -
20091 - if((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE)
20092 - {
20093 - unsigned char cam_id;//cam_entry
20094 - struct sta_info *psta;
20095 - struct sta_priv *pstapriv = &padapter->stapriv;
20096 -
20097 - psta = rtw_get_stainfo(pstapriv, pparm->addr);
20098 - if(psta)
20099 - {
20100 - ctrl = (BIT(15) | ((pparm->algorithm) << 2));
20101
20102 - DBG_8192C("r871x_set_stakey_hdl(): enc_algorithm=%d\n", pparm->algorithm);
20103 -
20104 - if((psta->mac_id<1) || (psta->mac_id>(NUM_STA-4)))
20105 - {
20106 - DBG_8192C("r871x_set_stakey_hdl():set_stakey failed, mac_id(aid)=%d\n", psta->mac_id);
20107 - return H2C_REJECTED;
20108 - }
20109 -
20110 - cam_id = (psta->mac_id + 3);//0~3 for default key, cmd_id=macid + 3, macid=aid+1;
20111 + if (is_client_associated_to_ap(padapter) || is_IBSS_empty(padapter))
20112 + {
20113 + //set_opmode_cmd(padapter, infra_client_with_mlme);
20114
20115 - DBG_8192C("Write CAM, mac_addr=%x:%x:%x:%x:%x:%x, cam_entry=%d\n", pparm->addr[0],
20116 - pparm->addr[1], pparm->addr[2], pparm->addr[3], pparm->addr[4],
20117 - pparm->addr[5], cam_id);
20118 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_DISCONNECT, 0);
20119 + rtw_hal_set_hwreg(padapter, HW_VAR_BSSID, null_addr);
20120
20121 - write_cam(padapter, cam_id, ctrl, pparm->addr, pparm->key);
20122 -
20123 - return H2C_SUCCESS_RSP;
20124 -
20125 - }
20126 - else
20127 + //restore to initial setting.
20128 + update_tx_basic_rate(padapter, padapter->registrypriv.wireless_mode);
20129 +
20130 +#ifdef CONFIG_DUALMAC_CONCURRENT
20131 + dc_set_channel_bwmode_disconnect(padapter);
20132 +#else
20133 +#ifdef CONFIG_CONCURRENT_MODE
20134 + if((check_buddy_fwstate(padapter, _FW_LINKED)) != _TRUE)
20135 {
20136 - DBG_8192C("r871x_set_stakey_hdl(): sta has been free\n");
20137 - return H2C_REJECTED;
20138 - }
20139 -
20140 - }
20141 +#endif //CONFIG_CONCURRENT_MODE
20142
20143 - //below for sta mode
20144 -
20145 - ctrl = BIT(15) | ((pparm->algorithm) << 2);
20146 + //switch to the 20M Hz mode after disconnect
20147 + pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
20148 + pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
20149 +
20150 + //SelectChannel(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset);
20151 + set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
20152
20153 -#ifdef CONFIG_TDLS
20154 - if(ptdlsinfo->cam_entry_to_clear!=0){
20155 - clear_cam_entry(padapter, ptdlsinfo->cam_entry_to_clear);
20156 - ptdlsinfo->cam_entry_to_clear=0;
20157 +#ifdef CONFIG_CONCURRENT_MODE
20158 + }
20159 +#endif //CONFIG_CONCURRENT_MODE
20160 +#endif //CONFIG_DUALMAC_CONCURRENT
20161
20162 - return H2C_SUCCESS;
20163 - }
20164 + flush_all_cam_entry(padapter);
20165 +
20166 + pmlmeinfo->state = WIFI_FW_NULL_STATE;
20167 +
20168 + //set MSR to no link state -> infra. mode
20169 + Set_MSR(padapter, _HW_STATE_STATION_);
20170 +
20171 + _cancel_timer_ex(&pmlmeext->link_timer);
20172
20173 - psta = rtw_get_stainfo(pstapriv, pparm->addr);//Get TDLS Peer STA
20174 - if( psta->tdls_sta_state&TDLS_LINKED_STATE ){
20175 - write_cam(padapter, psta->cam_entry, ctrl, pparm->addr, pparm->key);
20176 }
20177 - else
20178 -#endif
20179 - write_cam(padapter, 5, ctrl, pparm->addr, pparm->key);
20180
20181 - pmlmeinfo->enc_algo = pparm->algorithm;
20182 -
20183 - return H2C_SUCCESS;
20184 }
20185
20186 -u8 add_ba_hdl(_adapter *padapter, unsigned char *pbuf)
20187 -{
20188 - struct addBaReq_parm *pparm = (struct addBaReq_parm *)pbuf;
20189 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
20190 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
20191 +/****************************************************************************
20192
20193 - struct sta_info *psta = rtw_get_stainfo(&padapter->stapriv, pparm->addr);
20194 +Following are the functions for the timer handlers
20195 +
20196 +*****************************************************************************/
20197 +void _linked_rx_signal_strehgth_display(_adapter *padapter);
20198 +void _linked_rx_signal_strehgth_display(_adapter *padapter)
20199 +{
20200 + int UndecoratedSmoothedPWDB;
20201
20202 - if(!psta)
20203 - return H2C_SUCCESS;
20204 -
20205 +#ifdef CONFIG_CONCURRENT_MODE
20206 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
20207 + DBG_871X("============ pbuddy_adapter linked status check ===================\n");
20208 + DBG_871X("buddy_adapter_type=%d\n", pbuddy_adapter->adapter_type);
20209 + DBG_871X("pbuddy_adapter pathA Rx SNRdb:%d\n",pbuddy_adapter->recvpriv.RxSNRdB[0]);
20210 + DBG_871X("pbuddy_adapter pathA Rx PWDB:%d\n",pbuddy_adapter->recvpriv.rxpwdb);
20211 + DBG_871X("pbuddy_adapter pathA Rx RSSI:%d,pathB Rx RSSI:%d\n"
20212 + ,pbuddy_adapter->recvpriv.RxRssi[0],pbuddy_adapter->recvpriv.RxRssi[1]);
20213 + rtw_hal_get_def_var(pbuddy_adapter, HAL_DEF_UNDERCORATEDSMOOTHEDPWDB, &UndecoratedSmoothedPWDB);
20214 + DBG_871X("pbuddy_adapter UndecoratedSmoothedPWDB:%d\n",UndecoratedSmoothedPWDB);
20215 + DBG_871X("Rx RSSI:%d\n",pbuddy_adapter->recvpriv.rssi);
20216 + DBG_871X("Rx Signal_strength:%d\n",pbuddy_adapter->recvpriv.signal_strength);
20217 + DBG_871X("Rx Signal_qual:%d \n",pbuddy_adapter->recvpriv.signal_qual);
20218 + DBG_871X("============ linked status check ===================\n");
20219 + DBG_871X("adapter_type=%d\n", padapter->adapter_type);
20220 +#else //CONFIG_CONCURRENT_MODE
20221 + DBG_871X("============ linked status check ===================\n");
20222 +#endif //CONFIG_CONCURRENT_MODE
20223 + DBG_871X("pathA Rx SNRdb:%d, pathB Rx SNRdb:%d\n",padapter->recvpriv.RxSNRdB[0], padapter->recvpriv.RxSNRdB[1]);
20224 + DBG_871X("pathA Rx PWDB:%d\n",padapter->recvpriv.rxpwdb);
20225 + DBG_871X("pathA Rx RSSI:%d,pathB Rx RSSI:%d\n",padapter->recvpriv.RxRssi[0],padapter->recvpriv.RxRssi[1]);
20226 + rtw_hal_get_def_var(padapter, HAL_DEF_UNDERCORATEDSMOOTHEDPWDB, &UndecoratedSmoothedPWDB);
20227 + DBG_871X("UndecoratedSmoothedPWDB:%d\n",UndecoratedSmoothedPWDB);
20228 + DBG_871X("Rx RSSI:%d\n",padapter->recvpriv.rssi);
20229 + DBG_871X("Rx Signal_strength:%d\n",padapter->recvpriv.signal_strength);
20230 + DBG_871X("Rx Signal_qual:%d \n",padapter->recvpriv.signal_qual);
20231 + if ( check_fwstate( &padapter->mlmepriv, _FW_LINKED ))
20232 + {
20233 + DBG_871X("bw mode: %d, channel: %d\n", padapter->mlmeextpriv.cur_bwmode, padapter->mlmeextpriv.cur_channel );
20234 + DBG_871X("received bytes = %d\n", (u32) (padapter->recvpriv.rx_bytes - padapter->recvpriv.last_rx_bytes ) );
20235 + }
20236 + DBG_871X("============ linked status check ===================\n");
20237 + DBG_871X(" DIG PATH-A(0x%02x), PATH-B(0x%02x)\n",rtw_read8(padapter,0xc50),rtw_read8(padapter,0xc58));
20238 + DBG_871X(" OFDM -Alarm DA2(0x%04x),DA4(0x%04x),DA6(0x%04x),DA8(0x%04x)\n",
20239 + rtw_read16(padapter,0xDA2),rtw_read16(padapter,0xDA4),rtw_read16(padapter,0xDA6),rtw_read16(padapter,0xDA8));
20240
20241 - if (((pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS) && (pmlmeinfo->HT_enable)) ||
20242 - ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE))
20243 - {
20244 - //pmlmeinfo->ADDBA_retry_count = 0;
20245 - //pmlmeinfo->candidate_tid_bitmap |= (0x1 << pparm->tid);
20246 - //psta->htpriv.candidate_tid_bitmap |= BIT(pparm->tid);
20247 - issue_action_BA(padapter, pparm->addr, RTW_WLAN_ACTION_ADDBA_REQ, (u16)pparm->tid);
20248 - //_set_timer(&pmlmeext->ADDBA_timer, ADDBA_TO);
20249 - _set_timer(&psta->addba_retry_timer, ADDBA_TO);
20250 - }
20251 - else
20252 - {
20253 - psta->htpriv.candidate_tid_bitmap &= ~BIT(pparm->tid);
20254 - }
20255 + DBG_871X(" CCK -Alarm A5B(0x%02x),A5C(0x%02x)\n",rtw_read8(padapter,0xA5B),rtw_read8(padapter,0xA5C));
20256 + DBG_871X(" FalseAlmCnt_all(%d)\n",padapter->recvpriv.FalseAlmCnt_all);
20257
20258 - return H2C_SUCCESS;
20259 }
20260
20261 -u8 set_tx_beacon_cmd(_adapter* padapter)
20262 +u8 chk_ap_is_alive(_adapter *padapter, struct sta_info *psta)
20263 {
20264 - struct cmd_obj *ph2c;
20265 - struct Tx_Beacon_param *ptxBeacon_parm;
20266 - struct cmd_priv *pcmdpriv = &(padapter->cmdpriv);
20267 + u8 ret = _FALSE;
20268 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
20269 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
20270 - u8 res = _SUCCESS;
20271 - int len_diff = 0;
20272 -
20273 -_func_enter_;
20274 -
20275 - if ((ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj))) == NULL)
20276 +
20277 + #ifdef DBG_EXPIRATION_CHK
20278 + DBG_871X(FUNC_ADPT_FMT" rx:"STA_PKTS_FMT", beacon:%llu, probersp_to_self:%llu"
20279 + /*", probersp_bm:%llu, probersp_uo:%llu, probereq:%llu, BI:%u"*/
20280 + ", retry:%u\n"
20281 + , FUNC_ADPT_ARG(padapter)
20282 + , STA_RX_PKTS_DIFF_ARG(psta)
20283 + , psta->sta_stats.rx_beacon_pkts - psta->sta_stats.last_rx_beacon_pkts
20284 + , psta->sta_stats.rx_probersp_pkts - psta->sta_stats.last_rx_probersp_pkts
20285 + /*, psta->sta_stats.rx_probersp_bm_pkts - psta->sta_stats.last_rx_probersp_bm_pkts
20286 + , psta->sta_stats.rx_probersp_uo_pkts - psta->sta_stats.last_rx_probersp_uo_pkts
20287 + , psta->sta_stats.rx_probereq_pkts - psta->sta_stats.last_rx_probereq_pkts
20288 + , pmlmeinfo->bcn_interval*/
20289 + , pmlmeext->retry
20290 + );
20291 +
20292 + DBG_871X(FUNC_ADPT_FMT" tx_pkts:%llu, link_count:%u\n", FUNC_ADPT_ARG(padapter)
20293 + , padapter->xmitpriv.tx_pkts
20294 + , pmlmeinfo->link_count
20295 + );
20296 + #endif
20297 +
20298 + if((sta_rx_data_pkts(psta) == sta_last_rx_data_pkts(psta))
20299 + && sta_rx_beacon_pkts(psta) == sta_last_rx_beacon_pkts(psta)
20300 + && sta_rx_probersp_pkts(psta) == sta_last_rx_probersp_pkts(psta)
20301 + )
20302 {
20303 - res= _FAIL;
20304 - goto exit;
20305 + ret = _FALSE;
20306 }
20307 -
20308 - if ((ptxBeacon_parm = (struct Tx_Beacon_param *)rtw_zmalloc(sizeof(struct Tx_Beacon_param))) == NULL)
20309 + else
20310 {
20311 - rtw_mfree((unsigned char *)ph2c, sizeof(struct cmd_obj));
20312 - res= _FAIL;
20313 - goto exit;
20314 + ret = _TRUE;
20315 }
20316
20317 - _rtw_memcpy(&(ptxBeacon_parm->network), &(pmlmeinfo->network), sizeof(WLAN_BSSID_EX));
20318 -
20319 - len_diff = update_hidden_ssid(
20320 - ptxBeacon_parm->network.IEs+_BEACON_IE_OFFSET_
20321 - , ptxBeacon_parm->network.IELength-_BEACON_IE_OFFSET_
20322 - , pmlmeinfo->hidden_ssid_mode
20323 - );
20324 - ptxBeacon_parm->network.IELength += len_diff;
20325 -
20326 - init_h2fwcmd_w_parm_no_rsp(ph2c, ptxBeacon_parm, GEN_CMD_CODE(_TX_Beacon));
20327 -
20328 - res = rtw_enqueue_cmd(pcmdpriv, ph2c);
20329 -
20330 -
20331 -exit:
20332 -
20333 -_func_exit_;
20334 + sta_update_last_rx_pkts(psta);
20335
20336 - return res;
20337 + return ret;
20338 }
20339
20340 -
20341 -u8 mlme_evt_hdl(_adapter *padapter, unsigned char *pbuf)
20342 +void linked_status_chk(_adapter *padapter)
20343 {
20344 - u8 evt_code, evt_seq;
20345 - u16 evt_sz;
20346 - uint *peventbuf;
20347 - void (*event_callback)(_adapter *dev, u8 *pbuf);
20348 - struct evt_priv *pevt_priv = &(padapter->evtpriv);
20349 + u32 i;
20350 + struct sta_info *psta;
20351 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
20352 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
20353 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
20354 + struct sta_priv *pstapriv = &padapter->stapriv;
20355
20356 - peventbuf = (uint*)pbuf;
20357 - evt_sz = (u16)(*peventbuf&0xffff);
20358 - evt_seq = (u8)((*peventbuf>>24)&0x7f);
20359 - evt_code = (u8)((*peventbuf>>16)&0xff);
20360 -
20361 -
20362 - #ifdef CHECK_EVENT_SEQ
20363 - // checking event sequence...
20364 - if (evt_seq != (ATOMIC_READ(&pevt_priv->event_seq) & 0x7f) )
20365 - {
20366 - RT_TRACE(_module_rtl871x_cmd_c_,_drv_info_,("Evetn Seq Error! %d vs %d\n", (evt_seq & 0x7f), (ATOMIC_READ(&pevt_priv->event_seq) & 0x7f)));
20367 -
20368 - pevt_priv->event_seq = (evt_seq+1)&0x7f;
20369 + if(padapter->bRxRSSIDisplay)
20370 + _linked_rx_signal_strehgth_display(padapter);
20371
20372 - goto _abort_event_;
20373 - }
20374 + #ifdef DBG_CONFIG_ERROR_DETECT
20375 + rtw_hal_sreset_linked_status_check(padapter);
20376 #endif
20377
20378 - // checking if event code is valid
20379 - if (evt_code >= MAX_C2HEVT)
20380 + if (is_client_associated_to_ap(padapter))
20381 {
20382 - RT_TRACE(_module_rtl871x_cmd_c_,_drv_err_,("\nEvent Code(%d) mismatch!\n", evt_code));
20383 - goto _abort_event_;
20384 - }
20385 + //linked infrastructure client mode
20386
20387 - // checking if event size match the event parm size
20388 - if ((wlanevents[evt_code].parmsize != 0) &&
20389 - (wlanevents[evt_code].parmsize != evt_sz))
20390 - {
20391 -
20392 - RT_TRACE(_module_rtl871x_cmd_c_,_drv_err_,("\nEvent(%d) Parm Size mismatch (%d vs %d)!\n",
20393 - evt_code, wlanevents[evt_code].parmsize, evt_sz));
20394 - goto _abort_event_;
20395 -
20396 - }
20397 + int tx_chk = _SUCCESS, rx_chk = _SUCCESS;
20398 + int rx_chk_limit;
20399
20400 - ATOMIC_INC(&pevt_priv->event_seq);
20401 + #if defined(DBG_ROAMING_TEST)
20402 + rx_chk_limit = 1;
20403 + #elif defined(CONFIG_ACTIVE_KEEP_ALIVE_CHECK)
20404 + rx_chk_limit = 4;
20405 + #else
20406 + rx_chk_limit = 8;
20407 + #endif
20408
20409 - peventbuf += 2;
20410 -
20411 - if(peventbuf)
20412 - {
20413 - event_callback = wlanevents[evt_code].event_callback;
20414 - event_callback(padapter, (u8*)peventbuf);
20415 + // Marked by Kurt 20130715
20416 + // For WiDi 3.5 and later on, they don't ask WiDi sink to do roaming, so we could not check rx limit that strictly.
20417 + // todo: To check why rx_chk would be _FALSE under miracast session.
20418 + //#ifdef CONFIG_INTEL_WIDI
20419 + //if (padapter->mlmepriv.widi_state != INTEL_WIDI_STATE_NONE)
20420 + // rx_chk_limit = 1;
20421 + //#endif
20422 +
20423 + if ((psta = rtw_get_stainfo(pstapriv, pmlmeinfo->network.MacAddress)) != NULL)
20424 + {
20425 + bool is_p2p_enable = _FALSE;
20426 + #ifdef CONFIG_P2P
20427 + is_p2p_enable = !rtw_p2p_chk_state(&padapter->wdinfo, P2P_STATE_NONE);
20428 + #endif
20429 +
20430 + if (chk_ap_is_alive(padapter, psta) == _FALSE)
20431 + rx_chk = _FAIL;
20432
20433 - pevt_priv->evt_done_cnt++;
20434 - }
20435 + if (pxmitpriv->last_tx_pkts == pxmitpriv->tx_pkts)
20436 + tx_chk = _FAIL;
20437
20438 + #ifdef CONFIG_ACTIVE_KEEP_ALIVE_CHECK
20439 + if (pmlmeext->active_keep_alive_check && (rx_chk == _FAIL || tx_chk == _FAIL)) {
20440 + u8 backup_oper_channel=0;
20441
20442 -_abort_event_:
20443 + /* switch to correct channel of current network before issue keep-alive frames */
20444 + if (rtw_get_oper_ch(padapter) != pmlmeext->cur_channel) {
20445 + backup_oper_channel = rtw_get_oper_ch(padapter);
20446 + SelectChannel(padapter, pmlmeext->cur_channel);
20447 + }
20448
20449 + if (rx_chk != _SUCCESS)
20450 + issue_probereq_ex(padapter, &pmlmeinfo->network.Ssid, psta->hwaddr, 3, 1);
20451
20452 - return H2C_SUCCESS;
20453 -
20454 -}
20455 + if ((tx_chk != _SUCCESS && pmlmeinfo->link_count++ == 0xf) || rx_chk != _SUCCESS) {
20456 + tx_chk = issue_nulldata(padapter, psta->hwaddr, 0, 3, 1);
20457 + /* if tx acked and p2p disabled, set rx_chk _SUCCESS to reset retry count */
20458 + if (tx_chk == _SUCCESS && !is_p2p_enable)
20459 + rx_chk = _SUCCESS;
20460 + }
20461
20462 -u8 h2c_msg_hdl(_adapter *padapter, unsigned char *pbuf)
20463 -{
20464 - if(!pbuf)
20465 - return H2C_PARAMETERS_ERROR;
20466 + /* back to the original operation channel */
20467 + if(backup_oper_channel>0)
20468 + SelectChannel(padapter, backup_oper_channel);
20469
20470 - return H2C_SUCCESS;
20471 -}
20472 + }
20473 + else
20474 + #endif /* CONFIG_ACTIVE_KEEP_ALIVE_CHECK */
20475 + {
20476 + if (rx_chk != _SUCCESS) {
20477 + if (pmlmeext->retry == 0) {
20478 + #ifdef DBG_EXPIRATION_CHK
20479 + DBG_871X("issue_probereq to trigger probersp, retry=%d\n", pmlmeext->retry);
20480 + #endif
20481 + issue_probereq(padapter, &pmlmeinfo->network.Ssid, pmlmeinfo->network.MacAddress);
20482 + issue_probereq(padapter, &pmlmeinfo->network.Ssid, pmlmeinfo->network.MacAddress);
20483 + issue_probereq(padapter, &pmlmeinfo->network.Ssid, pmlmeinfo->network.MacAddress);
20484 + }
20485 + }
20486
20487 + if (tx_chk != _SUCCESS && pmlmeinfo->link_count++ == 0xf) {
20488 + #ifdef DBG_EXPIRATION_CHK
20489 + DBG_871X("%s issue_nulldata 0\n", __FUNCTION__);
20490 + #endif
20491 + tx_chk = issue_nulldata(padapter, NULL, 0, 1, 0);
20492 + }
20493 + }
20494
20495 -u8 tx_beacon_hdl(_adapter *padapter, unsigned char *pbuf)
20496 -{
20497 - if(send_beacon(padapter)==_FAIL)
20498 - {
20499 - DBG_871X("issue_beacon, fail!\n");
20500 - return H2C_PARAMETERS_ERROR;
20501 - }
20502 -#ifdef CONFIG_AP_MODE
20503 - else //tx bc/mc frames after update TIM
20504 - {
20505 - _irqL irqL;
20506 - struct sta_info *psta_bmc;
20507 - _list *xmitframe_plist, *xmitframe_phead;
20508 - struct xmit_frame *pxmitframe=NULL;
20509 - struct sta_priv *pstapriv = &padapter->stapriv;
20510 -
20511 - //for BC/MC Frames
20512 - psta_bmc = rtw_get_bcmc_stainfo(padapter);
20513 - if(!psta_bmc)
20514 - return H2C_SUCCESS;
20515 -
20516 - if((pstapriv->tim_bitmap&BIT(0)) && (psta_bmc->sleepq_len>0))
20517 - {
20518 -#ifndef CONFIG_PCI_HCI
20519 - rtw_msleep_os(10);// 10ms, ATIM(HIQ) Windows
20520 -#endif
20521 - _enter_critical_bh(&psta_bmc->sleep_q.lock, &irqL);
20522 + if (rx_chk == _FAIL) {
20523 + pmlmeext->retry++;
20524 + if (pmlmeext->retry > rx_chk_limit) {
20525 + DBG_871X(FUNC_ADPT_FMT" disconnect or roaming\n",
20526 + FUNC_ADPT_ARG(padapter));
20527 + receive_disconnect(padapter, pmlmeinfo->network.MacAddress
20528 + , WLAN_REASON_EXPIRATION_CHK);
20529 + return;
20530 + }
20531 + } else {
20532 + pmlmeext->retry = 0;
20533 + }
20534
20535 - xmitframe_phead = get_list_head(&psta_bmc->sleep_q);
20536 - xmitframe_plist = get_next(xmitframe_phead);
20537 + if (tx_chk == _FAIL) {
20538 + pmlmeinfo->link_count &= 0xf;
20539 + } else {
20540 + pxmitpriv->last_tx_pkts = pxmitpriv->tx_pkts;
20541 + pmlmeinfo->link_count = 0;
20542 + }
20543
20544 - while ((rtw_end_of_queue_search(xmitframe_phead, xmitframe_plist)) == _FALSE)
20545 - {
20546 - pxmitframe = LIST_CONTAINOR(xmitframe_plist, struct xmit_frame, list);
20547 + } //end of if ((psta = rtw_get_stainfo(pstapriv, passoc_res->network.MacAddress)) != NULL)
20548 + }
20549 + else if (is_client_associated_to_ibss(padapter))
20550 + {
20551 + //linked IBSS mode
20552 + //for each assoc list entry to check the rx pkt counter
20553 + for (i = IBSS_START_MAC_ID; i < NUM_STA; i++)
20554 + {
20555 + if (pmlmeinfo->FW_sta_info[i].status == 1)
20556 + {
20557 + psta = pmlmeinfo->FW_sta_info[i].psta;
20558
20559 - xmitframe_plist = get_next(xmitframe_plist);
20560 + if(NULL==psta) continue;
20561
20562 - rtw_list_delete(&pxmitframe->list);
20563 + if (pmlmeinfo->FW_sta_info[i].rx_pkt == sta_rx_pkts(psta))
20564 + {
20565
20566 - psta_bmc->sleepq_len--;
20567 - if(psta_bmc->sleepq_len>0)
20568 - pxmitframe->attrib.mdata = 1;
20569 + if(pmlmeinfo->FW_sta_info[i].retry<3)
20570 + {
20571 + pmlmeinfo->FW_sta_info[i].retry++;
20572 + }
20573 + else
20574 + {
20575 + pmlmeinfo->FW_sta_info[i].retry = 0;
20576 + pmlmeinfo->FW_sta_info[i].status = 0;
20577 + report_del_sta_event(padapter, psta->hwaddr
20578 + , 65535// indicate disconnect caused by no rx
20579 + );
20580 + }
20581 + }
20582 else
20583 - pxmitframe->attrib.mdata = 0;
20584 -
20585 - pxmitframe->attrib.triggered=1;
20586 -
20587 - pxmitframe->attrib.qsel = 0x11;//HIQ
20588 -
20589 - if(padapter->HalFunc.hal_xmit(padapter, pxmitframe) == _TRUE)
20590 - {
20591 - rtw_os_xmit_complete(padapter, pxmitframe);
20592 + {
20593 + pmlmeinfo->FW_sta_info[i].retry = 0;
20594 + pmlmeinfo->FW_sta_info[i].rx_pkt = (u32)sta_rx_pkts(psta);
20595 }
20596 -
20597 - //pstapriv->tim_bitmap &= ~BIT(0);
20598 -
20599 - }
20600 -
20601 - _exit_critical_bh(&psta_bmc->sleep_q.lock, &irqL);
20602 -
20603 + }
20604 }
20605
20606 + //set_link_timer(pmlmeext, DISCONNECT_TO);
20607 +
20608 }
20609 -#endif
20610
20611 - return H2C_SUCCESS;
20612 -
20613 }
20614
20615 -#ifdef CONFIG_AP_MODE
20616 -
20617 -void init_mlme_ap_info(_adapter *padapter)
20618 +void survey_timer_hdl(_adapter *padapter)
20619 {
20620 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
20621 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
20622 + struct cmd_obj *ph2c;
20623 + struct sitesurvey_parm *psurveyPara;
20624 + struct cmd_priv *pcmdpriv=&padapter->cmdpriv;
20625 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
20626 +#ifdef CONFIG_P2P
20627 + struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
20628 +#endif
20629
20630 - _rtw_spinlock_init(&pmlmepriv->bcn_update_lock);
20631 + //DBG_871X("marc: survey timer\n");
20632 +#ifdef PLATFORM_FREEBSD
20633 + rtw_mtx_lock(NULL);
20634 + if (callout_pending(&padapter->mlmeextpriv.survey_timer.callout)) {
20635 + /* callout was reset */
20636 + //mtx_unlock(&sc->sc_mtx);
20637 + rtw_mtx_unlock(NULL);
20638 + return;
20639 + }
20640 + if (!callout_active(&padapter->mlmeextpriv.survey_timer.callout)) {
20641 + /* callout was stopped */
20642 + //mtx_unlock(&sc->sc_mtx);
20643 + rtw_mtx_unlock(NULL);
20644 + return;
20645 + }
20646 + callout_deactivate(&padapter->mlmeextpriv.survey_timer.callout);
20647
20648 - //pmlmeext->bstart_bss = _FALSE;
20649
20650 - start_ap_mode(padapter);
20651 -}
20652 +#endif
20653
20654 -void free_mlme_ap_info(_adapter *padapter)
20655 -{
20656 - _irqL irqL;
20657 - struct sta_info *psta=NULL;
20658 - struct sta_priv *pstapriv = &padapter->stapriv;
20659 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
20660 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
20661 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
20662 + //issue rtw_sitesurvey_cmd
20663 + if (pmlmeext->sitesurvey_res.state > SCAN_START)
20664 + {
20665 + if(pmlmeext->sitesurvey_res.state == SCAN_PROCESS)
20666 + {
20667 +#ifdef CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
20668 + if( padapter->mlmeextpriv.mlmext_info.scan_cnt != RTW_SCAN_NUM_OF_CH )
20669 +#endif //CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
20670 + pmlmeext->sitesurvey_res.channel_idx++;
20671 + }
20672
20673 - //stop_ap_mode(padapter);
20674 + if(pmlmeext->scan_abort == _TRUE)
20675 + {
20676 + #ifdef CONFIG_P2P
20677 + if(!rtw_p2p_chk_state(&padapter->wdinfo, P2P_STATE_NONE))
20678 + {
20679 + rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_MAX);
20680 + pmlmeext->sitesurvey_res.channel_idx = 3;
20681 + DBG_871X("%s idx:%d, cnt:%u\n", __FUNCTION__
20682 + , pmlmeext->sitesurvey_res.channel_idx
20683 + , pwdinfo->find_phase_state_exchange_cnt
20684 + );
20685 + }
20686 + else
20687 + #endif
20688 + {
20689 + pmlmeext->sitesurvey_res.channel_idx = pmlmeext->sitesurvey_res.ch_num;
20690 + DBG_871X("%s idx:%d\n", __FUNCTION__
20691 + , pmlmeext->sitesurvey_res.channel_idx
20692 + );
20693 + }
20694
20695 - pmlmepriv->update_bcn = _FALSE;
20696 - pmlmeext->bstart_bss = _FALSE;
20697 -
20698 - rtw_sta_flush(padapter);
20699 + pmlmeext->scan_abort = _FALSE;//reset
20700 + }
20701
20702 - pmlmeinfo->state = _HW_STATE_NOLINK_;
20703 + if ((ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj))) == NULL)
20704 + {
20705 + goto exit_survey_timer_hdl;
20706 + }
20707
20708 - //free_assoc_sta_resources
20709 - rtw_free_all_stainfo(padapter);
20710 + if ((psurveyPara = (struct sitesurvey_parm*)rtw_zmalloc(sizeof(struct sitesurvey_parm))) == NULL)
20711 + {
20712 + rtw_mfree((unsigned char *)ph2c, sizeof(struct cmd_obj));
20713 + goto exit_survey_timer_hdl;
20714 + }
20715
20716 - //free bc/mc sta_info
20717 - psta = rtw_get_bcmc_stainfo(padapter);
20718 - _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
20719 - rtw_free_stainfo(padapter, psta);
20720 - _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
20721 -
20722 + init_h2fwcmd_w_parm_no_rsp(ph2c, psurveyPara, GEN_CMD_CODE(_SiteSurvey));
20723 + rtw_enqueue_cmd(pcmdpriv, ph2c);
20724 + }
20725
20726 - _rtw_spinlock_free(&pmlmepriv->bcn_update_lock);
20727 -
20728 +
20729 +exit_survey_timer_hdl:
20730 +#ifdef PLATFORM_FREEBSD
20731 + rtw_mtx_unlock(NULL);
20732 +#endif
20733 +
20734 + return;
20735 }
20736
20737 -static void update_BCNTIM(_adapter *padapter)
20738 +void link_timer_hdl(_adapter *padapter)
20739 {
20740 - struct sta_priv *pstapriv = &padapter->stapriv;
20741 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
20742 - WLAN_BSSID_EX *pnetwork = (WLAN_BSSID_EX *)&pmlmepriv->cur_network.network;
20743 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
20744 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
20745 - WLAN_BSSID_EX *pnetwork_mlmeext = &(pmlmeinfo->network);
20746 - unsigned char *src_ie = pnetwork->IEs;
20747 - unsigned int src_ielen = pnetwork->IELength;
20748 - unsigned char *dst_ie = pnetwork_mlmeext->IEs;
20749 -
20750 -
20751 - //update TIM IE
20752 - //if(pstapriv->tim_bitmap)
20753 - if(_TRUE)
20754 - {
20755 - u8 *p, ie_len;
20756 - u16 tim_bitmap_le;
20757 - u32 tmp_len, head_len=0;
20758 + //static unsigned int rx_pkt = 0;
20759 + //static u64 tx_cnt = 0;
20760 + //struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
20761 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
20762 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
20763 + //struct sta_priv *pstapriv = &padapter->stapriv;
20764 +
20765 +#ifdef PLATFORM_FREEBSD
20766 + rtw_mtx_lock(NULL);
20767 + if (callout_pending(&padapter->mlmeextpriv.survey_timer.callout)) {
20768 + /* callout was reset */
20769 + //mtx_unlock(&sc->sc_mtx);
20770 + rtw_mtx_unlock(NULL);
20771 + return;
20772 + }
20773 + if (!callout_active(&padapter->mlmeextpriv.survey_timer.callout)) {
20774 + /* callout was stopped */
20775 + //mtx_unlock(&sc->sc_mtx);
20776 + rtw_mtx_unlock(NULL);
20777 + return;
20778 + }
20779 + callout_deactivate(&padapter->mlmeextpriv.survey_timer.callout);
20780
20781 - tim_bitmap_le = cpu_to_le16(pstapriv->tim_bitmap);
20782
20783 - //calucate head_len
20784 - head_len = _FIXED_IE_LENGTH_;
20785 - head_len += pnetwork->Ssid.SsidLength + 2;
20786 +#endif
20787
20788 - // get supported rates len
20789 - p = rtw_get_ie(src_ie + _BEACON_IE_OFFSET_, _SUPPORTEDRATES_IE_, &tmp_len, (pnetwork->IELength - _BEACON_IE_OFFSET_));
20790 - if (p != NULL)
20791 - {
20792 - head_len += tmp_len+2;
20793 + if (pmlmeinfo->state & WIFI_FW_AUTH_NULL)
20794 + {
20795 + DBG_871X("link_timer_hdl:no beacon while connecting\n");
20796 + pmlmeinfo->state = WIFI_FW_NULL_STATE;
20797 + report_join_res(padapter, -3);
20798 + }
20799 + else if (pmlmeinfo->state & WIFI_FW_AUTH_STATE)
20800 + {
20801 + //re-auth timer
20802 + if (++pmlmeinfo->reauth_count > REAUTH_LIMIT)
20803 + {
20804 + //if (pmlmeinfo->auth_algo != dot11AuthAlgrthm_Auto)
20805 + //{
20806 + pmlmeinfo->state = 0;
20807 + report_join_res(padapter, -1);
20808 + return;
20809 + //}
20810 + //else
20811 + //{
20812 + // pmlmeinfo->auth_algo = dot11AuthAlgrthm_Shared;
20813 + // pmlmeinfo->reauth_count = 0;
20814 + //}
20815 }
20816 -
20817 - //DS Parameter Set IE, len=3
20818 - head_len += 3;
20819 -
20820 - //copy head offset
20821 - _rtw_memcpy(dst_ie, src_ie, head_len);
20822
20823 + DBG_871X("link_timer_hdl: auth timeout and try again\n");
20824 + pmlmeinfo->auth_seq = 1;
20825 + issue_auth(padapter, NULL, 0);
20826 + set_link_timer(pmlmeext, REAUTH_TO);
20827 + }
20828 + else if (pmlmeinfo->state & WIFI_FW_ASSOC_STATE)
20829 + {
20830 + //re-assoc timer
20831 + if (++pmlmeinfo->reassoc_count > REASSOC_LIMIT)
20832 + {
20833 + pmlmeinfo->state = WIFI_FW_NULL_STATE;
20834 + report_join_res(padapter, -2);
20835 + return;
20836 + }
20837
20838 - //append TIM IE from head_len offset
20839 - dst_ie+=head_len;
20840 -
20841 - *dst_ie++=_TIM_IE_;
20842 -
20843 - if((pstapriv->tim_bitmap&0xff00) && (pstapriv->tim_bitmap&0x00fc))
20844 - ie_len = 5;
20845 - else
20846 - ie_len = 4;
20847 + DBG_871X("link_timer_hdl: assoc timeout and try again\n");
20848 + issue_assocreq(padapter);
20849 + set_link_timer(pmlmeext, REASSOC_TO);
20850 + }
20851 +#if 0
20852 + else if (is_client_associated_to_ap(padapter))
20853 + {
20854 + //linked infrastructure client mode
20855 + if ((psta = rtw_get_stainfo(pstapriv, pmlmeinfo->network.MacAddress)) != NULL)
20856 + {
20857 + /*to monitor whether the AP is alive or not*/
20858 + if (rx_pkt == psta->sta_stats.rx_pkts)
20859 + {
20860 + receive_disconnect(padapter, pmlmeinfo->network.MacAddress);
20861 + return;
20862 + }
20863 + else
20864 + {
20865 + rx_pkt = psta->sta_stats.rx_pkts;
20866 + set_link_timer(pmlmeext, DISCONNECT_TO);
20867 + }
20868
20869 - *dst_ie++= ie_len;
20870 -
20871 - *dst_ie++=0;//DTIM count
20872 - *dst_ie++=1;//DTIM peroid
20873 -
20874 - if(pstapriv->tim_bitmap&BIT(0))//for bc/mc frames
20875 - *dst_ie++ = BIT(0);//bitmap ctrl
20876 - else
20877 - *dst_ie++ = 0;
20878 + //update the EDCA paramter according to the Tx/RX mode
20879 + update_EDCA_param(padapter);
20880
20881 - if(ie_len==4)
20882 - {
20883 - *dst_ie++ = *(u8*)&tim_bitmap_le;
20884 - }
20885 - else if(ie_len==5)
20886 - {
20887 - _rtw_memcpy(dst_ie, &tim_bitmap_le, 2);
20888 - dst_ie+=2;
20889 - }
20890 -
20891 - //copy remainder IE
20892 - _rtw_memcpy(dst_ie, src_ie+head_len, src_ielen-head_len);
20893 + /*to send the AP a nulldata if no frame is xmitted in order to keep alive*/
20894 + if (pmlmeinfo->link_count++ == 0)
20895 + {
20896 + tx_cnt = pxmitpriv->tx_pkts;
20897 + }
20898 + else if ((pmlmeinfo->link_count & 0xf) == 0)
20899 + {
20900 + if (tx_cnt == pxmitpriv->tx_pkts)
20901 + {
20902 + issue_nulldata(padapter, NULL, 0, 0, 0);
20903 + }
20904
20905 - //pnetwork_mlmeext->Length += ie_len+2;
20906 - //pnetwork_mlmeext->IELength += ie_len+2;
20907 - pnetwork_mlmeext->Length = pnetwork->Length+ie_len+2;
20908 - pnetwork_mlmeext->IELength = src_ielen+ie_len+2;
20909 -
20910 + tx_cnt = pxmitpriv->tx_pkts;
20911 + }
20912 + } //end of if ((psta = rtw_get_stainfo(pstapriv, passoc_res->network.MacAddress)) != NULL)
20913 }
20914 - else
20915 + else if (is_client_associated_to_ibss(padapter))
20916 {
20917 - _rtw_memcpy(dst_ie, src_ie, src_ielen);
20918 - pnetwork_mlmeext->Length = pnetwork->Length;
20919 - pnetwork_mlmeext->IELength = src_ielen;
20920 + //linked IBSS mode
20921 + //for each assoc list entry to check the rx pkt counter
20922 + for (i = IBSS_START_MAC_ID; i < NUM_STA; i++)
20923 + {
20924 + if (pmlmeinfo->FW_sta_info[i].status == 1)
20925 + {
20926 + psta = pmlmeinfo->FW_sta_info[i].psta;
20927 +
20928 + if (pmlmeinfo->FW_sta_info[i].rx_pkt == psta->sta_stats.rx_pkts)
20929 + {
20930 + pmlmeinfo->FW_sta_info[i].status = 0;
20931 + report_del_sta_event(padapter, psta->hwaddr);
20932 + }
20933 + else
20934 + {
20935 + pmlmeinfo->FW_sta_info[i].rx_pkt = psta->sta_stats.rx_pkts;
20936 + }
20937 + }
20938 + }
20939 +
20940 + set_link_timer(pmlmeext, DISCONNECT_TO);
20941 }
20942 +#endif
20943
20944 -#ifdef CONFIG_USB_HCI
20945 - set_tx_beacon_cmd(padapter);
20946 +#ifdef PLATFORM_FREEBSD
20947 + rtw_mtx_unlock(NULL);
20948 #endif
20949
20950 + return;
20951 +}
20952
20953 -/*
20954 - if(send_beacon(padapter)==_FAIL)
20955 +void addba_timer_hdl(struct sta_info *psta)
20956 +{
20957 + struct ht_priv *phtpriv;
20958 +
20959 + if(!psta)
20960 + return;
20961 +
20962 + phtpriv = &psta->htpriv;
20963 +
20964 + if((phtpriv->ht_option==_TRUE) && (phtpriv->ampdu_enable==_TRUE))
20965 {
20966 - DBG_871X("issue_beacon, fail!\n");
20967 + if(phtpriv->candidate_tid_bitmap)
20968 + phtpriv->candidate_tid_bitmap=0x0;
20969 +
20970 }
20971 -*/
20972 -
20973 }
20974
20975 -u8 chk_sta_is_alive(struct sta_info *psta)
20976 +#ifdef CONFIG_IEEE80211W
20977 +void sa_query_timer_hdl(_adapter *padapter)
20978 {
20979 - u8 ret = _FALSE;
20980 - #ifdef DBG_EXPIRATION_CHK
20981 - DBG_871X("sta:"MAC_FMT", rx:"STA_PKTS_FMT", expire_to:%u, %s\n"
20982 - , MAC_ARG(psta->hwaddr), STA_RX_PKTS_ARG(psta)
20983 - , psta->expire_to
20984 - , psta->state&WIFI_SLEEP_STATE?"SLEEP":""
20985 - );
20986 - #endif
20987 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
20988 + struct mlme_priv * pmlmepriv = &padapter->mlmepriv;
20989 + _irqL irqL;
20990 + //disconnect
20991 + _enter_critical_bh(&pmlmepriv->lock, &irqL);
20992
20993 - //if(sta_last_rx_pkts(psta) == sta_rx_pkts(psta))
20994 - if(psta->sta_stats.last_rx_data_pkts == psta->sta_stats.rx_data_pkts)
20995 - {
20996 - #if 0
20997 - if(psta->state&WIFI_SLEEP_STATE)
20998 - ret = _TRUE;
20999 - #endif
21000 - }
21001 - else
21002 + if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)
21003 {
21004 - ret = _TRUE;
21005 + rtw_disassoc_cmd(padapter, 0, _TRUE);
21006 + rtw_indicate_disconnect(padapter);
21007 + rtw_free_assoc_resources(padapter, 1);
21008 }
21009 -
21010 - sta_update_last_rx_pkts(psta);
21011
21012 - return ret;
21013 + _exit_critical_bh(&pmlmepriv->lock, &irqL);
21014 + DBG_871X("SA query timeout disconnect\n");
21015 }
21016 +#endif //CONFIG_IEEE80211W
21017
21018 -void expire_timeout_chk(_adapter *padapter)
21019 +u8 NULL_hdl(_adapter *padapter, u8 *pbuf)
21020 {
21021 - _irqL irqL;
21022 - _list *phead, *plist;
21023 - struct sta_info *psta=NULL;
21024 - struct sta_priv *pstapriv = &padapter->stapriv;
21025 + return H2C_SUCCESS;
21026 +}
21027
21028 +#ifdef CONFIG_AUTO_AP_MODE
21029 +void rtw_start_auto_ap(_adapter *adapter)
21030 +{
21031 + DBG_871X("%s\n", __FUNCTION__);
21032
21033 - _enter_critical_bh(&pstapriv->auth_list_lock, &irqL);
21034 -
21035 - phead = &pstapriv->auth_list;
21036 - plist = get_next(phead);
21037 + rtw_set_802_11_infrastructure_mode(adapter, Ndis802_11APMode);
21038
21039 - //check auth_queue
21040 - while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
21041 - {
21042 - psta = LIST_CONTAINOR(plist, struct sta_info, auth_list);
21043 -
21044 - plist = get_next(plist);
21045 -
21046 - if(psta->expire_to>0)
21047 - {
21048 - psta->expire_to--;
21049 - if (psta->expire_to == 0)
21050 - {
21051 - rtw_list_delete(&psta->auth_list);
21052 -
21053 - DBG_871X("auth expire %02X%02X%02X%02X%02X%02X\n",
21054 - psta->hwaddr[0],psta->hwaddr[1],psta->hwaddr[2],psta->hwaddr[3],psta->hwaddr[4],psta->hwaddr[5]);
21055 -
21056 - _exit_critical_bh(&pstapriv->auth_list_lock, &irqL);
21057 -
21058 - _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
21059 - rtw_free_stainfo(padapter, psta);
21060 - _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
21061 -
21062 - _enter_critical_bh(&pstapriv->auth_list_lock, &irqL);
21063 - }
21064 - }
21065 -
21066 - }
21067 + rtw_setopmode_cmd(adapter, Ndis802_11APMode);
21068 +}
21069
21070 - _exit_critical_bh(&pstapriv->auth_list_lock, &irqL);
21071 +static int rtw_auto_ap_start_beacon(_adapter *adapter)
21072 +{
21073 + int ret=0;
21074 + u8 *pbuf = NULL;
21075 + uint len;
21076 + u8 supportRate[16];
21077 + int sz = 0, rateLen;
21078 + u8 * ie;
21079 + u8 wireless_mode, oper_channel;
21080 + u8 ssid[3] = {0}; //hidden ssid
21081 + u32 ssid_len = sizeof(ssid);
21082 + struct mlme_priv *pmlmepriv = &(adapter->mlmepriv);
21083
21084 - psta = NULL;
21085 -
21086
21087 - _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
21088 -
21089 - phead = &pstapriv->asoc_list;
21090 - plist = get_next(phead);
21091 + if(check_fwstate(pmlmepriv, WIFI_AP_STATE) != _TRUE)
21092 + return -EINVAL;
21093
21094 - //check asoc_queue
21095 - while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
21096 - {
21097 - psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
21098 -
21099 - plist = get_next(plist);
21100 -
21101 - if(chk_sta_is_alive(psta))
21102 - {
21103 - psta->expire_to = pstapriv->expire_to;
21104 -#ifdef CONFIG_TX_MCAST2UNI
21105 - psta->under_exist_checking = 0;
21106 -#endif // CONFIG_TX_MCAST2UNI
21107 - }
21108 -
21109 - if(psta->expire_to>0)
21110 - {
21111 - psta->expire_to--;
21112
21113 -#ifdef CONFIG_TX_MCAST2UNI
21114 - if ( (psta->flags & WLAN_STA_HT) && (psta->htpriv.agg_enable_bitmap || psta->under_exist_checking) ) {
21115 - // check sta by delba(addba) for 11n STA
21116 - // ToDo: use CCX report to check for all STAs
21117 - DBG_871X("asoc check by DELBA/ADDBA! (pstapriv->expire_to=%d s)(psta->expire_to=%d s), [%02x, %d]\n", pstapriv->expire_to*2, psta->expire_to*2, psta->htpriv.agg_enable_bitmap, psta->under_exist_checking);
21118 -
21119 - if ( psta->expire_to <= (pstapriv->expire_to - 50 ) ) {
21120 - DBG_871X("asoc expire by DELBA/ADDBA! (%d s)\n", (pstapriv->expire_to-psta->expire_to)*2);
21121 - psta->under_exist_checking = 0;
21122 - psta->expire_to = 0;
21123 - } else if ( psta->expire_to <= (pstapriv->expire_to - 3) && (psta->under_exist_checking==0)) {
21124 - DBG_871X("asoc check by DELBA/ADDBA! (%d s)\n", (pstapriv->expire_to-psta->expire_to)*2);
21125 - psta->under_exist_checking = 1;
21126 - //tear down TX AMPDU
21127 - send_delba(padapter, 1, psta->hwaddr);// // originator
21128 - psta->htpriv.agg_enable_bitmap = 0x0;//reset
21129 - psta->htpriv.candidate_tid_bitmap = 0x0;//reset
21130 - }
21131 - }
21132 -#endif // CONFIG_TX_MCAST2UNI
21133 + len = 128;
21134 + pbuf = rtw_zmalloc(len);
21135 + if(!pbuf)
21136 + return -ENOMEM;
21137
21138 - if (psta->expire_to == 0)
21139 - {
21140 - //_irqL irqL;
21141 -
21142 - rtw_list_delete(&psta->asoc_list);
21143 -
21144 - DBG_871X("asoc expire %02X%02X%02X%02X%02X%02X\n",
21145 - psta->hwaddr[0],psta->hwaddr[1],psta->hwaddr[2],psta->hwaddr[3],psta->hwaddr[4],psta->hwaddr[5]);
21146 -#if 0
21147 - //tear down Rx AMPDU
21148 - send_delba(padapter, 0, psta->hwaddr);// recipient
21149 -
21150 - //tear down TX AMPDU
21151 - send_delba(padapter, 1, psta->hwaddr);// // originator
21152 - psta->htpriv.agg_enable_bitmap = 0x0;//reset
21153 - psta->htpriv.candidate_tid_bitmap = 0x0;//reset
21154 -
21155 - issue_deauth(padapter, psta->hwaddr, WLAN_REASON_DEAUTH_LEAVING);
21156 -
21157 - _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
21158 - rtw_free_stainfo(padapter, psta);
21159 - _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
21160 -#endif
21161 - //_exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
21162 - ap_free_sta(padapter, psta);
21163 - //_enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
21164 -
21165 - }
21166 - else
21167 - {
21168 - if(psta->sleepq_len > (NR_XMITFRAME>>3))
21169 - {
21170 - wakeup_sta_to_xmit(padapter, psta);
21171 - }
21172 - }
21173 -
21174 - }
21175 -
21176 - }
21177
21178 - _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
21179 + //generate beacon
21180 + ie = pbuf;
21181
21182 -}
21183 + //timestamp will be inserted by hardware
21184 + sz += 8;
21185 + ie += sz;
21186
21187 + //beacon interval : 2bytes
21188 + *(u16*)ie = cpu_to_le16((u16)100);//BCN_INTERVAL=100;
21189 + sz += 2;
21190 + ie += 2;
21191 +
21192 + //capability info
21193 + *(u16*)ie = 0;
21194 + *(u16*)ie |= cpu_to_le16(cap_ESS);
21195 + *(u16*)ie |= cpu_to_le16(cap_ShortPremble);
21196 + //*(u16*)ie |= cpu_to_le16(cap_Privacy);
21197 + sz += 2;
21198 + ie += 2;
21199
21200 -static void add_RATid(_adapter *padapter, struct sta_info *psta)
21201 -{
21202 - int i;
21203 - u8 rf_type;
21204 - u32 init_rate=0;
21205 - unsigned char sta_band = 0, raid, shortGIrate = _FALSE;
21206 - unsigned char limit;
21207 - unsigned int tx_ra_bitmap=0;
21208 - struct ht_priv *psta_ht = NULL;
21209 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
21210 - WLAN_BSSID_EX *pcur_network = (WLAN_BSSID_EX *)&pmlmepriv->cur_network.network;
21211 + //SSID
21212 + ie = rtw_set_ie(ie, _SSID_IE_, ssid_len, ssid, &sz);
21213
21214 -
21215 - if(psta)
21216 - psta_ht = &psta->htpriv;
21217 + //supported rates
21218 + wireless_mode = WIRELESS_11BG_24N;
21219 + rtw_set_supported_rate(supportRate, wireless_mode) ;
21220 + rateLen = rtw_get_rateset_len(supportRate);
21221 + if (rateLen > 8)
21222 + {
21223 + ie = rtw_set_ie(ie, _SUPPORTEDRATES_IE_, 8, supportRate, &sz);
21224 + }
21225 else
21226 - return;
21227 -
21228 - //b/g mode ra_bitmap
21229 - for (i=0; i<sizeof(psta->bssrateset); i++)
21230 {
21231 - if (psta->bssrateset[i])
21232 - tx_ra_bitmap |= rtw_get_bit_value_from_ieee_value(psta->bssrateset[i]&0x7f);
21233 + ie = rtw_set_ie(ie, _SUPPORTEDRATES_IE_, rateLen, supportRate, &sz);
21234 }
21235
21236 - //n mode ra_bitmap
21237 - if(psta_ht->ht_option)
21238 +
21239 + //DS parameter set
21240 + if(check_buddy_fwstate(adapter, _FW_LINKED) &&
21241 + check_buddy_fwstate(adapter, WIFI_STATION_STATE))
21242 {
21243 - padapter->HalFunc.GetHwRegHandler(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
21244 - if(rf_type == RF_2T2R)
21245 - limit=16;// 2R
21246 - else
21247 - limit=8;// 1R
21248 + PADAPTER pbuddy_adapter = adapter->pbuddy_adapter;
21249 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
21250
21251 - for (i=0; i<limit; i++) {
21252 - if (psta_ht->ht_cap.supp_mcs_set[i/8] & BIT(i%8))
21253 - tx_ra_bitmap |= BIT(i+12);
21254 - }
21255 + oper_channel = pbuddy_mlmeext->cur_channel;
21256 + }
21257 + else
21258 + {
21259 + oper_channel = adapter_to_dvobj(adapter)->oper_channel;
21260 + }
21261 + ie = rtw_set_ie(ie, _DSSET_IE_, 1, &oper_channel, &sz);
21262
21263 - //max short GI rate
21264 - shortGIrate = psta_ht->sgi;
21265 + //ext supported rates
21266 + if (rateLen > 8)
21267 + {
21268 + ie = rtw_set_ie(ie, _EXT_SUPPORTEDRATES_IE_, (rateLen - 8), (supportRate + 8), &sz);
21269 }
21270
21271 + DBG_871X("%s, start auto ap beacon sz=%d\n", __FUNCTION__, sz);
21272
21273 -#if 0//gtest
21274 - if(get_rf_mimo_mode(padapter) == RTL8712_RF_2T2R)
21275 + //lunch ap mode & start to issue beacon
21276 + if(rtw_check_beacon_data(adapter, pbuf, sz) == _SUCCESS)
21277 {
21278 - //is this a 2r STA?
21279 - if((pstat->tx_ra_bitmap & 0x0ff00000) != 0 && !(priv->pshare->has_2r_sta & BIT(pstat->aid)))
21280 - {
21281 - priv->pshare->has_2r_sta |= BIT(pstat->aid);
21282 - if(rtw_read16(padapter, 0x102501f6) != 0xffff)
21283 - {
21284 - rtw_write16(padapter, 0x102501f6, 0xffff);
21285 - reset_1r_sta_RA(priv, 0xffff);
21286 - Switch_1SS_Antenna(priv, 3);
21287 - }
21288 - }
21289 - else// bg or 1R STA?
21290 - {
21291 - if((priv->pmib->dot11BssType.net_work_type & WIRELESS_11N) && pstat->ht_cap_len && priv->pshare->has_2r_sta == 0)
21292 - {
21293 - if(rtw_read16(padapter, 0x102501f6) != 0x7777)
21294 - { // MCS7 SGI
21295 - rtw_write16(padapter, 0x102501f6,0x7777);
21296 - reset_1r_sta_RA(priv, 0x7777);
21297 - Switch_1SS_Antenna(priv, 2);
21298 - }
21299 - }
21300 - }
21301 -
21302 - }
21303
21304 - if ((pstat->rssi_level < 1) || (pstat->rssi_level > 3))
21305 + }
21306 + else
21307 {
21308 - if (pstat->rssi >= priv->pshare->rf_ft_var.raGoDownUpper)
21309 - pstat->rssi_level = 1;
21310 - else if ((pstat->rssi >= priv->pshare->rf_ft_var.raGoDown20MLower) ||
21311 - ((priv->pshare->is_40m_bw) && (pstat->ht_cap_len) &&
21312 - (pstat->rssi >= priv->pshare->rf_ft_var.raGoDown40MLower) &&
21313 - (pstat->ht_cap_buf.ht_cap_info & cpu_to_le16(_HTCAP_SUPPORT_CH_WDTH_))))
21314 - pstat->rssi_level = 2;
21315 - else
21316 - pstat->rssi_level = 3;
21317 + ret = -EINVAL;
21318 }
21319
21320 - // rate adaptive by rssi
21321 - if ((priv->pmib->dot11BssType.net_work_type & WIRELESS_11N) && pstat->ht_cap_len)
21322 - {
21323 - if ((get_rf_mimo_mode(priv) == MIMO_1T2R) || (get_rf_mimo_mode(priv) == MIMO_1T1R))
21324 - {
21325 - switch (pstat->rssi_level) {
21326 - case 1:
21327 - pstat->tx_ra_bitmap &= 0x100f0000;
21328 - break;
21329 - case 2:
21330 - pstat->tx_ra_bitmap &= 0x100ff000;
21331 - break;
21332 - case 3:
21333 - if (priv->pshare->is_40m_bw)
21334 - pstat->tx_ra_bitmap &= 0x100ff005;
21335 - else
21336 - pstat->tx_ra_bitmap &= 0x100ff001;
21337
21338 - break;
21339 - }
21340 - }
21341 - else
21342 - {
21343 - switch (pstat->rssi_level) {
21344 - case 1:
21345 - pstat->tx_ra_bitmap &= 0x1f0f0000;
21346 - break;
21347 - case 2:
21348 - pstat->tx_ra_bitmap &= 0x1f0ff000;
21349 - break;
21350 - case 3:
21351 - if (priv->pshare->is_40m_bw)
21352 - pstat->tx_ra_bitmap &= 0x000ff005;
21353 - else
21354 - pstat->tx_ra_bitmap &= 0x000ff001;
21355 + rtw_mfree(pbuf, len);
21356
21357 - break;
21358 - }
21359 + return ret;
21360
21361 - // Don't need to mask high rates due to new rate adaptive parameters
21362 - //if (pstat->is_broadcom_sta) // use MCS12 as the highest rate vs. Broadcom sta
21363 - // pstat->tx_ra_bitmap &= 0x81ffffff;
21364 +}
21365 +#endif//CONFIG_AUTO_AP_MODE
21366
21367 - // NIC driver will report not supporting MCS15 and MCS14 in asoc req
21368 - //if (pstat->is_rtl8190_sta && !pstat->is_2t_mimo_sta)
21369 - // pstat->tx_ra_bitmap &= 0x83ffffff; // if Realtek 1x2 sta, don't use MCS15 and MCS14
21370 - }
21371 +u8 setopmode_hdl(_adapter *padapter, u8 *pbuf)
21372 +{
21373 + u8 type;
21374 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
21375 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
21376 + struct setopmode_parm *psetop = (struct setopmode_parm *)pbuf;
21377 +
21378 + if(psetop->mode == Ndis802_11APMode)
21379 + {
21380 + pmlmeinfo->state = WIFI_FW_AP_STATE;
21381 + type = _HW_STATE_AP_;
21382 +#ifdef CONFIG_NATIVEAP_MLME
21383 + //start_ap_mode(padapter);
21384 +#endif
21385 }
21386 - else if ((priv->pmib->dot11BssType.net_work_type & WIRELESS_11G) && isErpSta(pstat))
21387 + else if(psetop->mode == Ndis802_11Infrastructure)
21388 {
21389 - switch (pstat->rssi_level) {
21390 - case 1:
21391 - pstat->tx_ra_bitmap &= 0x00000f00;
21392 - break;
21393 - case 2:
21394 - pstat->tx_ra_bitmap &= 0x00000ff0;
21395 - break;
21396 - case 3:
21397 - pstat->tx_ra_bitmap &= 0x00000ff5;
21398 - break;
21399 - }
21400 + pmlmeinfo->state &= ~(BIT(0)|BIT(1));// clear state
21401 + pmlmeinfo->state |= WIFI_FW_STATION_STATE;//set to STATION_STATE
21402 + type = _HW_STATE_STATION_;
21403 }
21404 - else
21405 + else if(psetop->mode == Ndis802_11IBSS)
21406 {
21407 - pstat->tx_ra_bitmap &= 0x0000000d;
21408 + type = _HW_STATE_ADHOC_;
21409 }
21410 -
21411 - // disable tx short GI when station cannot rx MCS15(AP is 2T2R)
21412 - // disable tx short GI when station cannot rx MCS7 (AP is 1T2R or 1T1R)
21413 - // if there is only 1r STA and we are 2T2R, DO NOT mask SGI rate
21414 - if ((!(pstat->tx_ra_bitmap & 0x8000000) && (priv->pshare->has_2r_sta > 0) && (get_rf_mimo_mode(padapter) == RTL8712_RF_2T2R)) ||
21415 - (!(pstat->tx_ra_bitmap & 0x80000) && (get_rf_mimo_mode(padapter) != RTL8712_RF_2T2R)))
21416 + else
21417 {
21418 - pstat->tx_ra_bitmap &= ~BIT(28);
21419 + type = _HW_STATE_NOLINK_;
21420 }
21421 -#endif
21422
21423 - if ( pcur_network->Configuration.DSConfig > 14 ) {
21424 - // 5G band
21425 - if (tx_ra_bitmap & 0xffff000)
21426 - sta_band |= WIRELESS_11_5N | WIRELESS_11A;
21427 - else
21428 - sta_band |= WIRELESS_11A;
21429 - } else {
21430 - if (tx_ra_bitmap & 0xffff000)
21431 - sta_band |= WIRELESS_11_24N | WIRELESS_11G | WIRELESS_11B;
21432 - else if (tx_ra_bitmap & 0xff0)
21433 - sta_band |= WIRELESS_11G |WIRELESS_11B;
21434 - else
21435 - sta_band |= WIRELESS_11B;
21436 - }
21437 -
21438 - raid = networktype_to_raid(sta_band);
21439 - init_rate = get_highest_rate_idx(tx_ra_bitmap&0x0fffffff)&0x3f;
21440 -
21441 - if (psta->aid < NUM_STA)
21442 - {
21443 - u8 arg = 0;
21444 -#ifdef SUPPORT_64_STA
21445 - if(psta->mac_id >= FW_CTRL_MACID){
21446 - arg = psta->mac_id&0x3f;
21447 - if (shortGIrate==_TRUE)
21448 - arg |= BIT(7);
21449 - switch(raid){
21450 - case 0:
21451 - case 1:
21452 - case 3:
21453 - psta->init_rate=19; // N mode
21454 - break;
21455 - case 4:
21456 - case 5:
21457 - psta->init_rate=11; // G mode
21458 - break;
21459 - case 6:
21460 - psta->init_rate=3; // B mode
21461 - break;
21462 - deafult:
21463 - psta->init_rate=3; // B mode
21464 - break;
21465 -
21466 - }
21467 - // printk("%s psta->mac_id=%d arg=0x%x\n",__FUNCTION__,psta->mac_id,arg);
21468 - }
21469 - else
21470 -#endif // SUPPORT_64_STA
21471 - {
21472 - arg = psta->mac_id&0x1f;
21473 - arg |= BIT(7);
21474 - if (shortGIrate==_TRUE)
21475 - arg |= BIT(5);
21476 - //printk("%s psta->mac_id=%d arg=0x%x\n",__FUNCTION__,psta->mac_id,arg);
21477 - }
21478 - tx_ra_bitmap |= ((raid<<28)&0xf0000000);
21479 + rtw_hal_set_hwreg(padapter, HW_VAR_SET_OPMODE, (u8 *)(&type));
21480 + //Set_NETYPE0_MSR(padapter, type);
21481
21482 - DBG_871X("update raid entry, bitmap=0x%x, arg=0x%x\n", tx_ra_bitmap, arg);
21483 +#ifdef CONFIG_AUTO_AP_MODE
21484 + if(psetop->mode == Ndis802_11APMode)
21485 + rtw_auto_ap_start_beacon(padapter);
21486 +#endif
21487
21488 - //bitmap[0:27] = tx_rate_bitmap
21489 - //bitmap[28:31]= Rate Adaptive id
21490 - //arg[0:4] = macid
21491 - //arg[5] = Short GI
21492 - padapter->HalFunc.Add_RateATid(padapter, tx_ra_bitmap, arg,psta->mac_id);
21493 + return H2C_SUCCESS;
21494 +
21495 +}
21496
21497 - if (shortGIrate==_TRUE)
21498 - init_rate |= BIT(6);
21499 -
21500 - //set ra_id, init_rate
21501 - psta->raid = raid;
21502 - psta->init_rate = init_rate;
21503 -
21504 - }
21505 - else
21506 +u8 createbss_hdl(_adapter *padapter, u8 *pbuf)
21507 +{
21508 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
21509 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
21510 + WLAN_BSSID_EX *pnetwork = (WLAN_BSSID_EX*)(&(pmlmeinfo->network));
21511 + struct joinbss_parm *pparm = (struct joinbss_parm *)pbuf;
21512 + u32 initialgain;
21513 +
21514 +
21515 + if(pparm->network.InfrastructureMode == Ndis802_11APMode)
21516 {
21517 - DBG_871X("station aid %d exceed the max number\n", psta->aid);
21518 +#ifdef CONFIG_AP_MODE
21519 +
21520 + if(pmlmeinfo->state == WIFI_FW_AP_STATE)
21521 + {
21522 + //todo:
21523 + return H2C_SUCCESS;
21524 + }
21525 +#endif
21526 }
21527
21528 + //below is for ad-hoc master
21529 + if(pparm->network.InfrastructureMode == Ndis802_11IBSS)
21530 + {
21531 + rtw_joinbss_reset(padapter);
21532 +
21533 + pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
21534 + pmlmeext->cur_ch_offset= HAL_PRIME_CHNL_OFFSET_DONT_CARE;
21535 + pmlmeinfo->ERP_enable = 0;
21536 + pmlmeinfo->WMM_enable = 0;
21537 + pmlmeinfo->HT_enable = 0;
21538 + pmlmeinfo->HT_caps_enable = 0;
21539 + pmlmeinfo->HT_info_enable = 0;
21540 + pmlmeinfo->agg_enable_bitmap = 0;
21541 + pmlmeinfo->candidate_tid_bitmap = 0;
21542 +
21543 + //disable dynamic functions, such as high power, DIG
21544 + Save_DM_Func_Flag(padapter);
21545 + Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);
21546 +
21547 + //config the initial gain under linking, need to write the BB registers
21548 + initialgain = 0x1E;
21549 + rtw_hal_set_hwreg(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));
21550 +
21551 + //cancel link timer
21552 + _cancel_timer_ex(&pmlmeext->link_timer);
21553 +
21554 + //clear CAM
21555 + flush_all_cam_entry(padapter);
21556 +
21557 + _rtw_memcpy(pnetwork, pbuf, FIELD_OFFSET(WLAN_BSSID_EX, IELength));
21558 + pnetwork->IELength = ((WLAN_BSSID_EX *)pbuf)->IELength;
21559 +
21560 + if(pnetwork->IELength>MAX_IE_SZ)//Check pbuf->IELength
21561 + return H2C_PARAMETERS_ERROR;
21562 +
21563 + _rtw_memcpy(pnetwork->IEs, ((WLAN_BSSID_EX *)pbuf)->IEs, pnetwork->IELength);
21564 +
21565 + start_create_ibss(padapter);
21566 +
21567 + }
21568 +
21569 + return H2C_SUCCESS;
21570 +
21571 }
21572
21573 -static void update_bmc_sta(_adapter *padapter)
21574 +u8 join_cmd_hdl(_adapter *padapter, u8 *pbuf)
21575 {
21576 - _irqL irqL;
21577 - u32 init_rate=0;
21578 - unsigned char network_type, raid;
21579 - unsigned short para16;
21580 - int i, supportRateNum = 0;
21581 - unsigned int tx_ra_bitmap=0;
21582 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
21583 - WLAN_BSSID_EX *pcur_network = (WLAN_BSSID_EX *)&pmlmepriv->cur_network.network;
21584 - struct sta_info *psta = rtw_get_bcmc_stainfo(padapter);
21585 + u8 join_type;
21586 + PNDIS_802_11_VARIABLE_IEs pIE;
21587 + struct registry_priv *pregpriv = &padapter->registrypriv;
21588 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
21589 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
21590 + WLAN_BSSID_EX *pnetwork = (WLAN_BSSID_EX*)(&(pmlmeinfo->network));
21591 +#ifdef CONFIG_ANTENNA_DIVERSITY
21592 + struct joinbss_parm *pparm = (struct joinbss_parm *)pbuf;
21593 +#endif //CONFIG_ANTENNA_DIVERSITY
21594 + u32 initialgain, i;
21595 + u8 cbw40_enable=0;
21596 + //u32 acparm;
21597
21598 - if(psta)
21599 + //check already connecting to AP or not
21600 + if (pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS)
21601 {
21602 - psta->aid = 0;//default set to 0
21603 - //psta->mac_id = psta->aid+4;
21604 - psta->mac_id = psta->aid + 1;
21605 -
21606 - psta->qos_option = 0;
21607 - psta->htpriv.ht_option = _FALSE;
21608 -
21609 - psta->ieee8021x_blocked = 0;
21610 + if (pmlmeinfo->state & WIFI_FW_STATION_STATE)
21611 + {
21612 + issue_deauth_ex(padapter, pnetwork->MacAddress, WLAN_REASON_DEAUTH_LEAVING, 5, 100);
21613 + }
21614
21615 - _rtw_memset((void*)&psta->sta_stats, 0, sizeof(struct stainfo_stats));
21616 + pmlmeinfo->state = WIFI_FW_NULL_STATE;
21617 +
21618 + //clear CAM
21619 + flush_all_cam_entry(padapter);
21620 +
21621 + _cancel_timer_ex(&pmlmeext->link_timer);
21622 +
21623 + //set MSR to nolink -> infra. mode
21624 + //Set_MSR(padapter, _HW_STATE_NOLINK_);
21625 + Set_MSR(padapter, _HW_STATE_STATION_);
21626 +
21627
21628 - //psta->dot118021XPrivacy = _NO_PRIVACY_;//!!! remove it, because it has been set before this.
21629 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_DISCONNECT, 0);
21630 + }
21631
21632 +#ifdef CONFIG_ANTENNA_DIVERSITY
21633 + rtw_antenna_select_cmd(padapter, pparm->network.PhyInfo.Optimum_antenna, _FALSE);
21634 +#endif
21635
21636 + rtw_joinbss_reset(padapter);
21637 +
21638 + pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
21639 + pmlmeext->cur_ch_offset= HAL_PRIME_CHNL_OFFSET_DONT_CARE;
21640 + pmlmeinfo->ERP_enable = 0;
21641 + pmlmeinfo->WMM_enable = 0;
21642 + pmlmeinfo->HT_enable = 0;
21643 + pmlmeinfo->HT_caps_enable = 0;
21644 + pmlmeinfo->HT_info_enable = 0;
21645 + pmlmeinfo->agg_enable_bitmap = 0;
21646 + pmlmeinfo->candidate_tid_bitmap = 0;
21647 + pmlmeinfo->bwmode_updated = _FALSE;
21648 + //pmlmeinfo->assoc_AP_vendor = maxAP;
21649
21650 - //prepare for add_RATid
21651 - supportRateNum = rtw_get_rateset_len((u8*)&pcur_network->SupportedRates);
21652 - network_type = rtw_check_network_type((u8*)&pcur_network->SupportedRates, supportRateNum, 1);
21653 + _rtw_memcpy(pnetwork, pbuf, FIELD_OFFSET(WLAN_BSSID_EX, IELength));
21654 + pnetwork->IELength = ((WLAN_BSSID_EX *)pbuf)->IELength;
21655 +
21656 + if(pnetwork->IELength>MAX_IE_SZ)//Check pbuf->IELength
21657 + return H2C_PARAMETERS_ERROR;
21658
21659 - _rtw_memcpy(psta->bssrateset, &pcur_network->SupportedRates, supportRateNum);
21660 - psta->bssratelen = supportRateNum;
21661 -
21662 - //b/g mode ra_bitmap
21663 - for (i=0; i<supportRateNum; i++)
21664 - {
21665 - if (psta->bssrateset[i])
21666 - tx_ra_bitmap |= rtw_get_bit_value_from_ieee_value(psta->bssrateset[i]&0x7f);
21667 - }
21668 + _rtw_memcpy(pnetwork->IEs, ((WLAN_BSSID_EX *)pbuf)->IEs, pnetwork->IELength);
21669
21670 - if ( pcur_network->Configuration.DSConfig > 14 ) {
21671 - //force to A mode. 5G doesn't support CCK rates
21672 - network_type = WIRELESS_11A;
21673 - tx_ra_bitmap = 0x150; // 6, 12, 24 Mbps
21674 - } else {
21675 - //force to b mode
21676 - network_type = WIRELESS_11B;
21677 - tx_ra_bitmap = 0xf;
21678 - }
21679 + pmlmeext->cur_channel = (u8)pnetwork->Configuration.DSConfig;
21680 + pmlmeinfo->bcn_interval = get_beacon_interval(pnetwork);
21681
21682 - //tx_ra_bitmap = update_basic_rate(pcur_network->SupportedRates, supportRateNum);
21683 + //Check AP vendor to move rtw_joinbss_cmd()
21684 + //pmlmeinfo->assoc_AP_vendor = check_assoc_AP(pnetwork->IEs, pnetwork->IELength);
21685
21686 - raid = networktype_to_raid(network_type);
21687 - init_rate = get_highest_rate_idx(tx_ra_bitmap&0x0fffffff)&0x3f;
21688 -
21689 - //DBG_871X("Add id %d val %08x to ratr for bmc sta\n", psta->aid, tx_ra_bitmap);
21690 + for (i = sizeof(NDIS_802_11_FIXED_IEs); i < pnetwork->IELength;)
21691 + {
21692 + pIE = (PNDIS_802_11_VARIABLE_IEs)(pnetwork->IEs + i);
21693
21694 - //if(pHalData->fw_ractrl == _TRUE)
21695 + switch (pIE->ElementID)
21696 {
21697 - u8 arg = 0;
21698 + case _VENDOR_SPECIFIC_IE_://Get WMM IE.
21699 + if ( _rtw_memcmp(pIE->data, WMM_OUI, 4) )
21700 + {
21701 + pmlmeinfo->WMM_enable = 1;
21702 + }
21703 + break;
21704
21705 - arg = psta->mac_id&0x1f;
21706 -
21707 - arg |= BIT(7);
21708 -
21709 - //if (shortGIrate==_TRUE)
21710 - // arg |= BIT(5);
21711 + case _HT_CAPABILITY_IE_: //Get HT Cap IE.
21712 + pmlmeinfo->HT_caps_enable = 1;
21713 + break;
21714 +
21715 + case _HT_EXTRA_INFO_IE_: //Get HT Info IE.
21716 + pmlmeinfo->HT_info_enable = 1;
21717 +
21718 + //spec case only for cisco's ap because cisco's ap issue assoc rsp using mcs rate @40MHz or @20MHz
21719 +//#if !defined(CONFIG_CONCURRENT_MODE) && !defined(CONFIG_DUALMAC_CONCURRENT)
21720 +// if(pmlmeinfo->assoc_AP_vendor == ciscoAP)
21721 +//#endif
21722 + {
21723 + struct HT_info_element *pht_info = (struct HT_info_element *)(pIE->data);
21724 +
21725 + if( pnetwork->Configuration.DSConfig > 14 )
21726 + {
21727 + if( pregpriv->cbw40_enable & BIT(1) )
21728 + cbw40_enable = 1;
21729 + }
21730 + else
21731 + if( pregpriv->cbw40_enable & BIT(0) )
21732 + cbw40_enable = 1;
21733 +
21734 + if ((cbw40_enable) && (pht_info->infos[0] & BIT(2)))
21735 + {
21736 + //switch to the 40M Hz mode according to the AP
21737 + pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40;
21738 + switch (pht_info->infos[0] & 0x3)
21739 + {
21740 + case 1:
21741 + pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
21742 + break;
21743
21744 - tx_ra_bitmap |= ((raid<<28)&0xf0000000);
21745 + case 3:
21746 + pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
21747 + break;
21748 +
21749 + default:
21750 + pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
21751 + break;
21752 + }
21753
21754 - DBG_871X("update_bmc_sta, mask=0x%x, arg=0x%x\n", tx_ra_bitmap, arg);
21755 + DBG_871X("set ch/bw before connected\n");
21756 + }
21757 + }
21758 + break;
21759
21760 - //bitmap[0:27] = tx_rate_bitmap
21761 - //bitmap[28:31]= Rate Adaptive id
21762 - //arg[0:4] = macid
21763 - //arg[5] = Short GI
21764 - padapter->HalFunc.Add_RateATid(padapter, tx_ra_bitmap, arg,psta->mac_id );
21765 -
21766 + default:
21767 + break;
21768 }
21769
21770 - //set ra_id, init_rate
21771 - psta->raid = raid;
21772 - psta->init_rate = init_rate;
21773 -
21774 - _enter_critical_bh(&psta->lock, &irqL);
21775 - psta->state = _FW_LINKED;
21776 - _exit_critical_bh(&psta->lock, &irqL);
21777 + i += (pIE->Length + 2);
21778 + }
21779 +#if 0
21780 + if (padapter->registrypriv.wifi_spec) {
21781 + // for WiFi test, follow WMM test plan spec
21782 + acparm = 0x002F431C; // VO
21783 + rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_VO, (u8 *)(&acparm));
21784 + acparm = 0x005E541C; // VI
21785 + rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_VI, (u8 *)(&acparm));
21786 + acparm = 0x0000A525; // BE
21787 + rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_BE, (u8 *)(&acparm));
21788 + acparm = 0x0000A549; // BK
21789 + rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_BK, (u8 *)(&acparm));
21790 +
21791 + // for WiFi test, mixed mode with intel STA under bg mode throughput issue
21792 + if (padapter->mlmepriv.htpriv.ht_option == _FALSE){
21793 + acparm = 0x00004320;
21794 + rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_BE, (u8 *)(&acparm));
21795 + }
21796 + }
21797 + else {
21798 + acparm = 0x002F3217; // VO
21799 + rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_VO, (u8 *)(&acparm));
21800 + acparm = 0x005E4317; // VI
21801 + rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_VI, (u8 *)(&acparm));
21802 + acparm = 0x00105320; // BE
21803 + rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_BE, (u8 *)(&acparm));
21804 + acparm = 0x0000A444; // BK
21805 + rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_BK, (u8 *)(&acparm));
21806 + }
21807 +#endif
21808
21809 + /* check channel, bandwidth, offset and switch */
21810 +#ifdef CONFIG_DUALMAC_CONCURRENT
21811 + if(dc_handle_join_request(padapter) == _FAIL) {
21812 + DBG_871X("dc_handle_join_request fail !!!\n");
21813 + return H2C_SUCCESS;
21814 }
21815 - else
21816 - {
21817 - DBG_871X("add_RATid_bmc_sta error!\n");
21818 + set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
21819 +#else //NON CONFIG_DUALMAC_CONCURRENT
21820 + if(rtw_chk_start_clnt_join(padapter) == _FAIL) {
21821 + report_join_res(padapter, (-4));
21822 + return H2C_SUCCESS;
21823 }
21824 -
21825 -}
21826 +#endif
21827
21828 -//notes:
21829 -//AID: 1~MAX for sta and 0 for bc/mc in ap/adhoc mode
21830 -//MAC_ID = AID+1 for sta in ap/adhoc mode
21831 -//MAC_ID = 1 for bc/mc for sta/ap/adhoc
21832 -//MAC_ID = 0 for bssid for sta/ap/adhoc
21833 -//CAM_ID = //0~3 for default key, cmd_id=macid + 3, macid=aid+1;
21834 + //disable dynamic functions, such as high power, DIG
21835 + //Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);
21836
21837 -void update_sta_info_apmode(_adapter *padapter, struct sta_info *psta)
21838 -{
21839 - _irqL irqL;
21840 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
21841 - struct security_priv *psecuritypriv = &padapter->securitypriv;
21842 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
21843 - struct ht_priv *phtpriv_ap = &pmlmepriv->htpriv;
21844 - struct ht_priv *phtpriv_sta = &psta->htpriv;
21845 + //config the initial gain under linking, need to write the BB registers
21846 +
21847 + initialgain = 0x1E;
21848 + rtw_hal_set_hwreg(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));
21849 +
21850
21851 - //set intf_tag to if1
21852 - //psta->intf_tag = 0;
21853 + rtw_hal_set_hwreg(padapter, HW_VAR_BSSID, pmlmeinfo->network.MacAddress);
21854 + join_type = 0;
21855 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_JOIN, (u8 *)(&join_type));
21856
21857 - //psta->mac_id = psta->aid+4;
21858 - psta->mac_id = psta->aid+1;
21859 + //cancel link timer
21860 + _cancel_timer_ex(&pmlmeext->link_timer);
21861
21862 - if(psecuritypriv->dot11AuthAlgrthm==dot11AuthAlgrthm_8021X)
21863 - psta->ieee8021x_blocked = _TRUE;
21864 - else
21865 - psta->ieee8021x_blocked = _FALSE;
21866 + start_clnt_join(padapter);
21867
21868 -
21869 - //update sta's cap
21870 + return H2C_SUCCESS;
21871
21872 - //ERP
21873 - VCS_update(padapter, psta);
21874 -
21875 - //HT related cap
21876 - if(phtpriv_sta->ht_option)
21877 +}
21878 +
21879 +u8 disconnect_hdl(_adapter *padapter, unsigned char *pbuf)
21880 +{
21881 + struct disconnect_parm *param = (struct disconnect_parm *)pbuf;
21882 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
21883 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
21884 + WLAN_BSSID_EX *pnetwork = (WLAN_BSSID_EX*)(&(pmlmeinfo->network));
21885 + u8 val8;
21886 +
21887 + if (is_client_associated_to_ap(padapter))
21888 {
21889 - //check if sta supports rx ampdu
21890 - phtpriv_sta->ampdu_enable = phtpriv_ap->ampdu_enable;
21891 + issue_deauth_ex(padapter, pnetwork->MacAddress, WLAN_REASON_DEAUTH_LEAVING, param->deauth_timeout_ms/100, 100);
21892 + }
21893
21894 - //check if sta support s Short GI
21895 - if((phtpriv_sta->ht_cap.cap_info & phtpriv_ap->ht_cap.cap_info) & cpu_to_le16(IEEE80211_HT_CAP_SGI_20|IEEE80211_HT_CAP_SGI_40))
21896 - {
21897 - phtpriv_sta->sgi = _TRUE;
21898 - }
21899 + //set_opmode_cmd(padapter, infra_client_with_mlme);
21900
21901 - // bwmode
21902 - if((phtpriv_sta->ht_cap.cap_info & phtpriv_ap->ht_cap.cap_info) & cpu_to_le16(IEEE80211_HT_CAP_SUP_WIDTH))
21903 - {
21904 - //phtpriv_sta->bwmode = HT_CHANNEL_WIDTH_40;
21905 - phtpriv_sta->bwmode = pmlmeext->cur_bwmode;
21906 - phtpriv_sta->ch_offset = pmlmeext->cur_ch_offset;
21907 -
21908 - }
21909 + //pmlmeinfo->state = WIFI_FW_NULL_STATE;
21910 +
21911
21912 - psta->qos_option = _TRUE;
21913 -
21914 - }
21915 - else
21916 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_DISCONNECT, 0);
21917 + rtw_hal_set_hwreg(padapter, HW_VAR_BSSID, null_addr);
21918 +
21919 + //restore to initial setting.
21920 + update_tx_basic_rate(padapter, padapter->registrypriv.wireless_mode);
21921 +
21922 + if(((pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE) || ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE))
21923 {
21924 - phtpriv_sta->ampdu_enable = _FALSE;
21925 -
21926 - phtpriv_sta->sgi = _FALSE;
21927 - phtpriv_sta->bwmode = HT_CHANNEL_WIDTH_20;
21928 - phtpriv_sta->ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
21929 + //Stop BCN
21930 + val8 = 0;
21931 + rtw_hal_set_hwreg(padapter, HW_VAR_BCN_FUNC, (u8 *)(&val8));
21932 }
21933
21934 - //Rx AMPDU
21935 - send_delba(padapter, 0, psta->hwaddr);// recipient
21936 -
21937 - //TX AMPDU
21938 - send_delba(padapter, 1, psta->hwaddr);// // originator
21939 - phtpriv_sta->agg_enable_bitmap = 0x0;//reset
21940 - phtpriv_sta->candidate_tid_bitmap = 0x0;//reset
21941 -
21942
21943 - //todo: init other variables
21944 -
21945 - _rtw_memset((void*)&psta->sta_stats, 0, sizeof(struct stainfo_stats));
21946 + //set MSR to no link state -> infra. mode
21947 + Set_MSR(padapter, _HW_STATE_STATION_);
21948 +
21949 + pmlmeinfo->state = WIFI_FW_NULL_STATE;
21950
21951 +#ifdef CONFIG_DUALMAC_CONCURRENT
21952 + dc_set_channel_bwmode_disconnect(padapter);
21953 +#else
21954 +#ifdef CONFIG_CONCURRENT_MODE
21955 + if((check_buddy_fwstate(padapter, _FW_LINKED)) != _TRUE)
21956 + {
21957 +#endif //CONFIG_CONCURRENT_MODE
21958 + //switch to the 20M Hz mode after disconnect
21959 + pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
21960 + pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
21961
21962 - //add ratid
21963 - //add_RATid(padapter, psta);//move to ap_sta_info_defer_update()
21964 + set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
21965 +#ifdef CONFIG_CONCURRENT_MODE
21966 + }
21967 +#endif //CONFIG_CONCURRENT_MODE
21968 +#endif //CONFIG_DUALMAC_CONCURRENT
21969
21970 + flush_all_cam_entry(padapter);
21971 +
21972 + _cancel_timer_ex(&pmlmeext->link_timer);
21973
21974 - _enter_critical_bh(&psta->lock, &irqL);
21975 - psta->state |= _FW_LINKED;
21976 - _exit_critical_bh(&psta->lock, &irqL);
21977 + rtw_free_uc_swdec_pending_queue(padapter);
21978
21979 -
21980 + return H2C_SUCCESS;
21981 }
21982
21983 -static void update_hw_ht_param(_adapter *padapter)
21984 +int rtw_scan_ch_decision(_adapter *padapter, struct rtw_ieee80211_channel *out,
21985 + u32 out_num, struct rtw_ieee80211_channel *in, u32 in_num)
21986 {
21987 - unsigned char max_AMPDU_len;
21988 - unsigned char min_MPDU_spacing;
21989 - struct registry_priv *pregpriv = &padapter->registrypriv;
21990 + int i, j;
21991 + int scan_ch_num = 0;
21992 + int set_idx;
21993 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
21994 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
21995 -
21996 - DBG_871X("%s\n", __FUNCTION__);
21997 -
21998
21999 - //handle A-MPDU parameter field
22000 - /*
22001 - AMPDU_para [1:0]:Max AMPDU Len => 0:8k , 1:16k, 2:32k, 3:64k
22002 - AMPDU_para [4:2]:Min MPDU Start Spacing
22003 - */
22004 - max_AMPDU_len = pmlmeinfo->HT_caps.HT_cap_element.AMPDU_para & 0x03;
22005 -
22006 - min_MPDU_spacing = (pmlmeinfo->HT_caps.HT_cap_element.AMPDU_para & 0x1c) >> 2;
22007 -
22008 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AMPDU_MIN_SPACE, (u8 *)(&min_MPDU_spacing));
22009 + /* clear first */
22010 + _rtw_memset(out, 0, sizeof(struct rtw_ieee80211_channel)*out_num);
22011
22012 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AMPDU_FACTOR, (u8 *)(&max_AMPDU_len));
22013 + /* acquire channels from in */
22014 + j = 0;
22015 + for (i=0;i<in_num;i++) {
22016 +
22017 + if (0)
22018 + DBG_871X(FUNC_ADPT_FMT" "CHAN_FMT"\n", FUNC_ADPT_ARG(padapter), CHAN_ARG(&in[i]));
22019 +
22020 + if(in[i].hw_value && !(in[i].flags & RTW_IEEE80211_CHAN_DISABLED)
22021 + && (set_idx=rtw_ch_set_search_ch(pmlmeext->channel_set, in[i].hw_value)) >=0
22022 + && rtw_mlme_band_check(padapter, in[i].hw_value) == _TRUE
22023 + )
22024 + {
22025 + if (j >= out_num) {
22026 + DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" out_num:%u not enough\n",
22027 + FUNC_ADPT_ARG(padapter), out_num);
22028 + break;
22029 + }
22030
22031 - //
22032 - // Config SM Power Save setting
22033 - //
22034 - pmlmeinfo->SM_PS = (pmlmeinfo->HT_caps.HT_cap_element.HT_caps_info & 0x0C) >> 2;
22035 - if(pmlmeinfo->SM_PS == WLAN_HT_CAP_SM_PS_STATIC)
22036 - {
22037 - /*u8 i;
22038 - //update the MCS rates
22039 - for (i = 0; i < 16; i++)
22040 - {
22041 - pmlmeinfo->HT_caps.HT_cap_element.MCS_rate[i] &= MCS_rate_1R[i];
22042 - }*/
22043 - DBG_8192C("%s(): WLAN_HT_CAP_SM_PS_STATIC\n",__FUNCTION__);
22044 + _rtw_memcpy(&out[j], &in[i], sizeof(struct rtw_ieee80211_channel));
22045 +
22046 + if(pmlmeext->channel_set[set_idx].ScanType == SCAN_PASSIVE)
22047 + out[j].flags &= RTW_IEEE80211_CHAN_PASSIVE_SCAN;
22048 +
22049 + j++;
22050 + }
22051 + if(j>=out_num)
22052 + break;
22053 }
22054 +
22055 + /* if out is empty, use channel_set as default */
22056 + if(j == 0) {
22057 + for (i=0;i<pmlmeext->max_chan_nums;i++) {
22058 +
22059 + if (0)
22060 + DBG_871X(FUNC_ADPT_FMT" ch:%u\n", FUNC_ADPT_ARG(padapter), pmlmeext->channel_set[i].ChannelNum);
22061 +
22062 + if (rtw_mlme_band_check(padapter, pmlmeext->channel_set[i].ChannelNum) == _TRUE) {
22063 +
22064 + if (j >= out_num) {
22065 + DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" out_num:%u not enough\n",
22066 + FUNC_ADPT_ARG(padapter), out_num);
22067 + break;
22068 + }
22069
22070 - //
22071 - // Config current HT Protection mode.
22072 - //
22073 - //pmlmeinfo->HT_protection = pmlmeinfo->HT_info.infos[1] & 0x3;
22074 + out[j].hw_value = pmlmeext->channel_set[i].ChannelNum;
22075 +
22076 + if(pmlmeext->channel_set[i].ScanType == SCAN_PASSIVE)
22077 + out[j].flags &= RTW_IEEE80211_CHAN_PASSIVE_SCAN;
22078 +
22079 + j++;
22080 + }
22081 + }
22082 + }
22083
22084 + return j;
22085 }
22086
22087 -static void start_bss_network(_adapter *padapter, u8 *pbuf)
22088 +u8 sitesurvey_cmd_hdl(_adapter *padapter, u8 *pbuf)
22089 {
22090 - u8 *p;
22091 - u8 val8, cur_channel, cur_bwmode, cur_ch_offset;
22092 - u16 bcn_interval;
22093 - u32 acparm;
22094 - int ie_len;
22095 - struct registry_priv *pregpriv = &padapter->registrypriv;
22096 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
22097 - struct security_priv* psecuritypriv=&(padapter->securitypriv);
22098 - WLAN_BSSID_EX *pnetwork = (WLAN_BSSID_EX *)&pmlmepriv->cur_network.network;
22099 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
22100 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
22101 - WLAN_BSSID_EX *pnetwork_mlmeext = &(pmlmeinfo->network);
22102 -#ifdef CONFIG_P2P
22103 - struct wifidirect_info *pwdinfo = &(padapter->wdinfo);
22104 -#endif //CONFIG_P2P
22105 -
22106 -
22107 - //DBG_8192C("%s\n", __FUNCTION__);
22108 -
22109 - bcn_interval = (u16)pnetwork->Configuration.BeaconPeriod;
22110 - cur_channel = pnetwork->Configuration.DSConfig;
22111 - cur_bwmode = HT_CHANNEL_WIDTH_20;;
22112 - cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
22113 -
22114 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
22115 + struct sitesurvey_parm *pparm = (struct sitesurvey_parm *)pbuf;
22116 + u8 bdelayscan = _FALSE;
22117 + u8 val8;
22118 + u32 initialgain;
22119 + u32 i;
22120 + u8 write_initial_gain = 1;
22121
22122 - //check if there is wps ie,
22123 - //if there is wpsie in beacon, the hostapd will update beacon twice when stating hostapd,
22124 - //and at first time the security ie ( RSN/WPA IE) will not include in beacon.
22125 - if(NULL == rtw_get_wps_ie(pnetwork->IEs+_FIXED_IE_LENGTH_, pnetwork->IELength-_FIXED_IE_LENGTH_, NULL, NULL))
22126 - {
22127 - pmlmeext->bstart_bss = _TRUE;
22128 - }
22129 -
22130 - //udpate capability
22131 - update_capinfo(padapter, rtw_get_capability((WLAN_BSSID_EX *)pnetwork));
22132 -
22133 - //todo: update wmm, ht cap
22134 - //pmlmeinfo->WMM_enable;
22135 - //pmlmeinfo->HT_enable;
22136 - if(pmlmepriv->qospriv.qos_option)
22137 - pmlmeinfo->WMM_enable = _TRUE;
22138 +#ifdef CONFIG_P2P
22139 + struct wifidirect_info* pwdinfo = &padapter->wdinfo;
22140 +#endif
22141
22142 - if(pmlmepriv->htpriv.ht_option)
22143 + if (pmlmeext->sitesurvey_res.state == SCAN_DISABLE)
22144 {
22145 - pmlmeinfo->WMM_enable = _TRUE;
22146 - pmlmeinfo->HT_enable = _TRUE;
22147 - //pmlmeinfo->HT_info_enable = _TRUE;
22148 - //pmlmeinfo->HT_caps_enable = _TRUE;
22149 +#ifdef CONFIG_CONCURRENT_MODE
22150 + //for first time sitesurvey_cmd
22151 + rtw_hal_set_hwreg(padapter, HW_VAR_CHECK_TXBUF, 0);
22152 +#endif //CONFIG_CONCURRENT_MODE
22153 +
22154 + pmlmeext->sitesurvey_res.state = SCAN_START;
22155 + pmlmeext->sitesurvey_res.bss_cnt = 0;
22156 + pmlmeext->sitesurvey_res.channel_idx = 0;
22157
22158 - update_hw_ht_param(padapter);
22159 - }
22160 -
22161 + for(i=0;i<RTW_SSID_SCAN_AMOUNT;i++){
22162 + if(pparm->ssid[i].SsidLength) {
22163 + _rtw_memcpy(pmlmeext->sitesurvey_res.ssid[i].Ssid, pparm->ssid[i].Ssid, IW_ESSID_MAX_SIZE);
22164 + pmlmeext->sitesurvey_res.ssid[i].SsidLength= pparm->ssid[i].SsidLength;
22165 + } else {
22166 + pmlmeext->sitesurvey_res.ssid[i].SsidLength= 0;
22167 + }
22168 + }
22169
22170 - if(pmlmepriv->cur_network.join_res != _TRUE) //setting only at first time
22171 - {
22172 - flush_all_cam_entry(padapter); //clear CAM
22173 - }
22174 + pmlmeext->sitesurvey_res.ch_num = rtw_scan_ch_decision(padapter
22175 + , pmlmeext->sitesurvey_res.ch, RTW_CHANNEL_SCAN_AMOUNT
22176 + , pparm->ch, pparm->ch_num
22177 + );
22178
22179 - //set MSR to AP_Mode
22180 - Set_NETYPE0_MSR(padapter, _HW_STATE_AP_);
22181 -
22182 - //Set BSSID REG
22183 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_BSSID, pnetwork->MacAddress);
22184 + pmlmeext->sitesurvey_res.scan_mode = pparm->scan_mode;
22185
22186 - //Set EDCA param reg
22187 - acparm = 0x002F3217; // VO
22188 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AC_PARAM_VO, (u8 *)(&acparm));
22189 - acparm = 0x005E4317; // VI
22190 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AC_PARAM_VI, (u8 *)(&acparm));
22191 - //acparm = 0x00105320; // BE
22192 - acparm = 0x005ea42b;
22193 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AC_PARAM_BE, (u8 *)(&acparm));
22194 - acparm = 0x0000A444; // BK
22195 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AC_PARAM_BK, (u8 *)(&acparm));
22196 -
22197 - //Set Security
22198 - val8 = (psecuritypriv->dot11AuthAlgrthm == dot11AuthAlgrthm_8021X)? 0xcc: 0xcf;
22199 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_SEC_CFG, (u8 *)(&val8));
22200 +#ifdef CONFIG_DUALMAC_CONCURRENT
22201 + bdelayscan = dc_handle_site_survey(padapter);
22202 +#endif
22203
22204 - //Beacon Control related register
22205 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_BEACON_INTERVAL, (u8 *)(&bcn_interval));
22206 + //issue null data if associating to the AP
22207 + if (is_client_associated_to_ap(padapter) == _TRUE)
22208 + {
22209 + pmlmeext->sitesurvey_res.state = SCAN_TXNULL;
22210
22211 -
22212 - UpdateBrateTbl(padapter, pnetwork->SupportedRates);
22213 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_BASIC_RATE, pnetwork->SupportedRates);
22214 + issue_nulldata(padapter, NULL, 1, 3, 500);
22215
22216 - if(pmlmepriv->cur_network.join_res != _TRUE) //setting only at first time
22217 - {
22218 - u32 initialgain;
22219 +#ifdef CONFIG_CONCURRENT_MODE
22220 + if(is_client_associated_to_ap(padapter->pbuddy_adapter) == _TRUE)
22221 + {
22222 + DBG_871X("adapter is scanning(buddy_adapter is linked), issue nulldata(pwrbit=1)\n");
22223 +
22224 + issue_nulldata(padapter->pbuddy_adapter, NULL, 1, 3, 500);
22225 + }
22226 +#endif
22227 + bdelayscan = _TRUE;
22228 + }
22229 +#ifdef CONFIG_CONCURRENT_MODE
22230 + else if(is_client_associated_to_ap(padapter->pbuddy_adapter) == _TRUE)
22231 + {
22232 + #ifdef CONFIG_TDLS
22233 + if(padapter->pbuddy_adapter->wdinfo.wfd_tdls_enable == 1)
22234 + {
22235 + issue_tunneled_probe_req(padapter->pbuddy_adapter);
22236 + }
22237 + #endif //CONFIG_TDLS
22238
22239 - //disable dynamic functions, such as high power, DIG
22240 - //Save_DM_Func_Flag(padapter);
22241 - //Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);
22242 -
22243 - //turn on dynamic functions
22244 - Switch_DM_Func(padapter, DYNAMIC_FUNC_DIG|DYNAMIC_FUNC_HP|DYNAMIC_FUNC_SS, _TRUE);
22245 + pmlmeext->sitesurvey_res.state = SCAN_TXNULL;
22246
22247 - initialgain = 0x30;
22248 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));
22249 -
22250 - }
22251 + issue_nulldata(padapter->pbuddy_adapter, NULL, 1, 3, 500);
22252
22253 - //set channel, bwmode
22254 - p = rtw_get_ie((pnetwork->IEs + sizeof(NDIS_802_11_FIXED_IEs)), _HT_ADD_INFO_IE_, &ie_len, (pnetwork->IELength - sizeof(NDIS_802_11_FIXED_IEs)));
22255 - if( p && ie_len)
22256 - {
22257 - struct HT_info_element *pht_info = (struct HT_info_element *)(p+2);
22258 -
22259 - if ((pregpriv->cbw40_enable) && (pht_info->infos[0] & BIT(2)))
22260 + bdelayscan = _TRUE;
22261 + }
22262 +#endif
22263 + if(bdelayscan)
22264 {
22265 - //switch to the 40M Hz mode
22266 - //pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40;
22267 - cur_bwmode = HT_CHANNEL_WIDTH_40;
22268 - switch (pht_info->infos[0] & 0x3)
22269 - {
22270 - case 1:
22271 - //pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
22272 - cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
22273 - break;
22274 -
22275 - case 3:
22276 - //pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
22277 - cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
22278 - break;
22279 -
22280 - default:
22281 - //pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
22282 - cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
22283 - break;
22284 - }
22285 -
22286 + //delay 50ms to protect nulldata(1).
22287 + set_survey_timer(pmlmeext, 50);
22288 + return H2C_SUCCESS;
22289 }
22290 -
22291 }
22292
22293 - //TODO: need to judge the phy parameters on concurrent mode for single phy
22294 - //set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
22295 - set_channel_bwmode(padapter, cur_channel, cur_ch_offset, cur_bwmode);
22296 -
22297 - DBG_871X("CH=%d, BW=%d, offset=%d\n", cur_channel, cur_bwmode, cur_ch_offset);
22298 + if ((pmlmeext->sitesurvey_res.state == SCAN_START) || (pmlmeext->sitesurvey_res.state == SCAN_TXNULL))
22299 + {
22300 +#ifdef CONFIG_FIND_BEST_CHANNEL
22301 +#if 0
22302 + for (i=0; pmlmeext->channel_set[i].ChannelNum !=0; i++) {
22303 + pmlmeext->channel_set[i].rx_count = 0;
22304 + }
22305 +#endif
22306 +#endif /* CONFIG_FIND_BEST_CHANNEL */
22307
22308 - //
22309 - pmlmeext->cur_channel = cur_channel;
22310 - pmlmeext->cur_bwmode = cur_bwmode;
22311 - pmlmeext->cur_ch_offset = cur_ch_offset;
22312 - pmlmeext->cur_wireless_mode = pmlmepriv->cur_network.network_type;
22313 + //disable dynamic functions, such as high power, DIG
22314 + Save_DM_Func_Flag(padapter);
22315 + Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);
22316
22317 - //update cur_wireless_mode
22318 - update_wireless_mode(padapter);
22319 -
22320 - //let pnetwork_mlmeext == pnetwork_mlme.
22321 - _rtw_memcpy(pnetwork_mlmeext, pnetwork, pnetwork->Length);
22322 + //config the initial gain under scaning, need to write the BB registers
22323
22324 #ifdef CONFIG_P2P
22325 - _rtw_memcpy(pwdinfo->p2p_group_ssid, pnetwork->Ssid.Ssid, pnetwork->Ssid.SsidLength);
22326 - pwdinfo->p2p_group_ssid_len = pnetwork->Ssid.SsidLength;
22327 +#ifdef CONFIG_IOCTL_CFG80211
22328 + if((wdev_to_priv(padapter->rtw_wdev))->p2p_enabled == _TRUE && pwdinfo->driver_interface == DRIVER_CFG80211 )
22329 + {
22330 + write_initial_gain = 0;
22331 + }
22332 + else
22333 +#endif //CONFIG_IOCTL_CFG80211
22334 + if ( !rtw_p2p_chk_state( pwdinfo, P2P_STATE_NONE ) )
22335 + initialgain = 0x28;
22336 + else
22337 #endif //CONFIG_P2P
22338 + initialgain = 0x17;
22339
22340 -
22341 - if(_TRUE == pmlmeext->bstart_bss)
22342 - {
22343 - update_beacon(padapter, _TIM_IE_, NULL, _FALSE);
22344 + if(write_initial_gain == 1)
22345 + rtw_hal_set_hwreg(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));
22346
22347 - //issue beacon frame
22348 - if(send_beacon(padapter)==_FAIL)
22349 - {
22350 - DBG_871X("issue_beacon, fail!\n");
22351 - }
22352 + //set MSR to no link state
22353 + Set_MSR(padapter, _HW_STATE_NOLINK_);
22354 +
22355 + val8 = 1; //under site survey
22356 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
22357 +
22358 + pmlmeext->sitesurvey_res.state = SCAN_PROCESS;
22359 }
22360
22361 + site_survey(padapter);
22362
22363 - //update bc/mc sta_info
22364 - update_bmc_sta(padapter);
22365 -
22366 - //pmlmeext->bstart_bss = _TRUE;
22367 + return H2C_SUCCESS;
22368
22369 }
22370
22371 -int rtw_check_beacon_data(_adapter *padapter, u8 *pbuf, int len)
22372 +u8 setauth_hdl(_adapter *padapter, unsigned char *pbuf)
22373 {
22374 - int ret=_SUCCESS;
22375 - u8 *p;
22376 - u8 *pHT_caps_ie=NULL;
22377 - u8 *pHT_info_ie=NULL;
22378 - struct sta_info *psta = NULL;
22379 - u16 cap, ht_cap=_FALSE;
22380 - uint ie_len = 0;
22381 - int group_cipher, pairwise_cipher;
22382 - u8 channel, network_type, supportRate[NDIS_802_11_LENGTH_RATES_EX];
22383 - int supportRateNum = 0;
22384 - u8 OUI1[] = {0x00, 0x50, 0xf2,0x01};
22385 - u8 wps_oui[4]={0x0,0x50,0xf2,0x04};
22386 - u8 WMM_PARA_IE[] = {0x00, 0x50, 0xf2, 0x02, 0x01, 0x01};
22387 - struct registry_priv *pregistrypriv = &padapter->registrypriv;
22388 - struct security_priv *psecuritypriv = &padapter->securitypriv;
22389 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
22390 - WLAN_BSSID_EX *pbss_network = (WLAN_BSSID_EX *)&pmlmepriv->cur_network.network;
22391 - struct sta_priv *pstapriv = &padapter->stapriv;
22392 - u8 *ie = pbss_network->IEs;
22393 + struct setauth_parm *pparm = (struct setauth_parm *)pbuf;
22394 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
22395 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
22396
22397 + if (pparm->mode < 4)
22398 + {
22399 + pmlmeinfo->auth_algo = pparm->mode;
22400 + }
22401
22402 - /* SSID */
22403 - /* Supported rates */
22404 - /* DS Params */
22405 - /* WLAN_EID_COUNTRY */
22406 - /* ERP Information element */
22407 - /* Extended supported rates */
22408 - /* WPA/WPA2 */
22409 - /* Wi-Fi Wireless Multimedia Extensions */
22410 - /* ht_capab, ht_oper */
22411 - /* WPS IE */
22412 -
22413 - DBG_8192C("%s, len=%d\n", __FUNCTION__, len);
22414 -
22415 - if(check_fwstate(pmlmepriv, WIFI_AP_STATE) != _TRUE)
22416 - return _FAIL;
22417 + return H2C_SUCCESS;
22418 +}
22419
22420 +u8 setkey_hdl(_adapter *padapter, u8 *pbuf)
22421 +{
22422 + unsigned short ctrl;
22423 + struct setkey_parm *pparm = (struct setkey_parm *)pbuf;
22424 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
22425 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
22426 + unsigned char null_sta[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
22427
22428 - if(len>MAX_IE_SZ)
22429 - return _FAIL;
22430 + //main tx key for wep.
22431 + if(pparm->set_tx)
22432 + pmlmeinfo->key_index = pparm->keyid;
22433
22434 - pbss_network->IELength = len;
22435 + //write cam
22436 + ctrl = BIT(15) | ((pparm->algorithm) << 2) | pparm->keyid;
22437
22438 - _rtw_memset(ie, 0, MAX_IE_SZ);
22439 -
22440 - _rtw_memcpy(ie, pbuf, pbss_network->IELength);
22441 + write_cam(padapter, pparm->keyid, ctrl, null_sta, pparm->key);
22442
22443 + //allow multicast packets to driver
22444 + rtw_hal_set_hwreg(padapter, HW_VAR_ON_RCR_AM, null_addr);
22445
22446 - if(pbss_network->InfrastructureMode!=Ndis802_11APMode)
22447 - return _FAIL;
22448 + return H2C_SUCCESS;
22449 +}
22450
22451 - pbss_network->Rssi = 0;
22452 +u8 set_stakey_hdl(_adapter *padapter, u8 *pbuf)
22453 +{
22454 + u16 ctrl=0;
22455 + u8 cam_id;//cam_entry
22456 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
22457 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
22458 + struct set_stakey_parm *pparm = (struct set_stakey_parm *)pbuf;
22459 +#ifdef CONFIG_TDLS
22460 + struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
22461 + struct sta_priv *pstapriv = &padapter->stapriv;
22462 + struct sta_info *psta;
22463 +#endif //CONFIG_TDLS
22464
22465 - _rtw_memcpy(pbss_network->MacAddress, myid(&(padapter->eeprompriv)), ETH_ALEN);
22466 + //cam_entry:
22467 + //0~3 for default key
22468
22469 - //beacon interval
22470 - p = rtw_get_beacon_interval_from_ie(ie);//ie + 8; // 8: TimeStamp, 2: Beacon Interval 2:Capability
22471 - //pbss_network->Configuration.BeaconPeriod = le16_to_cpu(*(unsigned short*)p);
22472 - pbss_network->Configuration.BeaconPeriod = RTW_GET_LE16(p);
22473 -
22474 - //capability
22475 - //cap = *(unsigned short *)rtw_get_capability_from_ie(ie);
22476 - //cap = le16_to_cpu(cap);
22477 - cap = RTW_GET_LE16(ie);
22478 + //for concurrent mode (ap+sta):
22479 + //default key is disable, using sw encrypt/decrypt
22480 + //cam_entry = 4 //for sta mode (macid=0)
22481 + //cam_entry(macid+3) = 5 ~ N//for ap mode (aid=1~N, macid=2 ~N)
22482 +
22483 + //for concurrent mode (sta+sta):
22484 + //default key is disable, using sw encrypt/decrypt
22485 + //cam_entry = 4 //mapping to macid=0
22486 + //cam_entry = 5 //mapping to macid=2
22487
22488 - //SSID
22489 - p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _SSID_IE_, &ie_len, (pbss_network->IELength -_BEACON_IE_OFFSET_));
22490 - if(p && ie_len>0)
22491 +#ifdef CONFIG_CONCURRENT_MODE
22492 + if((pmlmeinfo->state&0x03) == WIFI_FW_STATION_STATE)
22493 {
22494 - _rtw_memset(&pbss_network->Ssid, 0, sizeof(NDIS_802_11_SSID));
22495 - _rtw_memcpy(pbss_network->Ssid.Ssid, (p + 2), ie_len);
22496 - pbss_network->Ssid.SsidLength = ie_len;
22497 + struct sta_priv *pstapriv = &padapter->stapriv;
22498 + struct sta_info *psta;
22499 +
22500 + psta = rtw_get_stainfo(pstapriv, pmlmeinfo->network.MacAddress);
22501 +
22502 + if(psta && psta->mac_id==2)
22503 + {
22504 + cam_id = 5;
22505 + }
22506 + else
22507 + {
22508 + cam_id = 4;
22509 + }
22510 +/*
22511 + if(padapter->iface_type > PRIMARY_IFACE)
22512 + {
22513 + cam_id = 5;
22514 + }
22515 + else
22516 + {
22517 + cam_id = 4;
22518 + }
22519 +*/
22520 }
22521 +#else
22522 + cam_id = 4;
22523 +#endif
22524
22525 - //chnnel
22526 - channel = 0;
22527 - pbss_network->Configuration.Length = 0;
22528 - p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _DSSET_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
22529 - if(p && ie_len>0)
22530 - channel = *(p + 2);
22531 -
22532 - pbss_network->Configuration.DSConfig = channel;
22533 -
22534 -
22535 - _rtw_memset(supportRate, 0, NDIS_802_11_LENGTH_RATES_EX);
22536 - // get supported rates
22537 - p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _SUPPORTEDRATES_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
22538 - if (p != NULL)
22539 - {
22540 - _rtw_memcpy(supportRate, p+2, ie_len);
22541 - supportRateNum = ie_len;
22542 - }
22543 -
22544 - //get ext_supported rates
22545 - p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _EXT_SUPPORTEDRATES_IE_, &ie_len, pbss_network->IELength - _BEACON_IE_OFFSET_);
22546 - if (p != NULL)
22547 +
22548 + if((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE)
22549 {
22550 - _rtw_memcpy(supportRate+supportRateNum, p+2, ie_len);
22551 - supportRateNum += ie_len;
22552
22553 - }
22554 -
22555 - network_type = rtw_check_network_type(supportRate, supportRateNum, channel);
22556 -
22557 - rtw_set_supported_rate(pbss_network->SupportedRates, network_type);
22558 + struct sta_info *psta;
22559 + struct sta_priv *pstapriv = &padapter->stapriv;
22560
22561 + if(pparm->algorithm == _NO_PRIVACY_) // clear cam entry
22562 + {
22563 + clear_cam_entry(padapter, pparm->id);
22564 + return H2C_SUCCESS_RSP;
22565 + }
22566 +
22567 + psta = rtw_get_stainfo(pstapriv, pparm->addr);
22568 + if(psta)
22569 + {
22570 + ctrl = (BIT(15) | ((pparm->algorithm) << 2));
22571
22572 - //parsing ERP_IE
22573 - p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _ERPINFO_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
22574 - if(p && ie_len>0)
22575 - {
22576 - ERP_IE_handler(padapter, (PNDIS_802_11_VARIABLE_IEs)p);
22577 - }
22578 -#ifdef SUPPORT_64_STA
22579 - //capability
22580 - p=rtw_get_capability_from_ie(ie);
22581 - //cap = le16_to_cpu(cap);
22582 - cap = RTW_GET_LE16(p);
22583 - //printk("%s cap=0x%x\n",__FUNCTION__,cap);
22584 - cap &=~BIT(4);
22585 - //printk("%s cap=0x%x\n",__FUNCTION__,cap);
22586 - RTW_PUT_LE16(p,cap);
22587 - cap = RTW_GET_LE16(p);
22588 - //printk("%s [fin] cap=0x%x\n",__FUNCTION__,cap);
22589 - pbss_network->Privacy = 0;
22590 - psecuritypriv->wpa_psk = 0;
22591 -
22592 - {
22593 - u32 i,j;
22594 - printk(" %s :Dump IEs\n",__FUNCTION__);
22595 - for(i=0,j=1;i<pbss_network->IELength;i++){
22596 - printk("0x%.2x:",ie[i]);
22597 - if( ((j++)%16)==0 )
22598 - printk("\n");
22599 - }
22600 - printk("\n");
22601 - }
22602 - p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _RSN_IE_2_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
22603 - if(p && ie_len>0){
22604 - //remove wpa2 ie
22605 - u32 offset=0,remain=0;
22606 - offset=p-ie;
22607 - remain= pbss_network->IELength-offset-ie_len-2;
22608 - DBG_8192C("%s wpa2 ie_len=%d offset=%d remain=%d IELength=%d\n",__FUNCTION__,ie_len,offset,remain,pbss_network->IELength);
22609 - {
22610 - u32 i,j;
22611 - printk(" %s :Dump IEs\n",__FUNCTION__);
22612 - for(i=0,j=1;i<pbss_network->IELength;i++){
22613 - printk("0x%.2x:",ie[i]);
22614 - if((((j++)%16)==0) )
22615 - printk("\n");
22616 - }
22617 - DBG_8192C("\n");
22618 - }
22619 - _rtw_memcpy(p,p+ie_len+2,remain);
22620 - pbss_network->IELength-=(ie_len+2);
22621 - DBG_8192C("%s wpa2 [fin]ie_len=%d remain=%d IELength=%d\n",__FUNCTION__,ie_len,remain,pbss_network->IELength);
22622 - {
22623 - u32 i,j;
22624 - printk(" %s :Dump IEs\n",__FUNCTION__);
22625 - for(i=0,j=1;i<pbss_network->IELength;i++){
22626 - printk("0x%.2x:",ie[i]);
22627 - if((j++%16)==0 )
22628 - printk("\n");
22629 - }
22630 - DBG_8192C("\n");
22631 - }
22632 - }
22633 -
22634 - psecuritypriv->dot8021xalg = 0;
22635 - psecuritypriv->wpa2_group_cipher = _NO_PRIVACY_;
22636 - psecuritypriv->wpa2_pairwise_cipher = _NO_PRIVACY_;
22637 - {
22638 - //remove wpa ie
22639 - u32 rem=pbss_network->IELength-_BEACON_IE_OFFSET_;
22640 - p = ie + _BEACON_IE_OFFSET_;
22641 -
22642 - DBG_8192C("%s [p]%p id[0x%x] ie[%p] len[%d][_BEACON_IE_OFFSET_]%d [remain]%d \n",__FUNCTION__,p,p[0],ie,p[1],_BEACON_IE_OFFSET_,rem);
22643 - DBG_8192C("%s id=0x%x len=%d rem=%d next p %p\n",__FUNCTION__,*p,p[1],rem,(p + (p[1]+2)));
22644 - for (p = ie + _BEACON_IE_OFFSET_;rem>0 ;)
22645 - {
22646 - DBG_8192C("%s id=0x%x len=%d rem=%d next p %p\n",__FUNCTION__,*p,p[1],rem,p + (p[1]+2));
22647 - if ((p) && (_rtw_memcmp(p+2, OUI1, 4)))
22648 - {
22649 - //remove wpa ie
22650 - u32 remain=0;
22651 - u8 *ptr;
22652 - remain= rem-p[1]-2;
22653 - ptr=p+p[1]+2;
22654 - DBG_8192C("%s wpa ie_len=%d remain=%d IELength=%d p %p next p %p,%p id 0x%x\n",__FUNCTION__,p[1],remain,pbss_network->IELength,p,p+p[1]+2,ptr,p[p[1]+2]);
22655 - pbss_network->IELength-=(p[1]+2);
22656 - _rtw_memcpy(p,ptr,remain);
22657 - DBG_8192C("%s wpa [fin]ie_len=%d remain=%d IELength=%d\n",__FUNCTION__,p[1],remain,pbss_network->IELength);
22658 - {
22659 - u32 i,j;
22660 - DBG_8192C(" %s :Dump IEs\n",__FUNCTION__);
22661 - for(i=0,j=1;i<pbss_network->IELength;i++){
22662 - printk("0x%.2x:",ie[i]);
22663 - if((j++%16)==0)
22664 - DBG_8192C("\n");
22665 - }
22666 - DBG_8192C("\n");
22667 - }
22668 - DBG_8192C("%s wpa [fin] ie_len=%d remain=%d IELength=%d\n",__FUNCTION__,ie_len,remain,pbss_network->IELength);
22669 - rem=remain;
22670 - }else{
22671 - rem -= (p[1]+2);
22672 - p+=(p[1]+2);
22673 - }
22674 - }
22675 - }
22676 -#else //SUPPORT_64_STA
22677 + DBG_871X("r871x_set_stakey_hdl(): enc_algorithm=%d\n", pparm->algorithm);
22678
22679 - //update privacy/security
22680 - if (cap & BIT(4))
22681 - pbss_network->Privacy = 1;
22682 - else
22683 - pbss_network->Privacy = 0;
22684 + if((psta->mac_id<1) || (psta->mac_id>(NUM_STA-4)))
22685 + {
22686 + DBG_871X("r871x_set_stakey_hdl():set_stakey failed, mac_id(aid)=%d\n", psta->mac_id);
22687 + return H2C_REJECTED;
22688 + }
22689 +
22690 + cam_id = (psta->mac_id + 3);//0~3 for default key, cmd_id=macid + 3, macid=aid+1;
22691
22692 - psecuritypriv->wpa_psk = 0;
22693 + DBG_871X("Write CAM, mac_addr=%x:%x:%x:%x:%x:%x, cam_entry=%d\n", pparm->addr[0],
22694 + pparm->addr[1], pparm->addr[2], pparm->addr[3], pparm->addr[4],
22695 + pparm->addr[5], cam_id);
22696
22697 - //wpa2
22698 - group_cipher = 0; pairwise_cipher = 0;
22699 - psecuritypriv->wpa2_group_cipher = _NO_PRIVACY_;
22700 - psecuritypriv->wpa2_pairwise_cipher = _NO_PRIVACY_;
22701 - p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _RSN_IE_2_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
22702 - if(p && ie_len>0)
22703 - {
22704 - if(rtw_parse_wpa2_ie(p, ie_len+2, &group_cipher, &pairwise_cipher) == _SUCCESS)
22705 + write_cam(padapter, cam_id, ctrl, pparm->addr, pparm->key);
22706 +
22707 + return H2C_SUCCESS_RSP;
22708 +
22709 + }
22710 + else
22711 {
22712 - psecuritypriv->dot11AuthAlgrthm= dot11AuthAlgrthm_8021X;
22713 -
22714 - psecuritypriv->dot8021xalg = 1;//psk, todo:802.1x
22715 - psecuritypriv->wpa_psk |= BIT(1);
22716 -
22717 - psecuritypriv->wpa2_group_cipher = group_cipher;
22718 - psecuritypriv->wpa2_pairwise_cipher = pairwise_cipher;
22719 -#if 0
22720 - switch(group_cipher)
22721 - {
22722 - case WPA_CIPHER_NONE:
22723 - psecuritypriv->wpa2_group_cipher = _NO_PRIVACY_;
22724 - break;
22725 - case WPA_CIPHER_WEP40:
22726 - psecuritypriv->wpa2_group_cipher = _WEP40_;
22727 - break;
22728 - case WPA_CIPHER_TKIP:
22729 - psecuritypriv->wpa2_group_cipher = _TKIP_;
22730 - break;
22731 - case WPA_CIPHER_CCMP:
22732 - psecuritypriv->wpa2_group_cipher = _AES_;
22733 - break;
22734 - case WPA_CIPHER_WEP104:
22735 - psecuritypriv->wpa2_group_cipher = _WEP104_;
22736 - break;
22737 - }
22738 -
22739 - switch(pairwise_cipher)
22740 - {
22741 - case WPA_CIPHER_NONE:
22742 - psecuritypriv->wpa2_pairwise_cipher = _NO_PRIVACY_;
22743 - break;
22744 - case WPA_CIPHER_WEP40:
22745 - psecuritypriv->wpa2_pairwise_cipher = _WEP40_;
22746 - break;
22747 - case WPA_CIPHER_TKIP:
22748 - psecuritypriv->wpa2_pairwise_cipher = _TKIP_;
22749 - break;
22750 - case WPA_CIPHER_CCMP:
22751 - psecuritypriv->wpa2_pairwise_cipher = _AES_;
22752 - break;
22753 - case WPA_CIPHER_WEP104:
22754 - psecuritypriv->wpa2_pairwise_cipher = _WEP104_;
22755 - break;
22756 - }
22757 -#endif
22758 + DBG_871X("r871x_set_stakey_hdl(): sta has been free\n");
22759 + return H2C_REJECTED;
22760 }
22761
22762 }
22763
22764 - //wpa
22765 - ie_len = 0;
22766 - group_cipher = 0; pairwise_cipher = 0;
22767 - psecuritypriv->wpa_group_cipher = _NO_PRIVACY_;
22768 - psecuritypriv->wpa_pairwise_cipher = _NO_PRIVACY_;
22769 - for (p = ie + _BEACON_IE_OFFSET_; ;p += (ie_len + 2))
22770 + //below for sta mode
22771 +
22772 + if(pparm->algorithm == _NO_PRIVACY_) // clear cam entry
22773 {
22774 - p = rtw_get_ie(p, _SSN_IE_1_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_ - (ie_len + 2)));
22775 - if ((p) && (_rtw_memcmp(p+2, OUI1, 4)))
22776 - {
22777 - if(rtw_parse_wpa_ie(p, ie_len+2, &group_cipher, &pairwise_cipher) == _SUCCESS)
22778 - {
22779 - psecuritypriv->dot11AuthAlgrthm= dot11AuthAlgrthm_8021X;
22780 -
22781 - psecuritypriv->dot8021xalg = 1;//psk, todo:802.1x
22782 -
22783 - psecuritypriv->wpa_psk |= BIT(0);
22784 + clear_cam_entry(padapter, pparm->id);
22785 + return H2C_SUCCESS;
22786 + }
22787 +
22788 + ctrl = BIT(15) | ((pparm->algorithm) << 2);
22789 +
22790 +#ifdef CONFIG_TDLS
22791 + if(ptdlsinfo->clear_cam!=0){
22792 + clear_cam_entry(padapter, ptdlsinfo->clear_cam);
22793 + ptdlsinfo->clear_cam=0;
22794
22795 - psecuritypriv->wpa_group_cipher = group_cipher;
22796 - psecuritypriv->wpa_pairwise_cipher = pairwise_cipher;
22797 + return H2C_SUCCESS;
22798 + }
22799
22800 -#if 0
22801 - switch(group_cipher)
22802 - {
22803 - case WPA_CIPHER_NONE:
22804 - psecuritypriv->wpa_group_cipher = _NO_PRIVACY_;
22805 - break;
22806 - case WPA_CIPHER_WEP40:
22807 - psecuritypriv->wpa_group_cipher = _WEP40_;
22808 - break;
22809 - case WPA_CIPHER_TKIP:
22810 - psecuritypriv->wpa_group_cipher = _TKIP_;
22811 - break;
22812 - case WPA_CIPHER_CCMP:
22813 - psecuritypriv->wpa_group_cipher = _AES_;
22814 - break;
22815 - case WPA_CIPHER_WEP104:
22816 - psecuritypriv->wpa_group_cipher = _WEP104_;
22817 - break;
22818 - }
22819 + psta = rtw_get_stainfo(pstapriv, pparm->addr);//Get TDLS Peer STA
22820 + if( psta->tdls_sta_state&TDLS_LINKED_STATE ){
22821 + write_cam(padapter, psta->mac_id, ctrl, pparm->addr, pparm->key);
22822 + }
22823 + else
22824 +#endif //CONFIG_TDLS
22825 + write_cam(padapter, cam_id, ctrl, pparm->addr, pparm->key);
22826
22827 - switch(pairwise_cipher)
22828 - {
22829 - case WPA_CIPHER_NONE:
22830 - psecuritypriv->wpa_pairwise_cipher = _NO_PRIVACY_;
22831 - break;
22832 - case WPA_CIPHER_WEP40:
22833 - psecuritypriv->wpa_pairwise_cipher = _WEP40_;
22834 - break;
22835 - case WPA_CIPHER_TKIP:
22836 - psecuritypriv->wpa_pairwise_cipher = _TKIP_;
22837 - break;
22838 - case WPA_CIPHER_CCMP:
22839 - psecuritypriv->wpa_pairwise_cipher = _AES_;
22840 - break;
22841 - case WPA_CIPHER_WEP104:
22842 - psecuritypriv->wpa_pairwise_cipher = _WEP104_;
22843 - break;
22844 - }
22845 -#endif
22846 - }
22847 + pmlmeinfo->enc_algo = pparm->algorithm;
22848 +
22849 + return H2C_SUCCESS;
22850 +}
22851
22852 - break;
22853 -
22854 - }
22855 -
22856 - if ((p == NULL) || (ie_len == 0))
22857 - {
22858 - break;
22859 - }
22860 +u8 add_ba_hdl(_adapter *padapter, unsigned char *pbuf)
22861 +{
22862 + struct addBaReq_parm *pparm = (struct addBaReq_parm *)pbuf;
22863 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
22864 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
22865 +
22866 + struct sta_info *psta = rtw_get_stainfo(&padapter->stapriv, pparm->addr);
22867 +
22868 + if(!psta)
22869 + return H2C_SUCCESS;
22870
22871 +
22872 + if (((pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS) && (pmlmeinfo->HT_enable)) ||
22873 + ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE))
22874 + {
22875 + //pmlmeinfo->ADDBA_retry_count = 0;
22876 + //pmlmeinfo->candidate_tid_bitmap |= (0x1 << pparm->tid);
22877 + //psta->htpriv.candidate_tid_bitmap |= BIT(pparm->tid);
22878 + issue_action_BA(padapter, pparm->addr, RTW_WLAN_ACTION_ADDBA_REQ, (u16)pparm->tid);
22879 + //_set_timer(&pmlmeext->ADDBA_timer, ADDBA_TO);
22880 + _set_timer(&psta->addba_retry_timer, ADDBA_TO);
22881 + }
22882 +#ifdef CONFIG_TDLS
22883 + else if((psta->tdls_sta_state & TDLS_LINKED_STATE)&&
22884 + (psta->htpriv.ht_option==_TRUE) &&
22885 + (psta->htpriv.ampdu_enable==_TRUE) )
22886 + {
22887 + issue_action_BA(padapter, pparm->addr, RTW_WLAN_ACTION_ADDBA_REQ, (u16)pparm->tid);
22888 + //_set_timer(&pmlmeext->ADDBA_timer, ADDBA_TO);
22889 + _set_timer(&psta->addba_retry_timer, ADDBA_TO);
22890 + }
22891 +#endif //CONFIG
22892 + else
22893 + {
22894 + psta->htpriv.candidate_tid_bitmap &= ~BIT(pparm->tid);
22895 }
22896
22897 -#endif //SUPPORT_64_STA
22898 + return H2C_SUCCESS;
22899 +}
22900
22901 - //wmm
22902 - ie_len = 0;
22903 - pmlmepriv->qospriv.qos_option = 0;
22904 - if(pregistrypriv->wmm_enable)
22905 +u8 set_tx_beacon_cmd(_adapter* padapter)
22906 +{
22907 + struct cmd_obj *ph2c;
22908 + struct Tx_Beacon_param *ptxBeacon_parm;
22909 + struct cmd_priv *pcmdpriv = &(padapter->cmdpriv);
22910 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
22911 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
22912 + u8 res = _SUCCESS;
22913 + int len_diff = 0;
22914 +
22915 +_func_enter_;
22916 +
22917 + if ((ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj))) == NULL)
22918 {
22919 - for (p = ie + _BEACON_IE_OFFSET_; ;p += (ie_len + 2))
22920 - {
22921 - p = rtw_get_ie(p, _VENDOR_SPECIFIC_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_ - (ie_len + 2)));
22922 - if((p) && _rtw_memcmp(p+2, WMM_PARA_IE, 6))
22923 - {
22924 - pmlmepriv->qospriv.qos_option = 1;
22925 -
22926 - *(p+8) |= BIT(7);//QoS Info, support U-APSD
22927 -
22928 - break;
22929 - }
22930 -
22931 - if ((p == NULL) || (ie_len == 0))
22932 - {
22933 - break;
22934 - }
22935 - }
22936 + res= _FAIL;
22937 + goto exit;
22938 }
22939 -
22940 - //parsing HT_CAP_IE
22941 - p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _HT_CAPABILITY_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
22942 - if(p && ie_len>0)
22943 +
22944 + if ((ptxBeacon_parm = (struct Tx_Beacon_param *)rtw_zmalloc(sizeof(struct Tx_Beacon_param))) == NULL)
22945 {
22946 - u8 rf_type;
22947 -
22948 - struct rtw_ieee80211_ht_cap *pht_cap = (struct rtw_ieee80211_ht_cap *)(p+2);
22949 + rtw_mfree((unsigned char *)ph2c, sizeof(struct cmd_obj));
22950 + res= _FAIL;
22951 + goto exit;
22952 + }
22953
22954 - pHT_caps_ie=p;
22955 -
22956 + _rtw_memcpy(&(ptxBeacon_parm->network), &(pmlmeinfo->network), sizeof(WLAN_BSSID_EX));
22957 +
22958 + len_diff = update_hidden_ssid(
22959 + ptxBeacon_parm->network.IEs+_BEACON_IE_OFFSET_
22960 + , ptxBeacon_parm->network.IELength-_BEACON_IE_OFFSET_
22961 + , pmlmeinfo->hidden_ssid_mode
22962 + );
22963 + ptxBeacon_parm->network.IELength += len_diff;
22964
22965 - ht_cap = _TRUE;
22966 - network_type |= WIRELESS_11_24N;
22967 + init_h2fwcmd_w_parm_no_rsp(ph2c, ptxBeacon_parm, GEN_CMD_CODE(_TX_Beacon));
22968 +
22969 + res = rtw_enqueue_cmd(pcmdpriv, ph2c);
22970
22971
22972 - padapter->HalFunc.GetHwRegHandler(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
22973 +exit:
22974 +
22975 +_func_exit_;
22976
22977 - if((psecuritypriv->wpa_pairwise_cipher & WPA_CIPHER_CCMP) ||
22978 - (psecuritypriv->wpa2_pairwise_cipher & WPA_CIPHER_CCMP))
22979 - {
22980 - pht_cap->ampdu_params_info |= (IEEE80211_HT_CAP_AMPDU_DENSITY&(0x07<<2));
22981 - }
22982 - else
22983 - {
22984 - pht_cap->ampdu_params_info |= (IEEE80211_HT_CAP_AMPDU_DENSITY&0x00);
22985 - }
22986 -
22987 + return res;
22988 +}
22989
22990 - if(rf_type == RF_1T1R)
22991 - {
22992 - pht_cap->supp_mcs_set[0] = 0xff;
22993 - pht_cap->supp_mcs_set[1] = 0x0;
22994 - }
22995
22996 - _rtw_memcpy(&pmlmepriv->htpriv.ht_cap, p+2, ie_len);
22997 +u8 mlme_evt_hdl(_adapter *padapter, unsigned char *pbuf)
22998 +{
22999 + u8 evt_code, evt_seq;
23000 + u16 evt_sz;
23001 + uint *peventbuf;
23002 + void (*event_callback)(_adapter *dev, u8 *pbuf);
23003 + struct evt_priv *pevt_priv = &(padapter->evtpriv);
23004 +
23005 + peventbuf = (uint*)pbuf;
23006 + evt_sz = (u16)(*peventbuf&0xffff);
23007 + evt_seq = (u8)((*peventbuf>>24)&0x7f);
23008 + evt_code = (u8)((*peventbuf>>16)&0xff);
23009 +
23010
23011 + #ifdef CHECK_EVENT_SEQ
23012 + // checking event sequence...
23013 + if (evt_seq != (ATOMIC_READ(&pevt_priv->event_seq) & 0x7f) )
23014 + {
23015 + RT_TRACE(_module_rtl871x_cmd_c_,_drv_info_,("Evetn Seq Error! %d vs %d\n", (evt_seq & 0x7f), (ATOMIC_READ(&pevt_priv->event_seq) & 0x7f)));
23016 +
23017 + pevt_priv->event_seq = (evt_seq+1)&0x7f;
23018 +
23019 + goto _abort_event_;
23020 }
23021 + #endif
23022
23023 - //parsing HT_INFO_IE
23024 - p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _HT_ADD_INFO_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
23025 - if(p && ie_len>0)
23026 + // checking if event code is valid
23027 + if (evt_code >= MAX_C2HEVT)
23028 {
23029 - pHT_info_ie=p;
23030 + RT_TRACE(_module_rtl871x_cmd_c_,_drv_err_,("\nEvent Code(%d) mismatch!\n", evt_code));
23031 + goto _abort_event_;
23032 }
23033
23034 - switch(network_type)
23035 + // checking if event size match the event parm size
23036 + if ((wlanevents[evt_code].parmsize != 0) &&
23037 + (wlanevents[evt_code].parmsize != evt_sz))
23038 {
23039 - case WIRELESS_11B:
23040 - pbss_network->NetworkTypeInUse = Ndis802_11DS;
23041 - break;
23042 - case WIRELESS_11G:
23043 - case WIRELESS_11BG:
23044 - case WIRELESS_11G_24N:
23045 - case WIRELESS_11BG_24N:
23046 - pbss_network->NetworkTypeInUse = Ndis802_11OFDM24;
23047 - break;
23048 - case WIRELESS_11A:
23049 - pbss_network->NetworkTypeInUse = Ndis802_11OFDM5;
23050 - break;
23051 - default :
23052 - pbss_network->NetworkTypeInUse = Ndis802_11OFDM24;
23053 - break;
23054 +
23055 + RT_TRACE(_module_rtl871x_cmd_c_,_drv_err_,("\nEvent(%d) Parm Size mismatch (%d vs %d)!\n",
23056 + evt_code, wlanevents[evt_code].parmsize, evt_sz));
23057 + goto _abort_event_;
23058 +
23059 }
23060 -
23061 - pmlmepriv->cur_network.network_type = network_type;
23062 -
23063
23064 - pmlmepriv->htpriv.ht_option = _FALSE;
23065 -#ifdef CONFIG_80211N_HT
23066 - if( (psecuritypriv->wpa2_pairwise_cipher&WPA_CIPHER_TKIP) ||
23067 - (psecuritypriv->wpa_pairwise_cipher&WPA_CIPHER_TKIP))
23068 - {
23069 - //todo:
23070 - //ht_cap = _FALSE;
23071 - }
23072 -
23073 - //ht_cap
23074 - if(pregistrypriv->ht_enable && ht_cap==_TRUE)
23075 - {
23076 - pmlmepriv->htpriv.ht_option = _TRUE;
23077 - pmlmepriv->qospriv.qos_option = 1;
23078 + ATOMIC_INC(&pevt_priv->event_seq);
23079
23080 - if(pregistrypriv->ampdu_enable==1)
23081 - {
23082 - pmlmepriv->htpriv.ampdu_enable = _TRUE;
23083 - }
23084 + peventbuf += 2;
23085 +
23086 + if(peventbuf)
23087 + {
23088 + event_callback = wlanevents[evt_code].event_callback;
23089 + event_callback(padapter, (u8*)peventbuf);
23090
23091 - HT_caps_handler(padapter, (PNDIS_802_11_VARIABLE_IEs)pHT_caps_ie);
23092 -
23093 - HT_info_handler(padapter, (PNDIS_802_11_VARIABLE_IEs)pHT_info_ie);
23094 + pevt_priv->evt_done_cnt++;
23095 }
23096 -#endif
23097
23098
23099 - pbss_network->Length = get_WLAN_BSSID_EX_sz((WLAN_BSSID_EX *)pbss_network);
23100 -
23101 - //issue beacon to start bss network
23102 - start_bss_network(padapter, (u8*)pbss_network);
23103 -
23104 +_abort_event_:
23105
23106 - //alloc sta_info for ap itself
23107 - psta = rtw_get_stainfo(&padapter->stapriv, pbss_network->MacAddress);
23108 - if(!psta)
23109 - {
23110 - psta = rtw_alloc_stainfo(&padapter->stapriv, pbss_network->MacAddress);
23111 - if (psta == NULL)
23112 - {
23113 - return _FAIL;
23114 - }
23115 - }
23116 -
23117 - rtw_indicate_connect( padapter);
23118
23119 - pmlmepriv->cur_network.join_res = _TRUE;//for check if already set beacon
23120 + return H2C_SUCCESS;
23121
23122 - //update bc/mc sta_info
23123 - //update_bmc_sta(padapter);
23124 -
23125 - return ret;
23126 -
23127 }
23128
23129 -#ifdef CONFIG_NATIVEAP_MLME
23130 -
23131 -static void update_bcn_fixed_ie(_adapter *padapter)
23132 +u8 h2c_msg_hdl(_adapter *padapter, unsigned char *pbuf)
23133 {
23134 - DBG_871X("%s\n", __FUNCTION__);
23135 + if(!pbuf)
23136 + return H2C_PARAMETERS_ERROR;
23137
23138 + return H2C_SUCCESS;
23139 }
23140
23141 -static void update_bcn_erpinfo_ie(_adapter *padapter)
23142 +u8 tx_beacon_hdl(_adapter *padapter, unsigned char *pbuf)
23143 {
23144 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
23145 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
23146 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
23147 + if(send_beacon(padapter)==_FAIL)
23148 + {
23149 + DBG_871X("issue_beacon, fail!\n");
23150 + return H2C_PARAMETERS_ERROR;
23151 + }
23152 +#ifdef CONFIG_AP_MODE
23153 + else //tx bc/mc frames after update TIM
23154 + {
23155 + _irqL irqL;
23156 + struct sta_info *psta_bmc;
23157 + _list *xmitframe_plist, *xmitframe_phead;
23158 + struct xmit_frame *pxmitframe=NULL;
23159 + struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
23160 + struct sta_priv *pstapriv = &padapter->stapriv;
23161 +
23162 + //for BC/MC Frames
23163 + psta_bmc = rtw_get_bcmc_stainfo(padapter);
23164 + if(!psta_bmc)
23165 + return H2C_SUCCESS;
23166 +
23167 + if((pstapriv->tim_bitmap&BIT(0)) && (psta_bmc->sleepq_len>0))
23168 + {
23169 +#ifndef CONFIG_PCI_HCI
23170 + rtw_msleep_os(10);// 10ms, ATIM(HIQ) Windows
23171 +#endif
23172 + //_enter_critical_bh(&psta_bmc->sleep_q.lock, &irqL);
23173 + _enter_critical_bh(&pxmitpriv->lock, &irqL);
23174
23175 - DBG_871X("%s\n", __FUNCTION__);
23176 + xmitframe_phead = get_list_head(&psta_bmc->sleep_q);
23177 + xmitframe_plist = get_next(xmitframe_phead);
23178
23179 - if(!pmlmeinfo->ERP_enable)
23180 - return;
23181 -
23182 + while ((rtw_end_of_queue_search(xmitframe_phead, xmitframe_plist)) == _FALSE)
23183 + {
23184 + pxmitframe = LIST_CONTAINOR(xmitframe_plist, struct xmit_frame, list);
23185
23186 -}
23187 + xmitframe_plist = get_next(xmitframe_plist);
23188
23189 -static void update_bcn_htcap_ie(_adapter *padapter)
23190 -{
23191 - DBG_871X("%s\n", __FUNCTION__);
23192 + rtw_list_delete(&pxmitframe->list);
23193
23194 -}
23195 + psta_bmc->sleepq_len--;
23196 + if(psta_bmc->sleepq_len>0)
23197 + pxmitframe->attrib.mdata = 1;
23198 + else
23199 + pxmitframe->attrib.mdata = 0;
23200
23201 -static void update_bcn_htinfo_ie(_adapter *padapter)
23202 -{
23203 - DBG_871X("%s\n", __FUNCTION__);
23204 + pxmitframe->attrib.triggered=1;
23205
23206 -}
23207 + pxmitframe->attrib.qsel = 0x11;//HIQ
23208
23209 -static void update_bcn_rsn_ie(_adapter *padapter)
23210 -{
23211 - DBG_871X("%s\n", __FUNCTION__);
23212 +#if 0
23213 + _exit_critical_bh(&psta_bmc->sleep_q.lock, &irqL);
23214 + if(rtw_hal_xmit(padapter, pxmitframe) == _TRUE)
23215 + {
23216 + rtw_os_xmit_complete(padapter, pxmitframe);
23217 + }
23218 + _enter_critical_bh(&psta_bmc->sleep_q.lock, &irqL);
23219
23220 -}
23221 +#endif
23222 + rtw_hal_xmitframe_enqueue(padapter, pxmitframe);
23223
23224 -static void update_bcn_wpa_ie(_adapter *padapter)
23225 -{
23226 - DBG_871X("%s\n", __FUNCTION__);
23227 + //pstapriv->tim_bitmap &= ~BIT(0);
23228 +
23229 + }
23230 +
23231 + //_exit_critical_bh(&psta_bmc->sleep_q.lock, &irqL);
23232 + _exit_critical_bh(&pxmitpriv->lock, &irqL);
23233
23234 -}
23235 + }
23236
23237 -static void update_bcn_wmm_ie(_adapter *padapter)
23238 -{
23239 - DBG_871X("%s\n", __FUNCTION__);
23240 + }
23241 +#endif
23242 +
23243 + return H2C_SUCCESS;
23244
23245 }
23246
23247 -static void update_bcn_wps_ie(_adapter *padapter)
23248 +void change_band_update_ie(_adapter *padapter, WLAN_BSSID_EX *pnetwork)
23249 {
23250 - int match;
23251 - u8 *pwps_ie=NULL, *pwps_ie_src, *premainder_ie, *pbackup_remainder_ie=NULL;
23252 - uint wps_ielen=0, wps_offset, remainder_ielen;
23253 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
23254 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
23255 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
23256 - WLAN_BSSID_EX *pnetwork = &(pmlmeinfo->network);
23257 - unsigned char *ie = pnetwork->IEs;
23258 - u32 ielen = pnetwork->IELength;
23259 -
23260 -
23261 - DBG_871X("%s\n", __FUNCTION__);
23262 + u8 network_type,rate_len, total_rate_len,remainder_rate_len;
23263 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
23264 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
23265 + u8 erpinfo=0x4;
23266
23267 - pwps_ie = rtw_get_wps_ie(ie+_FIXED_IE_LENGTH_, ielen-_FIXED_IE_LENGTH_, NULL, &wps_ielen);
23268 -
23269 - if(pwps_ie==NULL || wps_ielen==0)
23270 - return;
23271 + //DBG_871X("%s\n", __FUNCTION__);
23272
23273 - wps_offset = (uint)(pwps_ie-ie);
23274 + if(pmlmeext->cur_channel >= 36)
23275 + {
23276 + network_type = WIRELESS_11A;
23277 + total_rate_len = IEEE80211_NUM_OFDM_RATESLEN;
23278 + DBG_871X("%s(): change to 5G Band\n",__FUNCTION__);
23279 + rtw_remove_bcn_ie(padapter, pnetwork, _ERPINFO_IE_);
23280 + }
23281 + else
23282 + {
23283 + network_type = WIRELESS_11BG;
23284 + total_rate_len = IEEE80211_CCK_RATE_LEN+IEEE80211_NUM_OFDM_RATESLEN;
23285 + DBG_871X("%s(): change to 2.4G Band\n",__FUNCTION__);
23286 + rtw_add_bcn_ie(padapter, pnetwork, _ERPINFO_IE_, &erpinfo, 1);
23287 + }
23288
23289 - premainder_ie = pwps_ie + wps_ielen;
23290 + rtw_set_supported_rate(pnetwork->SupportedRates, network_type);
23291
23292 - remainder_ielen = ielen - wps_offset - wps_ielen;
23293 + UpdateBrateTbl(padapter, pnetwork->SupportedRates);
23294 + rtw_hal_set_hwreg(padapter, HW_VAR_BASIC_RATE, pnetwork->SupportedRates);
23295
23296 - if(remainder_ielen>0)
23297 + if(total_rate_len > 8)
23298 {
23299 - pbackup_remainder_ie = rtw_malloc(remainder_ielen);
23300 - if(pbackup_remainder_ie)
23301 - _rtw_memcpy(pbackup_remainder_ie, premainder_ie, remainder_ielen);
23302 + rate_len = 8;
23303 + remainder_rate_len = total_rate_len - 8;
23304 + }
23305 + else
23306 + {
23307 + rate_len = total_rate_len;
23308 + remainder_rate_len = 0;
23309 }
23310
23311 -
23312 - pwps_ie_src = pmlmepriv->wps_beacon_ie;
23313 - if(pwps_ie_src == NULL)
23314 - return;
23315 -
23316 + rtw_add_bcn_ie(padapter, pnetwork, _SUPPORTEDRATES_IE_, pnetwork->SupportedRates, rate_len);
23317
23318 - wps_ielen = (uint)pwps_ie_src[1];//to get ie data len
23319 - if((wps_offset+wps_ielen+2+remainder_ielen)<=MAX_IE_SZ)
23320 + if(remainder_rate_len)
23321 {
23322 - _rtw_memcpy(pwps_ie, pwps_ie_src, wps_ielen+2);
23323 - pwps_ie += (wps_ielen+2);
23324 + rtw_add_bcn_ie(padapter, pnetwork, _EXT_SUPPORTEDRATES_IE_, (pnetwork->SupportedRates+8), remainder_rate_len);
23325 + }
23326 + else
23327 + {
23328 + rtw_remove_bcn_ie(padapter, pnetwork, _EXT_SUPPORTEDRATES_IE_);
23329 + }
23330 +}
23331
23332 - if(pbackup_remainder_ie)
23333 - _rtw_memcpy(pwps_ie, pbackup_remainder_ie, remainder_ielen);
23334
23335 - //update IELength
23336 - pnetwork->IELength = wps_offset + (wps_ielen+2) + remainder_ielen;
23337 - }
23338 +#ifdef CONFIG_DUALMAC_CONCURRENT
23339 +void dc_SelectChannel(_adapter *padapter, unsigned char channel)
23340 +{
23341 + PADAPTER ptarget_adapter;
23342
23343 - if(pbackup_remainder_ie)
23344 - rtw_mfree(pbackup_remainder_ie, remainder_ielen);
23345 + if( (padapter->pbuddy_adapter != NULL) &&
23346 + (padapter->DualMacConcurrent == _TRUE) &&
23347 + (padapter->adapter_type == SECONDARY_ADAPTER))
23348 + {
23349 + // only mac0 could control BB&RF
23350 + ptarget_adapter = padapter->pbuddy_adapter;
23351 + }
23352 + else
23353 + {
23354 + ptarget_adapter = padapter;
23355 + }
23356
23357 -}
23358 + _enter_critical_mutex(&(adapter_to_dvobj(ptarget_adapter)->setch_mutex), NULL);
23359
23360 -static void update_bcn_p2p_ie(_adapter *padapter)
23361 -{
23362 + rtw_hal_set_chan(ptarget_adapter, channel);
23363
23364 + _exit_critical_mutex(&(adapter_to_dvobj(ptarget_adapter)->setch_mutex), NULL);
23365 }
23366
23367 -static void update_bcn_vendor_spec_ie(_adapter *padapter, u8*oui)
23368 +void dc_SetBWMode(_adapter *padapter, unsigned short bwmode, unsigned char channel_offset)
23369 {
23370 - DBG_871X("%s\n", __FUNCTION__);
23371 + PADAPTER ptarget_adapter;
23372
23373 - if(_rtw_memcmp(WPA_OUI, oui, 4))
23374 + if( (padapter->pbuddy_adapter != NULL) &&
23375 + (padapter->DualMacConcurrent == _TRUE) &&
23376 + (padapter->adapter_type == SECONDARY_ADAPTER))
23377 {
23378 - update_bcn_wpa_ie(padapter);
23379 + // only mac0 could control BB&RF
23380 + ptarget_adapter = padapter->pbuddy_adapter;
23381 }
23382 - else if(_rtw_memcmp(WMM_OUI, oui, 4))
23383 + else
23384 {
23385 - update_bcn_wmm_ie(padapter);
23386 + ptarget_adapter = padapter;
23387 }
23388 - else if(_rtw_memcmp(WPS_OUI, oui, 4))
23389 +
23390 + _enter_critical_mutex(&(adapter_to_dvobj(ptarget_adapter)->setbw_mutex), NULL);
23391 +
23392 + rtw_hal_set_bwmode(ptarget_adapter, (HT_CHANNEL_WIDTH)bwmode, channel_offset);
23393 +
23394 + _exit_critical_mutex(&(adapter_to_dvobj(ptarget_adapter)->setbw_mutex), NULL);
23395 +}
23396 +
23397 +void dc_set_channel_bwmode_disconnect(_adapter *padapter)
23398 +{
23399 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
23400 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
23401 + struct mlme_priv *pbuddy_mlmepriv = NULL;
23402 +
23403 + if(pbuddy_adapter != NULL &&
23404 + padapter->DualMacConcurrent == _TRUE)
23405 {
23406 - update_bcn_wps_ie(padapter);
23407 + pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
23408 + if((check_fwstate(pbuddy_mlmepriv, _FW_LINKED)) != _TRUE)
23409 + {
23410 + //switch to the 20M Hz mode after disconnect
23411 + pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
23412 + pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
23413 +
23414 + set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
23415 + }
23416 }
23417 - else if(_rtw_memcmp(P2P_OUI, oui, 4))
23418 + else
23419 {
23420 - update_bcn_p2p_ie(padapter);
23421 + //switch to the 20M Hz mode after disconnect
23422 + pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
23423 + pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
23424 +
23425 + set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
23426 }
23427 - else
23428 +}
23429 +
23430 +u8 dc_handle_join_request(_adapter *padapter)
23431 +{
23432 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
23433 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
23434 + WLAN_BSSID_EX *pnetwork = (WLAN_BSSID_EX*)(&(pmlmeinfo->network));
23435 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
23436 + struct mlme_ext_priv *pbuddy_mlmeext = NULL;
23437 + struct mlme_priv *pbuddy_mlmepriv = NULL;
23438 + u8 ret = _SUCCESS;
23439 +
23440 + if(pbuddy_adapter != NULL &&
23441 + padapter->DualMacConcurrent == _TRUE)
23442 {
23443 - DBG_871X("unknown OUI type!\n");
23444 - }
23445 -
23446 -
23447 + pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
23448 + pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
23449 +
23450 + if(pmlmeext->cur_channel != pbuddy_mlmeext->cur_channel ||
23451 + pmlmeext->cur_bwmode != pbuddy_mlmeext->cur_bwmode ||
23452 + pmlmeext->cur_ch_offset != pbuddy_mlmeext->cur_ch_offset)
23453 + {
23454 + if((check_fwstate(pbuddy_mlmepriv, WIFI_AP_STATE)) == _TRUE)
23455 + {
23456 + //issue deauth to all stas if if2 is at ap mode
23457 + rtw_sta_flush(pbuddy_adapter);
23458 +
23459 + //rtw_hal_set_hwreg(padapter, HW_VAR_CHECK_TXBUF, 0);
23460 + rtw_hal_set_hwreg(pbuddy_adapter, HW_VAR_CHECK_TXBUF, 0);
23461 + }
23462 + else if(check_fwstate(pbuddy_mlmepriv, _FW_LINKED) == _TRUE)
23463 + {
23464 + if(pmlmeext->cur_channel == pbuddy_mlmeext->cur_channel)
23465 + {
23466 + // HT_CHANNEL_WIDTH_40 or HT_CHANNEL_WIDTH_20 but channel offset is different
23467 + if((pmlmeext->cur_bwmode == pbuddy_mlmeext->cur_bwmode) &&
23468 + (pmlmeext->cur_ch_offset != pbuddy_mlmeext->cur_ch_offset) )
23469 + {
23470 + report_join_res(padapter, -4);
23471 + ret = _FAIL;
23472 + }
23473 + }
23474 + else
23475 + {
23476 + report_join_res(padapter, -4);
23477 + ret = _FAIL;
23478 + }
23479 + }
23480 + }
23481 + else if (is_client_associated_to_ap(pbuddy_adapter) == _TRUE)
23482 + {
23483 + issue_nulldata(pbuddy_adapter, NULL, 1, 0, 0);
23484 + }
23485 + }
23486 +
23487 + return ret;
23488 }
23489
23490 -void update_beacon(_adapter *padapter, u8 ie_id, u8 *oui, u8 tx)
23491 +void dc_handle_join_done(_adapter *padapter, u8 join_res)
23492 {
23493 - _irqL irqL;
23494 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
23495 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
23496 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
23497 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
23498 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
23499 + struct mlme_priv *pbuddy_mlmepriv = NULL;
23500 + struct mlme_ext_priv *pbuddy_mlmeext = NULL;
23501 + struct mlme_ext_info *pbuddy_mlmeinfo = NULL;
23502 + WLAN_BSSID_EX *pbuddy_network_mlmeext = NULL;
23503 + u8 change_band = _FALSE;
23504 +
23505 +
23506 + if(pbuddy_adapter != NULL &&
23507 + padapter->DualMacConcurrent == _TRUE)
23508 + {
23509 + pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
23510 + pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
23511 + pbuddy_mlmeinfo = &(pbuddy_mlmeext->mlmext_info);
23512 + pbuddy_network_mlmeext = &(pbuddy_mlmeinfo->network);
23513
23514 - //DBG_871X("%s\n", __FUNCTION__);
23515 + if(((pbuddy_mlmeinfo->state&0x03) == WIFI_FW_AP_STATE) &&
23516 + check_fwstate(pbuddy_mlmepriv, _FW_LINKED))
23517 + {
23518 + //restart and update beacon
23519 + DBG_871X("after join, current adapter, CH=%d, BW=%d, offset=%d\n", pmlmeext->cur_channel, pmlmeext->cur_bwmode, pmlmeext->cur_ch_offset);
23520
23521 - if(_FALSE == pmlmeext->bstart_bss)
23522 - return;
23523 + if(join_res >= 0)
23524 + {
23525 + u8 *p;
23526 + int ie_len;
23527 + struct HT_info_element *pht_info=NULL;
23528
23529 - _enter_critical_bh(&pmlmepriv->bcn_update_lock, &irqL);
23530 + if((pbuddy_mlmeext->cur_channel <= 14 && pmlmeext->cur_channel >= 36) ||
23531 + (pbuddy_mlmeext->cur_channel >= 36 && pmlmeext->cur_channel <= 14))
23532 + {
23533 + change_band = _TRUE;
23534 + }
23535
23536 - switch(ie_id)
23537 - {
23538 - case 0xFF:
23539 + //sync channel/bwmode/ch_offset with another adapter
23540 + pbuddy_mlmeext->cur_channel = pmlmeext->cur_channel;
23541 +
23542 + if(pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40)
23543 + {
23544 + p = rtw_get_ie((pbuddy_network_mlmeext->IEs + sizeof(NDIS_802_11_FIXED_IEs)), _HT_ADD_INFO_IE_, &ie_len, (pbuddy_network_mlmeext->IELength - sizeof(NDIS_802_11_FIXED_IEs)));
23545 + if( p && ie_len)
23546 + {
23547 + pht_info = (struct HT_info_element *)(p+2);
23548 + pht_info->infos[0] &= ~(BIT(0)|BIT(1)); //no secondary channel is present
23549 + }
23550 +
23551 + if(pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40)
23552 + {
23553 + pbuddy_mlmeext->cur_ch_offset = pmlmeext->cur_ch_offset;
23554
23555 - update_bcn_fixed_ie(padapter);//8: TimeStamp, 2: Beacon Interval 2:Capability
23556 -
23557 - break;
23558 -
23559 - case _TIM_IE_:
23560 -
23561 - update_BCNTIM(padapter);
23562 -
23563 - break;
23564 + //to update cur_ch_offset value in beacon
23565 + if( pht_info )
23566 + {
23567 + switch(pmlmeext->cur_ch_offset)
23568 + {
23569 + case HAL_PRIME_CHNL_OFFSET_LOWER:
23570 + pht_info->infos[0] |= 0x1;
23571 + break;
23572 + case HAL_PRIME_CHNL_OFFSET_UPPER:
23573 + pht_info->infos[0] |= 0x3;
23574 + break;
23575 + case HAL_PRIME_CHNL_OFFSET_DONT_CARE:
23576 + default:
23577 + break;
23578 + }
23579 + }
23580 + }
23581 + else if(pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_20)
23582 + {
23583 + pbuddy_mlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
23584 + pbuddy_mlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
23585
23586 - case _ERPINFO_IE_:
23587 + if(pmlmeext->cur_channel>0 && pmlmeext->cur_channel<5)
23588 + {
23589 + if(pht_info)
23590 + pht_info->infos[0] |= 0x1;
23591
23592 - update_bcn_erpinfo_ie(padapter);
23593 + pbuddy_mlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40;
23594 + pbuddy_mlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
23595 + }
23596
23597 - break;
23598 + if(pmlmeext->cur_channel>7 && pmlmeext->cur_channel<(14+1))
23599 + {
23600 + if(pht_info)
23601 + pht_info->infos[0] |= 0x3;
23602
23603 - case _HT_CAPABILITY_IE_:
23604 + pbuddy_mlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40;
23605 + pbuddy_mlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
23606 + }
23607
23608 - update_bcn_htcap_ie(padapter);
23609 -
23610 - break;
23611 + set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
23612 + }
23613 + }
23614
23615 - case _RSN_IE_2_:
23616 + // to update channel value in beacon
23617 + pbuddy_network_mlmeext->Configuration.DSConfig = pmlmeext->cur_channel;
23618 + p = rtw_get_ie((pbuddy_network_mlmeext->IEs + sizeof(NDIS_802_11_FIXED_IEs)), _DSSET_IE_, &ie_len, (pbuddy_network_mlmeext->IELength - sizeof(NDIS_802_11_FIXED_IEs)));
23619 + if(p && ie_len>0)
23620 + *(p + 2) = pmlmeext->cur_channel;
23621
23622 - update_bcn_rsn_ie(padapter);
23623 + p = rtw_get_ie((pbuddy_network_mlmeext->IEs + sizeof(NDIS_802_11_FIXED_IEs)), _HT_ADD_INFO_IE_, &ie_len, (pbuddy_network_mlmeext->IELength - sizeof(NDIS_802_11_FIXED_IEs)));
23624 + if( p && ie_len)
23625 + {
23626 + pht_info = (struct HT_info_element *)(p+2);
23627 + pht_info->primary_channel = pmlmeext->cur_channel;
23628 + }
23629
23630 - break;
23631 -
23632 - case _HT_ADD_INFO_IE_:
23633 + // update mlmepriv's cur_network
23634 + _rtw_memcpy(&pbuddy_mlmepriv->cur_network.network, pbuddy_network_mlmeext, pbuddy_network_mlmeext->Length);
23635 + }
23636 + else
23637 + {
23638 + // switch back to original channel/bwmode/ch_offset;
23639 + set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
23640 + }
23641
23642 - update_bcn_htinfo_ie(padapter);
23643 -
23644 - break;
23645 -
23646 - case _VENDOR_SPECIFIC_IE_:
23647 + DBG_871X("after join, another adapter, CH=%d, BW=%d, offset=%d\n", pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_bwmode, pbuddy_mlmeext->cur_ch_offset);
23648
23649 - update_bcn_vendor_spec_ie(padapter, oui);
23650 -
23651 - break;
23652 -
23653 - default:
23654 - break;
23655 - }
23656 + if(change_band == _TRUE)
23657 + change_band_update_ie(pbuddy_adapter, pbuddy_network_mlmeext);
23658
23659 - pmlmepriv->update_bcn = _TRUE;
23660 -
23661 - _exit_critical_bh(&pmlmepriv->bcn_update_lock, &irqL);
23662 + DBG_871X("update pbuddy_adapter's beacon\n");
23663
23664 -#ifdef CONFIG_USB_HCI
23665 - if(tx)
23666 - {
23667 - //send_beacon(padapter);//send_beacon must execute on TSR level
23668 - set_tx_beacon_cmd(padapter);
23669 - }
23670 -#else
23671 - {
23672 - //PCI will issue beacon when BCN interrupt occurs.
23673 + update_beacon(pbuddy_adapter, 0, NULL, _TRUE);
23674 + }
23675 + else if (is_client_associated_to_ap(pbuddy_adapter) == _TRUE)
23676 + {
23677 + if((pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40) &&
23678 + (pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_20))
23679 + {
23680 + set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
23681 + }
23682 +
23683 + issue_nulldata(pbuddy_adapter, NULL, 0, 0, 0);
23684 + }
23685 }
23686 -#endif
23687 -
23688 }
23689
23690 -#ifdef CONFIG_80211N_HT
23691 -
23692 -/*
23693 -op_mode
23694 -Set to 0 (HT pure) under the followign conditions
23695 - - all STAs in the BSS are 20/40 MHz HT in 20/40 MHz BSS or
23696 - - all STAs in the BSS are 20 MHz HT in 20 MHz BSS
23697 -Set to 1 (HT non-member protection) if there may be non-HT STAs
23698 - in both the primary and the secondary channel
23699 -Set to 2 if only HT STAs are associated in BSS,
23700 - however and at least one 20 MHz HT STA is associated
23701 -Set to 3 (HT mixed mode) when one or more non-HT STAs are associated
23702 - (currently non-GF HT station is considered as non-HT STA also)
23703 -*/
23704 -static int rtw_ht_operation_update(_adapter *padapter)
23705 +sint dc_check_fwstate(_adapter *padapter, sint fw_state)
23706 {
23707 - u16 cur_op_mode, new_op_mode;
23708 - int op_mode_changes = 0;
23709 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
23710 - struct ht_priv *phtpriv_ap = &pmlmepriv->htpriv;
23711 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
23712 + struct mlme_priv *pbuddy_mlmepriv = NULL;
23713
23714 - if(pmlmepriv->htpriv.ht_option == _TRUE)
23715 - return 0;
23716 -
23717 - //if (!iface->conf->ieee80211n || iface->conf->ht_op_mode_fixed)
23718 - // return 0;
23719 + if(padapter->pbuddy_adapter != NULL &&
23720 + padapter->DualMacConcurrent == _TRUE)
23721
23722 - DBG_871X("%s current operation mode=0x%X\n",
23723 - __FUNCTION__, pmlmepriv->ht_op_mode);
23724 -
23725 - if (!(pmlmepriv->ht_op_mode & HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT)
23726 - && pmlmepriv->num_sta_ht_no_gf) {
23727 - pmlmepriv->ht_op_mode |=
23728 - HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT;
23729 - op_mode_changes++;
23730 - } else if ((pmlmepriv->ht_op_mode &
23731 - HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT) &&
23732 - pmlmepriv->num_sta_ht_no_gf == 0) {
23733 - pmlmepriv->ht_op_mode &=
23734 - ~HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT;
23735 - op_mode_changes++;
23736 - }
23737 -
23738 - if (!(pmlmepriv->ht_op_mode & HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT) &&
23739 - (pmlmepriv->num_sta_no_ht || pmlmepriv->olbc_ht)) {
23740 - pmlmepriv->ht_op_mode |= HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT;
23741 - op_mode_changes++;
23742 - } else if ((pmlmepriv->ht_op_mode &
23743 - HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT) &&
23744 - (pmlmepriv->num_sta_no_ht == 0 && !pmlmepriv->olbc_ht)) {
23745 - pmlmepriv->ht_op_mode &=
23746 - ~HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT;
23747 - op_mode_changes++;
23748 - }
23749 -
23750 - /* Note: currently we switch to the MIXED op mode if HT non-greenfield
23751 - * station is associated. Probably it's a theoretical case, since
23752 - * it looks like all known HT STAs support greenfield.
23753 - */
23754 - new_op_mode = 0;
23755 - if (pmlmepriv->num_sta_no_ht ||
23756 - (pmlmepriv->ht_op_mode & HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT))
23757 - new_op_mode = OP_MODE_MIXED;
23758 - else if ((phtpriv_ap->ht_cap.cap_info & IEEE80211_HT_CAP_SUP_WIDTH)
23759 - && pmlmepriv->num_sta_ht_20mhz)
23760 - new_op_mode = OP_MODE_20MHZ_HT_STA_ASSOCED;
23761 - else if (pmlmepriv->olbc_ht)
23762 - new_op_mode = OP_MODE_MAY_BE_LEGACY_STAS;
23763 - else
23764 - new_op_mode = OP_MODE_PURE;
23765 -
23766 - cur_op_mode = pmlmepriv->ht_op_mode & HT_INFO_OPERATION_MODE_OP_MODE_MASK;
23767 - if (cur_op_mode != new_op_mode) {
23768 - pmlmepriv->ht_op_mode &= ~HT_INFO_OPERATION_MODE_OP_MODE_MASK;
23769 - pmlmepriv->ht_op_mode |= new_op_mode;
23770 - op_mode_changes++;
23771 - }
23772 + {
23773 + pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
23774
23775 - DBG_871X("%s new operation mode=0x%X changes=%d\n",
23776 - __FUNCTION__, pmlmepriv->ht_op_mode, op_mode_changes);
23777 + return check_fwstate(pbuddy_mlmepriv, fw_state);
23778 + }
23779
23780 - return op_mode_changes;
23781 -
23782 + return _FALSE;
23783 }
23784
23785 -#endif /* CONFIG_80211N_HT */
23786 -
23787 -/* called > TSR LEVEL for USB or SDIO Interface*/
23788 -void bss_cap_update(_adapter *padapter, struct sta_info *psta)
23789 +u8 dc_handle_site_survey(_adapter *padapter)
23790 {
23791 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
23792 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
23793 -
23794 -#if 0
23795 - if (psta->flags & WLAN_STA_NONERP && !psta->nonerp_set) {
23796 - psta->nonerp_set = 1;
23797 - pmlmepriv->num_sta_non_erp++;
23798 - if (pmlmepriv->num_sta_non_erp == 1)
23799 - ieee802_11_set_beacons(hapd->iface);
23800 - }
23801 -#endif
23802 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
23803 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
23804 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
23805
23806 - if(psta->flags & WLAN_STA_NONERP)
23807 + // only mac0 can do scan request, help issue nulldata(1) for mac1
23808 + if(pbuddy_adapter != NULL &&
23809 + padapter->DualMacConcurrent == _TRUE)
23810 {
23811 - if(!psta->nonerp_set)
23812 + if (is_client_associated_to_ap(pbuddy_adapter) == _TRUE)
23813 {
23814 - psta->nonerp_set = 1;
23815 -
23816 - pmlmepriv->num_sta_non_erp++;
23817 -
23818 - if (pmlmepriv->num_sta_non_erp == 1)
23819 - update_beacon(padapter, _ERPINFO_IE_, NULL, _TRUE);
23820 - }
23821 + pmlmeext->sitesurvey_res.state = SCAN_TXNULL;
23822
23823 - }
23824 - else
23825 - {
23826 - if(psta->nonerp_set)
23827 - {
23828 - psta->nonerp_set = 0;
23829 -
23830 - pmlmepriv->num_sta_non_erp--;
23831 -
23832 - if (pmlmepriv->num_sta_non_erp == 0)
23833 - update_beacon(padapter, _ERPINFO_IE_, NULL, _TRUE);
23834 + issue_nulldata(pbuddy_adapter, NULL, 1, 2, 0);
23835 +
23836 + return _TRUE;
23837 }
23838 -
23839 }
23840
23841 + return _FALSE;
23842 +}
23843
23844 -#if 0
23845 - if (!(psta->capability & WLAN_CAPABILITY_SHORT_SLOT) &&
23846 - !psta->no_short_slot_time_set) {
23847 - psta->no_short_slot_time_set = 1;
23848 - pmlmepriv->num_sta_no_short_slot_time++;
23849 - if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
23850 - (pmlmepriv->num_sta_no_short_slot_time == 1))
23851 - ieee802_11_set_beacons(hapd->iface);
23852 +void dc_report_survey_event(_adapter *padapter, union recv_frame *precv_frame)
23853 +{
23854 + if(padapter->pbuddy_adapter != NULL &&
23855 + padapter->DualMacConcurrent == _TRUE)
23856 + {
23857 + report_survey_event(padapter->pbuddy_adapter, precv_frame);
23858 }
23859 -#endif
23860 +}
23861
23862 - if(!(psta->capability & WLAN_CAPABILITY_SHORT_SLOT))
23863 - {
23864 - if(!psta->no_short_slot_time_set)
23865 - {
23866 - psta->no_short_slot_time_set = 1;
23867 -
23868 - pmlmepriv->num_sta_no_short_slot_time++;
23869 -
23870 - if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
23871 - (pmlmepriv->num_sta_no_short_slot_time == 1))
23872 - update_beacon(padapter, 0xFF, NULL, _TRUE);
23873 -
23874 +void dc_set_channel_bwmode_survey_done(_adapter *padapter)
23875 +{
23876 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
23877 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
23878 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
23879 + struct mlme_priv *pbuddy_mlmepriv = NULL;
23880 + struct mlme_ext_priv *pbuddy_mlmeext = NULL;
23881 + struct mlme_ext_info *pbuddy_mlmeinfo = NULL;
23882 + u8 cur_channel;
23883 + u8 cur_bwmode;
23884 + u8 cur_ch_offset;
23885 +
23886 + if(pbuddy_adapter != NULL &&
23887 + padapter->DualMacConcurrent == _TRUE)
23888 + {
23889 + pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
23890 + pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
23891 + pbuddy_mlmeinfo = &(pbuddy_mlmeext->mlmext_info);
23892 +
23893 + if(check_fwstate(pbuddy_mlmepriv, _FW_LINKED))
23894 + {
23895 + if(check_fwstate(pmlmepriv, _FW_LINKED) &&
23896 + (pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40))
23897 + {
23898 + cur_channel = pmlmeext->cur_channel;
23899 + cur_bwmode = pmlmeext->cur_bwmode;
23900 + cur_ch_offset = pmlmeext->cur_ch_offset;
23901 + }
23902 + else
23903 + {
23904 + cur_channel = pbuddy_mlmeext->cur_channel;
23905 + cur_bwmode = pbuddy_mlmeext->cur_bwmode;
23906 + cur_ch_offset = pbuddy_mlmeext->cur_ch_offset;
23907 + }
23908 }
23909 - }
23910 - else
23911 - {
23912 - if(psta->no_short_slot_time_set)
23913 + else
23914 {
23915 - psta->no_short_slot_time_set = 0;
23916 -
23917 - pmlmepriv->num_sta_no_short_slot_time--;
23918 -
23919 - if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
23920 - (pmlmepriv->num_sta_no_short_slot_time == 0))
23921 - update_beacon(padapter, 0xFF, NULL, _TRUE);
23922 + cur_channel = pmlmeext->cur_channel;
23923 + cur_bwmode = pmlmeext->cur_bwmode;
23924 + cur_ch_offset = pmlmeext->cur_ch_offset;
23925 }
23926 - }
23927 -
23928 -
23929 -#if 0
23930 - if (!(psta->capability & WLAN_CAPABILITY_SHORT_PREAMBLE) &&
23931 - !psta->no_short_preamble_set) {
23932 - psta->no_short_preamble_set = 1;
23933 - pmlmepriv->num_sta_no_short_preamble++;
23934 - if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
23935 - (pmlmepriv->num_sta_no_short_preamble == 1))
23936 - ieee802_11_set_beacons(hapd->iface);
23937 - }
23938 -#endif
23939
23940 + set_channel_bwmode(padapter, cur_channel, cur_ch_offset, cur_bwmode);
23941
23942 - if(!(psta->flags & WLAN_STA_SHORT_PREAMBLE))
23943 - {
23944 - if(!psta->no_short_preamble_set)
23945 + if (is_client_associated_to_ap(pbuddy_adapter) == _TRUE)
23946 {
23947 - psta->no_short_preamble_set = 1;
23948 -
23949 - pmlmepriv->num_sta_no_short_preamble++;
23950 -
23951 - if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
23952 - (pmlmepriv->num_sta_no_short_preamble == 1))
23953 - update_beacon(padapter, 0xFF, NULL, _TRUE);
23954 -
23955 + //issue null data
23956 + issue_nulldata(pbuddy_adapter, NULL, 0, 0, 0);
23957 + }
23958 +
23959 + if(((pbuddy_mlmeinfo->state&0x03) == WIFI_FW_AP_STATE) &&
23960 + check_fwstate(pbuddy_mlmepriv, _FW_LINKED))
23961 + {
23962 +
23963 + DBG_871X("survey done, current CH=%d, BW=%d, offset=%d\n", cur_channel, cur_bwmode, cur_ch_offset);
23964 +
23965 + DBG_871X("restart pbuddy_adapter's beacon\n");
23966 +
23967 + update_beacon(pbuddy_adapter, 0, NULL, _TRUE);
23968 }
23969 }
23970 else
23971 {
23972 - if(psta->no_short_preamble_set)
23973 - {
23974 - psta->no_short_preamble_set = 0;
23975 -
23976 - pmlmepriv->num_sta_no_short_preamble--;
23977 -
23978 - if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
23979 - (pmlmepriv->num_sta_no_short_preamble == 0))
23980 - update_beacon(padapter, 0xFF, NULL, _TRUE);
23981 -
23982 - }
23983 + set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
23984 }
23985 +}
23986
23987 +void dc_set_ap_channel_bandwidth(_adapter *padapter, u8 channel, u8 channel_offset, u8 bwmode)
23988 +{
23989 + u8 *p;
23990 + u8 val8, cur_channel, cur_bwmode, cur_ch_offset, change_band;
23991 + int ie_len;
23992 + struct registry_priv *pregpriv = &padapter->registrypriv;
23993 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
23994 + WLAN_BSSID_EX *pnetwork = (WLAN_BSSID_EX *)&pmlmepriv->cur_network.network;
23995 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
23996 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
23997 + struct HT_info_element *pht_info=NULL;
23998 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
23999 + struct mlme_priv *pbuddy_mlmepriv = NULL;
24000 + struct mlme_ext_priv *pbuddy_mlmeext = NULL;
24001 +
24002 + DBG_871X("dualmac_concurrent_ap_set_channel_bwmode ==>\n");
24003 +
24004 + cur_channel = channel;
24005 + cur_bwmode = bwmode;
24006 + cur_ch_offset = channel_offset;
24007 + change_band = _FALSE;
24008
24009 -#ifdef CONFIG_80211N_HT
24010 -
24011 - if (psta->flags & WLAN_STA_HT)
24012 + p = rtw_get_ie((pnetwork->IEs + sizeof(NDIS_802_11_FIXED_IEs)), _HT_ADD_INFO_IE_, &ie_len, (pnetwork->IELength - sizeof(NDIS_802_11_FIXED_IEs)));
24013 + if( p && ie_len)
24014 {
24015 - u16 ht_capab = le16_to_cpu(psta->htpriv.ht_cap.cap_info);
24016 -
24017 - DBG_871X("HT: STA " MAC_FMT " HT Capabilities "
24018 - "Info: 0x%04x\n", MAC_ARG(psta->hwaddr), ht_capab);
24019 + pht_info = (struct HT_info_element *)(p+2);
24020 + }
24021
24022 - if (psta->no_ht_set) {
24023 - psta->no_ht_set = 0;
24024 - pmlmepriv->num_sta_no_ht--;
24025 - }
24026 -
24027 - if ((ht_capab & IEEE80211_HT_CAP_GRN_FLD) == 0) {
24028 - if (!psta->no_ht_gf_set) {
24029 - psta->no_ht_gf_set = 1;
24030 - pmlmepriv->num_sta_ht_no_gf++;
24031 - }
24032 - DBG_871X("%s STA " MAC_FMT " - no "
24033 - "greenfield, num of non-gf stations %d\n",
24034 - __FUNCTION__, MAC_ARG(psta->hwaddr),
24035 - pmlmepriv->num_sta_ht_no_gf);
24036 - }
24037 -
24038 - if ((ht_capab & IEEE80211_HT_CAP_SUP_WIDTH) == 0) {
24039 - if (!psta->ht_20mhz_set) {
24040 - psta->ht_20mhz_set = 1;
24041 - pmlmepriv->num_sta_ht_20mhz++;
24042 - }
24043 - DBG_871X("%s STA " MAC_FMT " - 20 MHz HT, "
24044 - "num of 20MHz HT STAs %d\n",
24045 - __FUNCTION__, MAC_ARG(psta->hwaddr),
24046 - pmlmepriv->num_sta_ht_20mhz);
24047 - }
24048 -
24049 - }
24050 - else
24051 + if(pbuddy_adapter != NULL &&
24052 + padapter->DualMacConcurrent == _TRUE)
24053 {
24054 - if (!psta->no_ht_set) {
24055 - psta->no_ht_set = 1;
24056 - pmlmepriv->num_sta_no_ht++;
24057 - }
24058 - if(pmlmepriv->htpriv.ht_option == _TRUE) {
24059 - DBG_871X("%s STA " MAC_FMT
24060 - " - no HT, num of non-HT stations %d\n",
24061 - __FUNCTION__, MAC_ARG(psta->hwaddr),
24062 - pmlmepriv->num_sta_no_ht);
24063 + pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
24064 + pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
24065 +
24066 + if(!check_fwstate(pbuddy_mlmepriv, _FW_LINKED|_FW_UNDER_LINKING|_FW_UNDER_SURVEY))
24067 + {
24068 + set_channel_bwmode(padapter, cur_channel, cur_ch_offset, cur_bwmode);
24069 }
24070 - }
24071 + else if(check_fwstate(pbuddy_mlmepriv, _FW_LINKED)==_TRUE)
24072 + {
24073 + //To sync cur_channel/cur_bwmode/cur_ch_offset with another adapter
24074 + DBG_871X("Another iface is at linked state, sync cur_channel/cur_bwmode/cur_ch_offset\n");
24075 + DBG_871X("Another adapter, CH=%d, BW=%d, offset=%d\n", pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_bwmode, pbuddy_mlmeext->cur_ch_offset);
24076 + DBG_871X("Current adapter, CH=%d, BW=%d, offset=%d\n", cur_channel, cur_bwmode, cur_ch_offset);
24077 +
24078 + cur_channel = pbuddy_mlmeext->cur_channel;
24079 + if(cur_bwmode == HT_CHANNEL_WIDTH_40)
24080 + {
24081 + if(pht_info)
24082 + pht_info->infos[0] &= ~(BIT(0)|BIT(1));
24083 +
24084 + if(pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40)
24085 + {
24086 + cur_ch_offset = pbuddy_mlmeext->cur_ch_offset;
24087
24088 - if (rtw_ht_operation_update(padapter) > 0)
24089 - {
24090 - update_beacon(padapter, _HT_CAPABILITY_IE_, NULL, _FALSE);
24091 - update_beacon(padapter, _HT_ADD_INFO_IE_, NULL, _TRUE);
24092 - }
24093 -
24094 -#endif /* CONFIG_80211N_HT */
24095 + //to update cur_ch_offset value in beacon
24096 + if(pht_info)
24097 + {
24098 + switch(cur_ch_offset)
24099 + {
24100 + case HAL_PRIME_CHNL_OFFSET_LOWER:
24101 + pht_info->infos[0] |= 0x1;
24102 + break;
24103 + case HAL_PRIME_CHNL_OFFSET_UPPER:
24104 + pht_info->infos[0] |= 0x3;
24105 + break;
24106 + case HAL_PRIME_CHNL_OFFSET_DONT_CARE:
24107 + default:
24108 + break;
24109 + }
24110 + }
24111 + }
24112 + else if(pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_20)
24113 + {
24114 + cur_bwmode = HT_CHANNEL_WIDTH_20;
24115 + cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
24116
24117 -}
24118 + if(cur_channel>0 && cur_channel<5)
24119 + {
24120 + if(pht_info)
24121 + pht_info->infos[0] |= 0x1;
24122
24123 -void ap_free_sta(_adapter *padapter, struct sta_info *psta)
24124 -{
24125 - _irqL irqL;
24126 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
24127 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
24128 - struct sta_priv *pstapriv = &padapter->stapriv;
24129 + cur_bwmode = HT_CHANNEL_WIDTH_40;
24130 + cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
24131 + }
24132
24133 - if(!psta)
24134 - return;
24135 + if(cur_channel>7 && cur_channel<(14+1))
24136 + {
24137 + if(pht_info)
24138 + pht_info->infos[0] |= 0x3;
24139
24140 + cur_bwmode = HT_CHANNEL_WIDTH_40;
24141 + cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
24142 + }
24143
24144 - if (psta->nonerp_set) {
24145 - psta->nonerp_set = 0;
24146 - pmlmepriv->num_sta_non_erp--;
24147 - if (pmlmepriv->num_sta_non_erp == 0)
24148 - update_beacon(padapter, _ERPINFO_IE_, NULL, _TRUE);
24149 - }
24150 -
24151 - if (psta->no_short_slot_time_set) {
24152 - psta->no_short_slot_time_set = 0;
24153 - pmlmepriv->num_sta_no_short_slot_time--;
24154 - if (pmlmeext->cur_wireless_mode > WIRELESS_11B
24155 - && pmlmepriv->num_sta_no_short_slot_time == 0)
24156 - update_beacon(padapter, 0xFF, NULL, _TRUE);
24157 - }
24158 -
24159 - if (psta->no_short_preamble_set) {
24160 - psta->no_short_preamble_set = 0;
24161 - pmlmepriv->num_sta_no_short_preamble--;
24162 - if (pmlmeext->cur_wireless_mode > WIRELESS_11B
24163 - && pmlmepriv->num_sta_no_short_preamble == 0)
24164 - update_beacon(padapter, 0xFF, NULL, _TRUE);
24165 - }
24166 -
24167 -#ifdef CONFIG_80211N_HT
24168 + set_channel_bwmode(padapter, cur_channel, cur_ch_offset, cur_bwmode);
24169 + }
24170 + }
24171
24172 - if (psta->no_ht_gf_set) {
24173 - psta->no_ht_gf_set = 0;
24174 - pmlmepriv->num_sta_ht_no_gf--;
24175 - }
24176 + // to update channel value in beacon
24177 + pnetwork->Configuration.DSConfig = cur_channel;
24178 + p = rtw_get_ie((pnetwork->IEs + sizeof(NDIS_802_11_FIXED_IEs)), _DSSET_IE_, &ie_len, (pnetwork->IELength - sizeof(NDIS_802_11_FIXED_IEs)));
24179 + if(p && ie_len>0)
24180 + *(p + 2) = cur_channel;
24181
24182 - if (psta->no_ht_set) {
24183 - psta->no_ht_set = 0;
24184 - pmlmepriv->num_sta_no_ht--;
24185 + if(pht_info)
24186 + pht_info->primary_channel = cur_channel;
24187 + }
24188 }
24189 -
24190 - if (psta->ht_20mhz_set) {
24191 - psta->ht_20mhz_set = 0;
24192 - pmlmepriv->num_sta_ht_20mhz--;
24193 + else
24194 + {
24195 + set_channel_bwmode(padapter, cur_channel, cur_ch_offset, cur_bwmode);
24196 }
24197
24198 - if (rtw_ht_operation_update(padapter) > 0)
24199 + DBG_871X("CH=%d, BW=%d, offset=%d\n", cur_channel, cur_bwmode, cur_ch_offset);
24200 +
24201 + if((channel <= 14 && cur_channel >= 36) ||
24202 + (channel >= 36 && cur_channel <= 14))
24203 {
24204 - update_beacon(padapter, _HT_CAPABILITY_IE_, NULL, _FALSE);
24205 - update_beacon(padapter, _HT_ADD_INFO_IE_, NULL, _TRUE);
24206 + change_band = _TRUE;
24207 }
24208 -
24209 -#endif /* CONFIG_80211N_HT */
24210 -
24211 -
24212 - //tear down Rx AMPDU
24213 - send_delba(padapter, 0, psta->hwaddr);// recipient
24214 -
24215 - //tear down TX AMPDU
24216 - send_delba(padapter, 1, psta->hwaddr);// // originator
24217 - psta->htpriv.agg_enable_bitmap = 0x0;//reset
24218 - psta->htpriv.candidate_tid_bitmap = 0x0;//reset
24219 -
24220
24221 - issue_deauth(padapter, psta->hwaddr, WLAN_REASON_DEAUTH_LEAVING);
24222 + pmlmeext->cur_channel = cur_channel;
24223 + pmlmeext->cur_bwmode = cur_bwmode;
24224 + pmlmeext->cur_ch_offset = cur_ch_offset;
24225
24226 - //report_del_sta_event(padapter, psta->hwaddr, WLAN_REASON_DEAUTH_LEAVING);
24227 + if(change_band == _TRUE)
24228 + change_band_update_ie(padapter, pnetwork);
24229
24230 - //clear key
24231 - //clear_cam_entry(padapter, (psta->mac_id + 3));
24232 + DBG_871X("dualmac_concurrent_ap_set_channel_bwmode <==\n");
24233 +}
24234
24235 +void dc_resume_xmit(_adapter *padapter)
24236 +{
24237 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
24238 +
24239 + if(pbuddy_adapter != NULL &&
24240 + padapter->DualMacConcurrent == _TRUE)
24241 {
24242 - #ifdef CONFIG_IOCTL_CFG80211
24243 - struct wireless_dev *pwdev = padapter->rtw_wdev;
24244 + DBG_871X("dc_resume_xmit, resume pbuddy_adapter Tx\n");
24245 + rtw_os_xmit_schedule(pbuddy_adapter);
24246 + }
24247 +}
24248 +
24249 +u8 dc_check_xmit(_adapter *padapter)
24250 +{
24251 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
24252 + struct mlme_priv *pbuddy_mlmepriv = NULL;
24253
24254 - if(pwdev->iftype == NL80211_IFTYPE_AP) {
24255 - #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
24256 - rtw_cfg80211_indicate_sta_disassoc(padapter, psta->hwaddr, WLAN_REASON_DEAUTH_LEAVING);
24257 - #else //(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
24258 - report_del_sta_event(padapter, psta->hwaddr, WLAN_REASON_DEAUTH_LEAVING);
24259 - #endif //(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
24260 - } else
24261 - #endif //CONFIG_IOCTL_CFG80211
24262 + if(pbuddy_adapter != NULL &&
24263 + padapter->DualMacConcurrent == _TRUE)
24264 + {
24265 + pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
24266 + if (check_fwstate(pbuddy_mlmepriv, _FW_UNDER_SURVEY|_FW_UNDER_LINKING) == _TRUE)
24267 {
24268 - rtw_indicate_sta_disassoc_event(padapter, psta);
24269 + DBG_871X("dc_check_xmit pbuddy_adapter is under survey or under linking\n");
24270 + return _FALSE;
24271 }
24272 }
24273
24274 - _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
24275 - rtw_free_stainfo(padapter, psta);
24276 - _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
24277 -
24278 -
24279 + return _TRUE;
24280 }
24281 +#endif
24282
24283 -int rtw_sta_flush(_adapter *padapter)
24284 +#ifdef CONFIG_CONCURRENT_MODE
24285 +sint check_buddy_mlmeinfo_state(_adapter *padapter, u32 state)
24286 {
24287 - _irqL irqL;
24288 - _list *phead, *plist;
24289 - int ret=0;
24290 - struct sta_info *psta = NULL;
24291 - struct sta_priv *pstapriv = &padapter->stapriv;
24292 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
24293 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
24294 - u8 bc_addr[ETH_ALEN] = {0xff,0xff,0xff,0xff,0xff,0xff};
24295 -
24296 - DBG_871X("%s\n", __FUNCTION__);
24297 -
24298 - if((pmlmeinfo->state&0x03) != WIFI_FW_AP_STATE)
24299 - return ret;
24300 + PADAPTER pbuddy_adapter;
24301 + struct mlme_ext_priv *pbuddy_mlmeext;
24302 + struct mlme_ext_info *pbuddy_mlmeinfo;
24303
24304 -
24305 - _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
24306 - phead = &pstapriv->asoc_list;
24307 - plist = get_next(phead);
24308 + if(padapter == NULL)
24309 + return _FALSE;
24310
24311 - //free sta asoc_queue
24312 - while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
24313 - {
24314 - psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
24315 -
24316 - plist = get_next(plist);
24317 -
24318 - rtw_list_delete(&psta->asoc_list);
24319 + pbuddy_adapter = padapter->pbuddy_adapter;
24320
24321 - //_exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
24322 - ap_free_sta(padapter, psta);
24323 - //_enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
24324 - }
24325 - _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
24326 + if(pbuddy_adapter == NULL)
24327 + return _FALSE;
24328
24329
24330 - issue_deauth(padapter, bc_addr, WLAN_REASON_DEAUTH_LEAVING);
24331 -
24332 - return ret;
24333 + pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
24334 + pbuddy_mlmeinfo = &(pbuddy_mlmeext->mlmext_info);
24335 +
24336 + if((pbuddy_mlmeinfo->state&0x03) == state)
24337 + return _TRUE;
24338
24339 + return _FALSE;
24340 +
24341 }
24342
24343 -/* called > TSR LEVEL for USB or SDIO Interface*/
24344 -void sta_info_update(_adapter *padapter, struct sta_info *psta)
24345 -{
24346 - int flags = psta->flags;
24347 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
24348 -
24349 -
24350 - //update wmm cap.
24351 - if(WLAN_STA_WME&flags)
24352 - psta->qos_option = 1;
24353 - else
24354 - psta->qos_option = 0;
24355 +void concurrent_chk_joinbss_done(_adapter *padapter, int join_res)
24356 +{
24357 + struct mlme_ext_priv *pmlmeext;
24358 + struct mlme_ext_info *pmlmeinfo;
24359 + PADAPTER pbuddy_adapter;
24360 + struct mlme_priv *pbuddy_mlmepriv;
24361 + struct mlme_ext_priv *pbuddy_mlmeext;
24362 + struct mlme_ext_info *pbuddy_mlmeinfo;
24363 + WLAN_BSSID_EX *pbuddy_network_mlmeext;
24364
24365 - if(pmlmepriv->qospriv.qos_option == 0)
24366 - psta->qos_option = 0;
24367 + pmlmeext = &padapter->mlmeextpriv;
24368 + pmlmeinfo = &(pmlmeext->mlmext_info);
24369
24370 -
24371 -#ifdef CONFIG_80211N_HT
24372 - //update 802.11n ht cap.
24373 - if(WLAN_STA_HT&flags)
24374 - {
24375 - psta->htpriv.ht_option = _TRUE;
24376 - psta->qos_option = 1;
24377 - }
24378 - else
24379 +
24380 + if(!rtw_buddy_adapter_up(padapter))
24381 {
24382 - psta->htpriv.ht_option = _FALSE;
24383 + set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
24384 + return;
24385 }
24386 -
24387 - if(pmlmepriv->htpriv.ht_option == _FALSE)
24388 - psta->htpriv.ht_option = _FALSE;
24389 -#endif
24390
24391 + pbuddy_adapter = padapter->pbuddy_adapter;
24392 + pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
24393 + pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
24394 + pbuddy_mlmeinfo = &(pbuddy_mlmeext->mlmext_info);
24395 + pbuddy_network_mlmeext = &(pbuddy_mlmeinfo->network);
24396
24397 - update_sta_info_apmode(padapter, psta);
24398 -
24399 + if(((pbuddy_mlmeinfo->state&0x03) == WIFI_FW_AP_STATE) &&
24400 + check_fwstate(pbuddy_mlmepriv, _FW_LINKED))
24401 + {
24402 + //restart and update beacon
24403
24404 -}
24405 + DBG_871X("after join,primary adapter, CH=%d, BW=%d, offset=%d\n"
24406 + , pmlmeext->cur_channel, pmlmeext->cur_bwmode, pmlmeext->cur_ch_offset);
24407 +
24408
24409 -/* called >= TSR LEVEL for USB or SDIO Interface*/
24410 -void ap_sta_info_defer_update(_adapter *padapter, struct sta_info *psta)
24411 -{
24412 - if(psta->state & _FW_LINKED)
24413 - {
24414 - //add ratid
24415 - add_RATid(padapter, psta);
24416 - }
24417 -}
24418 + if(join_res >= 0)
24419 + {
24420 + u8 *p;
24421 + int ie_len;
24422 + u8 change_band = _FALSE;
24423 + struct HT_info_element *pht_info=NULL;
24424 +
24425 + if((pmlmeext->cur_channel <= 14 && pbuddy_mlmeext->cur_channel >= 36) ||
24426 + (pmlmeext->cur_channel >= 36 && pbuddy_mlmeext->cur_channel <= 14))
24427 + change_band = _TRUE;
24428 +
24429 + //sync channel/bwmode/ch_offset with primary adapter
24430 + pbuddy_mlmeext->cur_channel = pmlmeext->cur_channel;
24431 + if(pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40)
24432 + {
24433 + p = rtw_get_ie((pbuddy_network_mlmeext->IEs + sizeof(NDIS_802_11_FIXED_IEs)), _HT_ADD_INFO_IE_, &ie_len, (pbuddy_network_mlmeext->IELength - sizeof(NDIS_802_11_FIXED_IEs)));
24434 + if( p && ie_len)
24435 + {
24436 + pht_info = (struct HT_info_element *)(p+2);
24437 + pht_info->infos[0] &= ~(BIT(0)|BIT(1)); //no secondary channel is present
24438 + }
24439 +
24440 + if(pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40)
24441 + {
24442 + pbuddy_mlmeext->cur_ch_offset = pmlmeext->cur_ch_offset;
24443
24444 -void start_ap_mode(_adapter *padapter)
24445 -{
24446 - int i;
24447 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
24448 - struct sta_priv *pstapriv = &padapter->stapriv;
24449 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
24450 -
24451 - pmlmepriv->update_bcn = _FALSE;
24452 -
24453 - //init_mlme_ap_info(padapter);
24454 - pmlmeext->bstart_bss = _FALSE;
24455 + //to update cur_ch_offset value in beacon
24456 + if( pht_info )
24457 + {
24458 + switch(pmlmeext->cur_ch_offset)
24459 + {
24460 + case HAL_PRIME_CHNL_OFFSET_LOWER:
24461 + pht_info->infos[0] |= 0x1;
24462 + break;
24463 + case HAL_PRIME_CHNL_OFFSET_UPPER:
24464 + pht_info->infos[0] |= 0x3;
24465 + break;
24466 + case HAL_PRIME_CHNL_OFFSET_DONT_CARE:
24467 + default:
24468 + break;
24469 + }
24470 +
24471 + }
24472 +
24473 + }
24474 + else if(pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_20)
24475 + {
24476 + if(pmlmeext->cur_channel>=1 && pmlmeext->cur_channel<=4)
24477 + {
24478 + if(pht_info)
24479 + pht_info->infos[0] |= HT_INFO_HT_PARAM_SECONDARY_CHNL_ABOVE;
24480
24481 - pmlmepriv->num_sta_non_erp = 0;
24482 + pbuddy_mlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40;
24483 + pbuddy_mlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
24484 + }
24485 + else if(pmlmeext->cur_channel>=5 && pmlmeext->cur_channel<=14)
24486 + {
24487 + if(pht_info)
24488 + pht_info->infos[0] |= HT_INFO_HT_PARAM_SECONDARY_CHNL_BELOW;
24489 +
24490 + pbuddy_mlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40;
24491 + pbuddy_mlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
24492 + }
24493 + else
24494 + {
24495 + switch(pmlmeext->cur_channel)
24496 + {
24497 + case 36:
24498 + case 44:
24499 + case 52:
24500 + case 60:
24501 + case 100:
24502 + case 108:
24503 + case 116:
24504 + case 124:
24505 + case 132:
24506 + case 149:
24507 + case 157:
24508 + {
24509 + if(pht_info)
24510 + pht_info->infos[0] |= HT_INFO_HT_PARAM_SECONDARY_CHNL_ABOVE;
24511 + pbuddy_mlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40;
24512 + pbuddy_mlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
24513 + break;
24514 + }
24515 + case 40:
24516 + case 48:
24517 + case 56:
24518 + case 64:
24519 + case 104:
24520 + case 112:
24521 + case 120:
24522 + case 128:
24523 + case 136:
24524 + case 153:
24525 + case 161:
24526 + {
24527 + if(pht_info)
24528 + pht_info->infos[0] |= HT_INFO_HT_PARAM_SECONDARY_CHNL_BELOW;
24529 +
24530 + pbuddy_mlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40;
24531 + pbuddy_mlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
24532 + break;
24533 + }
24534 + default:
24535 + if(pht_info)
24536 + pht_info->infos[0] &= ~HT_INFO_HT_PARAM_SECONDARY_CHNL_BELOW;
24537 + pbuddy_mlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
24538 + pbuddy_mlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
24539 + break;
24540
24541 - pmlmepriv->num_sta_no_short_slot_time = 0;
24542 + }
24543 +
24544 + }
24545
24546 - pmlmepriv->num_sta_no_short_preamble = 0;
24547 + }
24548
24549 - pmlmepriv->num_sta_ht_no_gf = 0;
24550 + set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
24551 +
24552 + }
24553 + else
24554 + {
24555 + set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
24556 + }
24557
24558 - pmlmepriv->num_sta_no_ht = 0;
24559 -
24560 - pmlmepriv->num_sta_ht_20mhz = 0;
24561
24562 - pmlmepriv->olbc = _FALSE;
24563 + // to update channel value in beacon
24564 + pbuddy_network_mlmeext->Configuration.DSConfig = pmlmeext->cur_channel;
24565 + p = rtw_get_ie((pbuddy_network_mlmeext->IEs + sizeof(NDIS_802_11_FIXED_IEs)), _DSSET_IE_, &ie_len, (pbuddy_network_mlmeext->IELength - sizeof(NDIS_802_11_FIXED_IEs)));
24566 + if(p && ie_len>0)
24567 + *(p + 2) = pmlmeext->cur_channel;
24568 +
24569 + p = rtw_get_ie((pbuddy_network_mlmeext->IEs + sizeof(NDIS_802_11_FIXED_IEs)), _HT_ADD_INFO_IE_, &ie_len, (pbuddy_network_mlmeext->IELength - sizeof(NDIS_802_11_FIXED_IEs)));
24570 + if( p && ie_len)
24571 + {
24572 + pht_info = (struct HT_info_element *)(p+2);
24573 + pht_info->primary_channel = pmlmeext->cur_channel;
24574 + }
24575 +
24576 + //buddy interface band is different from current interface, update ERP, support rate, ext support rate IE
24577 + if(change_band == _TRUE)
24578 + change_band_update_ie(pbuddy_adapter, pbuddy_network_mlmeext);
24579 + }
24580 + else
24581 + {
24582 + // switch back to original channel/bwmode/ch_offset;
24583 + set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
24584 + }
24585
24586 - pmlmepriv->olbc_ht = _FALSE;
24587 -
24588 -#ifdef CONFIG_80211N_HT
24589 - pmlmepriv->ht_op_mode = 0;
24590 -#endif
24591 + DBG_871X("after join, second adapter, CH=%d, BW=%d, offset=%d\n", pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_bwmode, pbuddy_mlmeext->cur_ch_offset);
24592
24593 - for(i=0; i<NUM_STA; i++)
24594 - pstapriv->sta_aid[i] = NULL;
24595 + DBG_871X("update pbuddy_adapter's beacon\n");
24596 +
24597 + update_beacon(pbuddy_adapter, 0, NULL, _TRUE);
24598
24599 - pmlmepriv->wps_beacon_ie = NULL;
24600 - pmlmepriv->wps_probe_resp_ie = NULL;
24601 - pmlmepriv->wps_assoc_resp_ie = NULL;
24602 + }
24603 + else if(((pbuddy_mlmeinfo->state&0x03) == WIFI_FW_STATION_STATE) &&
24604 + check_fwstate(pbuddy_mlmepriv, _FW_LINKED))
24605 + {
24606 + if(join_res >= 0)
24607 + {
24608 + pbuddy_mlmeext->cur_channel = pmlmeext->cur_channel;
24609 + if(pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40)
24610 + set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
24611 + else if(pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40)
24612 + set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
24613 + else
24614 + set_channel_bwmode(padapter, pmlmeext->cur_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
24615 + }
24616 + else
24617 + {
24618 + // switch back to original channel/bwmode/ch_offset;
24619 + set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
24620 + }
24621 + }
24622 + else
24623 + {
24624 + set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
24625 + }
24626
24627 - pmlmepriv->p2p_beacon_ie = NULL;
24628 - pmlmepriv->p2p_probe_resp_ie = NULL;
24629 -
24630 }
24631 +#endif //CONFIG_CONCURRENT_MODE
24632
24633 -void stop_ap_mode(_adapter *padapter)
24634 +int rtw_chk_start_clnt_join(_adapter *padapter)
24635 {
24636 - _irqL irqL;
24637 - //_list *phead, *plist;
24638 - struct sta_info *psta=NULL;
24639 - struct sta_priv *pstapriv = &padapter->stapriv;
24640 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
24641 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
24642 -
24643 - pmlmepriv->update_bcn = _FALSE;
24644 - pmlmeext->bstart_bss = _FALSE;
24645 - //_rtw_spinlock_free(&pmlmepriv->bcn_update_lock);
24646 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
24647 + unsigned char cur_ch = pmlmeext->cur_channel;
24648 + unsigned char cur_bw = pmlmeext->cur_bwmode;
24649 + unsigned char cur_ch_offset = pmlmeext->cur_ch_offset;
24650 + bool chbw_allow = _TRUE;
24651 + bool connect_allow = _TRUE;
24652
24653 - //phead = &pstapriv->asoc_list;
24654 - //plist = get_next(phead);
24655 -
24656 - rtw_sta_flush(padapter);
24657 +#ifdef CONFIG_CONCURRENT_MODE
24658 + PADAPTER pbuddy_adapter;
24659 + struct mlme_ext_priv *pbuddy_mlmeext;
24660 + struct mlme_ext_info *pbuddy_pmlmeinfo;
24661 + struct mlme_priv *pbuddy_mlmepriv;
24662
24663 -#if 0
24664 - //free sta asoc_queue
24665 - while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
24666 - {
24667 - psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
24668 -
24669 - plist = get_next(plist);
24670 + if (!rtw_buddy_adapter_up(padapter)) {
24671 + goto start_join_set_ch_bw;
24672 + }
24673
24674 - rtw_list_delete(&psta->asoc_list);
24675 + pbuddy_adapter = padapter->pbuddy_adapter;
24676 + pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
24677 + pbuddy_pmlmeinfo = &(pbuddy_mlmeext->mlmext_info);
24678 + pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
24679
24680 - //tear down Rx AMPDU
24681 - send_delba(padapter, 0, psta->hwaddr);// recipient
24682 -
24683 - //tear down TX AMPDU
24684 - send_delba(padapter, 1, psta->hwaddr);// // originator
24685 - psta->htpriv.agg_enable_bitmap = 0x0;//reset
24686 - psta->htpriv.candidate_tid_bitmap = 0x0;//reset
24687 + if((pbuddy_pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE)//for AP MODE
24688 + {
24689 + DBG_871X("start_clnt_join: "ADPT_FMT"(ch=%d, bw=%d, ch_offset=%d)"
24690 + ", "ADPT_FMT" AP mode(ch=%d, bw=%d, ch_offset=%d)\n",
24691 + ADPT_ARG(padapter), pmlmeext->cur_channel, pmlmeext->cur_bwmode, pmlmeext->cur_ch_offset,
24692 + ADPT_ARG(pbuddy_adapter), pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_bwmode, pbuddy_mlmeext->cur_ch_offset);
24693
24694 - issue_deauth(padapter, psta->hwaddr, WLAN_REASON_DEAUTH_LEAVING);
24695 + if(pmlmeext->cur_channel != pbuddy_mlmeext->cur_channel)
24696 + {
24697 + chbw_allow = _FALSE;
24698 + }
24699 + else if((pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40) &&
24700 + (pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40) &&
24701 + (pmlmeext->cur_ch_offset != pbuddy_mlmeext->cur_ch_offset))
24702 + {
24703 + chbw_allow = _FALSE;
24704 + }
24705 + else if((pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_20) &&
24706 + (pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40))
24707 + {
24708 + cur_ch = pmlmeext->cur_channel;
24709 + cur_bw = pbuddy_mlmeext->cur_bwmode;
24710 + cur_ch_offset = pbuddy_mlmeext->cur_ch_offset;
24711 + }
24712
24713 - _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
24714 - rtw_free_stainfo(padapter, psta);
24715 - _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
24716 -
24717 + DBG_871X("start_clnt_join: connect_allow:%d, chbw_allow:%d\n", connect_allow, chbw_allow);
24718 + if (chbw_allow == _FALSE) {
24719 + #ifdef CONFIG_SPCT_CH_SWITCH
24720 + if (1) {
24721 + rtw_ap_inform_ch_switch(pbuddy_adapter, pmlmeext->cur_channel , pmlmeext->cur_ch_offset);
24722 + } else
24723 + #endif
24724 + {
24725 + //issue deauth to all stas if if2 is at ap mode
24726 + rtw_sta_flush(pbuddy_adapter);
24727 + }
24728 + rtw_hal_set_hwreg(padapter, HW_VAR_CHECK_TXBUF, 0);
24729 + }
24730 }
24731 -#endif
24732 + else if(check_fwstate(pbuddy_mlmepriv, _FW_LINKED) == _TRUE &&
24733 + check_fwstate(pbuddy_mlmepriv, WIFI_STATION_STATE) == _TRUE) //for Client Mode/p2p client
24734 + {
24735 + DBG_871X("start_clnt_join: "ADPT_FMT"(ch=%d, bw=%d, ch_offset=%d)"
24736 + ", "ADPT_FMT" STA mode(ch=%d, bw=%d, ch_offset=%d)\n",
24737 + ADPT_ARG(padapter), pmlmeext->cur_channel, pmlmeext->cur_bwmode, pmlmeext->cur_ch_offset,
24738 + ADPT_ARG(pbuddy_adapter), pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_bwmode, pbuddy_mlmeext->cur_ch_offset);
24739
24740 - //free_assoc_sta_resources
24741 - rtw_free_all_stainfo(padapter);
24742 -
24743 - psta = rtw_get_bcmc_stainfo(padapter);
24744 - _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
24745 - rtw_free_stainfo(padapter, psta);
24746 - _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
24747 -
24748 - rtw_init_bcmc_stainfo(padapter);
24749 + if(pmlmeext->cur_channel != pbuddy_mlmeext->cur_channel)
24750 + {
24751 + chbw_allow = _FALSE;
24752 + }
24753 + else if((pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_20) &&
24754 + (pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40))
24755 + {
24756 + cur_bw = HT_CHANNEL_WIDTH_40;
24757 + cur_ch_offset = pbuddy_mlmeext->cur_ch_offset;
24758 + }
24759 + else if((pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40) &&
24760 + (pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40) &&
24761 + (pmlmeext->cur_ch_offset != pbuddy_mlmeext->cur_ch_offset))
24762 + {
24763 + chbw_allow = _FALSE;
24764 + }
24765
24766 - rtw_free_mlme_priv_ie_data(pmlmepriv);
24767 + connect_allow = chbw_allow;
24768
24769 -/*
24770 - if(pmlmepriv->wps_beacon_ie)
24771 - {
24772 - rtw_mfree(pmlmepriv->wps_beacon_ie, pmlmepriv->wps_beacon_ie_len);
24773 - pmlmepriv->wps_beacon_ie = NULL;
24774 - }
24775 + #if defined(CONFIG_P2P) && defined(CONFIG_IOCTL_CFG80211)
24776 + /* wlan0-sta mode has higher priority than p2p0-p2p client */
24777 + if (!rtw_p2p_chk_state(&(pbuddy_adapter->wdinfo), P2P_STATE_NONE)
24778 + && pbuddy_adapter->wdinfo.driver_interface == DRIVER_CFG80211)
24779 + {
24780 + connect_allow = _TRUE;
24781 + }
24782 + #endif /* CONFIG_P2P && CONFIG_IOCTL_CFG80211 */
24783
24784 - if(pmlmepriv->wps_probe_resp_ie)
24785 - {
24786 - rtw_mfree(pmlmepriv->wps_probe_resp_ie, pmlmepriv->wps_probe_resp_ie_len);
24787 - pmlmepriv->wps_probe_resp_ie = NULL;
24788 + DBG_871X("start_clnt_join: connect_allow:%d, chbw_allow:%d\n", connect_allow, chbw_allow);
24789 + if (connect_allow == _TRUE && chbw_allow == _FALSE) {
24790 + /* disconnect buddy's connection */
24791 + rtw_disassoc_cmd(pbuddy_adapter, 500, _FALSE);
24792 + rtw_indicate_disconnect(pbuddy_adapter);
24793 + rtw_free_assoc_resources(pbuddy_adapter, 1);
24794 + }
24795 }
24796
24797 - if(pmlmepriv->wps_assoc_resp_ie)
24798 - {
24799 - rtw_mfree(pmlmepriv->wps_assoc_resp_ie, pmlmepriv->wps_assoc_resp_ie_len);
24800 - pmlmepriv->wps_assoc_resp_ie = NULL;
24801 +start_join_set_ch_bw:
24802 +#endif /* CONFIG_CONCURRENT_MODE */
24803 +
24804 + if (connect_allow == _TRUE) {
24805 + DBG_871X("start_join_set_ch_bw: ch=%d, bwmode=%d, ch_offset=%d\n", cur_ch, cur_bw, cur_ch_offset);
24806 + set_channel_bwmode(padapter, cur_ch, cur_ch_offset, cur_bw);
24807 }
24808
24809 - if(pmlmepriv->p2p_beacon_ie)
24810 - {
24811 - rtw_mfree(pmlmepriv->p2p_beacon_ie, pmlmepriv->p2p_beacon_ie_len);
24812 - pmlmepriv->p2p_beacon_ie = NULL;
24813 + return connect_allow == _TRUE ? _SUCCESS : _FAIL;
24814 +}
24815 +
24816 +/* Find union about ch, bw, ch_offset of all linked interfaces */
24817 +int rtw_get_ch_setting_union(_adapter *adapter, u8 *ch, u8 *bw, u8 *offset)
24818 +{
24819 + struct dvobj_priv *dvobj = adapter_to_dvobj(adapter);
24820 + _adapter *iface;
24821 + struct mlme_ext_priv *mlmeext;
24822 + int i;
24823 + u8 ch_ret = 0;
24824 + u8 bw_ret = HT_CHANNEL_WIDTH_20;
24825 + u8 offset_ret = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
24826 + int num = 0;
24827 +
24828 + if (ch) *ch = 0;
24829 + if (bw) *bw = HT_CHANNEL_WIDTH_20;
24830 + if (offset) *offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
24831 +
24832 + for (i = 0; i<dvobj->iface_nums; i++) {
24833 + iface = dvobj->padapters[i];
24834 + mlmeext = &iface->mlmeextpriv;
24835 +
24836 + if (!check_fwstate(&iface->mlmepriv, _FW_LINKED))
24837 + continue;
24838 +
24839 + if (num == 0) {
24840 + ch_ret = mlmeext->cur_channel;
24841 + bw_ret = mlmeext->cur_bwmode;
24842 + offset_ret = mlmeext->cur_ch_offset;
24843 + num++;
24844 + continue;
24845 + }
24846 +
24847 + if (ch_ret != mlmeext->cur_channel) {
24848 + num = 0;
24849 + break;
24850 + }
24851 +
24852 + if (bw_ret < mlmeext->cur_bwmode) {
24853 + bw_ret = mlmeext->cur_bwmode;
24854 + offset_ret = mlmeext->cur_ch_offset;
24855 + } else if (bw_ret == mlmeext->cur_bwmode && offset_ret != mlmeext->cur_ch_offset) {
24856 + num = 0;
24857 + break;
24858 + }
24859 +
24860 + num++;
24861 }
24862
24863 - if(pmlmepriv->p2p_probe_resp_ie)
24864 - {
24865 - rtw_mfree(pmlmepriv->p2p_probe_resp_ie, pmlmepriv->p2p_probe_resp_ie_len);
24866 - pmlmepriv->p2p_probe_resp_ie = NULL;
24867 + if (num) {
24868 + if (ch) *ch = ch_ret;
24869 + if (bw) *bw = bw_ret;
24870 + if (offset) *offset = offset_ret;
24871 }
24872 -*/
24873
24874 + return num;
24875 }
24876
24877 +u8 set_ch_hdl(_adapter *padapter, u8 *pbuf)
24878 +{
24879 + struct set_ch_parm *set_ch_parm;
24880 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
24881 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
24882
24883 -#endif
24884 + if(!pbuf)
24885 + return H2C_PARAMETERS_ERROR;
24886
24887 -#endif
24888 + set_ch_parm = (struct set_ch_parm *)pbuf;
24889 +
24890 + DBG_871X(FUNC_NDEV_FMT" ch:%u, bw:%u, ch_offset:%u\n",
24891 + FUNC_NDEV_ARG(padapter->pnetdev),
24892 + set_ch_parm->ch, set_ch_parm->bw, set_ch_parm->ch_offset);
24893 +
24894 + pmlmeext->cur_channel = set_ch_parm->ch;
24895 + pmlmeext->cur_ch_offset = set_ch_parm->ch_offset;
24896 + pmlmeext->cur_bwmode = set_ch_parm->bw;
24897 +
24898 + set_channel_bwmode(padapter, set_ch_parm->ch, set_ch_parm->ch_offset, set_ch_parm->bw);
24899 +
24900 + return H2C_SUCCESS;
24901 +}
24902
24903 u8 set_chplan_hdl(_adapter *padapter, unsigned char *pbuf)
24904 {
24905 @@ -12038,6 +13361,7 @@ u8 set_chplan_hdl(_adapter *padapter, un
24906 setChannelPlan_param = (struct SetChannelPlan_param *)pbuf;
24907
24908 pmlmeext->max_chan_nums = init_channel_set(padapter, setChannelPlan_param->channel_plan, pmlmeext->channel_set);
24909 + init_channel_list(padapter, pmlmeext->channel_set, pmlmeext->max_chan_nums, &pmlmeext->channel_list);
24910
24911 return H2C_SUCCESS;
24912 }
24913 @@ -12062,6 +13386,7 @@ u8 set_csa_hdl(_adapter *padapter, unsig
24914 {
24915 #ifdef CONFIG_DFS
24916 struct SetChannelSwitch_param *setChannelSwitch_param;
24917 + struct SetChannelPlan_param *setChannelPlan_param;
24918 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
24919 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
24920 struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
24921 @@ -12073,22 +13398,22 @@ u8 set_csa_hdl(_adapter *padapter, unsig
24922
24923 setChannelSwitch_param = (struct SetChannelSwitch_param *)pbuf;
24924 new_ch_no = setChannelSwitch_param->new_ch_no;
24925 -
24926 - padapter->HalFunc.GetHwRegHandler(padapter, HW_VAR_TXPAUSE, &gval8);
24927 -
24928 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_TXPAUSE, &sval8);
24929
24930 - DBG_8192C("DFS detected! Swiching channel to %d!\n", new_ch_no);
24931 + rtw_hal_get_hwreg(padapter, HW_VAR_TXPAUSE, &gval8);
24932 +
24933 + rtw_hal_set_hwreg(padapter, HW_VAR_TXPAUSE, &sval8);
24934 +
24935 + DBG_871X("DFS detected! Swiching channel to %d!\n", new_ch_no);
24936 SelectChannel(padapter, new_ch_no);
24937
24938 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_TXPAUSE, &gval8);
24939 + rtw_hal_set_hwreg(padapter, HW_VAR_TXPAUSE, &gval8);
24940
24941 rtw_free_network_queue(padapter, _TRUE);
24942 rtw_indicate_disconnect(padapter);
24943
24944 if ( ((new_ch_no >= 52) && (new_ch_no <= 64)) ||((new_ch_no >= 100) && (new_ch_no <= 140)) ) {
24945 - DBG_8192C("Switched to DFS band (ch %02x) again!!\n", new_ch_no);
24946 - }
24947 + DBG_871X("Switched to DFS band (ch %02x) again!!\n", new_ch_no);
24948 + }
24949
24950 return H2C_SUCCESS;
24951 #else
24952 @@ -12136,14 +13461,18 @@ u8 tdls_hdl(_adapter *padapter, unsigned
24953 }
24954
24955 //_enter_critical_bh(&(ptdlsinfo->hdl_lock), &irqL);
24956 - DBG_8192C("[%s] option:%d\n", __FUNCTION__, option);
24957 + DBG_871X("[%s] option:%d\n", __FUNCTION__, option);
24958
24959 switch(option){
24960 case TDLS_WRCR:
24961 //As long as TDLS handshake success, we should set RCR_CBSSID_DATA bit to 0
24962 //such we can receive all kinds of data frames.
24963 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_TDLS_WRCR, 0);
24964 - DBG_8192C("wirte REG_RCR, set bit6 off\n");
24965 + rtw_hal_set_hwreg(padapter, HW_VAR_TDLS_WRCR, 0);
24966 + DBG_871X("TDLS with "MAC_FMT"\n", MAC_ARG(ptdls_sta->hwaddr));
24967 +
24968 + pmlmeinfo->FW_sta_info[ptdls_sta->mac_id].psta = ptdls_sta;
24969 + //set TDLS sta rate.
24970 + set_sta_rate(padapter, ptdls_sta);
24971 break;
24972 case TDLS_SD_PTI:
24973 issue_tdls_peer_traffic_indication(padapter, ptdls_sta);
24974 @@ -12155,11 +13484,11 @@ u8 tdls_hdl(_adapter *padapter, unsigned
24975 ptdls_sta->tdls_sta_state &= ~(TDLS_CH_SWITCH_ON_STATE |
24976 TDLS_PEER_AT_OFF_STATE |
24977 TDLS_AT_OFF_CH_STATE);
24978 - DBG_8192C("go back to base channel\n ");
24979 - issue_nulldata(padapter, 0);
24980 + DBG_871X("go back to base channel\n ");
24981 + issue_nulldata(padapter, NULL, 0, 0, 0);
24982 break;
24983 case TDLS_INIT_CH_SEN:
24984 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_TDLS_INIT_CH_SEN, 0);
24985 + rtw_hal_set_hwreg(padapter, HW_VAR_TDLS_INIT_CH_SEN, 0);
24986 pmlmeext->sitesurvey_res.channel_idx = 0;
24987 ptdls_sta->option = TDLS_DONE_CH_SEN;
24988 rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_DONE_CH_SEN);
24989 @@ -12174,7 +13503,7 @@ u8 tdls_hdl(_adapter *padapter, unsigned
24990 }else{
24991 SelectChannel(padapter, pmlmeext->cur_channel);
24992
24993 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_TDLS_DONE_CH_SEN, 0);
24994 + rtw_hal_set_hwreg(padapter, HW_VAR_TDLS_DONE_CH_SEN, 0);
24995
24996 if(ptdlsinfo->ch_sensing==1){
24997 ptdlsinfo->ch_sensing=0;
24998 @@ -12189,7 +13518,7 @@ u8 tdls_hdl(_adapter *padapter, unsigned
24999 }
25000 ptdlsinfo->collect_pkt_num[0]=0;
25001 ptdlsinfo->candidate_ch=ptdlsinfo->cur_channel;
25002 - DBG_8192C("TDLS channel sensing done, candidate channel: %02x\n", ptdlsinfo->candidate_ch);
25003 + DBG_871X("TDLS channel sensing done, candidate channel: %02x\n", ptdlsinfo->candidate_ch);
25004 ptdlsinfo->cur_channel=0;
25005
25006 }
25007 @@ -12198,20 +13527,20 @@ u8 tdls_hdl(_adapter *padapter, unsigned
25008 ptdls_sta->tdls_sta_state |= TDLS_APSD_CHSW_STATE;
25009 }else{
25010 //send null data with pwrbit==1 before send ch_switching_req to peer STA.
25011 - issue_nulldata(padapter, 1);
25012 + issue_nulldata(padapter, NULL, 1, 0, 0);
25013
25014 ptdls_sta->tdls_sta_state |= TDLS_CH_SW_INITIATOR_STATE;
25015
25016 issue_tdls_ch_switch_req(padapter, ptdls_sta->hwaddr);
25017 - DBG_8192C("issue tdls ch switch req\n");
25018 + DBG_871X("issue tdls ch switch req\n");
25019 }
25020 }
25021 break;
25022 case TDLS_OFF_CH:
25023 - issue_nulldata(padapter, 1);
25024 + issue_nulldata(padapter, NULL, 1, 0, 0);
25025 SelectChannel(padapter, ptdls_sta->off_ch);
25026
25027 - DBG_8192C("change channel to tar ch:%02x\n", ptdls_sta->off_ch);
25028 + DBG_871X("change channel to tar ch:%02x\n", ptdls_sta->off_ch);
25029 ptdls_sta->tdls_sta_state |= TDLS_AT_OFF_CH_STATE;
25030 ptdls_sta->tdls_sta_state &= ~(TDLS_PEER_AT_OFF_STATE);
25031 _set_timer(&ptdls_sta->option_timer, (u32)ptdls_sta->ch_switch_time);
25032 @@ -12223,21 +13552,21 @@ u8 tdls_hdl(_adapter *padapter, unsigned
25033 ptdls_sta->tdls_sta_state &= ~(TDLS_CH_SWITCH_ON_STATE |
25034 TDLS_PEER_AT_OFF_STATE |
25035 TDLS_AT_OFF_CH_STATE);
25036 - DBG_8192C("go back to base channel\n ");
25037 - issue_nulldata(padapter, 0);
25038 + DBG_871X("go back to base channel\n ");
25039 + issue_nulldata(padapter, NULL, 0, 0, 0);
25040 _set_timer(&ptdls_sta->option_timer, (u32)ptdls_sta->ch_switch_time);
25041 break;
25042 case TDLS_P_OFF_CH:
25043 SelectChannel(padapter, pmlmeext->cur_channel);
25044 - issue_nulldata(padapter, 0);
25045 - DBG_8192C("change channel to base ch:%02x\n", pmlmeext->cur_channel);
25046 + issue_nulldata(padapter, NULL, 0, 0, 0);
25047 + DBG_871X("change channel to base ch:%02x\n", pmlmeext->cur_channel);
25048 ptdls_sta->tdls_sta_state &= ~(TDLS_PEER_AT_OFF_STATE| TDLS_AT_OFF_CH_STATE);
25049 _set_timer(&ptdls_sta->off_ch_timer, TDLS_STAY_TIME);
25050 break;
25051 case TDLS_P_BASE_CH:
25052 - issue_nulldata(ptdls_sta->padapter, 1);
25053 + issue_nulldata(ptdls_sta->padapter, NULL, 1, 0, 0);
25054 SelectChannel(padapter, ptdls_sta->off_ch);
25055 - DBG_8192C("change channel to off ch:%02x\n", ptdls_sta->off_ch);
25056 + DBG_871X("change channel to off ch:%02x\n", ptdls_sta->off_ch);
25057 ptdls_sta->tdls_sta_state |= TDLS_AT_OFF_CH_STATE;
25058 if((ptdls_sta->tdls_sta_state & TDLS_PEER_AT_OFF_STATE) != TDLS_PEER_AT_OFF_STATE){
25059 issue_nulldata_to_TDLS_peer_STA(padapter, ptdls_sta, 0);
25060 @@ -12245,8 +13574,8 @@ u8 tdls_hdl(_adapter *padapter, unsigned
25061 _set_timer(&ptdls_sta->base_ch_timer, TDLS_STAY_TIME);
25062 break;
25063 case TDLS_RS_RCR:
25064 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_TDLS_RS_RCR, 0);
25065 - DBG_8192C("wirte REG_RCR, set bit6 on\n");
25066 + rtw_hal_set_hwreg(padapter, HW_VAR_TDLS_RS_RCR, 0);
25067 + DBG_871X("wirte REG_RCR, set bit6 on\n");
25068 break;
25069 case TDLS_CKALV_PH1:
25070 _set_timer(&ptdls_sta->alive_timer2, TDLS_ALIVE_TIMER_PH2);
25071 @@ -12268,3 +13597,4 @@ u8 tdls_hdl(_adapter *padapter, unsigned
25072 #endif //CONFIG_TDLS
25073
25074 }
25075 +
25076 --- a/drivers/net/wireless/rtl8192cu/core/rtw_mp.c
25077 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_mp.c
25078 @@ -1,7 +1,7 @@
25079 /******************************************************************************
25080 *
25081 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
25082 - *
25083 + *
25084 * This program is free software; you can redistribute it and/or modify it
25085 * under the terms of version 2 of the GNU General Public License as
25086 * published by the Free Software Foundation.
25087 @@ -21,6 +21,10 @@
25088
25089 #include <drv_types.h>
25090
25091 +#ifdef PLATFORM_FREEBSD
25092 +#include <sys/unistd.h> /* for RFHIGHPID */
25093 +#endif
25094 +
25095 #ifdef CONFIG_RTL8712
25096 #include <rtw_mp_phy_regdef.h>
25097 #endif
25098 @@ -30,6 +34,9 @@
25099 #ifdef CONFIG_RTL8192D
25100 #include <rtl8192d_hal.h>
25101 #endif
25102 +#ifdef CONFIG_RTL8723A
25103 +#include <rtl8723a_hal.h>
25104 +#endif
25105
25106
25107 #ifdef CONFIG_MP_INCLUDED
25108 @@ -79,35 +86,34 @@ void write_macreg(_adapter *padapter, u3
25109
25110 u32 read_bbreg(_adapter *padapter, u32 addr, u32 bitmask)
25111 {
25112 - return padapter->HalFunc.read_bbreg(padapter, addr, bitmask);
25113 + return rtw_hal_read_bbreg(padapter, addr, bitmask);
25114 }
25115
25116 void write_bbreg(_adapter *padapter, u32 addr, u32 bitmask, u32 val)
25117 {
25118 - padapter->HalFunc.write_bbreg(padapter, addr, bitmask, val);
25119 + rtw_hal_write_bbreg(padapter, addr, bitmask, val);
25120 }
25121
25122 u32 _read_rfreg(PADAPTER padapter, u8 rfpath, u32 addr, u32 bitmask)
25123 {
25124 - return padapter->HalFunc.read_rfreg(padapter, (RF90_RADIO_PATH_E)rfpath, addr, bitmask);
25125 + return rtw_hal_read_rfreg(padapter, (RF_RADIO_PATH_E)rfpath, addr, bitmask);
25126 }
25127
25128 void _write_rfreg(PADAPTER padapter, u8 rfpath, u32 addr, u32 bitmask, u32 val)
25129 {
25130 - padapter->HalFunc.write_rfreg(padapter, (RF90_RADIO_PATH_E)rfpath, addr, bitmask, val);
25131 + rtw_hal_write_rfreg(padapter, (RF_RADIO_PATH_E)rfpath, addr, bitmask, val);
25132 }
25133
25134 u32 read_rfreg(PADAPTER padapter, u8 rfpath, u32 addr)
25135 {
25136 - return _read_rfreg(padapter, (RF90_RADIO_PATH_E)rfpath, addr, bRFRegOffsetMask);
25137 + return _read_rfreg(padapter, (RF_RADIO_PATH_E)rfpath, addr, bRFRegOffsetMask);
25138 }
25139
25140 void write_rfreg(PADAPTER padapter, u8 rfpath, u32 addr, u32 val)
25141 {
25142 - _write_rfreg(padapter, (RF90_RADIO_PATH_E)rfpath, addr, bRFRegOffsetMask, val);
25143 + _write_rfreg(padapter, (RF_RADIO_PATH_E)rfpath, addr, bRFRegOffsetMask, val);
25144 }
25145
25146 -
25147 static void _init_mp_priv_(struct mp_priv *pmp_priv)
25148 {
25149 WLAN_BSSID_EX *pnetwork;
25150 @@ -349,7 +355,7 @@ MPT_InitializeAdapter(
25151 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
25152 s32 rtStatus = _SUCCESS;
25153 PMPT_CONTEXT pMptCtx = &pAdapter->mppriv.MptCtx;
25154 - u32 tmpRegA, tmpRegC, TempCCk,ledsetting;
25155 + u32 ledsetting;
25156
25157 //-------------------------------------------------------------------------
25158 // HW Initialization for 8190 MPT.
25159 @@ -503,16 +509,22 @@ void GetPowerTracking(PADAPTER padapter,
25160
25161 static void disable_dm(PADAPTER padapter)
25162 {
25163 +#ifndef CONFIG_RTL8723A
25164 u8 v8;
25165 +#endif
25166 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
25167 struct dm_priv *pdmpriv = &pHalData->dmpriv;
25168
25169
25170 //3 1. disable firmware dynamic mechanism
25171 // disable Power Training, Rate Adaptive
25172 +#ifdef CONFIG_RTL8723A
25173 + SetBcnCtrlReg(padapter, 0, EN_BCN_FUNCTION);
25174 +#else
25175 v8 = rtw_read8(padapter, REG_BCN_CTRL);
25176 v8 &= ~EN_BCN_FUNCTION;
25177 rtw_write8(padapter, REG_BCN_CTRL, v8);
25178 +#endif
25179
25180 //3 2. disable driver dynamic mechanism
25181 // disable Dynamic Initial Gain
25182 @@ -595,7 +607,7 @@ s32 mp_start_test(PADAPTER padapter)
25183
25184 //init mp_start_test status
25185 if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) {
25186 - rtw_disassoc_cmd(padapter);
25187 + rtw_disassoc_cmd(padapter, 500, _TRUE);
25188 rtw_indicate_disconnect(padapter);
25189 rtw_free_assoc_resources(padapter, 1);
25190 }
25191 @@ -765,7 +777,7 @@ static VOID mpt_AdjustRFRegByRateByChan9
25192 static void mpt_SwitchRfSetting(PADAPTER pAdapter)
25193 {
25194 Hal_mpt_SwitchRfSetting(pAdapter);
25195 - }
25196 + }
25197
25198 /*---------------------------hal\rtl8192c\MPT_Phy.c---------------------------*/
25199 /*---------------------------hal\rtl8192c\MPT_HelperFunc.c---------------------------*/
25200 @@ -827,7 +839,7 @@ void SetAntennaPathPower(PADAPTER pAdapt
25201 void SetTxPower(PADAPTER pAdapter)
25202 {
25203 Hal_SetTxPower(pAdapter);
25204 -}
25205 + }
25206
25207 void SetTxAGCOffset(PADAPTER pAdapter, u32 ulTxAGCOffset)
25208 {
25209 @@ -904,12 +916,12 @@ void SetCarrierSuppressionTx(PADAPTER pA
25210 }
25211
25212 void SetCCKContinuousTx(PADAPTER pAdapter, u8 bStart)
25213 -{
25214 + {
25215 Hal_SetCCKContinuousTx(pAdapter,bStart);
25216 }
25217
25218 void SetOFDMContinuousTx(PADAPTER pAdapter, u8 bStart)
25219 -{
25220 + {
25221 Hal_SetOFDMContinuousTx( pAdapter, bStart);
25222 }/* mpt_StartOfdmContTx */
25223
25224 @@ -919,12 +931,12 @@ void SetContinuousTx(PADAPTER pAdapter,
25225 }
25226
25227 //------------------------------------------------------------------------------
25228 -void dump_mpframe(_adapter *padapter, struct xmit_frame *pmpframe)
25229 +static void dump_mpframe(PADAPTER padapter, struct xmit_frame *pmpframe)
25230 {
25231 - padapter->HalFunc.mgnt_xmit(padapter, pmpframe);
25232 + rtw_hal_mgnt_xmit(padapter, pmpframe);
25233 }
25234
25235 -struct xmit_frame *alloc_mp_xmitframe(struct xmit_priv *pxmitpriv)
25236 +static struct xmit_frame *alloc_mp_xmitframe(struct xmit_priv *pxmitpriv)
25237 {
25238 struct xmit_frame *pmpframe;
25239 struct xmit_buf *pxmitbuf;
25240 @@ -936,7 +948,7 @@ struct xmit_frame *alloc_mp_xmitframe(st
25241
25242 if ((pxmitbuf = rtw_alloc_xmitbuf(pxmitpriv)) == NULL)
25243 {
25244 - rtw_free_xmitframe_ex(pxmitpriv, pmpframe);
25245 + rtw_free_xmitframe(pxmitpriv, pmpframe);
25246 return NULL;
25247 }
25248
25249 @@ -952,7 +964,7 @@ struct xmit_frame *alloc_mp_xmitframe(st
25250
25251 }
25252
25253 -thread_return mp_xmit_packet_thread(thread_context context)
25254 +static thread_return mp_xmit_packet_thread(thread_context context)
25255 {
25256 struct xmit_frame *pxmitframe;
25257 struct mp_tx *pmptx;
25258 @@ -965,9 +977,9 @@ thread_return mp_xmit_packet_thread(thre
25259 padapter = pmp_priv->papdater;
25260 pxmitpriv = &(padapter->xmitpriv);
25261
25262 - thread_enter(padapter);
25263 + thread_enter("RTW_MP_THREAD");
25264
25265 - //DBG_8192C("%s:pkTx Start\n", __func__);
25266 + DBG_871X("%s:pkTx Start\n", __func__);
25267 while (1) {
25268 pxmitframe = alloc_mp_xmitframe(pxmitpriv);
25269 if (pxmitframe == NULL) {
25270 @@ -1002,7 +1014,7 @@ thread_return mp_xmit_packet_thread(thre
25271 }
25272
25273 exit:
25274 - //DBG_8192C("%s:pkTx Exit\n", __func__);
25275 + //DBG_871X("%s:pkTx Exit\n", __func__);
25276 rtw_mfree(pmptx->pallocated_buf, pmptx->buf_size);
25277 pmptx->pallocated_buf = NULL;
25278 pmptx->stop = 1;
25279 @@ -1059,7 +1071,7 @@ void SetPacketTx(PADAPTER padapter)
25280 pmp_priv->tx.buf_size = pkt_size + XMITBUF_ALIGN_SZ;
25281 pmp_priv->tx.pallocated_buf = rtw_zmalloc(pmp_priv->tx.buf_size);
25282 if (pmp_priv->tx.pallocated_buf == NULL) {
25283 - DBG_8192C("%s: malloc(%d) fail!!\n", __func__, pmp_priv->tx.buf_size);
25284 + DBG_871X("%s: malloc(%d) fail!!\n", __func__, pmp_priv->tx.buf_size);
25285 return;
25286 }
25287 pmp_priv->tx.buf = (u8 *)N_BYTE_ALIGMENT((SIZE_PTR)(pmp_priv->tx.pallocated_buf), XMITBUF_ALIGN_SZ);
25288 @@ -1140,9 +1152,22 @@ void SetPacketTx(PADAPTER padapter)
25289 _rtw_memset(ptr, payload, pkt_end - ptr);
25290
25291 //3 6. start thread
25292 - if(!start_kthread(&pmp_priv->tx.PktTxThread, mp_xmit_packet_thread, pmp_priv, "8192cu-mp-xmit"))
25293 +#ifdef PLATFORM_LINUX
25294 + pmp_priv->tx.PktTxThread = kthread_run(mp_xmit_packet_thread, pmp_priv, "RTW_MP_THREAD");
25295 + if (IS_ERR(pmp_priv->tx.PktTxThread))
25296 DBG_871X("Create PktTx Thread Fail !!!!!\n");
25297 +#endif
25298 +#ifdef PLATFORM_FREEBSD
25299 +{
25300 + struct proc *p;
25301 + struct thread *td;
25302 + pmp_priv->tx.PktTxThread = kproc_kthread_add(mp_xmit_packet_thread, pmp_priv,
25303 + &p, &td, RFHIGHPID, 0, "MPXmitThread", "MPXmitThread");
25304
25305 + if (pmp_priv->tx.PktTxThread < 0)
25306 + DBG_871X("Create PktTx Thread Fail !!!!!\n");
25307 +}
25308 +#endif
25309 }
25310
25311 void SetPacketRx(PADAPTER pAdapter, u8 bStartRx)
25312 @@ -1151,9 +1176,14 @@ void SetPacketRx(PADAPTER pAdapter, u8 b
25313
25314 if(bStartRx)
25315 {
25316 - // Accept CRC error and destination address
25317 - pHalData->ReceiveConfig |= (RCR_ACRC32|RCR_AAP);
25318 + pHalData->ReceiveConfig = AAP | APM | AM | AB | APP_ICV | ADF | AMF | HTC_LOC_CTRL | APP_MIC | APP_PHYSTS;
25319 +
25320 + pHalData->ReceiveConfig |= ACRC32;
25321 +
25322 rtw_write32(pAdapter, REG_RCR, pHalData->ReceiveConfig);
25323 +
25324 + // Accept all data frames
25325 + rtw_write16(pAdapter, REG_RXFLTMAP2, 0xFFFF);
25326 }
25327 else
25328 {
25329 @@ -1244,15 +1274,15 @@ static u32 GetPSDData(PADAPTER pAdapter,
25330 */
25331 u32 mp_query_psd(PADAPTER pAdapter, u8 *data)
25332 {
25333 - u8 *val;
25334 u32 i, psd_pts=0, psd_start=0, psd_stop=0;
25335 u32 psd_data=0;
25336 -
25337 -
25338 +
25339 +#ifdef PLATFORM_LINUX
25340 if (!netif_running(pAdapter->pnetdev)) {
25341 RT_TRACE(_module_mp_, _drv_warning_, ("mp_query_psd: Fail! interface not opened!\n"));
25342 return 0;
25343 }
25344 +#endif
25345
25346 if (check_fwstate(&pAdapter->mlmepriv, WIFI_MP_STATE) == _FALSE) {
25347 RT_TRACE(_module_mp_, _drv_warning_, ("mp_query_psd: Fail! not in MP mode!\n"));
25348 @@ -1290,28 +1320,5 @@ u32 mp_query_psd(PADAPTER pAdapter, u8 *
25349 return strlen(data)+1;
25350 }
25351
25352 -
25353 -u32 rtw_atoi(u8* s)
25354 -{
25355 -
25356 - int num=0,flag=0;
25357 - int i;
25358 - for(i=0;i<=strlen(s);i++)
25359 - {
25360 - if(s[i] >= '0' && s[i] <= '9')
25361 - num = num * 10 + s[i] -'0';
25362 - else if(s[0] == '-' && i==0)
25363 - flag =1;
25364 - else
25365 - break;
25366 - }
25367 -
25368 - if(flag == 1)
25369 - num = num * -1;
25370 -
25371 - return(num);
25372 -
25373 -}
25374 -
25375 #endif
25376
25377 --- a/drivers/net/wireless/rtl8192cu/core/rtw_mp_ioctl.c
25378 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_mp_ioctl.c
25379 @@ -1,7 +1,7 @@
25380 /******************************************************************************
25381 *
25382 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
25383 - *
25384 + *
25385 * This program is free software; you can redistribute it and/or modify it
25386 * under the terms of version 2 of the GNU General Public License as
25387 * published by the Free Software Foundation.
25388 @@ -56,7 +56,9 @@ _func_exit_;
25389 //**************** oid_rtl_seg_81_87_80 section start ****************
25390 NDIS_STATUS oid_rt_pro_write_bb_reg_hdl(struct oid_par_priv *poid_par_priv)
25391 {
25392 +#ifdef PLATFORM_OS_XP
25393 _irqL oldirql;
25394 +#endif
25395 struct bb_reg_param *pbbreg;
25396 u16 offset;
25397 u32 value;
25398 @@ -95,7 +97,9 @@ _func_exit_;
25399 //------------------------------------------------------------------------------
25400 NDIS_STATUS oid_rt_pro_read_bb_reg_hdl(struct oid_par_priv *poid_par_priv)
25401 {
25402 +#ifdef PLATFORM_OS_XP
25403 _irqL oldirql;
25404 +#endif
25405 struct bb_reg_param *pbbreg;
25406 u16 offset;
25407 u32 value;
25408 @@ -134,7 +138,9 @@ _func_exit_;
25409 //------------------------------------------------------------------------------
25410 NDIS_STATUS oid_rt_pro_write_rf_reg_hdl(struct oid_par_priv *poid_par_priv)
25411 {
25412 +#ifdef PLATFORM_OS_XP
25413 _irqL oldirql;
25414 +#endif
25415 struct rf_reg_param *pbbreg;
25416 u8 path;
25417 u8 offset;
25418 @@ -180,7 +186,9 @@ _func_exit_;
25419 //------------------------------------------------------------------------------
25420 NDIS_STATUS oid_rt_pro_read_rf_reg_hdl(struct oid_par_priv *poid_par_priv)
25421 {
25422 +#ifdef PLATFORM_OS_XP
25423 _irqL oldirql;
25424 +#endif
25425 struct rf_reg_param *pbbreg;
25426 u8 path;
25427 u8 offset;
25428 @@ -231,7 +239,9 @@ _func_exit_;
25429 //------------------------------------------------------------------------------
25430 NDIS_STATUS oid_rt_pro_set_data_rate_hdl(struct oid_par_priv *poid_par_priv)
25431 {
25432 +#ifdef PLATFORM_OS_XP
25433 _irqL oldirql;
25434 +#endif
25435 u32 ratevalue;//4
25436 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25437 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25438 @@ -266,9 +276,10 @@ _func_exit_;
25439 //------------------------------------------------------------------------------
25440 NDIS_STATUS oid_rt_pro_start_test_hdl(struct oid_par_priv *poid_par_priv)
25441 {
25442 +#ifdef PLATFORM_OS_XP
25443 _irqL oldirql;
25444 +#endif
25445 u32 mode;
25446 - u8 val8;
25447 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25448 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25449
25450 @@ -306,7 +317,9 @@ _func_exit_;
25451 //------------------------------------------------------------------------------
25452 NDIS_STATUS oid_rt_pro_stop_test_hdl(struct oid_par_priv *poid_par_priv)
25453 {
25454 +#ifdef PLATFORM_OS_XP
25455 _irqL oldirql;
25456 +#endif
25457 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25458 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25459
25460 @@ -330,7 +343,9 @@ _func_exit_;
25461 //------------------------------------------------------------------------------
25462 NDIS_STATUS oid_rt_pro_set_channel_direct_call_hdl(struct oid_par_priv *poid_par_priv)
25463 {
25464 +#ifdef PLATFORM_OS_XP
25465 _irqL oldirql;
25466 +#endif
25467 u32 Channel;
25468 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25469 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25470 @@ -367,10 +382,13 @@ _func_exit_;
25471 //------------------------------------------------------------------------------
25472 NDIS_STATUS oid_rt_set_bandwidth_hdl(struct oid_par_priv *poid_par_priv)
25473 {
25474 +#ifdef PLATFORM_OS_XP
25475 _irqL oldirql;
25476 - u16 bandwidth, channel_offset;
25477 +#endif
25478 + u16 bandwidth;
25479 + u16 channel_offset;
25480 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25481 - PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25482 + PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
25483
25484 _func_enter_;
25485
25486 @@ -384,12 +402,15 @@ _func_enter_;
25487 return NDIS_STATUS_INVALID_LENGTH;
25488
25489 bandwidth = *((u32*)poid_par_priv->information_buf);//4
25490 + channel_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
25491 +
25492 if (bandwidth != HT_CHANNEL_WIDTH_40)
25493 bandwidth = HT_CHANNEL_WIDTH_20;
25494 - Adapter->mppriv.bandwidth = (u8)bandwidth;
25495 + padapter->mppriv.bandwidth = (u8)bandwidth;
25496 + padapter->mppriv.prime_channel_offset = (u8)channel_offset;
25497
25498 _irqlevel_changed_(&oldirql, LOWER);
25499 - SetBandwidth(Adapter);
25500 + SetBandwidth(padapter);
25501 _irqlevel_changed_(&oldirql, RAISE);
25502
25503 RT_TRACE(_module_mp_, _drv_notice_,
25504 @@ -403,7 +424,9 @@ _func_exit_;
25505 //------------------------------------------------------------------------------
25506 NDIS_STATUS oid_rt_pro_set_antenna_bb_hdl(struct oid_par_priv *poid_par_priv)
25507 {
25508 +#ifdef PLATFORM_OS_XP
25509 _irqL oldirql;
25510 +#endif
25511 u32 antenna;
25512 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25513 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25514 @@ -440,7 +463,9 @@ _func_exit_;
25515
25516 NDIS_STATUS oid_rt_pro_set_tx_power_control_hdl(struct oid_par_priv *poid_par_priv)
25517 {
25518 +#ifdef PLATFORM_OS_XP
25519 _irqL oldirql;
25520 +#endif
25521 u32 tx_pwr_idx;
25522 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25523 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25524 @@ -599,7 +624,9 @@ _func_exit_;
25525 //------------------------------------------------------------------------------
25526 NDIS_STATUS oid_rt_reset_phy_rx_packet_count_hdl(struct oid_par_priv *poid_par_priv)
25527 {
25528 +#ifdef PLATFORM_OS_XP
25529 _irqL oldirql;
25530 +#endif
25531 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25532 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25533
25534 @@ -621,7 +648,9 @@ _func_exit_;
25535 //------------------------------------------------------------------------------
25536 NDIS_STATUS oid_rt_get_phy_rx_packet_received_hdl(struct oid_par_priv *poid_par_priv)
25537 {
25538 +#ifdef PLATFORM_OS_XP
25539 _irqL oldirql;
25540 +#endif
25541 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25542 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25543
25544 @@ -650,7 +679,9 @@ _func_exit_;
25545 //------------------------------------------------------------------------------
25546 NDIS_STATUS oid_rt_get_phy_rx_packet_crc32_error_hdl(struct oid_par_priv *poid_par_priv)
25547 {
25548 +#ifdef PLATFORM_OS_XP
25549 _irqL oldirql;
25550 +#endif
25551 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25552 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25553
25554 @@ -680,7 +711,9 @@ _func_exit_;
25555 //**************** oid_rtl_seg_81_80_20 section end ****************
25556 NDIS_STATUS oid_rt_pro_set_continuous_tx_hdl(struct oid_par_priv *poid_par_priv)
25557 {
25558 +#ifdef PLATFORM_OS_XP
25559 _irqL oldirql;
25560 +#endif
25561 u32 bStartTest;
25562 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25563 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25564 @@ -700,7 +733,7 @@ _func_enter_;
25565 struct mp_priv *pmp_priv = &Adapter->mppriv;
25566 if (pmp_priv->tx.stop == 0) {
25567 pmp_priv->tx.stop = 1;
25568 - DBG_8192C("%s: pkt tx is running...\n", __func__);
25569 + DBG_871X("%s: pkt tx is running...\n", __func__);
25570 rtw_msleep_os(5);
25571 }
25572 pmp_priv->tx.stop = 0;
25573 @@ -716,7 +749,9 @@ _func_exit_;
25574
25575 NDIS_STATUS oid_rt_pro_set_single_carrier_tx_hdl(struct oid_par_priv *poid_par_priv)
25576 {
25577 +#ifdef PLATFORM_OS_XP
25578 _irqL oldirql;
25579 +#endif
25580 u32 bStartTest;
25581 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25582 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25583 @@ -736,7 +771,7 @@ _func_enter_;
25584 struct mp_priv *pmp_priv = &Adapter->mppriv;
25585 if (pmp_priv->tx.stop == 0) {
25586 pmp_priv->tx.stop = 1;
25587 - DBG_8192C("%s: pkt tx is running...\n", __func__);
25588 + DBG_871X("%s: pkt tx is running...\n", __func__);
25589 rtw_msleep_os(5);
25590 }
25591 pmp_priv->tx.stop = 0;
25592 @@ -752,7 +787,9 @@ _func_exit_;
25593
25594 NDIS_STATUS oid_rt_pro_set_carrier_suppression_tx_hdl(struct oid_par_priv *poid_par_priv)
25595 {
25596 +#ifdef PLATFORM_OS_XP
25597 _irqL oldirql;
25598 +#endif
25599 u32 bStartTest;
25600 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25601 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25602 @@ -772,7 +809,7 @@ _func_enter_;
25603 struct mp_priv *pmp_priv = &Adapter->mppriv;
25604 if (pmp_priv->tx.stop == 0) {
25605 pmp_priv->tx.stop = 1;
25606 - DBG_8192C("%s: pkt tx is running...\n", __func__);
25607 + DBG_871X("%s: pkt tx is running...\n", __func__);
25608 rtw_msleep_os(5);
25609 }
25610 pmp_priv->tx.stop = 0;
25611 @@ -788,7 +825,9 @@ _func_exit_;
25612
25613 NDIS_STATUS oid_rt_pro_set_single_tone_tx_hdl(struct oid_par_priv *poid_par_priv)
25614 {
25615 +#ifdef PLATFORM_OS_XP
25616 _irqL oldirql;
25617 +#endif
25618 u32 bStartTest;
25619 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25620 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25621 @@ -820,7 +859,9 @@ NDIS_STATUS oid_rt_pro_trigger_gpio_hdl(
25622 {
25623 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25624
25625 +#ifdef PLATFORM_OS_XP
25626 _irqL oldirql;
25627 +#endif
25628 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25629 _func_enter_;
25630
25631 @@ -828,7 +869,7 @@ _func_enter_;
25632 return NDIS_STATUS_NOT_ACCEPTED;
25633
25634 _irqlevel_changed_(&oldirql, LOWER);
25635 - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_TRIGGER_GPIO_0, 0);
25636 + rtw_hal_set_hwreg(Adapter, HW_VAR_TRIGGER_GPIO_0, 0);
25637 _irqlevel_changed_(&oldirql, RAISE);
25638
25639 _func_exit_;
25640 @@ -842,7 +883,9 @@ NDIS_STATUS oid_rt_pro8711_join_bss_hdl(
25641 #if 0
25642 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25643
25644 +#ifdef PLATFORM_OS_XP
25645 _irqL oldirql;
25646 +#endif
25647 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25648
25649 PNDIS_802_11_SSID pssid;
25650 @@ -878,7 +921,9 @@ _func_exit_;
25651 //------------------------------------------------------------------------------
25652 NDIS_STATUS oid_rt_pro_read_register_hdl(struct oid_par_priv *poid_par_priv)
25653 {
25654 +#ifdef PLATFORM_OS_XP
25655 _irqL oldirql;
25656 +#endif
25657 pRW_Reg RegRWStruct;
25658 u32 offset, width;
25659 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25660 @@ -928,7 +973,9 @@ _func_exit_;
25661 //------------------------------------------------------------------------------
25662 NDIS_STATUS oid_rt_pro_write_register_hdl(struct oid_par_priv *poid_par_priv)
25663 {
25664 +#ifdef PLATFORM_OS_XP
25665 _irqL oldirql;
25666 +#endif
25667 pRW_Reg RegRWStruct;
25668 u32 offset, width, value;
25669 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25670 @@ -989,12 +1036,13 @@ _func_exit_;
25671 //------------------------------------------------------------------------------
25672 NDIS_STATUS oid_rt_pro_burst_read_register_hdl(struct oid_par_priv *poid_par_priv)
25673 {
25674 - PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25675 -
25676 +#if 0
25677 +#ifdef PLATFORM_OS_XP
25678 _irqL oldirql;
25679 - NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25680 -
25681 +#endif
25682 pBurst_RW_Reg pBstRwReg;
25683 + NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25684 + PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
25685
25686 _func_enter_;
25687
25688 @@ -1002,30 +1050,34 @@ _func_enter_;
25689
25690 if (poid_par_priv->type_of_oid != QUERY_OID)
25691 return NDIS_STATUS_NOT_ACCEPTED;
25692 -#if 0
25693 +
25694 pBstRwReg = (pBurst_RW_Reg)poid_par_priv->information_buf;
25695
25696 _irqlevel_changed_(&oldirql, LOWER);
25697 - rtw_read_mem(Adapter, pBstRwReg->offset, (u32)pBstRwReg->len, pBstRwReg->Data);
25698 - _irqlevel_changed_(&oldirql,RAISE);
25699 + rtw_read_mem(padapter, pBstRwReg->offset, (u32)pBstRwReg->len, pBstRwReg->Data);
25700 + _irqlevel_changed_(&oldirql, RAISE);
25701
25702 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
25703 -#endif
25704 +
25705 RT_TRACE(_module_mp_, _drv_info_, ("-oid_rt_pro_burst_read_register_hdl\n"));
25706
25707 _func_exit_;
25708
25709 return status;
25710 +#else
25711 + return 0;
25712 +#endif
25713 }
25714 //------------------------------------------------------------------------------
25715 NDIS_STATUS oid_rt_pro_burst_write_register_hdl(struct oid_par_priv *poid_par_priv)
25716 {
25717 - PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25718 -
25719 +#if 0
25720 +#ifdef PLATFORM_OS_XP
25721 _irqL oldirql;
25722 - NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25723 -
25724 +#endif
25725 pBurst_RW_Reg pBstRwReg;
25726 + NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25727 + PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
25728
25729 _func_enter_;
25730
25731 @@ -1033,27 +1085,33 @@ _func_enter_;
25732
25733 if (poid_par_priv->type_of_oid != SET_OID)
25734 return NDIS_STATUS_NOT_ACCEPTED;
25735 -#if 0
25736 +
25737 pBstRwReg = (pBurst_RW_Reg)poid_par_priv->information_buf;
25738
25739 _irqlevel_changed_(&oldirql, LOWER);
25740 - rtw_write_mem(Adapter, pBstRwReg->offset, (u32)pBstRwReg->len, pBstRwReg->Data);
25741 + rtw_write_mem(padapter, pBstRwReg->offset, (u32)pBstRwReg->len, pBstRwReg->Data);
25742 _irqlevel_changed_(&oldirql, RAISE);
25743 -#endif
25744 +
25745 RT_TRACE(_module_mp_, _drv_info_, ("-oid_rt_pro_burst_write_register_hdl\n"));
25746
25747 _func_exit_;
25748
25749 return status;
25750 +#else
25751 + return 0;
25752 +#endif
25753 }
25754 //------------------------------------------------------------------------------
25755 NDIS_STATUS oid_rt_pro_write_txcmd_hdl(struct oid_par_priv *poid_par_priv)
25756 {
25757 +#if 0
25758 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25759 -/*
25760 +
25761 PADAPTER Adapter = (PADAPTER)( poid_par_priv->adapter_context);
25762
25763 +#ifdef PLATFORM_OS_XP
25764 _irqL oldirql;
25765 +#endif
25766
25767 TX_CMD_Desc *TxCmd_Info;
25768
25769 @@ -1078,7 +1136,6 @@ _func_enter_;
25770 rtw_write32(Adapter, TxCmd_Info->offset + 4, (unsigned int)TxCmd_Info->TxCMD.value[1]);
25771
25772 _irqlevel_changed_(&oldirql, RAISE);
25773 -*/
25774
25775 RT_TRACE(_module_mp_, _drv_notice_,
25776 ("-Set OID_RT_PRO_WRITE_TXCMD: status=0x%08X\n", status));
25777 @@ -1086,17 +1143,21 @@ _func_enter_;
25778 _func_exit_;
25779
25780 return status;
25781 +#else
25782 + return 0;
25783 +#endif
25784 }
25785
25786 //------------------------------------------------------------------------------
25787 NDIS_STATUS oid_rt_pro_read16_eeprom_hdl(struct oid_par_priv *poid_par_priv)
25788 {
25789 - PADAPTER Adapter = (PADAPTER)( poid_par_priv->adapter_context);
25790 -
25791 +#if 0
25792 +#ifdef PLATFORM_OS_XP
25793 _irqL oldirql;
25794 - NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25795 -
25796 +#endif
25797 pEEPROM_RWParam pEEPROM;
25798 + NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25799 + PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
25800
25801 _func_enter_;
25802
25803 @@ -1104,11 +1165,11 @@ _func_enter_;
25804
25805 if (poid_par_priv->type_of_oid != QUERY_OID)
25806 return NDIS_STATUS_NOT_ACCEPTED;
25807 -#if 0
25808 +
25809 pEEPROM = (pEEPROM_RWParam)poid_par_priv->information_buf;
25810
25811 _irqlevel_changed_(&oldirql, LOWER);
25812 - pEEPROM->value = eeprom_read16(Adapter, (u16)(pEEPROM->offset >> 1));
25813 + pEEPROM->value = eeprom_read16(padapter, (u16)(pEEPROM->offset >> 1));
25814 _irqlevel_changed_(&oldirql, RAISE);
25815
25816 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
25817 @@ -1116,21 +1177,25 @@ _func_enter_;
25818 RT_TRACE(_module_mp_, _drv_notice_,
25819 ("-Query OID_RT_PRO_READ16_EEPROM: offset=0x%x value=0x%x\n",
25820 pEEPROM->offset, pEEPROM->value));
25821 -#endif
25822 +
25823 _func_exit_;
25824
25825 return status;
25826 +#else
25827 + return 0;
25828 +#endif
25829 }
25830
25831 //------------------------------------------------------------------------------
25832 NDIS_STATUS oid_rt_pro_write16_eeprom_hdl (struct oid_par_priv *poid_par_priv)
25833 {
25834 - PADAPTER Adapter = (PADAPTER)( poid_par_priv->adapter_context);
25835 -
25836 +#if 0
25837 +#ifdef PLATFORM_OS_XP
25838 _irqL oldirql;
25839 - NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25840 -
25841 +#endif
25842 pEEPROM_RWParam pEEPROM;
25843 + NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25844 + PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
25845
25846 _func_enter_;
25847
25848 @@ -1138,18 +1203,21 @@ _func_enter_;
25849
25850 if (poid_par_priv->type_of_oid != SET_OID)
25851 return NDIS_STATUS_NOT_ACCEPTED;
25852 -#if 0
25853 +
25854 pEEPROM = (pEEPROM_RWParam)poid_par_priv->information_buf;
25855
25856 _irqlevel_changed_(&oldirql, LOWER);
25857 - eeprom_write16(Adapter, (u16)(pEEPROM->offset >> 1), pEEPROM->value);
25858 + eeprom_write16(padapter, (u16)(pEEPROM->offset >> 1), pEEPROM->value);
25859 _irqlevel_changed_(&oldirql, RAISE);
25860
25861 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
25862 -#endif
25863 +
25864 _func_exit_;
25865
25866 return status;
25867 +#else
25868 + return 0;
25869 +#endif
25870 }
25871 //------------------------------------------------------------------------------
25872 NDIS_STATUS oid_rt_pro8711_wi_poll_hdl(struct oid_par_priv *poid_par_priv)
25873 @@ -1227,7 +1295,9 @@ NDIS_STATUS oid_rt_rd_attrib_mem_hdl(str
25874 struct io_queue *pio_queue = (struct io_queue *)Adapter->pio_queue;
25875 struct intf_hdl *pintfhdl = &pio_queue->intf;
25876
25877 - _irqL oldirql;
25878 +#ifdef PLATFORM_OS_XP
25879 + _irqL oldirql;
25880 +#endif
25881 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25882
25883 #ifdef CONFIG_SDIO_HCI
25884 @@ -1268,7 +1338,9 @@ NDIS_STATUS oid_rt_wr_attrib_mem_hdl (st
25885 struct io_queue *pio_queue = (struct io_queue *)Adapter->pio_queue;
25886 struct intf_hdl *pintfhdl = &pio_queue->intf;
25887
25888 +#ifdef PLATFORM_OS_XP
25889 _irqL oldirql;
25890 +#endif
25891 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25892
25893 #ifdef CONFIG_SDIO_HCI
25894 @@ -1304,7 +1376,9 @@ NDIS_STATUS oid_rt_pro_set_rf_intfs_hdl
25895 #if 0
25896 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25897
25898 +#ifdef PLATFORM_OS_XP
25899 _irqL oldirql;
25900 +#endif
25901 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25902
25903 _func_enter_;
25904 @@ -1404,7 +1478,9 @@ NDIS_STATUS oid_rt_pro_set_data_rate_ex_
25905 {
25906 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25907
25908 +#ifdef PLATFORM_OS_XP
25909 _irqL oldirql;
25910 +#endif
25911 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25912
25913 _func_enter_;
25914 @@ -1428,7 +1504,9 @@ _func_exit_;
25915 //-----------------------------------------------------------------------------
25916 NDIS_STATUS oid_rt_get_thermal_meter_hdl(struct oid_par_priv *poid_par_priv)
25917 {
25918 +#ifdef PLATFORM_OS_XP
25919 _irqL oldirql;
25920 +#endif
25921 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25922 u8 thermal = 0;
25923 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25924 @@ -1460,7 +1538,9 @@ NDIS_STATUS oid_rt_pro_read_tssi_hdl(str
25925 #if 0
25926 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25927
25928 +#ifdef PLATFORM_OS_XP
25929 _irqL oldirql;
25930 +#endif
25931 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25932
25933 _func_enter_;
25934 @@ -1500,7 +1580,9 @@ _func_exit_;
25935 //------------------------------------------------------------------------------
25936 NDIS_STATUS oid_rt_pro_set_power_tracking_hdl(struct oid_par_priv *poid_par_priv)
25937 {
25938 +#ifdef PLATFORM_OS_XP
25939 _irqL oldirql;
25940 +#endif
25941 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25942 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25943
25944 @@ -1534,14 +1616,15 @@ _func_exit_;
25945 //-----------------------------------------------------------------------------
25946 NDIS_STATUS oid_rt_pro_set_basic_rate_hdl(struct oid_par_priv *poid_par_priv)
25947 {
25948 - PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25949 -
25950 +#if 0
25951 +#ifdef PLATFORM_OS_XP
25952 _irqL oldirql;
25953 - NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25954 -
25955 +#endif
25956 u32 ratevalue;
25957 u8 datarates[NumRates];
25958 int i;
25959 + NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25960 + PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
25961
25962 _func_enter_;
25963
25964 @@ -1562,7 +1645,7 @@ _func_enter_;
25965
25966 _irqlevel_changed_(&oldirql, LOWER);
25967
25968 - if (rtw_setbasicrate_cmd(Adapter, datarates) != _SUCCESS)
25969 + if (rtw_setbasicrate_cmd(padapter, datarates) != _SUCCESS)
25970 status = NDIS_STATUS_NOT_ACCEPTED;
25971
25972 _irqlevel_changed_(&oldirql, RAISE);
25973 @@ -1573,6 +1656,9 @@ _func_enter_;
25974 _func_exit_;
25975
25976 return status;
25977 +#else
25978 + return 0;
25979 +#endif
25980 }
25981 //------------------------------------------------------------------------------
25982 NDIS_STATUS oid_rt_pro_qry_pwrstate_hdl(struct oid_par_priv *poid_par_priv)
25983 @@ -1646,7 +1732,9 @@ NDIS_STATUS oid_rt_pro_h2c_set_rate_tabl
25984 #if 0
25985 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25986
25987 +#ifdef PLATFORM_OS_XP
25988 _irqL oldirql;
25989 +#endif
25990 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25991
25992 struct setratable_parm *prate_table;
25993 @@ -1833,13 +1921,15 @@ NDIS_STATUS oid_rt_pro_encryption_ctrl_h
25994 NDIS_STATUS oid_rt_pro_add_sta_info_hdl(struct oid_par_priv *poid_par_priv)
25995 {
25996 #if 0
25997 - PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25998 + PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25999
26000 - _irqL oldirql;
26001 - NDIS_STATUS status = NDIS_STATUS_SUCCESS;
26002 +#ifdef PLATFORM_OS_XP
26003 + _irqL oldirql;
26004 +#endif
26005 + NDIS_STATUS status = NDIS_STATUS_SUCCESS;
26006
26007 - struct sta_info *psta = NULL;
26008 - UCHAR *macaddr;
26009 + struct sta_info *psta = NULL;
26010 + UCHAR *macaddr;
26011
26012
26013 if (poid_par_priv->type_of_oid != SET_OID)
26014 @@ -1881,13 +1971,15 @@ NDIS_STATUS oid_rt_pro_add_sta_info_hdl(
26015 NDIS_STATUS oid_rt_pro_dele_sta_info_hdl(struct oid_par_priv *poid_par_priv)
26016 {
26017 #if 0
26018 - PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
26019 + PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
26020
26021 - _irqL irqL;
26022 - NDIS_STATUS status = NDIS_STATUS_SUCCESS;
26023 +#ifdef PLATFORM_OS_XP
26024 + _irqL oldirql;
26025 +#endif
26026 + NDIS_STATUS status = NDIS_STATUS_SUCCESS;
26027
26028 - struct sta_info *psta = NULL;
26029 - UCHAR *macaddr;
26030 + struct sta_info *psta = NULL;
26031 + UCHAR *macaddr;
26032
26033
26034 if (poid_par_priv->type_of_oid != SET_OID)
26035 @@ -1914,17 +2006,17 @@ NDIS_STATUS oid_rt_pro_dele_sta_info_hdl
26036 #endif
26037 }
26038 //------------------------------------------------------------------------------
26039 +#if 0
26040 #include <sdio_osintf.h>
26041 -u32 mp_query_drv_var(_adapter *padapter, u8 offset, u32 var)
26042 +static u32 mp_query_drv_var(_adapter *padapter, u8 offset, u32 var)
26043 {
26044 -#if 0
26045 #ifdef CONFIG_SDIO_HCI
26046
26047 if (offset == 1) {
26048 u16 tmp_blk_num;
26049 tmp_blk_num = rtw_read16(padapter, SDIO_RX0_RDYBLK_NUM);
26050 - RT_TRACE(_module_mp_, _drv_err_, ("Query Information, mp_query_drv_var SDIO_RX0_RDYBLK_NUM=0x%x padapter->dvobjpriv.rxblknum=0x%x\n", tmp_blk_num, padapter->dvobjpriv.rxblknum));
26051 - if (padapter->dvobjpriv.rxblknum != tmp_blk_num) {
26052 + RT_TRACE(_module_mp_, _drv_err_, ("Query Information, mp_query_drv_var SDIO_RX0_RDYBLK_NUM=0x%x adapter_to_dvobj(padapter)->rxblknum=0x%x\n", tmp_blk_num, adapter_to_dvobj(padapter)->rxblknum));
26053 + if (adapter_to_dvobj(padapter)->rxblknum != tmp_blk_num) {
26054 RT_TRACE(_module_mp_,_drv_err_, ("Query Information, mp_query_drv_var call recv rx\n"));
26055 // sd_recv_rxfifo(padapter);
26056 }
26057 @@ -1973,37 +2065,37 @@ u32 mp_query_drv_var(_adapter *padapter,
26058 else if(offset >110 &&offset <116){
26059 if(115==offset){
26060 RT_TRACE(_module_mp_, _drv_emerg_, (" mp_query_drv_var(_drv_emerg_): offset(%d): query TRX access type: [tx_block_mode=%x,rx_block_mode=%x]\n",\
26061 - offset,padapter->dvobjpriv.tx_block_mode,padapter->dvobjpriv.rx_block_mode));
26062 + offset, adapter_to_dvobj(padapter)->tx_block_mode, adapter_to_dvobj(padapter)->rx_block_mode));
26063 }
26064 else {
26065 switch(offset){
26066 case 111:
26067 - padapter->dvobjpriv.tx_block_mode=1;
26068 - padapter->dvobjpriv.rx_block_mode=1;
26069 + adapter_to_dvobj(padapter)->tx_block_mode=1;
26070 + adapter_to_dvobj(padapter)->rx_block_mode=1;
26071 RT_TRACE(_module_mp_, _drv_emerg_, \
26072 (" mp_query_drv_var(_drv_emerg_): offset(%d): SET TRX access type:(TX block/RX block) [tx_block_mode=%x,rx_block_mode=%x]\n",\
26073 - offset,padapter->dvobjpriv.tx_block_mode,padapter->dvobjpriv.rx_block_mode));
26074 + offset, adapter_to_dvobj(padapter)->tx_block_mode, adapter_to_dvobj(padapter)->rx_block_mode));
26075 break;
26076 case 112:
26077 - padapter->dvobjpriv.tx_block_mode=1;
26078 - padapter->dvobjpriv.rx_block_mode=0;
26079 + adapter_to_dvobj(padapter)->tx_block_mode=1;
26080 + adapter_to_dvobj(padapter)->rx_block_mode=0;
26081 RT_TRACE(_module_mp_, _drv_emerg_, \
26082 (" mp_query_drv_var(_drv_emerg_): offset(%d): SET TRX access type:(TX block/RX byte) [tx_block_mode=%x,rx_block_mode=%x]\n",\
26083 - offset,padapter->dvobjpriv.tx_block_mode,padapter->dvobjpriv.rx_block_mode));
26084 + offset, adapter_to_dvobj(padapter)->tx_block_mode, adapter_to_dvobj(padapter)->rx_block_mode));
26085 break;
26086 case 113:
26087 - padapter->dvobjpriv.tx_block_mode=0;
26088 - padapter->dvobjpriv.rx_block_mode=1;
26089 + adapter_to_dvobj(padapter)->tx_block_mode=0;
26090 + adapter_to_dvobj(padapter)->rx_block_mode=1;
26091 RT_TRACE(_module_mp_, _drv_emerg_, \
26092 (" mp_query_drv_var(_drv_emerg_): offset(%d): SET TRX access type:(TX byte/RX block) [tx_block_mode=%x,rx_block_mode=%x]\n",\
26093 - offset,padapter->dvobjpriv.tx_block_mode,padapter->dvobjpriv.rx_block_mode));
26094 + offset, adapter_to_dvobj(padapter)->tx_block_mode, adapter_to_dvobj(padapter)->rx_block_mode));
26095 break;
26096 case 114:
26097 - padapter->dvobjpriv.tx_block_mode=0;
26098 - padapter->dvobjpriv.rx_block_mode=0;
26099 + adapter_to_dvobj(padapter)->tx_block_mode=0;
26100 + adapter_to_dvobj(padapter)->rx_block_mode=0;
26101 RT_TRACE(_module_mp_, _drv_emerg_, \
26102 (" mp_query_drv_var(_drv_emerg_): offset(%d): SET TRX access type:(TX byte/RX byte) [tx_block_mode=%x,rx_block_mode=%x]\n",\
26103 - offset,padapter->dvobjpriv.tx_block_mode,padapter->dvobjpriv.rx_block_mode));
26104 + offset, adapter_to_dvobj(padapter)->tx_block_mode, adapter_to_dvobj(padapter)->rx_block_mode));
26105 break;
26106 default :
26107 break;
26108 @@ -2088,20 +2180,20 @@ u32 mp_query_drv_var(_adapter *padapter,
26109 #endif
26110
26111 return var;
26112 -#else
26113 - return 0;
26114 -#endif
26115 }
26116 +#endif
26117
26118 NDIS_STATUS oid_rt_pro_query_dr_variable_hdl(struct oid_par_priv *poid_par_priv)
26119 {
26120 #if 0
26121 - PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
26122 + PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
26123
26124 - _irqL oldirql;
26125 - NDIS_STATUS status = NDIS_STATUS_SUCCESS;
26126 +#ifdef PLATFORM_OS_XP
26127 + _irqL oldirql;
26128 +#endif
26129 + NDIS_STATUS status = NDIS_STATUS_SUCCESS;
26130
26131 - DR_VARIABLE_STRUCT *pdrv_var;
26132 + DR_VARIABLE_STRUCT *pdrv_var;
26133
26134
26135 if (poid_par_priv->type_of_oid != QUERY_OID)
26136 @@ -2133,12 +2225,12 @@ NDIS_STATUS oid_rt_pro_query_dr_variable
26137 //------------------------------------------------------------------------------
26138 NDIS_STATUS oid_rt_pro_rx_packet_type_hdl(struct oid_par_priv *poid_par_priv)
26139 {
26140 +#if 0
26141 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
26142
26143 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
26144
26145 RT_TRACE(_module_mp_, _drv_err_, ("oid_rt_pro_rx_packet_type_hdl...................\n"));
26146 -#if 0
26147
26148 if (poid_par_priv->information_buf_len < sizeof (UCHAR)) {
26149 status = NDIS_STATUS_INVALID_LENGTH;
26150 @@ -2178,7 +2270,9 @@ NDIS_STATUS oid_rt_pro_rx_packet_type_hd
26151 //------------------------------------------------------------------------------
26152 NDIS_STATUS oid_rt_pro_read_efuse_hdl(struct oid_par_priv *poid_par_priv)
26153 {
26154 +#ifdef PLATFORM_OS_XP
26155 _irqL oldirql;
26156 +#endif
26157 PEFUSE_ACCESS_STRUCT pefuse;
26158 u8 *data;
26159 u16 addr = 0, cnts = 0, max_available_size = 0;
26160 @@ -2224,8 +2318,9 @@ _func_exit_;
26161 //------------------------------------------------------------------------------
26162 NDIS_STATUS oid_rt_pro_write_efuse_hdl(struct oid_par_priv *poid_par_priv)
26163 {
26164 -
26165 +#ifdef PLATFORM_OS_XP
26166 _irqL oldirql;
26167 +#endif
26168 PEFUSE_ACCESS_STRUCT pefuse;
26169 u8 *data;
26170 u16 addr = 0, cnts = 0, max_available_size = 0;
26171 @@ -2266,9 +2361,10 @@ _func_exit_;
26172 //------------------------------------------------------------------------------
26173 NDIS_STATUS oid_rt_pro_rw_efuse_pgpkt_hdl(struct oid_par_priv *poid_par_priv)
26174 {
26175 +#ifdef PLATFORM_OS_XP
26176 _irqL oldirql;
26177 +#endif
26178 PPGPKT_STRUCT ppgpkt;
26179 - u8 tmpidx;
26180 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
26181 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
26182
26183 @@ -2322,7 +2418,9 @@ _func_exit_;
26184 //------------------------------------------------------------------------------
26185 NDIS_STATUS oid_rt_get_efuse_current_size_hdl(struct oid_par_priv *poid_par_priv)
26186 {
26187 +#ifdef PLATFORM_OS_XP
26188 _irqL oldirql;
26189 +#endif
26190 u16 size;
26191 u8 ret;
26192 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
26193 @@ -2354,7 +2452,6 @@ NDIS_STATUS oid_rt_get_efuse_max_size_hd
26194 {
26195 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
26196 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
26197 - u16 max_size;
26198
26199 _func_enter_;
26200
26201 @@ -2398,7 +2495,9 @@ _func_exit_;
26202 //------------------------------------------------------------------------------
26203 NDIS_STATUS oid_rt_pro_efuse_map_hdl(struct oid_par_priv *poid_par_priv)
26204 {
26205 +#ifdef PLATFORM_OS_XP
26206 _irqL oldirql;
26207 +#endif
26208 u8 *data;
26209 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
26210 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
26211 @@ -2461,7 +2560,9 @@ NDIS_STATUS oid_rt_set_crystal_cap_hdl(s
26212 #if 0
26213 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
26214
26215 +#ifdef PLATFORM_OS_XP
26216 _irqL oldirql;
26217 +#endif
26218
26219 u32 crystal_cap = 0;
26220
26221 @@ -2491,11 +2592,13 @@ _func_exit_;
26222
26223 NDIS_STATUS oid_rt_set_rx_packet_type_hdl(struct oid_par_priv *poid_par_priv)
26224 {
26225 - NDIS_STATUS status = NDIS_STATUS_SUCCESS;
26226 - PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
26227 +#ifdef PLATFORM_OS_XP
26228 _irqL oldirql;
26229 +#endif
26230 u8 rx_pkt_type;
26231 - u32 rcr_val32;
26232 +// u32 rcr_val32;
26233 + NDIS_STATUS status = NDIS_STATUS_SUCCESS;
26234 +// PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
26235
26236 _func_enter_;
26237
26238 @@ -2528,9 +2631,9 @@ _func_enter_;
26239 else{
26240 rcr_val8 &= ~(RCR_AAP|RCR_APM|RCR_AM|RCR_AB|RCR_ACRC32);
26241 }
26242 - rtw_write8(Adapter, 0x10250048,rcr_val8);
26243 + rtw_write8(padapter, 0x10250048,rcr_val8);
26244 #else
26245 - rcr_val32 = rtw_read32(Adapter, RCR);//RCR = 0x10250048
26246 + rcr_val32 = rtw_read32(padapter, RCR);//RCR = 0x10250048
26247 rcr_val32 &= ~(RCR_CBSSID|RCR_AB|RCR_AM|RCR_APM|RCR_AAP);
26248 #if 0
26249 if(rx_pkt_type == RX_PKT_BROADCAST){
26250 @@ -2565,12 +2668,12 @@ _func_enter_;
26251 }
26252
26253 if (rx_pkt_type == RX_PKT_DEST_ADDR) {
26254 - Adapter->mppriv.check_mp_pkt = 1;
26255 + padapter->mppriv.check_mp_pkt = 1;
26256 } else {
26257 - Adapter->mppriv.check_mp_pkt = 0;
26258 + padapter->mppriv.check_mp_pkt = 0;
26259 }
26260 #endif
26261 - rtw_write32(Adapter, RCR, rcr_val32);
26262 + rtw_write32(padapter, RCR, rcr_val32);
26263
26264 #endif
26265 _irqlevel_changed_(&oldirql, RAISE);
26266 @@ -2585,7 +2688,9 @@ NDIS_STATUS oid_rt_pro_set_tx_agc_offset
26267 #if 0
26268 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
26269
26270 +#ifdef PLATFORM_OS_XP
26271 _irqL oldirql;
26272 +#endif
26273 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
26274
26275 u32 txagc;
26276 @@ -2701,7 +2806,7 @@ unsigned int mp_ioctl_xmit_packet_hdl(st
26277 struct mp_xmit_packet *pmp_xmitpkt = (struct mp_xmit_packet*)param;
26278 u8 addr3[] = {0x02, 0xE0, 0x4C, 0x87, 0x66, 0x55};
26279
26280 -// DBG_8192C("+mp_ioctl_xmit_packet_hdl\n");
26281 +// DBG_871X("+mp_ioctl_xmit_packet_hdl\n");
26282
26283 pxframe = alloc_mp_xmitframe(&padapter->mppriv);
26284 if (pxframe == NULL)
26285 @@ -2715,10 +2820,10 @@ unsigned int mp_ioctl_xmit_packet_hdl(st
26286 pmp_pkt = (unsigned char*)pmp_xmitpkt->mem;
26287 pethhdr = (struct ethhdr *)pmp_pkt;
26288
26289 - //DBG_8192C("payload_len=%d, pkt_mem=0x%x\n", pmp_xmitpkt->len, (void*)pmp_xmitpkt->mem);
26290 + //DBG_871X("payload_len=%d, pkt_mem=0x%x\n", pmp_xmitpkt->len, (void*)pmp_xmitpkt->mem);
26291
26292 - //DBG_8192C("pxframe=0x%x\n", (void*)pxframe);
26293 - //DBG_8192C("pxframe->mem=0x%x\n", (void*)pxframe->mem);
26294 + //DBG_871X("pxframe=0x%x\n", (void*)pxframe);
26295 + //DBG_871X("pxframe->mem=0x%x\n", (void*)pxframe->mem);
26296
26297 //update attribute
26298 pattrib = &pxframe->attrib;
26299 @@ -2771,10 +2876,16 @@ unsigned int mp_ioctl_xmit_packet_hdl(st
26300 //------------------------------------------------------------------------------
26301 NDIS_STATUS oid_rt_set_power_down_hdl(struct oid_par_priv *poid_par_priv)
26302 {
26303 - PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
26304 - NDIS_STATUS status = NDIS_STATUS_SUCCESS;
26305 +#ifdef PLATFORM_OS_XP
26306 _irqL oldirql;
26307 +#endif
26308 u8 bpwrup;
26309 + NDIS_STATUS status = NDIS_STATUS_SUCCESS;
26310 +#ifdef PLATFORM_LINUX
26311 +#ifdef CONFIG_SDIO_HCI
26312 + PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
26313 +#endif
26314 +#endif
26315
26316 _func_enter_;
26317
26318 @@ -2792,7 +2903,7 @@ _func_enter_;
26319 //CALL the power_down function
26320 #ifdef PLATFORM_LINUX
26321 #ifdef CONFIG_SDIO_HCI
26322 - dev_power_down(Adapter,bpwrup);
26323 + dev_power_down(padapter,bpwrup);
26324 #endif
26325 #endif
26326 _irqlevel_changed_(&oldirql, RAISE);
26327 @@ -2810,7 +2921,9 @@ NDIS_STATUS oid_rt_get_power_mode_hdl(st
26328 #if 0
26329 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
26330 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
26331 +//#ifdef PLATFORM_OS_XP
26332 // _irqL oldirql;
26333 +//#endif
26334
26335 _func_enter_;
26336
26337 --- a/drivers/net/wireless/rtl8192cu/core/rtw_p2p.c
26338 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_p2p.c
26339 @@ -25,31 +25,24 @@
26340
26341 #ifdef CONFIG_P2P
26342
26343 -int is_any_client_associated( _adapter *padapter )
26344 +int rtw_p2p_is_channel_list_ok( u8 desired_ch, u8* ch_list, u8 ch_cnt )
26345 {
26346 - _irqL irqL;
26347 - _list *phead, *plist;
26348 - int intFound = _FALSE;
26349 -
26350 - struct sta_priv *pstapriv = &padapter->stapriv;
26351 + int found = 0, i = 0;
26352
26353 - _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
26354 - phead = &pstapriv->asoc_list;
26355 - plist = get_next(phead);
26356 -
26357 - if ( rtw_end_of_queue_search(phead, plist) == _TRUE )
26358 + for( i = 0; i < ch_cnt; i++ )
26359 {
26360 - intFound = _FALSE;
26361 - }
26362 - else
26363 - {
26364 - intFound = _TRUE;
26365 + if ( ch_list[ i ] == desired_ch )
26366 + {
26367 + found = 1;
26368 + break;
26369 + }
26370 }
26371 -
26372 - _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
26373 + return( found );
26374 +}
26375
26376 - return( intFound );
26377 -
26378 +int is_any_client_associated(_adapter *padapter)
26379 +{
26380 + return padapter->stapriv.asoc_list_cnt ? _TRUE : _FALSE;
26381 }
26382
26383 static u32 go_add_group_info_attr(struct wifidirect_info *pwdinfo, u8 *pbuf)
26384 @@ -544,7 +537,7 @@ u32 build_beacon_wfd_ie(struct wifidirec
26385 u32 len=0, wfdielen = 0;
26386 _adapter *padapter = pwdinfo->padapter;
26387 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
26388 - struct wifi_display_info* pwfd_info = &padapter->wdinfo.wfd_info;
26389 + struct wifi_display_info* pwfd_info = padapter->wdinfo.wfd_info;
26390
26391 // WFD OUI
26392 wfdielen = 0;
26393 @@ -572,24 +565,24 @@ u32 build_beacon_wfd_ie(struct wifidirec
26394 // Value1:
26395 // WFD device information
26396
26397 - if ( rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
26398 + if ( P2P_ROLE_GO == pwdinfo->role )
26399 {
26400 if ( is_any_client_associated( pwdinfo->padapter ) )
26401 {
26402 - // WFD primary sink + WiFi Direct mode
26403 - RTW_PUT_BE16(wfdie + wfdielen, 0x0001);
26404 + // WFD primary sink + WiFi Direct mode + WSD (WFD Service Discovery)
26405 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_WSD );
26406 }
26407 else
26408 {
26409 - // WFD primary sink + available for WFD session + WiFi Direct mode
26410 - RTW_PUT_BE16(wfdie + wfdielen, 0x0011);
26411 + // WFD primary sink + available for WFD session + WiFi Direct mode + WSD (WFD Service Discovery)
26412 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_SESSION_AVAIL | WFD_DEVINFO_WSD );
26413 }
26414
26415 }
26416 else
26417 {
26418 - // WFD primary sink + available for WFD session + WiFi Direct mode
26419 - RTW_PUT_BE16(wfdie + wfdielen, 0x0011);
26420 + // WFD primary sink + available for WFD session + WiFi Direct mode + WSD ( WFD Service Discovery )
26421 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_SESSION_AVAIL | WFD_DEVINFO_WSD );
26422 }
26423
26424 wfdielen += 2;
26425 @@ -634,13 +627,20 @@ u32 build_beacon_wfd_ie(struct wifidirec
26426
26427 // Length:
26428 // Note: In the WFD specification, the size of length field is 2.
26429 - RTW_PUT_BE16(wfdie + wfdielen, 0x0001);
26430 + RTW_PUT_BE16(wfdie + wfdielen, 0x0007);
26431 wfdielen += 2;
26432
26433 // Value:
26434 // Coupled Sink Status bitmap
26435 // Not coupled/available for Coupling
26436 wfdie[ wfdielen++ ] = 0;
26437 + // MAC Addr.
26438 + wfdie[ wfdielen++ ] = 0;
26439 + wfdie[ wfdielen++ ] = 0;
26440 + wfdie[ wfdielen++ ] = 0;
26441 + wfdie[ wfdielen++ ] = 0;
26442 + wfdie[ wfdielen++ ] = 0;
26443 + wfdie[ wfdielen++ ] = 0;
26444
26445 pbuf = rtw_set_ie(pbuf, _VENDOR_SPECIFIC_IE_, wfdielen, (unsigned char *) wfdie, &len);
26446
26447 @@ -654,7 +654,7 @@ u32 build_probe_req_wfd_ie(struct wifidi
26448 u32 len=0, wfdielen = 0;
26449 _adapter *padapter = pwdinfo->padapter;
26450 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
26451 - struct wifi_display_info* pwfd_info = &padapter->wdinfo.wfd_info;
26452 + struct wifi_display_info* pwfd_info = padapter->wdinfo.wfd_info;
26453
26454 // WFD OUI
26455 wfdielen = 0;
26456 @@ -681,8 +681,23 @@ u32 build_probe_req_wfd_ie(struct wifidi
26457
26458 // Value1:
26459 // WFD device information
26460 - // WFD primary sink + available for WFD session + WiFi Direct mode
26461 - RTW_PUT_BE16(wfdie + wfdielen, 0x0011);
26462 +
26463 + if ( 1 == pwdinfo->wfd_tdls_enable )
26464 + {
26465 + // WFD primary sink + available for WFD session + WiFi TDLS mode + WSC ( WFD Service Discovery )
26466 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type |
26467 + WFD_DEVINFO_SESSION_AVAIL |
26468 + WFD_DEVINFO_WSD |
26469 + WFD_DEVINFO_PC_TDLS );
26470 + }
26471 + else
26472 + {
26473 + // WFD primary sink + available for WFD session + WiFi Direct mode + WSC ( WFD Service Discovery )
26474 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type |
26475 + WFD_DEVINFO_SESSION_AVAIL |
26476 + WFD_DEVINFO_WSD );
26477 + }
26478 +
26479 wfdielen += 2;
26480
26481 // Value2:
26482 @@ -725,13 +740,20 @@ u32 build_probe_req_wfd_ie(struct wifidi
26483
26484 // Length:
26485 // Note: In the WFD specification, the size of length field is 2.
26486 - RTW_PUT_BE16(wfdie + wfdielen, 0x0001);
26487 + RTW_PUT_BE16(wfdie + wfdielen, 0x0007);
26488 wfdielen += 2;
26489
26490 // Value:
26491 // Coupled Sink Status bitmap
26492 // Not coupled/available for Coupling
26493 wfdie[ wfdielen++ ] = 0;
26494 + // MAC Addr.
26495 + wfdie[ wfdielen++ ] = 0;
26496 + wfdie[ wfdielen++ ] = 0;
26497 + wfdie[ wfdielen++ ] = 0;
26498 + wfdie[ wfdielen++ ] = 0;
26499 + wfdie[ wfdielen++ ] = 0;
26500 + wfdie[ wfdielen++ ] = 0;
26501
26502 pbuf = rtw_set_ie(pbuf, _VENDOR_SPECIFIC_IE_, wfdielen, (unsigned char *) wfdie, &len);
26503
26504 @@ -739,13 +761,13 @@ u32 build_probe_req_wfd_ie(struct wifidi
26505
26506 }
26507
26508 -u32 build_probe_resp_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
26509 +u32 build_probe_resp_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf, u8 tunneled)
26510 {
26511 u8 wfdie[ MAX_WFD_IE_LEN] = { 0x00 };
26512 u32 len=0, wfdielen = 0;
26513 _adapter *padapter = pwdinfo->padapter;
26514 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
26515 - struct wifi_display_info* pwfd_info = &padapter->wdinfo.wfd_info;
26516 + struct wifi_display_info* pwfd_info = padapter->wdinfo.wfd_info;
26517
26518 // WFD OUI
26519 wfdielen = 0;
26520 @@ -773,25 +795,65 @@ u32 build_probe_resp_wfd_ie(struct wifid
26521
26522 // Value1:
26523 // WFD device information
26524 + // WFD primary sink + available for WFD session + WiFi Direct mode
26525
26526 - if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
26527 + if ( _TRUE == pwdinfo->session_available )
26528 {
26529 - if ( is_any_client_associated( pwdinfo->padapter ) )
26530 + if ( P2P_ROLE_GO == pwdinfo->role )
26531 {
26532 - // WFD primary sink + WiFi Direct mode
26533 - RTW_PUT_BE16(wfdie + wfdielen, 0x0001);
26534 + if ( is_any_client_associated( pwdinfo->padapter ) )
26535 + {
26536 + if ( pwdinfo->wfd_tdls_enable )
26537 + {
26538 + // TDLS mode + WSD ( WFD Service Discovery )
26539 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_WSD | WFD_DEVINFO_PC_TDLS | WFD_DEVINFO_HDCP_SUPPORT);
26540 + }
26541 + else
26542 + {
26543 + // WiFi Direct mode + WSD ( WFD Service Discovery )
26544 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_WSD | WFD_DEVINFO_HDCP_SUPPORT);
26545 + }
26546 + }
26547 + else
26548 + {
26549 + if ( pwdinfo->wfd_tdls_enable )
26550 + {
26551 + // available for WFD session + TDLS mode + WSD ( WFD Service Discovery )
26552 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_SESSION_AVAIL | WFD_DEVINFO_WSD | WFD_DEVINFO_PC_TDLS | WFD_DEVINFO_HDCP_SUPPORT);
26553 + }
26554 + else
26555 + {
26556 + // available for WFD session + WiFi Direct mode + WSD ( WFD Service Discovery )
26557 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_SESSION_AVAIL | WFD_DEVINFO_WSD | WFD_DEVINFO_HDCP_SUPPORT);
26558 + }
26559 + }
26560 }
26561 else
26562 {
26563 - // WFD primary sink + available for WFD session + WiFi Direct mode
26564 - RTW_PUT_BE16(wfdie + wfdielen, 0x0011);
26565 - }
26566 + if ( pwdinfo->wfd_tdls_enable )
26567 + {
26568 + // available for WFD session + WiFi Direct mode + WSD ( WFD Service Discovery )
26569 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_SESSION_AVAIL | WFD_DEVINFO_WSD | WFD_DEVINFO_PC_TDLS | WFD_DEVINFO_HDCP_SUPPORT);
26570 + }
26571 + else
26572 + {
26573
26574 + // available for WFD session + WiFi Direct mode + WSD ( WFD Service Discovery )
26575 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_SESSION_AVAIL | WFD_DEVINFO_WSD | WFD_DEVINFO_HDCP_SUPPORT);
26576 + }
26577 + }
26578 }
26579 else
26580 {
26581 - // WFD primary sink + available for WFD session + WiFi Direct mode
26582 - RTW_PUT_BE16(wfdie + wfdielen, 0x0011);
26583 + if ( pwdinfo->wfd_tdls_enable )
26584 + {
26585 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_WSD |WFD_DEVINFO_PC_TDLS | WFD_DEVINFO_HDCP_SUPPORT);
26586 + }
26587 + else
26588 + {
26589 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_WSD | WFD_DEVINFO_HDCP_SUPPORT);
26590 + }
26591 +
26592 }
26593
26594 wfdielen += 2;
26595 @@ -836,15 +898,22 @@ u32 build_probe_resp_wfd_ie(struct wifid
26596
26597 // Length:
26598 // Note: In the WFD specification, the size of length field is 2.
26599 - RTW_PUT_BE16(wfdie + wfdielen, 0x0001);
26600 + RTW_PUT_BE16(wfdie + wfdielen, 0x0007);
26601 wfdielen += 2;
26602
26603 // Value:
26604 // Coupled Sink Status bitmap
26605 // Not coupled/available for Coupling
26606 wfdie[ wfdielen++ ] = 0;
26607 + // MAC Addr.
26608 + wfdie[ wfdielen++ ] = 0;
26609 + wfdie[ wfdielen++ ] = 0;
26610 + wfdie[ wfdielen++ ] = 0;
26611 + wfdie[ wfdielen++ ] = 0;
26612 + wfdie[ wfdielen++ ] = 0;
26613 + wfdie[ wfdielen++ ] = 0;
26614
26615 - if ( rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO) )
26616 + if ( P2P_ROLE_GO == pwdinfo->role )
26617 {
26618 // WFD Session Information ATTR
26619 // Type:
26620 @@ -858,6 +927,28 @@ u32 build_probe_resp_wfd_ie(struct wifid
26621 // Todo: to add the list of WFD device info descriptor in WFD group.
26622
26623 }
26624 +#ifdef CONFIG_CONCURRENT_MODE
26625 +#ifdef CONFIG_TDLS
26626 + if ( ( tunneled == 0 ) && ( padapter->pbuddy_adapter->wdinfo.wfd_tdls_enable == 1 ) )
26627 + {
26628 + // Alternative MAC Address ATTR
26629 + // Type:
26630 + wfdie[ wfdielen++ ] = WFD_ATTR_ALTER_MAC;
26631 +
26632 + // Length:
26633 + // Note: In the WFD specification, the size of length field is 2.
26634 + RTW_PUT_BE16(wfdie + wfdielen, ETH_ALEN );
26635 + wfdielen += 2;
26636 +
26637 + // Value:
26638 + // Alternative MAC Address
26639 + _rtw_memcpy( wfdie + wfdielen, &padapter->pbuddy_adapter->eeprompriv.mac_addr[ 0 ], ETH_ALEN );
26640 + // This mac address is used to make the WFD session when TDLS is enable.
26641 +
26642 + wfdielen += ETH_ALEN;
26643 + }
26644 +#endif // CONFIG_TDLS
26645 +#endif // CONFIG_CONCURRENT_MODE
26646
26647 pbuf = rtw_set_ie(pbuf, _VENDOR_SPECIFIC_IE_, wfdielen, (unsigned char *) wfdie, &len);
26648
26649 @@ -881,7 +972,7 @@ u32 build_assoc_req_wfd_ie(struct wifidi
26650
26651 padapter = pwdinfo->padapter;
26652 pmlmepriv = &padapter->mlmepriv;
26653 - pwfd_info = &padapter->wdinfo.wfd_info;
26654 + pwfd_info = padapter->wdinfo.wfd_info;
26655
26656 wfdielen = 0;
26657 wfdie[ wfdielen++ ] = 0x50;
26658 @@ -907,8 +998,8 @@ u32 build_assoc_req_wfd_ie(struct wifidi
26659
26660 // Value1:
26661 // WFD device information
26662 - // WFD primary sink + available for WFD session + WiFi Direct mode
26663 - RTW_PUT_BE16(wfdie + wfdielen, 0x0011);
26664 + // WFD primary sink + available for WFD session + WiFi Direct mode + WSD ( WFD Service Discovery )
26665 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_SESSION_AVAIL | WFD_DEVINFO_WSD );
26666 wfdielen += 2;
26667
26668 // Value2:
26669 @@ -951,13 +1042,20 @@ u32 build_assoc_req_wfd_ie(struct wifidi
26670
26671 // Length:
26672 // Note: In the WFD specification, the size of length field is 2.
26673 - RTW_PUT_BE16(wfdie + wfdielen, 0x0001);
26674 + RTW_PUT_BE16(wfdie + wfdielen, 0x0007);
26675 wfdielen += 2;
26676
26677 // Value:
26678 // Coupled Sink Status bitmap
26679 // Not coupled/available for Coupling
26680 wfdie[ wfdielen++ ] = 0;
26681 + // MAC Addr.
26682 + wfdie[ wfdielen++ ] = 0;
26683 + wfdie[ wfdielen++ ] = 0;
26684 + wfdie[ wfdielen++ ] = 0;
26685 + wfdie[ wfdielen++ ] = 0;
26686 + wfdie[ wfdielen++ ] = 0;
26687 + wfdie[ wfdielen++ ] = 0;
26688
26689 pbuf = rtw_set_ie(pbuf, _VENDOR_SPECIFIC_IE_, wfdielen, (unsigned char *) wfdie, &len);
26690
26691 @@ -971,7 +1069,7 @@ u32 build_assoc_resp_wfd_ie(struct wifid
26692 u32 len=0, wfdielen = 0;
26693 _adapter *padapter = pwdinfo->padapter;
26694 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
26695 - struct wifi_display_info* pwfd_info = &padapter->wdinfo.wfd_info;
26696 + struct wifi_display_info* pwfd_info = padapter->wdinfo.wfd_info;
26697
26698 // WFD OUI
26699 wfdielen = 0;
26700 @@ -998,8 +1096,8 @@ u32 build_assoc_resp_wfd_ie(struct wifid
26701
26702 // Value1:
26703 // WFD device information
26704 - // WFD primary sink + available for WFD session + WiFi Direct mode
26705 - RTW_PUT_BE16(wfdie + wfdielen, 0x0011);
26706 + // WFD primary sink + available for WFD session + WiFi Direct mode + WSD ( WFD Service Discovery )
26707 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_SESSION_AVAIL | WFD_DEVINFO_WSD );
26708 wfdielen += 2;
26709
26710 // Value2:
26711 @@ -1042,13 +1140,20 @@ u32 build_assoc_resp_wfd_ie(struct wifid
26712
26713 // Length:
26714 // Note: In the WFD specification, the size of length field is 2.
26715 - RTW_PUT_BE16(wfdie + wfdielen, 0x0001);
26716 + RTW_PUT_BE16(wfdie + wfdielen, 0x0007);
26717 wfdielen += 2;
26718
26719 // Value:
26720 // Coupled Sink Status bitmap
26721 // Not coupled/available for Coupling
26722 wfdie[ wfdielen++ ] = 0;
26723 + // MAC Addr.
26724 + wfdie[ wfdielen++ ] = 0;
26725 + wfdie[ wfdielen++ ] = 0;
26726 + wfdie[ wfdielen++ ] = 0;
26727 + wfdie[ wfdielen++ ] = 0;
26728 + wfdie[ wfdielen++ ] = 0;
26729 + wfdie[ wfdielen++ ] = 0;
26730
26731 pbuf = rtw_set_ie(pbuf, _VENDOR_SPECIFIC_IE_, wfdielen, (unsigned char *) wfdie, &len);
26732
26733 @@ -1062,7 +1167,7 @@ u32 build_nego_req_wfd_ie(struct wifidir
26734 u32 len=0, wfdielen = 0;
26735 _adapter *padapter = pwdinfo->padapter;
26736 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
26737 - struct wifi_display_info* pwfd_info = &padapter->wdinfo.wfd_info;
26738 + struct wifi_display_info* pwfd_info = padapter->wdinfo.wfd_info;
26739
26740 // WFD OUI
26741 wfdielen = 0;
26742 @@ -1089,8 +1194,8 @@ u32 build_nego_req_wfd_ie(struct wifidir
26743
26744 // Value1:
26745 // WFD device information
26746 - // WFD primary sink + WiFi Direct mode
26747 - RTW_PUT_BE16(wfdie + wfdielen, 0x0001);
26748 + // WFD primary sink + WiFi Direct mode + WSD ( WFD Service Discovery ) + WFD Session Available
26749 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_WSD | WFD_DEVINFO_SESSION_AVAIL);
26750 wfdielen += 2;
26751
26752 // Value2:
26753 @@ -1133,13 +1238,20 @@ u32 build_nego_req_wfd_ie(struct wifidir
26754
26755 // Length:
26756 // Note: In the WFD specification, the size of length field is 2.
26757 - RTW_PUT_BE16(wfdie + wfdielen, 0x0001);
26758 + RTW_PUT_BE16(wfdie + wfdielen, 0x0007);
26759 wfdielen += 2;
26760
26761 // Value:
26762 // Coupled Sink Status bitmap
26763 // Not coupled/available for Coupling
26764 wfdie[ wfdielen++ ] = 0;
26765 + // MAC Addr.
26766 + wfdie[ wfdielen++ ] = 0;
26767 + wfdie[ wfdielen++ ] = 0;
26768 + wfdie[ wfdielen++ ] = 0;
26769 + wfdie[ wfdielen++ ] = 0;
26770 + wfdie[ wfdielen++ ] = 0;
26771 + wfdie[ wfdielen++ ] = 0;
26772
26773 pbuf = rtw_set_ie(pbuf, _VENDOR_SPECIFIC_IE_, wfdielen, (unsigned char *) wfdie, &len);
26774
26775 @@ -1153,7 +1265,7 @@ u32 build_nego_resp_wfd_ie(struct wifidi
26776 u32 len=0, wfdielen = 0;
26777 _adapter *padapter = pwdinfo->padapter;
26778 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
26779 - struct wifi_display_info* pwfd_info = &padapter->wdinfo.wfd_info;
26780 + struct wifi_display_info* pwfd_info = padapter->wdinfo.wfd_info;
26781
26782 // WFD OUI
26783 wfdielen = 0;
26784 @@ -1180,8 +1292,8 @@ u32 build_nego_resp_wfd_ie(struct wifidi
26785
26786 // Value1:
26787 // WFD device information
26788 - // WFD primary sink + WiFi Direct mode
26789 - RTW_PUT_BE16(wfdie + wfdielen, 0x0001);
26790 + // WFD primary sink + WiFi Direct mode + WSD ( WFD Service Discovery ) + WFD Session Available
26791 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_WSD | WFD_DEVINFO_SESSION_AVAIL);
26792 wfdielen += 2;
26793
26794 // Value2:
26795 @@ -1224,13 +1336,20 @@ u32 build_nego_resp_wfd_ie(struct wifidi
26796
26797 // Length:
26798 // Note: In the WFD specification, the size of length field is 2.
26799 - RTW_PUT_BE16(wfdie + wfdielen, 0x0001);
26800 + RTW_PUT_BE16(wfdie + wfdielen, 0x0007);
26801 wfdielen += 2;
26802
26803 // Value:
26804 // Coupled Sink Status bitmap
26805 // Not coupled/available for Coupling
26806 wfdie[ wfdielen++ ] = 0;
26807 + // MAC Addr.
26808 + wfdie[ wfdielen++ ] = 0;
26809 + wfdie[ wfdielen++ ] = 0;
26810 + wfdie[ wfdielen++ ] = 0;
26811 + wfdie[ wfdielen++ ] = 0;
26812 + wfdie[ wfdielen++ ] = 0;
26813 + wfdie[ wfdielen++ ] = 0;
26814
26815
26816 pbuf = rtw_set_ie(pbuf, _VENDOR_SPECIFIC_IE_, wfdielen, (unsigned char *) wfdie, &len);
26817 @@ -1245,7 +1364,7 @@ u32 build_nego_confirm_wfd_ie(struct wif
26818 u32 len=0, wfdielen = 0;
26819 _adapter *padapter = pwdinfo->padapter;
26820 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
26821 - struct wifi_display_info* pwfd_info = &padapter->wdinfo.wfd_info;
26822 + struct wifi_display_info* pwfd_info = padapter->wdinfo.wfd_info;
26823
26824 // WFD OUI
26825 wfdielen = 0;
26826 @@ -1272,8 +1391,8 @@ u32 build_nego_confirm_wfd_ie(struct wif
26827
26828 // Value1:
26829 // WFD device information
26830 - // WFD primary sink + WiFi Direct mode
26831 - RTW_PUT_BE16(wfdie + wfdielen, 0x0001);
26832 + // WFD primary sink + WiFi Direct mode + WSD ( WFD Service Discovery ) + WFD Session Available
26833 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_WSD | WFD_DEVINFO_SESSION_AVAIL);
26834 wfdielen += 2;
26835
26836 // Value2:
26837 @@ -1316,13 +1435,20 @@ u32 build_nego_confirm_wfd_ie(struct wif
26838
26839 // Length:
26840 // Note: In the WFD specification, the size of length field is 2.
26841 - RTW_PUT_BE16(wfdie + wfdielen, 0x0001);
26842 + RTW_PUT_BE16(wfdie + wfdielen, 0x0007);
26843 wfdielen += 2;
26844
26845 // Value:
26846 // Coupled Sink Status bitmap
26847 // Not coupled/available for Coupling
26848 wfdie[ wfdielen++ ] = 0;
26849 + // MAC Addr.
26850 + wfdie[ wfdielen++ ] = 0;
26851 + wfdie[ wfdielen++ ] = 0;
26852 + wfdie[ wfdielen++ ] = 0;
26853 + wfdie[ wfdielen++ ] = 0;
26854 + wfdie[ wfdielen++ ] = 0;
26855 + wfdie[ wfdielen++ ] = 0;
26856
26857
26858 pbuf = rtw_set_ie(pbuf, _VENDOR_SPECIFIC_IE_, wfdielen, (unsigned char *) wfdie, &len);
26859 @@ -1331,13 +1457,13 @@ u32 build_nego_confirm_wfd_ie(struct wif
26860
26861 }
26862
26863 -u32 build_provdisc_req_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
26864 +u32 build_invitation_req_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
26865 {
26866 u8 wfdie[ MAX_WFD_IE_LEN] = { 0x00 };
26867 u32 len=0, wfdielen = 0;
26868 _adapter *padapter = pwdinfo->padapter;
26869 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
26870 - struct wifi_display_info* pwfd_info = &padapter->wdinfo.wfd_info;
26871 + struct wifi_display_info* pwfd_info = padapter->wdinfo.wfd_info;
26872
26873 // WFD OUI
26874 wfdielen = 0;
26875 @@ -1364,8 +1490,8 @@ u32 build_provdisc_req_wfd_ie(struct wif
26876
26877 // Value1:
26878 // WFD device information
26879 - // WFD primary sink + available for WFD session + WiFi Direct mode
26880 - RTW_PUT_BE16(wfdie + wfdielen, 0x0011);
26881 + // WFD primary sink + available for WFD session + WiFi Direct mode + WSD ( WFD Service Discovery )
26882 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_SESSION_AVAIL | WFD_DEVINFO_WSD );
26883 wfdielen += 2;
26884
26885 // Value2:
26886 @@ -1408,14 +1534,35 @@ u32 build_provdisc_req_wfd_ie(struct wif
26887
26888 // Length:
26889 // Note: In the WFD specification, the size of length field is 2.
26890 - RTW_PUT_BE16(wfdie + wfdielen, 0x0001);
26891 + RTW_PUT_BE16(wfdie + wfdielen, 0x0007);
26892 wfdielen += 2;
26893
26894 // Value:
26895 // Coupled Sink Status bitmap
26896 // Not coupled/available for Coupling
26897 wfdie[ wfdielen++ ] = 0;
26898 + // MAC Addr.
26899 + wfdie[ wfdielen++ ] = 0;
26900 + wfdie[ wfdielen++ ] = 0;
26901 + wfdie[ wfdielen++ ] = 0;
26902 + wfdie[ wfdielen++ ] = 0;
26903 + wfdie[ wfdielen++ ] = 0;
26904 + wfdie[ wfdielen++ ] = 0;
26905 +
26906 + if ( P2P_ROLE_GO == pwdinfo->role )
26907 + {
26908 + // WFD Session Information ATTR
26909 + // Type:
26910 + wfdie[ wfdielen++ ] = WFD_ATTR_SESSION_INFO;
26911
26912 + // Length:
26913 + // Note: In the WFD specification, the size of length field is 2.
26914 + RTW_PUT_BE16(wfdie + wfdielen, 0x0000);
26915 + wfdielen += 2;
26916 +
26917 + // Todo: to add the list of WFD device info descriptor in WFD group.
26918 +
26919 + }
26920
26921 pbuf = rtw_set_ie(pbuf, _VENDOR_SPECIFIC_IE_, wfdielen, (unsigned char *) wfdie, &len);
26922
26923 @@ -1423,13 +1570,13 @@ u32 build_provdisc_req_wfd_ie(struct wif
26924
26925 }
26926
26927 -u32 build_provdisc_resp_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
26928 +u32 build_invitation_resp_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
26929 {
26930 u8 wfdie[ MAX_WFD_IE_LEN] = { 0x00 };
26931 u32 len=0, wfdielen = 0;
26932 _adapter *padapter = pwdinfo->padapter;
26933 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
26934 - struct wifi_display_info* pwfd_info = &padapter->wdinfo.wfd_info;
26935 + struct wifi_display_info* pwfd_info = padapter->wdinfo.wfd_info;
26936
26937 // WFD OUI
26938 wfdielen = 0;
26939 @@ -1439,7 +1586,7 @@ u32 build_provdisc_resp_wfd_ie(struct wi
26940 wfdie[ wfdielen++ ] = 0x0A; // WFA WFD v1.0
26941
26942 // Commented by Albert 20110825
26943 - // According to the WFD Specification, the provision discovery response frame should contain 3 WFD attributes
26944 + // According to the WFD Specification, the provision discovery request frame should contain 3 WFD attributes
26945 // 1. WFD Device Information
26946 // 2. Associated BSSID ( Optional )
26947 // 3. Local IP Adress ( Optional )
26948 @@ -1456,8 +1603,8 @@ u32 build_provdisc_resp_wfd_ie(struct wi
26949
26950 // Value1:
26951 // WFD device information
26952 - // WFD primary sink + available for WFD session + WiFi Direct mode
26953 - RTW_PUT_BE16(wfdie + wfdielen, 0x0011);
26954 + // WFD primary sink + available for WFD session + WiFi Direct mode + WSD ( WFD Service Discovery )
26955 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_SESSION_AVAIL | WFD_DEVINFO_WSD );
26956 wfdielen += 2;
26957
26958 // Value2:
26959 @@ -1500,13 +1647,35 @@ u32 build_provdisc_resp_wfd_ie(struct wi
26960
26961 // Length:
26962 // Note: In the WFD specification, the size of length field is 2.
26963 - RTW_PUT_BE16(wfdie + wfdielen, 0x0001);
26964 + RTW_PUT_BE16(wfdie + wfdielen, 0x0007);
26965 wfdielen += 2;
26966
26967 // Value:
26968 // Coupled Sink Status bitmap
26969 // Not coupled/available for Coupling
26970 wfdie[ wfdielen++ ] = 0;
26971 + // MAC Addr.
26972 + wfdie[ wfdielen++ ] = 0;
26973 + wfdie[ wfdielen++ ] = 0;
26974 + wfdie[ wfdielen++ ] = 0;
26975 + wfdie[ wfdielen++ ] = 0;
26976 + wfdie[ wfdielen++ ] = 0;
26977 + wfdie[ wfdielen++ ] = 0;
26978 +
26979 + if ( P2P_ROLE_GO == pwdinfo->role )
26980 + {
26981 + // WFD Session Information ATTR
26982 + // Type:
26983 + wfdie[ wfdielen++ ] = WFD_ATTR_SESSION_INFO;
26984 +
26985 + // Length:
26986 + // Note: In the WFD specification, the size of length field is 2.
26987 + RTW_PUT_BE16(wfdie + wfdielen, 0x0000);
26988 + wfdielen += 2;
26989 +
26990 + // Todo: to add the list of WFD device info descriptor in WFD group.
26991 +
26992 + }
26993
26994 pbuf = rtw_set_ie(pbuf, _VENDOR_SPECIFIC_IE_, wfdielen, (unsigned char *) wfdie, &len);
26995
26996 @@ -1514,68 +1683,280 @@ u32 build_provdisc_resp_wfd_ie(struct wi
26997
26998 }
26999
27000 +u32 build_provdisc_req_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
27001 +{
27002 + u8 wfdie[ MAX_WFD_IE_LEN] = { 0x00 };
27003 + u32 len=0, wfdielen = 0;
27004 + _adapter *padapter = pwdinfo->padapter;
27005 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
27006 + struct wifi_display_info* pwfd_info = padapter->wdinfo.wfd_info;
27007
27008 -#endif //CONFIG_WFD
27009 + // WFD OUI
27010 + wfdielen = 0;
27011 + wfdie[ wfdielen++ ] = 0x50;
27012 + wfdie[ wfdielen++ ] = 0x6F;
27013 + wfdie[ wfdielen++ ] = 0x9A;
27014 + wfdie[ wfdielen++ ] = 0x0A; // WFA WFD v1.0
27015
27016 -u32 build_probe_resp_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
27017 -{
27018 - u8 p2pie[ MAX_P2P_IE_LEN] = { 0x00 };
27019 - u32 len=0, p2pielen = 0;
27020 + // Commented by Albert 20110825
27021 + // According to the WFD Specification, the provision discovery request frame should contain 3 WFD attributes
27022 + // 1. WFD Device Information
27023 + // 2. Associated BSSID ( Optional )
27024 + // 3. Local IP Adress ( Optional )
27025
27026 - // P2P OUI
27027 - p2pielen = 0;
27028 - p2pie[ p2pielen++ ] = 0x50;
27029 - p2pie[ p2pielen++ ] = 0x6F;
27030 - p2pie[ p2pielen++ ] = 0x9A;
27031 - p2pie[ p2pielen++ ] = 0x09; // WFA P2P v1.0
27032
27033 - // Commented by Albert 20100907
27034 - // According to the P2P Specification, the probe response frame should contain 5 P2P attributes
27035 - // 1. P2P Capability
27036 - // 2. Extended Listen Timing
27037 - // 3. Notice of Absence ( NOA ) ( Only GO needs this )
27038 - // 4. Device Info
27039 - // 5. Group Info ( Only GO need this )
27040 + // WFD Device Information ATTR
27041 + // Type:
27042 + wfdie[ wfdielen++ ] = WFD_ATTR_DEVICE_INFO;
27043
27044 - // P2P Capability ATTR
27045 + // Length:
27046 + // Note: In the WFD specification, the size of length field is 2.
27047 + RTW_PUT_BE16(wfdie + wfdielen, 0x0006);
27048 + wfdielen += 2;
27049 +
27050 + // Value1:
27051 + // WFD device information
27052 + // WFD primary sink + available for WFD session + WiFi Direct mode + WSD ( WFD Service Discovery )
27053 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_SESSION_AVAIL | WFD_DEVINFO_WSD );
27054 + wfdielen += 2;
27055 +
27056 + // Value2:
27057 + // Session Management Control Port
27058 + // Default TCP port for RTSP messages is 554
27059 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->rtsp_ctrlport );
27060 + wfdielen += 2;
27061 +
27062 + // Value3:
27063 + // WFD Device Maximum Throughput
27064 + // 300Mbps is the maximum throughput
27065 + RTW_PUT_BE16(wfdie + wfdielen, 300);
27066 + wfdielen += 2;
27067 +
27068 + // Associated BSSID ATTR
27069 // Type:
27070 - p2pie[ p2pielen++ ] = P2P_ATTR_CAPABILITY;
27071 + wfdie[ wfdielen++ ] = WFD_ATTR_ASSOC_BSSID;
27072
27073 // Length:
27074 - //*(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 0x0002 );
27075 - RTW_PUT_LE16(p2pie + p2pielen, 0x0002);
27076 - p2pielen += 2;
27077 + // Note: In the WFD specification, the size of length field is 2.
27078 + RTW_PUT_BE16(wfdie + wfdielen, 0x0006);
27079 + wfdielen += 2;
27080
27081 // Value:
27082 - // Device Capability Bitmap, 1 byte
27083 - // Be able to participate in additional P2P Groups and
27084 - // support the P2P Invitation Procedure
27085 - p2pie[ p2pielen++ ] = P2P_DEVCAP_INVITATION_PROC|P2P_DEVCAP_CLIENT_DISCOVERABILITY;
27086 -
27087 - // Group Capability Bitmap, 1 byte
27088 - if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
27089 + // Associated BSSID
27090 + if ( check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE )
27091 {
27092 - p2pie[ p2pielen ] = (P2P_GRPCAP_GO | P2P_GRPCAP_INTRABSS);
27093 -
27094 - if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_PROVISIONING_ING))
27095 - p2pie[ p2pielen ] |= P2P_GRPCAP_GROUP_FORMATION;
27096 -
27097 - p2pielen++;
27098 + _rtw_memcpy( wfdie + wfdielen, &pmlmepriv->assoc_bssid[ 0 ], ETH_ALEN );
27099 }
27100 - else if ( rtw_p2p_chk_role(pwdinfo, P2P_ROLE_DEVICE) )
27101 + else
27102 {
27103 - // Group Capability Bitmap, 1 byte
27104 - p2pie[ p2pielen++ ] = 0x00;
27105 + _rtw_memset( wfdie + wfdielen, 0x00, ETH_ALEN );
27106 }
27107
27108 - // Extended Listen Timing ATTR
27109 + wfdielen += ETH_ALEN;
27110 +
27111 + // Coupled Sink Information ATTR
27112 // Type:
27113 - p2pie[ p2pielen++ ] = P2P_ATTR_EX_LISTEN_TIMING;
27114 + wfdie[ wfdielen++ ] = WFD_ATTR_COUPLED_SINK_INFO;
27115
27116 // Length:
27117 - //*(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 0x0004 );
27118 - RTW_PUT_LE16(p2pie + p2pielen, 0x0004);
27119 - p2pielen += 2;
27120 + // Note: In the WFD specification, the size of length field is 2.
27121 + RTW_PUT_BE16(wfdie + wfdielen, 0x0007);
27122 + wfdielen += 2;
27123 +
27124 + // Value:
27125 + // Coupled Sink Status bitmap
27126 + // Not coupled/available for Coupling
27127 + wfdie[ wfdielen++ ] = 0;
27128 + // MAC Addr.
27129 + wfdie[ wfdielen++ ] = 0;
27130 + wfdie[ wfdielen++ ] = 0;
27131 + wfdie[ wfdielen++ ] = 0;
27132 + wfdie[ wfdielen++ ] = 0;
27133 + wfdie[ wfdielen++ ] = 0;
27134 + wfdie[ wfdielen++ ] = 0;
27135 +
27136 +
27137 + pbuf = rtw_set_ie(pbuf, _VENDOR_SPECIFIC_IE_, wfdielen, (unsigned char *) wfdie, &len);
27138 +
27139 + return len;
27140 +
27141 +}
27142 +
27143 +u32 build_provdisc_resp_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
27144 +{
27145 + u8 wfdie[ MAX_WFD_IE_LEN] = { 0x00 };
27146 + u32 len=0, wfdielen = 0;
27147 + _adapter *padapter = pwdinfo->padapter;
27148 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
27149 + struct wifi_display_info* pwfd_info = padapter->wdinfo.wfd_info;
27150 +
27151 + // WFD OUI
27152 + wfdielen = 0;
27153 + wfdie[ wfdielen++ ] = 0x50;
27154 + wfdie[ wfdielen++ ] = 0x6F;
27155 + wfdie[ wfdielen++ ] = 0x9A;
27156 + wfdie[ wfdielen++ ] = 0x0A; // WFA WFD v1.0
27157 +
27158 + // Commented by Albert 20110825
27159 + // According to the WFD Specification, the provision discovery response frame should contain 3 WFD attributes
27160 + // 1. WFD Device Information
27161 + // 2. Associated BSSID ( Optional )
27162 + // 3. Local IP Adress ( Optional )
27163 +
27164 +
27165 + // WFD Device Information ATTR
27166 + // Type:
27167 + wfdie[ wfdielen++ ] = WFD_ATTR_DEVICE_INFO;
27168 +
27169 + // Length:
27170 + // Note: In the WFD specification, the size of length field is 2.
27171 + RTW_PUT_BE16(wfdie + wfdielen, 0x0006);
27172 + wfdielen += 2;
27173 +
27174 + // Value1:
27175 + // WFD device information
27176 + // WFD primary sink + available for WFD session + WiFi Direct mode + WSD ( WFD Service Discovery )
27177 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_SESSION_AVAIL | WFD_DEVINFO_WSD );
27178 + wfdielen += 2;
27179 +
27180 + // Value2:
27181 + // Session Management Control Port
27182 + // Default TCP port for RTSP messages is 554
27183 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->rtsp_ctrlport );
27184 + wfdielen += 2;
27185 +
27186 + // Value3:
27187 + // WFD Device Maximum Throughput
27188 + // 300Mbps is the maximum throughput
27189 + RTW_PUT_BE16(wfdie + wfdielen, 300);
27190 + wfdielen += 2;
27191 +
27192 + // Associated BSSID ATTR
27193 + // Type:
27194 + wfdie[ wfdielen++ ] = WFD_ATTR_ASSOC_BSSID;
27195 +
27196 + // Length:
27197 + // Note: In the WFD specification, the size of length field is 2.
27198 + RTW_PUT_BE16(wfdie + wfdielen, 0x0006);
27199 + wfdielen += 2;
27200 +
27201 + // Value:
27202 + // Associated BSSID
27203 + if ( check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE )
27204 + {
27205 + _rtw_memcpy( wfdie + wfdielen, &pmlmepriv->assoc_bssid[ 0 ], ETH_ALEN );
27206 + }
27207 + else
27208 + {
27209 + _rtw_memset( wfdie + wfdielen, 0x00, ETH_ALEN );
27210 + }
27211 +
27212 + wfdielen += ETH_ALEN;
27213 +
27214 + // Coupled Sink Information ATTR
27215 + // Type:
27216 + wfdie[ wfdielen++ ] = WFD_ATTR_COUPLED_SINK_INFO;
27217 +
27218 + // Length:
27219 + // Note: In the WFD specification, the size of length field is 2.
27220 + RTW_PUT_BE16(wfdie + wfdielen, 0x0007);
27221 + wfdielen += 2;
27222 +
27223 + // Value:
27224 + // Coupled Sink Status bitmap
27225 + // Not coupled/available for Coupling
27226 + wfdie[ wfdielen++ ] = 0;
27227 + // MAC Addr.
27228 + wfdie[ wfdielen++ ] = 0;
27229 + wfdie[ wfdielen++ ] = 0;
27230 + wfdie[ wfdielen++ ] = 0;
27231 + wfdie[ wfdielen++ ] = 0;
27232 + wfdie[ wfdielen++ ] = 0;
27233 + wfdie[ wfdielen++ ] = 0;
27234 +
27235 + pbuf = rtw_set_ie(pbuf, _VENDOR_SPECIFIC_IE_, wfdielen, (unsigned char *) wfdie, &len);
27236 +
27237 + return len;
27238 +
27239 +}
27240 +
27241 +#endif //CONFIG_WFD
27242 +
27243 +u32 build_probe_resp_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
27244 +{
27245 + u8 p2pie[ MAX_P2P_IE_LEN] = { 0x00 };
27246 + u32 len=0, p2pielen = 0;
27247 +#ifdef CONFIG_INTEL_WIDI
27248 + struct mlme_priv *pmlmepriv = &(pwdinfo->padapter->mlmepriv);
27249 + u8 zero_array_check[L2SDTA_SERVICE_VE_LEN] = { 0x00 };
27250 + u8 widi_version = 0, i = 0;
27251 +
27252 + if( _rtw_memcmp( pmlmepriv->sa_ext, zero_array_check, L2SDTA_SERVICE_VE_LEN ) == _FALSE )
27253 + {
27254 + widi_version = 35;
27255 + }
27256 + else if( pmlmepriv->num_p2p_sdt != 0 )
27257 + {
27258 + widi_version = 40;
27259 + }
27260 +#endif //CONFIG_INTEL_WIDI
27261 +
27262 + // P2P OUI
27263 + p2pielen = 0;
27264 + p2pie[ p2pielen++ ] = 0x50;
27265 + p2pie[ p2pielen++ ] = 0x6F;
27266 + p2pie[ p2pielen++ ] = 0x9A;
27267 + p2pie[ p2pielen++ ] = 0x09; // WFA P2P v1.0
27268 +
27269 + // Commented by Albert 20100907
27270 + // According to the P2P Specification, the probe response frame should contain 5 P2P attributes
27271 + // 1. P2P Capability
27272 + // 2. Extended Listen Timing
27273 + // 3. Notice of Absence ( NOA ) ( Only GO needs this )
27274 + // 4. Device Info
27275 + // 5. Group Info ( Only GO need this )
27276 +
27277 + // P2P Capability ATTR
27278 + // Type:
27279 + p2pie[ p2pielen++ ] = P2P_ATTR_CAPABILITY;
27280 +
27281 + // Length:
27282 + //*(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 0x0002 );
27283 + RTW_PUT_LE16(p2pie + p2pielen, 0x0002);
27284 + p2pielen += 2;
27285 +
27286 + // Value:
27287 + // Device Capability Bitmap, 1 byte
27288 + p2pie[ p2pielen++ ] = DMP_P2P_DEVCAP_SUPPORT;
27289 +
27290 + // Group Capability Bitmap, 1 byte
27291 + if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
27292 + {
27293 + p2pie[ p2pielen ] = (P2P_GRPCAP_GO | P2P_GRPCAP_INTRABSS);
27294 +
27295 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_PROVISIONING_ING))
27296 + p2pie[ p2pielen ] |= P2P_GRPCAP_GROUP_FORMATION;
27297 +
27298 + p2pielen++;
27299 + }
27300 + else if ( rtw_p2p_chk_role(pwdinfo, P2P_ROLE_DEVICE) )
27301 + {
27302 + // Group Capability Bitmap, 1 byte
27303 + if ( pwdinfo->persistent_supported )
27304 + p2pie[ p2pielen++ ] = P2P_GRPCAP_PERSISTENT_GROUP | DMP_P2P_GRPCAP_SUPPORT;
27305 + else
27306 + p2pie[ p2pielen++ ] = DMP_P2P_GRPCAP_SUPPORT;
27307 +
27308 + }
27309 +
27310 + // Extended Listen Timing ATTR
27311 + // Type:
27312 + p2pie[ p2pielen++ ] = P2P_ATTR_EX_LISTEN_TIMING;
27313 +
27314 + // Length:
27315 + //*(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 0x0004 );
27316 + RTW_PUT_LE16(p2pie + p2pielen, 0x0004);
27317 + p2pielen += 2;
27318
27319 // Value:
27320 // Availability Period
27321 @@ -1606,6 +1987,17 @@ u32 build_probe_resp_p2p_ie(struct wifid
27322 // 21 -> P2P Device Address (6bytes) + Config Methods (2bytes) + Primary Device Type (8bytes)
27323 // + NumofSecondDevType (1byte) + WPS Device Name ID field (2bytes) + WPS Device Name Len field (2bytes)
27324 //*(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 21 + pwdinfo->device_name_len );
27325 +#ifdef CONFIG_INTEL_WIDI
27326 + if( widi_version == 35 )
27327 + {
27328 + RTW_PUT_LE16(p2pie + p2pielen, 21 + 8 + pwdinfo->device_name_len);
27329 + }
27330 + else if( widi_version == 40 )
27331 + {
27332 + RTW_PUT_LE16(p2pie + p2pielen, 21 + 8 * pmlmepriv->num_p2p_sdt + pwdinfo->device_name_len);
27333 + }
27334 + else
27335 +#endif //CONFIG_INTEL_WIDI
27336 RTW_PUT_LE16(p2pie + p2pielen, 21 + pwdinfo->device_name_len);
27337 p2pielen += 2;
27338
27339 @@ -1620,23 +2012,77 @@ u32 build_probe_resp_p2p_ie(struct wifid
27340 RTW_PUT_BE16(p2pie + p2pielen, pwdinfo->supported_wps_cm);
27341 p2pielen += 2;
27342
27343 - // Primary Device Type
27344 - // Category ID
27345 - //*(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_CID_RTK_WIDI );
27346 - RTW_PUT_BE16(p2pie + p2pielen, WPS_PDT_CID_RTK_WIDI);
27347 - p2pielen += 2;
27348 +#ifdef CONFIG_INTEL_WIDI
27349 + if( widi_version == 40 )
27350 + {
27351 + // Primary Device Type
27352 + // Category ID
27353 + //*(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_CID_MULIT_MEDIA );
27354 + RTW_PUT_BE16(p2pie + p2pielen, pmlmepriv->p2p_pdt_cid );
27355 + p2pielen += 2;
27356
27357 - // OUI
27358 - //*(u32*) ( p2pie + p2pielen ) = cpu_to_be32( WPSOUI );
27359 - RTW_PUT_BE32(p2pie + p2pielen, WPSOUI);
27360 - p2pielen += 4;
27361 + // OUI
27362 + //*(u32*) ( p2pie + p2pielen ) = cpu_to_be32( WPSOUI );
27363 + RTW_PUT_BE32(p2pie + p2pielen, WPSOUI);
27364 + p2pielen += 4;
27365 +
27366 + // Sub Category ID
27367 + //*(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_SCID_MEDIA_SERVER );
27368 + RTW_PUT_BE16(p2pie + p2pielen, pmlmepriv->p2p_pdt_scid);
27369 + p2pielen += 2;
27370 + }
27371 + else
27372 +#endif //CONFIG_INTEL_WIDI
27373 + {
27374 + // Primary Device Type
27375 + // Category ID
27376 + //*(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_CID_MULIT_MEDIA );
27377 + RTW_PUT_BE16(p2pie + p2pielen, WPS_PDT_CID_MULIT_MEDIA);
27378 + p2pielen += 2;
27379
27380 - // Sub Category ID
27381 - //*(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_SCID_RTK_DMP );
27382 - RTW_PUT_BE16(p2pie + p2pielen, WPS_PDT_SCID_RTK_DMP);
27383 - p2pielen += 2;
27384 + // OUI
27385 + //*(u32*) ( p2pie + p2pielen ) = cpu_to_be32( WPSOUI );
27386 + RTW_PUT_BE32(p2pie + p2pielen, WPSOUI);
27387 + p2pielen += 4;
27388 +
27389 + // Sub Category ID
27390 + //*(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_SCID_MEDIA_SERVER );
27391 + RTW_PUT_BE16(p2pie + p2pielen, WPS_PDT_SCID_MEDIA_SERVER);
27392 + p2pielen += 2;
27393 + }
27394
27395 // Number of Secondary Device Types
27396 +#ifdef CONFIG_INTEL_WIDI
27397 + if( widi_version == 35 )
27398 + {
27399 + p2pie[ p2pielen++ ] = 0x01;
27400 +
27401 + RTW_PUT_BE16(p2pie + p2pielen, WPS_PDT_CID_DISPLAYS);
27402 + p2pielen += 2;
27403 +
27404 + RTW_PUT_BE32(p2pie + p2pielen, INTEL_DEV_TYPE_OUI);
27405 + p2pielen += 4;
27406 +
27407 + RTW_PUT_BE16(p2pie + p2pielen, P2P_SCID_WIDI_CONSUMER_SINK);
27408 + p2pielen += 2;
27409 + }
27410 + else if( widi_version == 40 )
27411 + {
27412 + p2pie[ p2pielen++ ] = pmlmepriv->num_p2p_sdt;
27413 + for( ; i < pmlmepriv->num_p2p_sdt; i++ )
27414 + {
27415 + RTW_PUT_BE16(p2pie + p2pielen, pmlmepriv->p2p_sdt_cid[i]);
27416 + p2pielen += 2;
27417 +
27418 + RTW_PUT_BE32(p2pie + p2pielen, INTEL_DEV_TYPE_OUI);
27419 + p2pielen += 4;
27420 +
27421 + RTW_PUT_BE16(p2pie + p2pielen, pmlmepriv->p2p_sdt_scid[i]);
27422 + p2pielen += 2;
27423 + }
27424 + }
27425 + else
27426 +#endif //CONFIG_INTEL_WIDI
27427 p2pie[ p2pielen++ ] = 0x00; // No Secondary Device Type List
27428
27429 // Device Name
27430 @@ -1654,7 +2100,6 @@ u32 build_probe_resp_p2p_ie(struct wifid
27431 _rtw_memcpy( p2pie + p2pielen, pwdinfo->device_name, pwdinfo->device_name_len );
27432 p2pielen += pwdinfo->device_name_len;
27433
27434 -
27435 // Group Info ATTR
27436 // Type:
27437 // Length:
27438 @@ -1701,12 +2146,13 @@ u32 build_prov_disc_request_p2p_ie(struc
27439
27440 // Value:
27441 // Device Capability Bitmap, 1 byte
27442 - // Be able to participate in additional P2P Groups and
27443 - // support the P2P Invitation Procedure
27444 - p2pie[ p2pielen++ ] = P2P_DEVCAP_INVITATION_PROC;
27445 + p2pie[ p2pielen++ ] = DMP_P2P_DEVCAP_SUPPORT;
27446
27447 // Group Capability Bitmap, 1 byte
27448 - p2pie[ p2pielen++ ] = 0x00;
27449 + if ( pwdinfo->persistent_supported )
27450 + p2pie[ p2pielen++ ] = P2P_GRPCAP_PERSISTENT_GROUP | DMP_P2P_GRPCAP_SUPPORT;
27451 + else
27452 + p2pie[ p2pielen++ ] = DMP_P2P_GRPCAP_SUPPORT;
27453
27454
27455 // Device Info ATTR
27456 @@ -1742,8 +2188,8 @@ u32 build_prov_disc_request_p2p_ie(struc
27457
27458 // Primary Device Type
27459 // Category ID
27460 - //*(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_CID_RTK_WIDI );
27461 - RTW_PUT_BE16(p2pie + p2pielen, WPS_PDT_CID_RTK_WIDI);
27462 + //*(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_CID_MULIT_MEDIA );
27463 + RTW_PUT_BE16(p2pie + p2pielen, WPS_PDT_CID_MULIT_MEDIA);
27464 p2pielen += 2;
27465
27466 // OUI
27467 @@ -1752,8 +2198,8 @@ u32 build_prov_disc_request_p2p_ie(struc
27468 p2pielen += 4;
27469
27470 // Sub Category ID
27471 - //*(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_SCID_RTK_DMP );
27472 - RTW_PUT_BE16(p2pie + p2pielen, WPS_PDT_SCID_RTK_DMP);
27473 + //*(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_SCID_MEDIA_SERVER );
27474 + RTW_PUT_BE16(p2pie + p2pielen, WPS_PDT_SCID_MEDIA_SERVER);
27475 p2pielen += 2;
27476
27477 // Number of Secondary Device Types
27478 @@ -1896,6 +2342,7 @@ u32 process_probe_req_p2p_ie(struct wifi
27479 p = rtw_get_ie(pframe + WLAN_HDR_A3_LEN + _PROBEREQ_IE_OFFSET_, _SSID_IE_, (int *)&ssid_len,
27480 len - WLAN_HDR_A3_LEN - _PROBEREQ_IE_OFFSET_);
27481
27482 + ssid_len &= 0xff; // Just last 1 byte is valid for ssid len of the probe request
27483 if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_DEVICE) || rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
27484 {
27485 if((p2pie=rtw_get_p2p_ie( pframe + WLAN_HDR_A3_LEN + _PROBEREQ_IE_OFFSET_ , len - WLAN_HDR_A3_LEN - _PROBEREQ_IE_OFFSET_ , NULL, &p2pielen)))
27486 @@ -1907,6 +2354,10 @@ u32 process_probe_req_p2p_ie(struct wifi
27487 //Check Device ID attribute in P2P IE
27488
27489 ret = _TRUE;
27490 + }
27491 + else if ( (p != NULL) && ( ssid_len == 0 ) )
27492 + {
27493 + ret = _TRUE;
27494 }
27495 }
27496 else
27497 @@ -2182,7 +2633,7 @@ u8 process_p2p_provdisc_req(struct wifid
27498 issue_p2p_provision_resp( pwdinfo, GetAddr2Ptr(pframe), frame_body, uconfig_method);
27499 }
27500 }
27501 - DBG_8192C( "[%s] config method = %s\n", __FUNCTION__, pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req );
27502 + DBG_871X( "[%s] config method = %s\n", __FUNCTION__, pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req );
27503 return _TRUE;
27504
27505 }
27506 @@ -2193,31 +2644,93 @@ u8 process_p2p_provdisc_resp(struct wifi
27507 return _TRUE;
27508 }
27509
27510 +u8 rtw_p2p_get_peer_ch_list(struct wifidirect_info *pwdinfo, u8 *ch_content, u8 ch_cnt, u8 *peer_ch_list)
27511 +{
27512 + u8 i = 0, j = 0;
27513 + u8 temp = 0;
27514 + u8 ch_no = 0;
27515 + ch_content += 3;
27516 + ch_cnt -= 3;
27517 +
27518 + while( ch_cnt > 0)
27519 + {
27520 + ch_content += 1;
27521 + ch_cnt -= 1;
27522 + temp = *ch_content;
27523 + for( i = 0 ; i < temp ; i++, j++ )
27524 + {
27525 + peer_ch_list[j] = *( ch_content + 1 + i );
27526 + }
27527 + ch_content += (temp + 1);
27528 + ch_cnt -= (temp + 1);
27529 + ch_no += temp ;
27530 + }
27531 +
27532 + return ch_no;
27533 +}
27534 +
27535 +u8 rtw_p2p_check_peer_oper_ch(struct mlme_ext_priv *pmlmeext, u8 ch)
27536 +{
27537 + u8 i = 0;
27538 +
27539 + for( i = 0; i < pmlmeext->max_chan_nums; i++ )
27540 + {
27541 + if ( pmlmeext->channel_set[ i ].ChannelNum == ch )
27542 + {
27543 + return _SUCCESS;
27544 + }
27545 + }
27546 +
27547 + return _FAIL;
27548 +}
27549 +
27550 +u8 rtw_p2p_ch_inclusion(struct mlme_ext_priv *pmlmeext, u8 *peer_ch_list, u8 peer_ch_num, u8 *ch_list_inclusioned)
27551 +{
27552 + int i = 0, j = 0, temp = 0;
27553 + u8 ch_no = 0;
27554 +
27555 + for( i = 0; i < peer_ch_num; i++ )
27556 + {
27557 + for( j = temp; j < pmlmeext->max_chan_nums; j++ )
27558 + {
27559 + if( *( peer_ch_list + i ) == pmlmeext->channel_set[ j ].ChannelNum )
27560 + {
27561 + ch_list_inclusioned[ ch_no++ ] = *( peer_ch_list + i );
27562 + temp = j;
27563 + break;
27564 + }
27565 + }
27566 + }
27567
27568 + return ch_no;
27569 +}
27570
27571 u8 process_p2p_group_negotation_req( struct wifidirect_info *pwdinfo, u8 *pframe, uint len )
27572 {
27573 + _adapter *padapter = pwdinfo->padapter;
27574 u8 result = P2P_STATUS_SUCCESS;
27575 u32 p2p_ielen = 0, wps_ielen = 0;
27576 u8 * ies;
27577 u32 ies_len;
27578 - u8 * p2p_ie;
27579 - u8 *wpsie;
27580 + u8 *p2p_ie;
27581 + u8 *wpsie;
27582 u16 wps_devicepassword_id = 0x0000;
27583 uint wps_devicepassword_id_len = 0;
27584 #ifdef CONFIG_WFD
27585 u8 wfd_ie[ 128 ] = { 0x00 };
27586 u32 wfd_ielen = 0;
27587 +#ifdef CONFIG_TDLS
27588 + struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
27589 +#endif // CONFIG_TDLS
27590 #endif // CONFIG_WFD
27591 +#ifdef CONFIG_CONCURRENT_MODE
27592 + _adapter *pbuddy_adapter = pwdinfo->padapter->pbuddy_adapter;
27593 + struct wifidirect_info *pbuddy_wdinfo = &pbuddy_adapter->wdinfo;
27594 + struct mlme_priv *pbuddy_mlmepriv = &pbuddy_adapter->mlmepriv;
27595 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
27596 +#endif
27597
27598 - if ( pwdinfo->ui_got_wps_info == P2P_NO_WPSINFO )
27599 - {
27600 - result = P2P_STATUS_FAIL_INFO_UNAVAILABLE;
27601 - rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL);
27602 - return( result );
27603 - }
27604 -
27605 - if ( (wpsie=rtw_get_wps_ie( pframe + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, NULL, &wps_ielen)) )
27606 + if ( (wpsie=rtw_get_wps_ie( pframe + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, NULL, &wps_ielen)) )
27607 {
27608 // Commented by Kurt 20120113
27609 // If some device wants to do p2p handshake without sending prov_disc_req
27610 @@ -2243,12 +2756,19 @@ u8 process_p2p_group_negotation_req( str
27611 }
27612 else
27613 {
27614 - DBG_8192C( "[%s] WPS IE not Found!!\n", __FUNCTION__ );
27615 + DBG_871X( "[%s] WPS IE not Found!!\n", __FUNCTION__ );
27616 result = P2P_STATUS_FAIL_INCOMPATIBLE_PARAM;
27617 rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL);
27618 return( result );
27619 }
27620
27621 + if ( pwdinfo->ui_got_wps_info == P2P_NO_WPSINFO )
27622 + {
27623 + result = P2P_STATUS_FAIL_INFO_UNAVAILABLE;
27624 + rtw_p2p_set_state(pwdinfo, P2P_STATE_TX_INFOR_NOREADY);
27625 + return( result );
27626 + }
27627 +
27628 ies = pframe + _PUBLIC_ACTION_IE_OFFSET_;
27629 ies_len = len - _PUBLIC_ACTION_IE_OFFSET_;
27630
27631 @@ -2256,7 +2776,7 @@ u8 process_p2p_group_negotation_req( str
27632
27633 if ( !p2p_ie )
27634 {
27635 - DBG_8192C( "[%s] P2P IE not Found!!\n", __FUNCTION__ );
27636 + DBG_871X( "[%s] P2P IE not Found!!\n", __FUNCTION__ );
27637 result = P2P_STATUS_FAIL_INCOMPATIBLE_PARAM;
27638 rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL);
27639 }
27640 @@ -2265,12 +2785,30 @@ u8 process_p2p_group_negotation_req( str
27641 {
27642 u8 attr_content = 0x00;
27643 u32 attr_contentlen = 0;
27644 + u8 ch_content[100] = { 0x00 };
27645 + uint ch_cnt = 0;
27646 + u8 peer_ch_list[100] = { 0x00 };
27647 + u8 peer_ch_num = 0;
27648 + u8 ch_list_inclusioned[100] = { 0x00 };
27649 + u8 ch_num_inclusioned = 0;
27650 + u16 cap_attr;
27651
27652 rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_ING);
27653 -
27654 +
27655 + //Check P2P Capability ATTR
27656 + if(rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CAPABILITY, (u8*)&cap_attr, (uint*)&attr_contentlen) )
27657 + {
27658 + cap_attr = le16_to_cpu(cap_attr);
27659 +
27660 +#if defined(CONFIG_WFD) && defined(CONFIG_TDLS)
27661 + if(!(cap_attr & P2P_GRPCAP_INTRABSS) )
27662 + ptdlsinfo->ap_prohibited = _TRUE;
27663 +#endif //defined(CONFIG_WFD) && defined(CONFIG_TDLS)
27664 + }
27665 +
27666 if ( rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GO_INTENT , &attr_content, &attr_contentlen) )
27667 {
27668 - DBG_8192C( "[%s] GO Intent = %d, tie = %d\n", __FUNCTION__, attr_content >> 1, attr_content & 0x01 );
27669 + DBG_871X( "[%s] GO Intent = %d, tie = %d\n", __FUNCTION__, attr_content >> 1, attr_content & 0x01 );
27670 pwdinfo->peer_intent = attr_content; // include both intent and tie breaker values.
27671
27672 if ( pwdinfo->intent == ( pwdinfo->peer_intent >> 1 ) )
27673 @@ -2320,6 +2858,64 @@ u8 process_p2p_group_negotation_req( str
27674 }
27675 }
27676
27677 + if ( rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CH_LIST, ch_content, &ch_cnt) )
27678 + {
27679 + peer_ch_num = rtw_p2p_get_peer_ch_list(pwdinfo, ch_content, ch_cnt, peer_ch_list);
27680 + ch_num_inclusioned = rtw_p2p_ch_inclusion(&padapter->mlmeextpriv, peer_ch_list, peer_ch_num, ch_list_inclusioned);
27681 +
27682 + if( ch_num_inclusioned == 0)
27683 + {
27684 + DBG_871X( "[%s] No common channel in channel list!\n", __FUNCTION__ );
27685 + result = P2P_STATUS_FAIL_NO_COMMON_CH;
27686 + rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL);
27687 + break;
27688 + }
27689 +
27690 + if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
27691 + {
27692 + if ( !rtw_p2p_is_channel_list_ok( pwdinfo->operating_channel,
27693 + ch_list_inclusioned, ch_num_inclusioned) )
27694 + {
27695 +#ifdef CONFIG_CONCURRENT_MODE
27696 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
27697 + {
27698 + DBG_871X( "[%s] desired channel NOT Found!\n", __FUNCTION__ );
27699 + result = P2P_STATUS_FAIL_NO_COMMON_CH;
27700 + rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL);
27701 + break;
27702 + }
27703 + else
27704 +#endif //CONFIG_CONCURRENT_MODE
27705 + {
27706 + u8 operatingch_info[5] = { 0x00 }, peer_operating_ch = 0;
27707 + attr_contentlen = 0;
27708 +
27709 + if ( rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, operatingch_info, &attr_contentlen) )
27710 + {
27711 + peer_operating_ch = operatingch_info[4];
27712 + }
27713 +
27714 + if ( rtw_p2p_is_channel_list_ok( peer_operating_ch,
27715 + ch_list_inclusioned, ch_num_inclusioned) )
27716 + {
27717 + /**
27718 + * Change our operating channel as peer's for compatibility.
27719 + */
27720 + pwdinfo->operating_channel = peer_operating_ch;
27721 + DBG_871X( "[%s] Change op ch to %02x as peer's\n", __FUNCTION__, pwdinfo->operating_channel);
27722 + }
27723 + else
27724 + {
27725 + // Take first channel of ch_list_inclusioned as operating channel
27726 + pwdinfo->operating_channel = ch_list_inclusioned[0];
27727 + DBG_871X( "[%s] Change op ch to %02x\n", __FUNCTION__, pwdinfo->operating_channel);
27728 + }
27729 + }
27730 +
27731 + }
27732 + }
27733 + }
27734 +
27735 //Get the next P2P IE
27736 p2p_ie = rtw_get_p2p_ie(p2p_ie+p2p_ielen, ies_len -(p2p_ie -ies + p2p_ielen), NULL, &p2p_ielen);
27737 }
27738 @@ -2332,12 +2928,12 @@ u8 process_p2p_group_negotation_req( str
27739 u8 attr_content[ 10 ] = { 0x00 };
27740 u32 attr_contentlen = 0;
27741
27742 - DBG_8192C( "[%s] WFD IE Found!!\n", __FUNCTION__ );
27743 + DBG_871X( "[%s] WFD IE Found!!\n", __FUNCTION__ );
27744 rtw_get_wfd_attr_content( wfd_ie, wfd_ielen, WFD_ATTR_DEVICE_INFO, attr_content, &attr_contentlen);
27745 if ( attr_contentlen )
27746 {
27747 - pwdinfo->wfd_info.peer_rtsp_ctrlport = RTW_GET_BE16( attr_content + 2 );
27748 - DBG_8192C( "[%s] Peer PORT NUM = %d\n", __FUNCTION__, pwdinfo->wfd_info.peer_rtsp_ctrlport );
27749 + pwdinfo->wfd_info->peer_rtsp_ctrlport = RTW_GET_BE16( attr_content + 2 );
27750 + DBG_871X( "[%s] Peer PORT NUM = %d\n", __FUNCTION__, pwdinfo->wfd_info->peer_rtsp_ctrlport );
27751 }
27752 }
27753 #endif // CONFIG_WFD
27754 @@ -2347,6 +2943,7 @@ u8 process_p2p_group_negotation_req( str
27755
27756 u8 process_p2p_group_negotation_resp( struct wifidirect_info *pwdinfo, u8 *pframe, uint len )
27757 {
27758 + _adapter *padapter = pwdinfo->padapter;
27759 u8 result = P2P_STATUS_SUCCESS;
27760 u32 p2p_ielen, wps_ielen;
27761 u8 * ies;
27762 @@ -2355,7 +2952,10 @@ u8 process_p2p_group_negotation_resp( st
27763 #ifdef CONFIG_WFD
27764 u8 wfd_ie[ 128 ] = { 0x00 };
27765 u32 wfd_ielen = 0;
27766 -#endif // CONFIG_WFD
27767 +#ifdef CONFIG_TDLS
27768 + struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
27769 +#endif // CONFIG_TDLS
27770 +#endif // CONFIG_WFD
27771
27772 ies = pframe + _PUBLIC_ACTION_IE_OFFSET_;
27773 ies_len = len - _PUBLIC_ACTION_IE_OFFSET_;
27774 @@ -2368,7 +2968,7 @@ u8 process_p2p_group_negotation_resp( st
27775 }
27776 else
27777 {
27778 - DBG_8192C( "[%s] WPS IE not Found!!\n", __FUNCTION__ );
27779 + DBG_871X( "[%s] WPS IE not Found!!\n", __FUNCTION__ );
27780 result = P2P_STATUS_FAIL_INCOMPATIBLE_PARAM;
27781 rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL);
27782 }
27783 @@ -2382,28 +2982,48 @@ u8 process_p2p_group_negotation_resp( st
27784 }
27785 else
27786 {
27787 +
27788 u8 attr_content = 0x00;
27789 u32 attr_contentlen = 0;
27790 u8 operatingch_info[5] = { 0x00 };
27791 uint ch_cnt = 0;
27792 - u8 ch_content[50] = { 0x00 };
27793 + u8 ch_content[100] = { 0x00 };
27794 u8 groupid[ 38 ];
27795 -
27796 + u16 cap_attr;
27797 + u8 peer_ch_list[100] = { 0x00 };
27798 + u8 peer_ch_num = 0;
27799 + u8 ch_list_inclusioned[100] = { 0x00 };
27800 + u8 ch_num_inclusioned = 0;
27801 +
27802 while ( p2p_ie ) // Found the P2P IE.
27803 {
27804
27805 + //Check P2P Capability ATTR
27806 + if(rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CAPABILITY, (u8*)&cap_attr, (uint*)&attr_contentlen) )
27807 + {
27808 + cap_attr = le16_to_cpu(cap_attr);
27809 +#if defined(CONFIG_WFD) && defined(CONFIG_TDLS)
27810 + if(!(cap_attr & P2P_GRPCAP_INTRABSS) )
27811 + ptdlsinfo->ap_prohibited = _TRUE;
27812 +#endif //defined(CONFIG_WFD) && defined(CONFIG_TDLS)
27813 + }
27814 +
27815 rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_STATUS, &attr_content, &attr_contentlen);
27816 if ( attr_contentlen == 1 )
27817 {
27818 - DBG_8192C( "[%s] Status = %d\n", __FUNCTION__, attr_content );
27819 + DBG_871X( "[%s] Status = %d\n", __FUNCTION__, attr_content );
27820 if ( attr_content == P2P_STATUS_SUCCESS )
27821 {
27822 // Do nothing.
27823 }
27824 else
27825 {
27826 + if ( P2P_STATUS_FAIL_INFO_UNAVAILABLE == attr_content ) {
27827 + rtw_p2p_set_state(pwdinfo, P2P_STATE_RX_INFOR_NOREADY);
27828 + } else {
27829 + rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL);
27830 + }
27831 rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
27832 - rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL);
27833 result = attr_content;
27834 break;
27835 }
27836 @@ -2424,7 +3044,7 @@ u8 process_p2p_group_negotation_resp( st
27837 attr_contentlen = 0;
27838 if ( rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GO_INTENT , &attr_content, &attr_contentlen) )
27839 {
27840 - DBG_8192C( "[%s] GO Intent = %d, tie = %d\n", __FUNCTION__, attr_content >> 1, attr_content & 0x01 );
27841 + DBG_871X( "[%s] GO Intent = %d, tie = %d\n", __FUNCTION__, attr_content >> 1, attr_content & 0x01 );
27842 pwdinfo->peer_intent = attr_content; // include both intent and tie breaker values.
27843
27844 if ( pwdinfo->intent == ( pwdinfo->peer_intent >> 1 ) )
27845 @@ -2439,6 +3059,7 @@ u8 process_p2p_group_negotation_resp( st
27846 else
27847 {
27848 rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_OK);
27849 + rtw_p2p_set_pre_state(pwdinfo, P2P_STATE_GONEGO_OK);
27850 if ( attr_content & 0x01 )
27851 {
27852 rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT);
27853 @@ -2452,11 +3073,13 @@ u8 process_p2p_group_negotation_resp( st
27854 else if ( pwdinfo->intent > ( pwdinfo->peer_intent >> 1 ) )
27855 {
27856 rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_OK);
27857 + rtw_p2p_set_pre_state(pwdinfo, P2P_STATE_GONEGO_OK);
27858 rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO);
27859 }
27860 else
27861 {
27862 rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_OK);
27863 + rtw_p2p_set_pre_state(pwdinfo, P2P_STATE_GONEGO_OK);
27864 rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT);
27865 }
27866
27867 @@ -2474,20 +3097,74 @@ u8 process_p2p_group_negotation_resp( st
27868 attr_contentlen = 0;
27869 if ( rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, operatingch_info, &attr_contentlen))
27870 {
27871 - DBG_8192C( "[%s] Peer's operating channel = %d\n", __FUNCTION__, operatingch_info[4] );
27872 + DBG_871X( "[%s] Peer's operating channel = %d\n", __FUNCTION__, operatingch_info[4] );
27873 pwdinfo->peer_operating_ch = operatingch_info[4];
27874 }
27875
27876 // Try to get the channel list information
27877 - if ( rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CH_LIST, ch_content, &ch_cnt) )
27878 + if ( rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CH_LIST, pwdinfo->channel_list_attr, &pwdinfo->channel_list_attr_len ) )
27879 {
27880 - pwdinfo->channel_cnt = ch_content[ 4 ]; // Number of Channels
27881 - _rtw_memcpy( pwdinfo->channel_list, &ch_content[ 5 ], pwdinfo->channel_cnt ); // Channel List
27882 - DBG_8192C( "[%s] channel count = %d\n", __FUNCTION__, pwdinfo->channel_cnt );
27883 + DBG_871X( "[%s] channel list attribute found, len = %d\n", __FUNCTION__, pwdinfo->channel_list_attr_len );
27884 +
27885 + peer_ch_num = rtw_p2p_get_peer_ch_list(pwdinfo, pwdinfo->channel_list_attr, pwdinfo->channel_list_attr_len, peer_ch_list);
27886 + ch_num_inclusioned = rtw_p2p_ch_inclusion(&padapter->mlmeextpriv, peer_ch_list, peer_ch_num, ch_list_inclusioned);
27887 +
27888 + if( ch_num_inclusioned == 0)
27889 + {
27890 + DBG_871X( "[%s] No common channel in channel list!\n", __FUNCTION__ );
27891 + result = P2P_STATUS_FAIL_NO_COMMON_CH;
27892 + rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL);
27893 + break;
27894 + }
27895 +
27896 + if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
27897 + {
27898 + if ( !rtw_p2p_is_channel_list_ok( pwdinfo->operating_channel,
27899 + ch_list_inclusioned, ch_num_inclusioned) )
27900 + {
27901 +#ifdef CONFIG_CONCURRENT_MODE
27902 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
27903 + {
27904 + DBG_871X( "[%s] desired channel NOT Found!\n", __FUNCTION__ );
27905 + result = P2P_STATUS_FAIL_NO_COMMON_CH;
27906 + rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL);
27907 + break;
27908 + }
27909 + else
27910 +#endif //CONFIG_CONCURRENT_MODE
27911 + {
27912 + u8 operatingch_info[5] = { 0x00 }, peer_operating_ch = 0;
27913 + attr_contentlen = 0;
27914 +
27915 + if ( rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, operatingch_info, &attr_contentlen) )
27916 + {
27917 + peer_operating_ch = operatingch_info[4];
27918 + }
27919 +
27920 + if ( rtw_p2p_is_channel_list_ok( peer_operating_ch,
27921 + ch_list_inclusioned, ch_num_inclusioned) )
27922 + {
27923 + /**
27924 + * Change our operating channel as peer's for compatibility.
27925 + */
27926 + pwdinfo->operating_channel = peer_operating_ch;
27927 + DBG_871X( "[%s] Change op ch to %02x as peer's\n", __FUNCTION__, pwdinfo->operating_channel);
27928 + }
27929 + else
27930 + {
27931 + // Take first channel of ch_list_inclusioned as operating channel
27932 + pwdinfo->operating_channel = ch_list_inclusioned[0];
27933 + DBG_871X( "[%s] Change op ch to %02x\n", __FUNCTION__, pwdinfo->operating_channel);
27934 + }
27935 + }
27936 +
27937 + }
27938 + }
27939 +
27940 }
27941 else
27942 {
27943 - DBG_8192C( "[%s] channel list attribute not found!\n", __FUNCTION__);
27944 + DBG_871X( "[%s] channel list attribute not found!\n", __FUNCTION__);
27945 }
27946
27947 // Try to get the group id information if peer is GO
27948 @@ -2517,8 +3194,8 @@ u8 process_p2p_group_negotation_resp( st
27949 rtw_get_wfd_attr_content( wfd_ie, wfd_ielen, WFD_ATTR_DEVICE_INFO, attr_content, &attr_contentlen);
27950 if ( attr_contentlen )
27951 {
27952 - pwdinfo->wfd_info.peer_rtsp_ctrlport = RTW_GET_BE16( attr_content + 2 );
27953 - DBG_8192C( "[%s] Peer PORT NUM = %d\n", __FUNCTION__, pwdinfo->wfd_info.peer_rtsp_ctrlport );
27954 + pwdinfo->wfd_info->peer_rtsp_ctrlport = RTW_GET_BE16( attr_content + 2 );
27955 + DBG_8192C( "[%s] Peer PORT NUM = %d\n", __FUNCTION__, pwdinfo->wfd_info->peer_rtsp_ctrlport );
27956 }
27957 }
27958 #endif // CONFIG_WFD
27959 @@ -2534,7 +3211,6 @@ u8 process_p2p_group_negotation_confirm(
27960 u8 * p2p_ie;
27961 u32 p2p_ielen = 0;
27962 u8 result = P2P_STATUS_SUCCESS;
27963 -
27964 ies = pframe + _PUBLIC_ACTION_IE_OFFSET_;
27965 ies_len = len - _PUBLIC_ACTION_IE_OFFSET_;
27966
27967 @@ -2549,7 +3225,7 @@ u8 process_p2p_group_negotation_confirm(
27968 rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_STATUS, &attr_content, &attr_contentlen);
27969 if ( attr_contentlen == 1 )
27970 {
27971 - DBG_8192C( "[%s] Status = %d\n", __FUNCTION__, attr_content );
27972 + DBG_871X( "[%s] Status = %d\n", __FUNCTION__, attr_content );
27973 result = attr_content;
27974
27975 if ( attr_content == P2P_STATUS_SUCCESS )
27976 @@ -2561,6 +3237,7 @@ u8 process_p2p_group_negotation_confirm(
27977 // Commented by Albert 20100911
27978 // Todo: Need to handle the case which both Intents are the same.
27979 rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_OK);
27980 + rtw_p2p_set_pre_state(pwdinfo, P2P_STATE_GONEGO_OK);
27981 if ( ( pwdinfo->intent ) > ( pwdinfo->peer_intent >> 1 ) )
27982 {
27983 rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO);
27984 @@ -2581,6 +3258,14 @@ u8 process_p2p_group_negotation_confirm(
27985 rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO);
27986 }
27987 }
27988 +
27989 +#ifdef CONFIG_CONCURRENT_MODE
27990 + if ( check_buddy_fwstate(pwdinfo->padapter , _FW_LINKED ) )
27991 + {
27992 + // Switch back to the AP channel soon.
27993 + _set_timer( &pwdinfo->ap_p2p_switch_timer, 100 );
27994 + }
27995 +#endif
27996 }
27997 else
27998 {
27999 @@ -2595,7 +3280,7 @@ u8 process_p2p_group_negotation_confirm(
28000 _rtw_memset( groupid, 0x00, 38 );
28001 if ( rtw_get_p2p_attr_content( p2p_ie, p2p_ielen, P2P_ATTR_GROUP_ID, groupid, &attr_contentlen) )
28002 {
28003 - DBG_8192C( "[%s] Ssid = %s, ssidlen = %d\n", __FUNCTION__, &groupid[ETH_ALEN], strlen(&groupid[ETH_ALEN]) );
28004 + DBG_871X( "[%s] Ssid = %s, ssidlen = %d\n", __FUNCTION__, &groupid[ETH_ALEN], (u32)strlen(&groupid[ETH_ALEN]) );
28005 _rtw_memcpy( pwdinfo->groupid_info.go_device_addr, &groupid[0], ETH_ALEN );
28006 _rtw_memcpy( pwdinfo->groupid_info.ssid, &groupid[6], attr_contentlen - ETH_ALEN );
28007 }
28008 @@ -2603,7 +3288,7 @@ u8 process_p2p_group_negotation_confirm(
28009 attr_contentlen = 0;
28010 if ( rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, operatingch_info, &attr_contentlen) )
28011 {
28012 - DBG_8192C( "[%s] Peer's operating channel = %d\n", __FUNCTION__, operatingch_info[4] );
28013 + DBG_871X( "[%s] Peer's operating channel = %d\n", __FUNCTION__, operatingch_info[4] );
28014 pwdinfo->peer_operating_ch = operatingch_info[4];
28015 }
28016
28017 @@ -2632,114 +3317,6 @@ u8 process_p2p_presence_req(struct wifid
28018 return _TRUE;
28019 }
28020
28021 -void process_p2p_ps_ie(PADAPTER padapter, u8 *IEs, u32 IELength)
28022 -{
28023 - u8 * ies;
28024 - u32 ies_len;
28025 - u8 * p2p_ie;
28026 - u32 p2p_ielen = 0;
28027 - u8 noa_attr[MAX_P2P_IE_LEN] = { 0x00 };// NoA length should be n*(13) + 2
28028 - u32 attr_contentlen = 0;
28029 -
28030 - struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
28031 - u8 find_p2p = _FALSE, find_p2p_ps = _FALSE;
28032 - u8 noa_offset, noa_num, noa_index;
28033 -
28034 -_func_enter_;
28035 -
28036 - if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
28037 - {
28038 - return;
28039 - }
28040 -
28041 - if(IELength <= _BEACON_IE_OFFSET_)
28042 - return;
28043 -
28044 - ies = IEs + _BEACON_IE_OFFSET_;
28045 - ies_len = IELength - _BEACON_IE_OFFSET_;
28046 -
28047 - p2p_ie = rtw_get_p2p_ie( ies, ies_len, NULL, &p2p_ielen);
28048 -
28049 - while(p2p_ie)
28050 - {
28051 - find_p2p = _TRUE;
28052 - // Get Notice of Absence IE.
28053 - if(rtw_get_p2p_attr_content( p2p_ie, p2p_ielen, P2P_ATTR_NOA, noa_attr, &attr_contentlen))
28054 - {
28055 - find_p2p_ps = _TRUE;
28056 - noa_index = noa_attr[0];
28057 -
28058 - if( (pwdinfo->p2p_ps_enable == _FALSE) ||
28059 - (noa_index != pwdinfo->noa_index) )// if index change, driver should reconfigure related setting.
28060 - {
28061 - pwdinfo->noa_index = noa_index;
28062 - pwdinfo->opp_ps = noa_attr[1] >> 7;
28063 - pwdinfo->ctwindow = noa_attr[1] & 0x7F;
28064 -
28065 - noa_offset = 2;
28066 - noa_num = 0;
28067 - // NoA length should be n*(13) + 2
28068 - if(attr_contentlen > 2)
28069 - {
28070 - while(noa_offset < attr_contentlen)
28071 - {
28072 - //_rtw_memcpy(&wifidirect_info->noa_count[noa_num], &noa_attr[noa_offset], 1);
28073 - pwdinfo->noa_count[noa_num] = noa_attr[noa_offset];
28074 - noa_offset += 1;
28075 -
28076 - _rtw_memcpy(&pwdinfo->noa_duration[noa_num], &noa_attr[noa_offset], 4);
28077 - noa_offset += 4;
28078 -
28079 - _rtw_memcpy(&pwdinfo->noa_interval[noa_num], &noa_attr[noa_offset], 4);
28080 - noa_offset += 4;
28081 -
28082 - _rtw_memcpy(&pwdinfo->noa_start_time[noa_num], &noa_attr[noa_offset], 4);
28083 - noa_offset += 4;
28084 -
28085 - noa_num++;
28086 - }
28087 - }
28088 - pwdinfo->noa_num = noa_num;
28089 -
28090 - if( pwdinfo->opp_ps == 1 )
28091 - {
28092 - pwdinfo->p2p_ps_enable = _TRUE;
28093 - // driver should wait LPS for entering CTWindow
28094 - if(padapter->pwrctrlpriv.bFwCurrentInPSMode == _TRUE)
28095 - {
28096 - p2p_ps_wk_cmd(padapter, P2P_PS_ENABLE, 1);
28097 - }
28098 - }
28099 - else if( pwdinfo->noa_num > 0 )
28100 - {
28101 - pwdinfo->p2p_ps_enable = _TRUE;
28102 - p2p_ps_wk_cmd(padapter, P2P_PS_ENABLE, 1);
28103 - }
28104 - else if( pwdinfo->p2p_ps_enable == _TRUE)
28105 - {
28106 - p2p_ps_wk_cmd(padapter, P2P_PS_DISABLE, 1);
28107 - }
28108 - }
28109 -
28110 - break; // find target, just break.
28111 - }
28112 -
28113 - //Get the next P2P IE
28114 - p2p_ie = rtw_get_p2p_ie(p2p_ie+p2p_ielen, ies_len -(p2p_ie -ies + p2p_ielen), NULL, &p2p_ielen);
28115 -
28116 - }
28117 -
28118 - if(find_p2p == _TRUE)
28119 - {
28120 - if( (pwdinfo->p2p_ps_enable == _TRUE) && (find_p2p_ps == _FALSE) )
28121 - {
28122 - p2p_ps_wk_cmd(padapter, P2P_PS_DISABLE, 1);
28123 - }
28124 - }
28125 -
28126 -_func_exit_;
28127 -}
28128 -
28129 void find_phase_handler( _adapter* padapter )
28130 {
28131 struct wifidirect_info *pwdinfo = &padapter->wdinfo;
28132 @@ -2757,13 +3334,15 @@ _func_enter_;
28133 rtw_p2p_set_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH);
28134
28135 _enter_critical_bh(&pmlmepriv->lock, &irqL);
28136 - _status = rtw_sitesurvey_cmd(padapter, &ssid, 1);
28137 + _status = rtw_sitesurvey_cmd(padapter, &ssid, 1, NULL, 0);
28138 _exit_critical_bh(&pmlmepriv->lock, &irqL);
28139
28140
28141 _func_exit_;
28142 }
28143
28144 +void p2p_concurrent_handler( _adapter* padapter );
28145 +
28146 void restore_p2p_state_handler( _adapter* padapter )
28147 {
28148 struct wifidirect_info *pwdinfo = &padapter->wdinfo;
28149 @@ -2771,16 +3350,56 @@ void restore_p2p_state_handler( _adapter
28150
28151 _func_enter_;
28152
28153 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_ING) || rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_FAIL))
28154 + {
28155 + rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
28156 + }
28157 +
28158 +#ifdef CONFIG_CONCURRENT_MODE
28159 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
28160 + {
28161 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
28162 + struct mlme_priv *pbuddy_mlmepriv = &pbuddy_adapter->mlmepriv;
28163 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
28164 +
28165 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_TX_PROVISION_DIS_REQ) || rtw_p2p_chk_state(pwdinfo, P2P_STATE_RX_PROVISION_DIS_RSP))
28166 + {
28167 + set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
28168 +
28169 + issue_nulldata(pbuddy_adapter, NULL, 0, 3, 500);
28170 + }
28171 + }
28172 +#endif
28173 +
28174 rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
28175 +
28176 if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_DEVICE))
28177 {
28178 +#ifdef CONFIG_CONCURRENT_MODE
28179 + p2p_concurrent_handler( padapter );
28180 +#else
28181 // In the P2P client mode, the driver should not switch back to its listen channel
28182 // because this P2P client should stay at the operating channel of P2P GO.
28183 set_channel_bwmode( padapter, pwdinfo->listen_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
28184 +#endif
28185 }
28186 _func_exit_;
28187 }
28188
28189 +void pre_tx_invitereq_handler( _adapter* padapter )
28190 +{
28191 + struct wifidirect_info *pwdinfo = &padapter->wdinfo;
28192 + u8 val8 = 1;
28193 +_func_enter_;
28194 +
28195 + set_channel_bwmode(padapter, pwdinfo->invitereq_info.peer_ch, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
28196 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
28197 + issue_probereq_p2p(padapter, NULL);
28198 + _set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
28199 +
28200 +_func_exit_;
28201 +}
28202 +
28203 void pre_tx_provdisc_handler( _adapter* padapter )
28204 {
28205 struct wifidirect_info *pwdinfo = &padapter->wdinfo;
28206 @@ -2788,8 +3407,8 @@ void pre_tx_provdisc_handler( _adapter*
28207 _func_enter_;
28208
28209 set_channel_bwmode(padapter, pwdinfo->tx_prov_disc_info.peer_channel_num[0], HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
28210 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
28211 - issue_probereq_p2p( padapter );
28212 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
28213 + issue_probereq_p2p(padapter, NULL);
28214 _set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
28215
28216 _func_exit_;
28217 @@ -2802,71 +3421,966 @@ void pre_tx_negoreq_handler( _adapter* p
28218 _func_enter_;
28219
28220 set_channel_bwmode(padapter, pwdinfo->nego_req_info.peer_channel_num[0], HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
28221 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
28222 - issue_probereq_p2p( padapter );
28223 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
28224 + issue_probereq_p2p(padapter, NULL);
28225 _set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
28226
28227 _func_exit_;
28228 }
28229
28230 -#ifdef CONFIG_IOCTL_CFG80211
28231 -void ro_ch_handler( _adapter* padapter )
28232 +#ifdef CONFIG_CONCURRENT_MODE
28233 +void p2p_concurrent_handler( _adapter* padapter )
28234 {
28235 - struct cfg80211_wifidirect_info *pcfg80211_wdinfo = &padapter->cfg80211_wdinfo;
28236 - struct wifidirect_info *pwdinfo = &padapter->wdinfo;
28237 - struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
28238 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
28239 + struct wifidirect_info *pwdinfo = &padapter->wdinfo;
28240 + //_adapter *pbuddy_adapter = padapter->pbuddy_adapter;
28241 + //struct wifidirect_info *pbuddy_wdinfo = &pbuddy_adapter->wdinfo;
28242 + //struct mlme_priv *pbuddy_mlmepriv = &pbuddy_adapter->mlmepriv;
28243 + //struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
28244 + u8 val8;
28245 _func_enter_;
28246
28247 -// if( pcfg80211_wdinfo->restore_channel != pmlmeext->cur_channel )
28248 -// set_channel_bwmode(padapter, pcfg80211_wdinfo->restore_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
28249 -
28250 - #if 0
28251 - // Disable P2P Listen State
28252 - if(!rtw_p2p_chk_role(pwdinfo, P2P_ROLE_CLIENT) && !rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
28253 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
28254 {
28255 - if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
28256 - {
28257 - _cancel_timer_ex( &pwdinfo->find_phase_timer );
28258 - _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
28259 - _cancel_timer_ex( &pwdinfo->pre_tx_scan_timer);
28260 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
28261 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
28262
28263 - rtw_p2p_set_state(pwdinfo, P2P_STATE_NONE);
28264 - _rtw_memset(pwdinfo, 0x00, sizeof(struct wifidirect_info));
28265 + pwdinfo->operating_channel = pbuddy_mlmeext->cur_channel;
28266
28267 - if(pwrpriv->bips_processing == _FALSE){
28268 - rtw_set_pwr_state_check_timer(pwrpriv);
28269 - }
28270 - }
28271 - }
28272 - else
28273 - #endif
28274 - {
28275 - if( pcfg80211_wdinfo->restore_channel != pmlmeext->cur_channel )
28276 + if( pwdinfo->driver_interface == DRIVER_CFG80211 )
28277 {
28278 - pmlmeext->cur_channel = pcfg80211_wdinfo->restore_channel;
28279 - set_channel_bwmode(padapter, pmlmeext->cur_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
28280 - }
28281 + DBG_871X("%s, switch ch back to buddy's cur_channel=%d\n", __func__, pbuddy_mlmeext->cur_channel);
28282 +
28283 + set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
28284
28285 - rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
28286 -#ifdef CONFIG_DEBUG_CFG80211
28287 - DBG_871X("%s, role=%d, p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo));
28288 -#endif
28289 - }
28290 + issue_nulldata(pbuddy_adapter, NULL, 0, 3, 500);
28291 + }
28292 + else if( pwdinfo->driver_interface == DRIVER_WEXT )
28293 + {
28294 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE))
28295 + {
28296 + // Now, the driver stays on the AP's channel.
28297 + // If the pwdinfo->ext_listen_period = 0, that means the P2P listen state is not available on listen channel.
28298 + if ( pwdinfo->ext_listen_period > 0 )
28299 + {
28300 + DBG_8192C( "[%s] P2P_STATE_IDLE, ext_listen_period = %d\n", __FUNCTION__, pwdinfo->ext_listen_period );
28301
28302 - cfg80211_remain_on_channel_expired(pcfg80211_wdinfo->remain_on_ch_dev,
28303 - pcfg80211_wdinfo->remain_on_ch_cookie,
28304 - &pcfg80211_wdinfo->remain_on_ch_channel,
28305 - pcfg80211_wdinfo->remain_on_ch_type, GFP_KERNEL);
28306 -_func_exit_;
28307 -}
28308 -#endif //CONFIG_IOCTL_CFG80211
28309 + if ( pbuddy_mlmeext->cur_channel != pwdinfo->listen_channel )
28310 + {
28311 + // Will switch to listen channel so that need to send the NULL data with PW bit to AP.
28312 + issue_nulldata(pbuddy_adapter, NULL, 1, 3, 500);
28313 + set_channel_bwmode(padapter, pwdinfo->listen_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
28314 + }
28315
28316 -void p2p_protocol_wk_hdl(_adapter *padapter, int intCmdType)
28317 -{
28318 - struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
28319 -
28320 -_func_enter_;
28321 + rtw_p2p_set_state(pwdinfo, P2P_STATE_LISTEN);
28322 + val8 = 1;
28323 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
28324 +
28325 + // Todo: To check the value of pwdinfo->ext_listen_period is equal to 0 or not.
28326 + _set_timer( &pwdinfo->ap_p2p_switch_timer, pwdinfo->ext_listen_period );
28327 + }
28328 + }
28329 + else if ( rtw_p2p_chk_state(pwdinfo, P2P_STATE_LISTEN) ||
28330 + rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_FAIL) ||
28331 + ( rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_ING) && pwdinfo->nego_req_info.benable == _FALSE ) ||
28332 + rtw_p2p_chk_state(pwdinfo, P2P_STATE_RX_PROVISION_DIS_REQ) )
28333 + {
28334 + // Now, the driver is in the listen state of P2P mode.
28335 + DBG_8192C( "[%s] P2P_STATE_IDLE, ext_listen_interval = %d\n", __FUNCTION__, pwdinfo->ext_listen_interval );
28336 +
28337 + // Commented by Albert 2012/11/01
28338 + // If the AP's channel is the same as the listen channel, we should still be in the listen state
28339 + // Other P2P device is still able to find this device out even this device is in the AP's channel.
28340 + // So, configure this device to be able to receive the probe request frame and set it to listen state.
28341 + if ( pbuddy_mlmeext->cur_channel != pwdinfo->listen_channel )
28342 + {
28343 + set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
28344 + val8 = 0;
28345 + padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
28346 + rtw_p2p_set_state(pwdinfo, P2P_STATE_IDLE);
28347 + issue_nulldata(pbuddy_adapter, NULL, 0, 3, 500);
28348 + }
28349 +
28350 + // Todo: To check the value of pwdinfo->ext_listen_interval is equal to 0 or not.
28351 + _set_timer( &pwdinfo->ap_p2p_switch_timer, pwdinfo->ext_listen_interval );
28352 + }
28353 + else if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_OK))
28354 + {
28355 + // The driver had finished the P2P handshake successfully.
28356 + val8 = 0;
28357 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
28358 + set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
28359 + issue_nulldata(pbuddy_adapter, NULL, 0, 3, 500);
28360 + }
28361 + else if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_TX_PROVISION_DIS_REQ))
28362 + {
28363 + val8 = 1;
28364 + set_channel_bwmode(padapter, pwdinfo->tx_prov_disc_info.peer_channel_num[0], HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
28365 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
28366 + issue_probereq_p2p(padapter, NULL);
28367 + _set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
28368 + }
28369 + else if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_ING) && pwdinfo->nego_req_info.benable == _TRUE)
28370 + {
28371 + val8 = 1;
28372 + set_channel_bwmode(padapter, pwdinfo->nego_req_info.peer_channel_num[0], HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
28373 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
28374 + issue_probereq_p2p(padapter, NULL);
28375 + _set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
28376 + }
28377 + else if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_TX_INVITE_REQ ) && pwdinfo->invitereq_info.benable == _TRUE)
28378 + {
28379 + /*
28380 + val8 = 1;
28381 + set_channel_bwmode(padapter, , HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
28382 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
28383 + issue_probereq_p2p(padapter, NULL);
28384 + _set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
28385 + */
28386 + }
28387 + }
28388 + }
28389 + else
28390 + {
28391 + set_channel_bwmode( padapter, pwdinfo->listen_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
28392 + }
28393 +
28394 +_func_exit_;
28395 +}
28396 +#endif
28397 +
28398 +#ifdef CONFIG_IOCTL_CFG80211
28399 +static void ro_ch_handler(_adapter *padapter)
28400 +{
28401 + struct cfg80211_wifidirect_info *pcfg80211_wdinfo = &padapter->cfg80211_wdinfo;
28402 + struct wifidirect_info *pwdinfo = &padapter->wdinfo;
28403 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
28404 + u8 ch, bw, offset;
28405 +_func_enter_;
28406 +
28407 + if (rtw_get_ch_setting_union(padapter, &ch, &bw, &offset) != 0) {
28408 + if (0)
28409 + DBG_871X(FUNC_ADPT_FMT" back to linked union - ch:%u, bw:%u, offset:%u\n",
28410 + FUNC_ADPT_ARG(padapter), ch, bw, offset);
28411 + }
28412 + else if (wdev_to_priv(padapter->rtw_wdev)->p2p_enabled && pwdinfo->listen_channel) {
28413 + ch = pwdinfo->listen_channel;
28414 + bw = HT_CHANNEL_WIDTH_20;
28415 + offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
28416 + if (0)
28417 + DBG_871X(FUNC_ADPT_FMT" back to listen ch - ch:%u, bw:%u, offset:%u\n",
28418 + FUNC_ADPT_ARG(padapter), ch, bw, offset);
28419 + }
28420 + else {
28421 + ch = pcfg80211_wdinfo->restore_channel;
28422 + bw = HT_CHANNEL_WIDTH_20;
28423 + offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
28424 + if (0)
28425 + DBG_871X(FUNC_ADPT_FMT" back to restore ch - ch:%u, bw:%u, offset:%u\n",
28426 + FUNC_ADPT_ARG(padapter), ch, bw, offset);
28427 + }
28428 +
28429 + set_channel_bwmode(padapter, ch, offset, bw);
28430 +
28431 + rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
28432 +#ifdef CONFIG_DEBUG_CFG80211
28433 + DBG_871X("%s, role=%d, p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo));
28434 +#endif
28435 +
28436 + pcfg80211_wdinfo->is_ro_ch = _FALSE;
28437 +
28438 + DBG_871X("cfg80211_remain_on_channel_expired\n");
28439 +
28440 + rtw_cfg80211_remain_on_channel_expired(padapter,
28441 + pcfg80211_wdinfo->remain_on_ch_cookie,
28442 + &pcfg80211_wdinfo->remain_on_ch_channel,
28443 + pcfg80211_wdinfo->remain_on_ch_type, GFP_KERNEL);
28444 +
28445 +_func_exit_;
28446 +}
28447 +
28448 +static void ro_ch_timer_process (void *FunctionContext)
28449 +{
28450 + _adapter *adapter = (_adapter *)FunctionContext;
28451 + struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(adapter->rtw_wdev);
28452 +
28453 + //printk("%s \n", __FUNCTION__);
28454 +
28455 +#ifdef CONFIG_CONCURRENT_MODE
28456 + ATOMIC_SET(&pwdev_priv->ro_ch_to, 1);
28457 +#endif
28458 +
28459 + p2p_protocol_wk_cmd( adapter, P2P_RO_CH_WK);
28460 +}
28461 +
28462 +static void rtw_change_p2pie_op_ch(_adapter *padapter, const u8 *frame_body, u32 len, u8 ch)
28463 +{
28464 + u8 *ies, *p2p_ie;
28465 + u32 ies_len, p2p_ielen;
28466 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
28467 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
28468 +
28469 + ies = (u8*)(frame_body + _PUBLIC_ACTION_IE_OFFSET_);
28470 + ies_len = len - _PUBLIC_ACTION_IE_OFFSET_;
28471 +
28472 + p2p_ie = rtw_get_p2p_ie( ies, ies_len, NULL, &p2p_ielen );
28473 +
28474 + while ( p2p_ie ) {
28475 + u32 attr_contentlen = 0;
28476 + u8 *pattr = NULL;
28477 +
28478 + //Check P2P_ATTR_OPERATING_CH
28479 + attr_contentlen = 0;
28480 + pattr = NULL;
28481 + if((pattr = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, NULL, (uint*)&attr_contentlen))!=NULL)
28482 + {
28483 + *(pattr+4) = ch;
28484 + }
28485 +
28486 + //Get the next P2P IE
28487 + p2p_ie = rtw_get_p2p_ie(p2p_ie+p2p_ielen, ies_len -(p2p_ie -ies + p2p_ielen), NULL, &p2p_ielen);
28488 + }
28489 +}
28490 +
28491 +static void rtw_change_p2pie_ch_list(_adapter *padapter, const u8 *frame_body, u32 len, u8 ch)
28492 +{
28493 + u8 *ies, *p2p_ie;
28494 + u32 ies_len, p2p_ielen;
28495 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
28496 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
28497 +
28498 + ies = (u8*)(frame_body + _PUBLIC_ACTION_IE_OFFSET_);
28499 + ies_len = len - _PUBLIC_ACTION_IE_OFFSET_;
28500 +
28501 + p2p_ie = rtw_get_p2p_ie( ies, ies_len, NULL, &p2p_ielen );
28502 +
28503 + while (p2p_ie) {
28504 + u32 attr_contentlen = 0;
28505 + u8 *pattr = NULL;
28506 +
28507 + //Check P2P_ATTR_CH_LIST
28508 + if ((pattr=rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CH_LIST, NULL, (uint*)&attr_contentlen))!=NULL) {
28509 + int i;
28510 + u32 num_of_ch;
28511 + u8 *pattr_temp = pattr + 3 ;
28512 +
28513 + attr_contentlen -= 3;
28514 +
28515 + while (attr_contentlen>0) {
28516 + num_of_ch = *(pattr_temp+1);
28517 +
28518 + for(i=0; i<num_of_ch; i++)
28519 + *(pattr_temp+2+i) = ch;
28520 +
28521 + pattr_temp += (2+num_of_ch);
28522 + attr_contentlen -= (2+num_of_ch);
28523 + }
28524 + }
28525 +
28526 + //Get the next P2P IE
28527 + p2p_ie = rtw_get_p2p_ie(p2p_ie+p2p_ielen, ies_len -(p2p_ie -ies + p2p_ielen), NULL, &p2p_ielen);
28528 + }
28529 +}
28530 +
28531 +static bool rtw_chk_p2pie_ch_list_with_buddy(_adapter *padapter, const u8 *frame_body, u32 len)
28532 +{
28533 + bool fit = _FALSE;
28534 +#ifdef CONFIG_CONCURRENT_MODE
28535 + u8 *ies, *p2p_ie;
28536 + u32 ies_len, p2p_ielen;
28537 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
28538 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
28539 + u8 buddy_ch = pbuddy_mlmeext->cur_channel;
28540 +
28541 + ies = (u8*)(frame_body + _PUBLIC_ACTION_IE_OFFSET_);
28542 + ies_len = len - _PUBLIC_ACTION_IE_OFFSET_;
28543 +
28544 + p2p_ie = rtw_get_p2p_ie( ies, ies_len, NULL, &p2p_ielen );
28545 +
28546 + while (p2p_ie) {
28547 + u32 attr_contentlen = 0;
28548 + u8 *pattr = NULL;
28549 +
28550 + //Check P2P_ATTR_CH_LIST
28551 + if ((pattr=rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CH_LIST, NULL, (uint*)&attr_contentlen))!=NULL) {
28552 + int i;
28553 + u32 num_of_ch;
28554 + u8 *pattr_temp = pattr + 3 ;
28555 +
28556 + attr_contentlen -= 3;
28557 +
28558 + while (attr_contentlen>0) {
28559 + num_of_ch = *(pattr_temp+1);
28560 +
28561 + for(i=0; i<num_of_ch; i++) {
28562 + if (*(pattr_temp+2+i) == buddy_ch) {
28563 + DBG_871X(FUNC_ADPT_FMT" ch_list fit buddy_ch:%u\n", FUNC_ADPT_ARG(padapter), buddy_ch);
28564 + fit = _TRUE;
28565 + break;
28566 + }
28567 + }
28568 +
28569 + pattr_temp += (2+num_of_ch);
28570 + attr_contentlen -= (2+num_of_ch);
28571 + }
28572 + }
28573 +
28574 + //Get the next P2P IE
28575 + p2p_ie = rtw_get_p2p_ie(p2p_ie+p2p_ielen, ies_len -(p2p_ie -ies + p2p_ielen), NULL, &p2p_ielen);
28576 + }
28577 +#endif
28578 + return fit;
28579 +}
28580 +
28581 +static bool rtw_chk_p2pie_op_ch_with_buddy(_adapter *padapter, const u8 *frame_body, u32 len)
28582 +{
28583 + bool fit = _FALSE;
28584 +#ifdef CONFIG_CONCURRENT_MODE
28585 + u8 *ies, *p2p_ie;
28586 + u32 ies_len, p2p_ielen;
28587 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
28588 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
28589 + u8 buddy_ch = pbuddy_mlmeext->cur_channel;
28590 +
28591 + ies = (u8*)(frame_body + _PUBLIC_ACTION_IE_OFFSET_);
28592 + ies_len = len - _PUBLIC_ACTION_IE_OFFSET_;
28593 +
28594 + p2p_ie = rtw_get_p2p_ie( ies, ies_len, NULL, &p2p_ielen );
28595 +
28596 + while (p2p_ie) {
28597 + u32 attr_contentlen = 0;
28598 + u8 *pattr = NULL;
28599 +
28600 + //Check P2P_ATTR_OPERATING_CH
28601 + attr_contentlen = 0;
28602 + pattr = NULL;
28603 + if((pattr = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, NULL, (uint*)&attr_contentlen))!=NULL) {
28604 + if (*(pattr+4) == buddy_ch) {
28605 + DBG_871X(FUNC_ADPT_FMT" op_ch fit buddy_ch:%u\n", FUNC_ADPT_ARG(padapter), buddy_ch);
28606 + fit = _TRUE;
28607 + break;
28608 + }
28609 + }
28610 +
28611 + //Get the next P2P IE
28612 + p2p_ie = rtw_get_p2p_ie(p2p_ie+p2p_ielen, ies_len -(p2p_ie -ies + p2p_ielen), NULL, &p2p_ielen);
28613 + }
28614 +#endif
28615 + return fit;
28616 +}
28617 +
28618 +static void rtw_cfg80211_adjust_p2pie_channel(_adapter *padapter, const u8 *frame_body, u32 len)
28619 +{
28620 +#ifdef CONFIG_CONCURRENT_MODE
28621 + u8 *ies, *p2p_ie;
28622 + u32 ies_len, p2p_ielen;
28623 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
28624 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
28625 +
28626 + ies = (u8*)(frame_body + _PUBLIC_ACTION_IE_OFFSET_);
28627 + ies_len = len - _PUBLIC_ACTION_IE_OFFSET_;
28628 +
28629 + p2p_ie = rtw_get_p2p_ie( ies, ies_len, NULL, &p2p_ielen );
28630 +
28631 + while ( p2p_ie )
28632 + {
28633 + u32 attr_contentlen = 0;
28634 + u8 *pattr = NULL;
28635 +
28636 + //Check P2P_ATTR_CH_LIST
28637 + if((pattr=rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CH_LIST, NULL, (uint*)&attr_contentlen))!=NULL)
28638 + {
28639 + int i;
28640 + u32 num_of_ch;
28641 + u8 *pattr_temp = pattr + 3 ;
28642 +
28643 + attr_contentlen -= 3;
28644 +
28645 + while(attr_contentlen>0)
28646 + {
28647 + num_of_ch = *(pattr_temp+1);
28648 +
28649 + for(i=0; i<num_of_ch; i++)
28650 + *(pattr_temp+2+i) = pbuddy_mlmeext->cur_channel;//forcing to the same channel
28651 +
28652 + pattr_temp += (2+num_of_ch);
28653 + attr_contentlen -= (2+num_of_ch);
28654 + }
28655 + }
28656 +
28657 + //Check P2P_ATTR_OPERATING_CH
28658 + attr_contentlen = 0;
28659 + pattr = NULL;
28660 + if((pattr = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, NULL, (uint*)&attr_contentlen))!=NULL)
28661 + {
28662 + *(pattr+4) = pbuddy_mlmeext->cur_channel;//forcing to the same channel
28663 + }
28664 +
28665 + //Get the next P2P IE
28666 + p2p_ie = rtw_get_p2p_ie(p2p_ie+p2p_ielen, ies_len -(p2p_ie -ies + p2p_ielen), NULL, &p2p_ielen);
28667 +
28668 + }
28669 +
28670 +#endif
28671 +}
28672 +
28673 +#ifdef CONFIG_WFD
28674 +void rtw_append_wfd_ie(_adapter *padapter, u8 *buf, u32* len)
28675 +{
28676 + unsigned char *frame_body;
28677 + u8 category, action, OUI_Subtype, dialogToken=0;
28678 + u32 wfdielen = 0;
28679 + struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(padapter->rtw_wdev);
28680 +
28681 + frame_body = (unsigned char *)(buf + sizeof(struct rtw_ieee80211_hdr_3addr));
28682 + category = frame_body[0];
28683 +
28684 + if(category == RTW_WLAN_CATEGORY_PUBLIC)
28685 + {
28686 + action = frame_body[1];
28687 + if (action == ACT_PUBLIC_VENDOR
28688 + && _rtw_memcmp(frame_body+2, P2P_OUI, 4) == _TRUE
28689 + )
28690 + {
28691 + OUI_Subtype = frame_body[6];
28692 + dialogToken = frame_body[7];
28693 + switch( OUI_Subtype )//OUI Subtype
28694 + {
28695 + case P2P_GO_NEGO_REQ:
28696 + {
28697 + wfdielen = build_nego_req_wfd_ie( &padapter->wdinfo, buf + ( *len ) );
28698 + (*len) += wfdielen;
28699 + break;
28700 + }
28701 + case P2P_GO_NEGO_RESP:
28702 + {
28703 + wfdielen = build_nego_resp_wfd_ie( &padapter->wdinfo, buf + ( *len ) );
28704 + (*len) += wfdielen;
28705 + break;
28706 + }
28707 + case P2P_GO_NEGO_CONF:
28708 + {
28709 + wfdielen = build_nego_confirm_wfd_ie( &padapter->wdinfo, buf + ( *len ) );
28710 + (*len) += wfdielen;
28711 + break;
28712 + }
28713 + case P2P_INVIT_REQ:
28714 + {
28715 + wfdielen = build_invitation_req_wfd_ie( &padapter->wdinfo, buf + ( *len ) );
28716 + (*len) += wfdielen;
28717 + break;
28718 + }
28719 + case P2P_INVIT_RESP:
28720 + {
28721 + wfdielen = build_invitation_resp_wfd_ie( &padapter->wdinfo, buf + ( *len ) );
28722 + (*len) += wfdielen;
28723 + break;
28724 + }
28725 + case P2P_DEVDISC_REQ:
28726 + break;
28727 + case P2P_DEVDISC_RESP:
28728 +
28729 + break;
28730 + case P2P_PROVISION_DISC_REQ:
28731 + {
28732 + wfdielen = build_provdisc_req_wfd_ie( &padapter->wdinfo, buf + ( *len ) );
28733 + (*len) += wfdielen;
28734 + break;
28735 + }
28736 + case P2P_PROVISION_DISC_RESP:
28737 + {
28738 + wfdielen = build_provdisc_resp_wfd_ie( &padapter->wdinfo, buf + ( *len ) );
28739 + (*len) += wfdielen;
28740 + break;
28741 + }
28742 + default:
28743 +
28744 + break;
28745 + }
28746 +
28747 + }
28748 +
28749 + }
28750 + else if(category == RTW_WLAN_CATEGORY_P2P)
28751 + {
28752 + OUI_Subtype = frame_body[5];
28753 + dialogToken = frame_body[6];
28754 +
28755 +#ifdef CONFIG_DEBUG_CFG80211
28756 + DBG_871X("ACTION_CATEGORY_P2P: OUI=0x%x, OUI_Subtype=%d, dialogToken=%d\n",
28757 + cpu_to_be32( *( ( u32* ) ( frame_body + 1 ) ) ), OUI_Subtype, dialogToken);
28758 +#endif
28759 +
28760 + switch(OUI_Subtype)
28761 + {
28762 + case P2P_NOTICE_OF_ABSENCE:
28763 +
28764 + break;
28765 + case P2P_PRESENCE_REQUEST:
28766 +
28767 + break;
28768 + case P2P_PRESENCE_RESPONSE:
28769 +
28770 + break;
28771 + case P2P_GO_DISC_REQUEST:
28772 +
28773 + break;
28774 + default:
28775 +
28776 + break;
28777 + }
28778 +
28779 + }
28780 + else
28781 + {
28782 + DBG_871X("%s, action frame category=%d\n", __func__, category);
28783 + //is_p2p_frame = (-1);
28784 + }
28785 +
28786 + return;
28787 +}
28788 +#endif
28789 +
28790 +u8 *dump_p2p_attr_ch_list(u8 *p2p_ie, uint p2p_ielen, u8 *buf, u32 buf_len)
28791 +{
28792 + uint attr_contentlen = 0;
28793 + u8 *pattr = NULL;
28794 + int w_sz = 0;
28795 + u8 ch_cnt = 0;
28796 + u8 ch_list[40];
28797 + bool continuous = _FALSE;
28798 +
28799 + if ((pattr=rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CH_LIST, NULL, &attr_contentlen))!=NULL) {
28800 + int i, j;
28801 + u32 num_of_ch;
28802 + u8 *pattr_temp = pattr + 3 ;
28803 +
28804 + attr_contentlen -= 3;
28805 +
28806 + _rtw_memset(ch_list, 0, 40);
28807 +
28808 + while (attr_contentlen>0) {
28809 + num_of_ch = *(pattr_temp+1);
28810 +
28811 + for(i=0; i<num_of_ch; i++) {
28812 + for (j=0;j<ch_cnt;j++) {
28813 + if (ch_list[j] == *(pattr_temp+2+i))
28814 + break;
28815 + }
28816 + if (j>=ch_cnt)
28817 + ch_list[ch_cnt++] = *(pattr_temp+2+i);
28818 +
28819 + }
28820 +
28821 + pattr_temp += (2+num_of_ch);
28822 + attr_contentlen -= (2+num_of_ch);
28823 + }
28824 +
28825 + for (j=0;j<ch_cnt;j++) {
28826 + if (j == 0) {
28827 + w_sz += snprintf(buf+w_sz, buf_len-w_sz, "%u", ch_list[j]);
28828 + } else if (ch_list[j] - ch_list[j-1] != 1) {
28829 + w_sz += snprintf(buf+w_sz, buf_len-w_sz, ", %u", ch_list[j]);
28830 + } else if (j != ch_cnt-1 && ch_list[j+1] - ch_list[j] == 1) {
28831 + /* empty */
28832 + } else {
28833 + w_sz += snprintf(buf+w_sz, buf_len-w_sz, "-%u", ch_list[j]);
28834 + }
28835 + }
28836 + }
28837 + return buf;
28838 +}
28839 +
28840 +/*
28841 + * return _TRUE if requester is GO, _FALSE if responder is GO
28842 + */
28843 +bool rtw_p2p_nego_intent_compare(u8 req, u8 resp)
28844 +{
28845 + if (req>>1 == resp >>1)
28846 + return req&0x01 ? _TRUE : _FALSE;
28847 + else if (req>>1 > resp>>1)
28848 + return _TRUE;
28849 + else
28850 + return _FALSE;
28851 +}
28852 +
28853 +int rtw_p2p_check_frames(_adapter *padapter, const u8 *buf, u32 len, u8 tx)
28854 +{
28855 + int is_p2p_frame = (-1);
28856 + unsigned char *frame_body;
28857 + u8 category, action, OUI_Subtype, dialogToken=0;
28858 + u8 *p2p_ie = NULL;
28859 + uint p2p_ielen = 0;
28860 + struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(padapter->rtw_wdev);
28861 + int status = -1;
28862 + u8 ch_list_buf[128] = {'\0'};
28863 + int op_ch = -1;
28864 + int listen_ch = -1;
28865 + u8 intent = 0;
28866 +
28867 + frame_body = (unsigned char *)(buf + sizeof(struct rtw_ieee80211_hdr_3addr));
28868 + category = frame_body[0];
28869 + //just for check
28870 + if(category == RTW_WLAN_CATEGORY_PUBLIC)
28871 + {
28872 + action = frame_body[1];
28873 + if (action == ACT_PUBLIC_VENDOR
28874 + && _rtw_memcmp(frame_body+2, P2P_OUI, 4) == _TRUE
28875 + )
28876 + {
28877 + OUI_Subtype = frame_body[6];
28878 + dialogToken = frame_body[7];
28879 + is_p2p_frame = OUI_Subtype;
28880 + #ifdef CONFIG_DEBUG_CFG80211
28881 + DBG_871X("ACTION_CATEGORY_PUBLIC: ACT_PUBLIC_VENDOR, OUI=0x%x, OUI_Subtype=%d, dialogToken=%d\n",
28882 + cpu_to_be32( *( ( u32* ) ( frame_body + 2 ) ) ), OUI_Subtype, dialogToken);
28883 + #endif
28884 +
28885 + p2p_ie = rtw_get_p2p_ie(
28886 + (u8 *)buf+sizeof(struct rtw_ieee80211_hdr_3addr)+_PUBLIC_ACTION_IE_OFFSET_,
28887 + len-sizeof(struct rtw_ieee80211_hdr_3addr)-_PUBLIC_ACTION_IE_OFFSET_,
28888 + NULL, &p2p_ielen);
28889 +
28890 + switch( OUI_Subtype )//OUI Subtype
28891 + {
28892 + u8 *cont;
28893 + uint cont_len;
28894 + case P2P_GO_NEGO_REQ:
28895 + {
28896 + struct rtw_wdev_nego_info* nego_info = &pwdev_priv->nego_info;
28897 +
28898 + if (tx) {
28899 + #ifdef CONFIG_DRV_ISSUE_PROV_REQ // IOT FOR S2
28900 + if(pwdev_priv->provdisc_req_issued == _FALSE) {
28901 + rtw_cfg80211_issue_p2p_provision_request(padapter, buf, len);
28902 + pwdev_priv->provdisc_req_issued = _TRUE;
28903 + rtw_msleep_os(200);
28904 + }
28905 + #endif //CONFIG_DRV_ISSUE_PROV_REQ
28906 +
28907 + #ifdef CONFIG_CONCURRENT_MODE
28908 + if(check_buddy_fwstate(padapter, _FW_LINKED))
28909 + rtw_cfg80211_adjust_p2pie_channel(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr));
28910 + #endif
28911 + }
28912 +
28913 + if ((cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, NULL, &cont_len)))
28914 + op_ch = *(cont+4);
28915 + if ((cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_LISTEN_CH, NULL, &cont_len)))
28916 + listen_ch = *(cont+4);
28917 + if ((cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GO_INTENT, NULL, &cont_len)))
28918 + intent = *cont;
28919 +
28920 + if (nego_info->token != dialogToken)
28921 + rtw_wdev_nego_info_init(nego_info);
28922 +
28923 + _rtw_memcpy(nego_info->peer_mac, tx ? GetAddr1Ptr(buf) : GetAddr2Ptr(buf), ETH_ALEN);
28924 + nego_info->active = tx ? 1 : 0;
28925 + nego_info->token = dialogToken;
28926 + nego_info->req_op_ch = op_ch;
28927 + nego_info->req_listen_ch = listen_ch;
28928 + nego_info->req_intent = intent;
28929 + nego_info->state = 0;
28930 +
28931 + dump_p2p_attr_ch_list(p2p_ie, p2p_ielen, ch_list_buf, 128);
28932 + DBG_871X("RTW_%s:P2P_GO_NEGO_REQ, dialogToken=%d, intent:%u%s, listen_ch:%d, op_ch:%d, ch_list:%s\n",
28933 + (tx==_TRUE)?"Tx":"Rx", dialogToken, (intent>>1), intent&0x1 ? "+" : "-", listen_ch, op_ch, ch_list_buf);
28934 +
28935 + if (!tx) {
28936 + #ifdef CONFIG_CONCURRENT_MODE
28937 + if(check_buddy_fwstate(padapter, _FW_LINKED)
28938 + && rtw_chk_p2pie_ch_list_with_buddy(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr)) == _FALSE)
28939 + {
28940 + DBG_871X(FUNC_ADPT_FMT" ch_list has no intersect with buddy\n", FUNC_ADPT_ARG(padapter));
28941 + rtw_change_p2pie_ch_list(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr), 0);
28942 + }
28943 + #endif
28944 + }
28945 +
28946 + break;
28947 + }
28948 + case P2P_GO_NEGO_RESP:
28949 + {
28950 + struct rtw_wdev_nego_info* nego_info = &pwdev_priv->nego_info;
28951 +
28952 + if (tx) {
28953 + #ifdef CONFIG_CONCURRENT_MODE
28954 + if(check_buddy_fwstate(padapter, _FW_LINKED))
28955 + rtw_cfg80211_adjust_p2pie_channel(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr));
28956 + #endif
28957 + }
28958 +
28959 + if ((cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, NULL, &cont_len)))
28960 + op_ch = *(cont+4);
28961 + if ((cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GO_INTENT, NULL, &cont_len)))
28962 + intent = *cont;
28963 + if ((cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_STATUS, NULL, &cont_len)))
28964 + status = *cont;
28965 +
28966 + if (nego_info->token == dialogToken && nego_info->state == 0
28967 + && _rtw_memcmp(nego_info->peer_mac, tx ? GetAddr1Ptr(buf) : GetAddr2Ptr(buf), ETH_ALEN) == _TRUE
28968 + ) {
28969 + nego_info->status = (status==-1) ? 0xff : status;
28970 + nego_info->rsp_op_ch= op_ch;
28971 + nego_info->rsp_intent = intent;
28972 + nego_info->state = 1;
28973 + if (status != 0)
28974 + nego_info->token = 0; /* init */
28975 + }
28976 +
28977 + dump_p2p_attr_ch_list(p2p_ie, p2p_ielen, ch_list_buf, 128);
28978 + DBG_871X("RTW_%s:P2P_GO_NEGO_RESP, dialogToken=%d, intent:%u%s, status:%d, op_ch:%d, ch_list:%s\n",
28979 + (tx==_TRUE)?"Tx":"Rx", dialogToken, (intent>>1), intent&0x1 ? "+" : "-", status, op_ch, ch_list_buf);
28980 +
28981 + if (!tx) {
28982 + pwdev_priv->provdisc_req_issued = _FALSE;
28983 + #ifdef CONFIG_CONCURRENT_MODE
28984 + if(check_buddy_fwstate(padapter, _FW_LINKED)
28985 + && rtw_chk_p2pie_ch_list_with_buddy(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr)) == _FALSE)
28986 + {
28987 + DBG_871X(FUNC_ADPT_FMT" ch_list has no intersect with buddy\n", FUNC_ADPT_ARG(padapter));
28988 + rtw_change_p2pie_ch_list(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr), 0);
28989 + }
28990 + #endif
28991 + }
28992 +
28993 + break;
28994 + }
28995 + case P2P_GO_NEGO_CONF:
28996 + {
28997 + struct rtw_wdev_nego_info* nego_info = &pwdev_priv->nego_info;
28998 + bool is_go = _FALSE;
28999 +
29000 + if (tx) {
29001 + #ifdef CONFIG_CONCURRENT_MODE
29002 + if(check_buddy_fwstate(padapter, _FW_LINKED))
29003 + rtw_cfg80211_adjust_p2pie_channel(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr));
29004 + #endif
29005 + }
29006 +
29007 + if ((cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, NULL, &cont_len)))
29008 + op_ch = *(cont+4);
29009 + if ((cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_STATUS, NULL, &cont_len)))
29010 + status = *cont;
29011 +
29012 + if (nego_info->token == dialogToken && nego_info->state == 1
29013 + && _rtw_memcmp(nego_info->peer_mac, tx ? GetAddr1Ptr(buf) : GetAddr2Ptr(buf), ETH_ALEN) == _TRUE
29014 + ) {
29015 + nego_info->status = (status==-1) ? 0xff : status;
29016 + nego_info->conf_op_ch = (op_ch==-1) ? 0 : op_ch;
29017 + nego_info->state = 2;
29018 +
29019 + if (status == 0) {
29020 + if (rtw_p2p_nego_intent_compare(nego_info->req_intent, nego_info->rsp_intent) && tx)
29021 + is_go = _TRUE;
29022 + }
29023 +
29024 + nego_info->token = 0; /* init */
29025 + }
29026 +
29027 + dump_p2p_attr_ch_list(p2p_ie, p2p_ielen, ch_list_buf, 128);
29028 + DBG_871X("RTW_%s:P2P_GO_NEGO_CONF, dialogToken=%d, status:%d, op_ch:%d, ch_list:%s\n",
29029 + (tx==_TRUE)?"Tx":"Rx", dialogToken, status, op_ch, ch_list_buf);
29030 +
29031 + if (!tx) {
29032 + }
29033 +
29034 + break;
29035 + }
29036 + case P2P_INVIT_REQ:
29037 + {
29038 + struct rtw_wdev_invit_info* invit_info = &pwdev_priv->invit_info;
29039 + int flags = -1;
29040 +
29041 + if (tx) {
29042 + #ifdef CONFIG_CONCURRENT_MODE
29043 + if(check_buddy_fwstate(padapter, _FW_LINKED))
29044 + rtw_cfg80211_adjust_p2pie_channel(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr));
29045 + #endif
29046 + }
29047 +
29048 + if ((cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_INVITATION_FLAGS, NULL, &cont_len)))
29049 + flags = *cont;
29050 + if ((cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, NULL, &cont_len)))
29051 + op_ch = *(cont+4);
29052 +
29053 + if (invit_info->token != dialogToken)
29054 + rtw_wdev_invit_info_init(invit_info);
29055 +
29056 + _rtw_memcpy(invit_info->peer_mac, tx ? GetAddr1Ptr(buf) : GetAddr2Ptr(buf), ETH_ALEN);
29057 + invit_info->active = tx ? 1 : 0;
29058 + invit_info->token = dialogToken;
29059 + invit_info->flags = (flags==-1) ? 0x0 : flags;
29060 + invit_info->req_op_ch= op_ch;
29061 + invit_info->state = 0;
29062 +
29063 + dump_p2p_attr_ch_list(p2p_ie, p2p_ielen, ch_list_buf, 128);
29064 + DBG_871X("RTW_%s:P2P_INVIT_REQ, dialogToken=%d, flags:0x%02x, op_ch:%d, ch_list:%s\n",
29065 + (tx==_TRUE)?"Tx":"Rx", dialogToken, flags, op_ch, ch_list_buf);
29066 +
29067 + if (!tx) {
29068 + #ifdef CONFIG_CONCURRENT_MODE
29069 + if(check_buddy_fwstate(padapter, _FW_LINKED)) {
29070 + if (op_ch != -1 && rtw_chk_p2pie_op_ch_with_buddy(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr)) == _FALSE) {
29071 + DBG_871X(FUNC_ADPT_FMT" op_ch:%u has no intersect with buddy\n", FUNC_ADPT_ARG(padapter), op_ch);
29072 + rtw_change_p2pie_ch_list(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr), 0);
29073 + } else if (rtw_chk_p2pie_ch_list_with_buddy(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr)) == _FALSE) {
29074 + DBG_871X(FUNC_ADPT_FMT" ch_list has no intersect with buddy\n", FUNC_ADPT_ARG(padapter));
29075 + rtw_change_p2pie_ch_list(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr), 0);
29076 + }
29077 + }
29078 + #endif
29079 + }
29080 +
29081 + break;
29082 + }
29083 + case P2P_INVIT_RESP:
29084 + {
29085 + struct rtw_wdev_invit_info* invit_info = &pwdev_priv->invit_info;
29086 +
29087 + if (tx) {
29088 + #ifdef CONFIG_CONCURRENT_MODE
29089 + if(check_buddy_fwstate(padapter, _FW_LINKED))
29090 + rtw_cfg80211_adjust_p2pie_channel(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr));
29091 + #endif
29092 + }
29093 +
29094 + if ((cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_STATUS, NULL, &cont_len)))
29095 + {
29096 +#ifdef CONFIG_P2P_INVITE_IOT
29097 + if(tx && *cont==7)
29098 + {
29099 + DBG_871X("TX_P2P_INVITE_RESP, status is no common channel, change to unknown group\n");
29100 + *cont = 8; //unknow group status
29101 + }
29102 +#endif //CONFIG_P2P_INVITE_IOT
29103 + status = *cont;
29104 + }
29105 + if ((cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, NULL, &cont_len)))
29106 + op_ch = *(cont+4);
29107 +
29108 + if (invit_info->token == dialogToken && invit_info->state == 0
29109 + && _rtw_memcmp(invit_info->peer_mac, tx ? GetAddr1Ptr(buf) : GetAddr2Ptr(buf), ETH_ALEN) == _TRUE
29110 + ) {
29111 + invit_info->status = (status==-1) ? 0xff : status;
29112 + invit_info->rsp_op_ch= op_ch;
29113 + invit_info->state = 1;
29114 + invit_info->token = 0; /* init */
29115 + }
29116 +
29117 + dump_p2p_attr_ch_list(p2p_ie, p2p_ielen, ch_list_buf, 128);
29118 + DBG_871X("RTW_%s:P2P_INVIT_RESP, dialogToken=%d, status:%d, op_ch:%d, ch_list:%s\n",
29119 + (tx==_TRUE)?"Tx":"Rx", dialogToken, status, op_ch, ch_list_buf);
29120 +
29121 + if (!tx) {
29122 + }
29123 +
29124 + break;
29125 + }
29126 + case P2P_DEVDISC_REQ:
29127 + DBG_871X("RTW_%s:P2P_DEVDISC_REQ, dialogToken=%d\n", (tx==_TRUE)?"Tx":"Rx", dialogToken);
29128 + break;
29129 + case P2P_DEVDISC_RESP:
29130 + cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_STATUS, NULL, &cont_len);
29131 + DBG_871X("RTW_%s:P2P_DEVDISC_RESP, dialogToken=%d, status:%d\n", (tx==_TRUE)?"Tx":"Rx", dialogToken, cont?*cont:-1);
29132 + break;
29133 + case P2P_PROVISION_DISC_REQ:
29134 + {
29135 + size_t frame_body_len = len - sizeof(struct rtw_ieee80211_hdr_3addr);
29136 + u8 *p2p_ie;
29137 + uint p2p_ielen = 0;
29138 + uint contentlen = 0;
29139 +
29140 + DBG_871X("RTW_%s:P2P_PROVISION_DISC_REQ, dialogToken=%d\n", (tx==_TRUE)?"Tx":"Rx", dialogToken);
29141 +
29142 + //if(tx)
29143 + {
29144 + pwdev_priv->provdisc_req_issued = _FALSE;
29145 +
29146 + if( (p2p_ie=rtw_get_p2p_ie( frame_body + _PUBLIC_ACTION_IE_OFFSET_, frame_body_len - _PUBLIC_ACTION_IE_OFFSET_, NULL, &p2p_ielen)))
29147 + {
29148 +
29149 + if(rtw_get_p2p_attr_content( p2p_ie, p2p_ielen, P2P_ATTR_GROUP_ID, NULL, &contentlen))
29150 + {
29151 + pwdev_priv->provdisc_req_issued = _FALSE;//case: p2p_client join p2p GO
29152 + }
29153 + else
29154 + {
29155 + #ifdef CONFIG_DEBUG_CFG80211
29156 + DBG_871X("provdisc_req_issued is _TRUE\n");
29157 + #endif //CONFIG_DEBUG_CFG80211
29158 + pwdev_priv->provdisc_req_issued = _TRUE;//case: p2p_devices connection before Nego req.
29159 + }
29160 +
29161 + }
29162 + }
29163 + }
29164 + break;
29165 + case P2P_PROVISION_DISC_RESP:
29166 + DBG_871X("RTW_%s:P2P_PROVISION_DISC_RESP, dialogToken=%d\n", (tx==_TRUE)?"Tx":"Rx", dialogToken);
29167 + break;
29168 + default:
29169 + DBG_871X("RTW_%s:OUI_Subtype=%d, dialogToken=%d\n", (tx==_TRUE)?"Tx":"Rx", OUI_Subtype, dialogToken);
29170 + break;
29171 + }
29172 +
29173 + }
29174 +
29175 + }
29176 + else if(category == RTW_WLAN_CATEGORY_P2P)
29177 + {
29178 + OUI_Subtype = frame_body[5];
29179 + dialogToken = frame_body[6];
29180 +
29181 + #ifdef CONFIG_DEBUG_CFG80211
29182 + DBG_871X("ACTION_CATEGORY_P2P: OUI=0x%x, OUI_Subtype=%d, dialogToken=%d\n",
29183 + cpu_to_be32( *( ( u32* ) ( frame_body + 1 ) ) ), OUI_Subtype, dialogToken);
29184 + #endif
29185 +
29186 + is_p2p_frame = OUI_Subtype;
29187 +
29188 + switch(OUI_Subtype)
29189 + {
29190 + case P2P_NOTICE_OF_ABSENCE:
29191 + DBG_871X("RTW_%s:P2P_NOTICE_OF_ABSENCE, dialogToken=%d\n", (tx==_TRUE)?"TX":"RX", dialogToken);
29192 + break;
29193 + case P2P_PRESENCE_REQUEST:
29194 + DBG_871X("RTW_%s:P2P_PRESENCE_REQUEST, dialogToken=%d\n", (tx==_TRUE)?"TX":"RX", dialogToken);
29195 + break;
29196 + case P2P_PRESENCE_RESPONSE:
29197 + DBG_871X("RTW_%s:P2P_PRESENCE_RESPONSE, dialogToken=%d\n", (tx==_TRUE)?"TX":"RX", dialogToken);
29198 + break;
29199 + case P2P_GO_DISC_REQUEST:
29200 + DBG_871X("RTW_%s:P2P_GO_DISC_REQUEST, dialogToken=%d\n", (tx==_TRUE)?"TX":"RX", dialogToken);
29201 + break;
29202 + default:
29203 + DBG_871X("RTW_%s:OUI_Subtype=%d, dialogToken=%d\n", (tx==_TRUE)?"TX":"RX", OUI_Subtype, dialogToken);
29204 + break;
29205 + }
29206 +
29207 + }
29208 + else
29209 + {
29210 + DBG_871X("RTW_%s:action frame category=%d\n", (tx==_TRUE)?"TX":"RX", category);
29211 + }
29212 +
29213 + return is_p2p_frame;
29214 +}
29215 +
29216 +void rtw_init_cfg80211_wifidirect_info( _adapter* padapter)
29217 +{
29218 + struct cfg80211_wifidirect_info *pcfg80211_wdinfo = &padapter->cfg80211_wdinfo;
29219 +
29220 + _rtw_memset(pcfg80211_wdinfo, 0x00, sizeof(struct cfg80211_wifidirect_info) );
29221 +
29222 + _init_timer( &pcfg80211_wdinfo->remain_on_ch_timer, padapter->pnetdev, ro_ch_timer_process, padapter );
29223 +}
29224 +#endif //CONFIG_IOCTL_CFG80211
29225 +
29226 +void p2p_protocol_wk_hdl(_adapter *padapter, int intCmdType)
29227 +{
29228 + struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
29229 +
29230 +_func_enter_;
29231
29232 switch(intCmdType)
29233 {
29234 @@ -2882,14 +4396,61 @@ _func_enter_;
29235 }
29236 case P2P_PRE_TX_PROVDISC_PROCESS_WK:
29237 {
29238 +#ifdef CONFIG_CONCURRENT_MODE
29239 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
29240 + {
29241 + p2p_concurrent_handler( padapter );
29242 + }
29243 + else
29244 + {
29245 + pre_tx_provdisc_handler( padapter );
29246 + }
29247 +#else
29248 pre_tx_provdisc_handler( padapter );
29249 +#endif
29250 break;
29251 }
29252 + case P2P_PRE_TX_INVITEREQ_PROCESS_WK:
29253 + {
29254 +#ifdef CONFIG_CONCURRENT_MODE
29255 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
29256 + {
29257 + p2p_concurrent_handler( padapter );
29258 + }
29259 + else
29260 + {
29261 + pre_tx_invitereq_handler( padapter );
29262 + }
29263 +#else
29264 + pre_tx_invitereq_handler( padapter );
29265 +#endif
29266 + break;
29267 + }
29268 case P2P_PRE_TX_NEGOREQ_PROCESS_WK:
29269 {
29270 +#ifdef CONFIG_CONCURRENT_MODE
29271 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
29272 + {
29273 + p2p_concurrent_handler( padapter );
29274 + }
29275 + else
29276 + {
29277 + pre_tx_negoreq_handler( padapter );
29278 + }
29279 +#else
29280 pre_tx_negoreq_handler( padapter );
29281 +#endif
29282 break;
29283 }
29284 +#ifdef CONFIG_P2P
29285 +#ifdef CONFIG_CONCURRENT_MODE
29286 + case P2P_AP_P2P_CH_SWITCH_PROCESS_WK:
29287 + {
29288 + p2p_concurrent_handler( padapter );
29289 + break;
29290 + }
29291 +#endif
29292 +#endif
29293 #ifdef CONFIG_IOCTL_CFG80211
29294 case P2P_RO_CH_WK:
29295 {
29296 @@ -2897,12 +4458,124 @@ _func_enter_;
29297 break;
29298 }
29299 #endif //CONFIG_IOCTL_CFG80211
29300 +
29301 }
29302
29303 _func_exit_;
29304 }
29305
29306 +#ifdef CONFIG_P2P_PS
29307 +void process_p2p_ps_ie(PADAPTER padapter, u8 *IEs, u32 IELength)
29308 +{
29309 + u8 * ies;
29310 + u32 ies_len;
29311 + u8 * p2p_ie;
29312 + u32 p2p_ielen = 0;
29313 + u8 noa_attr[MAX_P2P_IE_LEN] = { 0x00 };// NoA length should be n*(13) + 2
29314 + u32 attr_contentlen = 0;
29315 +
29316 + struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
29317 + u8 find_p2p = _FALSE, find_p2p_ps = _FALSE;
29318 + u8 noa_offset, noa_num, noa_index;
29319 +
29320 +_func_enter_;
29321 +
29322 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
29323 + {
29324 + return;
29325 + }
29326 +
29327 +#ifdef CONFIG_CONCURRENT_MODE
29328 + if(padapter->iface_type != IFACE_PORT0)
29329 + return;
29330 +#endif
29331 + if(IELength <= _BEACON_IE_OFFSET_)
29332 + return;
29333 +
29334 + ies = IEs + _BEACON_IE_OFFSET_;
29335 + ies_len = IELength - _BEACON_IE_OFFSET_;
29336 +
29337 + p2p_ie = rtw_get_p2p_ie( ies, ies_len, NULL, &p2p_ielen);
29338 +
29339 + while(p2p_ie)
29340 + {
29341 + find_p2p = _TRUE;
29342 + // Get Notice of Absence IE.
29343 + if(rtw_get_p2p_attr_content( p2p_ie, p2p_ielen, P2P_ATTR_NOA, noa_attr, &attr_contentlen))
29344 + {
29345 + find_p2p_ps = _TRUE;
29346 + noa_index = noa_attr[0];
29347 +
29348 + if( (pwdinfo->p2p_ps_mode == P2P_PS_NONE) ||
29349 + (noa_index != pwdinfo->noa_index) )// if index change, driver should reconfigure related setting.
29350 + {
29351 + pwdinfo->noa_index = noa_index;
29352 + pwdinfo->opp_ps = noa_attr[1] >> 7;
29353 + pwdinfo->ctwindow = noa_attr[1] & 0x7F;
29354 +
29355 + noa_offset = 2;
29356 + noa_num = 0;
29357 + // NoA length should be n*(13) + 2
29358 + if(attr_contentlen > 2)
29359 + {
29360 + while(noa_offset < attr_contentlen)
29361 + {
29362 + //_rtw_memcpy(&wifidirect_info->noa_count[noa_num], &noa_attr[noa_offset], 1);
29363 + pwdinfo->noa_count[noa_num] = noa_attr[noa_offset];
29364 + noa_offset += 1;
29365 +
29366 + _rtw_memcpy(&pwdinfo->noa_duration[noa_num], &noa_attr[noa_offset], 4);
29367 + noa_offset += 4;
29368 +
29369 + _rtw_memcpy(&pwdinfo->noa_interval[noa_num], &noa_attr[noa_offset], 4);
29370 + noa_offset += 4;
29371 +
29372 + _rtw_memcpy(&pwdinfo->noa_start_time[noa_num], &noa_attr[noa_offset], 4);
29373 + noa_offset += 4;
29374 +
29375 + noa_num++;
29376 + }
29377 + }
29378 + pwdinfo->noa_num = noa_num;
29379 +
29380 + if( pwdinfo->opp_ps == 1 )
29381 + {
29382 + pwdinfo->p2p_ps_mode = P2P_PS_CTWINDOW;
29383 + // driver should wait LPS for entering CTWindow
29384 + if(padapter->pwrctrlpriv.bFwCurrentInPSMode == _TRUE)
29385 + {
29386 + p2p_ps_wk_cmd(padapter, P2P_PS_ENABLE, 1);
29387 + }
29388 + }
29389 + else if( pwdinfo->noa_num > 0 )
29390 + {
29391 + pwdinfo->p2p_ps_mode = P2P_PS_NOA;
29392 + p2p_ps_wk_cmd(padapter, P2P_PS_ENABLE, 1);
29393 + }
29394 + else if( pwdinfo->p2p_ps_mode > P2P_PS_NONE)
29395 + {
29396 + p2p_ps_wk_cmd(padapter, P2P_PS_DISABLE, 1);
29397 + }
29398 + }
29399 +
29400 + break; // find target, just break.
29401 + }
29402 +
29403 + //Get the next P2P IE
29404 + p2p_ie = rtw_get_p2p_ie(p2p_ie+p2p_ielen, ies_len -(p2p_ie -ies + p2p_ielen), NULL, &p2p_ielen);
29405 +
29406 + }
29407 +
29408 + if(find_p2p == _TRUE)
29409 + {
29410 + if( (pwdinfo->p2p_ps_mode > P2P_PS_NONE) && (find_p2p_ps == _FALSE) )
29411 + {
29412 + p2p_ps_wk_cmd(padapter, P2P_PS_DISABLE, 1);
29413 + }
29414 + }
29415
29416 +_func_exit_;
29417 +}
29418
29419 void p2p_ps_wk_hdl(_adapter *padapter, u8 p2p_ps_state)
29420 {
29421 @@ -2911,42 +4584,53 @@ void p2p_ps_wk_hdl(_adapter *padapter, u
29422
29423 _func_enter_;
29424
29425 - // Pre action for p2p state
29426 switch(p2p_ps_state)
29427 {
29428 - case P2P_PS_ENABLE:
29429 - if( pwdinfo->ctwindow > 0 )
29430 + case P2P_PS_DISABLE:
29431 + pwdinfo->p2p_ps_state = p2p_ps_state;
29432 +
29433 + rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_P2P_PS_OFFLOAD, (u8 *)(&p2p_ps_state));
29434 +
29435 + pwdinfo->noa_index = 0;
29436 + pwdinfo->ctwindow = 0;
29437 + pwdinfo->opp_ps = 0;
29438 + pwdinfo->noa_num = 0;
29439 + pwdinfo->p2p_ps_mode = P2P_PS_NONE;
29440 + if(padapter->pwrctrlpriv.bFwCurrentInPSMode == _TRUE)
29441 {
29442 - if(pwrpriv->smart_ps != 0)
29443 + if(pwrpriv->smart_ps == 0)
29444 {
29445 - pwrpriv->smart_ps = 0;
29446 - DBG_871X("%s(): Enter CTW, change SmartPS\n", __FUNCTION__);
29447 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_H2C_FW_PWRMODE, (u8 *)(&(padapter->pwrctrlpriv.pwr_mode)));
29448 + pwrpriv->smart_ps = 2;
29449 + rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_PWRMODE, (u8 *)(&(padapter->pwrctrlpriv.pwr_mode)));
29450 }
29451 }
29452 break;
29453 - default:
29454 + case P2P_PS_ENABLE:
29455 + if (pwdinfo->p2p_ps_mode > P2P_PS_NONE) {
29456 + pwdinfo->p2p_ps_state = p2p_ps_state;
29457 +
29458 + if( pwdinfo->ctwindow > 0 )
29459 + {
29460 + if(pwrpriv->smart_ps != 0)
29461 + {
29462 + pwrpriv->smart_ps = 0;
29463 + DBG_871X("%s(): Enter CTW, change SmartPS\n", __FUNCTION__);
29464 + rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_PWRMODE, (u8 *)(&(padapter->pwrctrlpriv.pwr_mode)));
29465 + }
29466 + }
29467 + rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_P2P_PS_OFFLOAD, (u8 *)(&p2p_ps_state));
29468 + }
29469 break;
29470 - }
29471 -
29472 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_H2C_FW_P2P_PS_OFFLOAD, (u8 *)(&p2p_ps_state));
29473 -
29474 - // clear P2P SW status
29475 - if(p2p_ps_state == P2P_PS_DISABLE)
29476 - {
29477 - pwdinfo->noa_index = 0;
29478 - pwdinfo->ctwindow = 0;
29479 - pwdinfo->opp_ps = 0;
29480 - pwdinfo->noa_num = 0;
29481 - pwdinfo->p2p_ps_enable = _FALSE;
29482 - if(padapter->pwrctrlpriv.bFwCurrentInPSMode == _TRUE)
29483 - {
29484 - if(pwrpriv->smart_ps == 0)
29485 - {
29486 - pwrpriv->smart_ps = 2;
29487 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_H2C_FW_PWRMODE, (u8 *)(&(padapter->pwrctrlpriv.pwr_mode)));
29488 + case P2P_PS_SCAN:
29489 + case P2P_PS_SCAN_DONE:
29490 + case P2P_PS_ALLSTASLEEP:
29491 + if (pwdinfo->p2p_ps_mode > P2P_PS_NONE) {
29492 + pwdinfo->p2p_ps_state = p2p_ps_state;
29493 + rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_P2P_PS_OFFLOAD, (u8 *)(&p2p_ps_state));
29494 }
29495 - }
29496 + break;
29497 + default:
29498 + break;
29499 }
29500
29501 _func_exit_;
29502 @@ -2962,44 +4646,41 @@ u8 p2p_ps_wk_cmd(_adapter*padapter, u8 p
29503
29504 _func_enter_;
29505
29506 - if ( rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE) ||
29507 - ( pwdinfo->p2p_ps == p2p_ps_state ) )
29508 + if ( rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)
29509 +#ifdef CONFIG_CONCURRENT_MODE
29510 + || (padapter->iface_type != IFACE_PORT0)
29511 +#endif
29512 + )
29513 {
29514 return res;
29515 }
29516
29517 - // driver only perform p2p ps when GO have Opp_Ps or NoA
29518 - if( pwdinfo->p2p_ps_enable )
29519 + if(enqueue)
29520 {
29521 - pwdinfo->p2p_ps = p2p_ps_state;
29522 -
29523 - if(enqueue)
29524 - {
29525 - ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
29526 - if(ph2c==NULL){
29527 - res= _FAIL;
29528 - goto exit;
29529 - }
29530 -
29531 - pdrvextra_cmd_parm = (struct drvextra_cmd_parm*)rtw_zmalloc(sizeof(struct drvextra_cmd_parm));
29532 - if(pdrvextra_cmd_parm==NULL){
29533 - rtw_mfree((unsigned char *)ph2c, sizeof(struct cmd_obj));
29534 - res= _FAIL;
29535 - goto exit;
29536 - }
29537 + ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
29538 + if(ph2c==NULL){
29539 + res= _FAIL;
29540 + goto exit;
29541 + }
29542 +
29543 + pdrvextra_cmd_parm = (struct drvextra_cmd_parm*)rtw_zmalloc(sizeof(struct drvextra_cmd_parm));
29544 + if(pdrvextra_cmd_parm==NULL){
29545 + rtw_mfree((unsigned char *)ph2c, sizeof(struct cmd_obj));
29546 + res= _FAIL;
29547 + goto exit;
29548 + }
29549
29550 - pdrvextra_cmd_parm->ec_id = P2P_PS_WK_CID;
29551 - pdrvextra_cmd_parm->type_size = p2p_ps_state;
29552 - pdrvextra_cmd_parm->pbuf = NULL;
29553 + pdrvextra_cmd_parm->ec_id = P2P_PS_WK_CID;
29554 + pdrvextra_cmd_parm->type_size = p2p_ps_state;
29555 + pdrvextra_cmd_parm->pbuf = NULL;
29556
29557 - init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
29558 + init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
29559
29560 - res = rtw_enqueue_cmd(pcmdpriv, ph2c);
29561 - }
29562 - else
29563 - {
29564 - p2p_ps_wk_hdl(padapter, p2p_ps_state);
29565 - }
29566 + res = rtw_enqueue_cmd(pcmdpriv, ph2c);
29567 + }
29568 + else
29569 + {
29570 + p2p_ps_wk_hdl(padapter, p2p_ps_state);
29571 }
29572
29573 exit:
29574 @@ -3009,6 +4690,45 @@ _func_exit_;
29575 return res;
29576
29577 }
29578 +#endif // CONFIG_P2P_PS
29579 +
29580 +static void reset_ch_sitesurvey_timer_process (void *FunctionContext)
29581 +{
29582 + _adapter *adapter = (_adapter *)FunctionContext;
29583 + struct wifidirect_info *pwdinfo = &adapter->wdinfo;
29584 +
29585 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
29586 + return;
29587 +
29588 + DBG_871X( "[%s] In\n", __FUNCTION__ );
29589 + // Reset the operation channel information
29590 + pwdinfo->rx_invitereq_info.operation_ch[0] = 0;
29591 +#ifdef P2P_OP_CHECK_SOCIAL_CH
29592 + pwdinfo->rx_invitereq_info.operation_ch[1] = 0;
29593 + pwdinfo->rx_invitereq_info.operation_ch[2] = 0;
29594 + pwdinfo->rx_invitereq_info.operation_ch[3] = 0;
29595 +#endif //P2P_OP_CHECK_SOCIAL_CH
29596 + pwdinfo->rx_invitereq_info.scan_op_ch_only = 0;
29597 +}
29598 +
29599 +static void reset_ch_sitesurvey_timer_process2 (void *FunctionContext)
29600 +{
29601 + _adapter *adapter = (_adapter *)FunctionContext;
29602 + struct wifidirect_info *pwdinfo = &adapter->wdinfo;
29603 +
29604 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
29605 + return;
29606 +
29607 + DBG_871X( "[%s] In\n", __FUNCTION__ );
29608 + // Reset the operation channel information
29609 + pwdinfo->p2p_info.operation_ch[0] = 0;
29610 +#ifdef P2P_OP_CHECK_SOCIAL_CH
29611 + pwdinfo->p2p_info.operation_ch[1] = 0;
29612 + pwdinfo->p2p_info.operation_ch[2] = 0;
29613 + pwdinfo->p2p_info.operation_ch[3] = 0;
29614 +#endif //P2P_OP_CHECK_SOCIAL_CH
29615 + pwdinfo->p2p_info.scan_op_ch_only = 0;
29616 +}
29617
29618 static void restore_p2p_state_timer_process (void *FunctionContext)
29619 {
29620 @@ -3042,7 +4762,7 @@ static void pre_tx_scan_timer_process (v
29621 if ( _TRUE == pwdinfo->tx_prov_disc_info.benable ) // the provision discovery request frame is trigger to send or not
29622 {
29623 p2p_protocol_wk_cmd( adapter, P2P_PRE_TX_PROVDISC_PROCESS_WK );
29624 - //issue_probereq_p2p( adapter );
29625 + //issue_probereq_p2p(adapter, NULL);
29626 //_set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
29627 }
29628 }
29629 @@ -3051,10 +4771,17 @@ static void pre_tx_scan_timer_process (v
29630 if ( _TRUE == pwdinfo->nego_req_info.benable )
29631 {
29632 p2p_protocol_wk_cmd( adapter, P2P_PRE_TX_NEGOREQ_PROCESS_WK );
29633 - //issue_probereq_p2p( adapter );
29634 + //issue_probereq_p2p(adapter, NULL);
29635 //_set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
29636 }
29637 }
29638 + else if ( rtw_p2p_chk_state(pwdinfo, P2P_STATE_TX_INVITE_REQ ) )
29639 + {
29640 + if ( _TRUE == pwdinfo->invitereq_info.benable )
29641 + {
29642 + p2p_protocol_wk_cmd( adapter, P2P_PRE_TX_INVITEREQ_PROCESS_WK );
29643 + }
29644 + }
29645 else
29646 {
29647 DBG_8192C( "[%s] p2p_state is %d, ignore!!\n", __FUNCTION__, rtw_p2p_state(pwdinfo) );
29648 @@ -3076,69 +4803,167 @@ static void find_phase_timer_process (vo
29649 p2p_protocol_wk_cmd( adapter, P2P_FIND_PHASE_WK );
29650 }
29651
29652 -#ifdef CONFIG_IOCTL_CFG80211
29653 -static void ro_ch_timer_process (void *FunctionContext)
29654 +#ifdef CONFIG_CONCURRENT_MODE
29655 +void ap_p2p_switch_timer_process (void *FunctionContext)
29656 {
29657 _adapter *adapter = (_adapter *)FunctionContext;
29658 + struct wifidirect_info *pwdinfo = &adapter->wdinfo;
29659 +#ifdef CONFIG_IOCTL_CFG80211
29660 + struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(adapter->rtw_wdev);
29661 +#endif
29662
29663 - //printk("%s \n", __FUNCTION__);
29664 -
29665 - p2p_protocol_wk_cmd( adapter, P2P_RO_CH_WK);
29666 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
29667 + return;
29668 +
29669 +#ifdef CONFIG_IOCTL_CFG80211
29670 + ATOMIC_SET(&pwdev_priv->switch_ch_to, 1);
29671 +#endif
29672 +
29673 + p2p_protocol_wk_cmd( adapter, P2P_AP_P2P_CH_SWITCH_PROCESS_WK );
29674 }
29675 +#endif
29676
29677 -void rtw_init_cfg80211_wifidirect_info( _adapter* padapter)
29678 +void reset_global_wifidirect_info( _adapter* padapter )
29679 {
29680 - struct cfg80211_wifidirect_info *pcfg80211_wdinfo = &padapter->cfg80211_wdinfo;
29681 + struct wifidirect_info *pwdinfo;
29682
29683 - _rtw_memset(pcfg80211_wdinfo, 0x00, sizeof(struct cfg80211_wifidirect_info) );
29684 -
29685 - _init_timer( &pcfg80211_wdinfo->remain_on_ch_timer, padapter->pnetdev, ro_ch_timer_process, padapter );
29686 + pwdinfo = &padapter->wdinfo;
29687 + pwdinfo->persistent_supported = 0;
29688 + pwdinfo->session_available = _TRUE;
29689 + pwdinfo->wfd_tdls_enable = 0;
29690 + pwdinfo->wfd_tdls_weaksec = 0;
29691 +}
29692 +
29693 +#ifdef CONFIG_WFD
29694 +int rtw_init_wifi_display_info(_adapter* padapter)
29695 +{
29696 + int res = _SUCCESS;
29697 + struct wifi_display_info *pwfd_info = &padapter->wfd_info;
29698 +
29699 + // Used in P2P and TDLS
29700 + pwfd_info->rtsp_ctrlport = 554;
29701 + pwfd_info->peer_rtsp_ctrlport = 0; // Reset to 0
29702 + pwfd_info->wfd_enable = _FALSE;
29703 + pwfd_info->wfd_device_type = WFD_DEVINFO_PSINK;
29704 + pwfd_info->scan_result_type = SCAN_RESULT_P2P_ONLY;
29705 +
29706 + // Used in P2P
29707 + pwfd_info->peer_session_avail = _TRUE;
29708 + pwfd_info->wfd_pc = _FALSE;
29709 +
29710 + // Used in TDLS
29711 + _rtw_memset( pwfd_info->ip_address, 0x00, 4 );
29712 + _rtw_memset( pwfd_info->peer_ip_address, 0x00, 4 );
29713 + return res;
29714 +
29715 +}
29716 +#endif //CONFIG_WFD
29717 +
29718 +void rtw_init_wifidirect_timers(_adapter* padapter)
29719 +{
29720 + struct wifidirect_info *pwdinfo = &padapter->wdinfo;
29721 +
29722 + _init_timer( &pwdinfo->find_phase_timer, padapter->pnetdev, find_phase_timer_process, padapter );
29723 + _init_timer( &pwdinfo->restore_p2p_state_timer, padapter->pnetdev, restore_p2p_state_timer_process, padapter );
29724 + _init_timer( &pwdinfo->pre_tx_scan_timer, padapter->pnetdev, pre_tx_scan_timer_process, padapter );
29725 + _init_timer( &pwdinfo->reset_ch_sitesurvey, padapter->pnetdev, reset_ch_sitesurvey_timer_process, padapter );
29726 + _init_timer( &pwdinfo->reset_ch_sitesurvey2, padapter->pnetdev, reset_ch_sitesurvey_timer_process2, padapter );
29727 +#ifdef CONFIG_CONCURRENT_MODE
29728 + _init_timer( &pwdinfo->ap_p2p_switch_timer, padapter->pnetdev, ap_p2p_switch_timer_process, padapter );
29729 +#endif
29730 +}
29731 +
29732 +void rtw_init_wifidirect_addrs(_adapter* padapter, u8 *dev_addr, u8 *iface_addr)
29733 +{
29734 +#ifdef CONFIG_P2P
29735 + struct wifidirect_info *pwdinfo = &padapter->wdinfo;
29736 +
29737 + /*init device&interface address */
29738 + if (dev_addr) {
29739 + _rtw_memcpy(pwdinfo->device_addr, dev_addr, ETH_ALEN);
29740 + }
29741 + if (iface_addr) {
29742 + _rtw_memcpy(pwdinfo->interface_addr, iface_addr, ETH_ALEN);
29743 + }
29744 +#endif
29745 }
29746 -#endif //CONFIG_IOCTL_CFG80211
29747
29748 void init_wifidirect_info( _adapter* padapter, enum P2P_ROLE role)
29749 {
29750 struct wifidirect_info *pwdinfo;
29751 +#ifdef CONFIG_WFD
29752 + struct wifi_display_info *pwfd_info = &padapter->wfd_info;
29753 +#endif
29754 +#ifdef CONFIG_CONCURRENT_MODE
29755 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
29756 + struct wifidirect_info *pbuddy_wdinfo;
29757 + struct mlme_priv *pbuddy_mlmepriv;
29758 + struct mlme_ext_priv *pbuddy_mlmeext;
29759 +#endif
29760
29761 pwdinfo = &padapter->wdinfo;
29762
29763 pwdinfo->padapter = padapter;
29764 -
29765 - //init device&interface address
29766 - _rtw_memcpy(pwdinfo->device_addr, myid(&(padapter->eeprompriv)), ETH_ALEN);
29767 - _rtw_memcpy(pwdinfo->interface_addr, myid(&(padapter->eeprompriv)), ETH_ALEN);
29768
29769 // 1, 6, 11 are the social channel defined in the WiFi Direct specification.
29770 pwdinfo->social_chan[0] = 1;
29771 pwdinfo->social_chan[1] = 6;
29772 pwdinfo->social_chan[2] = 11;
29773 pwdinfo->social_chan[3] = 0; // channel 0 for scanning ending in site survey function.
29774 -
29775 - // Use the channel 11 as the listen channel
29776 - pwdinfo->listen_channel = 11;
29777 +
29778 +#ifdef CONFIG_CONCURRENT_MODE
29779 + if (pbuddy_adapter) {
29780 + pbuddy_wdinfo = &pbuddy_adapter->wdinfo;
29781 + pbuddy_mlmepriv = &pbuddy_adapter->mlmepriv;
29782 + pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
29783 + }
29784 +
29785 + if ( ( check_buddy_fwstate(padapter, _FW_LINKED ) == _TRUE ) &&
29786 + ( ( pbuddy_mlmeext->cur_channel == 1) || ( pbuddy_mlmeext->cur_channel == 6 ) || ( pbuddy_mlmeext->cur_channel == 11 ) )
29787 + )
29788 + {
29789 + // Use the AP's channel as the listen channel
29790 + // This will avoid the channel switch between AP's channel and listen channel.
29791 + pwdinfo->listen_channel = pbuddy_mlmeext->cur_channel;
29792 + }
29793 + else
29794 +#endif //CONFIG_CONCURRENT_MODE
29795 + {
29796 + // Use the channel 11 as the listen channel
29797 + pwdinfo->listen_channel = 11;
29798 + }
29799
29800 if (role == P2P_ROLE_DEVICE)
29801 {
29802 rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
29803 - rtw_p2p_set_state(pwdinfo, P2P_STATE_LISTEN);
29804 + #ifdef CONFIG_CONCURRENT_MODE
29805 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) == _TRUE )
29806 + {
29807 + rtw_p2p_set_state(pwdinfo, P2P_STATE_IDLE);
29808 + }
29809 + else
29810 + #endif
29811 + {
29812 + rtw_p2p_set_state(pwdinfo, P2P_STATE_LISTEN);
29813 + }
29814 pwdinfo->intent = 1;
29815 + rtw_p2p_set_pre_state(pwdinfo, P2P_STATE_LISTEN);
29816 }
29817 else if (role == P2P_ROLE_CLIENT)
29818 {
29819 rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT);
29820 rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_OK);
29821 pwdinfo->intent = 1;
29822 + rtw_p2p_set_pre_state(pwdinfo, P2P_STATE_GONEGO_OK);
29823 }
29824 else if (role == P2P_ROLE_GO)
29825 {
29826 rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO);
29827 rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_OK);
29828 pwdinfo->intent = 15;
29829 + rtw_p2p_set_pre_state(pwdinfo, P2P_STATE_GONEGO_OK);
29830 }
29831
29832 - //rtw_p2p_set_pre_state(pwdinfo, P2P_STATE_NONE);
29833 - rtw_p2p_set_pre_state(pwdinfo, P2P_STATE_LISTEN);
29834 -
29835 // Use the OFDM rate in the P2P probe response frame. ( 6(B), 9(B), 12, 18, 24, 36, 48, 54 )
29836 pwdinfo->support_rate[0] = 0x8c; // 6(B)
29837 pwdinfo->support_rate[1] = 0x92; // 9(B)
29838 @@ -3152,12 +4977,10 @@ void init_wifidirect_info( _adapter* pad
29839 _rtw_memcpy( ( void* ) pwdinfo->p2p_wildcard_ssid, "DIRECT-", 7 );
29840
29841 _rtw_memset( pwdinfo->device_name, 0x00, WPS_MAX_DEVICE_NAME_LEN );
29842 - _rtw_memcpy( pwdinfo->device_name, "Realtek DMP Device", 18 );
29843 - pwdinfo->device_name_len = 18;
29844 + pwdinfo->device_name_len = 0;
29845
29846 _rtw_memset( &pwdinfo->invitereq_info, 0x00, sizeof( struct tx_invite_req_info ) );
29847 pwdinfo->invitereq_info.token = 3; // Token used for P2P invitation request frame.
29848 - pwdinfo->invitereq_info.peer_operation_ch = pwdinfo->listen_channel;
29849
29850 _rtw_memset( &pwdinfo->inviteresp_info, 0x00, sizeof( struct tx_invite_resp_info ) );
29851 pwdinfo->inviteresp_info.token = 0;
29852 @@ -3165,10 +4988,6 @@ void init_wifidirect_info( _adapter* pad
29853 pwdinfo->profileindex = 0;
29854 _rtw_memset( &pwdinfo->profileinfo[ 0 ], 0x00, sizeof( struct profile_info ) * P2P_MAX_PERSISTENT_GROUP_NUM );
29855
29856 - _init_timer( &pwdinfo->find_phase_timer, padapter->pnetdev, find_phase_timer_process, padapter );
29857 - _init_timer( &pwdinfo->restore_p2p_state_timer, padapter->pnetdev, restore_p2p_state_timer_process, padapter );
29858 - _init_timer( &pwdinfo->pre_tx_scan_timer, padapter->pnetdev, pre_tx_scan_timer_process, padapter );
29859 -
29860 rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_NONE);
29861
29862 pwdinfo->listen_dwell = ( u8 ) (( rtw_get_current_time() % 3 ) + 1);
29863 @@ -3187,197 +5006,140 @@ void init_wifidirect_info( _adapter* pad
29864
29865 pwdinfo->ui_got_wps_info = P2P_NO_WPSINFO;
29866 #ifdef CONFIG_WFD
29867 - pwdinfo->supported_wps_cm = WPS_CONFIG_METHOD_DISPLAY;
29868 - _rtw_memset( &pwdinfo->wfd_info, 0x00, sizeof( struct wifi_display_info ) );
29869 - pwdinfo->wfd_info.rtsp_ctrlport = 554;
29870 - pwdinfo->wfd_info.peer_rtsp_ctrlport = 0; // Reset to 0
29871 + pwdinfo->supported_wps_cm = WPS_CONFIG_METHOD_DISPLAY | WPS_CONFIG_METHOD_PBC;
29872 + pwdinfo->wfd_info = pwfd_info;
29873 #else
29874 pwdinfo->supported_wps_cm = WPS_CONFIG_METHOD_DISPLAY | WPS_CONFIG_METHOD_PBC | WPS_CONFIG_METHOD_KEYPAD;
29875 #endif //CONFIG_WFD
29876 - pwdinfo->channel_cnt = 0;
29877 - _rtw_memset( pwdinfo->channel_list, 0x00, 13 );
29878 + pwdinfo->channel_list_attr_len = 0;
29879 + _rtw_memset( pwdinfo->channel_list_attr, 0x00, 100 );
29880
29881 _rtw_memset( pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, 0x00, 4 );
29882 _rtw_memset( pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, '0', 3 );
29883 _rtw_memset( &pwdinfo->groupid_info, 0x00, sizeof( struct group_id_info ) );
29884 -
29885 -}
29886 -
29887 +#ifdef CONFIG_CONCURRENT_MODE
29888 #ifdef CONFIG_IOCTL_CFG80211
29889 -int rtw_p2p_check_frames(_adapter *padapter, const u8 *buf, u32 len, u8 tx)
29890 -{
29891 - int is_p2p_frame = (-1);
29892 - unsigned char *frame_body;
29893 - u8 category, action, OUI_Subtype, dialogToken=0;
29894 - struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(padapter->rtw_wdev);
29895 -
29896 - frame_body = (unsigned char *)(buf + sizeof(struct rtw_ieee80211_hdr_3addr));
29897 - category = frame_body[0];
29898 - //just for check
29899 - if(category == RTW_WLAN_CATEGORY_PUBLIC)
29900 - {
29901 - action = frame_body[ 1 ];
29902 - OUI_Subtype = frame_body[ 6 ];
29903 - dialogToken = frame_body[7];
29904 -
29905 - if ( action == ACT_PUBLIC_P2P )
29906 - {
29907 -#ifdef CONFIG_DEBUG_CFG80211
29908 - DBG_871X("ACTION_CATEGORY_PUBLIC: ACT_PUBLIC_P2P, OUI=0x%x, OUI_Subtype=%d, dialogToken=%d\n",
29909 - cpu_to_be32( *( ( u32* ) ( frame_body + 2 ) ) ), OUI_Subtype, dialogToken);
29910 + pwdinfo->ext_listen_interval = 1000; //The interval to be available with legacy AP during p2p0-find/scan
29911 + pwdinfo->ext_listen_period = 3000; //The time period to be available for P2P during nego
29912 +#else //!CONFIG_IOCTL_CFG80211
29913 + //pwdinfo->ext_listen_interval = 3000;
29914 + //pwdinfo->ext_listen_period = 400;
29915 + pwdinfo->ext_listen_interval = 1000;
29916 + pwdinfo->ext_listen_period = 1000;
29917 +#endif //!CONFIG_IOCTL_CFG80211
29918 #endif
29919
29920 - is_p2p_frame = OUI_Subtype;
29921 -
29922 - switch( OUI_Subtype )//OUI Subtype
29923 - {
29924 - case P2P_GO_NEGO_REQ:
29925 - DBG_871X("RTW_%s:P2P_GO_NEGO_REQ, dialogToken=%d\n", (tx==_TRUE)?"Tx":"Rx", dialogToken);
29926 -
29927 - if(tx)
29928 - {
29929 - if(pwdev_priv->provdisc_req_issued == _FALSE)
29930 - rtw_cfg80211_issue_p2p_provision_request(padapter, buf, len);
29931 -
29932 - //pwdev_priv->provdisc_req_issued = _FALSE;
29933 - }
29934 -
29935 - break;
29936 - case P2P_GO_NEGO_RESP:
29937 - DBG_871X("RTW_%s:P2P_GO_NEGO_RESP, dialogToken=%d\n", (tx==_TRUE)?"Tx":"Rx", dialogToken);
29938 -
29939 - if(!tx)
29940 - pwdev_priv->provdisc_req_issued = _FALSE;
29941 -
29942 - break;
29943 - case P2P_GO_NEGO_CONF:
29944 - DBG_871X("RTW_%s:P2P_GO_NEGO_CONF, dialogToken=%d\n", (tx==_TRUE)?"Tx":"Rx", dialogToken);
29945 - break;
29946 - case P2P_INVIT_REQ:
29947 - DBG_871X("RTW_%s:P2P_INVIT_REQ, dialogToken=%d\n", (tx==_TRUE)?"Tx":"Rx", dialogToken);
29948 - break;
29949 - case P2P_INVIT_RESP:
29950 - DBG_871X("RTW_%s:P2P_INVIT_RESP, dialogToken=%d\n", (tx==_TRUE)?"Tx":"Rx", dialogToken);
29951 - break;
29952 - case P2P_DEVDISC_REQ:
29953 - DBG_871X("RTW_%s:P2P_DEVDISC_REQ, dialogToken=%d\n", (tx==_TRUE)?"Tx":"Rx", dialogToken);
29954 - break;
29955 - case P2P_DEVDISC_RESP:
29956 - DBG_871X("RTW_%s:P2P_DEVDISC_RESP, dialogToken=%d\n", (tx==_TRUE)?"Tx":"Rx", dialogToken);
29957 - break;
29958 - case P2P_PROVISION_DISC_REQ:
29959 - {
29960 - size_t frame_body_len = len - sizeof(struct rtw_ieee80211_hdr_3addr);
29961 - u8 *p2p_ie;
29962 - uint p2p_ielen = 0;
29963 - uint contentlen = 0;
29964 -
29965 - DBG_871X("RTW_%s:P2P_PROVISION_DISC_REQ, dialogToken=%d\n", (tx==_TRUE)?"Tx":"Rx", dialogToken);
29966 -
29967 - //if(tx)
29968 - {
29969 - pwdev_priv->provdisc_req_issued = _FALSE;
29970 -
29971 - if( (p2p_ie=rtw_get_p2p_ie( frame_body + _PUBLIC_ACTION_IE_OFFSET_, frame_body_len - _PUBLIC_ACTION_IE_OFFSET_, NULL, &p2p_ielen)))
29972 - {
29973 -
29974 - if(rtw_get_p2p_attr_content( p2p_ie, p2p_ielen, P2P_ATTR_GROUP_ID, NULL, &contentlen))
29975 - {
29976 - pwdev_priv->provdisc_req_issued = _FALSE;//case: p2p_client join p2p GO
29977 - }
29978 - else
29979 - {
29980 - DBG_871X("provdisc_req_issued is _TRUE\n");
29981 - pwdev_priv->provdisc_req_issued = _TRUE;//case: p2p_devices connection before Nego req.
29982 - }
29983 -
29984 - }
29985 - }
29986 - }
29987 - break;
29988 - case P2P_PROVISION_DISC_RESP:
29989 - DBG_871X("RTW_%s:P2P_PROVISION_DISC_RESP, dialogToken=%d\n", (tx==_TRUE)?"Tx":"Rx", dialogToken);
29990 - break;
29991 - default:
29992 - DBG_871X("RTW_%s:OUI_Subtype=%d, dialogToken=%d\n", (tx==_TRUE)?"Tx":"Rx", OUI_Subtype, dialogToken);
29993 - break;
29994 - }
29995 -
29996 - }
29997 - else
29998 - {
29999 - DBG_871X("ACTION_CATEGORY_PUBLIC: action=%d, OUI=0x%x, OUI_Subtype=%d, dialogToken=%d\n",
30000 - action, cpu_to_be32( *( ( u32* ) ( frame_body + 2 ) ) ), OUI_Subtype, dialogToken);
30001 - }
30002 -
30003 - }
30004 - else if(category == RTW_WLAN_CATEGORY_P2P)
30005 - {
30006 - OUI_Subtype = frame_body[5];
30007 - dialogToken = frame_body[6];
30008 -
30009 -#ifdef CONFIG_DEBUG_CFG80211
30010 - DBG_871X("ACTION_CATEGORY_P2P: OUI=0x%x, OUI_Subtype=%d, dialogToken=%d\n",
30011 - cpu_to_be32( *( ( u32* ) ( frame_body + 1 ) ) ), OUI_Subtype, dialogToken);
30012 -#endif
30013 +// Commented by Kurt 20130319
30014 +// For WiDi purpose: Use CFG80211 interface but controled WFD/RDS frame by driver itself.
30015 +#ifdef CONFIG_IOCTL_CFG80211
30016 + pwdinfo->driver_interface = DRIVER_CFG80211;
30017 +#else
30018 + pwdinfo->driver_interface = DRIVER_WEXT;
30019 +#endif //CONFIG_IOCTL_CFG80211
30020
30021 - is_p2p_frame = OUI_Subtype;
30022 + pwdinfo->wfd_tdls_enable = 0;
30023 + _rtw_memset( pwdinfo->p2p_peer_interface_addr, 0x00, ETH_ALEN );
30024 + _rtw_memset( pwdinfo->p2p_peer_device_addr, 0x00, ETH_ALEN );
30025 +
30026 + pwdinfo->rx_invitereq_info.operation_ch[0] = 0;
30027 + pwdinfo->rx_invitereq_info.operation_ch[1] = 0; // Used to indicate the scan end in site survey function
30028 +#ifdef P2P_OP_CHECK_SOCIAL_CH
30029 + pwdinfo->rx_invitereq_info.operation_ch[2] = 0;
30030 + pwdinfo->rx_invitereq_info.operation_ch[3] = 0;
30031 + pwdinfo->rx_invitereq_info.operation_ch[4] = 0;
30032 +#endif //P2P_OP_CHECK_SOCIAL_CH
30033 + pwdinfo->rx_invitereq_info.scan_op_ch_only = 0;
30034 + pwdinfo->p2p_info.operation_ch[0] = 0;
30035 + pwdinfo->p2p_info.operation_ch[1] = 0; // Used to indicate the scan end in site survey function
30036 +#ifdef P2P_OP_CHECK_SOCIAL_CH
30037 + pwdinfo->p2p_info.operation_ch[2] = 0;
30038 + pwdinfo->p2p_info.operation_ch[3] = 0;
30039 + pwdinfo->p2p_info.operation_ch[4] = 0;
30040 +#endif //P2P_OP_CHECK_SOCIAL_CH
30041 + pwdinfo->p2p_info.scan_op_ch_only = 0;
30042 +}
30043
30044 - switch(OUI_Subtype)
30045 - {
30046 - case P2P_NOTICE_OF_ABSENCE:
30047 - DBG_871X("RTW_%s:P2P_NOTICE_OF_ABSENCE, dialogToken=%d\n", (tx==_TRUE)?"TX":"RX", dialogToken);
30048 - break;
30049 - case P2P_PRESENCE_REQUEST:
30050 - DBG_871X("RTW_%s:P2P_PRESENCE_REQUEST, dialogToken=%d\n", (tx==_TRUE)?"TX":"RX", dialogToken);
30051 - break;
30052 - case P2P_PRESENCE_RESPONSE:
30053 - DBG_871X("RTW_%s:P2P_PRESENCE_RESPONSE, dialogToken=%d\n", (tx==_TRUE)?"TX":"RX", dialogToken);
30054 - break;
30055 - case P2P_GO_DISC_REQUEST:
30056 - DBG_871X("RTW_%s:P2P_GO_DISC_REQUEST, dialogToken=%d\n", (tx==_TRUE)?"TX":"RX", dialogToken);
30057 - break;
30058 - default:
30059 - DBG_871X("RTW_%s:OUI_Subtype=%d, dialogToken=%d\n", (tx==_TRUE)?"TX":"RX", OUI_Subtype, dialogToken);
30060 - break;
30061 - }
30062 +#ifdef CONFIG_DBG_P2P
30063
30064 - }
30065 - else
30066 - {
30067 - DBG_871X("%s, action frame category=%d\n", __func__, category);
30068 - //is_p2p_frame = (-1);
30069 +/**
30070 + * rtw_p2p_role_txt - Get the p2p role name as a text string
30071 + * @role: P2P role
30072 + * Returns: The state name as a printable text string
30073 + */
30074 +const char * rtw_p2p_role_txt(enum P2P_ROLE role)
30075 +{
30076 + switch (role) {
30077 + case P2P_ROLE_DISABLE:
30078 + return "P2P_ROLE_DISABLE";
30079 + case P2P_ROLE_DEVICE:
30080 + return "P2P_ROLE_DEVICE";
30081 + case P2P_ROLE_CLIENT:
30082 + return "P2P_ROLE_CLIENT";
30083 + case P2P_ROLE_GO:
30084 + return "P2P_ROLE_GO";
30085 + default:
30086 + return "UNKNOWN";
30087 + }
30088 +}
30089 +
30090 +/**
30091 + * rtw_p2p_state_txt - Get the p2p state name as a text string
30092 + * @state: P2P state
30093 + * Returns: The state name as a printable text string
30094 + */
30095 +const char * rtw_p2p_state_txt(enum P2P_STATE state)
30096 +{
30097 + switch (state) {
30098 + case P2P_STATE_NONE:
30099 + return "P2P_STATE_NONE";
30100 + case P2P_STATE_IDLE:
30101 + return "P2P_STATE_IDLE";
30102 + case P2P_STATE_LISTEN:
30103 + return "P2P_STATE_LISTEN";
30104 + case P2P_STATE_SCAN:
30105 + return "P2P_STATE_SCAN";
30106 + case P2P_STATE_FIND_PHASE_LISTEN:
30107 + return "P2P_STATE_FIND_PHASE_LISTEN";
30108 + case P2P_STATE_FIND_PHASE_SEARCH:
30109 + return "P2P_STATE_FIND_PHASE_SEARCH";
30110 + case P2P_STATE_TX_PROVISION_DIS_REQ:
30111 + return "P2P_STATE_TX_PROVISION_DIS_REQ";
30112 + case P2P_STATE_RX_PROVISION_DIS_RSP:
30113 + return "P2P_STATE_RX_PROVISION_DIS_RSP";
30114 + case P2P_STATE_RX_PROVISION_DIS_REQ:
30115 + return "P2P_STATE_RX_PROVISION_DIS_REQ";
30116 + case P2P_STATE_GONEGO_ING:
30117 + return "P2P_STATE_GONEGO_ING";
30118 + case P2P_STATE_GONEGO_OK:
30119 + return "P2P_STATE_GONEGO_OK";
30120 + case P2P_STATE_GONEGO_FAIL:
30121 + return "P2P_STATE_GONEGO_FAIL";
30122 + case P2P_STATE_RECV_INVITE_REQ_MATCH:
30123 + return "P2P_STATE_RECV_INVITE_REQ_MATCH";
30124 + case P2P_STATE_PROVISIONING_ING:
30125 + return "P2P_STATE_PROVISIONING_ING";
30126 + case P2P_STATE_PROVISIONING_DONE:
30127 + return "P2P_STATE_PROVISIONING_DONE";
30128 + case P2P_STATE_TX_INVITE_REQ:
30129 + return "P2P_STATE_TX_INVITE_REQ";
30130 + case P2P_STATE_RX_INVITE_RESP_OK:
30131 + return "P2P_STATE_RX_INVITE_RESP_OK";
30132 + case P2P_STATE_RECV_INVITE_REQ_DISMATCH:
30133 + return "P2P_STATE_RECV_INVITE_REQ_DISMATCH";
30134 + case P2P_STATE_RECV_INVITE_REQ_GO:
30135 + return "P2P_STATE_RECV_INVITE_REQ_GO";
30136 + case P2P_STATE_RECV_INVITE_REQ_JOIN:
30137 + return "P2P_STATE_RECV_INVITE_REQ_JOIN";
30138 + case P2P_STATE_RX_INVITE_RESP_FAIL:
30139 + return "P2P_STATE_RX_INVITE_RESP_FAIL";
30140 + case P2P_STATE_RX_INFOR_NOREADY:
30141 + return "P2P_STATE_RX_INFOR_NOREADY";
30142 + case P2P_STATE_TX_INFOR_NOREADY:
30143 + return "P2P_STATE_TX_INFOR_NOREADY";
30144 + default:
30145 + return "UNKNOWN";
30146 }
30147 -
30148 - return is_p2p_frame;
30149 }
30150 -#endif //CONFIG_IOCTL_CFG80211
30151 -
30152 -#ifdef CONFIG_DBG_P2P
30153 -char * p2p_role_str[] = {
30154 - "P2P_ROLE_DISABLE",
30155 - "P2P_ROLE_DEVICE",
30156 - "P2P_ROLE_CLIENT",
30157 - "P2P_ROLE_GO"
30158 -};
30159 -
30160 -char * p2p_state_str[] = {
30161 - "P2P_STATE_NONE",
30162 - "P2P_STATE_IDLE",
30163 - "P2P_STATE_LISTEN",
30164 - "P2P_STATE_SCAN",
30165 - "P2P_STATE_FIND_PHASE_LISTEN",
30166 - "P2P_STATE_FIND_PHASE_SEARCH",
30167 - "P2P_STATE_TX_PROVISION_DIS_REQ",
30168 - "P2P_STATE_RX_PROVISION_DIS_RSP",
30169 - "P2P_STATE_RX_PROVISION_DIS_REQ",
30170 - "P2P_STATE_GONEGO_ING",
30171 - "P2P_STATE_GONEGO_OK",
30172 - "P2P_STATE_GONEGO_FAIL",
30173 - "P2P_STATE_RECV_INVITE_REQ",
30174 - "P2P_STATE_PROVISIONING_ING",
30175 - "P2P_STATE_PROVISIONING_DONE"
30176 -};
30177
30178 void dbg_rtw_p2p_set_state(struct wifidirect_info *wdinfo, enum P2P_STATE state, const char *caller, int line)
30179 {
30180 @@ -3385,11 +5147,11 @@ void dbg_rtw_p2p_set_state(struct wifidi
30181 enum P2P_STATE old_state = _rtw_p2p_state(wdinfo);
30182 _rtw_p2p_set_state(wdinfo, state);
30183 DBG_871X("[CONFIG_DBG_P2P]%s:%d set_state from %s to %s\n", caller, line
30184 - , p2p_state_str[old_state], p2p_state_str[_rtw_p2p_state(wdinfo)]
30185 + , rtw_p2p_state_txt(old_state), rtw_p2p_state_txt(_rtw_p2p_state(wdinfo))
30186 );
30187 } else {
30188 DBG_871X("[CONFIG_DBG_P2P]%s:%d set_state to same state %s\n", caller, line
30189 - , p2p_state_str[_rtw_p2p_state(wdinfo)]
30190 + , rtw_p2p_state_txt(_rtw_p2p_state(wdinfo))
30191 );
30192 }
30193 }
30194 @@ -3399,11 +5161,11 @@ void dbg_rtw_p2p_set_pre_state(struct wi
30195 enum P2P_STATE old_state = _rtw_p2p_pre_state(wdinfo);
30196 _rtw_p2p_set_pre_state(wdinfo, state);
30197 DBG_871X("[CONFIG_DBG_P2P]%s:%d set_pre_state from %s to %s\n", caller, line
30198 - , p2p_state_str[old_state], p2p_state_str[_rtw_p2p_pre_state(wdinfo)]
30199 + , rtw_p2p_state_txt(old_state), rtw_p2p_state_txt(_rtw_p2p_pre_state(wdinfo))
30200 );
30201 } else {
30202 DBG_871X("[CONFIG_DBG_P2P]%s:%d set_pre_state to same state %s\n", caller, line
30203 - , p2p_state_str[_rtw_p2p_pre_state(wdinfo)]
30204 + , rtw_p2p_state_txt(_rtw_p2p_pre_state(wdinfo))
30205 );
30206 }
30207 }
30208 @@ -3428,11 +5190,11 @@ void dbg_rtw_p2p_set_role(struct wifidir
30209 enum P2P_ROLE old_role = wdinfo->role;
30210 _rtw_p2p_set_role(wdinfo, role);
30211 DBG_871X("[CONFIG_DBG_P2P]%s:%d set_role from %s to %s\n", caller, line
30212 - , p2p_role_str[old_role], p2p_role_str[wdinfo->role]
30213 + , rtw_p2p_role_txt(old_role), rtw_p2p_role_txt(wdinfo->role)
30214 );
30215 } else {
30216 DBG_871X("[CONFIG_DBG_P2P]%s:%d set_role to same role %s\n", caller, line
30217 - , p2p_role_str[wdinfo->role]
30218 + , rtw_p2p_role_txt(wdinfo->role)
30219 );
30220 }
30221 }
30222 @@ -3450,29 +5212,45 @@ int rtw_p2p_enable(_adapter *padapter, e
30223 u8 channel, ch_offset;
30224 u16 bwmode;
30225
30226 - //leave IPS/Autosuspend
30227 - if(_FAIL == rtw_pwr_wakeup(padapter))
30228 +#ifdef CONFIG_CONCURRENT_MODE
30229 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
30230 + struct wifidirect_info *pbuddy_wdinfo = &pbuddy_adapter->wdinfo;
30231 + // Commented by Albert 2011/12/30
30232 + // The driver just supports 1 P2P group operation.
30233 + // So, this function will do nothing if the buddy adapter had enabled the P2P function.
30234 + if(!rtw_p2p_chk_state(pbuddy_wdinfo, P2P_STATE_NONE))
30235 {
30236 + // The buddy adapter had enabled the P2P function.
30237 + return ret;
30238 + }
30239 +#endif //CONFIG_CONCURRENT_MODE
30240 +
30241 + //leave IPS/Autosuspend
30242 + if (_FAIL == rtw_pwr_wakeup(padapter)) {
30243 ret = _FAIL;
30244 goto exit;
30245 }
30246 +
30247
30248 - #ifdef CONFIG_P2P_AGAINST_NOISE
30249 - //Sometimes dongle would difficult to receive p2p_probe_req caused by platform noise. Kurt
30250 - rtw_write8(padapter, 0xc41, 0x42);
30251 - DBG_8192C("rtw_write8(0x%x)=0x%02x\n", 0xc41, rtw_read8(padapter, 0xc41));
30252 - #endif
30253 + // Added by Albert 2011/03/22
30254 + // In the P2P mode, the driver should not support the b mode.
30255 + // So, the Tx packet shouldn't use the CCK rate
30256 + update_tx_basic_rate(padapter, WIRELESS_11AGN);
30257
30258 //Enable P2P function
30259 init_wifidirect_info(padapter, role);
30260 -
30261 }
30262 else if (role == P2P_ROLE_DISABLE)
30263 - {
30264 - #ifdef CONFIG_P2P_AGAINST_NOISE
30265 - rtw_write8(padapter, 0xc41, 0x40);
30266 - DBG_8192C("rtw_write8(0x%x)=0x%02x\n", 0xc41, rtw_read8(padapter, 0xc41));
30267 - #endif
30268 + {
30269 +#ifdef CONFIG_INTEL_WIDI
30270 + if( padapter->mlmepriv.p2p_reject_disable == _TRUE )
30271 + return ret;
30272 +#endif //CONFIG_INTEL_WIDI
30273 +
30274 + if (_FAIL == rtw_pwr_wakeup(padapter)) {
30275 + ret = _FAIL;
30276 + goto exit;
30277 + }
30278
30279 //Disable P2P function
30280 if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
30281 @@ -3480,16 +5258,34 @@ int rtw_p2p_enable(_adapter *padapter, e
30282 _cancel_timer_ex( &pwdinfo->find_phase_timer );
30283 _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
30284 _cancel_timer_ex( &pwdinfo->pre_tx_scan_timer);
30285 + _cancel_timer_ex( &pwdinfo->reset_ch_sitesurvey);
30286 + _cancel_timer_ex( &pwdinfo->reset_ch_sitesurvey2);
30287 + reset_ch_sitesurvey_timer_process( padapter );
30288 + reset_ch_sitesurvey_timer_process2( padapter );
30289 + #ifdef CONFIG_CONCURRENT_MODE
30290 + _cancel_timer_ex( &pwdinfo->ap_p2p_switch_timer);
30291 + #endif
30292 rtw_p2p_set_state(pwdinfo, P2P_STATE_NONE);
30293 rtw_p2p_set_role(pwdinfo, P2P_ROLE_DISABLE);
30294 _rtw_memset(&pwdinfo->rx_prov_disc_info, 0x00, sizeof(struct rx_provdisc_req_info));
30295 }
30296 -
30297 - if(pwrpriv->bips_processing == _FALSE){
30298 - rtw_set_pwr_state_check_timer(pwrpriv);
30299 - }
30300 +
30301 + //Restore to initial setting.
30302 + update_tx_basic_rate(padapter, padapter->registrypriv.wireless_mode);
30303 +
30304 +#ifdef CONFIG_INTEL_WIDI
30305 + rtw_reset_widi_info(padapter);
30306 +#endif //CONFIG_INTEL_WIDI
30307 +
30308 + //For WiDi purpose.
30309 +#ifdef CONFIG_IOCTL_CFG80211
30310 + pwdinfo->driver_interface = DRIVER_CFG80211;
30311 +#else
30312 + pwdinfo->driver_interface = DRIVER_WEXT;
30313 +#endif //CONFIG_IOCTL_CFG80211
30314 +
30315 }
30316 -
30317 +
30318 exit:
30319 return ret;
30320 }
30321 --- a/drivers/net/wireless/rtl8192cu/core/rtw_pwrctrl.c
30322 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_pwrctrl.c
30323 @@ -16,8 +16,7 @@
30324 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
30325 *
30326 *
30327 -
30328 -******************************************************************************/
30329 + ******************************************************************************/
30330 #define _RTW_PWRCTRL_C_
30331
30332 #include <drv_conf.h>
30333 @@ -25,87 +24,78 @@
30334 #include <drv_types.h>
30335 #include <osdep_intf.h>
30336
30337 -#ifdef CONFIG_SDIO_HCI
30338 -#include <sdio_ops.h>
30339 -#endif
30340
30341 #ifdef CONFIG_IPS
30342 -void ips_enter(_adapter * padapter)
30343 +void _ips_enter(_adapter * padapter)
30344 {
30345 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
30346 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
30347 -
30348
30349 - _enter_pwrlock(&pwrpriv->lock);
30350 -
30351 - pwrpriv->bips_processing = _TRUE;
30352 + pwrpriv->bips_processing = _TRUE;
30353
30354 // syn ips_mode with request
30355 pwrpriv->ips_mode = pwrpriv->ips_mode_req;
30356 -
30357 - pwrpriv->ips_enter_cnts++;
30358 - DBG_8192C("==>ips_enter cnts:%d\n",pwrpriv->ips_enter_cnts);
30359 -
30360 - if(rf_off == pwrpriv->change_rfpwrstate )
30361 - {
30362 - DBG_8192C("==>power_saving_ctrl_wk_hdl change rf to OFF...LED(0x%08x).... \n\n",rtw_read32(padapter,0x4c));
30363 -
30364 +
30365 + pwrpriv->ips_enter_cnts++;
30366 + DBG_871X("==>ips_enter cnts:%d\n",pwrpriv->ips_enter_cnts);
30367 +
30368 + if(rf_off == pwrpriv->change_rfpwrstate)
30369 + {
30370 if(pwrpriv->ips_mode == IPS_LEVEL_2)
30371 pwrpriv->bkeepfwalive = _TRUE;
30372 -
30373 +
30374 rtw_ips_pwr_down(padapter);
30375 pwrpriv->rf_pwrstate = rf_off;
30376 - }
30377 - pwrpriv->bips_processing = _FALSE;
30378 + }
30379 + pwrpriv->bips_processing = _FALSE;
30380 +
30381 +}
30382 +
30383 +void ips_enter(_adapter * padapter)
30384 +{
30385 + struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
30386 +
30387 + _enter_pwrlock(&pwrpriv->lock);
30388 + _ips_enter(padapter);
30389 _exit_pwrlock(&pwrpriv->lock);
30390 -
30391 }
30392
30393 -int ips_leave(_adapter * padapter)
30394 +int _ips_leave(_adapter * padapter)
30395 {
30396 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
30397 - struct security_priv* psecuritypriv=&(padapter->securitypriv);
30398 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
30399 int result = _SUCCESS;
30400 - sint keyid;
30401 - _enter_pwrlock(&pwrpriv->lock);
30402 +
30403 if((pwrpriv->rf_pwrstate == rf_off) &&(!pwrpriv->bips_processing))
30404 {
30405 + pwrpriv->bips_processing = _TRUE;
30406 pwrpriv->change_rfpwrstate = rf_on;
30407 pwrpriv->ips_leave_cnts++;
30408 - DBG_8192C("==>ips_leave cnts:%d\n",pwrpriv->ips_leave_cnts);
30409 -
30410 - result = rtw_ips_pwr_up(padapter);
30411 - pwrpriv->bips_processing = _TRUE;
30412 - pwrpriv->rf_pwrstate = rf_on;
30413 + DBG_871X("==>ips_leave cnts:%d\n",pwrpriv->ips_leave_cnts);
30414
30415 - if((_WEP40_ == psecuritypriv->dot11PrivacyAlgrthm) ||(_WEP104_ == psecuritypriv->dot11PrivacyAlgrthm))
30416 - {
30417 - DBG_8192C("==>%s,channel(%d),processing(%x)\n",__FUNCTION__,padapter->mlmeextpriv.cur_channel,pwrpriv->bips_processing);
30418 - set_channel_bwmode(padapter, padapter->mlmeextpriv.cur_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
30419 - for(keyid=0;keyid<4;keyid++){
30420 - if(pmlmepriv->key_mask & BIT(keyid)){
30421 - if(keyid == psecuritypriv->dot11PrivacyKeyIndex)
30422 - result=rtw_set_key(padapter,psecuritypriv, keyid, 1);
30423 - else
30424 - result=rtw_set_key(padapter,psecuritypriv, keyid, 0);
30425 - }
30426 - }
30427 + if ((result = rtw_ips_pwr_up(padapter)) == _SUCCESS) {
30428 + pwrpriv->rf_pwrstate = rf_on;
30429 }
30430 -
30431 - DBG_8192C("==> ips_leave.....LED(0x%08x)...\n",rtw_read32(padapter,0x4c));
30432 +
30433 + DBG_871X("==> ips_leave.....LED(0x%08x)...\n",rtw_read32(padapter,0x4c));
30434 pwrpriv->bips_processing = _FALSE;
30435
30436 pwrpriv->bkeepfwalive = _FALSE;
30437 -
30438 -
30439 }
30440 - _exit_pwrlock(&pwrpriv->lock);
30441 +
30442 return result;
30443 }
30444
30445 +int ips_leave(_adapter * padapter)
30446 +{
30447 + struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
30448 + int ret;
30449
30450 -#endif
30451 + _enter_pwrlock(&pwrpriv->lock);
30452 + ret = _ips_leave(padapter);
30453 + _exit_pwrlock(&pwrpriv->lock);
30454 +
30455 + return ret;
30456 +}
30457 +#endif /* CONFIG_IPS */
30458
30459 #ifdef CONFIG_AUTOSUSPEND
30460 extern void autosuspend_enter(_adapter* padapter);
30461 @@ -117,7 +107,74 @@ int rtw_hw_suspend(_adapter *padapter );
30462 int rtw_hw_resume(_adapter *padapter);
30463 #endif
30464
30465 -#ifdef PLATFORM_LINUX
30466 +bool rtw_pwr_unassociated_idle(_adapter *adapter)
30467 +{
30468 + _adapter *buddy = adapter->pbuddy_adapter;
30469 + struct mlme_priv *pmlmepriv = &(adapter->mlmepriv);
30470 +#ifdef CONFIG_P2P
30471 + struct wifidirect_info *pwdinfo = &(adapter->wdinfo);
30472 +#ifdef CONFIG_IOCTL_CFG80211
30473 + struct cfg80211_wifidirect_info *pcfg80211_wdinfo = &adapter->cfg80211_wdinfo;
30474 +#endif
30475 +#endif
30476 +
30477 + bool ret = _FALSE;
30478 +
30479 + if (adapter->pwrctrlpriv.ips_deny_time >= rtw_get_current_time()) {
30480 + //DBG_871X("%s ips_deny_time\n", __func__);
30481 + goto exit;
30482 + }
30483 +
30484 + if (check_fwstate(pmlmepriv, WIFI_ASOC_STATE|WIFI_SITE_MONITOR)
30485 + || check_fwstate(pmlmepriv, WIFI_UNDER_LINKING|WIFI_UNDER_WPS)
30486 + || check_fwstate(pmlmepriv, WIFI_AP_STATE)
30487 + || check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE|WIFI_ADHOC_STATE)
30488 + #if defined(CONFIG_P2P) && defined(CONFIG_IOCTL_CFG80211) && defined(CONFIG_P2P_IPS)
30489 + || pcfg80211_wdinfo->is_ro_ch
30490 + #elif defined(CONFIG_P2P)
30491 + || !rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)
30492 + #endif
30493 + ) {
30494 + goto exit;
30495 + }
30496 +
30497 + /* consider buddy, if exist */
30498 + if (buddy) {
30499 + struct mlme_priv *b_pmlmepriv = &(buddy->mlmepriv);
30500 + #ifdef CONFIG_P2P
30501 + struct wifidirect_info *b_pwdinfo = &(buddy->wdinfo);
30502 + #ifdef CONFIG_IOCTL_CFG80211
30503 + struct cfg80211_wifidirect_info *b_pcfg80211_wdinfo = &buddy->cfg80211_wdinfo;
30504 + #endif
30505 + #endif
30506 +
30507 + if (check_fwstate(b_pmlmepriv, WIFI_ASOC_STATE|WIFI_SITE_MONITOR)
30508 + || check_fwstate(b_pmlmepriv, WIFI_UNDER_LINKING|WIFI_UNDER_WPS)
30509 + || check_fwstate(b_pmlmepriv, WIFI_AP_STATE)
30510 + || check_fwstate(b_pmlmepriv, WIFI_ADHOC_MASTER_STATE|WIFI_ADHOC_STATE)
30511 + #if defined(CONFIG_P2P) && defined(CONFIG_IOCTL_CFG80211) && defined(CONFIG_P2P_IPS)
30512 + || b_pcfg80211_wdinfo->is_ro_ch
30513 + #elif defined(CONFIG_P2P)
30514 + || !rtw_p2p_chk_state(b_pwdinfo, P2P_STATE_NONE)
30515 + #endif
30516 + ) {
30517 + goto exit;
30518 + }
30519 + }
30520 +
30521 +#ifdef CONFIG_INTEL_PROXIM
30522 + if(adapter->proximity.proxim_on==_TRUE){
30523 + return;
30524 + }
30525 +#endif
30526 +
30527 + ret = _TRUE;
30528 +
30529 +exit:
30530 + return ret;
30531 +}
30532 +
30533 +#if defined (PLATFORM_LINUX)||defined (PLATFORM_FREEBSD)
30534 void rtw_ps_processor(_adapter*padapter)
30535 {
30536 #ifdef CONFIG_P2P
30537 @@ -125,13 +182,17 @@ void rtw_ps_processor(_adapter*padapter)
30538 #endif //CONFIG_P2P
30539 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
30540 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
30541 - int res;
30542 +#ifdef SUPPORT_HW_RFOFF_DETECTED
30543 rt_rf_power_state rfpwrstate;
30544 -
30545 +#endif //SUPPORT_HW_RFOFF_DETECTED
30546 +
30547 + pwrpriv->ps_processing = _TRUE;
30548 +
30549 #ifdef SUPPORT_HW_RFOFF_DETECTED
30550 - if(pwrpriv->bips_processing == _TRUE) return;
30551 + if(pwrpriv->bips_processing == _TRUE)
30552 + goto exit;
30553
30554 - //DBG_8192C("==> fw report state(0x%x)\n",rtw_read8(padapter,0x1ca));
30555 + //DBG_871X("==> fw report state(0x%x)\n",rtw_read8(padapter,0x1ca));
30556 if(padapter->pwrctrlpriv.bHWPwrPindetect)
30557 {
30558 #ifdef CONFIG_AUTOSUSPEND
30559 @@ -143,7 +204,7 @@ void rtw_ps_processor(_adapter*padapter)
30560 pwrpriv->ps_flag = _TRUE;
30561
30562 rfpwrstate = RfOnOffDetect(padapter);
30563 - DBG_8192C("@@@@- #1 %s==> rfstate:%s \n",__FUNCTION__,(rfpwrstate==rf_on)?"rf_on":"rf_off");
30564 + DBG_871X("@@@@- #1 %s==> rfstate:%s \n",__FUNCTION__,(rfpwrstate==rf_on)?"rf_on":"rf_off");
30565 if(rfpwrstate!= pwrpriv->rf_pwrstate)
30566 {
30567 if(rfpwrstate == rf_off)
30568 @@ -162,7 +223,7 @@ void rtw_ps_processor(_adapter*padapter)
30569 #endif //CONFIG_AUTOSUSPEND
30570 {
30571 rfpwrstate = RfOnOffDetect(padapter);
30572 - DBG_8192C("@@@@- #2 %s==> rfstate:%s \n",__FUNCTION__,(rfpwrstate==rf_on)?"rf_on":"rf_off");
30573 + DBG_871X("@@@@- #2 %s==> rfstate:%s \n",__FUNCTION__,(rfpwrstate==rf_on)?"rf_on":"rf_off");
30574
30575 if(rfpwrstate!= pwrpriv->rf_pwrstate)
30576 {
30577 @@ -178,46 +239,41 @@ void rtw_ps_processor(_adapter*padapter)
30578 pwrpriv->change_rfpwrstate = rf_on;
30579 rtw_hw_resume(padapter );
30580 }
30581 - DBG_8192C("current rf_pwrstate(%s)\n",(pwrpriv->rf_pwrstate == rf_off)?"rf_off":"rf_on");
30582 + DBG_871X("current rf_pwrstate(%s)\n",(pwrpriv->rf_pwrstate == rf_off)?"rf_off":"rf_on");
30583 }
30584 }
30585 pwrpriv->pwr_state_check_cnts ++;
30586 }
30587 #endif //SUPPORT_HW_RFOFF_DETECTED
30588
30589 - if( pwrpriv->power_mgnt == PS_MODE_ACTIVE ) return;
30590 + if (pwrpriv->ips_mode_req == IPS_NONE
30591 + #ifdef CONFIG_CONCURRENT_MODE
30592 + || padapter->pbuddy_adapter->pwrctrlpriv.ips_mode_req == IPS_NONE
30593 + #endif
30594 + )
30595 + goto exit;
30596 +
30597 + if (rtw_pwr_unassociated_idle(padapter) == _FALSE)
30598 + goto exit;
30599
30600 if((pwrpriv->rf_pwrstate == rf_on) && ((pwrpriv->pwr_state_check_cnts%4)==0))
30601 {
30602 - if ( (check_fwstate(pmlmepriv, _FW_LINKED|_FW_UNDER_SURVEY|_FW_UNDER_LINKING) == _TRUE) ||
30603 - (check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE) ||
30604 - (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == _TRUE) ||
30605 - (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) == _TRUE) ||
30606 - (padapter->bup == _FALSE)
30607 - #ifdef CONFIG_P2P
30608 - || !rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)
30609 - #endif //CONFIG_P2P
30610 - )
30611 - {
30612 - return;
30613 - }
30614 -
30615 - DBG_8192C("==>%s .fw_state(%x)\n",__FUNCTION__,get_fwstate(pmlmepriv));
30616 + DBG_871X("==>%s .fw_state(%x)\n",__FUNCTION__,get_fwstate(pmlmepriv));
30617 pwrpriv->change_rfpwrstate = rf_off;
30618
30619 #ifdef CONFIG_AUTOSUSPEND
30620 if(padapter->registrypriv.usbss_enable)
30621 {
30622 - if(padapter->pwrctrlpriv.bHWPwrPindetect)
30623 - pwrpriv->bkeepfwalive = _TRUE;
30624 -
30625 + if(pwrpriv->bHWPwrPindetect)
30626 + pwrpriv->bkeepfwalive = _TRUE;
30627 +
30628 if(padapter->net_closed == _TRUE)
30629 pwrpriv->ps_flag = _TRUE;
30630
30631 padapter->bCardDisableWOHSM = _TRUE;
30632 autosuspend_enter(padapter);
30633 }
30634 - else if(padapter->pwrctrlpriv.bHWPwrPindetect)
30635 + else if(pwrpriv->bHWPwrPindetect)
30636 {
30637 }
30638 else
30639 @@ -228,95 +284,72 @@ void rtw_ps_processor(_adapter*padapter)
30640 #endif
30641 }
30642 }
30643 -
30644 -
30645 +exit:
30646 + rtw_set_pwr_state_check_timer(&padapter->pwrctrlpriv);
30647 + pwrpriv->ps_processing = _FALSE;
30648 + return;
30649 }
30650
30651 +void pwr_state_check_handler(void *FunctionContext);
30652 void pwr_state_check_handler(void *FunctionContext)
30653 {
30654 _adapter *padapter = (_adapter *)FunctionContext;
30655 - struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
30656 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
30657 - struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
30658 -#ifdef CONFIG_P2P
30659 - struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
30660 -#endif //CONFIG_P2P
30661 - //DBG_871X("%s\n", __FUNCTION__);
30662 -
30663 -#ifdef SUPPORT_HW_RFOFF_DETECTED
30664 - //DBG_8192C("%s...bHWPwrPindetect(%d)\n",__FUNCTION__,padapter->pwrctrlpriv.bHWPwrPindetect);
30665 - if(padapter->pwrctrlpriv.bHWPwrPindetect)
30666 - {
30667 - rtw_ps_cmd(padapter);
30668 - rtw_set_pwr_state_check_timer(&padapter->pwrctrlpriv);
30669 - }
30670 - else
30671 -#endif
30672 - {
30673 - //if(padapter->net_closed == _TRUE) return;
30674 - //DBG_8192C("==>%s .fw_state(%x)\n", __FUNCTION__, get_fwstate(pmlmepriv));
30675 - if ( (check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE) ||
30676 - (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == _TRUE) ||
30677 - (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) == _TRUE) ||
30678 - (check_fwstate(pmlmepriv, _FW_LINKED|_FW_UNDER_SURVEY|_FW_UNDER_LINKING) == _TRUE) ||
30679 - (padapter->bup == _FALSE)
30680 -#ifdef CONFIG_P2P
30681 - || !rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)
30682 -#endif //CONFIG_P2P
30683 - )
30684 - {
30685 - //other pwr ctrl....
30686 - rtw_set_pwr_state_check_timer(&padapter->pwrctrlpriv);
30687 - }
30688 - else
30689 - {
30690 - if((pwrpriv->rf_pwrstate == rf_on) &&(_FALSE == pwrpriv->bips_processing))
30691 - {
30692 - pwrpriv->change_rfpwrstate = rf_off;
30693 - pwrctrlpriv->pwr_state_check_cnts = 0;
30694 - DBG_8192C("==>pwr_state_check_handler .fw_state(%x)\n",get_fwstate(pmlmepriv));
30695 - rtw_ps_cmd(padapter);
30696 - }
30697 -
30698 - }
30699 - }
30700 -
30701 -
30702 -
30703 + rtw_ps_cmd(padapter);
30704 }
30705 #endif
30706
30707
30708 #ifdef CONFIG_LPS
30709 -void rtw_set_rpwm(_adapter * padapter, u8 val8)
30710 +/*
30711 + *
30712 + * Parameters
30713 + * padapter
30714 + * pslv power state level, only could be PS_STATE_S0 ~ PS_STATE_S4
30715 + *
30716 + */
30717 +void rtw_set_rpwm(PADAPTER padapter, u8 pslv)
30718 {
30719 u8 rpwm;
30720 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
30721
30722 _func_enter_;
30723
30724 - if(pwrpriv->rpwm == val8){
30725 - RT_TRACE(_module_rtl871x_pwrctrl_c_,_drv_err_,("Already set rpwm [%d] ! \n", val8));
30726 + pslv = PS_STATE(pslv);
30727 +
30728 + if (pwrpriv->rpwm == pslv) {
30729 + RT_TRACE(_module_rtl871x_pwrctrl_c_,_drv_err_,
30730 + ("%s: Already set rpwm[0x%02x]!\n", __FUNCTION__, pslv));
30731 return;
30732 }
30733
30734 - if ((padapter->bDriverStopped == _TRUE)||(padapter->bSurpriseRemoved== _TRUE)){
30735 - RT_TRACE(_module_rtl871x_xmit_c_,_drv_err_,("rtw_set_rpwm=> bDriverStopped or bSurpriseRemoved \n"));
30736 + if ((padapter->bDriverStopped == _TRUE) ||
30737 + (padapter->bSurpriseRemoved == _TRUE)) {
30738 + RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_err_,
30739 + ("%s: bDriverStopped(%d) bSurpriseRemoved(%d)\n",
30740 + __FUNCTION__, padapter->bDriverStopped, padapter->bSurpriseRemoved));
30741 return;
30742 }
30743 - rpwm = val8 |pwrpriv->tog;
30744
30745 - pwrpriv->rpwm = val8;
30746 -
30747 - RT_TRACE(_module_rtl871x_pwrctrl_c_,_drv_err_,("rtw_set_rpwm: value = %x\n", rpwm));
30748 + rpwm = pslv | pwrpriv->tog;
30749 +#ifdef CONFIG_LPS_LCLK
30750 + if ((pwrpriv->cpwm < PS_STATE_S2) && (pslv >= PS_STATE_S2))
30751 + rpwm |= PS_ACK;
30752 +#endif
30753 + RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_notice_,
30754 + ("rtw_set_rpwm: rpwm=0x%02x cpwm=0x%02x\n", rpwm, pwrpriv->cpwm));
30755 +
30756 + pwrpriv->rpwm = pslv;
30757 +
30758 + rtw_hal_set_hwreg(padapter, HW_VAR_SET_RPWM, (u8 *)(&rpwm));
30759
30760 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_SET_RPWM, (u8 *)(&rpwm));
30761 -
30762 pwrpriv->tog += 0x80;
30763
30764 + if (!(rpwm & PS_ACK)) pwrpriv->cpwm = pslv;
30765 +
30766 _func_exit_;
30767 }
30768
30769 +u8 PS_RDY_CHECK(_adapter * padapter);
30770 u8 PS_RDY_CHECK(_adapter * padapter)
30771 {
30772 u32 curr_time, delta_time;
30773 @@ -332,7 +365,9 @@ u8 PS_RDY_CHECK(_adapter * padapter)
30774 return _FALSE;
30775 }
30776
30777 - if ( (check_fwstate(pmlmepriv, _FW_LINKED) == _FALSE) ||
30778 + if ((check_fwstate(pmlmepriv, _FW_LINKED) == _FALSE) ||
30779 + (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY) == _TRUE) ||
30780 + (check_fwstate(pmlmepriv, WIFI_UNDER_WPS) == _TRUE) ||
30781 (check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE) ||
30782 (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == _TRUE) ||
30783 (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) == _TRUE) )
30784 @@ -343,24 +378,37 @@ u8 PS_RDY_CHECK(_adapter * padapter)
30785
30786 if( (padapter->securitypriv.dot11AuthAlgrthm == dot11AuthAlgrthm_8021X) && (padapter->securitypriv.binstallGrpkey == _FALSE) )
30787 {
30788 - DBG_8192C("Group handshake still in progress !!!\n");
30789 + DBG_871X("Group handshake still in progress !!!\n");
30790 return _FALSE;
30791 }
30792
30793 +#ifdef CONFIG_IOCTL_CFG80211
30794 + if (!rtw_cfg80211_pwr_mgmt(padapter))
30795 + return _FALSE;
30796 +#endif
30797 +
30798 return _TRUE;
30799 }
30800
30801 -void rtw_set_ps_mode(_adapter * padapter, u8 ps_mode, u8 smart_ps)
30802 +void rtw_set_ps_mode(PADAPTER padapter, u8 ps_mode, u8 smart_ps)
30803 {
30804 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
30805 #ifdef CONFIG_P2P
30806 struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
30807 #endif //CONFIG_P2P
30808 +#ifdef CONFIG_TDLS
30809 + struct sta_priv *pstapriv = &padapter->stapriv;
30810 + _irqL irqL;
30811 + int i, j;
30812 + _list *plist, *phead;
30813 + struct sta_info *ptdls_sta;
30814 +#endif //CONFIG_TDLS
30815
30816 _func_enter_;
30817
30818 - RT_TRACE(_module_rtl871x_pwrctrl_c_,_drv_err_,("========= Power Mode is :%d, Smart_PS = %d\n", ps_mode,smart_ps));
30819 - //DBG_8192C("========= Power Mode is :%d, Smart_PS = %d\n", ps_mode,smart_ps);
30820 + RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_notice_,
30821 + ("%s: PowerMode=%d Smart_PS=%d\n",
30822 + __FUNCTION__, ps_mode, smart_ps));
30823
30824 if(ps_mode > PM_Card_Disable) {
30825 RT_TRACE(_module_rtl871x_pwrctrl_c_,_drv_err_,("ps_mode:%d error\n", ps_mode));
30826 @@ -375,34 +423,108 @@ _func_enter_;
30827 //if(pwrpriv->pwr_mode == PS_MODE_ACTIVE)
30828 if(ps_mode == PS_MODE_ACTIVE)
30829 {
30830 -#ifdef CONFIG_P2P
30831 +#ifdef CONFIG_P2P_PS
30832 if(pwdinfo->opp_ps == 0)
30833 -#endif //CONFIG_P2P
30834 +#endif // CONFIG_P2P_PS
30835 {
30836 - DBG_8192C("rtw_set_ps_mode(): Busy Traffic , Leave 802.11 power save..\n");
30837 +#ifdef CONFIG_LPS_LCLK
30838 + _enter_pwrlock(&pwrpriv->lock);
30839 +#endif
30840 + DBG_871X("rtw_set_ps_mode(): Busy Traffic , Leave 802.11 power save..\n");
30841 +
30842 +#ifdef CONFIG_TDLS
30843 + _enter_critical_bh(&pstapriv->sta_hash_lock, &irqL);
30844 +
30845 + for(i=0; i< NUM_STA; i++)
30846 + {
30847 + phead = &(pstapriv->sta_hash[i]);
30848 + plist = get_next(phead);
30849 +
30850 + while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
30851 + {
30852 + ptdls_sta = LIST_CONTAINOR(plist, struct sta_info, hash_list);
30853 +
30854 + if( ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE )
30855 + issue_nulldata_to_TDLS_peer_STA(padapter, ptdls_sta, 0);
30856 + plist = get_next(plist);
30857 + }
30858 + }
30859 +
30860 + _exit_critical_bh(&pstapriv->sta_hash_lock, &irqL);
30861 +#endif //CONFIG_TDLS
30862 +
30863 pwrpriv->smart_ps = smart_ps;
30864 pwrpriv->pwr_mode = ps_mode;
30865 +
30866 rtw_set_rpwm(padapter, PS_STATE_S4);
30867 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_H2C_FW_PWRMODE, (u8 *)(&ps_mode));
30868 +#ifdef CONFIG_LPS_LCLK
30869 +{
30870 + u32 n = 0;
30871 + while (pwrpriv->cpwm != PS_STATE_S4) {
30872 + n++;
30873 + if (n == 10000) break;
30874 + if (padapter->bSurpriseRemoved == _TRUE) break;
30875 + rtw_msleep_os(1);
30876 + }
30877 + if (n == 10000)
30878 + printk(KERN_ERR "%s: wait CPWM to S4 too long! cpwm=0x%02x\n", __func__, pwrpriv->cpwm);
30879 +}
30880 +#endif
30881 + rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_PWRMODE, (u8 *)(&ps_mode));
30882 pwrpriv->bFwCurrentInPSMode = _FALSE;
30883 +#ifdef CONFIG_LPS_LCLK
30884 + _exit_pwrlock(&pwrpriv->lock);
30885 +#endif
30886 }
30887 }
30888 else
30889 {
30890 if(PS_RDY_CHECK(padapter))
30891 {
30892 - DBG_8192C("rtw_set_ps_mode(): Enter 802.11 power save mode...\n");
30893 +#ifdef CONFIG_LPS_LCLK
30894 + _enter_pwrlock(&pwrpriv->lock);
30895 +#endif
30896 + DBG_871X("rtw_set_ps_mode(): Enter 802.11 power save mode...\n");
30897 +
30898 +#ifdef CONFIG_TDLS
30899 + _enter_critical_bh(&pstapriv->sta_hash_lock, &irqL);
30900 +
30901 + for(i=0; i< NUM_STA; i++)
30902 + {
30903 + phead = &(pstapriv->sta_hash[i]);
30904 + plist = get_next(phead);
30905 +
30906 + while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
30907 + {
30908 + ptdls_sta = LIST_CONTAINOR(plist, struct sta_info, hash_list);
30909 +
30910 + if( ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE )
30911 + issue_nulldata_to_TDLS_peer_STA(padapter, ptdls_sta, 1);
30912 + plist = get_next(plist);
30913 + }
30914 + }
30915 +
30916 + _exit_critical_bh(&pstapriv->sta_hash_lock, &irqL);
30917 +#endif //CONFIG_TDLS
30918 +
30919 pwrpriv->smart_ps = smart_ps;
30920 pwrpriv->pwr_mode = ps_mode;
30921 pwrpriv->bFwCurrentInPSMode = _TRUE;
30922 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_H2C_FW_PWRMODE, (u8 *)(&ps_mode));
30923 -#ifdef CONFIG_P2P
30924 + rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_PWRMODE, (u8 *)(&ps_mode));
30925 +#ifdef CONFIG_P2P_PS
30926 // Set CTWindow after LPS
30927 if(pwdinfo->opp_ps == 1)
30928 - //if(pwdinfo->p2p_ps_enable == _TRUE)
30929 p2p_ps_wk_cmd(padapter, P2P_PS_ENABLE, 0);
30930 -#endif //CONFIG_P2P
30931 +#endif // CONFIG_P2P_PS
30932 +#ifdef CONFIG_LPS_LCLK
30933 + if (pwrpriv->alives == 0)
30934 + rtw_set_rpwm(padapter, PS_STATE_S0);
30935 +#else
30936 rtw_set_rpwm(padapter, PS_STATE_S2);
30937 +#endif
30938 +#ifdef CONFIG_LPS_LCLK
30939 + _exit_pwrlock(&pwrpriv->lock);
30940 +#endif
30941 }
30942 //else
30943 //{
30944 @@ -422,18 +544,54 @@ void LPS_Enter(PADAPTER padapter)
30945 {
30946 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
30947 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
30948 + _adapter *buddy = padapter->pbuddy_adapter;
30949
30950 _func_enter_;
30951
30952 // DBG_871X("+LeisurePSEnter\n");
30953
30954 +#ifdef CONFIG_CONCURRENT_MODE
30955 + if (padapter->iface_type != IFACE_PORT0)
30956 + return; /* Skip power saving for concurrent mode port 1*/
30957 +
30958 + /* consider buddy, if exist */
30959 + if (buddy) {
30960 + struct mlme_priv *b_pmlmepriv = &(buddy->mlmepriv);
30961 + #ifdef CONFIG_P2P
30962 + struct wifidirect_info *b_pwdinfo = &(buddy->wdinfo);
30963 + #ifdef CONFIG_IOCTL_CFG80211
30964 + struct cfg80211_wifidirect_info *b_pcfg80211_wdinfo = &buddy->cfg80211_wdinfo;
30965 + #endif
30966 + #endif
30967 +
30968 + if (check_fwstate(b_pmlmepriv, WIFI_ASOC_STATE|WIFI_SITE_MONITOR)
30969 + || check_fwstate(b_pmlmepriv, WIFI_UNDER_LINKING|WIFI_UNDER_WPS)
30970 + || check_fwstate(b_pmlmepriv, WIFI_AP_STATE)
30971 + || check_fwstate(b_pmlmepriv, WIFI_ADHOC_MASTER_STATE|WIFI_ADHOC_STATE)
30972 + #if defined(CONFIG_P2P) && defined(CONFIG_IOCTL_CFG80211) && defined(CONFIG_P2P_IPS)
30973 + || b_pcfg80211_wdinfo->is_ro_ch
30974 + #elif defined(CONFIG_P2P)
30975 + || !rtw_p2p_chk_state(b_pwdinfo, P2P_STATE_NONE)
30976 + #endif
30977 + || rtw_is_scan_deny(buddy)
30978 + ) {
30979 + return;
30980 + }
30981 + }
30982 +#endif
30983 +
30984 +#ifdef CONFIG_INTEL_PROXIM
30985 + if(padapter->proximity.proxim_on==_TRUE){
30986 + return;
30987 + }
30988 +#endif
30989 if ( (check_fwstate(pmlmepriv, _FW_LINKED) == _FALSE) ||
30990 (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY) == _TRUE) ||
30991 (check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE) ||
30992 (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == _TRUE) ||
30993 (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) == _TRUE) )
30994 return;
30995 -
30996 +
30997 if(_TRUE == pwrpriv->bInSuspend )
30998 return ;
30999
31000 @@ -451,6 +609,8 @@ _func_enter_;
31001 pwrpriv->LpsIdleCount++;
31002 }
31003
31004 +// DBG_871X("-LeisurePSEnter\n");
31005 +
31006 _func_exit_;
31007 }
31008
31009 @@ -461,21 +621,51 @@ _func_exit_;
31010 //
31011 void LPS_Leave(PADAPTER padapter)
31012 {
31013 - struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
31014 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
31015 +#define LPS_LEAVE_TIMEOUT_MS 100
31016
31017 + struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
31018 + u32 start_time;
31019 + BOOLEAN bAwake = _FALSE;
31020 +
31021 _func_enter_;
31022
31023 - //DBG_8192C("LeisurePSLeave()...\n");
31024 +// DBG_871X("+LeisurePSLeave\n");
31025 +
31026 +#ifdef CONFIG_CONCURRENT_MODE
31027 + if (padapter->iface_type != IFACE_PORT0)
31028 + return; /* Skip power saving for concurrent mode port 1*/
31029 +#endif
31030
31031 if (pwrpriv->bLeisurePs)
31032 {
31033 if(pwrpriv->pwr_mode != PS_MODE_ACTIVE)
31034 {
31035 rtw_set_ps_mode(padapter, PS_MODE_ACTIVE, 0);
31036 +
31037 + if(pwrpriv->pwr_mode == PS_MODE_ACTIVE)
31038 + {
31039 + start_time = rtw_get_current_time();
31040 + while(1)
31041 + {
31042 + rtw_hal_get_hwreg(padapter, HW_VAR_FWLPS_RF_ON, (u8 *)(&bAwake));
31043 +
31044 + if(bAwake || padapter->bSurpriseRemoved)
31045 + break;
31046 +
31047 + if(rtw_get_passing_time_ms(start_time)>LPS_LEAVE_TIMEOUT_MS)
31048 + {
31049 + DBG_871X("Wait for FW LPS leave more than %u ms!!!\n", LPS_LEAVE_TIMEOUT_MS);
31050 + break;
31051 + }
31052 + rtw_usleep_os(100);
31053 + }
31054 + }
31055 }
31056 }
31057
31058 +
31059 +// DBG_871X("-LeisurePSLeave\n");
31060 +
31061 _func_exit_;
31062 }
31063
31064 @@ -488,37 +678,18 @@ _func_exit_;
31065 void LeaveAllPowerSaveMode(IN PADAPTER Adapter)
31066 {
31067 struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);
31068 - u32 LPSLeaveTimeOut = 10000;
31069 - //u32 IPSLeaveTimeOut = 10000;
31070
31071 _func_enter_;
31072
31073 - //DBG_8192C("%s.....\n",__FUNCTION__);
31074 + //DBG_871X("%s.....\n",__FUNCTION__);
31075 if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)
31076 { //connect
31077 -#ifdef CONFIG_P2P
31078 +#ifdef CONFIG_P2P_PS
31079 p2p_ps_wk_cmd(Adapter, P2P_PS_DISABLE, 0);
31080 -#endif //CONFIG_P2P
31081 +#endif // CONFIG_P2P_PS
31082 #ifdef CONFIG_LPS
31083 - //DBG_8192C("==> leave LPS.......\n");
31084 + //DBG_871X("==> leave LPS.......\n");
31085 LPS_Leave(Adapter);
31086 -
31087 - if (Adapter->pwrctrlpriv.bLeisurePs)
31088 - {
31089 - BOOLEAN bAwake = _TRUE;
31090 - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_FWLPS_RF_ON, (u8 *)(&bAwake));
31091 - while(!bAwake)
31092 - {
31093 - rtw_usleep_os(100);
31094 - LPSLeaveTimeOut--;
31095 - if(LPSLeaveTimeOut <= 0)
31096 - {
31097 - DBG_8192C("Wait for FW LPS leave too long!!! LPSLeaveTimeOut = %d\n", LPSLeaveTimeOut );
31098 - break;
31099 - }
31100 - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_FWLPS_RF_ON, (u8 *)(&bAwake));
31101 - }
31102 - }
31103 #endif
31104 }
31105 else
31106 @@ -529,11 +700,11 @@ _func_enter_;
31107 if(Adapter->registrypriv.usbss_enable)
31108 {
31109 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
31110 - usb_disable_autosuspend(Adapter->dvobjpriv.pusbdev);
31111 + usb_disable_autosuspend(adapter_to_dvobj(Adapter)->pusbdev);
31112 #elif (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,22) && LINUX_VERSION_CODE<=KERNEL_VERSION(2,6,34))
31113 - Adapter->dvobjpriv.pusbdev->autosuspend_disabled = Adapter->bDisableAutosuspend;//autosuspend disabled by the user
31114 + adapter_to_dvobj(Adapter)->pusbdev->autosuspend_disabled = Adapter->bDisableAutosuspend;//autosuspend disabled by the user
31115 #endif
31116 - }
31117 + }
31118 else
31119 #endif
31120 {
31121 @@ -541,448 +712,450 @@ _func_enter_;
31122 #ifdef CONFIG_IPS
31123 if(_FALSE == ips_leave(Adapter))
31124 {
31125 - DBG_8192C("======> ips_leave fail.............\n");
31126 + DBG_871X("======> ips_leave fail.............\n");
31127 }
31128 #endif
31129 */
31130 - }
31131 + }
31132 }
31133 }
31134
31135 _func_exit_;
31136 }
31137
31138 -#ifdef CONFIG_PWRCTRL
31139 -
31140 +#ifdef CONFIG_LPS_LCLK
31141 /*
31142 -Caller:ISR handler...
31143 -
31144 -This will be called when CPWM interrupt is up.
31145 -
31146 -using to update cpwn of drv; and drv willl make a decision to up or down pwr level
31147 -*/
31148 -void cpwm_int_hdl(_adapter *padapter, struct reportpwrstate_parm *preportpwrstate)
31149 + * Caller:ISR handler...
31150 + *
31151 + * This will be called when CPWM interrupt is up.
31152 + *
31153 + * using to update cpwn of drv; and drv willl make a decision to up or down pwr level
31154 + */
31155 +void cpwm_int_hdl(
31156 + PADAPTER padapter,
31157 + struct reportpwrstate_parm *preportpwrstate)
31158 {
31159 - struct pwrctrl_priv *pwrpriv = &(padapter->pwrctrlpriv);
31160 - struct cmd_priv *pcmdpriv = &(padapter->cmdpriv);
31161 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
31162 + struct pwrctrl_priv *pwrpriv;
31163 +
31164
31165 _func_enter_;
31166
31167 - if(pwrpriv->cpwm_tog == ((preportpwrstate->state)&0x80)){
31168 - RT_TRACE(_module_rtl871x_pwrctrl_c_,_drv_err_,("cpwm_int_hdl : cpwm_tog = %x this time cpwm=0x%x toggle bit didn't change !!!\n",pwrpriv->cpwm_tog ,preportpwrstate->state));
31169 + pwrpriv = &padapter->pwrctrlpriv;
31170 +#if 0
31171 + if (pwrpriv->cpwm_tog == (preportpwrstate->state & PS_TOGGLE)) {
31172 + RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_err_,
31173 + ("cpwm_int_hdl: tog(old)=0x%02x cpwm(new)=0x%02x toggle bit didn't change!?\n",
31174 + pwrpriv->cpwm_tog, preportpwrstate->state));
31175 goto exit;
31176 }
31177 +#endif
31178 +// _enter_pwrlock(&pwrpriv->lock);
31179
31180 - _enter_pwrlock(&pwrpriv->lock);
31181 -
31182 - pwrpriv->cpwm = (preportpwrstate->state)&0xf;
31183 + pwrpriv->cpwm = PS_STATE(preportpwrstate->state);
31184 + pwrpriv->cpwm_tog = preportpwrstate->state & PS_TOGGLE;
31185
31186 - if(pwrpriv->cpwm >= PS_STATE_S2){
31187 - if(pwrpriv->alives & CMD_ALIVE)
31188 - _rtw_up_sema(&(pcmdpriv->cmd_queue_sema));
31189 + if (pwrpriv->cpwm >= PS_STATE_S2) {
31190 + if (pwrpriv->alives & CMD_ALIVE)
31191 + _rtw_up_sema(&padapter->cmdpriv.cmd_queue_sema);
31192
31193 - if(pwrpriv->alives & XMIT_ALIVE)
31194 - _rtw_up_sema(&(pxmitpriv->xmit_sema));
31195 + if (pwrpriv->alives & XMIT_ALIVE)
31196 + _rtw_up_sema(&padapter->xmitpriv.xmit_sema);
31197 }
31198 - pwrpriv->cpwm_tog= (preportpwrstate->state)&0x80;
31199 - _exit_pwrlock(&pwrpriv->lock);
31200 +
31201 +// _exit_pwrlock(&pwrpriv->lock);
31202 +
31203 exit:
31204 - RT_TRACE(_module_rtl871x_pwrctrl_c_,_drv_err_,("cpwm_int_hdl : cpwm = %x !!!\n",pwrpriv->cpwm));
31205 + RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_notice_,
31206 + ("cpwm_int_hdl: cpwm=0x%02x\n", pwrpriv->cpwm));
31207
31208 _func_exit_;
31209 -
31210 }
31211
31212 +__inline static void register_task_alive(struct pwrctrl_priv *pwrctrl, u32 tag)
31213 +{
31214 + pwrctrl->alives |= tag;
31215 +}
31216
31217 -__inline static void register_task_alive(struct pwrctrl_priv *pwrctrl, uint tag)
31218 +__inline static void unregister_task_alive(struct pwrctrl_priv *pwrctrl, u32 tag)
31219 {
31220 -_func_enter_;
31221 - pwrctrl->alives |= tag;
31222 -_func_exit_;
31223 + pwrctrl->alives &= ~tag;
31224 }
31225
31226 -__inline static void unregister_task_alive(struct pwrctrl_priv *pwrctrl, uint tag)
31227 +/*
31228 + * Caller: rtw_xmit_thread
31229 + *
31230 + * Check if the fw_pwrstate is okay for xmit.
31231 + * If not (cpwm is less than S3), then the sub-routine
31232 + * will raise the cpwm to be greater than or equal to S3.
31233 + *
31234 + * Calling Context: Passive
31235 + *
31236 + * Return Value:
31237 + * _SUCCESS rtw_xmit_thread can write fifo/txcmd afterwards.
31238 + * _FAIL rtw_xmit_thread can not do anything.
31239 + */
31240 +s32 rtw_register_tx_alive(PADAPTER padapter)
31241 {
31242 + s32 res;
31243 + struct pwrctrl_priv *pwrctrl;
31244 +
31245 _func_enter_;
31246
31247 - if (pwrctrl->alives & tag)
31248 - pwrctrl->alives ^= tag;
31249 + res = _SUCCESS;
31250 + pwrctrl = &padapter->pwrctrlpriv;
31251
31252 -_func_exit_;
31253 -}
31254 -#endif
31255 + _enter_pwrlock(&pwrctrl->lock);
31256
31257 -#ifdef CONFIG_RESUME_IN_WORKQUEUE
31258 -static void resume_workitem_callback(struct work_struct *work);
31259 -#endif //CONFIG_RESUME_IN_WORKQUEUE
31260 + register_task_alive(pwrctrl, XMIT_ALIVE);
31261
31262 -void rtw_init_pwrctrl_priv(_adapter *padapter)
31263 + if (pwrctrl->bFwCurrentInPSMode == _TRUE)
31264 + {
31265 + RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_err_,
31266 + ("rtw_register_tx_alive: cpwm=0x%02x alives=0x%08x\n",
31267 + pwrctrl->cpwm, pwrctrl->alives));
31268 +
31269 + if (pwrctrl->cpwm < PS_STATE_S2) {
31270 + if (pwrctrl->rpwm < PS_STATE_S2)
31271 + rtw_set_rpwm(padapter, PS_STATE_S2);
31272 + res = _FAIL;
31273 + }
31274 + }
31275 +
31276 + _exit_pwrlock(&pwrctrl->lock);
31277 +
31278 +_func_exit_;
31279 +
31280 + return res;
31281 +}
31282 +
31283 +/*
31284 + * Caller: rtw_cmd_thread
31285 + *
31286 + * Check if the fw_pwrstate is okay for issuing cmd.
31287 + * If not (cpwm should be is less than S2), then the sub-routine
31288 + * will raise the cpwm to be greater than or equal to S2.
31289 + *
31290 + * Calling Context: Passive
31291 + *
31292 + * Return Value:
31293 + * _SUCCESS rtw_cmd_thread can issue cmds to firmware afterwards.
31294 + * _FAIL rtw_cmd_thread can not do anything.
31295 + */
31296 +s32 rtw_register_cmd_alive(PADAPTER padapter)
31297 {
31298 - struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
31299 + s32 res;
31300 + struct pwrctrl_priv *pwrctrl;
31301
31302 _func_enter_;
31303
31304 -#ifdef PLATFORM_WINDOWS
31305 - pwrctrlpriv->pnp_current_pwr_state=NdisDeviceStateD0;
31306 -#endif
31307 -
31308 - _init_pwrlock(&pwrctrlpriv->lock);
31309 - pwrctrlpriv->rf_pwrstate = rf_on;
31310 - pwrctrlpriv->ips_enter_cnts=0;
31311 - pwrctrlpriv->ips_leave_cnts=0;
31312 -
31313 - pwrctrlpriv->ips_mode = padapter->registrypriv.ips_mode;
31314 - pwrctrlpriv->ips_mode_req = padapter->registrypriv.ips_mode;
31315 + res = _SUCCESS;
31316 + pwrctrl = &padapter->pwrctrlpriv;
31317
31318 - pwrctrlpriv->pwr_state_check_interval = 2000;
31319 - pwrctrlpriv->pwr_state_check_cnts = 0;
31320 - pwrctrlpriv->bInternalAutoSuspend = _FALSE;
31321 - pwrctrlpriv->bInSuspend = _FALSE;
31322 - pwrctrlpriv->bkeepfwalive = _FALSE;
31323 -
31324 -#ifdef CONFIG_AUTOSUSPEND
31325 -#ifdef SUPPORT_HW_RFOFF_DETECTED
31326 - pwrctrlpriv->pwr_state_check_interval = (pwrctrlpriv->bHWPwrPindetect) ?1000:2000;
31327 -#endif
31328 -#endif
31329 -
31330 - pwrctrlpriv->LpsIdleCount = 0;
31331 - //pwrctrlpriv->FWCtrlPSMode =padapter->registrypriv.power_mgnt;// PS_MODE_MIN;
31332 - pwrctrlpriv->power_mgnt =padapter->registrypriv.power_mgnt;// PS_MODE_MIN;
31333 - pwrctrlpriv->bLeisurePs = (PS_MODE_ACTIVE != pwrctrlpriv->power_mgnt)?_TRUE:_FALSE;
31334 -
31335 - pwrctrlpriv->bFwCurrentInPSMode = _FALSE;
31336 -
31337 - pwrctrlpriv->cpwm = PS_STATE_S4;
31338 -
31339 - pwrctrlpriv->pwr_mode = PS_MODE_ACTIVE;
31340 -
31341 -
31342 - pwrctrlpriv->smart_ps = 0;
31343 -
31344 - pwrctrlpriv->tog = 0x80;
31345 -
31346 -#ifdef PLATFORM_LINUX
31347 - _init_timer(&(pwrctrlpriv->pwr_state_check_timer), padapter->pnetdev, pwr_state_check_handler, (u8 *)padapter);
31348 -#endif
31349 + _enter_pwrlock(&pwrctrl->lock);
31350
31351 - #ifdef CONFIG_RESUME_IN_WORKQUEUE
31352 - _init_workitem(&pwrctrlpriv->resume_work, resume_workitem_callback, NULL);
31353 - pwrctrlpriv->rtw_workqueue = create_singlethread_workqueue("rtw_workqueue");
31354 - #endif //CONFIG_RESUME_IN_WORKQUEUE
31355 + register_task_alive(pwrctrl, CMD_ALIVE);
31356
31357 - #if defined(CONFIG_HAS_EARLYSUSPEND) || defined(CONFIG_ANDROID_POWER)
31358 - pwrctrlpriv->early_suspend.suspend = NULL;
31359 - rtw_register_early_suspend(pwrctrlpriv);
31360 - #endif //CONFIG_HAS_EARLYSUSPEND || CONFIG_ANDROID_POWER
31361 + if (pwrctrl->bFwCurrentInPSMode == _TRUE)
31362 + {
31363 + RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_notice_,
31364 + ("rtw_register_cmd_alive: cpwm=0x%02x alives=0x%08x\n",
31365 + pwrctrl->cpwm, pwrctrl->alives));
31366 +
31367 + if (pwrctrl->cpwm < PS_STATE_S2) {
31368 + if (pwrctrl->rpwm < PS_STATE_S2)
31369 + rtw_set_rpwm(padapter, PS_STATE_S2);
31370 + res = _FAIL;
31371 + }
31372 + }
31373
31374 + _exit_pwrlock(&pwrctrl->lock);
31375
31376 _func_exit_;
31377
31378 + return res;
31379 }
31380
31381 -
31382 -void rtw_free_pwrctrl_priv(_adapter *adapter)
31383 +/*
31384 + * Caller: rx_isr
31385 + *
31386 + * Calling Context: Dispatch/ISR
31387 + *
31388 + * Return Value:
31389 + * _SUCCESS
31390 + * _FAIL
31391 + */
31392 +s32 rtw_register_rx_alive(PADAPTER padapter)
31393 {
31394 - struct pwrctrl_priv *pwrctrlpriv = &adapter->pwrctrlpriv;
31395 + struct pwrctrl_priv *pwrctrl;
31396
31397 _func_enter_;
31398
31399 - //_rtw_memset((unsigned char *)pwrctrlpriv, 0, sizeof(struct pwrctrl_priv));
31400 -
31401 -
31402 - #ifdef CONFIG_RESUME_IN_WORKQUEUE
31403 - if (pwrctrlpriv->rtw_workqueue) {
31404 - flush_workqueue(pwrctrlpriv->rtw_workqueue);
31405 - destroy_workqueue(pwrctrlpriv->rtw_workqueue);
31406 - }
31407 - #endif
31408 + pwrctrl = &padapter->pwrctrlpriv;
31409
31410 + _enter_pwrlock(&pwrctrl->lock);
31411
31412 - #if defined(CONFIG_HAS_EARLYSUSPEND) || defined(CONFIG_ANDROID_POWER)
31413 - rtw_unregister_early_suspend(pwrctrlpriv);
31414 - #endif //CONFIG_HAS_EARLYSUSPEND || CONFIG_ANDROID_POWER
31415 + register_task_alive(pwrctrl, RECV_ALIVE);
31416 + RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_notice_,
31417 + ("rtw_register_rx_alive: cpwm=0x%02x alives=0x%08x\n",
31418 + pwrctrl->cpwm, pwrctrl->alives));
31419
31420 - _free_pwrlock(&pwrctrlpriv->lock);
31421 + _exit_pwrlock(&pwrctrl->lock);
31422
31423 _func_exit_;
31424 -}
31425
31426 + return _SUCCESS;
31427 +}
31428
31429 /*
31430 -Caller: rtw_xmit_thread
31431 -
31432 -Check if the fw_pwrstate is okay for xmit.
31433 -If not (cpwm is less than P1 state), then the sub-routine
31434 -will raise the cpwm to be greater than or equal to P1.
31435 -
31436 -Calling Context: Passive
31437 -
31438 -Return Value:
31439 -
31440 -_SUCCESS: rtw_xmit_thread can write fifo/txcmd afterwards.
31441 -_FAIL: rtw_xmit_thread can not do anything.
31442 -*/
31443 -sint rtw_register_tx_alive(_adapter *padapter)
31444 + * Caller: evt_isr or evt_thread
31445 + *
31446 + * Calling Context: Dispatch/ISR or Passive
31447 + *
31448 + * Return Value:
31449 + * _SUCCESS
31450 + * _FAIL
31451 + */
31452 +s32 rtw_register_evt_alive(PADAPTER padapter)
31453 {
31454 - uint res = _SUCCESS;
31455 -
31456 -#ifdef CONFIG_PWRCTRL
31457 -
31458 - struct pwrctrl_priv *pwrctrl = &padapter->pwrctrlpriv;
31459 + struct pwrctrl_priv *pwrctrl;
31460
31461 _func_enter_;
31462
31463 - _enter_pwrlock(&pwrctrl->lock);
31464 + pwrctrl = &padapter->pwrctrlpriv;
31465
31466 - register_task_alive(pwrctrl, XMIT_ALIVE);
31467 - RT_TRACE(_module_rtl871x_pwrctrl_c_,_drv_err_,("rtw_register_tx_alive: cpwm:%d alives:%x\n", pwrctrl->cpwm, pwrctrl->alives));
31468 + _enter_pwrlock(&pwrctrl->lock);
31469
31470 - if(pwrctrl->cpwm < PS_STATE_S2){
31471 - rtw_set_rpwm(padapter, PS_STATE_S3);
31472 - res = _FAIL;
31473 - }
31474 + register_task_alive(pwrctrl, EVT_ALIVE);
31475 + RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_notice_,
31476 + ("rtw_register_evt_alive: cpwm=0x%02x alives=0x%08x\n",
31477 + pwrctrl->cpwm, pwrctrl->alives));
31478
31479 _exit_pwrlock(&pwrctrl->lock);
31480 -
31481 -_func_exit_;
31482
31483 -#endif /* CONFIG_PWRCTRL */
31484 -
31485 - return res;
31486 +_func_exit_;
31487
31488 + return _SUCCESS;
31489 }
31490
31491 /*
31492 -Caller: rtw_cmd_thread
31493 -
31494 -Check if the fw_pwrstate is okay for issuing cmd.
31495 -If not (cpwm should be is less than P2 state), then the sub-routine
31496 -will raise the cpwm to be greater than or equal to P2.
31497 -
31498 -Calling Context: Passive
31499 -
31500 -Return Value:
31501 -
31502 -_SUCCESS: rtw_cmd_thread can issue cmds to firmware afterwards.
31503 -_FAIL: rtw_cmd_thread can not do anything.
31504 -*/
31505 -sint rtw_register_cmd_alive(_adapter *padapter)
31506 + * Caller: ISR
31507 + *
31508 + * If ISR's txdone,
31509 + * No more pkts for TX,
31510 + * Then driver shall call this fun. to power down firmware again.
31511 + */
31512 +void rtw_unregister_tx_alive(PADAPTER padapter)
31513 {
31514 - uint res = _SUCCESS;
31515 -
31516 -#ifdef CONFIG_PWRCTRL
31517 -
31518 - struct pwrctrl_priv *pwrctrl = &padapter->pwrctrlpriv;
31519 + struct pwrctrl_priv *pwrctrl;
31520
31521 _func_enter_;
31522
31523 + pwrctrl = &padapter->pwrctrlpriv;
31524 +
31525 _enter_pwrlock(&pwrctrl->lock);
31526
31527 - register_task_alive(pwrctrl, CMD_ALIVE);
31528 - RT_TRACE(_module_rtl871x_pwrctrl_c_,_drv_err_,("rtw_register_cmd_alive: cpwm:%d alives:%x\n", pwrctrl->cpwm, pwrctrl->alives));
31529 + unregister_task_alive(pwrctrl, XMIT_ALIVE);
31530
31531 - if(pwrctrl->cpwm < PS_STATE_S2){
31532 - rtw_set_rpwm(padapter, PS_STATE_S3);
31533 - res = _FAIL;
31534 + if ((pwrctrl->pwr_mode != PS_MODE_ACTIVE) &&
31535 + (pwrctrl->bFwCurrentInPSMode == _TRUE))
31536 + {
31537 + if ((pwrctrl->alives == 0) &&
31538 + (pwrctrl->cpwm > PS_STATE_S0))
31539 + {
31540 + rtw_set_rpwm(padapter, PS_STATE_S0);
31541 + }
31542 +
31543 + RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_notice_,
31544 + ("rtw_unregister_tx_alive: cpwm=0x%02x alives=0x%08x\n",
31545 + pwrctrl->cpwm, pwrctrl->alives));
31546 }
31547
31548 _exit_pwrlock(&pwrctrl->lock);
31549 -_func_exit_;
31550 -#endif
31551
31552 - return res;
31553 +_func_exit_;
31554 }
31555
31556 -
31557 /*
31558 -Caller: rx_isr
31559 -
31560 -Calling Context: Dispatch/ISR
31561 -
31562 -Return Value:
31563 -
31564 -*/
31565 -sint rtw_register_rx_alive(_adapter *padapter)
31566 + * Caller: ISR
31567 + *
31568 + * If all commands have been done,
31569 + * and no more command to do,
31570 + * then driver shall call this fun. to power down firmware again.
31571 + */
31572 +void rtw_unregister_cmd_alive(PADAPTER padapter)
31573 {
31574 -
31575 -#ifdef CONFIG_PWRCTRL
31576 -
31577 - struct pwrctrl_priv *pwrctrl = &padapter->pwrctrlpriv;
31578 + struct pwrctrl_priv *pwrctrl;
31579
31580 _func_enter_;
31581
31582 + pwrctrl = &padapter->pwrctrlpriv;
31583 +
31584 _enter_pwrlock(&pwrctrl->lock);
31585
31586 - register_task_alive(pwrctrl, RECV_ALIVE);
31587 + unregister_task_alive(pwrctrl, CMD_ALIVE);
31588
31589 - RT_TRACE(_module_rtl871x_pwrctrl_c_,_drv_err_,("rtw_register_rx_alive: cpwm:%d alives:%x\n", pwrctrl->cpwm, pwrctrl->alives));
31590 + if ((pwrctrl->pwr_mode != PS_MODE_ACTIVE) &&
31591 + (pwrctrl->bFwCurrentInPSMode == _TRUE))
31592 + {
31593 + if ((pwrctrl->alives == 0) &&
31594 + (pwrctrl->cpwm > PS_STATE_S0))
31595 + {
31596 + rtw_set_rpwm(padapter, PS_STATE_S0);
31597 + }
31598 +
31599 + RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_notice_,
31600 + ("rtw_unregister_cmd_alive: cpwm=0x%02x alives=0x%08x\n",
31601 + pwrctrl->cpwm, pwrctrl->alives));
31602 + }
31603
31604 _exit_pwrlock(&pwrctrl->lock);
31605
31606 _func_exit_;
31607 -
31608 -#endif /*CONFIG_PWRCTRL*/
31609 -
31610 - return _SUCCESS;
31611 }
31612
31613 -
31614 /*
31615 -Caller: evt_isr or evt_thread
31616 -
31617 -Calling Context: Dispatch/ISR or Passive
31618 -
31619 -Return Value:
31620 -*/
31621 -sint rtw_register_evt_alive(_adapter *padapter)
31622 + * Caller: ISR
31623 + */
31624 +void rtw_unregister_rx_alive(PADAPTER padapter)
31625 {
31626 -
31627 -#ifdef CONFIG_PWRCTRL
31628 -
31629 - struct pwrctrl_priv *pwrctrl = &padapter->pwrctrlpriv;
31630 + struct pwrctrl_priv *pwrctrl;
31631
31632 _func_enter_;
31633
31634 + pwrctrl = &padapter->pwrctrlpriv;
31635 +
31636 _enter_pwrlock(&pwrctrl->lock);
31637
31638 - register_task_alive(pwrctrl, EVT_ALIVE);
31639 + unregister_task_alive(pwrctrl, RECV_ALIVE);
31640
31641 - RT_TRACE(_module_rtl871x_pwrctrl_c_,_drv_info_,("rtw_register_evt_alive: cpwm:%d alives:%x\n", pwrctrl->cpwm, pwrctrl->alives));
31642 + RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_notice_,
31643 + ("rtw_unregister_rx_alive: cpwm=0x%02x alives=0x%08x\n",
31644 + pwrctrl->cpwm, pwrctrl->alives));
31645
31646 _exit_pwrlock(&pwrctrl->lock);
31647
31648 _func_exit_;
31649 -
31650 -#endif /*CONFIG_PWRCTRL*/
31651 -
31652 - return _SUCCESS;
31653 }
31654
31655 -
31656 -/*
31657 -Caller: ISR
31658 -
31659 -If ISR's txdone,
31660 -No more pkts for TX,
31661 -Then driver shall call this fun. to power down firmware again.
31662 -*/
31663 -
31664 -void rtw_unregister_tx_alive(_adapter *padapter)
31665 +void rtw_unregister_evt_alive(PADAPTER padapter)
31666 {
31667 -#ifdef CONFIG_PWRCTRL
31668 -
31669 - struct pwrctrl_priv *pwrctrl = &padapter->pwrctrlpriv;
31670 + struct pwrctrl_priv *pwrctrl;
31671
31672 _func_enter_;
31673
31674 - _enter_pwrlock(&pwrctrl->lock);
31675 + pwrctrl = &padapter->pwrctrlpriv;
31676
31677 - unregister_task_alive(pwrctrl, XMIT_ALIVE);
31678 + unregister_task_alive(pwrctrl, EVT_ALIVE);
31679
31680 - if((pwrctrl->cpwm > PS_STATE_S2) && (pwrctrl->pwr_mode > PS_MODE_ACTIVE)){
31681 - if(pwrctrl->alives == 0){
31682 - rtw_set_rpwm(padapter, PS_STATE_S0);
31683 - }
31684 - }
31685 + RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_notice_,
31686 + ("rtw_unregister_evt_alive: cpwm=0x%02x alives=0x%08x\n",
31687 + pwrctrl->cpwm, pwrctrl->alives));
31688
31689 - RT_TRACE(_module_rtl871x_pwrctrl_c_,_drv_err_,("rtw_unregister_tx_alive: cpwm:%d alives:%x\n", pwrctrl->cpwm, pwrctrl->alives));
31690 -
31691 _exit_pwrlock(&pwrctrl->lock);
31692
31693 _func_exit_;
31694 -
31695 -#endif /*CONFIG_PWRCTRL*/
31696 }
31697 +#endif /* CONFIG_LPS_LCLK */
31698
31699 -/*
31700 -Caller: ISR
31701 -
31702 -If ISR's txdone,
31703 -No more pkts for TX,
31704 -Then driver shall call this fun. to power down firmware again.
31705 -*/
31706 +#ifdef CONFIG_RESUME_IN_WORKQUEUE
31707 +static void resume_workitem_callback(struct work_struct *work);
31708 +#endif //CONFIG_RESUME_IN_WORKQUEUE
31709
31710 -void rtw_unregister_cmd_alive(_adapter *padapter)
31711 +void rtw_init_pwrctrl_priv(PADAPTER padapter)
31712 {
31713 -#ifdef CONFIG_PWRCTRL
31714 -
31715 - struct pwrctrl_priv *pwrctrl = &padapter->pwrctrlpriv;
31716 + struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
31717
31718 _func_enter_;
31719
31720 - _enter_pwrlock(&pwrctrl->lock);
31721 +#ifdef PLATFORM_WINDOWS
31722 + pwrctrlpriv->pnp_current_pwr_state=NdisDeviceStateD0;
31723 +#endif
31724
31725 - unregister_task_alive(pwrctrl, CMD_ALIVE);
31726 + _init_pwrlock(&pwrctrlpriv->lock);
31727 + pwrctrlpriv->rf_pwrstate = rf_on;
31728 + pwrctrlpriv->ips_enter_cnts=0;
31729 + pwrctrlpriv->ips_leave_cnts=0;
31730
31731 - if((pwrctrl->cpwm > PS_STATE_S2) && (pwrctrl->pwr_mode > PS_MODE_ACTIVE)){
31732 - if((pwrctrl->alives == 0)&&(check_fwstate(&padapter->mlmepriv, _FW_UNDER_LINKING)!=_TRUE)){
31733 - rtw_set_rpwm(padapter, PS_STATE_S0);
31734 - }
31735 - }
31736 + pwrctrlpriv->ips_mode = padapter->registrypriv.ips_mode;
31737 + pwrctrlpriv->ips_mode_req = padapter->registrypriv.ips_mode;
31738
31739 - RT_TRACE(_module_rtl871x_pwrctrl_c_,_drv_err_,("rtw_unregister_cmd_alive: cpwm:%d alives:%x\n", pwrctrl->cpwm, pwrctrl->alives));
31740 + pwrctrlpriv->pwr_state_check_interval = RTW_PWR_STATE_CHK_INTERVAL;
31741 + pwrctrlpriv->pwr_state_check_cnts = 0;
31742 + pwrctrlpriv->bInternalAutoSuspend = _FALSE;
31743 + pwrctrlpriv->bInSuspend = _FALSE;
31744 + pwrctrlpriv->bkeepfwalive = _FALSE;
31745
31746 - _exit_pwrlock(&pwrctrl->lock);
31747 +#ifdef CONFIG_AUTOSUSPEND
31748 +#ifdef SUPPORT_HW_RFOFF_DETECTED
31749 + pwrctrlpriv->pwr_state_check_interval = (pwrctrlpriv->bHWPwrPindetect) ?1000:2000;
31750 +#endif
31751 +#endif
31752
31753 -_func_exit_;
31754 + pwrctrlpriv->LpsIdleCount = 0;
31755 + //pwrctrlpriv->FWCtrlPSMode =padapter->registrypriv.power_mgnt;// PS_MODE_MIN;
31756 + pwrctrlpriv->power_mgnt =padapter->registrypriv.power_mgnt;// PS_MODE_MIN;
31757 + pwrctrlpriv->bLeisurePs = (PS_MODE_ACTIVE != pwrctrlpriv->power_mgnt)?_TRUE:_FALSE;
31758
31759 -#endif /*CONFIG_PWRCTRL*/
31760 -}
31761 + pwrctrlpriv->bFwCurrentInPSMode = _FALSE;
31762
31763 + pwrctrlpriv->cpwm = PS_STATE_S4;
31764
31765 -/*
31766 + pwrctrlpriv->pwr_mode = PS_MODE_ACTIVE;
31767
31768 -Caller: ISR
31769
31770 -*/
31771 -void rtw_unregister_rx_alive(_adapter *padapter)
31772 -{
31773 -#ifdef CONFIG_PWRCTRL
31774 + pwrctrlpriv->smart_ps = 0;
31775
31776 - struct pwrctrl_priv *pwrctrl = &padapter->pwrctrlpriv;
31777 + pwrctrlpriv->tog = 0x80;
31778
31779 -_func_enter_;
31780 +#ifdef PLATFORM_LINUX
31781 + _init_timer(&(pwrctrlpriv->pwr_state_check_timer), padapter->pnetdev, pwr_state_check_handler, (u8 *)padapter);
31782 +#endif
31783
31784 - _enter_pwrlock(&pwrctrl->lock);
31785 + #ifdef CONFIG_RESUME_IN_WORKQUEUE
31786 + _init_workitem(&pwrctrlpriv->resume_work, resume_workitem_callback, NULL);
31787 + pwrctrlpriv->rtw_workqueue = create_singlethread_workqueue("rtw_workqueue");
31788 + #endif //CONFIG_RESUME_IN_WORKQUEUE
31789
31790 - unregister_task_alive(pwrctrl, RECV_ALIVE);
31791 + #if defined(CONFIG_HAS_EARLYSUSPEND) || defined(CONFIG_ANDROID_POWER)
31792 + pwrctrlpriv->early_suspend.suspend = NULL;
31793 + rtw_register_early_suspend(pwrctrlpriv);
31794 + #endif //CONFIG_HAS_EARLYSUSPEND || CONFIG_ANDROID_POWER
31795
31796 - RT_TRACE(_module_rtl871x_pwrctrl_c_,_drv_err_,("rtw_unregister_rx_alive: cpwm:%d alives:%x\n", pwrctrl->cpwm, pwrctrl->alives));
31797 -
31798 - _exit_pwrlock(&pwrctrl->lock);
31799
31800 _func_exit_;
31801
31802 -#endif
31803 }
31804
31805
31806 -void rtw_unregister_evt_alive(_adapter *padapter)
31807 +void rtw_free_pwrctrl_priv(PADAPTER adapter)
31808 {
31809 -#ifdef CONFIG_PWRCTRL
31810 -
31811 - struct pwrctrl_priv *pwrctrl = &padapter->pwrctrlpriv;
31812 + struct pwrctrl_priv *pwrctrlpriv = &adapter->pwrctrlpriv;
31813
31814 _func_enter_;
31815
31816 - _enter_pwrlock(&pwrctrl->lock);
31817 + //_rtw_memset((unsigned char *)pwrctrlpriv, 0, sizeof(struct pwrctrl_priv));
31818
31819 - unregister_task_alive(pwrctrl, EVT_ALIVE);
31820
31821 - RT_TRACE(_module_rtl871x_pwrctrl_c_,_drv_err_,("rtw_unregister_evt_alive: cpwm:%d alives:%x\n", pwrctrl->cpwm, pwrctrl->alives));
31822 -
31823 - _exit_pwrlock(&pwrctrl->lock);
31824 + #ifdef CONFIG_RESUME_IN_WORKQUEUE
31825 + if (pwrctrlpriv->rtw_workqueue) {
31826 + flush_workqueue(pwrctrlpriv->rtw_workqueue);
31827 + destroy_workqueue(pwrctrlpriv->rtw_workqueue);
31828 + }
31829 + #endif
31830
31831 -_func_exit_;
31832
31833 -#endif /*CONFIG_PWRCTRL*/
31834 + #if defined(CONFIG_HAS_EARLYSUSPEND) || defined(CONFIG_ANDROID_POWER)
31835 + rtw_unregister_early_suspend(pwrctrlpriv);
31836 + #endif //CONFIG_HAS_EARLYSUSPEND || CONFIG_ANDROID_POWER
31837 +
31838 + _free_pwrlock(&pwrctrlpriv->lock);
31839 +
31840 +_func_exit_;
31841 }
31842
31843 #ifdef CONFIG_RESUME_IN_WORKQUEUE
31844 -#ifdef CONFIG_USB_HCI
31845 -extern int rtw_resume_process(struct usb_interface *pusb_intf);
31846 +#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)
31847 +extern int rtw_resume_process(_adapter *padapter);
31848 #endif
31849 static void resume_workitem_callback(struct work_struct *work)
31850 {
31851 @@ -991,9 +1164,8 @@ static void resume_workitem_callback(str
31852
31853 DBG_871X("%s\n",__FUNCTION__);
31854
31855 - #ifdef CONFIG_USB_HCI
31856 - rtw_resume_process(adapter->dvobjpriv.pusbintf);
31857 - #elif defined(CONFIG_PCI_HCI)
31858 + #if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)
31859 + rtw_resume_process(adapter);
31860 #endif
31861
31862 }
31863 @@ -1011,17 +1183,33 @@ void rtw_resume_in_workqueue(struct pwrc
31864 }
31865 #endif //CONFIG_RESUME_IN_WORKQUEUE
31866
31867 +#if defined(CONFIG_HAS_EARLYSUSPEND) || defined(CONFIG_ANDROID_POWER)
31868 +inline bool rtw_is_earlysuspend_registered(struct pwrctrl_priv *pwrpriv)
31869 +{
31870 + return (pwrpriv->early_suspend.suspend) ? _TRUE : _FALSE;
31871 +}
31872 +
31873 +inline bool rtw_is_do_late_resume(struct pwrctrl_priv *pwrpriv)
31874 +{
31875 + return (pwrpriv->do_late_resume) ? _TRUE : _FALSE;
31876 +}
31877 +
31878 +inline void rtw_set_do_late_resume(struct pwrctrl_priv *pwrpriv, bool enable)
31879 +{
31880 + pwrpriv->do_late_resume = enable;
31881 +}
31882 +#endif
31883 +
31884 #ifdef CONFIG_HAS_EARLYSUSPEND
31885 -#ifdef CONFIG_USB_HCI
31886 -extern int rtw_resume_process(struct usb_interface *pusb_intf);
31887 +#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)
31888 +extern int rtw_resume_process(_adapter *padapter);
31889 #endif
31890 static void rtw_early_suspend(struct early_suspend *h)
31891 {
31892 struct pwrctrl_priv *pwrpriv = container_of(h, struct pwrctrl_priv, early_suspend);
31893 DBG_871X("%s\n",__FUNCTION__);
31894 -
31895 - //jeff: do nothing but set do_late_resume to false
31896 - pwrpriv->do_late_resume = _FALSE;
31897 +
31898 + rtw_set_do_late_resume(pwrpriv, _FALSE);
31899 }
31900
31901 static void rtw_late_resume(struct early_suspend *h)
31902 @@ -1031,16 +1219,22 @@ static void rtw_late_resume(struct early
31903
31904 DBG_871X("%s\n",__FUNCTION__);
31905 if(pwrpriv->do_late_resume) {
31906 - #ifdef CONFIG_USB_HCI
31907 - rtw_resume_process(adapter->dvobjpriv.pusbintf);
31908 - pwrpriv->do_late_resume = _FALSE;
31909 - #elif defined(CONFIG_PCI_HCI)
31910 + #if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)
31911 + rtw_set_do_late_resume(pwrpriv, _FALSE);
31912 + rtw_resume_process(adapter);
31913 #endif
31914 }
31915 }
31916
31917 void rtw_register_early_suspend(struct pwrctrl_priv *pwrpriv)
31918 {
31919 + _adapter *adapter = container_of(pwrpriv, _adapter, pwrctrlpriv);
31920 +
31921 +#if defined(CONFIG_CONCURRENT_MODE)
31922 + if (adapter->adapter_type != PRIMARY_ADAPTER)
31923 + return;
31924 +#endif
31925 +
31926 DBG_871X("%s\n", __FUNCTION__);
31927
31928 //jeff: set the early suspend level before blank screen, so we wll do late resume after scree is lit
31929 @@ -1054,9 +1248,16 @@ void rtw_register_early_suspend(struct p
31930
31931 void rtw_unregister_early_suspend(struct pwrctrl_priv *pwrpriv)
31932 {
31933 + _adapter *adapter = container_of(pwrpriv, _adapter, pwrctrlpriv);
31934 +
31935 +#if defined(CONFIG_CONCURRENT_MODE)
31936 + if (adapter->adapter_type != PRIMARY_ADAPTER)
31937 + return;
31938 +#endif
31939 +
31940 DBG_871X("%s\n", __FUNCTION__);
31941
31942 - pwrpriv->do_late_resume = _FALSE;
31943 + rtw_set_do_late_resume(pwrpriv, _FALSE);
31944
31945 if (pwrpriv->early_suspend.suspend)
31946 unregister_early_suspend(&pwrpriv->early_suspend);
31947 @@ -1067,16 +1268,15 @@ void rtw_unregister_early_suspend(struct
31948 #endif //CONFIG_HAS_EARLYSUSPEND
31949
31950 #ifdef CONFIG_ANDROID_POWER
31951 -#ifdef CONFIG_USB_HCI
31952 -extern int rtw_resume_process(struct usb_interface *pusb_intf);
31953 +#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)
31954 +extern int rtw_resume_process(PADAPTER padapter);
31955 #endif
31956 static void rtw_early_suspend(android_early_suspend_t *h)
31957 {
31958 struct pwrctrl_priv *pwrpriv = container_of(h, struct pwrctrl_priv, early_suspend);
31959 DBG_871X("%s\n",__FUNCTION__);
31960 -
31961 - //jeff: do nothing but set do_late_resume to false
31962 - pwrpriv->do_late_resume = _FALSE;
31963 +
31964 + rtw_set_do_late_resume(pwrpriv, _FALSE);
31965 }
31966
31967 static void rtw_late_resume(android_early_suspend_t *h)
31968 @@ -1086,16 +1286,22 @@ static void rtw_late_resume(android_earl
31969
31970 DBG_871X("%s\n",__FUNCTION__);
31971 if(pwrpriv->do_late_resume) {
31972 - #ifdef CONFIG_USB_HCI
31973 - rtw_resume_process(adapter->dvobjpriv.pusbintf);
31974 - pwrpriv->do_late_resume = _FALSE;
31975 - #elif defined(CONFIG_PCI_HCI)
31976 + #if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)
31977 + rtw_set_do_late_resume(pwrpriv, _FALSE);
31978 + rtw_resume_process(adapter);
31979 #endif
31980 }
31981 }
31982
31983 void rtw_register_early_suspend(struct pwrctrl_priv *pwrpriv)
31984 {
31985 + _adapter *adapter = container_of(pwrpriv, _adapter, pwrctrlpriv);
31986 +
31987 +#if defined(CONFIG_CONCURRENT_MODE)
31988 + if (adapter->adapter_type != PRIMARY_ADAPTER)
31989 + return;
31990 +#endif
31991 +
31992 DBG_871X("%s\n", __FUNCTION__);
31993
31994 //jeff: set the early suspend level before blank screen, so we wll do late resume after scree is lit
31995 @@ -1107,9 +1313,16 @@ void rtw_register_early_suspend(struct p
31996
31997 void rtw_unregister_early_suspend(struct pwrctrl_priv *pwrpriv)
31998 {
31999 + _adapter *adapter = container_of(pwrpriv, _adapter, pwrctrlpriv);
32000 +
32001 +#if defined(CONFIG_CONCURRENT_MODE)
32002 + if (adapter->adapter_type != PRIMARY_ADAPTER)
32003 + return;
32004 +#endif
32005 +
32006 DBG_871X("%s\n", __FUNCTION__);
32007
32008 - pwrpriv->do_late_resume = _FALSE;
32009 + rtw_set_do_late_resume(pwrpriv, _FALSE);
32010
32011 if (pwrpriv->early_suspend.suspend)
32012 android_unregister_early_suspend(&pwrpriv->early_suspend);
32013 @@ -1122,24 +1335,81 @@ void rtw_unregister_early_suspend(struct
32014 u8 rtw_interface_ps_func(_adapter *padapter,HAL_INTF_PS_FUNC efunc_id,u8* val)
32015 {
32016 u8 bResult = _TRUE;
32017 - if(padapter->HalFunc.interface_ps_func)
32018 - {
32019 - bResult = padapter->HalFunc.interface_ps_func(padapter,efunc_id,val);
32020 - }
32021 +
32022 + rtw_hal_intf_ps_func(padapter,efunc_id,val);
32023 +
32024 return bResult;
32025 }
32026
32027 +
32028 +inline void rtw_set_ips_deny(_adapter *padapter, u32 ms)
32029 +{
32030 + struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
32031 + pwrpriv->ips_deny_time = rtw_get_current_time() + rtw_ms_to_systime(ms);
32032 +}
32033 +
32034 /*
32035 * rtw_pwr_wakeup - Wake the NIC up from: 1)IPS. 2)USB autosuspend
32036 * @adapter: pointer to _adapter structure
32037 -*
32038 +* @ips_deffer_ms: the ms wiil prevent from falling into IPS after wakeup
32039 * Return _SUCCESS or _FAIL
32040 */
32041 -int _rtw_pwr_wakeup(_adapter *padapter, const char *caller)
32042 +int _rtw_pwr_wakeup(_adapter *padapter, u32 ips_deffer_ms, const char *caller)
32043 {
32044 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
32045 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
32046 int ret = _SUCCESS;
32047 + u32 start = rtw_get_current_time();
32048 +
32049 +#ifdef CONFIG_CONCURRENT_MODE
32050 + if (padapter->pbuddy_adapter)
32051 + LeaveAllPowerSaveMode(padapter->pbuddy_adapter);
32052 +
32053 + if ((padapter->isprimary == _FALSE) && padapter->pbuddy_adapter){
32054 + padapter = padapter->pbuddy_adapter;
32055 + pwrpriv = &padapter->pwrctrlpriv;
32056 + pmlmepriv = &padapter->mlmepriv;
32057 + }
32058 +#endif
32059 +
32060 + if (pwrpriv->ips_deny_time < rtw_get_current_time() + rtw_ms_to_systime(ips_deffer_ms))
32061 + pwrpriv->ips_deny_time = rtw_get_current_time() + rtw_ms_to_systime(ips_deffer_ms);
32062 +
32063 + if (pwrpriv->ps_processing) {
32064 + DBG_871X("%s wait ps_processing...\n", __func__);
32065 + while (pwrpriv->ps_processing && rtw_get_passing_time_ms(start) <= 3000)
32066 + rtw_msleep_os(10);
32067 + if (pwrpriv->ps_processing)
32068 + DBG_871X("%s wait ps_processing timeout\n", __func__);
32069 + else
32070 + DBG_871X("%s wait ps_processing done\n", __func__);
32071 + }
32072 +
32073 +#ifdef DBG_CONFIG_ERROR_DETECT
32074 + if (rtw_hal_sreset_inprogress(padapter)) {
32075 + DBG_871X("%s wait sreset_inprogress...\n", __func__);
32076 + while (rtw_hal_sreset_inprogress(padapter) && rtw_get_passing_time_ms(start) <= 4000)
32077 + rtw_msleep_os(10);
32078 + if (rtw_hal_sreset_inprogress(padapter))
32079 + DBG_871X("%s wait sreset_inprogress timeout\n", __func__);
32080 + else
32081 + DBG_871X("%s wait sreset_inprogress done\n", __func__);
32082 + }
32083 +#endif
32084 +
32085 + if (pwrpriv->bInternalAutoSuspend == _FALSE && pwrpriv->bInSuspend) {
32086 + DBG_871X("%s wait bInSuspend...\n", __func__);
32087 + while (pwrpriv->bInSuspend
32088 + && ((rtw_get_passing_time_ms(start) <= 3000 && !rtw_is_do_late_resume(pwrpriv))
32089 + || (rtw_get_passing_time_ms(start) <= 500 && rtw_is_do_late_resume(pwrpriv)))
32090 + ) {
32091 + rtw_msleep_os(10);
32092 + }
32093 + if (pwrpriv->bInSuspend)
32094 + DBG_871X("%s wait bInSuspend timeout\n", __func__);
32095 + else
32096 + DBG_871X("%s wait bInSuspend done\n", __func__);
32097 + }
32098
32099 //System suspend is not allowed to wakeup
32100 if((pwrpriv->bInternalAutoSuspend == _FALSE) && (_TRUE == pwrpriv->bInSuspend )){
32101 @@ -1147,11 +1417,6 @@ int _rtw_pwr_wakeup(_adapter *padapter,
32102 goto exit;
32103 }
32104
32105 - //I think this should be check in IPS, LPS, autosuspend functions...
32106 - //if( pwrpriv->power_mgnt == PS_MODE_ACTIVE ) {
32107 - // goto exit;
32108 - //}
32109 -
32110 //block???
32111 if((pwrpriv->bInternalAutoSuspend == _TRUE) && (padapter->net_closed == _TRUE)) {
32112 ret = _FAIL;
32113 @@ -1164,7 +1429,7 @@ int _rtw_pwr_wakeup(_adapter *padapter,
32114 ret = _SUCCESS;
32115 goto exit;
32116 }
32117 -
32118 +
32119 if(rf_off == pwrpriv->rf_pwrstate )
32120 {
32121 #ifdef CONFIG_USB_HCI
32122 @@ -1177,7 +1442,7 @@ int _rtw_pwr_wakeup(_adapter *padapter,
32123 }
32124 else if(padapter->registrypriv.usbss_enable)
32125 {
32126 - DBG_8192C("\n %s call autoresume_enter....\n",__FUNCTION__);
32127 + DBG_8192C("%s call autoresume_enter....\n",__FUNCTION__);
32128 if(_FAIL == autoresume_enter(padapter))
32129 {
32130 DBG_8192C("======> autoresume fail.............\n");
32131 @@ -1190,7 +1455,7 @@ int _rtw_pwr_wakeup(_adapter *padapter,
32132 #endif
32133 {
32134 #ifdef CONFIG_IPS
32135 - DBG_8192C("\n %s call ips_leave....\n",__FUNCTION__);
32136 + DBG_8192C("%s call ips_leave....\n",__FUNCTION__);
32137 if(_FAIL == ips_leave(padapter))
32138 {
32139 DBG_8192C("======> ips_leave fail.............\n");
32140 @@ -1199,10 +1464,6 @@ int _rtw_pwr_wakeup(_adapter *padapter,
32141 }
32142 #endif
32143 }
32144 - }else {
32145 - //Jeff: reset timer to avoid falling ips or selective suspend soon
32146 - if(pwrpriv->bips_processing == _FALSE)
32147 - rtw_set_pwr_state_check_timer(pwrpriv);
32148 }
32149
32150 //TODO: the following checking need to be merged...
32151 @@ -1220,8 +1481,60 @@ int _rtw_pwr_wakeup(_adapter *padapter,
32152 }
32153
32154 exit:
32155 + if (pwrpriv->ips_deny_time < rtw_get_current_time() + rtw_ms_to_systime(ips_deffer_ms))
32156 + pwrpriv->ips_deny_time = rtw_get_current_time() + rtw_ms_to_systime(ips_deffer_ms);
32157 + return ret;
32158 +
32159 +}
32160 +
32161 +int rtw_pm_set_lps(_adapter *padapter, u8 mode)
32162 +{
32163 + int ret = 0;
32164 + struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
32165 +
32166 + if ( mode < PS_MODE_NUM )
32167 + {
32168 + if(pwrctrlpriv->power_mgnt !=mode)
32169 + {
32170 + if(PS_MODE_ACTIVE == mode)
32171 + {
32172 + LeaveAllPowerSaveMode(padapter);
32173 + }
32174 + else
32175 + {
32176 + pwrctrlpriv->LpsIdleCount = 2;
32177 + }
32178 + pwrctrlpriv->power_mgnt = mode;
32179 + pwrctrlpriv->bLeisurePs = (PS_MODE_ACTIVE != pwrctrlpriv->power_mgnt)?_TRUE:_FALSE;
32180 + }
32181 + }
32182 + else
32183 + {
32184 + ret = -EINVAL;
32185 + }
32186 +
32187 return ret;
32188 +}
32189
32190 +int rtw_pm_set_ips(_adapter *padapter, u8 mode)
32191 +{
32192 + struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
32193 +
32194 + if( mode == IPS_NORMAL || mode == IPS_LEVEL_2 ) {
32195 + rtw_ips_mode_req(pwrctrlpriv, mode);
32196 + DBG_871X("%s %s\n", __FUNCTION__, mode == IPS_NORMAL?"IPS_NORMAL":"IPS_LEVEL_2");
32197 + return 0;
32198 + }
32199 + else if(mode ==IPS_NONE){
32200 + rtw_ips_mode_req(pwrctrlpriv, mode);
32201 + DBG_871X("%s %s\n", __FUNCTION__, "IPS_NONE");
32202 + if((padapter->bSurpriseRemoved ==0)&&(_FAIL == rtw_pwr_wakeup(padapter)) )
32203 + return -EFAULT;
32204 + }
32205 + else {
32206 + return -EINVAL;
32207 + }
32208 + return 0;
32209 }
32210
32211
32212 --- a/drivers/net/wireless/rtl8192cu/core/rtw_recv.c
32213 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_recv.c
32214 @@ -16,7 +16,7 @@
32215 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
32216 *
32217 *
32218 -******************************************************************************/
32219 + ******************************************************************************/
32220 #define _RTW_RECV_C_
32221 #include <drv_conf.h>
32222 #include <osdep_service.h>
32223 @@ -81,6 +81,7 @@ _func_enter_;
32224
32225 _rtw_init_queue(&precvpriv->free_recv_queue);
32226 _rtw_init_queue(&precvpriv->recv_pending_queue);
32227 + _rtw_init_queue(&precvpriv->uc_swdec_pending_queue);
32228
32229 precvpriv->adapter = padapter;
32230
32231 @@ -124,7 +125,12 @@ _func_enter_;
32232
32233 #endif
32234
32235 - res = padapter->HalFunc.init_recv_priv(padapter);
32236 + res = rtw_hal_init_recv_priv(padapter);
32237 +
32238 + precvpriv->recvbuf_skb_alloc_fail_cnt = 0;
32239 + precvpriv->recvbuf_null_cnt = 0;
32240 + precvpriv->read_port_complete_EINPROGRESS_cnt = 0;
32241 + precvpriv->read_port_complete_other_urb_err_cnt = 0;
32242
32243 #ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
32244 #ifdef PLATFORM_LINUX
32245 @@ -147,6 +153,7 @@ _func_exit_;
32246
32247 }
32248
32249 +void rtw_mfree_recv_priv_lock(struct recv_priv *precvpriv);
32250 void rtw_mfree_recv_priv_lock(struct recv_priv *precvpriv)
32251 {
32252 _rtw_spinlock_free(&precvpriv->lock);
32253 @@ -171,6 +178,8 @@ void _rtw_free_recv_priv (struct recv_pr
32254
32255 _func_enter_;
32256
32257 + rtw_free_uc_swdec_pending_queue(padapter);
32258 +
32259 rtw_mfree_recv_priv_lock(precvpriv);
32260
32261 rtw_os_recv_resource_free(precvpriv);
32262 @@ -179,23 +188,21 @@ _func_enter_;
32263 rtw_vmfree(precvpriv->pallocated_frame_buf, NR_RECVFRAME * sizeof(union recv_frame) + RXFRAME_ALIGN_SZ);
32264 }
32265
32266 - padapter->HalFunc.free_recv_priv(padapter);
32267 + rtw_hal_free_recv_priv(padapter);
32268
32269 _func_exit_;
32270
32271 }
32272
32273 -union recv_frame *rtw_alloc_recvframe (_queue *pfree_recv_queue)
32274 +union recv_frame *_rtw_alloc_recvframe (_queue *pfree_recv_queue)
32275 {
32276 - _irqL irqL;
32277 +
32278 union recv_frame *precvframe;
32279 _list *plist, *phead;
32280 _adapter *padapter;
32281 struct recv_priv *precvpriv;
32282 _func_enter_;
32283
32284 - _enter_critical_bh(&pfree_recv_queue->lock, &irqL);
32285 -
32286 if(_rtw_queue_empty(pfree_recv_queue) == _TRUE)
32287 {
32288 precvframe = NULL;
32289 @@ -217,28 +224,34 @@ _func_enter_;
32290 }
32291 }
32292
32293 - _exit_critical_bh(&pfree_recv_queue->lock, &irqL);
32294 -
32295 _func_exit_;
32296
32297 return precvframe;
32298
32299 }
32300
32301 +union recv_frame *rtw_alloc_recvframe (_queue *pfree_recv_queue)
32302 +{
32303 + _irqL irqL;
32304 + union recv_frame *precvframe;
32305 +
32306 + _enter_critical_bh(&pfree_recv_queue->lock, &irqL);
32307 +
32308 + precvframe = _rtw_alloc_recvframe(pfree_recv_queue);
32309 +
32310 + _exit_critical_bh(&pfree_recv_queue->lock, &irqL);
32311 +
32312 + return precvframe;
32313 +}
32314
32315 void rtw_init_recvframe(union recv_frame *precvframe, struct recv_priv *precvpriv)
32316 {
32317 - struct recv_buf *precvbuf = precvframe->u.hdr.precvbuf;
32318 -
32319 /* Perry: This can be removed */
32320 _rtw_init_listhead(&precvframe->u.hdr.list);
32321
32322 precvframe->u.hdr.len=0;
32323 -
32324 -
32325 }
32326
32327 -
32328 int rtw_free_recvframe(union recv_frame *precvframe, _queue *pfree_recv_queue)
32329 {
32330 _irqL irqL;
32331 @@ -247,41 +260,34 @@ int rtw_free_recvframe(union recv_frame
32332
32333 _func_enter_;
32334
32335 +#ifdef CONFIG_CONCURRENT_MODE
32336 + if(padapter->adapter_type > PRIMARY_ADAPTER)
32337 + {
32338 + padapter = padapter->pbuddy_adapter;//get primary_padapter
32339 + precvpriv = &padapter->recvpriv;
32340 + pfree_recv_queue = &precvpriv->free_recv_queue;
32341 + precvframe->u.hdr.adapter = padapter;
32342 + }
32343 +#endif
32344 +
32345
32346 #ifdef PLATFORM_WINDOWS
32347 rtw_os_read_port(padapter, precvframe->u.hdr.precvbuf);
32348 #endif
32349
32350 -#ifdef PLATFORM_LINUX
32351 +#if defined(PLATFORM_LINUX) || defined(PLATFORM_FREEBSD)
32352
32353 if(precvframe->u.hdr.pkt)
32354 {
32355 - dev_kfree_skb_any(precvframe->u.hdr.pkt);//free skb by driver
32356 +#ifdef CONFIG_BSD_RX_USE_MBUF
32357 + m_freem(precvframe->u.hdr.pkt);
32358 +#else // CONFIG_BSD_RX_USE_MBUF
32359 + rtw_skb_free(precvframe->u.hdr.pkt);//free skb by driver
32360 +#endif // CONFIG_BSD_RX_USE_MBUF
32361 precvframe->u.hdr.pkt = NULL;
32362 }
32363
32364 -#ifdef CONFIG_SDIO_HCI
32365 -{
32366 - _irqL irql;
32367 - struct recv_buf *precvbuf=precvframe->u.hdr.precvbuf;
32368 - if(precvbuf !=NULL){
32369 - _enter_critical_bh(&precvbuf->recvbuf_lock, &irql);
32370 -
32371 - precvbuf->ref_cnt--;
32372 - if(precvbuf->ref_cnt == 0 ){
32373 - _enter_critical_bh(&precvpriv->free_recv_buf_queue.lock, &irqL);
32374 - rtw_list_delete(&(precvbuf->list));
32375 - rtw_list_insert_tail(&(precvbuf->list), get_list_head(&precvpriv->free_recv_buf_queue));
32376 - precvpriv->free_recv_buf_queue_cnt++;
32377 - _exit_critical_bh(&precvpriv->free_recv_buf_queue.lock, &irqL);
32378 - RT_TRACE(_module_rtl871x_recv_c_,_drv_notice_,("rtw_os_read_port: precvbuf=0x%p enqueue:precvpriv->free_recv_buf_queue_cnt=%d\n",precvbuf,precvpriv->free_recv_buf_queue_cnt));
32379 - }
32380 - RT_TRACE(_module_rtl871x_recv_c_,_drv_notice_,("rtw_os_read_port: precvbuf=0x%p enqueue:precvpriv->free_recv_buf_queue_cnt=%d\n",precvbuf,precvpriv->free_recv_buf_queue_cnt));
32381 - _exit_critical_bh(&precvbuf->recvbuf_lock, &irql);
32382 - }
32383 -}
32384 -#endif
32385 -#endif
32386 +#endif //defined(PLATFORM_LINUX) || defined(PLATFORM_FREEBSD)
32387
32388 _enter_critical_bh(&pfree_recv_queue->lock, &irqL);
32389
32390 @@ -303,24 +309,16 @@ _func_exit_;
32391 }
32392
32393
32394 -union recv_frame *rtw_dequeue_recvframe (_queue *queue)
32395 -{
32396 - return rtw_alloc_recvframe(queue);
32397 -}
32398
32399
32400 -sint rtw_enqueue_recvframe(union recv_frame *precvframe, _queue *queue)
32401 +sint _rtw_enqueue_recvframe(union recv_frame *precvframe, _queue *queue)
32402 {
32403 - _irqL irqL;
32404 +
32405 _adapter *padapter=precvframe->u.hdr.adapter;
32406 struct recv_priv *precvpriv = &padapter->recvpriv;
32407
32408 _func_enter_;
32409
32410 -
32411 - //_spinlock(&pfree_recv_queue->lock);
32412 - _enter_critical_bh(&queue->lock, &irqL);
32413 -
32414 //_rtw_init_listhead(&(precvframe->u.hdr.list));
32415 rtw_list_delete(&(precvframe->u.hdr.list));
32416
32417 @@ -332,15 +330,25 @@ _func_enter_;
32418 precvpriv->free_recvframe_cnt++;
32419 }
32420
32421 - //_rtw_spinunlock(&pfree_recv_queue->lock);
32422 - _exit_critical_bh(&queue->lock, &irqL);
32423 -
32424 -
32425 _func_exit_;
32426
32427 return _SUCCESS;
32428 }
32429
32430 +sint rtw_enqueue_recvframe(union recv_frame *precvframe, _queue *queue)
32431 +{
32432 + sint ret;
32433 + _irqL irqL;
32434 +
32435 + //_spinlock(&pfree_recv_queue->lock);
32436 + _enter_critical_bh(&queue->lock, &irqL);
32437 + ret = _rtw_enqueue_recvframe(precvframe, queue);
32438 + //_rtw_spinunlock(&pfree_recv_queue->lock);
32439 + _exit_critical_bh(&queue->lock, &irqL);
32440 +
32441 + return ret;
32442 +}
32443 +
32444 /*
32445 sint rtw_enqueue_recvframe(union recv_frame *precvframe, _queue *queue)
32446 {
32447 @@ -387,6 +395,34 @@ _func_exit_;
32448
32449 }
32450
32451 +u32 rtw_free_uc_swdec_pending_queue(_adapter *adapter)
32452 +{
32453 + u32 cnt = 0;
32454 + union recv_frame *pending_frame;
32455 + while((pending_frame=rtw_alloc_recvframe(&adapter->recvpriv.uc_swdec_pending_queue))) {
32456 + rtw_free_recvframe(pending_frame, &adapter->recvpriv.free_recv_queue);
32457 + DBG_871X("%s: dequeue uc_swdec_pending_queue\n", __func__);
32458 + cnt++;
32459 + }
32460 +
32461 + return cnt;
32462 +}
32463 +
32464 +
32465 +sint rtw_enqueue_recvbuf_to_head(struct recv_buf *precvbuf, _queue *queue)
32466 +{
32467 + _irqL irqL;
32468 +
32469 + _enter_critical(&queue->lock, &irqL);
32470 +
32471 + rtw_list_delete(&precvbuf->list);
32472 + rtw_list_insert_head(&precvbuf->list, get_list_head(queue));
32473 +
32474 + _exit_critical(&queue->lock, &irqL);
32475 +
32476 + return _SUCCESS;
32477 +}
32478 +
32479 sint rtw_enqueue_recvbuf(struct recv_buf *precvbuf, _queue *queue)
32480 {
32481 _irqL irqL;
32482 @@ -435,14 +471,16 @@ struct recv_buf *rtw_dequeue_recvbuf (_q
32483
32484 }
32485
32486 -static sint recvframe_chkmic(_adapter *adapter, union recv_frame *precvframe){
32487 +sint recvframe_chkmic(_adapter *adapter, union recv_frame *precvframe);
32488 +sint recvframe_chkmic(_adapter *adapter, union recv_frame *precvframe){
32489
32490 sint i,res=_SUCCESS;
32491 u32 datalen;
32492 u8 miccode[8];
32493 u8 bmic_err=_FALSE,brpt_micerror = _TRUE;
32494 u8 *pframe, *payload,*pframemic;
32495 - u8 *mickey,*iv,rxdata_key_idx;
32496 + u8 *mickey;
32497 + //u8 *iv,rxdata_key_idx=0;
32498 struct sta_info *stainfo;
32499 struct rx_pkt_attrib *prxattrib=&precvframe->u.hdr.attrib;
32500 struct security_priv *psecuritypriv=&adapter->securitypriv;
32501 @@ -470,14 +508,14 @@ _func_enter_;
32502 mickey=&psecuritypriv->dot118021XGrprxmickey[prxattrib->key_index].skey[0];
32503
32504 RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("\n recvframe_chkmic: bcmc key \n"));
32505 - //DBG_8192C("\n recvframe_chkmic: bcmc key psecuritypriv->dot118021XGrpKeyid(%d),pmlmeinfo->key_index(%d) ,recv key_id(%d)\n",
32506 + //DBG_871X("\n recvframe_chkmic: bcmc key psecuritypriv->dot118021XGrpKeyid(%d),pmlmeinfo->key_index(%d) ,recv key_id(%d)\n",
32507 // psecuritypriv->dot118021XGrpKeyid,pmlmeinfo->key_index,rxdata_key_idx);
32508
32509 if(psecuritypriv->binstallGrpkey==_FALSE)
32510 {
32511 res=_FAIL;
32512 RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("\n recvframe_chkmic:didn't install group key!!!!!!!!!!\n"));
32513 - DBG_8192C("\n recvframe_chkmic:didn't install group key!!!!!!!!!!\n");
32514 + DBG_871X("\n recvframe_chkmic:didn't install group key!!!!!!!!!!\n");
32515 goto exit;
32516 }
32517 }
32518 @@ -538,16 +576,11 @@ _func_enter_;
32519 if((IS_MCAST(prxattrib->ra)==_TRUE) && (prxattrib->key_index != pmlmeinfo->key_index ))
32520 brpt_micerror = _FALSE;
32521
32522 - if((prxattrib->bdecrypted ==_TRUE)&& (brpt_micerror == _TRUE))
32523 + if(brpt_micerror == _TRUE)
32524 {
32525 rtw_handle_tkip_mic_err(adapter,(u8)IS_MCAST(prxattrib->ra));
32526 - RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,(" mic error :prxattrib->bdecrypted=%d ",prxattrib->bdecrypted));
32527 - DBG_8192C(" mic error :prxattrib->bdecrypted=%d\n",prxattrib->bdecrypted);
32528 - }
32529 - else
32530 - {
32531 - RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,(" mic error :prxattrib->bdecrypted=%d ",prxattrib->bdecrypted));
32532 - DBG_8192C(" mic error :prxattrib->bdecrypted=%d\n",prxattrib->bdecrypted);
32533 + RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,(" mic error :prxattrib->bdecrypted=%d \n", brpt_micerror));
32534 + DBG_871X(" mic error :brpt_micerror=%d\n", brpt_micerror);
32535 }
32536
32537 res=_FAIL;
32538 @@ -580,14 +613,14 @@ _func_exit_;
32539 }
32540
32541 //decrypt and set the ivlen,icvlen of the recv_frame
32542 -static union recv_frame * decryptor(_adapter *padapter,union recv_frame *precv_frame)
32543 +union recv_frame * decryptor(_adapter *padapter,union recv_frame *precv_frame);
32544 +union recv_frame * decryptor(_adapter *padapter,union recv_frame *precv_frame)
32545 {
32546 - u32 res=_SUCCESS;
32547
32548 struct rx_pkt_attrib *prxattrib = &precv_frame->u.hdr.attrib;
32549 struct security_priv *psecuritypriv=&padapter->securitypriv;
32550 union recv_frame *return_packet=precv_frame;
32551 -
32552 + u32 res=_SUCCESS;
32553 _func_enter_;
32554
32555 RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("prxstat->decrypted=%x prxattrib->encrypt = 0x%03x\n",prxattrib->bdecrypted,prxattrib->encrypt));
32556 @@ -617,6 +650,10 @@ _func_enter_;
32557
32558 if((prxattrib->encrypt>0) && ((prxattrib->bdecrypted==0) ||(psecuritypriv->sw_decrypt==_TRUE)))
32559 {
32560 +
32561 +#ifdef CONFIG_CONCURRENT_MODE
32562 + if(!IS_MCAST(prxattrib->ra))//bc/mc packets use sw decryption for concurrent mode
32563 +#endif
32564 psecuritypriv->hw_decrypted=_FALSE;
32565
32566 #ifdef DBG_RX_DECRYPTOR
32567 @@ -673,7 +710,7 @@ _func_enter_;
32568 , prxattrib->bdecrypted ,prxattrib->encrypt, psecuritypriv->hw_decrypted);
32569 #endif
32570 }
32571 -
32572 +
32573 if(res == _FAIL)
32574 {
32575 rtw_free_recvframe(return_packet,&padapter->recvpriv.free_recv_queue);
32576 @@ -681,14 +718,15 @@ _func_enter_;
32577
32578 }
32579 //recvframe_chkmic(adapter, precv_frame); //move to recvframme_defrag function
32580 -
32581 +
32582 _func_exit_;
32583
32584 return return_packet;
32585
32586 }
32587 //###set the security information in the recv_frame
32588 -static union recv_frame * portctrl(_adapter *adapter,union recv_frame * precv_frame)
32589 +union recv_frame * portctrl(_adapter *adapter,union recv_frame * precv_frame);
32590 +union recv_frame * portctrl(_adapter *adapter,union recv_frame * precv_frame)
32591 {
32592 u8 *psta_addr,*ptr;
32593 uint auth_alg;
32594 @@ -771,7 +809,8 @@ _func_exit_;
32595
32596 }
32597
32598 -static sint recv_decache(union recv_frame *precv_frame, u8 bretry, struct stainfo_rxcache *prxcache)
32599 +sint recv_decache(union recv_frame *precv_frame, u8 bretry, struct stainfo_rxcache *prxcache);
32600 +sint recv_decache(union recv_frame *precv_frame, u8 bretry, struct stainfo_rxcache *prxcache)
32601 {
32602 sint tid = precv_frame->u.hdr.attrib.priority;
32603
32604 @@ -805,7 +844,8 @@ _func_exit_;
32605
32606 }
32607
32608 -static void process_pwrbit_data(_adapter *padapter, union recv_frame *precv_frame)
32609 +void process_pwrbit_data(_adapter *padapter, union recv_frame *precv_frame);
32610 +void process_pwrbit_data(_adapter *padapter, union recv_frame *precv_frame)
32611 {
32612 #ifdef CONFIG_AP_MODE
32613 unsigned char pwrbit;
32614 @@ -826,11 +866,11 @@ static void process_pwrbit_data(_adapter
32615 {
32616 //psta->state |= WIFI_SLEEP_STATE;
32617 //pstapriv->sta_dz_bitmap |= BIT(psta->aid);
32618 -
32619 +
32620 stop_sta_xmit(padapter, psta);
32621 -
32622 +
32623 //DBG_871X("to sleep, sta_dz_bitmap=%x\n", pstapriv->sta_dz_bitmap);
32624 - }
32625 + }
32626 }
32627 else
32628 {
32629 @@ -838,897 +878,118 @@ static void process_pwrbit_data(_adapter
32630 {
32631 //psta->state ^= WIFI_SLEEP_STATE;
32632 //pstapriv->sta_dz_bitmap &= ~BIT(psta->aid);
32633 -
32634 - wakeup_sta_to_xmit(padapter, psta);
32635 -
32636 - //DBG_871X("to wakeup, sta_dz_bitmap=%x\n", pstapriv->sta_dz_bitmap);
32637 - }
32638 - }
32639 -
32640 - }
32641 -
32642 -#endif
32643 -}
32644 -
32645 -static void process_wmmps_data(_adapter *padapter, union recv_frame *precv_frame)
32646 -{
32647 -#ifdef CONFIG_AP_MODE
32648 - struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.attrib;
32649 - struct sta_priv *pstapriv = &padapter->stapriv;
32650 - struct sta_info *psta=NULL;
32651 -
32652 - psta = rtw_get_stainfo(pstapriv, pattrib->src);
32653 -
32654 - if(!psta) return;
32655 -
32656 -#ifdef CONFIG_TDLS
32657 - if( !(psta->tdls_sta_state & TDLS_LINKED_STATE ) )
32658 - {
32659 -#endif //CONFIG_TDLS
32660 -
32661 - if(!psta->qos_option)
32662 - return;
32663 -
32664 - if(!(psta->qos_info&0xf))
32665 - return;
32666 -
32667 -#ifdef CONFIG_TDLS
32668 - }
32669 -#endif //CONFIG_TDLS
32670 -
32671 - if(psta->state&WIFI_SLEEP_STATE)
32672 - {
32673 - u8 wmmps_ac=0;
32674 -
32675 - switch(pattrib->priority)
32676 - {
32677 - case 1:
32678 - case 2:
32679 - wmmps_ac = psta->uapsd_bk&BIT(1);
32680 - break;
32681 - case 4:
32682 - case 5:
32683 - wmmps_ac = psta->uapsd_vi&BIT(1);
32684 - break;
32685 - case 6:
32686 - case 7:
32687 - wmmps_ac = psta->uapsd_vo&BIT(1);
32688 - break;
32689 - case 0:
32690 - case 3:
32691 - default:
32692 - wmmps_ac = psta->uapsd_be&BIT(1);
32693 - break;
32694 - }
32695 -
32696 - if(wmmps_ac)
32697 - {
32698 - if(psta->sleepq_ac_len>0)
32699 - {
32700 - //process received triggered frame
32701 - xmit_delivery_enabled_frames(padapter, psta);
32702 - }
32703 - else
32704 - {
32705 - //issue one qos null frame with More data bit = 0 and the EOSP bit set (=1)
32706 - issue_qos_nulldata(padapter, psta->hwaddr, (u16)pattrib->priority);
32707 - }
32708 - }
32709 -
32710 - }
32711 -
32712 -
32713 -#endif
32714 -
32715 -}
32716 -
32717 -#ifdef CONFIG_TDLS
32718 -sint On_TDLS_Setup_Req(_adapter *adapter, union recv_frame *precv_frame)
32719 -{
32720 - struct tdls_info *ptdlsinfo = &adapter->tdlsinfo;
32721 - u8 *psa, *pmyid;
32722 - struct sta_info *ptdls_sta= NULL;
32723 - struct sta_priv *pstapriv = &adapter->stapriv;
32724 - u8 *ptr = precv_frame->u.hdr.rx_data;
32725 - struct mlme_priv *pmlmepriv = &(adapter->mlmepriv);
32726 - struct security_priv *psecuritypriv = &adapter->securitypriv;
32727 - _irqL irqL;
32728 - struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
32729 - u8 *prsnie, *ppairwise_cipher;
32730 - u8 i, k, pairwise_count;
32731 - u8 ccmp_have=0, rsnie_have=0;
32732 - u16 j;
32733 - u8 SNonce[32];
32734 - u32 *timeout_interval;
32735 - sint parsing_length; //frame body length, without icv_len
32736 - PNDIS_802_11_VARIABLE_IEs pIE;
32737 - u8 FIXED_IE = 5;
32738 -
32739 - psa = get_sa(ptr);
32740 - ptdls_sta = rtw_get_stainfo(pstapriv, psa);
32741 -
32742 - pmyid=myid(&(adapter->eeprompriv));
32743 - ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;
32744 - parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
32745 - -prx_pkt_attrib->hdrlen
32746 - -prx_pkt_attrib->iv_len
32747 - -prx_pkt_attrib->icv_len
32748 - -LLC_HEADER_SIZE
32749 - -TYPE_LENGTH_FIELD_SIZE
32750 - -1
32751 - -FIXED_IE;
32752 -
32753 - if(ptdlsinfo->ap_prohibited == _TRUE)
32754 - {
32755 - goto exit;
32756 - }
32757 -
32758 - if(ptdls_sta==NULL ||(ptdls_sta->tdls_sta_state&TDLS_LINKED_STATE) )
32759 - {
32760 - if(ptdls_sta==NULL){
32761 - ptdls_sta = rtw_alloc_stainfo(pstapriv, psa);
32762 - }else{
32763 - //If the direct link is already set up
32764 - //Process as re-setup after tear down
32765 - DBG_8192C("re-setup a direct link\n");
32766 - }
32767 -
32768 - if(ptdls_sta)
32769 - {
32770 - //copy dialog token
32771 - ptdls_sta->dialog = *(ptr+2);
32772 -
32773 - //parsing information element
32774 - for(j=FIXED_IE; j<parsing_length;){
32775 -
32776 - pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
32777 -
32778 - switch (pIE->ElementID)
32779 - {
32780 - case _SUPPORTEDRATES_IE_:
32781 - break;
32782 - case _COUNTRY_IE_:
32783 - break;
32784 - case _EXT_SUPPORTEDRATES_IE_:
32785 - break;
32786 - case _SUPPORTED_CH_IE_:
32787 - break;
32788 - case _RSN_IE_2_:
32789 - rsnie_have=1;
32790 - if(prx_pkt_attrib->encrypt){
32791 - prsnie=(u8*)pIE;
32792 - //check whether initiator STA has CCMP pairwise_cipher.
32793 - ppairwise_cipher=prsnie+10;
32794 - _rtw_memcpy(&pairwise_count, (u16*)(ppairwise_cipher-2), 1);
32795 - for(k=0;k<pairwise_count;k++){
32796 - if(_rtw_memcmp( ppairwise_cipher+4*k, RSN_CIPHER_SUITE_CCMP, 4)==_TRUE)
32797 - ccmp_have=1;
32798 - }
32799 - if(ccmp_have==0){
32800 - //invalid contents of RSNIE
32801 - ptdls_sta->stat_code=72;
32802 - }
32803 - }
32804 - break;
32805 - case _EXT_CAP_IE_:
32806 - break;
32807 - case _VENDOR_SPECIFIC_IE_:
32808 - break;
32809 - case _FTIE_:
32810 - if(prx_pkt_attrib->encrypt)
32811 - _rtw_memcpy(SNonce, (ptr+j+52), 32);
32812 - break;
32813 - case _TIMEOUT_ITVL_IE_:
32814 - if(prx_pkt_attrib->encrypt)
32815 - timeout_interval = (u32 *)(ptr+j+3);
32816 - break;
32817 - case _RIC_Descriptor_IE_:
32818 - break;
32819 - case _HT_CAPABILITY_IE_:
32820 - break;
32821 - case EID_BSSCoexistence:
32822 - break;
32823 - case _LINK_ID_IE_:
32824 - if(_rtw_memcmp(get_bssid(pmlmepriv), pIE->data, 6) == _FALSE)
32825 - {
32826 - //not in same BSS
32827 - ptdls_sta->stat_code=7;
32828 - }
32829 - break;
32830 - default:
32831 - break;
32832 - }
32833 -
32834 - j += (pIE->Length + 2);
32835 -
32836 - }
32837 -
32838 - //check status code
32839 - //if responder STA has/hasn't security on AP, but request hasn't/has RSNIE, it should reject
32840 - if(
32841 - ( rsnie_have && (prx_pkt_attrib->encrypt) )
32842 - ||
32843 - (rsnie_have==0 && (prx_pkt_attrib->encrypt==0) )
32844 - ){
32845 - ptdls_sta->stat_code=0;
32846 - }else if(rsnie_have && (prx_pkt_attrib->encrypt==0)){
32847 - //security disabled
32848 - ptdls_sta->stat_code=5;
32849 - }else if(rsnie_have==0 && (prx_pkt_attrib->encrypt)){
32850 - //request haven't RSNIE
32851 - ptdls_sta->stat_code=38;
32852 - }
32853 -
32854 - ptdls_sta->tdls_sta_state|= TDLS_INITIATOR_STATE;
32855 - if(prx_pkt_attrib->encrypt){
32856 - _rtw_memcpy(ptdls_sta->SNonce, SNonce, 32);
32857 - _rtw_memcpy(&(ptdls_sta->TDLS_PeerKey_Lifetime), timeout_interval, 4);
32858 - }
32859 - _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
32860 - ptdlsinfo->sta_cnt++;
32861 - _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
32862 - if( ptdlsinfo->sta_cnt == (NUM_STA - 1) )
32863 - {
32864 - ptdlsinfo->sta_maximum = _TRUE;
32865 - }
32866 - }
32867 - else
32868 - {
32869 - goto exit;
32870 - }
32871 - }
32872 - //already receiving TDLS setup request
32873 - else if(ptdls_sta->tdls_sta_state==TDLS_INITIATOR_STATE){
32874 - DBG_8192C("receive duplicated TDLS setup request frame in handshaking\n");
32875 - goto exit;
32876 - }
32877 - //When receiving and sending setup_req to the same link at the same time, STA with higher MAC_addr would be initiator
32878 - //following is to check out MAC_addr
32879 - else if(ptdls_sta->tdls_sta_state==TDLS_RESPONDER_STATE){
32880 - DBG_8192C("receive setup_req after sending setup_req\n");
32881 - for (i=0;i<6;i++){
32882 - if(*(pmyid+i)==*(psa+i)){
32883 - }
32884 - else if(*(pmyid+i)>*(psa+i)){
32885 - goto exit;
32886 - }else if(*(pmyid+i)<*(psa+i)){
32887 - ptdls_sta->tdls_sta_state=TDLS_INITIATOR_STATE;
32888 - break;
32889 - }
32890 - }
32891 - }
32892 -
32893 - issue_tdls_setup_rsp(adapter, precv_frame);
32894 - _set_timer( &ptdls_sta->handshake_timer, TDLS_HANDSHAKE_TIME);
32895 -
32896 - //status code!=0 ; setup unsuccess
32897 - if(ptdls_sta->stat_code!=0){
32898 - free_tdls_sta(adapter, ptdls_sta);
32899 - return _FAIL;
32900 - }
32901 -
32902 -exit:
32903 -
32904 - return _FAIL;
32905 -}
32906 -
32907 -
32908 -sint On_TDLS_Setup_Rsp(_adapter *adapter, union recv_frame *precv_frame)
32909 -{
32910 - struct tdls_info *ptdlsinfo = &adapter->tdlsinfo;
32911 - struct sta_info *ptdls_sta= NULL;
32912 - struct sta_priv *pstapriv = &adapter->stapriv;
32913 - u8 *ptr = precv_frame->u.hdr.rx_data;
32914 - _irqL irqL;
32915 - struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
32916 - u8 *psa;
32917 - u16 stat_code;
32918 - sint parsing_length; //frame body length, without icv_len
32919 - PNDIS_802_11_VARIABLE_IEs pIE;
32920 - u8 FIXED_IE =7;
32921 - u8 *pftie, *ptimeout_ie, *plinkid_ie, *prsnie, *pftie_mic, *ppairwise_cipher;
32922 - u16 pairwise_count, j, k;
32923 - u8 verify_ccmp=0;
32924 -
32925 - psa = get_sa(ptr);
32926 - ptdls_sta = rtw_get_stainfo(pstapriv, psa);
32927 -
32928 - ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;
32929 - parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
32930 - -prx_pkt_attrib->hdrlen
32931 - -prx_pkt_attrib->iv_len
32932 - -prx_pkt_attrib->icv_len
32933 - -LLC_HEADER_SIZE
32934 - -TYPE_LENGTH_FIELD_SIZE
32935 - -1
32936 - -FIXED_IE;
32937 - _rtw_memcpy(&stat_code, ptr+2, 2);
32938 -
32939 - if(stat_code!=0){
32940 - free_tdls_sta(adapter, ptdls_sta);
32941 - return _FAIL;
32942 - }
32943 -
32944 - //parsing information element
32945 - for(j=FIXED_IE; j<parsing_length;){
32946 -
32947 - pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
32948 -
32949 - switch (pIE->ElementID)
32950 - {
32951 - case _SUPPORTEDRATES_IE_:
32952 - break;
32953 - case _COUNTRY_IE_:
32954 - break;
32955 - case _EXT_SUPPORTEDRATES_IE_:
32956 - break;
32957 - case _SUPPORTED_CH_IE_:
32958 - break;
32959 - case _RSN_IE_2_:
32960 - prsnie=(u8*)pIE;
32961 - //check whether responder STA has CCMP pairwise_cipher.
32962 - ppairwise_cipher=prsnie+10;
32963 - _rtw_memcpy(&pairwise_count, (u16*)(ppairwise_cipher-2), 2);
32964 - for(k=0;k<pairwise_count;k++){
32965 - if(_rtw_memcmp( ppairwise_cipher+4*k, RSN_CIPHER_SUITE_CCMP, 4)==_TRUE)
32966 - verify_ccmp=1;
32967 - }
32968 - case _EXT_CAP_IE_:
32969 - break;
32970 - case _VENDOR_SPECIFIC_IE_:
32971 - break;
32972 - case _FTIE_:
32973 - pftie=(u8*)pIE;
32974 - _rtw_memcpy(ptdls_sta->ANonce, (ptr+j+20), 32);
32975 - break;
32976 - case _TIMEOUT_ITVL_IE_:
32977 - ptimeout_ie=(u8*)pIE;
32978 - break;
32979 - case _RIC_Descriptor_IE_:
32980 - break;
32981 - case _HT_CAPABILITY_IE_:
32982 - break;
32983 - case EID_BSSCoexistence:
32984 - break;
32985 - case _LINK_ID_IE_:
32986 - plinkid_ie=(u8*)pIE;
32987 - break;
32988 - default:
32989 - break;
32990 - }
32991 -
32992 - j += (pIE->Length + 2);
32993 -
32994 - }
32995 -
32996 - if(prx_pkt_attrib->encrypt){
32997 - if(verify_ccmp==1){
32998 - wpa_tdls_generate_tpk(adapter, ptdls_sta);
32999 - ptdls_sta->stat_code=0;
33000 - }
33001 - else{
33002 - ptdls_sta->stat_code=72; //invalide contents of RSNIE
33003 - }
33004 - }else{
33005 - ptdls_sta->stat_code=0;
33006 - }
33007 -
33008 - if(prx_pkt_attrib->encrypt){
33009 - if(tdls_verify_mic(ptdls_sta->tpk.kck, 2, plinkid_ie, prsnie, ptimeout_ie, pftie)==0){ //0: Invalid, 1: valid
33010 - free_tdls_sta(adapter, ptdls_sta);
33011 - return _FAIL;
33012 - }
33013 - }
33014 -
33015 - DBG_871X("issue_tdls_setup_cfm\n");
33016 - issue_tdls_setup_cfm(adapter, precv_frame);
33017 -
33018 - //status code!=0 ; setup unsuccess
33019 - if(ptdls_sta->stat_code!=0){
33020 - free_tdls_sta(adapter, ptdls_sta);
33021 - return _FAIL;
33022 - }
33023 -
33024 - ptdlsinfo->setup_state = TDLS_LINKED_STATE;
33025 -
33026 - ptdls_sta->option=1;
33027 - rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_WRCR);
33028 -
33029 - if( ptdls_sta->tdls_sta_state & TDLS_RESPONDER_STATE )
33030 - {
33031 - ptdls_sta->tdls_sta_state |= TDLS_LINKED_STATE;
33032 - _cancel_timer_ex( &ptdls_sta->handshake_timer);
33033 -#ifdef CONFIG_TDLS_AUTOCHECKALIVE
33034 - _set_timer( &ptdls_sta->alive_timer1, TDLS_ALIVE_TIMER_PH1);
33035 -#endif //CONFIG_TDLS_AUTOSETUP
33036 - }
33037 -
33038 - if(prx_pkt_attrib->encrypt){
33039 - if(ptdls_sta->cam_entry==0){
33040 - ptdls_sta->dot118021XPrivacy=_AES_;
33041 - ptdls_sta->cam_entry=ptdlsinfo->cam_entry_to_write;
33042 - if(++ptdlsinfo->cam_entry_to_write>31)
33043 - ptdlsinfo->cam_entry_to_write=6;
33044 - }
33045 - rtw_setstakey_cmd(adapter, (u8*)ptdls_sta, _TRUE);
33046 - }
33047 -
33048 - return _FAIL;
33049 -
33050 -}
33051 -
33052 -sint On_TDLS_Setup_Cfm(_adapter *adapter, union recv_frame *precv_frame)
33053 -{
33054 - struct tdls_info *ptdlsinfo = &adapter->tdlsinfo;
33055 - struct sta_info *ptdls_sta= NULL;
33056 - struct sta_priv *pstapriv = &adapter->stapriv;
33057 - u8 *ptr = precv_frame->u.hdr.rx_data;
33058 - _irqL irqL;
33059 - struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
33060 - u8 *psa;
33061 - u16 stat_code;
33062 - sint parsing_length;
33063 - PNDIS_802_11_VARIABLE_IEs pIE;
33064 - u8 FIXED_IE =5;
33065 - u8 *pftie, *ptimeout_ie, *plinkid_ie, *prsnie, *pftie_mic, *ppairwise_cipher;
33066 - u16 j, pairwise_count;
33067 -
33068 - psa = get_sa(ptr);
33069 - ptdls_sta = rtw_get_stainfo(pstapriv, psa);
33070 -
33071 - //[+1]: payload type
33072 - ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;
33073 - parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
33074 - -prx_pkt_attrib->hdrlen
33075 - -prx_pkt_attrib->iv_len
33076 - -prx_pkt_attrib->icv_len
33077 - -LLC_HEADER_SIZE
33078 - -TYPE_LENGTH_FIELD_SIZE
33079 - -1
33080 - -FIXED_IE;
33081 - _rtw_memcpy(&stat_code, ptr+2, 2);
33082 -
33083 - if(stat_code!=0){
33084 - free_tdls_sta(adapter, ptdls_sta);
33085 - return _FAIL;
33086 - }
33087 -
33088 - if(prx_pkt_attrib->encrypt){
33089 - //parsing information element
33090 - for(j=FIXED_IE; j<parsing_length;){
33091 -
33092 - pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
33093 -
33094 - switch (pIE->ElementID)
33095 - {
33096 - case _RSN_IE_2_:
33097 - prsnie=(u8*)pIE;
33098 - break;
33099 - case _VENDOR_SPECIFIC_IE_:
33100 - break;
33101 - case _FTIE_:
33102 - pftie=(u8*)pIE;
33103 - break;
33104 - case _TIMEOUT_ITVL_IE_:
33105 - ptimeout_ie=(u8*)pIE;
33106 - break;
33107 - case _HT_EXTRA_INFO_IE_:
33108 - break;
33109 - case _LINK_ID_IE_:
33110 - plinkid_ie=(u8*)pIE;
33111 - break;
33112 - default:
33113 - break;
33114 - }
33115 -
33116 - j += (pIE->Length + 2);
33117 -
33118 - }
33119 -
33120 - //verify mic in FTIE MIC field
33121 - if(tdls_verify_mic(ptdls_sta->tpk.kck, 3, plinkid_ie, prsnie, ptimeout_ie, pftie)==0){ //0: Invalid, 1: Valid
33122 - free_tdls_sta(adapter, ptdls_sta);
33123 - return _FAIL;
33124 - }
33125 -
33126 - }
33127 -
33128 - ptdlsinfo->setup_state = TDLS_LINKED_STATE;
33129 - if( ptdls_sta->tdls_sta_state & TDLS_INITIATOR_STATE )
33130 - {
33131 - ptdls_sta->tdls_sta_state|=TDLS_LINKED_STATE;
33132 - _cancel_timer_ex( &ptdls_sta->handshake_timer);
33133 -#ifdef CONFIG_TDLS_AUTOCHECKALIVE
33134 - _set_timer( &ptdls_sta->alive_timer1, TDLS_ALIVE_TIMER_PH1);
33135 -#endif //CONFIG_TDLS_AUTOCHECKALIVE
33136 - }
33137 -
33138 - ptdls_sta->option=1; //write RCR DATA BIT
33139 - rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_WRCR);
33140 -
33141 - //Write cam
33142 - //TDLS encryption(if needed) will always be CCMP
33143 - if(prx_pkt_attrib->encrypt){
33144 - if(ptdls_sta->cam_entry==0){
33145 - ptdls_sta->dot118021XPrivacy=_AES_;
33146 - ptdls_sta->cam_entry=ptdlsinfo->cam_entry_to_write;
33147 - if(++ptdlsinfo->cam_entry_to_write>31)
33148 - ptdlsinfo->cam_entry_to_write=6;
33149 - }
33150 - rtw_setstakey_cmd(adapter, (u8*)ptdls_sta, _TRUE);
33151 - }
33152 -
33153 - return _FAIL;
33154 -
33155 -}
33156 -
33157 -sint On_TDLS_Dis_Req(_adapter *adapter, union recv_frame *precv_frame)
33158 -{
33159 - struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
33160 - struct sta_priv *pstapriv = &adapter->stapriv;
33161 - struct sta_info *psta_ap;
33162 - u8 *ptr = precv_frame->u.hdr.rx_data;
33163 - sint parsing_length; //frame body length, without icv_len
33164 - PNDIS_802_11_VARIABLE_IEs pIE;
33165 - u8 FIXED_IE = 3, *dst, *pdialog = NULL;
33166 - u16 j;
33167 -
33168 - ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len + LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE + 1;
33169 - pdialog=ptr+2;
33170 -
33171 - parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
33172 - -prx_pkt_attrib->hdrlen
33173 - -prx_pkt_attrib->iv_len
33174 - -prx_pkt_attrib->icv_len
33175 - -LLC_HEADER_SIZE
33176 - -TYPE_LENGTH_FIELD_SIZE
33177 - -1
33178 - -FIXED_IE;
33179 -
33180 - //parsing information element
33181 - for(j=FIXED_IE; j<parsing_length;){
33182 -
33183 - pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
33184 -
33185 - switch (pIE->ElementID)
33186 - {
33187 - case _LINK_ID_IE_:
33188 - psta_ap = rtw_get_stainfo(pstapriv, pIE->data);
33189 - if(psta_ap == NULL)
33190 - {
33191 - goto exit;
33192 - }
33193 - dst = pIE->data + 12;
33194 - if( (MacAddr_isBcst(dst) == _FALSE) && (_rtw_memcmp(myid(&(adapter->eeprompriv)), dst, 6) == _FALSE) )
33195 - {
33196 - goto exit;
33197 - }
33198 - break;
33199 - default:
33200 - break;
33201 - }
33202 -
33203 - j += (pIE->Length + 2);
33204 -
33205 - }
33206 -
33207 - //check frame contents
33208 -
33209 - issue_tdls_dis_rsp(adapter, precv_frame, *(pdialog) );
33210 -
33211 -exit:
33212 -
33213 - return _FAIL;
33214 -
33215 -}
33216 -
33217 -sint On_TDLS_Teardown(_adapter *adapter, union recv_frame *precv_frame)
33218 -{
33219 - u8 *psa;
33220 - u8 *ptr = precv_frame->u.hdr.rx_data;
33221 - struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
33222 - struct mlme_ext_priv *pmlmeext = &(adapter->mlmeextpriv);
33223 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
33224 - struct sta_priv *pstapriv = &adapter->stapriv;
33225 - struct sta_info *ptdls_sta= NULL;
33226 - _irqL irqL;
33227 -
33228 - psa = get_sa(ptr);
33229 -
33230 - ptdls_sta = rtw_get_stainfo(pstapriv, psa);
33231 - if(ptdls_sta!=NULL){
33232 -
33233 - if(ptdls_sta->tdls_sta_state & TDLS_CH_SWITCH_ON_STATE){
33234 - ptdls_sta->option =3;
33235 - rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_CS_OFF);
33236 - }
33237 - free_tdls_sta(adapter, ptdls_sta);
33238 - }
33239 -
33240 - return _FAIL;
33241 -
33242 -}
33243 -
33244 -u8 TDLS_check_ch_state(uint state){
33245 - if( (state & TDLS_CH_SWITCH_ON_STATE) &&
33246 - (state & TDLS_AT_OFF_CH_STATE) &&
33247 - (state & TDLS_PEER_AT_OFF_STATE) ){
33248 -
33249 - if(state & TDLS_PEER_SLEEP_STATE)
33250 - return 2; //U-APSD + ch. switch
33251 - else
33252 - return 1; //ch. switch
33253 - }else
33254 - return 0;
33255 -}
33256 -
33257 -//we process buffered data for 1. U-APSD, 2. ch. switch, 3. U-APSD + ch. switch here
33258 -sint On_TDLS_Peer_Traffic_Rsp(_adapter *adapter, union recv_frame *precv_frame)
33259 -{
33260 - struct tdls_info *ptdlsinfo = &adapter->tdlsinfo;
33261 - struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
33262 - struct rx_pkt_attrib *pattrib = & precv_frame->u.hdr.attrib;
33263 - struct sta_priv *pstapriv = &adapter->stapriv;
33264 - //get peer sta infomation
33265 - struct sta_info *ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->src);
33266 - u8 wmmps_ac=0, state=TDLS_check_ch_state(ptdls_sta->tdls_sta_state);
33267 - int i;
33268 -
33269 - ptdls_sta->sta_stats.rx_data_pkts++;
33270 -
33271 - //receive peer traffic response frame, sleeping STA wakes up
33272 - //ptdls_sta->tdls_sta_state &= ~(TDLS_PEER_SLEEP_STATE);
33273 - process_wmmps_data( adapter, precv_frame);
33274 -
33275 - // if noticed peer STA wakes up by receiving peer traffic response
33276 - // and we want to do channel swtiching, then we will transmit channel switch request first
33277 - if(ptdls_sta->tdls_sta_state & TDLS_APSD_CHSW_STATE){
33278 - issue_tdls_ch_switch_req(adapter, pattrib->src);
33279 - ptdls_sta->tdls_sta_state &= ~(TDLS_APSD_CHSW_STATE);
33280 - return _FAIL;
33281 - }
33282 -
33283 - //check 4-AC queue bit
33284 - if(ptdls_sta->uapsd_vo || ptdls_sta->uapsd_vi || ptdls_sta->uapsd_be || ptdls_sta->uapsd_bk)
33285 - wmmps_ac=1;
33286 -
33287 - //if it's a direct link and have buffered frame
33288 - if(ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE){
33289 - if(wmmps_ac && state)
33290 - {
33291 - _irqL irqL;
33292 - _list *xmitframe_plist, *xmitframe_phead;
33293 - struct xmit_frame *pxmitframe=NULL;
33294 -
33295 - _enter_critical_bh(&ptdls_sta->sleep_q.lock, &irqL);
33296 -
33297 - xmitframe_phead = get_list_head(&ptdls_sta->sleep_q);
33298 - xmitframe_plist = get_next(xmitframe_phead);
33299 -
33300 - //transmit buffered frames
33301 - while ((rtw_end_of_queue_search(xmitframe_phead, xmitframe_plist)) == _FALSE)
33302 - {
33303 - pxmitframe = LIST_CONTAINOR(xmitframe_plist, struct xmit_frame, list);
33304 - xmitframe_plist = get_next(xmitframe_plist);
33305 - rtw_list_delete(&pxmitframe->list);
33306 -
33307 - ptdls_sta->sleepq_len--;
33308 - if(ptdls_sta->sleepq_len>0){
33309 - pxmitframe->attrib.mdata = 1;
33310 - pxmitframe->attrib.eosp = 0;
33311 - }else{
33312 - pxmitframe->attrib.mdata = 0;
33313 - pxmitframe->attrib.eosp = 1;
33314 - }
33315 - //pxmitframe->attrib.triggered = 1; //maybe doesn't need in TDLS
33316 - if(adapter->HalFunc.hal_xmit(adapter, pxmitframe) == _TRUE)
33317 - {
33318 - rtw_os_xmit_complete(adapter, pxmitframe);
33319 - }
33320 -
33321 - }
33322 -
33323 - if(ptdls_sta->sleepq_len==0)
33324 - {
33325 - DBG_871X("no buffered packets to xmit\n");
33326 - //on U-APSD + CH. switch state, when there is no buffered date to xmit,
33327 - // we should go back to base channel
33328 - if(state==2){
33329 - ptdls_sta->option = 3;
33330 - rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_CS_OFF);
33331 - }else if(ptdls_sta->tdls_sta_state&TDLS_SW_OFF_STATE){
33332 - ptdls_sta->tdls_sta_state &= ~(TDLS_SW_OFF_STATE);
33333 - ptdlsinfo->candidate_ch= pmlmeext->cur_channel;
33334 - issue_tdls_ch_switch_req(adapter, pattrib->src);
33335 - DBG_8192C("issue tdls ch switch req back to base channel\n");
33336 - }
33337 -
33338 - }
33339 - else
33340 - {
33341 - DBG_871X("error!psta->sleepq_len=%d\n", ptdls_sta->sleepq_len);
33342 - ptdls_sta->sleepq_len=0;
33343 - }
33344 -
33345 - _exit_critical_bh(&ptdls_sta->sleep_q.lock, &irqL);
33346 -
33347 - }
33348 -
33349 - }
33350 -
33351 - return _FAIL;
33352 -}
33353 -
33354 -sint On_TDLS_Ch_Switch_Req(_adapter *adapter, union recv_frame *precv_frame)
33355 -{
33356 - struct sta_info *ptdls_sta= NULL;
33357 - struct sta_priv *pstapriv = &adapter->stapriv;
33358 - u8 *ptr = precv_frame->u.hdr.rx_data;
33359 - struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
33360 - u8 *psa;
33361 - sint parsing_length;
33362 - PNDIS_802_11_VARIABLE_IEs pIE;
33363 - u8 FIXED_IE =3;
33364 - u16 j;
33365 - struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
33366 -
33367 - psa = get_sa(ptr);
33368 - ptdls_sta = rtw_get_stainfo(pstapriv, psa);
33369 -
33370 - //[+1]: payload type
33371 - ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;
33372 - parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
33373 - -prx_pkt_attrib->hdrlen
33374 - -prx_pkt_attrib->iv_len
33375 - -prx_pkt_attrib->icv_len
33376 - -LLC_HEADER_SIZE
33377 - -TYPE_LENGTH_FIELD_SIZE
33378 - -1
33379 - -FIXED_IE;
33380 -
33381 - ptdls_sta->off_ch = *(ptr+2);
33382 -
33383 - //parsing information element
33384 - for(j=FIXED_IE; j<parsing_length;){
33385 -
33386 - pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
33387 -
33388 - switch (pIE->ElementID)
33389 - {
33390 - case _COUNTRY_IE_:
33391 - break;
33392 - case _CH_SWTICH_ANNOUNCE_:
33393 - break;
33394 - case _LINK_ID_IE_:
33395 - break;
33396 - case _CH_SWITCH_TIMING_:
33397 - _rtw_memcpy(&ptdls_sta->ch_switch_time, pIE->data, 2);
33398 - _rtw_memcpy(&ptdls_sta->ch_switch_timeout, pIE->data+2, 2);
33399 - default:
33400 - break;
33401 +
33402 + wakeup_sta_to_xmit(padapter, psta);
33403 +
33404 + //DBG_871X("to wakeup, sta_dz_bitmap=%x\n", pstapriv->sta_dz_bitmap);
33405 + }
33406 }
33407
33408 - j += (pIE->Length + 2);
33409 -
33410 }
33411
33412 - //todo: check status
33413 - ptdls_sta->stat_code=0;
33414 - ptdls_sta->tdls_sta_state |= TDLS_CH_SWITCH_ON_STATE;
33415 -
33416 - issue_nulldata(adapter, 1);
33417 -
33418 - issue_tdls_ch_switch_rsp(adapter, psa);
33419 -
33420 - DBG_8192C("issue tdls channel switch response\n");
33421 -
33422 - if((ptdls_sta->tdls_sta_state & TDLS_CH_SWITCH_ON_STATE) && ptdls_sta->off_ch==pmlmeext->cur_channel){
33423 - DBG_8192C("back to base channel\n");
33424 - ptdls_sta->option=7;
33425 - rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_BASE_CH);
33426 - }else{
33427 - ptdls_sta->option=6;
33428 - rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_OFF_CH);
33429 - }
33430 - return _FAIL;
33431 +#endif
33432 }
33433
33434 -sint On_TDLS_Ch_Switch_Rsp(_adapter *adapter, union recv_frame *precv_frame)
33435 +void process_wmmps_data(_adapter *padapter, union recv_frame *precv_frame);
33436 +void process_wmmps_data(_adapter *padapter, union recv_frame *precv_frame)
33437 {
33438 - struct sta_info *ptdls_sta= NULL;
33439 - struct sta_priv *pstapriv = &adapter->stapriv;
33440 - u8 *ptr = precv_frame->u.hdr.rx_data;
33441 - struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
33442 - u8 *psa;
33443 - sint parsing_length;
33444 - PNDIS_802_11_VARIABLE_IEs pIE;
33445 - u8 FIXED_IE =4;
33446 - u16 stat_code, j, switch_time, switch_timeout;
33447 - struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
33448 -
33449 - psa = get_sa(ptr);
33450 - ptdls_sta = rtw_get_stainfo(pstapriv, psa);
33451 -
33452 - //if channel switch is running and receiving Unsolicited TDLS Channel Switch Response,
33453 - //it will go back to base channel and terminate this channel switch procedure
33454 - if(ptdls_sta->tdls_sta_state & TDLS_CH_SWITCH_ON_STATE ){
33455 - if(pmlmeext->cur_channel==ptdls_sta->off_ch){
33456 - DBG_8192C("back to base channel\n");
33457 - ptdls_sta->option=7;
33458 - rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_OFF_CH);
33459 - }else{
33460 - DBG_8192C("receive unsolicited channel switch response \n");
33461 - ptdls_sta->option=3;
33462 - rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_CS_OFF);
33463 - }
33464 - return _FAIL;
33465 - }
33466 +#ifdef CONFIG_AP_MODE
33467 + struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.attrib;
33468 + struct sta_priv *pstapriv = &padapter->stapriv;
33469 + struct sta_info *psta=NULL;
33470
33471 - //avoiding duplicated or unconditional ch. switch. rsp
33472 - if((ptdls_sta->tdls_sta_state & TDLS_CH_SW_INITIATOR_STATE) != TDLS_CH_SW_INITIATOR_STATE)
33473 - return _FAIL;
33474 + psta = rtw_get_stainfo(pstapriv, pattrib->src);
33475
33476 - //[+1]: payload type
33477 - ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;
33478 - parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
33479 - -prx_pkt_attrib->hdrlen
33480 - -prx_pkt_attrib->iv_len
33481 - -prx_pkt_attrib->icv_len
33482 - -LLC_HEADER_SIZE
33483 - -TYPE_LENGTH_FIELD_SIZE
33484 - -1
33485 - -FIXED_IE;
33486 + if(!psta) return;
33487
33488 - _rtw_memcpy(&stat_code, ptr+2, 2);
33489 +#ifdef CONFIG_TDLS
33490 + if( !(psta->tdls_sta_state & TDLS_LINKED_STATE ) )
33491 + {
33492 +#endif //CONFIG_TDLS
33493
33494 - if(stat_code!=0){
33495 - return _FAIL;
33496 - }
33497 -
33498 - //parsing information element
33499 - for(j=FIXED_IE; j<parsing_length;){
33500 + if(!psta->qos_option)
33501 + return;
33502
33503 - pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
33504 + if(!(psta->qos_info&0xf))
33505 + return;
33506 +
33507 +#ifdef CONFIG_TDLS
33508 + }
33509 +#endif //CONFIG_TDLS
33510
33511 - switch (pIE->ElementID)
33512 + if(psta->state&WIFI_SLEEP_STATE)
33513 + {
33514 + u8 wmmps_ac=0;
33515 +
33516 + switch(pattrib->priority)
33517 {
33518 - case _LINK_ID_IE_:
33519 + case 1:
33520 + case 2:
33521 + wmmps_ac = psta->uapsd_bk&BIT(1);
33522 break;
33523 - case _CH_SWITCH_TIMING_:
33524 - _rtw_memcpy(&switch_time, pIE->data, 2);
33525 - if(switch_time > ptdls_sta->ch_switch_time)
33526 - _rtw_memcpy(&ptdls_sta->ch_switch_time, &switch_time, 2);
33527 -
33528 - _rtw_memcpy(&switch_timeout, pIE->data+2, 2);
33529 - if(switch_timeout > ptdls_sta->ch_switch_timeout)
33530 - _rtw_memcpy(&ptdls_sta->ch_switch_timeout, &switch_timeout, 2);
33531 -
33532 - default:
33533 + case 4:
33534 + case 5:
33535 + wmmps_ac = psta->uapsd_vi&BIT(1);
33536 + break;
33537 + case 6:
33538 + case 7:
33539 + wmmps_ac = psta->uapsd_vo&BIT(1);
33540 break;
33541 + case 0:
33542 + case 3:
33543 + default:
33544 + wmmps_ac = psta->uapsd_be&BIT(1);
33545 + break;
33546 }
33547
33548 - j += (pIE->Length + 2);
33549 -
33550 + if(wmmps_ac)
33551 + {
33552 + if(psta->sleepq_ac_len>0)
33553 + {
33554 + //process received triggered frame
33555 + xmit_delivery_enabled_frames(padapter, psta);
33556 + }
33557 + else
33558 + {
33559 + //issue one qos null frame with More data bit = 0 and the EOSP bit set (=1)
33560 + issue_qos_nulldata(padapter, psta->hwaddr, (u16)pattrib->priority, 0, 0);
33561 + }
33562 + }
33563 +
33564 }
33565
33566 - ptdls_sta->tdls_sta_state &= ~(TDLS_CH_SW_INITIATOR_STATE);
33567 - ptdls_sta->tdls_sta_state |=TDLS_CH_SWITCH_ON_STATE;
33568 -
33569 - //goto set_channel_workitem_callback()
33570 - ptdls_sta->option=6;
33571 - rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_OFF_CH);
33572 +
33573 +#endif
33574
33575 - return _FAIL;
33576 }
33577
33578 +#ifdef CONFIG_TDLS
33579 sint OnTDLS(_adapter *adapter, union recv_frame *precv_frame)
33580 {
33581 struct rx_pkt_attrib *pattrib = & precv_frame->u.hdr.attrib;
33582 sint ret = _SUCCESS;
33583 u8 *paction = get_recvframe_data(precv_frame);
33584 + u8 category_field = 1;
33585 +#ifdef CONFIG_WFD
33586 + u8 WFA_OUI[3] = { 0x50, 0x6f, 0x9a };
33587 +#endif //CONFIG_WFD
33588 + struct tdls_info *ptdlsinfo = &(adapter->tdlsinfo);
33589 +
33590 + //point to action field
33591 + paction+=pattrib->hdrlen
33592 + + pattrib->iv_len
33593 + + SNAP_SIZE
33594 + + ETH_TYPE_LEN
33595 + + PAYLOAD_TYPE_LEN
33596 + + category_field;
33597
33598 - //point to action field, [+8]: snap+ether_type, [+1]: payload_type, [+1]: category field
33599 - paction+=pattrib->hdrlen + pattrib->iv_len+8+1+1;
33600 + if(ptdlsinfo->enable == 0)
33601 + {
33602 + DBG_871X("recv tdls frame, "
33603 + "but tdls haven't enabled\n");
33604 + ret = _FAIL;
33605 + return ret;
33606 + }
33607
33608 switch(*paction){
33609 case TDLS_SETUP_REQUEST:
33610 @@ -1763,6 +1024,26 @@ sint OnTDLS(_adapter *adapter, union rec
33611 DBG_871X("recv tdls channel switch response frame\n");
33612 ret=On_TDLS_Ch_Switch_Rsp(adapter, precv_frame);
33613 break;
33614 +#ifdef CONFIG_WFD
33615 + case 0x50: //First byte of WFA OUI
33616 + if( _rtw_memcmp(WFA_OUI, (paction), 3) )
33617 + {
33618 + if( *(paction + 3) == 0x04) //Probe request frame
33619 + {
33620 + //WFDTDLS: for sigma test, do not setup direct link automatically
33621 + ptdlsinfo->dev_discovered = 1;
33622 + DBG_871X("recv tunneled probe request frame\n");
33623 + issue_tunneled_probe_rsp(adapter, precv_frame);
33624 + }
33625 + if( *(paction + 3) == 0x05) //Probe response frame
33626 + {
33627 + //WFDTDLS: for sigma test, do not setup direct link automatically
33628 + ptdlsinfo->dev_discovered = 1;
33629 + DBG_871X("recv tunneled probe response frame\n");
33630 + }
33631 + }
33632 + break;
33633 +#endif //CONFIG_WFD
33634 default:
33635 DBG_871X("receive TDLS frame but not supported\n");
33636 ret=_FAIL;
33637 @@ -1773,9 +1054,10 @@ exit:
33638 return ret;
33639
33640 }
33641 -#endif
33642 +#endif //CONFIG_TDLS
33643
33644 -static void count_rx_stats(_adapter *padapter, union recv_frame *prframe, struct sta_info*sta)
33645 +void count_rx_stats(_adapter *padapter, union recv_frame *prframe, struct sta_info*sta);
33646 +void count_rx_stats(_adapter *padapter, union recv_frame *prframe, struct sta_info*sta)
33647 {
33648 int sz;
33649 struct sta_info *psta = NULL;
33650 @@ -1791,7 +1073,7 @@ static void count_rx_stats(_adapter *pad
33651 if( (!MacAddr_isBcst(pattrib->dst)) && (!IS_MCAST(pattrib->dst))){
33652 padapter->mlmepriv.LinkDetectInfo.NumRxUnicastOkInPeriod++;
33653 }
33654 -
33655 +
33656 if(sta)
33657 psta = sta;
33658 else
33659 @@ -1807,7 +1089,12 @@ static void count_rx_stats(_adapter *pad
33660
33661 }
33662
33663 -static sint sta2sta_data_frame(
33664 +sint sta2sta_data_frame(
33665 + _adapter *adapter,
33666 + union recv_frame *precv_frame,
33667 + struct sta_info**psta
33668 +);
33669 +sint sta2sta_data_frame(
33670 _adapter *adapter,
33671 union recv_frame *precv_frame,
33672 struct sta_info**psta
33673 @@ -1817,7 +1104,6 @@ static sint sta2sta_data_frame(
33674 sint ret = _SUCCESS;
33675 struct rx_pkt_attrib *pattrib = & precv_frame->u.hdr.attrib;
33676 struct sta_priv *pstapriv = &adapter->stapriv;
33677 - struct security_priv *psecuritypriv = &adapter->securitypriv;
33678 struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
33679 u8 *mybssid = get_bssid(pmlmepriv);
33680 u8 *myhwaddr = myid(&adapter->eeprompriv);
33681 @@ -1828,9 +1114,8 @@ static sint sta2sta_data_frame(
33682 struct tdls_info *ptdlsinfo = &adapter->tdlsinfo;
33683 struct sta_info *ptdls_sta=NULL;
33684 u8 *psnap_type=ptr+pattrib->hdrlen + pattrib->iv_len+SNAP_SIZE;
33685 - //frame body located after [+2]: ether-type, [+1]: payload type
33686 - u8 *pframe_body = psnap_type+2+1;
33687 -#endif
33688 + u8 *pframe_body = psnap_type + ETH_TYPE_LEN + PAYLOAD_TYPE_LEN;
33689 +#endif //CONFIG_TDLS
33690
33691 _func_enter_;
33692
33693 @@ -1863,18 +1148,16 @@ _func_enter_;
33694 else if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) == _TRUE)
33695 {
33696 #ifdef CONFIG_TDLS
33697 -
33698 //direct link data transfer
33699 - if(ptdlsinfo->setup_state & TDLS_LINKED_STATE){
33700 + if(ptdlsinfo->setup_state == TDLS_LINKED_STATE){
33701 ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->src);
33702 if(ptdls_sta==NULL)
33703 {
33704 ret=_FAIL;
33705 goto exit;
33706 }
33707 - else if((ptdls_sta->tdls_sta_state&TDLS_LINKED_STATE)==TDLS_LINKED_STATE)
33708 + else if(ptdls_sta->tdls_sta_state&TDLS_LINKED_STATE)
33709 {
33710 -
33711 //drop QoS-SubType Data, including QoS NULL, excluding QoS-Data
33712 if( (GetFrameSubType(ptr) & WIFI_QOS_DATA_TYPE )== WIFI_QOS_DATA_TYPE)
33713 {
33714 @@ -1916,9 +1199,9 @@ _func_enter_;
33715 {
33716 DBG_871X("TDLS: recv peer null frame with pwr bit 1\n");
33717 ptdls_sta->tdls_sta_state|=TDLS_PEER_SLEEP_STATE;
33718 + }
33719 // it would be triggered when we are off channel and receiving NULL DATA
33720 // we can confirm that peer STA is at off channel
33721 - }
33722 else if(ptdls_sta->tdls_sta_state&TDLS_CH_SWITCH_ON_STATE)
33723 {
33724 if((ptdls_sta->tdls_sta_state & TDLS_PEER_AT_OFF_STATE) != TDLS_PEER_AT_OFF_STATE)
33725 @@ -1944,7 +1227,7 @@ _func_enter_;
33726
33727 }
33728 else
33729 -#endif
33730 +#endif //CONFIG_TDLS
33731 {
33732 // For Station mode, sa and bssid should always be BSSID, and DA is my mac-address
33733 if(!_rtw_memcmp(pattrib->bssid, pattrib->src, ETH_ALEN) )
33734 @@ -1956,7 +1239,6 @@ _func_enter_;
33735
33736 sta_addr = pattrib->bssid;
33737 }
33738 -
33739 }
33740 else if(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
33741 {
33742 @@ -2002,6 +1284,12 @@ _func_enter_;
33743 else
33744 *psta = rtw_get_stainfo(pstapriv, sta_addr); // get ap_info
33745
33746 +#ifdef CONFIG_TDLS
33747 + if(ptdls_sta != NULL)
33748 + *psta = ptdls_sta;
33749 +#endif //CONFIG_TDLS
33750 +
33751 +
33752 if (*psta == NULL) {
33753 RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("can't get psta under sta2sta_data_frame ; drop pkt\n"));
33754 #ifdef CONFIG_MP_INCLUDED
33755 @@ -2018,8 +1306,11 @@ _func_exit_;
33756
33757 }
33758
33759 -
33760 -static sint ap2sta_data_frame(
33761 +sint ap2sta_data_frame(
33762 + _adapter *adapter,
33763 + union recv_frame *precv_frame,
33764 + struct sta_info**psta );
33765 +sint ap2sta_data_frame(
33766 _adapter *adapter,
33767 union recv_frame *precv_frame,
33768 struct sta_info**psta )
33769 @@ -2028,7 +1319,6 @@ static sint ap2sta_data_frame(
33770 struct rx_pkt_attrib *pattrib = & precv_frame->u.hdr.attrib;
33771 sint ret = _SUCCESS;
33772 struct sta_priv *pstapriv = &adapter->stapriv;
33773 - struct security_priv *psecuritypriv = &adapter->securitypriv;
33774 struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
33775 u8 *mybssid = get_bssid(pmlmepriv);
33776 u8 *myhwaddr = myid(&adapter->eeprompriv);
33777 @@ -2042,31 +1332,6 @@ _func_enter_;
33778 )
33779 {
33780
33781 - // if NULL-frame, drop packet
33782 - if ((GetFrameSubType(ptr)) == WIFI_DATA_NULL)
33783 - {
33784 - RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,(" NULL frame \n"));
33785 - #ifdef DBG_RX_DROP_FRAME
33786 - DBG_871X("DBG_RX_DROP_FRAME %s NULL frame\n", __FUNCTION__);
33787 - #endif
33788 - ret= _FAIL;
33789 - goto exit;
33790 - }
33791 -
33792 - //drop QoS-SubType Data, including QoS NULL, excluding QoS-Data
33793 - if( (GetFrameSubType(ptr) & WIFI_QOS_DATA_TYPE )== WIFI_QOS_DATA_TYPE)
33794 - {
33795 - if(GetFrameSubType(ptr)&(BIT(4)|BIT(5)|BIT(6)))
33796 - {
33797 - #ifdef DBG_RX_DROP_FRAME
33798 - DBG_871X("DBG_RX_DROP_FRAME %s drop QoS-SubType Data, including QoS NULL, excluding QoS-Data\n", __FUNCTION__);
33799 - #endif
33800 - ret= _FAIL;
33801 - goto exit;
33802 - }
33803 -
33804 - }
33805 -
33806 // filter packets that SA is myself or multicast or broadcast
33807 if (_rtw_memcmp(myhwaddr, pattrib->src, ETH_ALEN)){
33808 RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,(" SA==myself \n"));
33809 @@ -2084,19 +1349,11 @@ _func_enter_;
33810 // da should be for me
33811 if((!_rtw_memcmp(myhwaddr, pattrib->dst, ETH_ALEN))&& (!bmcast))
33812 {
33813 - RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,(" ap2sta_data_frame: compare DA fail; DA= %x:%x:%x:%x:%x:%x \n",
33814 - pattrib->dst[0],
33815 - pattrib->dst[1],
33816 - pattrib->dst[2],
33817 - pattrib->dst[3],
33818 - pattrib->dst[4],
33819 - pattrib->dst[5]));
33820 + RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,
33821 + (" ap2sta_data_frame: compare DA fail; DA="MAC_FMT"\n", MAC_ARG(pattrib->dst)));
33822 #ifdef DBG_RX_DROP_FRAME
33823 - DBG_871X("DBG_RX_DROP_FRAME %s compare DA fail; DA= %x:%x:%x:%x:%x:%x \n", __FUNCTION__,
33824 - pattrib->dst[0],pattrib->dst[1],pattrib->dst[2],
33825 - pattrib->dst[3],pattrib->dst[4],pattrib->dst[5]);
33826 + DBG_871X("DBG_RX_DROP_FRAME %s DA="MAC_FMT"\n", __func__, MAC_ARG(pattrib->dst));
33827 #endif
33828 -
33829 ret= _FAIL;
33830 goto exit;
33831 }
33832 @@ -2107,30 +1364,21 @@ _func_enter_;
33833 _rtw_memcmp(mybssid, "\x0\x0\x0\x0\x0\x0", ETH_ALEN) ||
33834 (!_rtw_memcmp(pattrib->bssid, mybssid, ETH_ALEN)) )
33835 {
33836 - RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,(" ap2sta_data_frame: compare BSSID fail ; BSSID=%x:%x:%x:%x:%x:%x\n",
33837 - pattrib->bssid[0],
33838 - pattrib->bssid[1],
33839 - pattrib->bssid[2],
33840 - pattrib->bssid[3],
33841 - pattrib->bssid[4],
33842 - pattrib->bssid[5]));
33843 -
33844 - RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("mybssid= %x:%x:%x:%x:%x:%x\n",
33845 - mybssid[0],
33846 - mybssid[1],
33847 - mybssid[2],
33848 - mybssid[3],
33849 - mybssid[4],
33850 - mybssid[5]));
33851 -
33852 + RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,
33853 + (" ap2sta_data_frame: compare BSSID fail ; BSSID="MAC_FMT"\n", MAC_ARG(pattrib->bssid)));
33854 + RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("mybssid="MAC_FMT"\n", MAC_ARG(mybssid)));
33855 #ifdef DBG_RX_DROP_FRAME
33856 - DBG_871X("DBG_RX_DROP_FRAME %s compare BSSID fail ; BSSID=%x:%x:%x:%x:%x:%x, mybssid= %x:%x:%x:%x:%x:%x\n", __FUNCTION__,
33857 - pattrib->bssid[0], pattrib->bssid[1], pattrib->bssid[2],
33858 - pattrib->bssid[3], pattrib->bssid[4], pattrib->bssid[5],
33859 - mybssid[0], mybssid[1], mybssid[2],
33860 - mybssid[3], mybssid[4], mybssid[5]);
33861 + DBG_871X("DBG_RX_DROP_FRAME %s BSSID="MAC_FMT", mybssid="MAC_FMT"\n",
33862 + __FUNCTION__, MAC_ARG(pattrib->bssid), MAC_ARG(mybssid));
33863 + DBG_871X( "this adapter = %d, buddy adapter = %d\n", adapter->adapter_type, adapter->pbuddy_adapter->adapter_type );
33864 #endif
33865
33866 + if(!bmcast)
33867 + {
33868 + DBG_871X("issue_deauth to the nonassociated ap=" MAC_FMT " for the reason(7)\n", MAC_ARG(pattrib->bssid));
33869 + issue_deauth(adapter, pattrib->bssid, WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA);
33870 + }
33871 +
33872 ret= _FAIL;
33873 goto exit;
33874 }
33875 @@ -2149,6 +1397,16 @@ _func_enter_;
33876 goto exit;
33877 }
33878
33879 + if ((GetFrameSubType(ptr) & WIFI_QOS_DATA_TYPE) == WIFI_QOS_DATA_TYPE) {
33880 + }
33881 +
33882 + if (GetFrameSubType(ptr) & BIT(6)) {
33883 + /* No data, will not indicate to upper layer, temporily count it here */
33884 + count_rx_stats(adapter, precv_frame, *psta);
33885 + ret = RTW_RX_HANDLED;
33886 + goto exit;
33887 + }
33888 +
33889 }
33890 else if ((check_fwstate(pmlmepriv, WIFI_MP_STATE) == _TRUE) &&
33891 (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) )
33892 @@ -2175,8 +1433,25 @@ _func_enter_;
33893
33894
33895 }
33896 + else if (check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
33897 + {
33898 + /* Special case */
33899 + ret = RTW_RX_HANDLED;
33900 + goto exit;
33901 + }
33902 else
33903 {
33904 + if(_rtw_memcmp(myhwaddr, pattrib->dst, ETH_ALEN)&& (!bmcast))
33905 + {
33906 + *psta = rtw_get_stainfo(pstapriv, pattrib->bssid); // get sta_info
33907 + if (*psta == NULL)
33908 + {
33909 + DBG_871X("issue_deauth to the ap=" MAC_FMT " for the reason(7)\n", MAC_ARG(pattrib->bssid));
33910 +
33911 + issue_deauth(adapter, pattrib->bssid, WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA);
33912 + }
33913 + }
33914 +
33915 ret = _FAIL;
33916 #ifdef DBG_RX_DROP_FRAME
33917 DBG_871X("DBG_RX_DROP_FRAME %s fw_state:0x%x\n", __FUNCTION__, get_fwstate(pmlmepriv));
33918 @@ -2191,7 +1466,11 @@ _func_exit_;
33919
33920 }
33921
33922 -static sint sta2ap_data_frame(
33923 +sint sta2ap_data_frame(
33924 + _adapter *adapter,
33925 + union recv_frame *precv_frame,
33926 + struct sta_info**psta );
33927 +sint sta2ap_data_frame(
33928 _adapter *adapter,
33929 union recv_frame *precv_frame,
33930 struct sta_info**psta )
33931 @@ -2199,7 +1478,6 @@ static sint sta2ap_data_frame(
33932 u8 *ptr = precv_frame->u.hdr.rx_data;
33933 struct rx_pkt_attrib *pattrib = & precv_frame->u.hdr.attrib;
33934 struct sta_priv *pstapriv = &adapter->stapriv;
33935 - struct security_priv *psecuritypriv = &adapter->securitypriv;
33936 struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
33937 unsigned char *mybssid = get_bssid(pmlmepriv);
33938 sint ret=_SUCCESS;
33939 @@ -2208,71 +1486,48 @@ _func_enter_;
33940
33941 if (check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
33942 {
33943 - //For AP mode, RA=BSSID, TX=STA(SRC_ADDR), A3=DST_ADDR
33944 - if(!_rtw_memcmp(pattrib->bssid, mybssid, ETH_ALEN))
33945 - {
33946 - ret= _FAIL;
33947 - goto exit;
33948 - }
33949 -
33950 - *psta = rtw_get_stainfo(pstapriv, pattrib->src);
33951 -
33952 - if (*psta == NULL)
33953 - {
33954 - RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("can't get psta under AP_MODE; drop pkt\n"));
33955 - ret= _FAIL;
33956 - goto exit;
33957 - }
33958 -
33959 -
33960 - process_pwrbit_data(adapter, precv_frame);
33961 -
33962 -
33963 - // if NULL-frame, drop packet
33964 - if ((GetFrameSubType(ptr)) == WIFI_DATA_NULL)
33965 - {
33966 - RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,(" NULL frame \n"));
33967 -
33968 - //temporily count it here
33969 - count_rx_stats(adapter, precv_frame, *psta);
33970 -
33971 - //process_null_data(adapter, precv_frame);
33972 - //process_pwrbit_data(adapter, precv_frame);
33973 -
33974 -
33975 - ret= _FAIL;
33976 - goto exit;
33977 - }
33978 + //For AP mode, RA=BSSID, TX=STA(SRC_ADDR), A3=DST_ADDR
33979 + if(!_rtw_memcmp(pattrib->bssid, mybssid, ETH_ALEN))
33980 + {
33981 + ret= _FAIL;
33982 + goto exit;
33983 + }
33984
33985 - //drop QoS-SubType Data, including QoS NULL, excluding QoS-Data
33986 - if( (GetFrameSubType(ptr) & WIFI_QOS_DATA_TYPE )== WIFI_QOS_DATA_TYPE)
33987 - {
33988 + *psta = rtw_get_stainfo(pstapriv, pattrib->src);
33989 + if (*psta == NULL)
33990 + {
33991 + RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("can't get psta under AP_MODE; drop pkt\n"));
33992 + DBG_871X("issue_deauth to sta=" MAC_FMT " for the reason(7)\n", MAC_ARG(pattrib->src));
33993
33994 - if(GetFrameSubType(ptr)==WIFI_QOS_DATA_NULL)
33995 - {
33996 - RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,(" QoS NULL frame \n"));
33997 + issue_deauth(adapter, pattrib->src, WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA);
33998
33999 - //temporily count it here
34000 - count_rx_stats(adapter, precv_frame, *psta);
34001 + ret = RTW_RX_HANDLED;
34002 + goto exit;
34003 + }
34004
34005 - //process_null_data(adapter, precv_frame);
34006 + process_pwrbit_data(adapter, precv_frame);
34007
34008 - ret= _FAIL;
34009 - goto exit;
34010 - }
34011 -
34012 - process_wmmps_data(adapter, precv_frame);
34013 -
34014 - /*
34015 - if(GetFrameSubType(ptr)&(BIT(4)|BIT(5)|BIT(6)))
34016 - {
34017 - process_null_data(adapter, precv_frame);
34018 - ret= _FAIL;
34019 - goto exit;
34020 - }
34021 - */
34022 - }
34023 + if ((GetFrameSubType(ptr) & WIFI_QOS_DATA_TYPE) == WIFI_QOS_DATA_TYPE) {
34024 + process_wmmps_data(adapter, precv_frame);
34025 + }
34026
34027 + if (GetFrameSubType(ptr) & BIT(6)) {
34028 + /* No data, will not indicate to upper layer, temporily count it here */
34029 + count_rx_stats(adapter, precv_frame, *psta);
34030 + ret = RTW_RX_HANDLED;
34031 + goto exit;
34032 + }
34033 + }
34034 + else {
34035 + u8 *myhwaddr = myid(&adapter->eeprompriv);
34036 + if (!_rtw_memcmp(pattrib->ra, myhwaddr, ETH_ALEN)) {
34037 + ret = RTW_RX_HANDLED;
34038 + goto exit;
34039 + }
34040 + DBG_871X("issue_deauth to sta=" MAC_FMT " for the reason(7)\n", MAC_ARG(pattrib->src));
34041 + issue_deauth(adapter, pattrib->src, WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA);
34042 + ret = RTW_RX_HANDLED;
34043 + goto exit;
34044 }
34045
34046 exit:
34047 @@ -2283,7 +1538,8 @@ _func_exit_;
34048
34049 }
34050
34051 -static sint validate_recv_ctrl_frame(_adapter *padapter, union recv_frame *precv_frame)
34052 +sint validate_recv_ctrl_frame(_adapter *padapter, union recv_frame *precv_frame);
34053 +sint validate_recv_ctrl_frame(_adapter *padapter, union recv_frame *precv_frame)
34054 {
34055 #ifdef CONFIG_AP_MODE
34056 struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.attrib;
34057 @@ -2346,13 +1602,22 @@ static sint validate_recv_ctrl_frame(_ad
34058 if(wmmps_ac)
34059 return _FAIL;
34060
34061 + if(psta->state & WIFI_STA_ALIVE_CHK_STATE)
34062 + {
34063 + DBG_871X("%s alive check-rx ps-poll\n", __func__);
34064 + psta->expire_to = pstapriv->expire_to;
34065 + psta->state ^= WIFI_STA_ALIVE_CHK_STATE;
34066 + }
34067 +
34068 if((psta->state&WIFI_SLEEP_STATE) && (pstapriv->sta_dz_bitmap&BIT(psta->aid)))
34069 {
34070 _irqL irqL;
34071 _list *xmitframe_plist, *xmitframe_phead;
34072 struct xmit_frame *pxmitframe=NULL;
34073 + struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
34074
34075 - _enter_critical_bh(&psta->sleep_q.lock, &irqL);
34076 + //_enter_critical_bh(&psta->sleep_q.lock, &irqL);
34077 + _enter_critical_bh(&pxmitpriv->lock, &irqL);
34078
34079 xmitframe_phead = get_list_head(&psta->sleep_q);
34080 xmitframe_plist = get_next(xmitframe_phead);
34081 @@ -2376,10 +1641,15 @@ static sint validate_recv_ctrl_frame(_ad
34082
34083 //DBG_871X("handling ps-poll, q_len=%d, tim=%x\n", psta->sleepq_len, pstapriv->tim_bitmap);
34084
34085 - if(padapter->HalFunc.hal_xmit(padapter, pxmitframe) == _TRUE)
34086 +#if 0
34087 + _exit_critical_bh(&psta->sleep_q.lock, &irqL);
34088 + if(rtw_hal_xmit(padapter, pxmitframe) == _TRUE)
34089 {
34090 rtw_os_xmit_complete(padapter, pxmitframe);
34091 }
34092 + _enter_critical_bh(&psta->sleep_q.lock, &irqL);
34093 +#endif
34094 + rtw_hal_xmitframe_enqueue(padapter, pxmitframe);
34095
34096 if(psta->sleepq_len==0)
34097 {
34098 @@ -2392,15 +1662,24 @@ static sint validate_recv_ctrl_frame(_ad
34099 update_beacon(padapter, _TIM_IE_, NULL, _FALSE);
34100 }
34101
34102 + //_exit_critical_bh(&psta->sleep_q.lock, &irqL);
34103 + _exit_critical_bh(&pxmitpriv->lock, &irqL);
34104 +
34105 }
34106 else
34107 {
34108 + //_exit_critical_bh(&psta->sleep_q.lock, &irqL);
34109 + _exit_critical_bh(&pxmitpriv->lock, &irqL);
34110 +
34111 //DBG_871X("no buffered packets to xmit\n");
34112 if(pstapriv->tim_bitmap&BIT(psta->aid))
34113 {
34114 if(psta->sleepq_len==0)
34115 {
34116 DBG_871X("no buffered packets to xmit\n");
34117 +
34118 + //issue nulldata with More data bit = 0 to indicate we have no buffered packets
34119 + issue_nulldata(padapter, psta->hwaddr, 0, 0, 0);
34120 }
34121 else
34122 {
34123 @@ -2415,9 +1694,7 @@ static sint validate_recv_ctrl_frame(_ad
34124 update_beacon(padapter, _TIM_IE_, NULL, _FALSE);
34125 }
34126
34127 - }
34128 -
34129 - _exit_critical_bh(&psta->sleep_q.lock, &irqL);
34130 + }
34131
34132 }
34133
34134 @@ -2429,37 +1706,58 @@ static sint validate_recv_ctrl_frame(_ad
34135
34136 }
34137
34138 -static sint validate_recv_mgnt_frame(_adapter *adapter, union recv_frame *precv_frame)
34139 +union recv_frame* recvframe_chk_defrag(PADAPTER padapter, union recv_frame *precv_frame);
34140 +sint validate_recv_mgnt_frame(PADAPTER padapter, union recv_frame *precv_frame);
34141 +sint validate_recv_mgnt_frame(PADAPTER padapter, union recv_frame *precv_frame)
34142 {
34143 - struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
34144 + //struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
34145
34146 RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("+validate_recv_mgnt_frame\n"));
34147
34148 #if 0
34149 if(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
34150 {
34151 -#ifdef CONFIG_NATIVEAP_MLME
34152 - mgt_dispatcher(adapter, precv_frame);
34153 +#ifdef CONFIG_NATIVEAP_MLME
34154 + mgt_dispatcher(padapter, precv_frame);
34155 #else
34156 - rtw_hostapd_mlme_rx(adapter, precv_frame);
34157 -#endif
34158 + rtw_hostapd_mlme_rx(padapter, precv_frame);
34159 +#endif
34160 }
34161 else
34162 {
34163 - mgt_dispatcher(adapter, precv_frame);
34164 + mgt_dispatcher(padapter, precv_frame);
34165 }
34166 #endif
34167
34168 + precv_frame = recvframe_chk_defrag(padapter, precv_frame);
34169 + if (precv_frame == NULL) {
34170 + RT_TRACE(_module_rtl871x_recv_c_, _drv_notice_,("%s: fragment packet\n",__FUNCTION__));
34171 + return _SUCCESS;
34172 + }
34173 +
34174 {
34175 //for rx pkt statistics
34176 - struct sta_info *psta = rtw_get_stainfo(&adapter->stapriv, GetAddr2Ptr(precv_frame->u.hdr.rx_data));
34177 - if(psta)
34178 + struct sta_info *psta = rtw_get_stainfo(&padapter->stapriv, GetAddr2Ptr(precv_frame->u.hdr.rx_data));
34179 + if (psta) {
34180 psta->sta_stats.rx_mgnt_pkts++;
34181 + if (GetFrameSubType(precv_frame->u.hdr.rx_data) == WIFI_BEACON)
34182 + psta->sta_stats.rx_beacon_pkts++;
34183 + else if (GetFrameSubType(precv_frame->u.hdr.rx_data) == WIFI_PROBEREQ)
34184 + psta->sta_stats.rx_probereq_pkts++;
34185 + else if (GetFrameSubType(precv_frame->u.hdr.rx_data) == WIFI_PROBERSP) {
34186 + if (_rtw_memcmp(padapter->eeprompriv.mac_addr, GetAddr1Ptr(precv_frame->u.hdr.rx_data), ETH_ALEN) == _TRUE)
34187 + psta->sta_stats.rx_probersp_pkts++;
34188 + else if (is_broadcast_mac_addr(GetAddr1Ptr(precv_frame->u.hdr.rx_data))
34189 + || is_multicast_mac_addr(GetAddr1Ptr(precv_frame->u.hdr.rx_data)))
34190 + psta->sta_stats.rx_probersp_bm_pkts++;
34191 + else
34192 + psta->sta_stats.rx_probersp_uo_pkts++;
34193 + }
34194 + }
34195 }
34196
34197 -
34198 #ifdef CONFIG_INTEL_PROXIM
34199 - if(adapter->proximity.proxim_on==_TRUE)
34200 + if(padapter->proximity.proxim_on==_TRUE)
34201 {
34202 struct rx_pkt_attrib * pattrib=&precv_frame->u.hdr.attrib;
34203 struct recv_stat* prxstat=( struct recv_stat * ) precv_frame->u.hdr.rx_head ;
34204 @@ -2505,32 +1803,28 @@ static sint validate_recv_mgnt_frame(_ad
34205 pattrib->priority=0;
34206 pattrib->hdrlen = pattrib->to_fr_ds==3 ? 30 : 24;
34207
34208 - adapter->proximity.proxim_rx(adapter,precv_frame);
34209 + padapter->proximity.proxim_rx(padapter,precv_frame);
34210 }
34211 #endif
34212 - mgt_dispatcher(adapter, precv_frame);
34213 -
34214 + mgt_dispatcher(padapter, precv_frame);
34215
34216 return _SUCCESS;
34217
34218 }
34219
34220 -
34221 -static sint validate_recv_data_frame(_adapter *adapter, union recv_frame *precv_frame)
34222 +sint validate_recv_data_frame(_adapter *adapter, union recv_frame *precv_frame);
34223 +sint validate_recv_data_frame(_adapter *adapter, union recv_frame *precv_frame)
34224 {
34225 - int res;
34226 u8 bretry;
34227 u8 *psa, *pda, *pbssid;
34228 struct sta_info *psta = NULL;
34229 u8 *ptr = precv_frame->u.hdr.rx_data;
34230 struct rx_pkt_attrib *pattrib = & precv_frame->u.hdr.attrib;
34231 - struct sta_priv *pstapriv = &adapter->stapriv;
34232 struct security_priv *psecuritypriv = &adapter->securitypriv;
34233 sint ret = _SUCCESS;
34234 #ifdef CONFIG_TDLS
34235 struct tdls_info *ptdlsinfo = &adapter->tdlsinfo;
34236 - struct sta_info *ptdls_sta = NULL;
34237 -#endif
34238 +#endif //CONFIG_TDLS
34239
34240 _func_enter_;
34241
34242 @@ -2554,40 +1848,40 @@ _func_enter_;
34243 case 0:
34244 _rtw_memcpy(pattrib->ra, pda, ETH_ALEN);
34245 _rtw_memcpy(pattrib->ta, psa, ETH_ALEN);
34246 - res= sta2sta_data_frame(adapter, precv_frame, &psta);
34247 + ret = sta2sta_data_frame(adapter, precv_frame, &psta);
34248 break;
34249
34250 case 1:
34251 _rtw_memcpy(pattrib->ra, pda, ETH_ALEN);
34252 _rtw_memcpy(pattrib->ta, pbssid, ETH_ALEN);
34253 - res= ap2sta_data_frame(adapter, precv_frame, &psta);
34254 + ret = ap2sta_data_frame(adapter, precv_frame, &psta);
34255 break;
34256
34257 case 2:
34258 _rtw_memcpy(pattrib->ra, pbssid, ETH_ALEN);
34259 _rtw_memcpy(pattrib->ta, psa, ETH_ALEN);
34260 - res= sta2ap_data_frame(adapter, precv_frame, &psta);
34261 + ret = sta2ap_data_frame(adapter, precv_frame, &psta);
34262 break;
34263
34264 case 3:
34265 _rtw_memcpy(pattrib->ra, GetAddr1Ptr(ptr), ETH_ALEN);
34266 _rtw_memcpy(pattrib->ta, GetAddr2Ptr(ptr), ETH_ALEN);
34267 - res=_FAIL;
34268 + ret =_FAIL;
34269 RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,(" case 3\n"));
34270 break;
34271
34272 default:
34273 - res=_FAIL;
34274 + ret =_FAIL;
34275 break;
34276
34277 }
34278
34279 - if(res==_FAIL){
34280 - //RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,(" after to_fr_ds_chk; res = fail \n"));
34281 + if(ret ==_FAIL){
34282 #ifdef DBG_RX_DROP_FRAME
34283 - DBG_871X("DBG_RX_DROP_FRAME %s case:%d, res:%d\n", __FUNCTION__, pattrib->to_fr_ds, res);
34284 + DBG_871X("DBG_RX_DROP_FRAME %s case:%d, res:%d\n", __FUNCTION__, pattrib->to_fr_ds, ret);
34285 #endif
34286 - ret= res;
34287 + goto exit;
34288 + } else if (ret == RTW_RX_HANDLED) {
34289 goto exit;
34290 }
34291
34292 @@ -2604,11 +1898,12 @@ _func_enter_;
34293
34294
34295 pattrib->amsdu=0;
34296 + pattrib->ack_policy = 0;
34297 //parsing QC field
34298 if(pattrib->qos == 1)
34299 {
34300 pattrib->priority = GetPriority((ptr + 24));
34301 - pattrib->ack_policy =GetAckpolicy((ptr + 24));
34302 + pattrib->ack_policy = GetAckpolicy((ptr + 24));
34303 pattrib->amsdu = GetAMsdu((ptr + 24));
34304 pattrib->hdrlen = pattrib->to_fr_ds==3 ? 32 : 26;
34305
34306 @@ -2638,7 +1933,8 @@ _func_enter_;
34307 ret= _FAIL;
34308 goto exit;
34309 }
34310 -#ifdef CONFIG_TDLS
34311 +
34312 +#if 0
34313 if(psta->tdls_sta_state & TDLS_LINKED_STATE )
34314 {
34315 if(psta->dot118021XPrivacy==_AES_)
34316 @@ -2649,14 +1945,18 @@ _func_enter_;
34317 if(pattrib->privacy){
34318
34319 RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("validate_recv_data_frame:pattrib->privacy=%x\n", pattrib->privacy));
34320 - RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("\n ^^^^^^^^^^^IS_MCAST(pattrib->ra(0x%02x))=%d^^^^^^^^^^^^^^^6\n", pattrib->ra[0],IS_MCAST(pattrib->ra)));
34321 + RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("\n ^^^^^^^^^^^IS_MCAST(pattrib->ra(0x%02x))=%d^^^^^^^^^^^^^^^6\n", pattrib->ra[0],IS_MCAST(pattrib->ra)));
34322
34323 #ifdef CONFIG_TDLS
34324 - if(ptdls_sta==NULL)
34325 -#endif
34326 - GET_ENCRY_ALGO(psecuritypriv, psta, pattrib->encrypt, IS_MCAST(pattrib->ra));
34327 + if((psta->tdls_sta_state & TDLS_LINKED_STATE) && (psta->dot118021XPrivacy==_AES_))
34328 + {
34329 + pattrib->encrypt=psta->dot118021XPrivacy;
34330 + }
34331 + else
34332 +#endif //CONFIG_TDLS
34333 + GET_ENCRY_ALGO(psecuritypriv, psta, pattrib->encrypt, IS_MCAST(pattrib->ra));
34334
34335 - RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("\n pattrib->encrypt=%d\n",pattrib->encrypt));
34336 + RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("\n pattrib->encrypt=%d\n",pattrib->encrypt));
34337
34338 SET_ICE_IV_LEN(pattrib->iv_len, pattrib->icv_len, pattrib->encrypt);
34339 }
34340 @@ -2665,15 +1965,137 @@ _func_enter_;
34341 pattrib->encrypt = 0;
34342 pattrib->iv_len = pattrib->icv_len = 0;
34343 }
34344 -
34345 -exit:
34346 -
34347 -_func_exit_;
34348 -
34349 - return ret;
34350 +
34351 +exit:
34352 +
34353 +_func_exit_;
34354 +
34355 + return ret;
34356 +}
34357 +
34358 +#ifdef CONFIG_IEEE80211W
34359 +static sint validate_80211w_mgmt(_adapter *adapter, union recv_frame *precv_frame)
34360 +{
34361 + struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
34362 + struct rx_pkt_attrib *pattrib = & precv_frame->u.hdr.attrib;
34363 + u8 *ptr = precv_frame->u.hdr.rx_data;
34364 + u8 type;
34365 + u8 subtype;
34366 +
34367 + type = GetFrameType(ptr);
34368 + subtype = GetFrameSubType(ptr); //bit(7)~bit(2)
34369 +
34370 + //only support station mode
34371 + if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) && check_fwstate(pmlmepriv, _FW_LINKED)
34372 + && adapter->securitypriv.binstallBIPkey == _TRUE)
34373 + {
34374 + //unicast management frame decrypt
34375 + if(pattrib->privacy && !(IS_MCAST(GetAddr1Ptr(ptr))) &&
34376 + (subtype == WIFI_DEAUTH || subtype == WIFI_DISASSOC || subtype == WIFI_ACTION))
34377 + {
34378 + u8 *ppp, *mgmt_DATA;
34379 + u32 data_len=0;
34380 + ppp = GetAddr2Ptr(ptr);
34381 +
34382 + pattrib->bdecrypted = 0;
34383 + pattrib->encrypt = _AES_;
34384 + pattrib->hdrlen = sizeof(struct rtw_ieee80211_hdr_3addr);
34385 + //set iv and icv length
34386 + SET_ICE_IV_LEN(pattrib->iv_len, pattrib->icv_len, pattrib->encrypt);
34387 + _rtw_memcpy(pattrib->ra, GetAddr1Ptr(ptr), ETH_ALEN);
34388 + _rtw_memcpy(pattrib->ta, GetAddr2Ptr(ptr), ETH_ALEN);
34389 + //actual management data frame body
34390 + data_len = pattrib->pkt_len - pattrib->hdrlen - pattrib->iv_len - pattrib->icv_len;
34391 + mgmt_DATA = rtw_zmalloc(data_len);
34392 + if(mgmt_DATA == NULL)
34393 + {
34394 + DBG_871X("%s mgmt allocate fail !!!!!!!!!\n", __FUNCTION__);
34395 + goto validate_80211w_fail;
34396 + }
34397 + /*//dump the packet content before decrypt
34398 + {
34399 + int pp;
34400 + printk("pattrib->pktlen = %d =>", pattrib->pkt_len);
34401 + for(pp=0;pp< pattrib->pkt_len; pp++)
34402 + printk(" %02x ", ptr[pp]);
34403 + printk("\n");
34404 + }*/
34405 +
34406 + precv_frame = decryptor(adapter, precv_frame);
34407 + //save actual management data frame body
34408 + _rtw_memcpy(mgmt_DATA, ptr+pattrib->hdrlen+pattrib->iv_len, data_len);
34409 + //overwrite the iv field
34410 + _rtw_memcpy(ptr+pattrib->hdrlen, mgmt_DATA, data_len);
34411 + //remove the iv and icv length
34412 + pattrib->pkt_len = pattrib->pkt_len - pattrib->iv_len - pattrib->icv_len;
34413 + rtw_mfree(mgmt_DATA, data_len);
34414 + /*//print packet content after decryption
34415 + {
34416 + int pp;
34417 + printk("after decryption pattrib->pktlen = %d @@=>", pattrib->pkt_len);
34418 + for(pp=0;pp< pattrib->pkt_len; pp++)
34419 + printk(" %02x ", ptr[pp]);
34420 + printk("\n");
34421 + }*/
34422 + if(!precv_frame)
34423 + {
34424 + DBG_871X("%s mgmt descrypt fail !!!!!!!!!\n", __FUNCTION__);
34425 + goto validate_80211w_fail;
34426 + }
34427 + }
34428 + else if(IS_MCAST(GetAddr1Ptr(ptr)) &&
34429 + (subtype == WIFI_DEAUTH || subtype == WIFI_DISASSOC))
34430 + {
34431 + sint BIP_ret = _SUCCESS;
34432 + //verify BIP MME IE of broadcast/multicast de-auth/disassoc packet
34433 + BIP_ret = rtw_BIP_verify(adapter, (u8 * )precv_frame);
34434 + if(BIP_ret == _FAIL)
34435 + {
34436 + //DBG_871X("802.11w BIP verify fail\n");
34437 + goto validate_80211w_fail;
34438 + }
34439 + else if(BIP_ret == RTW_RX_HANDLED)
34440 + {
34441 + //DBG_871X("802.11w recv none protected packet\n");
34442 + //issue sa query request
34443 + issue_action_SA_Query(adapter, NULL, 0, 0);
34444 + goto validate_80211w_fail;
34445 + }
34446 + }//802.11w protect
34447 + else
34448 + {
34449 + if(subtype == WIFI_ACTION)
34450 + {
34451 + //according 802.11-2012 standard, these five types are not robust types
34452 + if( ptr[WLAN_HDR_A3_LEN] != RTW_WLAN_CATEGORY_PUBLIC &&
34453 + ptr[WLAN_HDR_A3_LEN] != RTW_WLAN_CATEGORY_HT &&
34454 + ptr[WLAN_HDR_A3_LEN] != RTW_WLAN_CATEGORY_UNPROTECTED_WNM &&
34455 + ptr[WLAN_HDR_A3_LEN] != RTW_WLAN_CATEGORY_SELF_PROTECTED &&
34456 + ptr[WLAN_HDR_A3_LEN] != RTW_WLAN_CATEGORY_P2P)
34457 + {
34458 + DBG_871X("action frame category=%d should robust\n", ptr[WLAN_HDR_A3_LEN]);
34459 + goto validate_80211w_fail;
34460 + }
34461 + }
34462 + else if(subtype == WIFI_DEAUTH || subtype == WIFI_DISASSOC)
34463 + {
34464 + DBG_871X("802.11w recv none protected packet\n");
34465 + //issue sa query request
34466 + issue_action_SA_Query(adapter, NULL, 0, 0);
34467 + goto validate_80211w_fail;
34468 + }
34469 + }
34470 + }
34471 + return _SUCCESS;
34472 +
34473 +validate_80211w_fail:
34474 + return _FAIL;
34475 +
34476 }
34477 +#endif //CONFIG_IEEE80211W
34478
34479 -static sint validate_recv_frame(_adapter *adapter, union recv_frame *precv_frame)
34480 +sint validate_recv_frame(_adapter *adapter, union recv_frame *precv_frame);
34481 +sint validate_recv_frame(_adapter *adapter, union recv_frame *precv_frame)
34482 {
34483 //shall check frame subtype, to / from ds, da, bssid
34484
34485 @@ -2700,7 +2122,9 @@ _func_enter_;
34486
34487 #ifdef CONFIG_FIND_BEST_CHANNEL
34488 if (pmlmeext->sitesurvey_res.state == SCAN_PROCESS) {
34489 - pmlmeext->channel_set[pmlmeext->sitesurvey_res.channel_idx].rx_count++;
34490 + int ch_set_idx = rtw_ch_set_search_ch(pmlmeext->channel_set, rtw_get_oper_ch(adapter));
34491 + if (ch_set_idx >= 0)
34492 + pmlmeext->channel_set[ch_set_idx].rx_count++;
34493 }
34494 #endif
34495
34496 @@ -2708,19 +2132,22 @@ _func_enter_;
34497 if(ptdlsinfo->ch_sensing==1 && ptdlsinfo->cur_channel !=0){
34498 ptdlsinfo->collect_pkt_num[ptdlsinfo->cur_channel-1]++;
34499 }
34500 -#endif
34501 +#endif //CONFIG_TDLS
34502
34503 -#if 0
34504 -DBG_871X("\n");
34505 -{
34506 - int i;
34507 - for(i=0; i<64;i=i+8)
34508 - DBG_871X("%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:", *(ptr+i),
34509 - *(ptr+i+1), *(ptr+i+2) ,*(ptr+i+3) ,*(ptr+i+4),*(ptr+i+5), *(ptr+i+6), *(ptr+i+7));
34510 +#ifdef RTK_DMP_PLATFORM
34511 + if ( 0 )
34512 + {
34513 + DBG_871X("++\n");
34514 + {
34515 + int i;
34516 + for(i=0; i<64;i=i+8)
34517 + DBG_871X("%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:", *(ptr+i),
34518 + *(ptr+i+1), *(ptr+i+2) ,*(ptr+i+3) ,*(ptr+i+4),*(ptr+i+5), *(ptr+i+6), *(ptr+i+7));
34519
34520 -}
34521 -DBG_871X("\n");
34522 -#endif
34523 + }
34524 + DBG_871X("--\n");
34525 + }
34526 +#endif //RTK_DMP_PLATFORM
34527
34528 //add version chk
34529 if(ver!=0){
34530 @@ -2780,6 +2207,14 @@ else if(pHalData->bDumpRxPkt ==3){
34531 switch (type)
34532 {
34533 case WIFI_MGT_TYPE: //mgnt
34534 +#ifdef CONFIG_IEEE80211W
34535 + if(validate_80211w_mgmt(adapter, precv_frame) == _FAIL)
34536 + {
34537 + retval = _FAIL;
34538 + break;
34539 + }
34540 +#endif //CONFIG_IEEE80211W
34541 +
34542 retval = validate_recv_mgnt_frame(adapter, precv_frame);
34543 if (retval == _FAIL)
34544 {
34545 @@ -2825,7 +2260,9 @@ _func_exit_;
34546
34547 //remove the wlanhdr and add the eth_hdr
34548 #if 1
34549 -static sint wlanhdr_to_ethhdr ( union recv_frame *precvframe)
34550 +
34551 +sint wlanhdr_to_ethhdr ( union recv_frame *precvframe);
34552 +sint wlanhdr_to_ethhdr ( union recv_frame *precvframe)
34553 {
34554 sint rmv_len;
34555 u16 eth_type, len;
34556 @@ -2868,6 +2305,10 @@ _func_enter_;
34557
34558 RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("\n===pattrib->hdrlen: %x, pattrib->iv_len:%x ===\n\n", pattrib->hdrlen, pattrib->iv_len));
34559
34560 + _rtw_memcpy(&eth_type, ptr+rmv_len, 2);
34561 + eth_type= ntohs((unsigned short )eth_type); //pattrib->ether_type
34562 + pattrib->eth_type = eth_type;
34563 +
34564 if ((check_fwstate(pmlmepriv, WIFI_MP_STATE) == _TRUE))
34565 {
34566 ptr += rmv_len ;
34567 @@ -3029,8 +2470,65 @@ _func_exit_;
34568 }
34569 #endif
34570
34571 +
34572 +#ifdef CONFIG_SDIO_HCI
34573 +#ifdef PLATFORM_LINUX
34574 +static void recvframe_expand_pkt(
34575 + PADAPTER padapter,
34576 + union recv_frame *prframe)
34577 +{
34578 + struct recv_frame_hdr *pfhdr;
34579 + _pkt *ppkt;
34580 + u8 shift_sz;
34581 + u32 alloc_sz;
34582 +
34583 +
34584 + pfhdr = &prframe->u.hdr;
34585 +
34586 + // 6 is for IP header 8 bytes alignment in QoS packet case.
34587 + if (pfhdr->attrib.qos)
34588 + shift_sz = 6;
34589 + else
34590 + shift_sz = 0;
34591 +
34592 + // for first fragment packet, need to allocate
34593 + // (1536 + RXDESC_SIZE + drvinfo_sz) to reassemble packet
34594 + // 8 is for skb->data 8 bytes alignment.
34595 +// alloc_sz = _RND(1536 + RXDESC_SIZE + pfhdr->attrib.drvinfosize + shift_sz + 8, 128);
34596 + alloc_sz = 1664; // round (1536 + 24 + 32 + shift_sz + 8) to 128 bytes alignment
34597 +
34598 + //3 1. alloc new skb
34599 + // prepare extra space for 4 bytes alignment
34600 + ppkt = rtw_skb_alloc(alloc_sz);
34601 +
34602 + if (!ppkt) return; // no way to expand
34603 +
34604 + //3 2. Prepare new skb to replace & release old skb
34605 + // force ppkt->data at 8-byte alignment address
34606 + skb_reserve(ppkt, 8 - ((SIZE_PTR)ppkt->data & 7));
34607 + // force ip_hdr at 8-byte alignment address according to shift_sz
34608 + skb_reserve(ppkt, shift_sz);
34609 +
34610 + // copy data to new pkt
34611 + _rtw_memcpy(skb_put(ppkt, pfhdr->len), pfhdr->rx_data, pfhdr->len);
34612 +
34613 + rtw_skb_free(pfhdr->pkt);
34614 +
34615 + // attach new pkt to recvframe
34616 + pfhdr->pkt = ppkt;
34617 + pfhdr->rx_head = ppkt->head;
34618 + pfhdr->rx_data = ppkt->data;
34619 + pfhdr->rx_tail = skb_tail_pointer(ppkt);
34620 + pfhdr->rx_end = skb_end_pointer(ppkt);
34621 +}
34622 +#else
34623 +#warning "recvframe_expand_pkt not implement, defrag may crash system"
34624 +#endif
34625 +#endif
34626 +
34627 //perform defrag
34628 -static union recv_frame * recvframe_defrag(_adapter *adapter,_queue *defrag_q)
34629 +union recv_frame * recvframe_defrag(_adapter *adapter,_queue *defrag_q);
34630 +union recv_frame * recvframe_defrag(_adapter *adapter,_queue *defrag_q)
34631 {
34632 _list *plist, *phead;
34633 u8 *data,wlanhdr_offset;
34634 @@ -3060,6 +2558,10 @@ _func_enter_;
34635 return NULL;
34636 }
34637
34638 +#ifdef CONFIG_SDIO_HCI
34639 + recvframe_expand_pkt(adapter, prframe);
34640 +#endif
34641 +
34642 curfragnum++;
34643
34644 plist= get_list_head(defrag_q);
34645 @@ -3117,38 +2619,44 @@ _func_exit_;
34646 return prframe;
34647 }
34648
34649 -
34650 //check if need to defrag, if needed queue the frame to defrag_q
34651 -static union recv_frame * recvframe_chk_defrag(_adapter *padapter,union recv_frame* precv_frame)
34652 +union recv_frame* recvframe_chk_defrag(PADAPTER padapter, union recv_frame *precv_frame)
34653 {
34654 u8 ismfrag;
34655 u8 fragnum;
34656 u8 *psta_addr;
34657 struct recv_frame_hdr *pfhdr;
34658 - struct sta_info * psta;
34659 - struct sta_priv *pstapriv ;
34660 - _list *phead;
34661 - union recv_frame* prtnframe=NULL;
34662 + struct sta_info *psta;
34663 + struct sta_priv *pstapriv;
34664 + _list *phead;
34665 + union recv_frame *prtnframe = NULL;
34666 _queue *pfree_recv_queue, *pdefrag_q;
34667
34668 _func_enter_;
34669
34670 pstapriv = &padapter->stapriv;
34671
34672 - pfhdr=&precv_frame->u.hdr;
34673 + pfhdr = &precv_frame->u.hdr;
34674
34675 - pfree_recv_queue=&padapter->recvpriv.free_recv_queue;
34676 + pfree_recv_queue = &padapter->recvpriv.free_recv_queue;
34677
34678 //need to define struct of wlan header frame ctrl
34679 - ismfrag= pfhdr->attrib.mfrag;
34680 - fragnum=pfhdr->attrib.frag_num;
34681 + ismfrag = pfhdr->attrib.mfrag;
34682 + fragnum = pfhdr->attrib.frag_num;
34683
34684 - psta_addr=pfhdr->attrib.ta;
34685 - psta=rtw_get_stainfo(pstapriv, psta_addr);
34686 - if (psta==NULL)
34687 - pdefrag_q = NULL;
34688 + psta_addr = pfhdr->attrib.ta;
34689 + psta = rtw_get_stainfo(pstapriv, psta_addr);
34690 + if (psta == NULL)
34691 + {
34692 + u8 type = GetFrameType(pfhdr->rx_data);
34693 + if (type != WIFI_DATA_TYPE) {
34694 + psta = rtw_get_bcmc_stainfo(padapter);
34695 + pdefrag_q = &psta->sta_recvpriv.defrag_q;
34696 + } else
34697 + pdefrag_q = NULL;
34698 + }
34699 else
34700 - pdefrag_q=&psta->sta_recvpriv.defrag_q;
34701 + pdefrag_q = &psta->sta_recvpriv.defrag_q;
34702
34703 if ((ismfrag==0) && (fragnum==0))
34704 {
34705 @@ -3239,20 +2747,28 @@ _func_exit_;
34706
34707 }
34708
34709 +#define ENDIAN_FREE 1
34710
34711 -static int amsdu_to_msdu(_adapter *padapter, union recv_frame *prframe)
34712 +int amsdu_to_msdu(_adapter *padapter, union recv_frame *prframe);
34713 +int amsdu_to_msdu(_adapter *padapter, union recv_frame *prframe)
34714 {
34715 -#ifdef PLATFORM_LINUX //for amsdu TP improvement,Creator: Thomas
34716 +#if defined (PLATFORM_LINUX) || defined (PLATFORM_FREEBSD) //for amsdu TP improvement,Creator: Thomas
34717 int a_len, padding_len;
34718 u16 eth_type, nSubframe_Length;
34719 u8 nr_subframes, i;
34720 - unsigned char *data_ptr, *pdata;
34721 + unsigned char *pdata;
34722 struct rx_pkt_attrib *pattrib;
34723 +#ifndef PLATFORM_FREEBSD
34724 + unsigned char *data_ptr;
34725 _pkt *sub_skb,*subframes[MAX_SUBFRAME_COUNT];
34726 +#endif //PLATFORM_FREEBSD
34727 struct recv_priv *precvpriv = &padapter->recvpriv;
34728 _queue *pfree_recv_queue = &(precvpriv->free_recv_queue);
34729 int ret = _SUCCESS;
34730 -
34731 +#ifdef PLATFORM_FREEBSD
34732 + struct mbuf *sub_m=NULL, *subframes[MAX_SUBFRAME_COUNT];
34733 + u8 *ptr,offset;
34734 +#endif //PLATFORM_FREEBSD
34735 nr_subframes = 0;
34736
34737 pattrib = &prframe->u.hdr.attrib;
34738 @@ -3271,26 +2787,29 @@ static int amsdu_to_msdu(_adapter *padap
34739 while(a_len > ETH_HLEN) {
34740
34741 /* Offset 12 denote 2 mac address */
34742 - //nSubframe_Length = *((u16*)(pdata + 12));
34743 - //==m==>change the length order
34744 - //nSubframe_Length = (nSubframe_Length>>8) + (nSubframe_Length<<8);
34745 +#ifdef ENDIAN_FREE
34746 //nSubframe_Length = ntohs(*((u16*)(pdata + 12)));
34747 nSubframe_Length = RTW_GET_BE16(pdata + 12);
34748 -
34749 +#else // ENDIAN_FREE
34750 + nSubframe_Length = *((u16*)(pdata + 12));
34751 + //==m==>change the length order
34752 + nSubframe_Length = (nSubframe_Length>>8) + (nSubframe_Length<<8);
34753 //ntohs(nSubframe_Length);
34754 +#endif // ENDIAN_FREE
34755
34756 if( a_len < (ETHERNET_HEADER_SIZE + nSubframe_Length) ) {
34757 - DBG_8192C("nRemain_Length is %d and nSubframe_Length is : %d\n",a_len,nSubframe_Length);
34758 + DBG_871X("nRemain_Length is %d and nSubframe_Length is : %d\n",a_len,nSubframe_Length);
34759 goto exit;
34760 }
34761
34762 +#ifndef PLATFORM_FREEBSD
34763 /* move the data point to data content */
34764 pdata += ETH_HLEN;
34765 a_len -= ETH_HLEN;
34766
34767 /* Allocate new skb for releasing to upper layer */
34768 #ifdef CONFIG_SKB_COPY
34769 - sub_skb = dev_alloc_skb(nSubframe_Length + 12);
34770 + sub_skb = rtw_skb_alloc(nSubframe_Length + 12);
34771 if(sub_skb)
34772 {
34773 skb_reserve(sub_skb, 12);
34774 @@ -3298,26 +2817,43 @@ static int amsdu_to_msdu(_adapter *padap
34775 _rtw_memcpy(data_ptr, pdata, nSubframe_Length);
34776 }
34777 else
34778 - {
34779 #endif // CONFIG_SKB_COPY
34780 - sub_skb = skb_clone(prframe->u.hdr.pkt, GFP_ATOMIC);
34781 + {
34782 + sub_skb = rtw_skb_clone(prframe->u.hdr.pkt);
34783 if(sub_skb)
34784 {
34785 sub_skb->data = pdata;
34786 sub_skb->len = nSubframe_Length;
34787 - sub_skb->tail = sub_skb->data + nSubframe_Length;
34788 + skb_set_tail_pointer(sub_skb, nSubframe_Length);
34789 }
34790 else
34791 {
34792 - DBG_8192C("skb_clone() Fail!!! , nr_subframes = %d\n",nr_subframes);
34793 + DBG_871X("rtw_skb_clone() Fail!!! , nr_subframes = %d\n",nr_subframes);
34794 break;
34795 }
34796 }
34797
34798 +#else // PLATFORM_FREEBSD
34799 +
34800 + //PLATFORM_FREEBSD
34801 + //Allocate a mbuff,
34802 + //sub_m =m_devget(pdata, nSubframe_Length+12, 12, padapter->pifp,NULL);
34803 + sub_m =m_devget(pdata, nSubframe_Length+ETH_HLEN, ETHER_ALIGN, padapter->pifp,NULL);
34804 +
34805 + pdata += ETH_HLEN;
34806 + a_len -= ETH_HLEN;
34807 +#endif // PLATFORM_FREEBSD
34808 +
34809 +#ifndef PLATFORM_FREEBSD
34810 //sub_skb->dev = padapter->pnetdev;
34811 subframes[nr_subframes++] = sub_skb;
34812 +#else //PLATFORM_FREEBSD
34813 + //PLATFORM_FREEBSD
34814 + subframes[nr_subframes++] = sub_m;
34815 +#endif //PLATFORM_FREEBSD
34816 +
34817 if(nr_subframes >= MAX_SUBFRAME_COUNT) {
34818 - DBG_8192C("ParseSubframe(): Too many Subframes! Packets dropped!\n");
34819 + DBG_871X("ParseSubframe(): Too many Subframes! Packets dropped!\n");
34820 break;
34821 }
34822
34823 @@ -3338,11 +2874,15 @@ static int amsdu_to_msdu(_adapter *padap
34824 }
34825
34826 for(i=0; i<nr_subframes; i++){
34827 +#ifndef PLATFORM_FREEBSD
34828 sub_skb = subframes[i];
34829 /* convert hdr + possible LLC headers into Ethernet header */
34830 - //eth_type = (sub_skb->data[6] << 8) | sub_skb->data[7];
34831 +#ifdef ENDIAN_FREE
34832 //eth_type = ntohs(*(u16*)&sub_skb->data[6]);
34833 eth_type = RTW_GET_BE16(&sub_skb->data[6]);
34834 +#else // ENDIAN_FREE
34835 + eth_type = (sub_skb->data[6] << 8) | sub_skb->data[7];
34836 +#endif // ENDIAN_FREE
34837 if (sub_skb->len >= 8 &&
34838 ((_rtw_memcmp(sub_skb->data, rtw_rfc1042_header, SNAP_SIZE) &&
34839 eth_type != ETH_P_AARP && eth_type != ETH_P_IPX) ||
34840 @@ -3378,7 +2918,7 @@ static int amsdu_to_msdu(_adapter *padap
34841 #endif // (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 35))
34842
34843
34844 - if( br_port && (check_fwstate(pmlmepriv, WIFI_STATION_STATE|WIFI_ADHOC_STATE) == _TRUE) )
34845 + if( br_port && (check_fwstate(pmlmepriv, WIFI_STATION_STATE|WIFI_ADHOC_STATE) == _TRUE) )
34846 {
34847 int nat25_handle_frame(_adapter *priv, struct sk_buff *skb);
34848 if (nat25_handle_frame(padapter, sub_skb) == -1) {
34849 @@ -3389,7 +2929,7 @@ static int amsdu_to_msdu(_adapter *padap
34850 #if 1
34851 // bypass this frame to upper layer!!
34852 #else
34853 - dev_kfree_skb_any(sub_skb);
34854 + rtw_skb_free(sub_skb);
34855 continue;
34856 #endif
34857 }
34858 @@ -3407,10 +2947,74 @@ static int amsdu_to_msdu(_adapter *padap
34859 }
34860 #else /* !CONFIG_TCP_CSUM_OFFLOAD_RX */
34861 sub_skb->ip_summed = CHECKSUM_NONE;
34862 -#endif
34863 +#endif //CONFIG_TCP_CSUM_OFFLOAD_RX
34864 +
34865 + rtw_netif_rx(padapter->pnetdev, sub_skb);
34866 + }
34867 +#else //PLATFORM_FREEBSD
34868
34869 - netif_rx(sub_skb);
34870 + //PLATFORM_FREEBSD
34871 + sub_m = subframes[i];
34872 + ptr=mtod(sub_m, u8 *);
34873 + offset=ETH_HLEN;
34874 + /* convert hdr + possible LLC headers into Ethernet header */
34875 +#ifdef ENDIAN_FREE
34876 + eth_type = ntohs(*(u16*)&ptr[offset+6]);
34877 +#else // ENDIAN_FREE
34878 + eth_type = ( ptr[offset+6] << 8) | ptr[offset+7];
34879 +#endif // ENDIAN_FREE
34880 + if (sub_m->m_pkthdr.len >= ETH_HLEN+8 &&
34881 + ((_rtw_memcmp(ptr+ETH_HLEN, rtw_rfc1042_header, SNAP_SIZE) &&
34882 + eth_type != ETH_P_AARP && eth_type != ETH_P_IPX) ||
34883 + _rtw_memcmp(ptr+ETH_HLEN, rtw_bridge_tunnel_header, SNAP_SIZE) )) {
34884 + /* remove RFC1042 or Bridge-Tunnel encapsulation and replace EtherType */
34885 + offset+=SNAP_SIZE;
34886 + _rtw_memcpy(&ptr[offset-ETH_ALEN], pattrib->src, ETH_ALEN);
34887 + offset-=ETH_ALEN;
34888 + _rtw_memcpy(&ptr[offset-ETH_ALEN], pattrib->dst, ETH_ALEN);
34889 + offset-=ETH_ALEN;
34890 + } else {
34891 + u16 len;
34892 + /* Leave Ethernet header part of hdr and full payload */
34893 + len = htons(sub_m->m_pkthdr.len-offset);
34894 + _rtw_memcpy(&ptr[offset- 2], &len, 2);
34895 + offset-=2;
34896 + _rtw_memcpy(&ptr[offset-ETH_ALEN], pattrib->src, ETH_ALEN);
34897 + offset-=ETH_ALEN;
34898 + _rtw_memcpy(&ptr[offset-ETH_ALEN], pattrib->dst, ETH_ALEN);
34899 + offset-=ETH_ALEN;
34900 }
34901 +
34902 + m_adj(sub_m,offset);
34903 +
34904 + /* Indicat the packets to upper layer */
34905 + if (sub_m) {
34906 +
34907 +#if 0
34908 +#ifdef CONFIG_TCP_CSUM_OFFLOAD_RX
34909 + if ( (pattrib->tcpchk_valid == 1) && (pattrib->tcp_chkrpt == 1) ) {
34910 + sub_skb->ip_summed = CHECKSUM_UNNECESSARY;
34911 + } else {
34912 + sub_skb->ip_summed = CHECKSUM_NONE;
34913 + }
34914 +#else /* !CONFIG_TCP_CSUM_OFFLOAD_RX */
34915 + sub_skb->ip_summed = CHECKSUM_NONE;
34916 +#endif //CONFIG_TCP_CSUM_OFFLOAD_RX
34917 +#endif //0
34918 +
34919 + if ( ((u32)(mtod(sub_m, caddr_t) + 14) % 4) != 0)
34920 + printf("%s()-%d: mtod(sub_m) = %p\n", __FUNCTION__, __LINE__, mtod(sub_m, caddr_t));
34921 +#ifdef CONFIG_RX_INDICATE_QUEUE
34922 + IF_ENQUEUE(&precvpriv->rx_indicate_queue, sub_m);
34923 + if (_IF_QLEN(&precvpriv->rx_indicate_queue) <= 1) {
34924 + taskqueue_enqueue(taskqueue_thread, &precvpriv->rx_indicate_tasklet);
34925 + }
34926 +#else // CONFIG_RX_INDICATE_QUEUE
34927 + (*padapter->pifp->if_input)(padapter->pifp, sub_m);
34928 +#endif // CONFIG_RX_INDICATE_QUEUE
34929 + }
34930 +
34931 +#endif //PLATFORM_FREEBSD
34932 }
34933
34934 exit:
34935 @@ -3419,8 +3023,10 @@ exit:
34936 rtw_free_recvframe(prframe, pfree_recv_queue);//free this recv_frame
34937
34938 return ret;
34939 -#else
34940 +#else // || defined (PLATFORM_LINUX) || defined (PLATFORM_FREEBSD)
34941 +#ifdef PLATFORM_WINDOWS
34942 _irqL irql;
34943 +#endif //PLATFORM_WINDOWS
34944 unsigned char *ptr, *pdata, *pbuf, *psnap_type;
34945 union recv_frame *pnrframe, *pnrframe_new;
34946 int a_len, mv_len, padding_len;
34947 @@ -3433,7 +3039,7 @@ exit:
34948 int ret = _SUCCESS;
34949 #ifdef PLATFORM_WINDOWS
34950 struct recv_buf *precvbuf = prframe->u.hdr.precvbuf;
34951 -#endif
34952 +#endif //PLATFORM_WINDOWS
34953 a_len = prframe->u.hdr.len - prframe->u.hdr.attrib.hdrlen;
34954
34955 recvframe_pull(prframe, prframe->u.hdr.attrib.hdrlen);
34956 @@ -3557,7 +3163,7 @@ exit:
34957 NDIS_PER_PACKET_INFO_FROM_PACKET(pnrframe->u.hdr.pkt, Ieee8021QInfo) = VlanPriInfo.Value;
34958
34959 }
34960 -#endif
34961 +#endif //PLATFORM_OS_XP
34962
34963 pbuf = recvframe_pull(pnrframe, (mv_len-sizeof(struct ethhdr)));
34964
34965 @@ -3584,14 +3190,11 @@ exit:
34966
34967 _rtw_init_listhead(&pnrframe_new->u.hdr.list);
34968
34969 - #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)) // http://www.mail-archive.com/netdev@vger.kernel.org/msg17214.html
34970 - pskb_copy = dev_alloc_skb(copy_len+64);
34971 - #else
34972 - pskb_copy = netdev_alloc_skb(padapter->pnetdev, copy_len + 64);
34973 - #endif
34974 + pskb_copy = rtw_skb_alloc(copy_len+64);
34975 +
34976 if(pskb_copy==NULL)
34977 {
34978 - DBG_8192C("amsdu_to_msdu:can not all(ocate memory for skb copy\n");
34979 + DBG_871X("amsdu_to_msdu:can not all(ocate memory for skb copy\n");
34980 }
34981
34982 pnrframe_new->u.hdr.pkt = pskb_copy;
34983 @@ -3614,7 +3217,7 @@ exit:
34984 }
34985 else
34986 {
34987 - DBG_8192C("amsdu_to_msdu:can not allocate memory for pnrframe_new\n");
34988 + DBG_871X("amsdu_to_msdu:can not allocate memory for pnrframe_new\n");
34989 }
34990
34991 }
34992 @@ -3633,7 +3236,7 @@ exit:
34993
34994 }
34995
34996 -#else
34997 +#else // 0
34998
34999 //padding_len = (4) - ((type_len + ETH_HLEN)&(4-1));
35000
35001 @@ -3653,7 +3256,9 @@ exit:
35002 //pnrframe_new->u.hdr.precvbuf = precvbuf;//precvbuf is assigned before call rtw_init_recvframe()
35003 //rtw_init_recvframe(pnrframe_new, precvpriv);
35004 {
35005 +#ifdef PLATFORM_LINUX
35006 _pkt *pskb = pnrframe->u.hdr.pkt;
35007 +#endif //PLATFORM_LINUX
35008 _rtw_init_listhead(&pnrframe_new->u.hdr.list);
35009
35010 pnrframe_new->u.hdr.len=0;
35011 @@ -3661,9 +3266,9 @@ exit:
35012 #ifdef PLATFORM_LINUX
35013 if(pskb)
35014 {
35015 - pnrframe_new->u.hdr.pkt = skb_clone(pskb, GFP_ATOMIC);
35016 + pnrframe_new->u.hdr.pkt = rtw_skb_clone(pskb);
35017 }
35018 -#endif
35019 +#endif //PLATFORM_LINUX
35020
35021 }
35022
35023 @@ -3676,7 +3281,7 @@ exit:
35024 _enter_critical_bh(&precvbuf->recvbuf_lock, &irql);
35025 precvbuf->ref_cnt++;
35026 _exit_critical_bh(&precvbuf->recvbuf_lock, &irql);
35027 -#endif
35028 +#endif //PLATFORM_WINDOWS
35029
35030 }
35031 else
35032 @@ -3703,7 +3308,7 @@ exit:
35033 }
35034
35035
35036 -#endif
35037 +#endif // end defined (PLATFORM_LINUX) || defined (PLATFORM_FREEBSD)
35038
35039 }while(pnrframe);
35040
35041 @@ -3713,8 +3318,8 @@ exit:
35042 #endif
35043 }
35044
35045 -
35046 -static int check_indicate_seq(struct recv_reorder_ctrl *preorder_ctrl, u16 seq_num)
35047 +int check_indicate_seq(struct recv_reorder_ctrl *preorder_ctrl, u16 seq_num);
35048 +int check_indicate_seq(struct recv_reorder_ctrl *preorder_ctrl, u16 seq_num)
35049 {
35050 u8 wsize = preorder_ctrl->wsize_b;
35051 u16 wend = (preorder_ctrl->indicate_seq + wsize -1) & 0xFFF;//% 4096;
35052 @@ -3740,7 +3345,7 @@ static int check_indicate_seq(struct rec
35053 //DbgPrint("CheckRxTsIndicateSeq(): Packet Drop! IndicateSeq: %d, NewSeq: %d\n", precvpriv->indicate_seq, seq_num);
35054
35055 #ifdef DBG_RX_DROP_FRAME
35056 - DBG_871X("DBG_RX_DROP_FRAME %s IndicateSeq: %d, NewSeq: %d\n", __FUNCTION__,
35057 + DBG_871X("%s IndicateSeq: %d > NewSeq: %d\n", __FUNCTION__,
35058 preorder_ctrl->indicate_seq, seq_num);
35059 #endif
35060
35061 @@ -3783,8 +3388,8 @@ static int check_indicate_seq(struct rec
35062 return _TRUE;
35063 }
35064
35065 -
35066 -static int enqueue_reorder_recvframe(struct recv_reorder_ctrl *preorder_ctrl, union recv_frame *prframe)
35067 +int enqueue_reorder_recvframe(struct recv_reorder_ctrl *preorder_ctrl, union recv_frame *prframe);
35068 +int enqueue_reorder_recvframe(struct recv_reorder_ctrl *preorder_ctrl, union recv_frame *prframe)
35069 {
35070 struct rx_pkt_attrib *pattrib = &prframe->u.hdr.attrib;
35071 _queue *ppending_recvframe_queue = &preorder_ctrl->pending_recvframe_queue;
35072 @@ -3845,10 +3450,10 @@ static int enqueue_reorder_recvframe(str
35073
35074 }
35075
35076 -
35077 -static int recv_indicatepkts_in_order(_adapter *padapter, struct recv_reorder_ctrl *preorder_ctrl, int bforced)
35078 +int recv_indicatepkts_in_order(_adapter *padapter, struct recv_reorder_ctrl *preorder_ctrl, int bforced);
35079 +int recv_indicatepkts_in_order(_adapter *padapter, struct recv_reorder_ctrl *preorder_ctrl, int bforced)
35080 {
35081 - _irqL irql;
35082 + //_irqL irql;
35083 //u8 bcancelled;
35084 _list *phead, *plist;
35085 union recv_frame *prframe;
35086 @@ -3894,7 +3499,7 @@ static int recv_indicatepkts_in_order(_a
35087 // Prepare indication list and indication.
35088 // Check if there is any packet need indicate.
35089 while(!rtw_is_list_empty(phead))
35090 - {
35091 + {
35092
35093 prframe = LIST_CONTAINOR(plist, union recv_frame, u);
35094 pattrib = &prframe->u.hdr.attrib;
35095 @@ -3935,7 +3540,7 @@ static int recv_indicatepkts_in_order(_a
35096 //PlatformCancelTimer(Adapter, &pTS->RxPktPendingTimer);
35097 if(bforced!=_TRUE)
35098 {
35099 - //DBG_8192C("_cancel_timer(&preorder_ctrl->reordering_ctrl_timer, &bcancelled);\n");
35100 + //DBG_871X("_cancel_timer(&preorder_ctrl->reordering_ctrl_timer, &bcancelled);\n");
35101 _cancel_timer(&preorder_ctrl->reordering_ctrl_timer, &bcancelled);
35102 }
35103 }
35104 @@ -3952,14 +3557,14 @@ static int recv_indicatepkts_in_order(_a
35105 //DbgPrint("recv_indicatepkts_in_order, indicate_seq=%d, seq_num=%d\n", precvpriv->indicate_seq, pattrib->seq_num);
35106 if(!pattrib->amsdu)
35107 {
35108 - //DBG_8192C("recv_indicatepkts_in_order, amsdu!=1, indicate_seq=%d, seq_num=%d\n", preorder_ctrl->indicate_seq, pattrib->seq_num);
35109 + //DBG_871X("recv_indicatepkts_in_order, amsdu!=1, indicate_seq=%d, seq_num=%d\n", preorder_ctrl->indicate_seq, pattrib->seq_num);
35110
35111 if ((padapter->bDriverStopped == _FALSE) &&
35112 (padapter->bSurpriseRemoved == _FALSE))
35113 - {
35114 -
35115 - rtw_recv_indicatepkt(padapter, prframe); //indicate this recv_frame
35116 + {
35117
35118 + rtw_recv_indicatepkt(padapter, prframe);//indicate this recv_frame
35119 +
35120 }
35121 }
35122 else if(pattrib->amsdu==1)
35123 @@ -3999,7 +3604,7 @@ static int recv_indicatepkts_in_order(_a
35124 // Set new pending timer.
35125 //pTS->RxIndicateState = RXTS_INDICATE_REORDER;
35126 //PlatformSetTimer(Adapter, &pTS->RxPktPendingTimer, pHTInfo->RxReorderPendingTime);
35127 - //DBG_8192C("_set_timer(&preorder_ctrl->reordering_ctrl_timer, REORDER_WAIT_TIME)\n");
35128 + //DBG_871X("_set_timer(&preorder_ctrl->reordering_ctrl_timer, REORDER_WAIT_TIME)\n");
35129 _set_timer(&preorder_ctrl->reordering_ctrl_timer, REORDER_WAIT_TIME);
35130 }
35131 else
35132 @@ -4014,12 +3619,11 @@ static int recv_indicatepkts_in_order(_a
35133
35134 }
35135
35136 -
35137 -static int recv_indicatepkt_reorder(_adapter *padapter, union recv_frame *prframe)
35138 +int recv_indicatepkt_reorder(_adapter *padapter, union recv_frame *prframe);
35139 +int recv_indicatepkt_reorder(_adapter *padapter, union recv_frame *prframe)
35140 {
35141 _irqL irql;
35142 int retval = _SUCCESS;
35143 - struct recv_priv *precvpriv = &padapter->recvpriv;
35144 struct rx_pkt_attrib *pattrib = &prframe->u.hdr.attrib;
35145 struct recv_reorder_ctrl *preorder_ctrl = prframe->u.hdr.preorder_ctrl;
35146 _queue *ppending_recvframe_queue = &preorder_ctrl->pending_recvframe_queue;
35147 @@ -4029,7 +3633,9 @@ static int recv_indicatepkt_reorder(_ada
35148 //s1.
35149 wlanhdr_to_ethhdr(prframe);
35150
35151 - if(pattrib->qos !=1 /*|| pattrib->priority!=0 || IS_MCAST(pattrib->ra)*/)
35152 + //if ((pattrib->qos!=1) /*|| pattrib->priority!=0 || IS_MCAST(pattrib->ra)*/
35153 + // || (pattrib->eth_type==0x0806) || (pattrib->ack_policy!=0))
35154 + if (pattrib->qos!=1)
35155 {
35156 if ((padapter->bDriverStopped == _FALSE) &&
35157 (padapter->bSurpriseRemoved == _FALSE))
35158 @@ -4126,7 +3732,15 @@ static int recv_indicatepkt_reorder(_ada
35159 #ifdef DBG_RX_DROP_FRAME
35160 DBG_871X("DBG_RX_DROP_FRAME %s check_indicate_seq fail\n", __FUNCTION__);
35161 #endif
35162 +#if 0
35163 + rtw_recv_indicatepkt(padapter, prframe);
35164 +
35165 + _exit_critical_bh(&ppending_recvframe_queue->lock, &irql);
35166 +
35167 + goto _success_exit;
35168 +#else
35169 goto _err_exit;
35170 +#endif
35171 }
35172
35173
35174 @@ -4166,6 +3780,8 @@ static int recv_indicatepkt_reorder(_ada
35175 }
35176
35177
35178 +_success_exit:
35179 +
35180 return _SUCCESS;
35181
35182 _err_exit:
35183 @@ -4189,7 +3805,7 @@ void rtw_reordering_ctrl_timeout_handler
35184 return;
35185 }
35186
35187 - //DBG_8192C("+rtw_reordering_ctrl_timeout_handler()=>\n");
35188 + //DBG_871X("+rtw_reordering_ctrl_timeout_handler()=>\n");
35189
35190 _enter_critical_bh(&ppending_recvframe_queue->lock, &irql);
35191
35192 @@ -4202,19 +3818,29 @@ void rtw_reordering_ctrl_timeout_handler
35193
35194 }
35195
35196 -
35197 -static int process_recv_indicatepkts(_adapter *padapter, union recv_frame *prframe)
35198 +int process_recv_indicatepkts(_adapter *padapter, union recv_frame *prframe);
35199 +int process_recv_indicatepkts(_adapter *padapter, union recv_frame *prframe)
35200 {
35201 int retval = _SUCCESS;
35202 - struct recv_priv *precvpriv = &padapter->recvpriv;
35203 - struct rx_pkt_attrib *pattrib = &prframe->u.hdr.attrib;
35204 + //struct recv_priv *precvpriv = &padapter->recvpriv;
35205 + //struct rx_pkt_attrib *pattrib = &prframe->u.hdr.attrib;
35206 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
35207 +#ifdef CONFIG_TDLS
35208 + struct sta_info *psta = prframe->u.hdr.psta;
35209 +#endif //CONFIG_TDLS
35210
35211 #ifdef CONFIG_80211N_HT
35212
35213 struct ht_priv *phtpriv = &pmlmepriv->htpriv;
35214
35215 - if(phtpriv->ht_option==_TRUE) //B/G/N Mode
35216 +#ifdef CONFIG_TDLS
35217 + if( (phtpriv->ht_option==_TRUE) ||
35218 + ((psta->tdls_sta_state & TDLS_LINKED_STATE) &&
35219 + (psta->htpriv.ht_option==_TRUE) &&
35220 + (psta->htpriv.ampdu_enable==_TRUE))) //B/G/N Mode
35221 +#else
35222 + if(phtpriv->ht_option==_TRUE) //B/G/N Mode
35223 +#endif //CONFIG_TDLS
35224 {
35225 //prframe->u.hdr.preorder_ctrl = &precvpriv->recvreorder_ctrl[pattrib->priority];
35226
35227 @@ -4267,24 +3893,17 @@ static int process_recv_indicatepkts(_ad
35228 return retval;
35229
35230 }
35231 -
35232
35233 -static int recv_func(_adapter *padapter, void *pcontext)
35234 +int recv_func_prehandle(_adapter *padapter, union recv_frame *rframe)
35235 {
35236 - struct rx_pkt_attrib *pattrib;
35237 - union recv_frame *prframe, *orig_prframe;
35238 - int retval = _SUCCESS;
35239 - _queue *pfree_recv_queue = &padapter->recvpriv.free_recv_queue;
35240 + int ret = _SUCCESS;
35241 + struct rx_pkt_attrib *pattrib = &rframe->u.hdr.attrib;
35242 struct recv_priv *precvpriv = &padapter->recvpriv;
35243 + _queue *pfree_recv_queue = &padapter->recvpriv.free_recv_queue;
35244 +
35245 +#ifdef CONFIG_MP_INCLUDED
35246 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
35247 -#ifdef CONFIG_TDLS
35248 - u8 *psnap_type, *pcategory;
35249 -#endif
35250 -
35251 - prframe = (union recv_frame *)pcontext;
35252 - orig_prframe = prframe;
35253 -
35254 - pattrib = &prframe->u.hdr.attrib;
35255 +#endif //CONFIG_MP_INCLUDED
35256
35257 #ifdef CONFIG_MP_INCLUDED
35258 if ((check_fwstate(pmlmepriv, WIFI_MP_STATE) == _TRUE))//&&(padapter->mppriv.check_mp_pkt == 0))
35259 @@ -4296,21 +3915,44 @@ static int recv_func(_adapter *padapter,
35260
35261 if (check_fwstate(pmlmepriv, WIFI_MP_LPBK_STATE) == _FALSE) {
35262 RT_TRACE(_module_rtl871x_recv_c_, _drv_alert_, ("MP - Not in loopback mode , drop pkt \n"));
35263 - retval = _FAIL;
35264 - rtw_free_recvframe(orig_prframe, pfree_recv_queue);//free this recv_frame
35265 - goto _exit_recv_func;
35266 + ret = _FAIL;
35267 + rtw_free_recvframe(rframe, pfree_recv_queue);//free this recv_frame
35268 + goto exit;
35269 }
35270 }
35271 #endif
35272
35273 //check the frame crtl field and decache
35274 - retval = validate_recv_frame(padapter, prframe);
35275 - if (retval != _SUCCESS)
35276 + ret = validate_recv_frame(padapter, rframe);
35277 + if (ret != _SUCCESS)
35278 {
35279 RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("recv_func: validate_recv_frame fail! drop pkt\n"));
35280 - rtw_free_recvframe(orig_prframe, pfree_recv_queue);//free this recv_frame
35281 - goto _exit_recv_func;
35282 + rtw_free_recvframe(rframe, pfree_recv_queue);//free this recv_frame
35283 + goto exit;
35284 }
35285 +
35286 +exit:
35287 + return ret;
35288 +}
35289 +
35290 +int recv_func_posthandle(_adapter *padapter, union recv_frame *prframe)
35291 +{
35292 + int ret = _SUCCESS;
35293 + union recv_frame *orig_prframe = prframe;
35294 + struct rx_pkt_attrib *pattrib = &prframe->u.hdr.attrib;
35295 + struct recv_priv *precvpriv = &padapter->recvpriv;
35296 + _queue *pfree_recv_queue = &padapter->recvpriv.free_recv_queue;
35297 +
35298 +#ifdef CONFIG_MP_INCLUDED
35299 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
35300 +#endif //CONFIG_MP_INCLUDED
35301 +
35302 +#ifdef CONFIG_TDLS
35303 + u8 *psnap_type, *pcategory;
35304 + struct sta_info *ptdls_sta = NULL;
35305 +#endif //CONFIG_TDLS
35306 +
35307 +
35308 // DATA FRAME
35309 rtw_led_control(padapter, LED_CTL_RX);
35310
35311 @@ -4320,22 +3962,38 @@ static int recv_func(_adapter *padapter,
35312 #ifdef DBG_RX_DROP_FRAME
35313 DBG_871X("DBG_RX_DROP_FRAME %s decryptor: drop pkt\n", __FUNCTION__);
35314 #endif
35315 - retval = _FAIL;
35316 + ret = _FAIL;
35317 goto _recv_data_drop;
35318 }
35319
35320 +#if 0
35321 + if ( padapter->adapter_type == PRIMARY_ADAPTER )
35322 + {
35323 + DBG_871X("+++\n");
35324 + {
35325 + int i;
35326 + u8 *ptr = get_recvframe_data(prframe);
35327 + for(i=0; i<140;i=i+8)
35328 + DBG_871X("%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:", *(ptr+i),
35329 + *(ptr+i+1), *(ptr+i+2) ,*(ptr+i+3) ,*(ptr+i+4),*(ptr+i+5), *(ptr+i+6), *(ptr+i+7));
35330 +
35331 + }
35332 + DBG_871X("---\n");
35333 + }
35334 +#endif //RTK_DMP_PLATFORM
35335 +
35336 #ifdef CONFIG_TDLS
35337 //check TDLS frame
35338 psnap_type = get_recvframe_data(orig_prframe);
35339 psnap_type+=pattrib->hdrlen + pattrib->iv_len+SNAP_SIZE;
35340 - //[+2]: ether_type, [+1]: payload type
35341 - pcategory = psnap_type+2+1;
35342 + pcategory = psnap_type + ETH_TYPE_LEN + PAYLOAD_TYPE_LEN;
35343
35344 - if((_rtw_memcmp(psnap_type, SNAP_ETH_TYPE_TDLS, 2))&&((*pcategory==0x0c))){
35345 - retval = OnTDLS(padapter, prframe); //all of functions will return _FAIL
35346 - goto _recv_data_drop;
35347 + if((_rtw_memcmp(psnap_type, SNAP_ETH_TYPE_TDLS, ETH_TYPE_LEN)) &&
35348 + ((*pcategory==RTW_WLAN_CATEGORY_TDLS) || (*pcategory==RTW_WLAN_CATEGORY_P2P))){
35349 + ret = OnTDLS(padapter, prframe); //all of functions will return _FAIL
35350 + goto _exit_recv_func;
35351 }
35352 -#endif
35353 +#endif //CONFIG_TDLS
35354
35355 prframe = recvframe_chk_defrag(padapter, prframe);
35356 if(prframe==NULL) {
35357 @@ -4352,16 +4010,22 @@ static int recv_func(_adapter *padapter,
35358 #ifdef DBG_RX_DROP_FRAME
35359 DBG_871X("DBG_RX_DROP_FRAME %s portctrl: drop pkt\n", __FUNCTION__);
35360 #endif
35361 - retval = _FAIL;
35362 + ret = _FAIL;
35363 goto _recv_data_drop;
35364 }
35365
35366 +#ifdef CONFIG_TDLS
35367 + if(padapter->tdlsinfo.setup_state == TDLS_LINKED_STATE)
35368 + ptdls_sta = rtw_get_stainfo(&padapter->stapriv, pattrib->src);
35369 + count_rx_stats(padapter, prframe, ptdls_sta);
35370 +#else
35371 count_rx_stats(padapter, prframe, NULL);
35372 +#endif //CONFIG_TDLS
35373
35374 #ifdef CONFIG_80211N_HT
35375
35376 - retval = process_recv_indicatepkts(padapter, prframe);
35377 - if (retval != _SUCCESS)
35378 + ret = process_recv_indicatepkts(padapter, prframe);
35379 + if (ret != _SUCCESS)
35380 {
35381 RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("recv_func: process_recv_indicatepkts fail! \n"));
35382 #ifdef DBG_RX_DROP_FRAME
35383 @@ -4371,12 +4035,12 @@ static int recv_func(_adapter *padapter,
35384 goto _recv_data_drop;
35385 }
35386
35387 -#else
35388 +#else // CONFIG_80211N_HT
35389
35390 if (!pattrib->amsdu)
35391 {
35392 - retval = wlanhdr_to_ethhdr (prframe);
35393 - if (retval != _SUCCESS)
35394 + ret = wlanhdr_to_ethhdr (prframe);
35395 + if (ret != _SUCCESS)
35396 {
35397 RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("wlanhdr_to_ethhdr: drop pkt \n"));
35398 #ifdef DBG_RX_DROP_FRAME
35399 @@ -4390,8 +4054,8 @@ static int recv_func(_adapter *padapter,
35400 {
35401 RT_TRACE(_module_rtl871x_recv_c_, _drv_alert_, ("@@@@ recv_func: recv_func rtw_recv_indicatepkt\n" ));
35402 //indicate this recv_frame
35403 - retval = rtw_recv_indicatepkt(padapter, prframe);
35404 - if (retval != _SUCCESS)
35405 + ret = rtw_recv_indicatepkt(padapter, prframe);
35406 + if (ret != _SUCCESS)
35407 {
35408 #ifdef DBG_RX_DROP_FRAME
35409 DBG_871X("DBG_RX_DROP_FRAME %s rtw_recv_indicatepkt fail!\n", __FUNCTION__);
35410 @@ -4407,7 +4071,7 @@ static int recv_func(_adapter *padapter,
35411 DBG_871X("DBG_RX_DROP_FRAME %s ecv_func:bDriverStopped(%d) OR bSurpriseRemoved(%d)\n", __FUNCTION__,
35412 padapter->bDriverStopped, padapter->bSurpriseRemoved);
35413 #endif
35414 - retval = _FAIL;
35415 + ret = _FAIL;
35416 rtw_free_recvframe(orig_prframe, pfree_recv_queue); //free this recv_frame
35417 }
35418
35419 @@ -4415,8 +4079,8 @@ static int recv_func(_adapter *padapter,
35420 else if(pattrib->amsdu==1)
35421 {
35422
35423 - retval = amsdu_to_msdu(padapter, prframe);
35424 - if(retval != _SUCCESS)
35425 + ret = amsdu_to_msdu(padapter, prframe);
35426 + if(ret != _SUCCESS)
35427 {
35428 #ifdef DBG_RX_DROP_FRAME
35429 DBG_871X("DBG_RX_DROP_FRAME %s amsdu_to_msdu fail\n", __FUNCTION__);
35430 @@ -4430,14 +4094,60 @@ static int recv_func(_adapter *padapter,
35431 #ifdef DBG_RX_DROP_FRAME
35432 DBG_871X("DBG_RX_DROP_FRAME %s what is this condition??\n", __FUNCTION__);
35433 #endif
35434 + goto _recv_data_drop;
35435 }
35436 -#endif
35437 +#endif // CONFIG_80211N_HT
35438 +
35439 +_exit_recv_func:
35440 + return ret;
35441 +
35442 _recv_data_drop:
35443 precvpriv->rx_drop++;
35444 + return ret;
35445 +}
35446
35447 -_exit_recv_func:
35448
35449 - return retval;
35450 +int recv_func(_adapter *padapter, union recv_frame *rframe);
35451 +int recv_func(_adapter *padapter, union recv_frame *rframe)
35452 +{
35453 + int ret;
35454 + struct rx_pkt_attrib *prxattrib = &rframe->u.hdr.attrib;
35455 + struct recv_priv *recvpriv = &padapter->recvpriv;
35456 + struct security_priv *psecuritypriv=&padapter->securitypriv;
35457 + struct mlme_priv *mlmepriv = &padapter->mlmepriv;
35458 +
35459 + /* check if need to handle uc_swdec_pending_queue*/
35460 + if (check_fwstate(mlmepriv, WIFI_STATION_STATE) && psecuritypriv->busetkipkey)
35461 + {
35462 + union recv_frame *pending_frame;
35463 + _irqL irqL;
35464 +
35465 + while((pending_frame=rtw_alloc_recvframe(&padapter->recvpriv.uc_swdec_pending_queue))) {
35466 + if (recv_func_posthandle(padapter, pending_frame) == _SUCCESS)
35467 + DBG_871X("%s: dequeue uc_swdec_pending_queue\n", __func__);
35468 + }
35469 + }
35470 +
35471 + ret = recv_func_prehandle(padapter, rframe);
35472 +
35473 + if(ret == _SUCCESS) {
35474 +
35475 + /* check if need to enqueue into uc_swdec_pending_queue*/
35476 + if (check_fwstate(mlmepriv, WIFI_STATION_STATE) &&
35477 + !IS_MCAST(prxattrib->ra) && prxattrib->encrypt>0 &&
35478 + (prxattrib->bdecrypted == 0 ||psecuritypriv->sw_decrypt == _TRUE) &&
35479 + !is_wep_enc(psecuritypriv->dot11PrivacyAlgrthm) &&
35480 + !psecuritypriv->busetkipkey) {
35481 + rtw_enqueue_recvframe(rframe, &padapter->recvpriv.uc_swdec_pending_queue);
35482 + DBG_871X("%s: no key, enqueue uc_swdec_pending_queue\n", __func__);
35483 + goto exit;
35484 + }
35485 +
35486 + ret = recv_func_posthandle(padapter, rframe);
35487 + }
35488 +
35489 +exit:
35490 + return ret;
35491 }
35492
35493
35494 @@ -4445,59 +4155,23 @@ s32 rtw_recv_entry(union recv_frame *pre
35495 {
35496 _adapter *padapter;
35497 struct recv_priv *precvpriv;
35498 - //struct mlme_priv *pmlmepriv ;
35499 - //struct dvobj_priv *pdev;
35500 - //u8 *phead, *pdata, *ptail,*pend;
35501 -
35502 - //_queue *pfree_recv_queue, *ppending_recv_queue;
35503 - //u8 blk_mode = _FALSE;
35504 s32 ret=_SUCCESS;
35505 - //struct intf_hdl * pintfhdl;
35506
35507 _func_enter_;
35508
35509 // RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("+rtw_recv_entry\n"));
35510
35511 padapter = precvframe->u.hdr.adapter;
35512 - //pintfhdl = &padapter->iopriv.intf;
35513
35514 - //pdev=&padapter->dvobjpriv;
35515 - //pmlmepriv = &padapter->mlmepriv;
35516 precvpriv = &padapter->recvpriv;
35517 - //pfree_recv_queue = &precvpriv->free_recv_queue;
35518 - //ppending_recv_queue = &precvpriv->recv_pending_queue;
35519 -
35520 - //phead = precvframe->u.hdr.rx_head;
35521 - //pdata = precvframe->u.hdr.rx_data;
35522 - //ptail = precvframe->u.hdr.rx_tail;
35523 - //pend = precvframe->u.hdr.rx_end;
35524
35525 - //rtw_led_control(padapter, LED_CTL_RX);
35526 -
35527 -#ifdef CONFIG_SDIO_HCI
35528 - if (precvpriv->free_recvframe_cnt <= 1)
35529 - goto _recv_entry_drop;
35530 -#endif
35531
35532 -#ifdef CONFIG_RECV_THREAD_MODE
35533 - if (_rtw_queue_empty(ppending_recv_queue) == _TRUE)
35534 - {
35535 - //enqueue_recvframe_usb(precvframe, ppending_recv_queue);//enqueue to recv_pending_queue
35536 - rtw_enqueue_recvframe(precvframe, ppending_recv_queue);
35537 - _rtw_up_sema(&precvpriv->recv_sema);
35538 - }
35539 - else
35540 - {
35541 - //enqueue_recvframe_usb(precvframe, ppending_recv_queue);//enqueue to recv_pending_queue
35542 - rtw_enqueue_recvframe(precvframe, ppending_recv_queue);
35543 - }
35544 -#else
35545 if ((ret = recv_func(padapter, precvframe)) == _FAIL)
35546 {
35547 RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("rtw_recv_entry: recv_func return fail!!!\n"));
35548 goto _recv_entry_drop;
35549 }
35550 -#endif
35551 +
35552
35553 precvpriv->rx_pkts++;
35554
35555 @@ -4507,9 +4181,6 @@ _func_exit_;
35556
35557 _recv_entry_drop:
35558
35559 -
35560 - //precvpriv->rx_drop++;
35561 -
35562 #ifdef CONFIG_MP_INCLUDED
35563 padapter->mppriv.rx_pktloss = precvpriv->rx_drop;
35564 #endif
35565 @@ -4541,53 +4212,74 @@ void rtw_signal_stat_timer_hdl(RTW_TIMER
35566
35567 if(recvpriv->signal_strength_data.update_req == 0) {// update_req is clear, means we got rx
35568 avg_signal_strength = recvpriv->signal_strength_data.avg_val;
35569 - avg_signal_qual = recvpriv->signal_qual_data.avg_val;
35570 + num_signal_strength = recvpriv->signal_strength_data.total_num;
35571 + // after avg_vals are accquired, we can re-stat the signal values
35572 + recvpriv->signal_strength_data.update_req = 1;
35573 }
35574
35575 if(recvpriv->signal_qual_data.update_req == 0) {// update_req is clear, means we got rx
35576 - num_signal_strength = recvpriv->signal_strength_data.total_num;
35577 + avg_signal_qual = recvpriv->signal_qual_data.avg_val;
35578 num_signal_qual = recvpriv->signal_qual_data.total_num;
35579 + // after avg_vals are accquired, we can re-stat the signal values
35580 + recvpriv->signal_qual_data.update_req = 1;
35581 }
35582 -
35583 - // after avg_vals are accquired, we can re-stat the signal values
35584 - recvpriv->signal_strength_data.update_req = 1;
35585 - recvpriv->signal_qual_data.update_req = 1;
35586
35587 - //update value of signal_strength, rssi, signal_qual
35588 - if(check_fwstate(&adapter->mlmepriv, _FW_UNDER_SURVEY) == _FALSE) {
35589 - tmp_s = (avg_signal_strength+(_alpha-1)*recvpriv->signal_strength);
35590 - if(tmp_s %_alpha)
35591 - tmp_s = tmp_s/_alpha + 1;
35592 - else
35593 - tmp_s = tmp_s/_alpha;
35594 - if(tmp_s>100)
35595 - tmp_s = 100;
35596 -
35597 - tmp_q = (avg_signal_qual+(_alpha-1)*recvpriv->signal_qual);
35598 - if(tmp_q %_alpha)
35599 - tmp_q = tmp_q/_alpha + 1;
35600 - else
35601 - tmp_q = tmp_q/_alpha;
35602 - if(tmp_q>100)
35603 - tmp_q = 100;
35604 -
35605 - recvpriv->signal_strength = tmp_s;
35606 - recvpriv->rssi = (s8)translate_percentage_to_dbm(tmp_s);
35607 - recvpriv->signal_qual = tmp_q;
35608 -
35609 - #if defined(DBG_RX_SIGNAL_DISPLAY_PROCESSING) && 1
35610 - DBG_871X("%s signal_strength:%3u, rssi:%3d, signal_qual:%3u"
35611 - ", num_signal_strength:%u, num_signal_qual:%u"
35612 - "\n"
35613 - , __FUNCTION__
35614 - , recvpriv->signal_strength
35615 - , recvpriv->rssi
35616 - , recvpriv->signal_qual
35617 - , num_signal_strength, num_signal_qual
35618 - );
35619 - #endif
35620 + if (num_signal_strength == 0) {
35621 + if (rtw_get_on_cur_ch_time(adapter) == 0
35622 + || rtw_get_passing_time_ms(rtw_get_on_cur_ch_time(adapter)) < 2 * adapter->mlmeextpriv.mlmext_info.bcn_interval
35623 + ) {
35624 + goto set_timer;
35625 + }
35626 + }
35627 +
35628 + if(check_fwstate(&adapter->mlmepriv, _FW_UNDER_SURVEY) == _TRUE
35629 + || check_fwstate(&adapter->mlmepriv, _FW_LINKED) == _FALSE
35630 + ) {
35631 + goto set_timer;
35632 }
35633 +
35634 + #ifdef CONFIG_CONCURRENT_MODE
35635 + if (check_buddy_fwstate(adapter, _FW_UNDER_SURVEY) == _TRUE)
35636 + goto set_timer;
35637 + #endif
35638 +
35639 + //update value of signal_strength, rssi, signal_qual
35640 + tmp_s = (avg_signal_strength+(_alpha-1)*recvpriv->signal_strength);
35641 + if(tmp_s %_alpha)
35642 + tmp_s = tmp_s/_alpha + 1;
35643 + else
35644 + tmp_s = tmp_s/_alpha;
35645 + if(tmp_s>100)
35646 + tmp_s = 100;
35647 +
35648 + tmp_q = (avg_signal_qual+(_alpha-1)*recvpriv->signal_qual);
35649 + if(tmp_q %_alpha)
35650 + tmp_q = tmp_q/_alpha + 1;
35651 + else
35652 + tmp_q = tmp_q/_alpha;
35653 + if(tmp_q>100)
35654 + tmp_q = 100;
35655 +
35656 + recvpriv->signal_strength = tmp_s;
35657 + recvpriv->rssi = (s8)translate_percentage_to_dbm(tmp_s);
35658 + recvpriv->signal_qual = tmp_q;
35659 +
35660 + #if defined(DBG_RX_SIGNAL_DISPLAY_PROCESSING) && 1
35661 + DBG_871X(FUNC_ADPT_FMT" signal_strength:%3u, rssi:%3d, signal_qual:%3u"
35662 + ", num_signal_strength:%u, num_signal_qual:%u"
35663 + ", on_cur_ch_ms:%d"
35664 + "\n"
35665 + , FUNC_ADPT_ARG(adapter)
35666 + , recvpriv->signal_strength
35667 + , recvpriv->rssi
35668 + , recvpriv->signal_qual
35669 + , num_signal_strength, num_signal_qual
35670 + , rtw_get_on_cur_ch_time(adapter) ? rtw_get_passing_time_ms(rtw_get_on_cur_ch_time(adapter)) : 0
35671 + );
35672 + #endif
35673 }
35674 +
35675 +set_timer:
35676 rtw_set_signal_stat_timer(recvpriv);
35677
35678 }
35679 --- a/drivers/net/wireless/rtl8192cu/core/rtw_rf.c
35680 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_rf.c
35681 @@ -16,8 +16,7 @@
35682 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
35683 *
35684 *
35685 -
35686 -******************************************************************************/
35687 + ******************************************************************************/
35688 #define _RTW_RF_C_
35689
35690 #include <drv_conf.h>
35691 --- a/drivers/net/wireless/rtl8192cu/core/rtw_security.c
35692 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_security.c
35693 @@ -16,8 +16,7 @@
35694 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
35695 *
35696 *
35697 -
35698 -******************************************************************************/
35699 + ******************************************************************************/
35700 #define _RTW_SECURITY_C_
35701
35702 #include <drv_conf.h>
35703 @@ -206,7 +205,7 @@ _func_enter_;
35704
35705 length=pattrib->last_txcmdsz-pattrib->hdrlen-pattrib->iv_len- pattrib->icv_len;
35706
35707 - *((unsigned long *)crc)=cpu_to_le32(getcrc32(payload,length));
35708 + *((u32 *)crc)=cpu_to_le32(getcrc32(payload,length));
35709
35710 arcfour_init(&mycontext, wepkey,3+keylength);
35711 arcfour_encrypt(&mycontext, payload, payload, length);
35712 @@ -216,7 +215,7 @@ _func_enter_;
35713 else
35714 {
35715 length=pxmitpriv->frag_len-pattrib->hdrlen-pattrib->iv_len-pattrib->icv_len ;
35716 - *((unsigned long *)crc)=cpu_to_le32(getcrc32(payload,length));
35717 + *((u32 *)crc)=cpu_to_le32(getcrc32(payload,length));
35718 arcfour_init(&mycontext, wepkey,3+keylength);
35719 arcfour_encrypt(&mycontext, payload, payload, length);
35720 arcfour_encrypt(&mycontext, payload+length, crc, 4);
35721 @@ -269,7 +268,7 @@ _func_enter_;
35722 arcfour_encrypt(&mycontext, payload, payload, length);
35723
35724 //calculate icv and compare the icv
35725 - *((unsigned long *)crc)=le32_to_cpu(getcrc32(payload,length-4));
35726 + *((u32 *)crc)=le32_to_cpu(getcrc32(payload,length-4));
35727
35728 if(crc[3]!=payload[length-1] || crc[2]!=payload[length-2] || crc[1]!=payload[length-3] || crc[0]!=payload[length-4])
35729 {
35730 @@ -681,10 +680,18 @@ _func_enter_;
35731 }
35732 else
35733 {
35734 + DBG_871X("%s, call rtw_get_stainfo()\n", __func__);
35735 stainfo=rtw_get_stainfo(&padapter->stapriv ,&pattrib->ra[0] );
35736 }
35737
35738 if (stainfo!=NULL){
35739 +
35740 + if(!(stainfo->state &_FW_LINKED))
35741 + {
35742 + DBG_871X("%s, psta->state(0x%x) != _FW_LINKED\n", __func__, stainfo->state);
35743 + return _FAIL;
35744 + }
35745 +
35746 RT_TRACE(_module_rtl871x_security_c_,_drv_err_,("rtw_tkip_encrypt: stainfo!=NULL!!!\n"));
35747
35748 if(IS_MCAST(pattrib->ra))
35749 @@ -738,6 +745,7 @@ _func_enter_;
35750 }
35751 else{
35752 RT_TRACE(_module_rtl871x_security_c_,_drv_err_,("rtw_tkip_encrypt: stainfo==NULL!!!\n"));
35753 + DBG_871X("%s, psta==NUL\n", __func__);
35754 res=_FAIL;
35755 }
35756
35757 @@ -776,20 +784,47 @@ _func_enter_;
35758 if(prxattrib->encrypt==_TKIP_){
35759
35760 stainfo=rtw_get_stainfo(&padapter->stapriv ,&prxattrib->ta[0] );
35761 -
35762 -
35763 if (stainfo!=NULL){
35764
35765 if(IS_MCAST(prxattrib->ra))
35766 {
35767 + static u32 start = 0;
35768 + static u32 no_gkey_bc_cnt = 0;
35769 + static u32 no_gkey_mc_cnt = 0;
35770 +
35771 if(psecuritypriv->binstallGrpkey==_FALSE)
35772 {
35773 - res=_FAIL;
35774 - DBG_8192C("%s:rx bc/mc packets,but didn't install group key!!!!!!!!!!\n",__FUNCTION__);
35775 + res=_FAIL;
35776 +
35777 + if (start == 0)
35778 + start = rtw_get_current_time();
35779 +
35780 + if (is_broadcast_mac_addr(prxattrib->ra))
35781 + no_gkey_bc_cnt++;
35782 + else
35783 + no_gkey_mc_cnt++;
35784 +
35785 + if (rtw_get_passing_time_ms(start) > 1000) {
35786 + if (no_gkey_bc_cnt || no_gkey_mc_cnt) {
35787 + DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" no_gkey_bc_cnt:%u, no_gkey_mc_cnt:%u\n",
35788 + FUNC_ADPT_ARG(padapter), no_gkey_bc_cnt, no_gkey_mc_cnt);
35789 + }
35790 + start = rtw_get_current_time();
35791 + no_gkey_bc_cnt = 0;
35792 + no_gkey_mc_cnt = 0;
35793 + }
35794 goto exit;
35795 }
35796 -
35797 - DBG_871X("rx bc/mc packets, to perform sw rtw_tkip_decrypt\n");
35798 +
35799 + if (no_gkey_bc_cnt || no_gkey_mc_cnt) {
35800 + DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" gkey installed. no_gkey_bc_cnt:%u, no_gkey_mc_cnt:%u\n",
35801 + FUNC_ADPT_ARG(padapter), no_gkey_bc_cnt, no_gkey_mc_cnt);
35802 + }
35803 + start = 0;
35804 + no_gkey_bc_cnt = 0;
35805 + no_gkey_mc_cnt = 0;
35806 +
35807 + //DBG_871X("rx bc/mc packets, to perform sw rtw_tkip_decrypt\n");
35808 //prwskey = psecuritypriv->dot118021XGrpKey[psecuritypriv->dot118021XGrpKeyid].skey;
35809 prwskey = psecuritypriv->dot118021XGrpKey[prxattrib->key_index].skey;
35810 prwskeylen=16;
35811 @@ -898,11 +933,13 @@ static void construct_mic_iv(
35812 sint a4_exists,
35813 u8 *mpdu,
35814 uint payload_length,
35815 - u8 * pn_vector);
35816 + u8 * pn_vector,
35817 + uint frtype);// add for CONFIG_IEEE80211W, none 11w also can use
35818 static void construct_mic_header1(
35819 u8 *mic_header1,
35820 sint header_length,
35821 - u8 *mpdu);
35822 + u8 *mpdu,
35823 + uint frtype);// add for CONFIG_IEEE80211W, none 11w also can use
35824 static void construct_mic_header2(
35825 u8 *mic_header2,
35826 u8 *mpdu,
35827 @@ -914,7 +951,8 @@ static void construct_ctr_preload(
35828 sint qc_exists,
35829 u8 *mpdu,
35830 u8 *pn_vector,
35831 - sint c);
35832 + sint c,
35833 + uint frtype);// add for CONFIG_IEEE80211W, none 11w also can use
35834 static void xor_128(u8 *a, u8 *b, u8 *out);
35835 static void xor_32(u8 *a, u8 *b, u8 *out);
35836 static u8 sbox(u8 a);
35837 @@ -922,11 +960,13 @@ static void next_key(u8 *key, sint round
35838 static void byte_sub(u8 *in, u8 *out);
35839 static void shift_row(u8 *in, u8 *out);
35840 static void mix_column(u8 *in, u8 *out);
35841 +#ifndef PLATFORM_FREEBSD
35842 static void add_round_key( u8 *shiftrow_in,
35843 u8 *mcol_in,
35844 u8 *block_in,
35845 sint round,
35846 u8 *out);
35847 +#endif //PLATFORM_FREEBSD
35848 static void aes128k128d(u8 *key, u8 *data, u8 *ciphertext);
35849
35850
35851 @@ -1132,6 +1172,8 @@ _func_exit_;
35852 /************************************************/
35853 /* construct_mic_iv() */
35854 /* Builds the MIC IV from header fields and PN */
35855 +/* Baron think the function is construct CCM */
35856 +/* nonce */
35857 /************************************************/
35858 static void construct_mic_iv(
35859 u8 *mic_iv,
35860 @@ -1139,7 +1181,8 @@ static void construct_mic_iv(
35861 sint a4_exists,
35862 u8 *mpdu,
35863 uint payload_length,
35864 - u8 *pn_vector
35865 + u8 *pn_vector,
35866 + uint frtype// add for CONFIG_IEEE80211W, none 11w also can use
35867 )
35868 {
35869 sint i;
35870 @@ -1148,6 +1191,11 @@ _func_enter_;
35871 if (qc_exists && a4_exists) mic_iv[1] = mpdu[30] & 0x0f; /* QoS_TC */
35872 if (qc_exists && !a4_exists) mic_iv[1] = mpdu[24] & 0x0f; /* mute bits 7-4 */
35873 if (!qc_exists) mic_iv[1] = 0x00;
35874 +#ifdef CONFIG_IEEE80211W
35875 + //802.11w management frame should set management bit(4)
35876 + if(frtype == WIFI_MGT_TYPE)
35877 + mic_iv[1] |= BIT(4);
35878 +#endif //CONFIG_IEEE80211W
35879 for (i = 2; i < 8; i++)
35880 mic_iv[i] = mpdu[i + 8]; /* mic_iv[2:7] = A2[0:5] = mpdu[10:15] */
35881 #ifdef CONSISTENT_PN_ORDER
35882 @@ -1167,17 +1215,26 @@ _func_exit_;
35883 /* construct_mic_header1() */
35884 /* Builds the first MIC header block from */
35885 /* header fields. */
35886 +/* Build AAD SC,A1,A2 */
35887 /************************************************/
35888 static void construct_mic_header1(
35889 u8 *mic_header1,
35890 sint header_length,
35891 - u8 *mpdu
35892 + u8 *mpdu,
35893 + uint frtype// add for CONFIG_IEEE80211W, none 11w also can use
35894 )
35895 {
35896 _func_enter_;
35897 mic_header1[0] = (u8)((header_length - 2) / 256);
35898 mic_header1[1] = (u8)((header_length - 2) % 256);
35899 - mic_header1[2] = mpdu[0] & 0xcf; /* Mute CF poll & CF ack bits */
35900 +#ifdef CONFIG_IEEE80211W
35901 + //802.11w management frame don't AND subtype bits 4,5,6 of frame control field
35902 + if(frtype == WIFI_MGT_TYPE)
35903 + mic_header1[2] = mpdu[0];
35904 + else
35905 +#endif //CONFIG_IEEE80211W
35906 + mic_header1[2] = mpdu[0] & 0xcf; /* Mute CF poll & CF ack bits */
35907 +
35908 mic_header1[3] = mpdu[1] & 0xc7; /* Mute retry, more data and pwr mgt bits */
35909 mic_header1[4] = mpdu[4]; /* A1 */
35910 mic_header1[5] = mpdu[5];
35911 @@ -1251,6 +1308,8 @@ _func_exit_;
35912 /* construct_mic_header2() */
35913 /* Builds the last MIC header block from */
35914 /* header fields. */
35915 +/* Baron think the function is construct CCM */
35916 +/* nonce */
35917 /************************************************/
35918 static void construct_ctr_preload(
35919 u8 *ctr_preload,
35920 @@ -1258,20 +1317,25 @@ static void construct_ctr_preload(
35921 sint qc_exists,
35922 u8 *mpdu,
35923 u8 *pn_vector,
35924 - sint c
35925 + sint c,
35926 + uint frtype // add for CONFIG_IEEE80211W, none 11w also can use
35927 )
35928 {
35929 sint i = 0;
35930 _func_enter_;
35931 for (i=0; i<16; i++) ctr_preload[i] = 0x00;
35932 i = 0;
35933 -
35934 +
35935 ctr_preload[0] = 0x01; /* flag */
35936 if (qc_exists && a4_exists)
35937 ctr_preload[1] = mpdu[30] & 0x0f; /* QoC_Control */
35938 if (qc_exists && !a4_exists)
35939 ctr_preload[1] = mpdu[24] & 0x0f;
35940 -
35941 +#ifdef CONFIG_IEEE80211W
35942 + //802.11w management frame should set management bit(4)
35943 + if(frtype == WIFI_MGT_TYPE)
35944 + ctr_preload[1] |= BIT(4);
35945 +#endif //CONFIG_IEEE80211W
35946 for (i = 2; i < 8; i++)
35947 ctr_preload[i] = mpdu[i + 8]; /* ctr_preload[2:7] = A2[0:5] = mpdu[10:15] */
35948 #ifdef CONSISTENT_PN_ORDER
35949 @@ -1343,9 +1407,9 @@ _func_enter_;
35950 a4_exists = 1;
35951
35952 if (
35953 - (frtype == WIFI_DATA_CFACK) ||
35954 - (frtype == WIFI_DATA_CFPOLL)||
35955 - (frtype == WIFI_DATA_CFACKPOLL))
35956 + ((frtype|frsubtype) == WIFI_DATA_CFACK) ||
35957 + ((frtype|frsubtype) == WIFI_DATA_CFPOLL)||
35958 + ((frtype|frsubtype) == WIFI_DATA_CFACKPOLL))
35959 {
35960 qc_exists = 1;
35961 if(hdrlen != WLAN_HDR_A3_QOS_LEN){
35962 @@ -1353,11 +1417,12 @@ _func_enter_;
35963 hdrlen += 2;
35964 }
35965 }
35966 - else if (
35967 - (frsubtype == 0x08) ||
35968 + // add for CONFIG_IEEE80211W, none 11w also can use
35969 + else if ((frtype == WIFI_DATA) &&
35970 + ((frsubtype == 0x08) ||
35971 (frsubtype == 0x09)||
35972 (frsubtype == 0x0a)||
35973 - (frsubtype == 0x0b))
35974 + (frsubtype == 0x0b)))
35975 {
35976 if(hdrlen != WLAN_HDR_A3_QOS_LEN){
35977
35978 @@ -1381,13 +1446,15 @@ _func_enter_;
35979 a4_exists,
35980 pframe, //message,
35981 plen,
35982 - pn_vector
35983 + pn_vector,
35984 + frtype // add for CONFIG_IEEE80211W, none 11w also can use
35985 );
35986
35987 construct_mic_header1(
35988 mic_header1,
35989 hdrlen,
35990 - pframe //message
35991 + pframe, //message
35992 + frtype // add for CONFIG_IEEE80211W, none 11w also can use
35993 );
35994 construct_mic_header2(
35995 mic_header2,
35996 @@ -1446,7 +1513,8 @@ _func_enter_;
35997 qc_exists,
35998 pframe, //message,
35999 pn_vector,
36000 - i+1);
36001 + i+1,
36002 + frtype); // add for CONFIG_IEEE80211W, none 11w also can use
36003 aes128k128d(key, ctr_preload, aes_out);
36004 bitwise_xor(aes_out, &pframe[payload_index], chain_buffer);//bitwise_xor(aes_out, &message[payload_index], chain_buffer);
36005 for (j=0; j<16;j++) pframe[payload_index++] = chain_buffer[j];//for (j=0; j<16;j++) message[payload_index++] = chain_buffer[j];
36006 @@ -1460,7 +1528,8 @@ _func_enter_;
36007 qc_exists,
36008 pframe, //message,
36009 pn_vector,
36010 - num_blocks+1);
36011 + num_blocks+1,
36012 + frtype); // add for CONFIG_IEEE80211W, none 11w also can use
36013
36014 for (j = 0; j < 16; j++) padded_buffer[j] = 0x00;
36015 for (j = 0; j < payload_remainder; j++)
36016 @@ -1479,7 +1548,8 @@ _func_enter_;
36017 qc_exists,
36018 pframe, //message,
36019 pn_vector,
36020 - 0);
36021 + 0,
36022 + frtype); // add for CONFIG_IEEE80211W, none 11w also can use
36023
36024 for (j = 0; j < 16; j++) padded_buffer[j] = 0x00;
36025 for (j = 0; j < 8; j++)
36026 @@ -1508,7 +1578,7 @@ u32 rtw_aes_encrypt(_adapter *padapter,
36027 sint curfragnum,length;
36028 u32 prwskeylen;
36029 u8 *pframe,*prwskey; //, *payload,*iv
36030 - struct sta_info *stainfo;
36031 + struct sta_info *stainfo=NULL;
36032 struct pkt_attrib *pattrib = &((struct xmit_frame *)pxmitframe)->attrib;
36033 struct security_priv *psecuritypriv=&padapter->securitypriv;
36034 struct xmit_priv *pxmitpriv=&padapter->xmitpriv;
36035 @@ -1536,10 +1606,18 @@ _func_enter_;
36036 }
36037 else
36038 {
36039 + DBG_871X("%s, call rtw_get_stainfo()\n", __func__);
36040 stainfo=rtw_get_stainfo(&padapter->stapriv ,&pattrib->ra[0] );
36041 }
36042
36043 if (stainfo!=NULL){
36044 +
36045 + if(!(stainfo->state &_FW_LINKED))
36046 + {
36047 + DBG_871X("%s, psta->state(0x%x) != _FW_LINKED\n", __func__, stainfo->state);
36048 + return _FAIL;
36049 + }
36050 +
36051 RT_TRACE(_module_rtl871x_security_c_,_drv_err_,("rtw_aes_encrypt: stainfo!=NULL!!!\n"));
36052
36053 if(IS_MCAST(pattrib->ra))
36054 @@ -1551,6 +1629,18 @@ _func_enter_;
36055 prwskey=&stainfo->dot118021x_UncstKey.skey[0];
36056 }
36057
36058 +#ifdef CONFIG_TDLS //swencryption
36059 + {
36060 + struct sta_info *ptdls_sta;
36061 + ptdls_sta=rtw_get_stainfo(&padapter->stapriv ,&pattrib->dst[0] );
36062 + if((ptdls_sta != NULL) && (ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE) )
36063 + {
36064 + DBG_871X("[%s] for tdls link\n", __FUNCTION__);
36065 + prwskey=&ptdls_sta->tpk.tk[0];
36066 + }
36067 + }
36068 +#endif //CONFIG_TDLS
36069 +
36070 prwskeylen=16;
36071
36072 for(curfragnum=0;curfragnum<pattrib->nr_frags;curfragnum++){
36073 @@ -1574,6 +1664,7 @@ _func_enter_;
36074 }
36075 else{
36076 RT_TRACE(_module_rtl871x_security_c_,_drv_err_,("rtw_aes_encrypt: stainfo==NULL!!!\n"));
36077 + DBG_871X("%s, psta==NUL\n", __func__);
36078 res=_FAIL;
36079 }
36080
36081 @@ -1591,7 +1682,6 @@ static sint aes_decipher(u8 *key, uint h
36082 static u8 message[MAX_MSG_SIZE];
36083 uint qc_exists, a4_exists, i, j, payload_remainder,
36084 num_blocks, payload_index;
36085 -
36086 sint res = _SUCCESS;
36087 u8 pn_vector[6];
36088 u8 mic_iv[16];
36089 @@ -1623,7 +1713,7 @@ _func_enter_;
36090
36091 //start to decrypt the payload
36092
36093 - num_blocks = (plen-8) / 16; //(plen including llc, payload_length and mic )
36094 + num_blocks = (plen-8) / 16; //(plen including LLC, payload_length and mic )
36095
36096 payload_remainder = (plen-8) % 16;
36097
36098 @@ -1640,21 +1730,21 @@ _func_enter_;
36099 a4_exists = 1;
36100
36101 if (
36102 - (frtype == WIFI_DATA_CFACK) ||
36103 - (frtype == WIFI_DATA_CFPOLL)||
36104 - (frtype == WIFI_DATA_CFACKPOLL))
36105 + ((frtype|frsubtype) == WIFI_DATA_CFACK) ||
36106 + ((frtype|frsubtype) == WIFI_DATA_CFPOLL)||
36107 + ((frtype|frsubtype) == WIFI_DATA_CFACKPOLL))
36108 {
36109 qc_exists = 1;
36110 if(hdrlen != WLAN_HDR_A3_QOS_LEN){
36111
36112 hdrlen += 2;
36113 }
36114 - }
36115 - else if (
36116 - (frsubtype == 0x08) ||
36117 + }//only for data packet . add for CONFIG_IEEE80211W, none 11w also can use
36118 + else if ((frtype == WIFI_DATA) &&
36119 + ((frsubtype == 0x08) ||
36120 (frsubtype == 0x09)||
36121 (frsubtype == 0x0a)||
36122 - (frsubtype == 0x0b))
36123 + (frsubtype == 0x0b)))
36124 {
36125 if(hdrlen != WLAN_HDR_A3_QOS_LEN){
36126
36127 @@ -1678,7 +1768,8 @@ _func_enter_;
36128 qc_exists,
36129 pframe,
36130 pn_vector,
36131 - i+1
36132 + i+1,
36133 + frtype // add for CONFIG_IEEE80211W, none 11w also can use
36134 );
36135
36136 aes128k128d(key, ctr_preload, aes_out);
36137 @@ -1695,7 +1786,8 @@ _func_enter_;
36138 qc_exists,
36139 pframe,
36140 pn_vector,
36141 - num_blocks+1
36142 + num_blocks+1,
36143 + frtype // add for CONFIG_IEEE80211W, none 11w also can use
36144 );
36145
36146 for (j = 0; j < 16; j++) padded_buffer[j] = 0x00;
36147 @@ -1728,13 +1820,15 @@ _func_enter_;
36148 a4_exists,
36149 message,
36150 plen-8,
36151 - pn_vector
36152 + pn_vector,
36153 + frtype // add for CONFIG_IEEE80211W, none 11w also can use
36154 );
36155
36156 construct_mic_header1(
36157 mic_header1,
36158 hdrlen,
36159 - message
36160 + message,
36161 + frtype // add for CONFIG_IEEE80211W, none 11w also can use
36162 );
36163 construct_mic_header2(
36164 mic_header2,
36165 @@ -1793,7 +1887,8 @@ _func_enter_;
36166 qc_exists,
36167 message,
36168 pn_vector,
36169 - i+1);
36170 + i+1,
36171 + frtype); // add for CONFIG_IEEE80211W, none 11w also can use
36172 aes128k128d(key, ctr_preload, aes_out);
36173 bitwise_xor(aes_out, &message[payload_index], chain_buffer);
36174 for (j=0; j<16;j++) message[payload_index++] = chain_buffer[j];
36175 @@ -1807,7 +1902,8 @@ _func_enter_;
36176 qc_exists,
36177 message,
36178 pn_vector,
36179 - num_blocks+1);
36180 + num_blocks+1,
36181 + frtype); // add for CONFIG_IEEE80211W, none 11w also can use
36182
36183 for (j = 0; j < 16; j++) padded_buffer[j] = 0x00;
36184 for (j = 0; j < payload_remainder; j++)
36185 @@ -1826,7 +1922,8 @@ _func_enter_;
36186 qc_exists,
36187 message,
36188 pn_vector,
36189 - 0);
36190 + 0,
36191 + frtype); // add for CONFIG_IEEE80211W, none 11w also can use
36192
36193 for (j = 0; j < 16; j++) padded_buffer[j] = 0x00;
36194 for (j = 0; j < 8; j++)
36195 @@ -1841,10 +1938,23 @@ _func_enter_;
36196 //compare the mic
36197 for(i=0;i<8;i++){
36198 if(pframe[hdrlen+8+plen-8+i] != message[hdrlen+8+plen-8+i])
36199 + {
36200 RT_TRACE(_module_rtl871x_security_c_,_drv_err_,("aes_decipher:mic check error mic[%d]: pframe(%x) != message(%x) \n",
36201 i,pframe[hdrlen+8+plen-8+i],message[hdrlen+8+plen-8+i]));
36202 - res = _FAIL;
36203 + DBG_871X("aes_decipher:mic check error mic[%d]: pframe(%x) != message(%x) \n",
36204 + i,pframe[hdrlen+8+plen-8+i],message[hdrlen+8+plen-8+i]);
36205 + res = _FAIL;
36206 + }
36207 }
36208 +
36209 + if(res == _FAIL)
36210 + {
36211 + int gg=0;
36212 + for(gg=0; gg < 32; gg++)
36213 + DBG_871X(" [%d]=%02x ", gg, pframe[gg]);
36214 + DBG_871X("error packet header \n");
36215 + }
36216 +
36217 _func_exit_;
36218 return res;
36219 }
36220 @@ -1861,7 +1971,6 @@ u32 rtw_aes_decrypt(_adapter *padapter,
36221
36222
36223 sint length;
36224 - u32 prwskeylen;
36225 u8 *pframe,*prwskey; //, *payload,*iv
36226 struct sta_info *stainfo;
36227 struct rx_pkt_attrib *prxattrib = &((union recv_frame *)precvframe)->u.hdr.attrib;
36228 @@ -1879,29 +1988,55 @@ _func_enter_;
36229
36230 if(IS_MCAST(prxattrib->ra))
36231 {
36232 + //in concurrent we should use sw descrypt in group key, so we remove this message
36233 + //DBG_871X("rx bc/mc packets, to perform sw rtw_aes_decrypt\n");
36234 + //prwskey = psecuritypriv->dot118021XGrpKey[psecuritypriv->dot118021XGrpKeyid].skey;
36235 if(psecuritypriv->binstallGrpkey==_FALSE)
36236 {
36237 res=_FAIL;
36238 DBG_8192C("%s:rx bc/mc packets,but didn't install group key!!!!!!!!!!\n",__FUNCTION__);
36239 goto exit;
36240 }
36241 -
36242 - DBG_871X("rx bc/mc packets, to perform sw rtw_aes_decrypt\n");
36243 - //prwskey = psecuritypriv->dot118021XGrpKey[psecuritypriv->dot118021XGrpKeyid].skey;
36244 prwskey = psecuritypriv->dot118021XGrpKey[prxattrib->key_index].skey;
36245 - prwskeylen=16;
36246 +
36247 + if(psecuritypriv->dot118021XGrpKeyid != prxattrib->key_index)
36248 + {
36249 + DBG_871X("not match packet_index=%d, install_index=%d \n"
36250 + , prxattrib->key_index, psecuritypriv->dot118021XGrpKeyid);
36251 + res=_FAIL;
36252 + goto exit;
36253 + }
36254 }
36255 else
36256 {
36257 prwskey=&stainfo->dot118021x_UncstKey.skey[0];
36258 - prwskeylen=16;
36259 }
36260
36261 length= ((union recv_frame *)precvframe)->u.hdr.len-prxattrib->hdrlen-prxattrib->iv_len;
36262 -
36263 - res= aes_decipher(prwskey,prxattrib->hdrlen,pframe, length);
36264 -
36265 + /*// add for CONFIG_IEEE80211W, debug
36266 + if(0)
36267 + printk("@@@@@@@@@@@@@@@@@@ length=%d, prxattrib->hdrlen=%d, prxattrib->pkt_len=%d \n"
36268 + , length, prxattrib->hdrlen, prxattrib->pkt_len);
36269 + if(0)
36270 + {
36271 + int no;
36272 + //test print PSK
36273 + printk("PSK key below:\n");
36274 + for(no=0;no<16;no++)
36275 + printk(" %02x ", prwskey[no]);
36276 + printk("\n");
36277 + }
36278 + if(0)
36279 + {
36280 + int no;
36281 + //test print PSK
36282 + printk("frame:\n");
36283 + for(no=0;no<prxattrib->pkt_len;no++)
36284 + printk(" %02x ", pframe[no]);
36285 + printk("\n");
36286 + }*/
36287
36288 + res= aes_decipher(prwskey,prxattrib->hdrlen,pframe, length);
36289 }
36290 else{
36291 RT_TRACE(_module_rtl871x_security_c_,_drv_err_,("rtw_aes_encrypt: stainfo==NULL!!!\n"));
36292 @@ -1909,11 +2044,114 @@ _func_enter_;
36293 }
36294
36295 }
36296 -_func_exit_;
36297 +_func_exit_;
36298 exit:
36299 return res;
36300 }
36301
36302 +#ifdef CONFIG_IEEE80211W
36303 +u32 rtw_BIP_verify(_adapter *padapter, u8 *precvframe)
36304 +{
36305 + struct rx_pkt_attrib *pattrib = &((union recv_frame *)precvframe)->u.hdr.attrib;
36306 + u8 *pframe;
36307 + u8 *BIP_AAD, *p;
36308 + u32 res=_FAIL;
36309 + uint len, ori_len;
36310 + struct rtw_ieee80211_hdr *pwlanhdr;
36311 + u8 mic[16];
36312 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
36313 + ori_len = pattrib->pkt_len-WLAN_HDR_A3_LEN+BIP_AAD_SIZE;
36314 + BIP_AAD = rtw_zmalloc(ori_len);
36315 +
36316 + if(BIP_AAD == NULL)
36317 + {
36318 + DBG_871X("BIP AAD allocate fail\n");
36319 + return _FAIL;
36320 + }
36321 + //PKT start
36322 + pframe=(unsigned char *)((union recv_frame*)precvframe)->u.hdr.rx_data;
36323 + //mapping to wlan header
36324 + pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
36325 + //save the frame body + MME
36326 + _rtw_memcpy(BIP_AAD+BIP_AAD_SIZE, pframe+WLAN_HDR_A3_LEN, pattrib->pkt_len-WLAN_HDR_A3_LEN);
36327 + //find MME IE pointer
36328 + p = rtw_get_ie(BIP_AAD+BIP_AAD_SIZE, _MME_IE_, &len, pattrib->pkt_len-WLAN_HDR_A3_LEN);
36329 + //Baron
36330 + if(p)
36331 + {
36332 + u16 keyid=0;
36333 + u64 temp_ipn=0;
36334 + //save packet number
36335 + _rtw_memcpy(&temp_ipn, p+4, 6);
36336 + temp_ipn = le64_to_cpu(temp_ipn);
36337 + //BIP packet number should bigger than previous BIP packet
36338 + if(temp_ipn <= pmlmeext->mgnt_80211w_IPN_rx)
36339 + {
36340 + DBG_871X("replay BIP packet\n");
36341 + goto BIP_exit;
36342 + }
36343 + //copy key index
36344 + _rtw_memcpy(&keyid, p+2, 2);
36345 + keyid = le16_to_cpu(keyid);
36346 + if(keyid != padapter->securitypriv.dot11wBIPKeyid)
36347 + {
36348 + DBG_871X("BIP key index error!\n");
36349 + goto BIP_exit;
36350 + }
36351 + //clear the MIC field of MME to zero
36352 + _rtw_memset(p+2+len-8, 0, 8);
36353 +
36354 + //conscruct AAD, copy frame control field
36355 + _rtw_memcpy(BIP_AAD, &pwlanhdr->frame_ctl, 2);
36356 + ClearRetry(BIP_AAD);
36357 + ClearPwrMgt(BIP_AAD);
36358 + ClearMData(BIP_AAD);
36359 + //conscruct AAD, copy address 1 to address 3
36360 + _rtw_memcpy(BIP_AAD+2, pwlanhdr->addr1, 18);
36361 +
36362 + if(omac1_aes_128(padapter->securitypriv.dot11wBIPKey[padapter->securitypriv.dot11wBIPKeyid].skey
36363 + , BIP_AAD, ori_len, mic))
36364 + goto BIP_exit;
36365 +
36366 + /*//management packet content
36367 + {
36368 + int pp;
36369 + DBG_871X("pkt: ");
36370 + for(pp=0;pp< pattrib->pkt_len; pp++)
36371 + printk(" %02x ", pframe[pp]);
36372 + DBG_871X("\n");
36373 + //BIP AAD + management frame body + MME(MIC is zero)
36374 + DBG_871X("AAD+PKT: ");
36375 + for(pp=0;pp< ori_len; pp++)
36376 + DBG_871X(" %02x ", BIP_AAD[pp]);
36377 + DBG_871X("\n");
36378 + //show the MIC result
36379 + DBG_871X("mic: ");
36380 + for(pp=0;pp<16; pp++)
36381 + DBG_871X(" %02x ", mic[pp]);
36382 + DBG_871X("\n");
36383 + }
36384 + */
36385 + //MIC field should be last 8 bytes of packet (packet without FCS)
36386 + if(_rtw_memcmp(mic, pframe+pattrib->pkt_len-8, 8))
36387 + {
36388 + pmlmeext->mgnt_80211w_IPN_rx = temp_ipn;
36389 + res=_SUCCESS;
36390 + }
36391 + else
36392 + DBG_871X("BIP MIC error!\n");
36393 +
36394 + }
36395 + else
36396 + res = RTW_RX_HANDLED;
36397 +BIP_exit:
36398 +
36399 + rtw_mfree(BIP_AAD, ori_len);
36400 + return res;
36401 +}
36402 +#endif //CONFIG_IEEE80211W
36403 +
36404 +#ifndef PLATFORM_FREEBSD
36405 /* compress 512-bits */
36406 static int sha256_compress(struct sha256_state *md, unsigned char *buf)
36407 {
36408 @@ -2179,7 +2417,7 @@ static void hmac_sha256_vector(u8 *key,
36409 _len[1] = 32;
36410 sha256_vector(2, _addr, _len, mac);
36411 }
36412 -
36413 +#endif //PLATFORM_FREEBSD
36414 /**
36415 * sha256_prf - SHA256-based Pseudo-Random Function (IEEE 802.11r, 8.5.1.5.2)
36416 * @key: Key for PRF
36417 @@ -2193,6 +2431,7 @@ static void hmac_sha256_vector(u8 *key,
36418 * This function is used to derive new, cryptographically separate keys from a
36419 * given key.
36420 */
36421 +#ifndef PLATFORM_FREEBSD //Baron
36422 static void sha256_prf(u8 *key, size_t key_len, char *label,
36423 u8 *data, size_t data_len, u8 *buf, size_t buf_len)
36424 {
36425 @@ -2229,6 +2468,7 @@ static void sha256_prf(u8 *key, size_t k
36426 counter++;
36427 }
36428 }
36429 +#endif //PLATFORM_FREEBSD Baron
36430
36431 /* AES tables*/
36432 const u32 Te0[256] = {
36433 @@ -2407,6 +2647,7 @@ const u8 rcons[] = {
36434 *
36435 * @return the number of rounds for the given cipher key size.
36436 */
36437 +#ifndef PLATFORM_FREEBSD //Baron
36438 static void rijndaelKeySetupEnc(u32 rk[/*44*/], const u8 cipherKey[])
36439 {
36440 int i;
36441 @@ -2617,11 +2858,12 @@ static int omac1_aes_128_vector(u8 *key,
36442 * This is a mode for using block cipher (AES in this case) for authentication.
36443 * OMAC1 was standardized with the name CMAC by NIST in a Special Publication
36444 * (SP) 800-38B.
36445 - */
36446 -static int omac1_aes_128(u8 *key, u8 *data, size_t data_len, u8 *mac)
36447 + */ //modify for CONFIG_IEEE80211W
36448 +int omac1_aes_128(u8 *key, u8 *data, size_t data_len, u8 *mac)
36449 {
36450 return omac1_aes_128_vector(key, 1, &data, &data_len, mac);
36451 }
36452 +#endif //PLATFORM_FREEBSD Baron
36453
36454 #ifdef CONFIG_TDLS
36455 void wpa_tdls_generate_tpk(_adapter *padapter, struct sta_info *psta)
36456 @@ -2695,7 +2937,7 @@ int wpa_tdls_ftie_mic(u8 *kck, u8 trans_
36457 2 + timeoutie[1] + 2 + ftie[1];
36458 buf = rtw_zmalloc(len);
36459 if (!buf) {
36460 - DBG_8192C("TDLS: No memory for MIC calculation\n");
36461 + DBG_871X("TDLS: No memory for MIC calculation\n");
36462 return -1;
36463 }
36464
36465 @@ -2741,7 +2983,6 @@ int tdls_verify_mic(u8 *kck, u8 trans_se
36466
36467 if (lnkid == NULL || rsnie == NULL ||
36468 timeoutie == NULL || ftie == NULL){
36469 - DBG_8192C("pointer fail\n");
36470 return 0;
36471 }
36472
36473 @@ -2783,16 +3024,16 @@ int tdls_verify_mic(u8 *kck, u8 trans_se
36474 rx_ftie = ftie+4;
36475
36476 if (os_memcmp(mic, rx_ftie, 16) == 0) {
36477 - //Valid MIC
36478 - DBG_8192C( "[%s] Valid MIC\n", __FUNCTION__);
36479 + //Valid MIC
36480 return 1;
36481 }
36482 +
36483 //Invalid MIC
36484 - DBG_8192C( "[%s] Invalid MIC\n", __FUNCTION__);
36485 + DBG_871X( "[%s] Invalid MIC\n", __FUNCTION__);
36486 return 0;
36487
36488 }
36489 -#endif
36490 +#endif //CONFIG_TDLS
36491
36492 #ifdef PLATFORM_WINDOWS
36493 void rtw_use_tkipkey_handler (
36494 @@ -2805,6 +3046,9 @@ void rtw_use_tkipkey_handler (
36495 #ifdef PLATFORM_LINUX
36496 void rtw_use_tkipkey_handler(void *FunctionContext)
36497 #endif
36498 +#ifdef PLATFORM_FREEBSD
36499 +void rtw_use_tkipkey_handler(void *FunctionContext)
36500 +#endif
36501 {
36502 _adapter *padapter = (_adapter *)FunctionContext;
36503
36504 @@ -2829,3 +3073,43 @@ _func_exit_;
36505
36506 }
36507
36508 +/* Restore HW wep key setting according to key_mask */
36509 +void rtw_sec_restore_wep_key(_adapter *adapter)
36510 +{
36511 + struct security_priv* securitypriv=&(adapter->securitypriv);
36512 + sint keyid;
36513 +
36514 + if((_WEP40_ == securitypriv->dot11PrivacyAlgrthm) ||(_WEP104_ == securitypriv->dot11PrivacyAlgrthm)) {
36515 + for(keyid=0;keyid<4;keyid++){
36516 + if(securitypriv->key_mask & BIT(keyid)){
36517 + if(keyid == securitypriv->dot11PrivacyKeyIndex)
36518 + rtw_set_key(adapter,securitypriv, keyid, 1);
36519 + else
36520 + rtw_set_key(adapter,securitypriv, keyid, 0);
36521 + }
36522 + }
36523 + }
36524 +}
36525 +
36526 +u8 rtw_handle_tkip_countermeasure(_adapter* adapter, const char *caller)
36527 +{
36528 + struct security_priv* securitypriv=&(adapter->securitypriv);
36529 + u8 status = _SUCCESS;
36530 +
36531 + if (securitypriv->btkip_countermeasure == _TRUE) {
36532 + u32 passing_ms = rtw_get_passing_time_ms(securitypriv->btkip_countermeasure_time);
36533 + if (passing_ms > 60*1000) {
36534 + LOG_LEVEL(_drv_info_, "%s("ADPT_FMT") countermeasure time:%ds > 60s \n",
36535 + caller, ADPT_ARG(adapter), passing_ms/1000);
36536 + securitypriv->btkip_countermeasure = _FALSE;
36537 + securitypriv->btkip_countermeasure_time = 0;
36538 + } else {
36539 + LOG_LEVEL(_drv_warning_, "%s("ADPT_FMT") countermeasure time:%ds < 60s \n",
36540 + caller, ADPT_ARG(adapter), passing_ms/1000);
36541 + status = _FAIL;
36542 + }
36543 + }
36544 +
36545 + return status;
36546 +}
36547 +
36548 --- /dev/null
36549 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_sreset.c
36550 @@ -0,0 +1,352 @@
36551 +/******************************************************************************
36552 + *
36553 + * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
36554 + *
36555 + * This program is free software; you can redistribute it and/or modify it
36556 + * under the terms of version 2 of the GNU General Public License as
36557 + * published by the Free Software Foundation.
36558 + *
36559 + * This program is distributed in the hope that it will be useful, but WITHOUT
36560 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
36561 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
36562 + * more details.
36563 + *
36564 + * You should have received a copy of the GNU General Public License along with
36565 + * this program; if not, write to the Free Software Foundation, Inc.,
36566 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
36567 + *
36568 + *
36569 + ******************************************************************************/
36570 +
36571 +#include<rtw_sreset.h>
36572 +
36573 +void sreset_init_value(_adapter *padapter)
36574 +{
36575 +#if defined(DBG_CONFIG_ERROR_DETECT)
36576 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
36577 + struct sreset_priv *psrtpriv = &pHalData->srestpriv;
36578 +
36579 + _rtw_mutex_init(&psrtpriv->silentreset_mutex);
36580 + psrtpriv->silent_reset_inprogress = _FALSE;
36581 + psrtpriv->Wifi_Error_Status = WIFI_STATUS_SUCCESS;
36582 + psrtpriv->last_tx_time =0;
36583 + psrtpriv->last_tx_complete_time =0;
36584 +#endif
36585 +}
36586 +void sreset_reset_value(_adapter *padapter)
36587 +{
36588 +#if defined(DBG_CONFIG_ERROR_DETECT)
36589 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
36590 + struct sreset_priv *psrtpriv = &pHalData->srestpriv;
36591 +
36592 + psrtpriv->silent_reset_inprogress = _FALSE;
36593 + psrtpriv->Wifi_Error_Status = WIFI_STATUS_SUCCESS;
36594 + psrtpriv->last_tx_time =0;
36595 + psrtpriv->last_tx_complete_time =0;
36596 +#endif
36597 +}
36598 +
36599 +u8 sreset_get_wifi_status(_adapter *padapter)
36600 +{
36601 +#if defined(DBG_CONFIG_ERROR_DETECT)
36602 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
36603 + struct sreset_priv *psrtpriv = &pHalData->srestpriv;
36604 +
36605 + u8 status = WIFI_STATUS_SUCCESS;
36606 + u32 val32 = 0;
36607 + _irqL irqL;
36608 + if(psrtpriv->silent_reset_inprogress == _TRUE)
36609 + {
36610 + return status;
36611 + }
36612 + val32 =rtw_read32(padapter,REG_TXDMA_STATUS);
36613 + if(val32==0xeaeaeaea){
36614 + psrtpriv->Wifi_Error_Status = WIFI_IF_NOT_EXIST;
36615 + }
36616 + else if(val32!=0){
36617 + DBG_8192C("txdmastatu(%x)\n",val32);
36618 + psrtpriv->Wifi_Error_Status = WIFI_MAC_TXDMA_ERROR;
36619 + }
36620 +
36621 + if(WIFI_STATUS_SUCCESS !=psrtpriv->Wifi_Error_Status)
36622 + {
36623 + DBG_8192C("==>%s error_status(0x%x) \n",__FUNCTION__,psrtpriv->Wifi_Error_Status);
36624 + status = (psrtpriv->Wifi_Error_Status &( ~(USB_READ_PORT_FAIL|USB_WRITE_PORT_FAIL)));
36625 + }
36626 + DBG_8192C("==> %s wifi_status(0x%x)\n",__FUNCTION__,status);
36627 +
36628 + //status restore
36629 + psrtpriv->Wifi_Error_Status = WIFI_STATUS_SUCCESS;
36630 +
36631 + return status;
36632 +#else
36633 + return WIFI_STATUS_SUCCESS;
36634 +#endif
36635 +}
36636 +
36637 +void sreset_set_wifi_error_status(_adapter *padapter, u32 status)
36638 +{
36639 +#if defined(DBG_CONFIG_ERROR_DETECT)
36640 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
36641 + pHalData->srestpriv.Wifi_Error_Status = status;
36642 +#endif
36643 +}
36644 +
36645 +void sreset_set_trigger_point(_adapter *padapter, s32 tgp)
36646 +{
36647 +#if defined(DBG_CONFIG_ERROR_DETECT)
36648 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
36649 + pHalData->srestpriv.dbg_trigger_point = tgp;
36650 +#endif
36651 +}
36652 +
36653 +bool sreset_inprogress(_adapter *padapter)
36654 +{
36655 +#if defined(DBG_CONFIG_ERROR_RESET)
36656 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
36657 + return pHalData->srestpriv.silent_reset_inprogress;
36658 +#else
36659 + return _FALSE;
36660 +#endif
36661 +}
36662 +
36663 +void sreset_restore_security_station(_adapter *padapter)
36664 +{
36665 + u8 EntryId = 0;
36666 + struct mlme_priv *mlmepriv = &padapter->mlmepriv;
36667 + struct sta_priv * pstapriv = &padapter->stapriv;
36668 + struct sta_info *psta;
36669 + struct security_priv* psecuritypriv=&(padapter->securitypriv);
36670 + struct mlme_ext_info *pmlmeinfo = &padapter->mlmeextpriv.mlmext_info;
36671 +
36672 + {
36673 + u8 val8;
36674 +
36675 + if (pmlmeinfo->auth_algo == dot11AuthAlgrthm_8021X) {
36676 + val8 = 0xcc;
36677 + #ifdef CONFIG_WAPI_SUPPORT
36678 + } else if (padapter->wapiInfo.bWapiEnable && pmlmeinfo->auth_algo == dot11AuthAlgrthm_WAPI) {
36679 + //Disable TxUseDefaultKey, RxUseDefaultKey, RxBroadcastUseDefaultKey.
36680 + val8 = 0x4c;
36681 + #endif
36682 + } else {
36683 + val8 = 0xcf;
36684 + }
36685 + rtw_hal_set_hwreg(padapter, HW_VAR_SEC_CFG, (u8 *)(&val8));
36686 + }
36687 +
36688 + #if 0
36689 + if ( ( padapter->securitypriv.dot11PrivacyAlgrthm == _WEP40_ ) ||
36690 + ( padapter->securitypriv.dot11PrivacyAlgrthm == _WEP104_ ))
36691 + {
36692 +
36693 + for(EntryId=0; EntryId<4; EntryId++)
36694 + {
36695 + if(EntryId == psecuritypriv->dot11PrivacyKeyIndex)
36696 + rtw_set_key(padapter,&padapter->securitypriv, EntryId, 1);
36697 + else
36698 + rtw_set_key(padapter,&padapter->securitypriv, EntryId, 0);
36699 + }
36700 +
36701 + }
36702 + else
36703 + #endif
36704 + if((padapter->securitypriv.dot11PrivacyAlgrthm == _TKIP_) ||
36705 + (padapter->securitypriv.dot11PrivacyAlgrthm == _AES_))
36706 + {
36707 + psta = rtw_get_stainfo(pstapriv, get_bssid(mlmepriv));
36708 + if (psta == NULL) {
36709 + //DEBUG_ERR( ("Set wpa_set_encryption: Obtain Sta_info fail \n"));
36710 + }
36711 + else
36712 + {
36713 + //pairwise key
36714 + rtw_setstakey_cmd(padapter, (unsigned char *)psta, _TRUE);
36715 + //group key
36716 + rtw_set_key(padapter,&padapter->securitypriv,padapter->securitypriv.dot118021XGrpKeyid, 0);
36717 + }
36718 + }
36719 +}
36720 +
36721 +void sreset_restore_network_station(_adapter *padapter)
36722 +{
36723 + struct mlme_priv *mlmepriv = &padapter->mlmepriv;
36724 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
36725 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
36726 +
36727 + #if 0
36728 + {
36729 + //=======================================================
36730 + // reset related register of Beacon control
36731 +
36732 + //set MSR to nolink
36733 + Set_MSR(padapter, _HW_STATE_NOLINK_);
36734 + // reject all data frame
36735 + rtw_write16(padapter, REG_RXFLTMAP2,0x00);
36736 + //reset TSF
36737 + rtw_write8(padapter, REG_DUAL_TSF_RST, (BIT(0)|BIT(1)));
36738 +
36739 + // disable update TSF
36740 + SetBcnCtrlReg(padapter, BIT(4), 0);
36741 +
36742 + //=======================================================
36743 + }
36744 + #endif
36745 +
36746 + rtw_setopmode_cmd(padapter, Ndis802_11Infrastructure);
36747 +
36748 + {
36749 + u8 threshold;
36750 + #ifdef CONFIG_USB_HCI
36751 + // TH=1 => means that invalidate usb rx aggregation
36752 + // TH=0 => means that validate usb rx aggregation, use init value.
36753 + if(mlmepriv->htpriv.ht_option) {
36754 + if(padapter->registrypriv.wifi_spec==1)
36755 + threshold = 1;
36756 + else
36757 + threshold = 0;
36758 + rtw_hal_set_hwreg(padapter, HW_VAR_RXDMA_AGG_PG_TH, (u8 *)(&threshold));
36759 + } else {
36760 + threshold = 1;
36761 + rtw_hal_set_hwreg(padapter, HW_VAR_RXDMA_AGG_PG_TH, (u8 *)(&threshold));
36762 + }
36763 + #endif
36764 + }
36765 +
36766 + set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
36767 +
36768 + //disable dynamic functions, such as high power, DIG
36769 + //Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);
36770 +
36771 + rtw_hal_set_hwreg(padapter, HW_VAR_BSSID, pmlmeinfo->network.MacAddress);
36772 +
36773 + {
36774 + u8 join_type = 0;
36775 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_JOIN, (u8 *)(&join_type));
36776 + }
36777 +
36778 + Set_MSR(padapter, (pmlmeinfo->state & 0x3));
36779 +
36780 + mlmeext_joinbss_event_callback(padapter, 1);
36781 + //restore Sequence No.
36782 + rtw_write8(padapter,0x4dc,padapter->xmitpriv.nqos_ssn);
36783 +
36784 + sreset_restore_security_station(padapter);
36785 +}
36786 +
36787 +void sreset_restore_network_status(_adapter *padapter)
36788 +{
36789 + struct mlme_priv *mlmepriv = &padapter->mlmepriv;
36790 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
36791 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
36792 +
36793 + if (check_fwstate(mlmepriv, WIFI_STATION_STATE)) {
36794 + DBG_871X(FUNC_ADPT_FMT" fwstate:0x%08x - WIFI_STATION_STATE\n", FUNC_ADPT_ARG(padapter), get_fwstate(mlmepriv));
36795 + sreset_restore_network_station(padapter);
36796 + } else if (check_fwstate(mlmepriv, WIFI_AP_STATE)) {
36797 + DBG_871X(FUNC_ADPT_FMT" fwstate:0x%08x - WIFI_AP_STATE\n", FUNC_ADPT_ARG(padapter), get_fwstate(mlmepriv));
36798 + rtw_ap_restore_network(padapter);
36799 + } else if (check_fwstate(mlmepriv, WIFI_ADHOC_STATE)) {
36800 + DBG_871X(FUNC_ADPT_FMT" fwstate:0x%08x - WIFI_ADHOC_STATE\n", FUNC_ADPT_ARG(padapter), get_fwstate(mlmepriv));
36801 + } else {
36802 + DBG_871X(FUNC_ADPT_FMT" fwstate:0x%08x - ???\n", FUNC_ADPT_ARG(padapter), get_fwstate(mlmepriv));
36803 + }
36804 +}
36805 +
36806 +void sreset_stop_adapter(_adapter *padapter)
36807 +{
36808 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
36809 + struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
36810 +
36811 + if (padapter == NULL)
36812 + return;
36813 +
36814 + DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter));
36815 +
36816 + if (!rtw_netif_queue_stopped(padapter->pnetdev))
36817 + rtw_netif_stop_queue(padapter->pnetdev);
36818 +
36819 + rtw_cancel_all_timer(padapter);
36820 +
36821 + /* TODO: OS and HCI independent */
36822 + #if defined(PLATFORM_LINUX) && defined(CONFIG_USB_HCI)
36823 + tasklet_kill(&pxmitpriv->xmit_tasklet);
36824 + #endif
36825 +
36826 + if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY))
36827 + rtw_scan_abort(padapter);
36828 +
36829 + if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING))
36830 + _rtw_join_timeout_handler(padapter);
36831 +
36832 +}
36833 +
36834 +void sreset_start_adapter(_adapter *padapter)
36835 +{
36836 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
36837 + struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
36838 +
36839 + if (padapter == NULL)
36840 + return;
36841 +
36842 + DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter));
36843 +
36844 + if (check_fwstate(pmlmepriv, _FW_LINKED)) {
36845 + sreset_restore_network_status(padapter);
36846 + }
36847 +
36848 + /* TODO: OS and HCI independent */
36849 + #if defined(PLATFORM_LINUX) && defined(CONFIG_USB_HCI)
36850 + tasklet_hi_schedule(&pxmitpriv->xmit_tasklet);
36851 + #endif
36852 +
36853 + _set_timer(&padapter->mlmepriv.dynamic_chk_timer, 2000);
36854 +
36855 + if (rtw_netif_queue_stopped(padapter->pnetdev))
36856 + rtw_netif_wake_queue(padapter->pnetdev);
36857 +
36858 +}
36859 +
36860 +void sreset_reset(_adapter *padapter)
36861 +{
36862 +#ifdef DBG_CONFIG_ERROR_RESET
36863 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
36864 + struct sreset_priv *psrtpriv = &pHalData->srestpriv;
36865 + struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
36866 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
36867 + struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
36868 + _irqL irqL;
36869 + u32 start = rtw_get_current_time();
36870 +
36871 + DBG_871X("%s\n", __FUNCTION__);
36872 +
36873 + psrtpriv->Wifi_Error_Status = WIFI_STATUS_SUCCESS;
36874 +
36875 + _enter_pwrlock(&pwrpriv->lock);
36876 +
36877 + psrtpriv->silent_reset_inprogress = _TRUE;
36878 + pwrpriv->change_rfpwrstate = rf_off;
36879 +
36880 + sreset_stop_adapter(padapter);
36881 + #ifdef CONFIG_CONCURRENT_MODE
36882 + sreset_stop_adapter(padapter->pbuddy_adapter);
36883 + #endif
36884 +
36885 + #ifdef CONFIG_IPS
36886 + _ips_enter(padapter);
36887 + _ips_leave(padapter);
36888 + #endif
36889 +
36890 + sreset_start_adapter(padapter);
36891 + #ifdef CONFIG_CONCURRENT_MODE
36892 + sreset_start_adapter(padapter->pbuddy_adapter);
36893 + #endif
36894 +
36895 + psrtpriv->silent_reset_inprogress = _FALSE;
36896 +
36897 + _exit_pwrlock(&pwrpriv->lock);
36898 +
36899 + DBG_871X("%s done in %d ms\n", __FUNCTION__, rtw_get_passing_time_ms(start));
36900 +#endif
36901 +}
36902 +
36903 --- a/drivers/net/wireless/rtl8192cu/core/rtw_sta_mgt.c
36904 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_sta_mgt.c
36905 @@ -15,8 +15,8 @@
36906 * this program; if not, write to the Free Software Foundation, Inc.,
36907 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
36908 *
36909 - *
36910 -******************************************************************************/
36911 + *
36912 + ******************************************************************************/
36913 #define _RTW_STA_MGT_C_
36914
36915 #include <drv_conf.h>
36916 @@ -35,7 +35,7 @@
36917
36918 #include <sta_info.h>
36919
36920 -
36921 +void _rtw_init_stainfo(struct sta_info *psta);
36922 void _rtw_init_stainfo(struct sta_info *psta)
36923 {
36924
36925 @@ -84,6 +84,8 @@ _func_enter_;
36926 psta->under_exist_checking = 0;
36927 #endif // CONFIG_TX_MCAST2UNI
36928
36929 + psta->keep_alive_trycnt = 0;
36930 +
36931 #endif // CONFIG_AP_MODE
36932
36933 _func_exit_;
36934 @@ -94,7 +96,7 @@ u32 _rtw_init_sta_priv(struct sta_priv *
36935 {
36936 struct sta_info *psta;
36937 s32 i;
36938 -
36939 +
36940 _func_enter_;
36941
36942 pstapriv->pallocated_stainfo_buf = rtw_zvmalloc (sizeof(struct sta_info) * NUM_STA+ 4);
36943 @@ -128,6 +130,8 @@ _func_enter_;
36944 psta++;
36945 }
36946
36947 +
36948 +
36949 #ifdef CONFIG_AP_MODE
36950
36951 pstapriv->sta_dz_bitmap = 0;
36952 @@ -135,18 +139,22 @@ _func_enter_;
36953
36954 _rtw_init_listhead(&pstapriv->asoc_list);
36955 _rtw_init_listhead(&pstapriv->auth_list);
36956 -
36957 _rtw_spinlock_init(&pstapriv->asoc_list_lock);
36958 - _rtw_spinlock_init(&pstapriv->auth_list_lock);
36959 -
36960 + _rtw_spinlock_init(&pstapriv->auth_list_lock);
36961 + pstapriv->asoc_list_cnt = 0;
36962 + pstapriv->auth_list_cnt = 0;
36963 +
36964 pstapriv->auth_to = 3; // 3*2 = 6 sec
36965 pstapriv->assoc_to = 3;
36966 //pstapriv->expire_to = 900;// 900*2 = 1800 sec = 30 min, expire after no any traffic.
36967 //pstapriv->expire_to = 30;// 30*2 = 60 sec = 1 min, expire after no any traffic.
36968 +#ifdef CONFIG_ACTIVE_KEEP_ALIVE_CHECK
36969 + pstapriv->expire_to = 3; // 3*2 = 6 sec
36970 +#else
36971 pstapriv->expire_to = 60;// 60*2 = 120 sec = 2 min, expire after no any traffic.
36972 -
36973 +#endif
36974 pstapriv->max_num_sta = NUM_STA;
36975 -
36976 +
36977 #endif
36978
36979 _func_exit_;
36980 @@ -155,6 +163,25 @@ _func_exit_;
36981
36982 }
36983
36984 +inline int rtw_stainfo_offset(struct sta_priv *stapriv, struct sta_info *sta)
36985 +{
36986 + int offset = (((u8 *)sta) - stapriv->pstainfo_buf)/sizeof(struct sta_info);
36987 +
36988 + if (!stainfo_offset_valid(offset))
36989 + DBG_871X("%s invalid offset(%d), out of range!!!", __func__, offset);
36990 +
36991 + return offset;
36992 +}
36993 +
36994 +inline struct sta_info *rtw_get_stainfo_by_offset(struct sta_priv *stapriv, int offset)
36995 +{
36996 + if (!stainfo_offset_valid(offset))
36997 + DBG_871X("%s invalid offset(%d), out of range!!!", __func__, offset);
36998 +
36999 + return (struct sta_info *)(stapriv->pstainfo_buf + offset * sizeof(struct sta_info));
37000 +}
37001 +
37002 +void _rtw_free_sta_xmit_priv_lock(struct sta_xmit_priv *psta_xmitpriv);
37003 void _rtw_free_sta_xmit_priv_lock(struct sta_xmit_priv *psta_xmitpriv)
37004 {
37005 _func_enter_;
37006 @@ -180,6 +207,7 @@ _func_exit_;
37007
37008 }
37009
37010 +void rtw_mfree_stainfo(struct sta_info *psta);
37011 void rtw_mfree_stainfo(struct sta_info *psta)
37012 {
37013 _func_enter_;
37014 @@ -195,6 +223,7 @@ _func_exit_;
37015
37016
37017 // this function is used to free the memory of lock || sema for all stainfos
37018 +void rtw_mfree_all_stainfo(struct sta_priv *pstapriv );
37019 void rtw_mfree_all_stainfo(struct sta_priv *pstapriv )
37020 {
37021 _irqL irqL;
37022 @@ -222,9 +251,13 @@ _func_exit_;
37023
37024 }
37025
37026 -
37027 +void rtw_mfree_sta_priv_lock(struct sta_priv *pstapriv);
37028 void rtw_mfree_sta_priv_lock(struct sta_priv *pstapriv)
37029 {
37030 +#ifdef CONFIG_AP_MODE
37031 + struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
37032 +#endif
37033 +
37034 rtw_mfree_all_stainfo(pstapriv); //be done before free sta_hash_lock
37035
37036 _rtw_spinlock_free(&pstapriv->free_sta_queue.lock);
37037 @@ -235,15 +268,46 @@ void rtw_mfree_sta_priv_lock(struct sta_
37038
37039 #ifdef CONFIG_AP_MODE
37040 _rtw_spinlock_free(&pstapriv->asoc_list_lock);
37041 - _rtw_spinlock_free(&pstapriv->auth_list_lock);
37042 + _rtw_spinlock_free(&pstapriv->auth_list_lock);
37043 + _rtw_spinlock_free(&pacl_list->acl_node_q.lock);
37044 #endif
37045
37046 }
37047
37048 u32 _rtw_free_sta_priv(struct sta_priv *pstapriv)
37049 {
37050 + _irqL irqL;
37051 + _list *phead, *plist;
37052 + struct sta_info *psta = NULL;
37053 + struct recv_reorder_ctrl *preorder_ctrl;
37054 + int index;
37055 +
37056 _func_enter_;
37057 if(pstapriv){
37058 +
37059 + /* delete all reordering_ctrl_timer */
37060 + _enter_critical_bh(&pstapriv->sta_hash_lock, &irqL);
37061 + for(index = 0; index < NUM_STA; index++)
37062 + {
37063 + phead = &(pstapriv->sta_hash[index]);
37064 + plist = get_next(phead);
37065 +
37066 + while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
37067 + {
37068 + int i;
37069 + psta = LIST_CONTAINOR(plist, struct sta_info ,hash_list);
37070 + plist = get_next(plist);
37071 +
37072 + for(i=0; i < 16 ; i++)
37073 + {
37074 + preorder_ctrl = &psta->recvreorder_ctrl[i];
37075 + _cancel_timer_ex(&preorder_ctrl->reordering_ctrl_timer);
37076 + }
37077 + }
37078 + }
37079 + _exit_critical_bh(&pstapriv->sta_hash_lock, &irqL);
37080 + /*===============================*/
37081 +
37082 rtw_mfree_sta_priv_lock(pstapriv);
37083
37084 if(pstapriv->pallocated_stainfo_buf) {
37085 @@ -273,11 +337,13 @@ _func_enter_;
37086
37087 pfree_sta_queue = &pstapriv->free_sta_queue;
37088
37089 - _enter_critical_bh(&(pfree_sta_queue->lock), &irqL);
37090 + //_enter_critical_bh(&(pfree_sta_queue->lock), &irqL);
37091 + _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL2);
37092
37093 if (_rtw_queue_empty(pfree_sta_queue) == _TRUE)
37094 {
37095 - _exit_critical_bh(&(pfree_sta_queue->lock), &irqL);
37096 + //_exit_critical_bh(&(pfree_sta_queue->lock), &irqL);
37097 + _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL2);
37098 psta = NULL;
37099 }
37100 else
37101 @@ -285,8 +351,8 @@ _func_enter_;
37102 psta = LIST_CONTAINOR(get_next(&pfree_sta_queue->queue), struct sta_info, list);
37103
37104 rtw_list_delete(&(psta->list));
37105 -
37106 - _exit_critical_bh(&(pfree_sta_queue->lock), &irqL);
37107 +
37108 + //_exit_critical_bh(&(pfree_sta_queue->lock), &irqL);
37109
37110 tmp_aid = psta->aid;
37111
37112 @@ -305,13 +371,13 @@ _func_enter_;
37113 }
37114 phash_list = &(pstapriv->sta_hash[index]);
37115
37116 - _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL2);
37117 + //_enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL2);
37118
37119 rtw_list_insert_tail(&psta->hash_list, phash_list);
37120
37121 pstapriv->asoc_sta_count ++ ;
37122
37123 - _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL2);
37124 + //_exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL2);
37125
37126 // Commented by Albert 2009/08/13
37127 // For the SMC router, the sequence number of first packet of WPS handshake will be 0.
37128 @@ -336,7 +402,7 @@ _func_enter_;
37129 init_off_ch_timer(pstapriv->padapter, psta);
37130 init_handshake_timer(pstapriv->padapter, psta);
37131 init_tdls_alive_timer(pstapriv->padapter, psta);
37132 -#endif
37133 +#endif //CONFIG_TDLS
37134
37135 //for A-MPDU Rx reordering buffer control
37136 for(i=0; i < 16 ; i++)
37137 @@ -363,14 +429,18 @@ _func_enter_;
37138
37139
37140 //init for DM
37141 - psta->rssi_stat.UndecoratedSmoothedPWDB = (-1);
37142 + psta->rssi_stat.UndecoratedSmoothedPWDB = 0;
37143 psta->rssi_stat.UndecoratedSmoothedCCK = (-1);
37144
37145 + /* init for the sequence number of received management frame */
37146 + psta->RxMgmtFrameSeqNum = 0xffff;
37147 }
37148
37149 exit:
37150 -
37151 -_func_exit_;
37152 +
37153 + _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL2);
37154 +
37155 +_func_exit_;
37156
37157 return psta;
37158
37159 @@ -388,6 +458,7 @@ u32 rtw_free_stainfo(_adapter *padapter
37160 struct sta_xmit_priv *pstaxmitpriv;
37161 struct xmit_priv *pxmitpriv= &padapter->xmitpriv;
37162 struct sta_priv *pstapriv = &padapter->stapriv;
37163 + struct hw_xmit *phwxmit;
37164
37165
37166 _func_enter_;
37167 @@ -395,6 +466,11 @@ _func_enter_;
37168 if (psta == NULL)
37169 goto exit;
37170
37171 +
37172 + _enter_critical_bh(&psta->lock, &irqL0);
37173 + psta->state &= ~_FW_LINKED;
37174 + _exit_critical_bh(&psta->lock, &irqL0);
37175 +
37176 pfree_sta_queue = &pstapriv->free_sta_queue;
37177
37178
37179 @@ -409,40 +485,42 @@ _func_enter_;
37180 rtw_free_xmitframe_queue(pxmitpriv, &psta->sleep_q);
37181 psta->sleepq_len = 0;
37182
37183 + //vo
37184 //_enter_critical_bh(&(pxmitpriv->vo_pending.lock), &irqL0);
37185 -
37186 rtw_free_xmitframe_queue( pxmitpriv, &pstaxmitpriv->vo_q.sta_pending);
37187 -
37188 rtw_list_delete(&(pstaxmitpriv->vo_q.tx_pending));
37189 -
37190 + phwxmit = pxmitpriv->hwxmits;
37191 + phwxmit->accnt -= pstaxmitpriv->vo_q.qcnt;
37192 + pstaxmitpriv->vo_q.qcnt = 0;
37193 //_exit_critical_bh(&(pxmitpriv->vo_pending.lock), &irqL0);
37194 -
37195
37196 + //vi
37197 //_enter_critical_bh(&(pxmitpriv->vi_pending.lock), &irqL0);
37198 -
37199 rtw_free_xmitframe_queue( pxmitpriv, &pstaxmitpriv->vi_q.sta_pending);
37200 -
37201 rtw_list_delete(&(pstaxmitpriv->vi_q.tx_pending));
37202 -
37203 + phwxmit = pxmitpriv->hwxmits+1;
37204 + phwxmit->accnt -= pstaxmitpriv->vi_q.qcnt;
37205 + pstaxmitpriv->vi_q.qcnt = 0;
37206 //_exit_critical_bh(&(pxmitpriv->vi_pending.lock), &irqL0);
37207
37208 -
37209 - //_enter_critical_bh(&(pxmitpriv->bk_pending.lock), &irqL0);
37210 -
37211 - rtw_free_xmitframe_queue( pxmitpriv, &pstaxmitpriv->bk_q.sta_pending);
37212 -
37213 - rtw_list_delete(&(pstaxmitpriv->bk_q.tx_pending));
37214 -
37215 - //_exit_critical_bh(&(pxmitpriv->bk_pending.lock), &irqL0);
37216 -
37217 + //be
37218 //_enter_critical_bh(&(pxmitpriv->be_pending.lock), &irqL0);
37219 -
37220 rtw_free_xmitframe_queue( pxmitpriv, &pstaxmitpriv->be_q.sta_pending);
37221 -
37222 rtw_list_delete(&(pstaxmitpriv->be_q.tx_pending));
37223 -
37224 + phwxmit = pxmitpriv->hwxmits+2;
37225 + phwxmit->accnt -= pstaxmitpriv->be_q.qcnt;
37226 + pstaxmitpriv->be_q.qcnt = 0;
37227 //_exit_critical_bh(&(pxmitpriv->be_pending.lock), &irqL0);
37228
37229 + //bk
37230 + //_enter_critical_bh(&(pxmitpriv->bk_pending.lock), &irqL0);
37231 + rtw_free_xmitframe_queue( pxmitpriv, &pstaxmitpriv->bk_q.sta_pending);
37232 + rtw_list_delete(&(pstaxmitpriv->bk_q.tx_pending));
37233 + phwxmit = pxmitpriv->hwxmits+3;
37234 + phwxmit->accnt -= pstaxmitpriv->bk_q.qcnt;
37235 + pstaxmitpriv->bk_q.qcnt = 0;
37236 + //_exit_critical_bh(&(pxmitpriv->bk_pending.lock), &irqL0);
37237 +
37238 _exit_critical_bh(&pxmitpriv->lock, &irqL0);
37239
37240 rtw_list_delete(&psta->hash_list);
37241 @@ -450,9 +528,9 @@ _func_enter_;
37242 pstapriv->asoc_sta_count --;
37243
37244
37245 - // re-init sta_info; 20061114
37246 - _rtw_init_sta_xmit_priv(&psta->sta_xmitpriv);
37247 - _rtw_init_sta_recv_priv(&psta->sta_recvpriv);
37248 + // re-init sta_info; 20061114 // will be init in alloc_stainfo
37249 + //_rtw_init_sta_xmit_priv(&psta->sta_xmitpriv);
37250 + //_rtw_init_sta_recv_priv(&psta->sta_recvpriv);
37251
37252 _cancel_timer_ex(&psta->addba_retry_timer);
37253
37254 @@ -463,7 +541,7 @@ _func_enter_;
37255 _cancel_timer_ex(&psta->off_ch_timer);
37256 _cancel_timer_ex(&psta->alive_timer1);
37257 _cancel_timer_ex(&psta->alive_timer2);
37258 -#endif
37259 +#endif //CONFIG_TDLS
37260
37261 //for A-MPDU Rx reordering buffer control, cancel reordering_ctrl_timer
37262 for(i=0; i < 16 ; i++)
37263 @@ -509,9 +587,11 @@ _func_enter_;
37264 rtw_list_delete(&psta->asoc_list);
37265 _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL0);
37266 */
37267 -
37268 _enter_critical_bh(&pstapriv->auth_list_lock, &irqL0);
37269 - rtw_list_delete(&psta->auth_list);
37270 + if (!rtw_is_list_empty(&psta->auth_list)) {
37271 + rtw_list_delete(&psta->auth_list);
37272 + pstapriv->auth_list_cnt--;
37273 + }
37274 _exit_critical_bh(&pstapriv->auth_list_lock, &irqL0);
37275
37276 psta->expire_to = 0;
37277 @@ -534,7 +614,7 @@ _func_enter_;
37278
37279 //rtw_indicate_sta_disassoc_event(padapter, psta);
37280
37281 - if (pstapriv->sta_aid[psta->aid - 1] == psta)
37282 + if ((psta->aid >0)&&(pstapriv->sta_aid[psta->aid - 1] == psta))
37283 {
37284 pstapriv->sta_aid[psta->aid - 1] = NULL;
37285 psta->aid = 0;
37286 @@ -548,11 +628,13 @@ _func_enter_;
37287
37288 #endif // CONFIG_AP_MODE
37289
37290 - _enter_critical_bh(&(pfree_sta_queue->lock), &irqL0);
37291 + _rtw_spinlock_free(&psta->lock);
37292 +
37293 + //_enter_critical_bh(&(pfree_sta_queue->lock), &irqL0);
37294 rtw_list_insert_tail(&psta->list, get_list_head(pfree_sta_queue));
37295 - _exit_critical_bh(&(pfree_sta_queue->lock), &irqL0);
37296 + //_exit_critical_bh(&(pfree_sta_queue->lock), &irqL0);
37297
37298 -exit:
37299 +exit:
37300
37301 _func_exit_;
37302
37303 @@ -713,8 +795,54 @@ _func_exit_;
37304
37305 }
37306
37307 -u8 rtw_access_ctrl(struct wlan_acl_pool* pacl_list, u8 * mac_addr)
37308 +u8 rtw_access_ctrl(_adapter *padapter, u8 *mac_addr)
37309 {
37310 - return _TRUE;
37311 + u8 res = _TRUE;
37312 +#ifdef CONFIG_AP_MODE
37313 + _irqL irqL;
37314 + _list *plist, *phead;
37315 + struct rtw_wlan_acl_node *paclnode;
37316 + u8 match = _FALSE;
37317 + struct sta_priv *pstapriv = &padapter->stapriv;
37318 + struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
37319 + _queue *pacl_node_q =&pacl_list->acl_node_q;
37320 +
37321 + _enter_critical_bh(&(pacl_node_q->lock), &irqL);
37322 + phead = get_list_head(pacl_node_q);
37323 + plist = get_next(phead);
37324 + while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
37325 + {
37326 + paclnode = LIST_CONTAINOR(plist, struct rtw_wlan_acl_node, list);
37327 + plist = get_next(plist);
37328 +
37329 + if(_rtw_memcmp(paclnode->addr, mac_addr, ETH_ALEN))
37330 + {
37331 + if(paclnode->valid == _TRUE)
37332 + {
37333 + match = _TRUE;
37334 + break;
37335 + }
37336 + }
37337 + }
37338 + _exit_critical_bh(&(pacl_node_q->lock), &irqL);
37339 +
37340 +
37341 + if(pacl_list->mode == 1)//accept unless in deny list
37342 + {
37343 + res = (match == _TRUE) ? _FALSE:_TRUE;
37344 + }
37345 + else if(pacl_list->mode == 2)//deny unless in accept list
37346 + {
37347 + res = (match == _TRUE) ? _TRUE:_FALSE;
37348 + }
37349 + else
37350 + {
37351 + res = _TRUE;
37352 + }
37353 +
37354 +#endif
37355 +
37356 + return res;
37357 +
37358 }
37359
37360 --- /dev/null
37361 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_tdls.c
37362 @@ -0,0 +1,2941 @@
37363 +/******************************************************************************
37364 + *
37365 + * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
37366 + *
37367 + * This program is free software; you can redistribute it and/or modify it
37368 + * under the terms of version 2 of the GNU General Public License as
37369 + * published by the Free Software Foundation.
37370 + *
37371 + * This program is distributed in the hope that it will be useful, but WITHOUT
37372 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
37373 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
37374 + * more details.
37375 + *
37376 + * You should have received a copy of the GNU General Public License along with
37377 + * this program; if not, write to the Free Software Foundation, Inc.,
37378 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
37379 + *
37380 + *
37381 + ******************************************************************************/
37382 +#define _RTW_TDLS_C_
37383 +
37384 +#include <drv_types.h>
37385 +#include <ethernet.h>
37386 +#include <rtw_tdls.h>
37387 +#include <wifi.h>
37388 +
37389 +#ifdef CONFIG_TDLS
37390 +extern unsigned char MCS_rate_2R[16];
37391 +extern unsigned char MCS_rate_1R[16];
37392 +extern void process_wmmps_data(_adapter *padapter, union recv_frame *precv_frame);
37393 +extern s32 rtw_dump_xframe(_adapter *padapter, struct xmit_frame *pxmitframe);
37394 +
37395 +void rtw_reset_tdls_info(_adapter* padapter)
37396 +{
37397 + struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
37398 +
37399 + ptdlsinfo->ap_prohibited = _FALSE;
37400 + ptdlsinfo->setup_state = TDLS_STATE_NONE;
37401 + ptdlsinfo->sta_cnt = 0;
37402 + ptdlsinfo->sta_maximum = _FALSE;
37403 + ptdlsinfo->macid_index= 6;
37404 + ptdlsinfo->clear_cam= 0;
37405 + ptdlsinfo->ch_sensing = 0;
37406 + ptdlsinfo->cur_channel = 0;
37407 + ptdlsinfo->candidate_ch = 1; //when inplement channel switching, default candidate channel is 1
37408 + ptdlsinfo->watchdog_count = 0;
37409 + ptdlsinfo->dev_discovered = 0;
37410 +
37411 +#ifdef CONFIG_WFD
37412 + ptdlsinfo->wfd_info = &padapter->wfd_info;
37413 +#endif //CONFIG_WFD
37414 +}
37415 +
37416 +int rtw_init_tdls_info(_adapter* padapter)
37417 +{
37418 + int res = _SUCCESS;
37419 + struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
37420 +
37421 + ptdlsinfo->enable = 1;
37422 + rtw_reset_tdls_info(padapter);
37423 +
37424 + _rtw_spinlock_init(&ptdlsinfo->cmd_lock);
37425 + _rtw_spinlock_init(&ptdlsinfo->hdl_lock);
37426 +
37427 + return res;
37428 +
37429 +}
37430 +
37431 +void rtw_free_tdls_info(struct tdls_info *ptdlsinfo)
37432 +{
37433 + _rtw_spinlock_free(&ptdlsinfo->cmd_lock);
37434 + _rtw_spinlock_free(&ptdlsinfo->hdl_lock);
37435 +
37436 + _rtw_memset(ptdlsinfo, 0, sizeof(struct tdls_info) );
37437 +
37438 +}
37439 +
37440 +void issue_nulldata_to_TDLS_peer_STA(_adapter *padapter, struct sta_info *ptdls_sta, unsigned int power_mode)
37441 +{
37442 + struct xmit_frame *pmgntframe;
37443 + struct pkt_attrib *pattrib;
37444 + unsigned char *pframe;
37445 + struct rtw_ieee80211_hdr *pwlanhdr;
37446 + unsigned short *fctrl;
37447 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
37448 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
37449 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
37450 +
37451 + if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
37452 + {
37453 + return;
37454 + }
37455 +
37456 + //update attribute
37457 + pattrib = &pmgntframe->attrib;
37458 + update_mgntframe_attrib(padapter, pattrib);
37459 +
37460 + _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
37461 +
37462 + pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
37463 + pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
37464 +
37465 + fctrl = &(pwlanhdr->frame_ctl);
37466 + *(fctrl) = 0;
37467 +// SetToDs(fctrl);
37468 + if (power_mode)
37469 + {
37470 + SetPwrMgt(fctrl);
37471 + }
37472 +
37473 + _rtw_memcpy(pwlanhdr->addr1, ptdls_sta->hwaddr, ETH_ALEN);
37474 + _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
37475 + _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
37476 +
37477 + ptdls_sta->sta_xmitpriv.txseq_tid[pattrib->priority]++;
37478 + ptdls_sta->sta_xmitpriv.txseq_tid[pattrib->priority] &= 0xFFF;
37479 + pattrib->seqnum = ptdls_sta->sta_xmitpriv.txseq_tid[pattrib->priority];
37480 + SetSeqNum(pwlanhdr, pattrib->seqnum);
37481 +
37482 + SetFrameSubType(pframe, WIFI_DATA_NULL);
37483 +
37484 + pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
37485 + pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
37486 +
37487 + pattrib->last_txcmdsz = pattrib->pktlen;
37488 + dump_mgntframe(padapter, pmgntframe);
37489 +
37490 + return;
37491 +}
37492 +
37493 +s32 update_tdls_attrib(_adapter *padapter, struct pkt_attrib *pattrib)
37494 +{
37495 +
37496 + struct sta_info *psta = NULL;
37497 + struct sta_priv *pstapriv = &padapter->stapriv;
37498 + struct security_priv *psecuritypriv = &padapter->securitypriv;
37499 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
37500 + struct qos_priv *pqospriv= &pmlmepriv->qospriv;
37501 +
37502 + s32 res=_SUCCESS;
37503 + sint bmcast;
37504 +
37505 + bmcast = IS_MCAST(pattrib->ra);
37506 +
37507 + psta = rtw_get_stainfo(pstapriv, pattrib->ra);
37508 + if (psta == NULL) {
37509 + res =_FAIL;
37510 + goto exit;
37511 + }
37512 +
37513 + pattrib->mac_id = psta->mac_id;
37514 +
37515 + pattrib->psta = psta;
37516 +
37517 + pattrib->ack_policy = 0;
37518 + // get ether_hdr_len
37519 + pattrib->pkt_hdrlen = ETH_HLEN;//(pattrib->ether_type == 0x8100) ? (14 + 4 ): 14; //vlan tag
37520 +
37521 + if (pqospriv->qos_option && psta->qos_option) {
37522 + pattrib->priority = 1; //tdls management frame should be AC_BK
37523 + pattrib->hdrlen = WLAN_HDR_A3_QOS_LEN;
37524 + pattrib->subtype = WIFI_QOS_DATA_TYPE;
37525 + } else {
37526 + pattrib->hdrlen = WLAN_HDR_A3_LEN;
37527 + pattrib->subtype = WIFI_DATA_TYPE;
37528 + pattrib->priority = 0;
37529 + }
37530 +
37531 + if (psta->ieee8021x_blocked == _TRUE)
37532 + {
37533 + pattrib->encrypt = 0;
37534 + }
37535 + else
37536 + {
37537 + GET_ENCRY_ALGO(psecuritypriv, psta, pattrib->encrypt, bmcast);
37538 +
37539 + switch(psecuritypriv->dot11AuthAlgrthm)
37540 + {
37541 + case dot11AuthAlgrthm_Open:
37542 + case dot11AuthAlgrthm_Shared:
37543 + case dot11AuthAlgrthm_Auto:
37544 + pattrib->key_idx = (u8)psecuritypriv->dot11PrivacyKeyIndex;
37545 + break;
37546 + case dot11AuthAlgrthm_8021X:
37547 + pattrib->key_idx = 0;
37548 + break;
37549 + default:
37550 + pattrib->key_idx = 0;
37551 + break;
37552 + }
37553 + }
37554 +
37555 + switch (pattrib->encrypt)
37556 + {
37557 + case _WEP40_:
37558 + case _WEP104_:
37559 + pattrib->iv_len = 4;
37560 + pattrib->icv_len = 4;
37561 + break;
37562 + case _TKIP_:
37563 + pattrib->iv_len = 8;
37564 + pattrib->icv_len = 4;
37565 + if(padapter->securitypriv.busetkipkey==_FAIL)
37566 + {
37567 + res =_FAIL;
37568 + goto exit;
37569 + }
37570 + break;
37571 + case _AES_:
37572 + pattrib->iv_len = 8;
37573 + pattrib->icv_len = 8;
37574 + break;
37575 + default:
37576 + pattrib->iv_len = 0;
37577 + pattrib->icv_len = 0;
37578 + break;
37579 + }
37580 +
37581 + if (pattrib->encrypt &&
37582 + ((padapter->securitypriv.sw_encrypt == _TRUE) || (psecuritypriv->hw_decrypted == _FALSE)))
37583 + {
37584 + pattrib->bswenc = _TRUE;
37585 + } else {
37586 + pattrib->bswenc = _FALSE;
37587 + }
37588 +
37589 + //qos_en, ht_en, init rate, ,bw, ch_offset, sgi
37590 + pattrib->qos_en = psta->qos_option;
37591 + pattrib->ht_en = psta->htpriv.ht_option;
37592 + pattrib->raid = psta->raid;
37593 + pattrib->bwmode = psta->htpriv.bwmode;
37594 + pattrib->ch_offset = psta->htpriv.ch_offset;
37595 + pattrib->sgi= psta->htpriv.sgi;
37596 + pattrib->ampdu_en = _FALSE;
37597 +
37598 + //if(pattrib->ht_en && psta->htpriv.ampdu_enable)
37599 + //{
37600 + // if(psta->htpriv.agg_enable_bitmap & BIT(pattrib->priority))
37601 + // pattrib->ampdu_en = _TRUE;
37602 + //}
37603 +
37604 +exit:
37605 +
37606 + return res;
37607 +}
37608 +
37609 +void free_tdls_sta(_adapter *padapter, struct sta_info *ptdls_sta)
37610 +{
37611 + struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
37612 + struct sta_priv *pstapriv = &padapter->stapriv;
37613 + _irqL irqL;
37614 +
37615 + //free peer sta_info
37616 + _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
37617 + if(ptdlsinfo->sta_cnt != 0)
37618 + ptdlsinfo->sta_cnt--;
37619 + _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
37620 + if( ptdlsinfo->sta_cnt < (NUM_STA - 2) ) // -2: AP + BC/MC sta
37621 + {
37622 + ptdlsinfo->sta_maximum = _FALSE;
37623 + _rtw_memset( &ptdlsinfo->ss_record, 0x00, sizeof(struct tdls_ss_record) );
37624 + }
37625 + //ready to clear cam
37626 + if(ptdls_sta->mac_id!=0){
37627 + ptdlsinfo->clear_cam=ptdls_sta->mac_id;
37628 + rtw_setstakey_cmd(padapter, (u8 *)ptdls_sta, _TRUE);
37629 + }
37630 +
37631 + if(ptdlsinfo->sta_cnt==0){
37632 + rtw_tdls_cmd(padapter, myid(&(padapter->eeprompriv)), TDLS_RS_RCR);
37633 + ptdlsinfo->setup_state=TDLS_STATE_NONE;
37634 + }
37635 + else
37636 + DBG_871X("Remain tdls sta:%02x\n", ptdlsinfo->sta_cnt);
37637 +
37638 + rtw_free_stainfo(padapter, ptdls_sta);
37639 +
37640 +}
37641 +
37642 +// cam entry will be the same as mac_id
37643 +void rtw_tdls_set_mac_id(struct tdls_info *ptdlsinfo, struct sta_info *ptdls_sta)
37644 +{
37645 + if(ptdls_sta->mac_id==0)
37646 + {
37647 + ptdls_sta->mac_id = ptdlsinfo->macid_index;
37648 + if( (++ptdlsinfo->macid_index) > (NUM_STA -2) )
37649 + ptdlsinfo->macid_index= TDLS_INI_MACID_ENTRY;
37650 + }
37651 +}
37652 +
37653 +//TDLS encryption(if needed) will always be CCMP
37654 +void rtw_tdls_set_key(_adapter *adapter, struct rx_pkt_attrib *prx_pkt_attrib, struct sta_info *ptdls_sta)
37655 +{
37656 + if(prx_pkt_attrib->encrypt)
37657 + {
37658 + ptdls_sta->dot118021XPrivacy=_AES_;
37659 + rtw_setstakey_cmd(adapter, (u8*)ptdls_sta, _TRUE);
37660 + }
37661 +}
37662 +
37663 +void rtw_tdls_process_ht_cap(_adapter *adapter, struct sta_info *ptdls_sta, u8 *data, u8 Length)
37664 +{
37665 + /* save HT capabilities in the sta object */
37666 + _rtw_memset(&ptdls_sta->htpriv.ht_cap, 0, sizeof(struct rtw_ieee80211_ht_cap));
37667 + if (data && Length >= sizeof(struct rtw_ieee80211_ht_cap) )
37668 + {
37669 + ptdls_sta->flags |= WLAN_STA_HT;
37670 +
37671 + ptdls_sta->flags |= WLAN_STA_WME;
37672 +
37673 + _rtw_memcpy(&ptdls_sta->htpriv.ht_cap, data, sizeof(struct rtw_ieee80211_ht_cap));
37674 +
37675 + } else
37676 + ptdls_sta->flags &= ~WLAN_STA_HT;
37677 +
37678 + if(ptdls_sta->flags & WLAN_STA_HT)
37679 + {
37680 + if(adapter->registrypriv.ht_enable == _TRUE)
37681 + {
37682 + ptdls_sta->htpriv.ht_option = _TRUE;
37683 + }
37684 + else
37685 + {
37686 + ptdls_sta->htpriv.ht_option = _FALSE;
37687 + ptdls_sta->stat_code = _STATS_FAILURE_;
37688 + }
37689 + }
37690 +
37691 + //HT related cap
37692 + if(ptdls_sta->htpriv.ht_option)
37693 + {
37694 + //check if sta supports rx ampdu
37695 + if(adapter->registrypriv.ampdu_enable==1)
37696 + ptdls_sta->htpriv.ampdu_enable = _TRUE;
37697 +
37698 + //check if sta support s Short GI
37699 + if(ptdls_sta->htpriv.ht_cap.cap_info & cpu_to_le16(IEEE80211_HT_CAP_SGI_20|IEEE80211_HT_CAP_SGI_40))
37700 + {
37701 + ptdls_sta->htpriv.sgi = _TRUE;
37702 + }
37703 +
37704 + // bwmode would still followed AP's setting
37705 + if(ptdls_sta->htpriv.ht_cap.cap_info & cpu_to_le16(IEEE80211_HT_CAP_SUP_WIDTH))
37706 + {
37707 + ptdls_sta->htpriv.bwmode = adapter->mlmeextpriv.cur_bwmode;
37708 + ptdls_sta->htpriv.ch_offset = adapter->mlmeextpriv.cur_ch_offset;
37709 + }
37710 + }
37711 +}
37712 +
37713 +u8 *rtw_tdls_set_ht_cap(_adapter *padapter, u8 *pframe, struct pkt_attrib *pattrib)
37714 +{
37715 + struct rtw_ieee80211_ht_cap ht_capie;
37716 + u8 rf_type;
37717 +
37718 + //HT capabilities
37719 + _rtw_memset(&ht_capie, 0, sizeof(struct rtw_ieee80211_ht_cap));
37720 +
37721 + ht_capie.cap_info = IEEE80211_HT_CAP_SUP_WIDTH |IEEE80211_HT_CAP_SGI_20 |IEEE80211_HT_CAP_SM_PS |
37722 + IEEE80211_HT_CAP_SGI_40 | IEEE80211_HT_CAP_TX_STBC |IEEE80211_HT_CAP_DSSSCCK40;
37723 +
37724 + {
37725 + u32 rx_packet_offset, max_recvbuf_sz;
37726 + rtw_hal_get_def_var(padapter, HAL_DEF_RX_PACKET_OFFSET, &rx_packet_offset);
37727 + rtw_hal_get_def_var(padapter, HAL_DEF_MAX_RECVBUF_SZ, &max_recvbuf_sz);
37728 + if(max_recvbuf_sz-rx_packet_offset>(8191-256))
37729 + ht_capie.cap_info = ht_capie.cap_info |IEEE80211_HT_CAP_MAX_AMSDU;
37730 + }
37731 +
37732 + ht_capie.ampdu_params_info = (IEEE80211_HT_CAP_AMPDU_FACTOR&0x03);
37733 +
37734 + rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
37735 + switch(rf_type)
37736 + {
37737 + case RF_1T1R:
37738 + ht_capie.cap_info |= 0x0100;//RX STBC One spatial stream
37739 + _rtw_memcpy(ht_capie.supp_mcs_set, MCS_rate_1R, 16);
37740 + break;
37741 +
37742 + case RF_2T2R:
37743 + case RF_1T2R:
37744 + default:
37745 + ht_capie.cap_info|= 0x0200;//RX STBC two spatial stream
37746 + _rtw_memcpy(ht_capie.supp_mcs_set, MCS_rate_2R, 16);
37747 + break;
37748 + }
37749 +
37750 + return(rtw_set_ie(pframe, _HT_CAPABILITY_IE_,
37751 + sizeof(struct rtw_ieee80211_ht_cap), (unsigned char*)&ht_capie, &(pattrib->pktlen)));
37752 +}
37753 +
37754 +u8 *rtw_tdls_set_sup_ch(struct mlme_ext_priv *pmlmeext, u8 *pframe, struct pkt_attrib *pattrib)
37755 +{
37756 + u8 sup_ch[ 30 * 2 ] = { 0x00 }, sup_ch_idx = 0, idx_5g = 2; //For supported channel
37757 + do{
37758 + if( pmlmeext->channel_set[sup_ch_idx].ChannelNum <= 14 )
37759 + {
37760 + sup_ch[0] = 1; //First channel number
37761 + sup_ch[1] = pmlmeext->channel_set[sup_ch_idx].ChannelNum; //Number of channel
37762 + }
37763 + else
37764 + {
37765 + sup_ch[idx_5g++] = pmlmeext->channel_set[sup_ch_idx].ChannelNum;
37766 + sup_ch[idx_5g++] = 1;
37767 + }
37768 +
37769 + sup_ch_idx++;
37770 + }
37771 + while( pmlmeext->channel_set[sup_ch_idx].ChannelNum != 0 );
37772 + return(rtw_set_ie(pframe, _SUPPORTED_CH_IE_, idx_5g, sup_ch, &(pattrib->pktlen)));
37773 +}
37774 +
37775 +#ifdef CONFIG_WFD
37776 +void rtw_tdls_process_wfd_ie(struct tdls_info *ptdlsinfo, u8 *ptr, u8 length)
37777 +{
37778 + u8 wfd_ie[ 128 ] = { 0x00 };
37779 + u32 wfd_ielen = 0;
37780 + u32 wfd_offset = 0;
37781 + // Try to get the TCP port information when receiving the negotiation response.
37782 + //
37783 +
37784 + wfd_offset = 0;
37785 + wfd_offset = rtw_get_wfd_ie( ptr + wfd_offset, length - wfd_offset, wfd_ie, &wfd_ielen );
37786 + while( wfd_offset )
37787 + {
37788 + u8 attr_content[ 10 ] = { 0x00 };
37789 + u32 attr_contentlen = 0;
37790 + int i;
37791 +
37792 + DBG_871X( "[%s] WFD IE Found!!\n", __FUNCTION__ );
37793 + rtw_get_wfd_attr_content( wfd_ie, wfd_ielen, WFD_ATTR_DEVICE_INFO, attr_content, &attr_contentlen);
37794 + if ( attr_contentlen )
37795 + {
37796 + ptdlsinfo->wfd_info->peer_rtsp_ctrlport = RTW_GET_BE16( attr_content + 2 );
37797 + DBG_871X( "[%s] Peer PORT NUM = %d\n", __FUNCTION__, ptdlsinfo->wfd_info->peer_rtsp_ctrlport );
37798 + }
37799 +
37800 + _rtw_memset( attr_content, 0x00, 10);
37801 + attr_contentlen = 0;
37802 + rtw_get_wfd_attr_content( wfd_ie, wfd_ielen, WFD_ATTR_LOCAL_IP_ADDR, attr_content, &attr_contentlen);
37803 + if ( attr_contentlen )
37804 + {
37805 + _rtw_memcpy(ptdlsinfo->wfd_info->peer_ip_address, ( attr_content + 1 ), 4);
37806 + DBG_871X( "[%s] Peer IP = %02u.%02u.%02u.%02u \n", __FUNCTION__,
37807 + ptdlsinfo->wfd_info->peer_ip_address[0], ptdlsinfo->wfd_info->peer_ip_address[1],
37808 + ptdlsinfo->wfd_info->peer_ip_address[2], ptdlsinfo->wfd_info->peer_ip_address[3]
37809 + );
37810 + }
37811 + wfd_offset = rtw_get_wfd_ie( ptr + wfd_offset, length - wfd_offset, wfd_ie, &wfd_ielen );
37812 + }
37813 +}
37814 +
37815 +void issue_tunneled_probe_req(_adapter *padapter)
37816 +{
37817 + struct xmit_frame *pmgntframe;
37818 + struct pkt_attrib *pattrib;
37819 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
37820 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
37821 + u8 baddr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
37822 +
37823 + DBG_871X("[%s]\n", __FUNCTION__);
37824 +
37825 + if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
37826 + {
37827 + return;
37828 + }
37829 +
37830 + //update attribute
37831 + pattrib = &pmgntframe->attrib;
37832 +
37833 + pmgntframe->frame_tag = DATA_FRAMETAG;
37834 + pattrib->ether_type = 0x890d;
37835 + pattrib->pctrl =0;
37836 +
37837 + _rtw_memcpy(pattrib->dst, baddr, ETH_ALEN);
37838 +
37839 + _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
37840 +
37841 + _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
37842 + _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
37843 +
37844 + update_tdls_attrib(padapter, pattrib);
37845 + pattrib->qsel=pattrib->priority;
37846 + if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TUNNELED_PROBE_REQ) != _SUCCESS) {
37847 + rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
37848 + rtw_free_xmitframe(pxmitpriv, pmgntframe);
37849 + goto exit;
37850 + }
37851 + rtw_dump_xframe(padapter, pmgntframe);
37852 +
37853 +exit:
37854 +
37855 + return;
37856 +}
37857 +
37858 +void issue_tunneled_probe_rsp(_adapter *padapter, union recv_frame *precv_frame)
37859 +{
37860 + struct xmit_frame *pmgntframe;
37861 + struct pkt_attrib *pattrib;
37862 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
37863 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
37864 + struct rx_pkt_attrib *rx_pkt_pattrib = &precv_frame->u.hdr.attrib;
37865 +
37866 + DBG_871X("[%s]\n", __FUNCTION__);
37867 +
37868 + if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
37869 + {
37870 + return;
37871 + }
37872 +
37873 + //update attribute
37874 + pattrib = &pmgntframe->attrib;
37875 +
37876 + pmgntframe->frame_tag = DATA_FRAMETAG;
37877 + pattrib->ether_type = 0x890d;
37878 + pattrib->pctrl =0;
37879 +
37880 + _rtw_memcpy(pattrib->dst, rx_pkt_pattrib->src, ETH_ALEN);
37881 +
37882 + _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
37883 +
37884 + _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
37885 + _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
37886 +
37887 + update_tdls_attrib(padapter, pattrib);
37888 + pattrib->qsel=pattrib->priority;
37889 + if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TUNNELED_PROBE_RSP) != _SUCCESS) {
37890 + rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
37891 + rtw_free_xmitframe(pxmitpriv, pmgntframe);
37892 + goto exit;
37893 + }
37894 + rtw_dump_xframe(padapter, pmgntframe);
37895 +
37896 +exit:
37897 +
37898 + return;
37899 +}
37900 +#endif //CONFIG_WFD
37901 +
37902 +void issue_tdls_setup_req(_adapter *padapter, u8 *mac_addr)
37903 +{
37904 + struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
37905 + struct xmit_frame *pmgntframe;
37906 + struct pkt_attrib *pattrib;
37907 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
37908 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
37909 + struct sta_priv *pstapriv = &padapter->stapriv;
37910 + struct sta_info *ptdls_sta= NULL;
37911 + _irqL irqL;
37912 + static u8 dialogtoken = 0;
37913 + u32 timeout_interval= TPK_RESEND_COUNT * 1000; //retry timer should set at least 301 sec, using TPK_count counting 301 times.
37914 +
37915 + if(ptdlsinfo->ap_prohibited == _TRUE)
37916 + goto exit;
37917 +
37918 + if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
37919 + {
37920 + return;
37921 + }
37922 +
37923 + //update attribute
37924 + pattrib = &pmgntframe->attrib;
37925 +
37926 + pmgntframe->frame_tag = DATA_FRAMETAG;
37927 + pattrib->ether_type = 0x890d;
37928 + pattrib->pctrl =0;
37929 +
37930 + _rtw_memcpy(pattrib->dst, mac_addr, ETH_ALEN);
37931 + _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
37932 +
37933 + _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
37934 + _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
37935 +
37936 + update_tdls_attrib(padapter, pattrib);
37937 +
37938 + //init peer sta_info
37939 + ptdls_sta = rtw_get_stainfo(pstapriv, mac_addr);
37940 + if(ptdls_sta==NULL)
37941 + {
37942 + ptdls_sta = rtw_alloc_stainfo(pstapriv, mac_addr);
37943 + if(ptdls_sta)
37944 + {
37945 + _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
37946 + if(!(ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE))
37947 + ptdlsinfo->sta_cnt++;
37948 + _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
37949 + if( ptdlsinfo->sta_cnt == (NUM_STA - 2) ) // -2: AP + BC/MC sta
37950 + {
37951 + ptdlsinfo->sta_maximum = _TRUE;
37952 + }
37953 + }
37954 + else
37955 + {
37956 + rtw_free_xmitbuf(pxmitpriv,pmgntframe->pxmitbuf);
37957 + rtw_free_xmitframe(pxmitpriv, pmgntframe);
37958 + goto exit;
37959 + }
37960 + }
37961 +
37962 + if(ptdls_sta){
37963 + ptdls_sta->tdls_sta_state |= TDLS_RESPONDER_STATE;
37964 + //for tdls; ptdls_sta->aid is used to fill dialogtoken
37965 + ptdls_sta->dialog = dialogtoken;
37966 + dialogtoken = (dialogtoken+1)%256;
37967 + ptdls_sta->TDLS_PeerKey_Lifetime = timeout_interval;
37968 + _set_timer( &ptdls_sta->handshake_timer, TDLS_HANDSHAKE_TIME );
37969 + }
37970 +
37971 + pattrib->qsel=pattrib->priority;
37972 + if(rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_SETUP_REQUEST) !=_SUCCESS ){
37973 + rtw_free_xmitbuf(pxmitpriv,pmgntframe->pxmitbuf);
37974 + rtw_free_xmitframe(pxmitpriv, pmgntframe);
37975 + goto exit;
37976 + }
37977 + rtw_dump_xframe(padapter, pmgntframe);
37978 +
37979 +exit:
37980 +
37981 + return;
37982 +}
37983 +
37984 +void issue_tdls_teardown(_adapter *padapter, u8 *mac_addr)
37985 +{
37986 + struct xmit_frame *pmgntframe;
37987 + struct pkt_attrib *pattrib;
37988 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
37989 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
37990 + struct sta_priv *pstapriv = &padapter->stapriv;
37991 + struct sta_info *ptdls_sta=NULL;
37992 + _irqL irqL;
37993 +
37994 + ptdls_sta = rtw_get_stainfo(pstapriv, mac_addr);
37995 + if(ptdls_sta==NULL){
37996 + DBG_871X("issue tdls teardown unsuccessful\n");
37997 + return;
37998 + }else{
37999 + ptdls_sta->tdls_sta_state=TDLS_STATE_NONE;
38000 + }
38001 +
38002 + if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
38003 + {
38004 + return;
38005 + }
38006 +
38007 + //update attribute
38008 + pattrib = &pmgntframe->attrib;
38009 +
38010 + pmgntframe->frame_tag = DATA_FRAMETAG;
38011 + pattrib->ether_type = 0x890d;
38012 + pattrib->pctrl =0;
38013 +
38014 + _rtw_memcpy(pattrib->dst, mac_addr, ETH_ALEN);
38015 + _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
38016 +
38017 + _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
38018 + _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
38019 +
38020 + update_tdls_attrib(padapter, pattrib);
38021 + pattrib->qsel=pattrib->priority;
38022 + if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_TEARDOWN) != _SUCCESS) {
38023 + rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
38024 + rtw_free_xmitframe(pxmitpriv, pmgntframe);
38025 + goto exit;
38026 + }
38027 + rtw_dump_xframe(padapter, pmgntframe);
38028 +
38029 + if(ptdls_sta->tdls_sta_state & TDLS_CH_SWITCH_ON_STATE){
38030 + rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CS_OFF);
38031 + }
38032 +
38033 + if( ptdls_sta->timer_flag == 1 )
38034 + {
38035 + _enter_critical_bh(&(padapter->tdlsinfo.hdl_lock), &irqL);
38036 + ptdls_sta->timer_flag = 2;
38037 + _exit_critical_bh(&(padapter->tdlsinfo.hdl_lock), &irqL);
38038 + }
38039 + else
38040 + rtw_tdls_cmd(padapter, mac_addr, TDLS_FREE_STA );
38041 +
38042 +
38043 +exit:
38044 +
38045 + return;
38046 +}
38047 +
38048 +void issue_tdls_dis_req(_adapter *padapter, u8 *mac_addr)
38049 +{
38050 + struct xmit_frame *pmgntframe;
38051 + struct pkt_attrib *pattrib;
38052 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
38053 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
38054 + u8 baddr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
38055 +
38056 + if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
38057 + {
38058 + return;
38059 + }
38060 +
38061 + //update attribute
38062 + pattrib = &pmgntframe->attrib;
38063 +
38064 + pmgntframe->frame_tag = DATA_FRAMETAG;
38065 + pattrib->ether_type = 0x890d;
38066 + pattrib->pctrl =0;
38067 +
38068 + if(mac_addr == NULL)
38069 + _rtw_memcpy(pattrib->dst, baddr, ETH_ALEN);
38070 + else
38071 + _rtw_memcpy(pattrib->dst, mac_addr, ETH_ALEN);
38072 +
38073 + _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
38074 +
38075 + _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
38076 + _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
38077 +
38078 + update_tdls_attrib(padapter, pattrib);
38079 + pattrib->qsel=pattrib->priority;
38080 + if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_DISCOVERY_REQUEST) != _SUCCESS) {
38081 + rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
38082 + rtw_free_xmitframe(pxmitpriv, pmgntframe);
38083 + goto exit;
38084 + }
38085 + rtw_dump_xframe(padapter, pmgntframe);
38086 + DBG_871X("issue tdls dis req\n");
38087 +
38088 +exit:
38089 +
38090 + return;
38091 +}
38092 +
38093 +void issue_tdls_setup_rsp(_adapter *padapter, union recv_frame *precv_frame)
38094 +{
38095 + struct xmit_frame *pmgntframe;
38096 + struct pkt_attrib *pattrib;
38097 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
38098 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
38099 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
38100 + struct rx_pkt_attrib *rx_pkt_pattrib = &precv_frame->u.hdr.attrib;
38101 + _irqL irqL;
38102 +
38103 + if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
38104 + {
38105 + return;
38106 + }
38107 +
38108 + //update attribute
38109 + pattrib = &pmgntframe->attrib;
38110 +
38111 + pmgntframe->frame_tag = DATA_FRAMETAG;
38112 + pattrib->ether_type = 0x890d;
38113 + pattrib->pctrl =0;
38114 +
38115 + _rtw_memcpy(pattrib->dst, rx_pkt_pattrib->src, ETH_ALEN);
38116 + _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
38117 +
38118 + _rtw_memcpy(pattrib->ra, rx_pkt_pattrib->bssid, ETH_ALEN);
38119 + _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
38120 +
38121 + update_tdls_attrib(padapter, pattrib);
38122 + pattrib->qsel=pattrib->priority;
38123 + if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_SETUP_RESPONSE) != _SUCCESS) {
38124 + rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
38125 + rtw_free_xmitframe(pxmitpriv, pmgntframe);
38126 + goto exit;
38127 + }
38128 + rtw_dump_xframe(padapter, pmgntframe);
38129 +
38130 +exit:
38131 +
38132 + return;
38133 +
38134 +}
38135 +
38136 +void issue_tdls_setup_cfm(_adapter *padapter, union recv_frame *precv_frame)
38137 +{
38138 + struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
38139 + struct xmit_frame *pmgntframe;
38140 + struct pkt_attrib *pattrib;
38141 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
38142 + struct sta_info *ptdls_sta=NULL;
38143 + _irqL irqL;
38144 +
38145 + struct rx_pkt_attrib *rx_pkt_pattrib = & precv_frame->u.hdr.attrib;
38146 +
38147 + if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
38148 + {
38149 + return;
38150 + }
38151 +
38152 + //update attribute
38153 + pattrib = &pmgntframe->attrib;
38154 +
38155 + pmgntframe->frame_tag = DATA_FRAMETAG;
38156 + pattrib->ether_type = 0x890d;
38157 + pattrib->pctrl =0;
38158 +
38159 + _rtw_memcpy(pattrib->dst, rx_pkt_pattrib->src, ETH_ALEN);
38160 + _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
38161 +
38162 + _rtw_memcpy(pattrib->ra, rx_pkt_pattrib->bssid, ETH_ALEN);
38163 + _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
38164 +
38165 + update_tdls_attrib(padapter, pattrib);
38166 + pattrib->qsel=pattrib->priority;
38167 + if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_SETUP_CONFIRM) != _SUCCESS) {
38168 + rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
38169 + rtw_free_xmitframe(pxmitpriv, pmgntframe);
38170 + goto exit;
38171 + }
38172 +
38173 + rtw_dump_xframe(padapter, pmgntframe);
38174 +
38175 +exit:
38176 +
38177 + return;
38178 +
38179 +}
38180 +
38181 +//TDLS Discovery Response frame is a management action frame
38182 +void issue_tdls_dis_rsp(_adapter *padapter, union recv_frame *precv_frame, u8 dialog)
38183 +{
38184 + struct xmit_frame *pmgntframe;
38185 + struct pkt_attrib *pattrib;
38186 + unsigned char *pframe;
38187 + struct rtw_ieee80211_hdr *pwlanhdr;
38188 + unsigned short *fctrl;
38189 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
38190 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
38191 +
38192 + struct rx_pkt_attrib *rx_pkt_pattrib = &precv_frame->u.hdr.attrib;
38193 +
38194 + if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
38195 + {
38196 + return;
38197 + }
38198 +
38199 + //update attribute
38200 + pattrib = &pmgntframe->attrib;
38201 + update_mgntframe_attrib(padapter, pattrib);
38202 +
38203 + _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
38204 +
38205 + pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
38206 + pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
38207 +
38208 + fctrl = &(pwlanhdr->frame_ctl);
38209 + *(fctrl) = 0;
38210 +
38211 + // unicast probe request frame
38212 + _rtw_memcpy(pwlanhdr->addr1, rx_pkt_pattrib->src, ETH_ALEN);
38213 + _rtw_memcpy(pattrib->dst, pwlanhdr->addr1, ETH_ALEN);
38214 +
38215 + _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
38216 + _rtw_memcpy(pattrib->src, pwlanhdr->addr2, ETH_ALEN);
38217 +
38218 + _rtw_memcpy(pwlanhdr->addr3, rx_pkt_pattrib->bssid, ETH_ALEN);
38219 + _rtw_memcpy(pattrib->ra, pwlanhdr->addr3, ETH_ALEN);
38220 +
38221 + SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
38222 + pmlmeext->mgnt_seq++;
38223 + SetFrameSubType(pframe, WIFI_ACTION);
38224 +
38225 + pframe += sizeof (struct rtw_ieee80211_hdr_3addr);
38226 + pattrib->pktlen = sizeof (struct rtw_ieee80211_hdr_3addr);
38227 +
38228 + rtw_build_tdls_dis_rsp_ies(padapter, pmgntframe, pframe, dialog);
38229 +
38230 + pattrib->nr_frags = 1;
38231 + pattrib->last_txcmdsz = pattrib->pktlen;
38232 +
38233 + dump_mgntframe(padapter, pmgntframe);
38234 +
38235 + return;
38236 +}
38237 +
38238 +void issue_tdls_peer_traffic_indication(_adapter *padapter, struct sta_info *ptdls_sta)
38239 +{
38240 + struct xmit_frame *pmgntframe;
38241 + struct pkt_attrib *pattrib;
38242 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
38243 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
38244 +
38245 + static u8 dialogtoken=0;
38246 +
38247 + if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
38248 + {
38249 + return;
38250 + }
38251 +
38252 + //update attribute
38253 + pattrib = &pmgntframe->attrib;
38254 +
38255 + pmgntframe->frame_tag = DATA_FRAMETAG;
38256 + pattrib->ether_type = 0x890d;
38257 + pattrib->pctrl =0;
38258 +
38259 + _rtw_memcpy(pattrib->dst, ptdls_sta->hwaddr, ETH_ALEN);
38260 + _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
38261 +
38262 + _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
38263 + _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
38264 +
38265 + //for tdls; pattrib->nr_frags is used to fill dialogtoken
38266 + ptdls_sta->dialog = dialogtoken;
38267 + dialogtoken = (dialogtoken+1)%256;
38268 + //PTI frame's priority should be AC_VO
38269 + pattrib->priority = 7;
38270 +
38271 + update_tdls_attrib(padapter, pattrib);
38272 + pattrib->qsel=pattrib->priority;
38273 + if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_PEER_TRAFFIC_INDICATION) != _SUCCESS) {
38274 + rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
38275 + rtw_free_xmitframe(pxmitpriv, pmgntframe);
38276 + goto exit;
38277 + }
38278 + rtw_dump_xframe(padapter, pmgntframe);
38279 +
38280 +exit:
38281 +
38282 + return;
38283 +}
38284 +
38285 +void issue_tdls_ch_switch_req(_adapter *padapter, u8 *mac_addr)
38286 +{
38287 + struct xmit_frame *pmgntframe;
38288 + struct pkt_attrib *pattrib;
38289 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
38290 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
38291 +
38292 + if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
38293 + {
38294 + return;
38295 + }
38296 +
38297 + //update attribute
38298 + pattrib = &pmgntframe->attrib;
38299 +
38300 + pmgntframe->frame_tag = DATA_FRAMETAG;
38301 + pattrib->ether_type = 0x890d;
38302 + pattrib->pctrl =0;
38303 +
38304 + _rtw_memcpy(pattrib->dst, mac_addr, ETH_ALEN);
38305 + _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
38306 +
38307 + _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
38308 + _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
38309 +
38310 + update_tdls_attrib(padapter, pattrib);
38311 +
38312 + pattrib->qsel=pattrib->priority;
38313 + if(rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_CHANNEL_SWITCH_REQUEST) !=_SUCCESS ){
38314 + rtw_free_xmitbuf(pxmitpriv,pmgntframe->pxmitbuf);
38315 + rtw_free_xmitframe(pxmitpriv, pmgntframe);
38316 + goto exit;
38317 + }
38318 + rtw_dump_xframe(padapter, pmgntframe);
38319 +
38320 +exit:
38321 +
38322 + return;
38323 +}
38324 +
38325 +void issue_tdls_ch_switch_rsp(_adapter *padapter, u8 *mac_addr)
38326 +{
38327 + struct xmit_frame *pmgntframe;
38328 + struct pkt_attrib *pattrib;
38329 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
38330 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
38331 +
38332 + _irqL irqL;
38333 +
38334 + if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
38335 + {
38336 + return;
38337 + }
38338 +
38339 + //update attribute
38340 + pattrib = &pmgntframe->attrib;
38341 +
38342 + pmgntframe->frame_tag = DATA_FRAMETAG;
38343 + pattrib->ether_type = 0x890d;
38344 + pattrib->pctrl =0;
38345 +
38346 + _rtw_memcpy(pattrib->dst, mac_addr, ETH_ALEN);
38347 + _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
38348 +
38349 + _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
38350 + _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
38351 +
38352 + update_tdls_attrib(padapter, pattrib);
38353 +
38354 + pattrib->qsel=pattrib->priority;
38355 +/*
38356 + _enter_critical_bh(&pxmitpriv->lock, &irqL);
38357 + if(xmitframe_enqueue_for_tdls_sleeping_sta(padapter, pmgntframe)==_TRUE){
38358 + _exit_critical_bh(&pxmitpriv->lock, &irqL);
38359 + return _FALSE;
38360 + }
38361 +*/
38362 + if(rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_CHANNEL_SWITCH_RESPONSE) !=_SUCCESS ){
38363 + rtw_free_xmitbuf(pxmitpriv,pmgntframe->pxmitbuf);
38364 + rtw_free_xmitframe(pxmitpriv, pmgntframe);
38365 + goto exit;
38366 + }
38367 + rtw_dump_xframe(padapter, pmgntframe);
38368 +
38369 +exit:
38370 +
38371 + return;
38372 +}
38373 +
38374 +sint On_TDLS_Dis_Rsp(_adapter *adapter, union recv_frame *precv_frame)
38375 +{
38376 + struct sta_info *ptdls_sta = NULL, *psta = rtw_get_stainfo(&(adapter->stapriv), get_bssid(&(adapter->mlmepriv)));
38377 + struct recv_priv *precvpriv = &(adapter->recvpriv);
38378 + u8 *ptr = precv_frame->u.hdr.rx_data, *psa;
38379 + struct rx_pkt_attrib *pattrib = &(precv_frame->u.hdr.attrib);
38380 + struct tdls_info *ptdlsinfo = &(adapter->tdlsinfo);
38381 + u8 empty_addr[ETH_ALEN] = { 0x00 };
38382 + int UndecoratedSmoothedPWDB;
38383 +
38384 +
38385 + //WFDTDLS: for sigma test, not to setup direct link automatically
38386 + ptdlsinfo->dev_discovered = 1;
38387 +
38388 +#ifdef CONFIG_TDLS_AUTOSETUP
38389 + psa = get_sa(ptr);
38390 + ptdls_sta = rtw_get_stainfo(&(adapter->stapriv), psa);
38391 +
38392 + if(ptdls_sta != NULL)
38393 + {
38394 + ptdls_sta->tdls_sta_state |= TDLS_ALIVE_STATE;
38395 +
38396 + //Record the tdls sta with lowest signal strength
38397 + if( (ptdlsinfo->sta_maximum == _TRUE) && (ptdls_sta->alive_count >= 1) )
38398 + {
38399 + if( _rtw_memcmp(ptdlsinfo->ss_record.macaddr, empty_addr, ETH_ALEN) )
38400 + {
38401 + _rtw_memcpy(ptdlsinfo->ss_record.macaddr, psa, ETH_ALEN);
38402 + ptdlsinfo->ss_record.RxPWDBAll = pattrib->RxPWDBAll;
38403 + }
38404 + else
38405 + {
38406 + if( ptdlsinfo->ss_record.RxPWDBAll < pattrib->RxPWDBAll )
38407 + {
38408 + _rtw_memcpy(ptdlsinfo->ss_record.macaddr, psa, ETH_ALEN);
38409 + ptdlsinfo->ss_record.RxPWDBAll = pattrib->RxPWDBAll;
38410 + }
38411 + }
38412 + }
38413 +
38414 + }
38415 + else
38416 + {
38417 + if( ptdlsinfo->sta_maximum == _TRUE)
38418 + {
38419 + if( _rtw_memcmp( ptdlsinfo->ss_record.macaddr, empty_addr, ETH_ALEN ) )
38420 + {
38421 + //All traffics are busy, do not set up another direct link.
38422 + return _FAIL;
38423 + }
38424 + else
38425 + {
38426 + if( pattrib->RxPWDBAll > ptdlsinfo->ss_record.RxPWDBAll )
38427 + {
38428 + issue_tdls_teardown(adapter, ptdlsinfo->ss_record.macaddr);
38429 + }
38430 + else
38431 + {
38432 + return _FAIL;
38433 + }
38434 + }
38435 + }
38436 +
38437 + rtw_hal_get_def_var(adapter, HAL_DEF_UNDERCORATEDSMOOTHEDPWDB, &UndecoratedSmoothedPWDB);
38438 +
38439 + if( pattrib->RxPWDBAll + TDLS_SIGNAL_THRESH >= UndecoratedSmoothedPWDB);
38440 + {
38441 + DBG_871X("pattrib->RxPWDBAll=%d, pdmpriv->UndecoratedSmoothedPWDB=%d\n", pattrib->RxPWDBAll, UndecoratedSmoothedPWDB);
38442 + issue_tdls_setup_req(adapter, psa);
38443 + }
38444 + }
38445 +#endif //CONFIG_TDLS_AUTOSETUP
38446 +
38447 + return _SUCCESS;
38448 +}
38449 +
38450 +sint On_TDLS_Setup_Req(_adapter *adapter, union recv_frame *precv_frame)
38451 +{
38452 + struct tdls_info *ptdlsinfo = &adapter->tdlsinfo;
38453 + u8 *psa, *pmyid;
38454 + struct sta_info *ptdls_sta= NULL;
38455 + struct sta_priv *pstapriv = &adapter->stapriv;
38456 + u8 *ptr = precv_frame->u.hdr.rx_data;
38457 + struct mlme_priv *pmlmepriv = &(adapter->mlmepriv);
38458 + struct security_priv *psecuritypriv = &adapter->securitypriv;
38459 + _irqL irqL;
38460 + struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
38461 + u8 *prsnie, *ppairwise_cipher;
38462 + u8 i, k, pairwise_count;
38463 + u8 ccmp_have=0, rsnie_have=0;
38464 + u16 j;
38465 + u8 SNonce[32];
38466 + u32 *timeout_interval;
38467 + sint parsing_length; //frame body length, without icv_len
38468 + PNDIS_802_11_VARIABLE_IEs pIE;
38469 + u8 FIXED_IE = 5;
38470 + unsigned char supportRate[16];
38471 + int supportRateNum = 0;
38472 +
38473 + psa = get_sa(ptr);
38474 + ptdls_sta = rtw_get_stainfo(pstapriv, psa);
38475 +
38476 + pmyid=myid(&(adapter->eeprompriv));
38477 + ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;
38478 + parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
38479 + -prx_pkt_attrib->hdrlen
38480 + -prx_pkt_attrib->iv_len
38481 + -prx_pkt_attrib->icv_len
38482 + -LLC_HEADER_SIZE
38483 + -ETH_TYPE_LEN
38484 + -PAYLOAD_TYPE_LEN
38485 + -FIXED_IE;
38486 +
38487 + if(ptdlsinfo->ap_prohibited == _TRUE)
38488 + {
38489 + goto exit;
38490 + }
38491 +
38492 + if(ptdls_sta==NULL){
38493 + ptdls_sta = rtw_alloc_stainfo(pstapriv, psa);
38494 + }else{
38495 + if(ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE){
38496 + //If the direct link is already set up
38497 + //Process as re-setup after tear down
38498 + DBG_871X("re-setup a direct link\n");
38499 + }
38500 + //already receiving TDLS setup request
38501 + else if(ptdls_sta->tdls_sta_state & TDLS_INITIATOR_STATE){
38502 + DBG_871X("receive duplicated TDLS setup request frame in handshaking\n");
38503 + goto exit;
38504 + }
38505 + //When receiving and sending setup_req to the same link at the same time, STA with higher MAC_addr would be initiator
38506 + //following is to check out MAC_addr
38507 + else if(ptdls_sta->tdls_sta_state & TDLS_RESPONDER_STATE){
38508 + DBG_871X("receive setup_req after sending setup_req\n");
38509 + for (i=0;i<6;i++){
38510 + if(*(pmyid+i)==*(psa+i)){
38511 + }
38512 + else if(*(pmyid+i)>*(psa+i)){
38513 + goto exit;
38514 + }else if(*(pmyid+i)<*(psa+i)){
38515 + ptdls_sta->tdls_sta_state=TDLS_INITIATOR_STATE;
38516 + break;
38517 + }
38518 + }
38519 + }
38520 + }
38521 +
38522 + if(ptdls_sta)
38523 + {
38524 + ptdls_sta->dialog = *(ptr+2); //copy dialog token
38525 + ptdls_sta->stat_code = 0;
38526 +
38527 + //parsing information element
38528 + for(j=FIXED_IE; j<parsing_length;){
38529 +
38530 + pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
38531 +
38532 + switch (pIE->ElementID)
38533 + {
38534 + case _SUPPORTEDRATES_IE_:
38535 + _rtw_memcpy(supportRate, pIE->data, pIE->Length);
38536 + supportRateNum = pIE->Length;
38537 + break;
38538 + case _COUNTRY_IE_:
38539 + break;
38540 + case _EXT_SUPPORTEDRATES_IE_:
38541 + if(supportRateNum<=sizeof(supportRate))
38542 + {
38543 + _rtw_memcpy(supportRate+supportRateNum, pIE->data, pIE->Length);
38544 + supportRateNum += pIE->Length;
38545 + }
38546 + break;
38547 + case _SUPPORTED_CH_IE_:
38548 + break;
38549 + case _RSN_IE_2_:
38550 + rsnie_have=1;
38551 + if(prx_pkt_attrib->encrypt){
38552 + prsnie=(u8*)pIE;
38553 + //check whether initiator STA has CCMP pairwise_cipher.
38554 + ppairwise_cipher=prsnie+10;
38555 + _rtw_memcpy(&pairwise_count, (u16*)(ppairwise_cipher-2), 1);
38556 + for(k=0;k<pairwise_count;k++){
38557 + if(_rtw_memcmp( ppairwise_cipher+4*k, RSN_CIPHER_SUITE_CCMP, 4)==_TRUE)
38558 + ccmp_have=1;
38559 + }
38560 + if(ccmp_have==0){
38561 + //invalid contents of RSNIE
38562 + ptdls_sta->stat_code=72;
38563 + }
38564 + }
38565 + break;
38566 + case _EXT_CAP_IE_:
38567 + break;
38568 + case _VENDOR_SPECIFIC_IE_:
38569 + break;
38570 + case _FTIE_:
38571 + if(prx_pkt_attrib->encrypt)
38572 + _rtw_memcpy(SNonce, (ptr+j+52), 32);
38573 + break;
38574 + case _TIMEOUT_ITVL_IE_:
38575 + if(prx_pkt_attrib->encrypt)
38576 + timeout_interval = (u32 *)(ptr+j+3);
38577 + break;
38578 + case _RIC_Descriptor_IE_:
38579 + break;
38580 + case _HT_CAPABILITY_IE_:
38581 + rtw_tdls_process_ht_cap(adapter, ptdls_sta, pIE->data, pIE->Length);
38582 + break;
38583 + case EID_BSSCoexistence:
38584 + break;
38585 + case _LINK_ID_IE_:
38586 + if(_rtw_memcmp(get_bssid(pmlmepriv), pIE->data, 6) == _FALSE)
38587 + {
38588 + //not in the same BSS
38589 + ptdls_sta->stat_code=7;
38590 + }
38591 + break;
38592 + default:
38593 + break;
38594 + }
38595 +
38596 + j += (pIE->Length + 2);
38597 +
38598 + }
38599 +
38600 + //update station supportRate
38601 + ptdls_sta->bssratelen = supportRateNum;
38602 + _rtw_memcpy(ptdls_sta->bssrateset, supportRate, supportRateNum);
38603 +
38604 + //check status code
38605 + //if responder STA has/hasn't security on AP, but request hasn't/has RSNIE, it should reject
38606 + if(ptdls_sta->stat_code == 0 )
38607 + {
38608 + if(rsnie_have && (prx_pkt_attrib->encrypt==0)){
38609 + //security disabled
38610 + ptdls_sta->stat_code = 5;
38611 + }else if(rsnie_have==0 && (prx_pkt_attrib->encrypt)){
38612 + //request haven't RSNIE
38613 + ptdls_sta->stat_code = 38;
38614 + }
38615 +
38616 +#ifdef CONFIG_WFD
38617 + //WFD test plan version 0.18.2 test item 5.1.5
38618 + //SoUT does not use TDLS if AP uses weak security
38619 + if ( adapter->wdinfo.wfd_tdls_enable )
38620 + {
38621 + if(rsnie_have && (prx_pkt_attrib->encrypt != _AES_))
38622 + {
38623 + ptdls_sta->stat_code = 5;
38624 + }
38625 + }
38626 +#endif //CONFIG_WFD
38627 + }
38628 +
38629 + ptdls_sta->tdls_sta_state|= TDLS_INITIATOR_STATE;
38630 + if(prx_pkt_attrib->encrypt){
38631 + _rtw_memcpy(ptdls_sta->SNonce, SNonce, 32);
38632 + _rtw_memcpy(&(ptdls_sta->TDLS_PeerKey_Lifetime), timeout_interval, 4);
38633 + }
38634 + _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
38635 + if(!(ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE))
38636 + ptdlsinfo->sta_cnt++;
38637 + _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
38638 + if( ptdlsinfo->sta_cnt == (NUM_STA - 2) ) // -2: AP + BC/MC sta
38639 + {
38640 + ptdlsinfo->sta_maximum = _TRUE;
38641 + }
38642 +
38643 +#ifdef CONFIG_WFD
38644 + rtw_tdls_process_wfd_ie(ptdlsinfo, ptr + FIXED_IE, parsing_length - FIXED_IE);
38645 +#endif // CONFIG_WFD
38646 +
38647 + }
38648 + else
38649 + {
38650 + goto exit;
38651 + }
38652 +
38653 + issue_tdls_setup_rsp(adapter, precv_frame);
38654 +
38655 + if(ptdls_sta->stat_code==0)
38656 + {
38657 + _set_timer( &ptdls_sta->handshake_timer, TDLS_HANDSHAKE_TIME);
38658 + }
38659 + else //status code!=0 ; setup unsuccess
38660 + {
38661 + free_tdls_sta(adapter, ptdls_sta);
38662 + }
38663 +
38664 +exit:
38665 +
38666 + return _FAIL;
38667 +}
38668 +
38669 +sint On_TDLS_Setup_Rsp(_adapter *adapter, union recv_frame *precv_frame)
38670 +{
38671 + struct tdls_info *ptdlsinfo = &adapter->tdlsinfo;
38672 + struct sta_info *ptdls_sta= NULL;
38673 + struct sta_priv *pstapriv = &adapter->stapriv;
38674 + u8 *ptr = precv_frame->u.hdr.rx_data;
38675 + _irqL irqL;
38676 + struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
38677 + u8 *psa;
38678 + u16 stat_code;
38679 + sint parsing_length; //frame body length, without icv_len
38680 + PNDIS_802_11_VARIABLE_IEs pIE;
38681 + u8 FIXED_IE =7;
38682 + u8 *pftie, *ptimeout_ie, *plinkid_ie, *prsnie, *pftie_mic, *ppairwise_cipher;
38683 + u16 pairwise_count, j, k;
38684 + u8 verify_ccmp=0;
38685 + unsigned char supportRate[16];
38686 + int supportRateNum = 0;
38687 +
38688 + psa = get_sa(ptr);
38689 + ptdls_sta = rtw_get_stainfo(pstapriv, psa);
38690 +
38691 + if ( NULL == ptdls_sta )
38692 + {
38693 + return _FAIL;
38694 + }
38695 +
38696 + ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;
38697 + parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
38698 + -prx_pkt_attrib->hdrlen
38699 + -prx_pkt_attrib->iv_len
38700 + -prx_pkt_attrib->icv_len
38701 + -LLC_HEADER_SIZE
38702 + -TYPE_LENGTH_FIELD_SIZE
38703 + -1
38704 + -FIXED_IE;
38705 +
38706 + _rtw_memcpy(&stat_code, ptr+2, 2);
38707 +
38708 + if(stat_code!=0)
38709 + {
38710 + DBG_871X( "[%s] status_code = %d, free_tdls_sta\n", __FUNCTION__, stat_code );
38711 + free_tdls_sta(adapter, ptdls_sta);
38712 + return _FAIL;
38713 + }
38714 +
38715 + stat_code = 0;
38716 +
38717 + //parsing information element
38718 + for(j=FIXED_IE; j<parsing_length;)
38719 + {
38720 + pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
38721 +
38722 + switch (pIE->ElementID)
38723 + {
38724 + case _SUPPORTEDRATES_IE_:
38725 + _rtw_memcpy(supportRate, pIE->data, pIE->Length);
38726 + supportRateNum = pIE->Length;
38727 + break;
38728 + case _COUNTRY_IE_:
38729 + break;
38730 + case _EXT_SUPPORTEDRATES_IE_:
38731 + if(supportRateNum<=sizeof(supportRate))
38732 + {
38733 + _rtw_memcpy(supportRate+supportRateNum, pIE->data, pIE->Length);
38734 + supportRateNum += pIE->Length;
38735 + }
38736 + break;
38737 + case _SUPPORTED_CH_IE_:
38738 + break;
38739 + case _RSN_IE_2_:
38740 + prsnie=(u8*)pIE;
38741 + //check whether responder STA has CCMP pairwise_cipher.
38742 + ppairwise_cipher=prsnie+10;
38743 + _rtw_memcpy(&pairwise_count, (u16*)(ppairwise_cipher-2), 2);
38744 + for(k=0;k<pairwise_count;k++){
38745 + if(_rtw_memcmp( ppairwise_cipher+4*k, RSN_CIPHER_SUITE_CCMP, 4)==_TRUE)
38746 + verify_ccmp=1;
38747 + }
38748 + case _EXT_CAP_IE_:
38749 + break;
38750 + case _VENDOR_SPECIFIC_IE_:
38751 + break;
38752 + case _FTIE_:
38753 + pftie=(u8*)pIE;
38754 + _rtw_memcpy(ptdls_sta->ANonce, (ptr+j+20), 32);
38755 + break;
38756 + case _TIMEOUT_ITVL_IE_:
38757 + ptimeout_ie=(u8*)pIE;
38758 + break;
38759 + case _RIC_Descriptor_IE_:
38760 + break;
38761 + case _HT_CAPABILITY_IE_:
38762 + rtw_tdls_process_ht_cap(adapter, ptdls_sta, pIE->data, pIE->Length);
38763 + break;
38764 + case EID_BSSCoexistence:
38765 + break;
38766 + case _LINK_ID_IE_:
38767 + plinkid_ie=(u8*)pIE;
38768 + break;
38769 + default:
38770 + break;
38771 + }
38772 +
38773 + j += (pIE->Length + 2);
38774 +
38775 + }
38776 +
38777 + //update station supportRate
38778 + ptdls_sta->bssratelen = supportRateNum;
38779 + _rtw_memcpy(ptdls_sta->bssrateset, supportRate, supportRateNum);
38780 +
38781 +#ifdef CONFIG_WFD
38782 + rtw_tdls_process_wfd_ie(ptdlsinfo, ptr + FIXED_IE, parsing_length - FIXED_IE);
38783 +#endif // CONFIG_WFD
38784 +
38785 + if(stat_code != 0)
38786 + {
38787 + ptdls_sta->stat_code = stat_code;
38788 + }
38789 + else
38790 + {
38791 + if(prx_pkt_attrib->encrypt)
38792 + {
38793 + if(verify_ccmp==1)
38794 + {
38795 + wpa_tdls_generate_tpk(adapter, ptdls_sta);
38796 + ptdls_sta->stat_code=0;
38797 + if(tdls_verify_mic(ptdls_sta->tpk.kck, 2, plinkid_ie, prsnie, ptimeout_ie, pftie)==0) //0: Invalid, 1: valid
38798 + {
38799 + free_tdls_sta(adapter, ptdls_sta);
38800 + return _FAIL;
38801 + }
38802 + }
38803 + else
38804 + {
38805 + ptdls_sta->stat_code=72; //invalide contents of RSNIE
38806 + }
38807 +
38808 + }else{
38809 + ptdls_sta->stat_code=0;
38810 + }
38811 + }
38812 +
38813 + DBG_871X("issue_tdls_setup_cfm\n");
38814 + issue_tdls_setup_cfm(adapter, precv_frame);
38815 +
38816 + if(ptdls_sta->stat_code==0)
38817 + {
38818 + ptdlsinfo->setup_state = TDLS_LINKED_STATE;
38819 +
38820 + if( ptdls_sta->tdls_sta_state & TDLS_RESPONDER_STATE )
38821 + {
38822 + ptdls_sta->tdls_sta_state |= TDLS_LINKED_STATE;
38823 + _cancel_timer_ex( &ptdls_sta->handshake_timer);
38824 +#ifdef CONFIG_TDLS_AUTOCHECKALIVE
38825 + _set_timer( &ptdls_sta->alive_timer1, TDLS_ALIVE_TIMER_PH1);
38826 +#endif //CONFIG_TDLS_AUTOSETUP
38827 + }
38828 +
38829 + rtw_tdls_set_mac_id(ptdlsinfo, ptdls_sta);
38830 + rtw_tdls_set_key(adapter, prx_pkt_attrib, ptdls_sta);
38831 +
38832 + rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_WRCR);
38833 +
38834 + }
38835 + else //status code!=0 ; setup unsuccessful
38836 + {
38837 + free_tdls_sta(adapter, ptdls_sta);
38838 + }
38839 +
38840 + return _FAIL;
38841 +
38842 +}
38843 +
38844 +sint On_TDLS_Setup_Cfm(_adapter *adapter, union recv_frame *precv_frame)
38845 +{
38846 + struct tdls_info *ptdlsinfo = &adapter->tdlsinfo;
38847 + struct sta_info *ptdls_sta= NULL;
38848 + struct sta_priv *pstapriv = &adapter->stapriv;
38849 + u8 *ptr = precv_frame->u.hdr.rx_data;
38850 + _irqL irqL;
38851 + struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
38852 + u8 *psa;
38853 + u16 stat_code;
38854 + sint parsing_length;
38855 + PNDIS_802_11_VARIABLE_IEs pIE;
38856 + u8 FIXED_IE =5;
38857 + u8 *pftie, *ptimeout_ie, *plinkid_ie, *prsnie, *pftie_mic, *ppairwise_cipher;
38858 + u16 j, pairwise_count;
38859 +
38860 + psa = get_sa(ptr);
38861 + ptdls_sta = rtw_get_stainfo(pstapriv, psa);
38862 +
38863 + ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;
38864 + parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
38865 + -prx_pkt_attrib->hdrlen
38866 + -prx_pkt_attrib->iv_len
38867 + -prx_pkt_attrib->icv_len
38868 + -LLC_HEADER_SIZE
38869 + -ETH_TYPE_LEN
38870 + -PAYLOAD_TYPE_LEN
38871 + -FIXED_IE;
38872 + _rtw_memcpy(&stat_code, ptr+2, 2);
38873 +
38874 + if(stat_code!=0){
38875 + DBG_871X( "[%s] stat_code = %d\n, free_tdls_sta", __FUNCTION__, stat_code );
38876 + free_tdls_sta(adapter, ptdls_sta);
38877 + return _FAIL;
38878 + }
38879 +
38880 + if(prx_pkt_attrib->encrypt){
38881 + //parsing information element
38882 + for(j=FIXED_IE; j<parsing_length;){
38883 +
38884 + pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
38885 +
38886 + switch (pIE->ElementID)
38887 + {
38888 + case _RSN_IE_2_:
38889 + prsnie=(u8*)pIE;
38890 + break;
38891 + case _VENDOR_SPECIFIC_IE_:
38892 + break;
38893 + case _FTIE_:
38894 + pftie=(u8*)pIE;
38895 + break;
38896 + case _TIMEOUT_ITVL_IE_:
38897 + ptimeout_ie=(u8*)pIE;
38898 + break;
38899 + case _HT_EXTRA_INFO_IE_:
38900 + break;
38901 + case _LINK_ID_IE_:
38902 + plinkid_ie=(u8*)pIE;
38903 + break;
38904 + default:
38905 + break;
38906 + }
38907 +
38908 + j += (pIE->Length + 2);
38909 +
38910 + }
38911 +
38912 + //verify mic in FTIE MIC field
38913 + if(tdls_verify_mic(ptdls_sta->tpk.kck, 3, plinkid_ie, prsnie, ptimeout_ie, pftie)==0){ //0: Invalid, 1: Valid
38914 + free_tdls_sta(adapter, ptdls_sta);
38915 + return _FAIL;
38916 + }
38917 +
38918 + }
38919 +
38920 + ptdlsinfo->setup_state = TDLS_LINKED_STATE;
38921 + if( ptdls_sta->tdls_sta_state & TDLS_INITIATOR_STATE )
38922 + {
38923 + ptdls_sta->tdls_sta_state|=TDLS_LINKED_STATE;
38924 + _cancel_timer_ex( &ptdls_sta->handshake_timer);
38925 +#ifdef CONFIG_TDLS_AUTOCHECKALIVE
38926 + _set_timer( &ptdls_sta->alive_timer1, TDLS_ALIVE_TIMER_PH1);
38927 +#endif //CONFIG_TDLS_AUTOCHECKALIVE
38928 + }
38929 +
38930 + rtw_tdls_set_mac_id(ptdlsinfo, ptdls_sta);
38931 + rtw_tdls_set_key(adapter, prx_pkt_attrib, ptdls_sta);
38932 +
38933 + rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_WRCR);
38934 +
38935 + return _FAIL;
38936 +
38937 +}
38938 +
38939 +sint On_TDLS_Dis_Req(_adapter *adapter, union recv_frame *precv_frame)
38940 +{
38941 + struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
38942 + struct sta_priv *pstapriv = &adapter->stapriv;
38943 + struct sta_info *psta_ap;
38944 + u8 *ptr = precv_frame->u.hdr.rx_data;
38945 + sint parsing_length; //frame body length, without icv_len
38946 + PNDIS_802_11_VARIABLE_IEs pIE;
38947 + u8 FIXED_IE = 3, *dst, *pdialog = NULL;
38948 + u16 j;
38949 +
38950 + ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len + LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE + 1;
38951 + pdialog=ptr+2;
38952 +
38953 + parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
38954 + -prx_pkt_attrib->hdrlen
38955 + -prx_pkt_attrib->iv_len
38956 + -prx_pkt_attrib->icv_len
38957 + -LLC_HEADER_SIZE
38958 + -TYPE_LENGTH_FIELD_SIZE
38959 + -1
38960 + -FIXED_IE;
38961 +
38962 + //parsing information element
38963 + for(j=FIXED_IE; j<parsing_length;){
38964 +
38965 + pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
38966 +
38967 + switch (pIE->ElementID)
38968 + {
38969 + case _LINK_ID_IE_:
38970 + psta_ap = rtw_get_stainfo(pstapriv, pIE->data);
38971 + if(psta_ap == NULL)
38972 + {
38973 + goto exit;
38974 + }
38975 + dst = pIE->data + 12;
38976 + if( (MacAddr_isBcst(dst) == _FALSE) && (_rtw_memcmp(myid(&(adapter->eeprompriv)), dst, 6) == _FALSE) )
38977 + {
38978 + goto exit;
38979 + }
38980 + break;
38981 + default:
38982 + break;
38983 + }
38984 +
38985 + j += (pIE->Length + 2);
38986 +
38987 + }
38988 +
38989 + //check frame contents
38990 +
38991 + issue_tdls_dis_rsp(adapter, precv_frame, *(pdialog) );
38992 +
38993 +exit:
38994 +
38995 + return _FAIL;
38996 +
38997 +}
38998 +
38999 +sint On_TDLS_Teardown(_adapter *adapter, union recv_frame *precv_frame)
39000 +{
39001 + u8 *psa;
39002 + u8 *ptr = precv_frame->u.hdr.rx_data;
39003 + struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
39004 + struct mlme_ext_priv *pmlmeext = &(adapter->mlmeextpriv);
39005 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
39006 + struct sta_priv *pstapriv = &adapter->stapriv;
39007 + struct sta_info *ptdls_sta= NULL;
39008 + _irqL irqL;
39009 +
39010 + psa = get_sa(ptr);
39011 +
39012 + ptdls_sta = rtw_get_stainfo(pstapriv, psa);
39013 + if(ptdls_sta!=NULL){
39014 + if(ptdls_sta->tdls_sta_state & TDLS_CH_SWITCH_ON_STATE){
39015 + rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_CS_OFF);
39016 + }
39017 + free_tdls_sta(adapter, ptdls_sta);
39018 + }
39019 +
39020 + return _FAIL;
39021 +
39022 +}
39023 +
39024 +u8 TDLS_check_ch_state(uint state){
39025 + if( (state & TDLS_CH_SWITCH_ON_STATE) &&
39026 + (state & TDLS_AT_OFF_CH_STATE) &&
39027 + (state & TDLS_PEER_AT_OFF_STATE) ){
39028 +
39029 + if(state & TDLS_PEER_SLEEP_STATE)
39030 + return 2; //U-APSD + ch. switch
39031 + else
39032 + return 1; //ch. switch
39033 + }else
39034 + return 0;
39035 +}
39036 +
39037 +//we process buffered data for 1. U-APSD, 2. ch. switch, 3. U-APSD + ch. switch here
39038 +sint On_TDLS_Peer_Traffic_Rsp(_adapter *adapter, union recv_frame *precv_frame)
39039 +{
39040 + struct tdls_info *ptdlsinfo = &adapter->tdlsinfo;
39041 + struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
39042 + struct rx_pkt_attrib *pattrib = & precv_frame->u.hdr.attrib;
39043 + struct sta_priv *pstapriv = &adapter->stapriv;
39044 + //get peer sta infomation
39045 + struct sta_info *ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->src);
39046 + u8 wmmps_ac=0, state=TDLS_check_ch_state(ptdls_sta->tdls_sta_state);
39047 + int i;
39048 +
39049 + ptdls_sta->sta_stats.rx_data_pkts++;
39050 +
39051 + //receive peer traffic response frame, sleeping STA wakes up
39052 + //ptdls_sta->tdls_sta_state &= ~(TDLS_PEER_SLEEP_STATE);
39053 + process_wmmps_data( adapter, precv_frame);
39054 +
39055 + // if noticed peer STA wakes up by receiving peer traffic response
39056 + // and we want to do channel swtiching, then we will transmit channel switch request first
39057 + if(ptdls_sta->tdls_sta_state & TDLS_APSD_CHSW_STATE){
39058 + issue_tdls_ch_switch_req(adapter, pattrib->src);
39059 + ptdls_sta->tdls_sta_state &= ~(TDLS_APSD_CHSW_STATE);
39060 + return _FAIL;
39061 + }
39062 +
39063 + //check 4-AC queue bit
39064 + if(ptdls_sta->uapsd_vo || ptdls_sta->uapsd_vi || ptdls_sta->uapsd_be || ptdls_sta->uapsd_bk)
39065 + wmmps_ac=1;
39066 +
39067 + //if it's a direct link and have buffered frame
39068 + if(ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE){
39069 + if(wmmps_ac && state)
39070 + {
39071 + _irqL irqL;
39072 + _list *xmitframe_plist, *xmitframe_phead;
39073 + struct xmit_frame *pxmitframe=NULL;
39074 +
39075 + _enter_critical_bh(&ptdls_sta->sleep_q.lock, &irqL);
39076 +
39077 + xmitframe_phead = get_list_head(&ptdls_sta->sleep_q);
39078 + xmitframe_plist = get_next(xmitframe_phead);
39079 +
39080 + //transmit buffered frames
39081 + while ((rtw_end_of_queue_search(xmitframe_phead, xmitframe_plist)) == _FALSE)
39082 + {
39083 + pxmitframe = LIST_CONTAINOR(xmitframe_plist, struct xmit_frame, list);
39084 + xmitframe_plist = get_next(xmitframe_plist);
39085 + rtw_list_delete(&pxmitframe->list);
39086 +
39087 + ptdls_sta->sleepq_len--;
39088 + if(ptdls_sta->sleepq_len>0){
39089 + pxmitframe->attrib.mdata = 1;
39090 + pxmitframe->attrib.eosp = 0;
39091 + }else{
39092 + pxmitframe->attrib.mdata = 0;
39093 + pxmitframe->attrib.eosp = 1;
39094 + }
39095 + //pxmitframe->attrib.triggered = 1; //maybe doesn't need in TDLS
39096 + if(rtw_hal_xmit(adapter, pxmitframe) == _TRUE)
39097 + {
39098 + rtw_os_xmit_complete(adapter, pxmitframe);
39099 + }
39100 +
39101 + }
39102 +
39103 + if(ptdls_sta->sleepq_len==0)
39104 + {
39105 + DBG_871X("no buffered packets for tdls to xmit\n");
39106 + //on U-APSD + CH. switch state, when there is no buffered date to xmit,
39107 + // we should go back to base channel
39108 + if(state==2){
39109 + rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_CS_OFF);
39110 + }else if(ptdls_sta->tdls_sta_state&TDLS_SW_OFF_STATE){
39111 + ptdls_sta->tdls_sta_state &= ~(TDLS_SW_OFF_STATE);
39112 + ptdlsinfo->candidate_ch= pmlmeext->cur_channel;
39113 + issue_tdls_ch_switch_req(adapter, pattrib->src);
39114 + DBG_871X("issue tdls ch switch req back to base channel\n");
39115 + }
39116 +
39117 + }
39118 + else
39119 + {
39120 + DBG_871X("error!psta->sleepq_len=%d\n", ptdls_sta->sleepq_len);
39121 + ptdls_sta->sleepq_len=0;
39122 + }
39123 +
39124 + _exit_critical_bh(&ptdls_sta->sleep_q.lock, &irqL);
39125 +
39126 + }
39127 +
39128 + }
39129 +
39130 + return _FAIL;
39131 +}
39132 +
39133 +sint On_TDLS_Ch_Switch_Req(_adapter *adapter, union recv_frame *precv_frame)
39134 +{
39135 + struct sta_info *ptdls_sta= NULL;
39136 + struct sta_priv *pstapriv = &adapter->stapriv;
39137 + u8 *ptr = precv_frame->u.hdr.rx_data;
39138 + struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
39139 + u8 *psa;
39140 + sint parsing_length;
39141 + PNDIS_802_11_VARIABLE_IEs pIE;
39142 + u8 FIXED_IE =3;
39143 + u16 j;
39144 + struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
39145 +
39146 + psa = get_sa(ptr);
39147 + ptdls_sta = rtw_get_stainfo(pstapriv, psa);
39148 +
39149 + ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;
39150 + parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
39151 + -prx_pkt_attrib->hdrlen
39152 + -prx_pkt_attrib->iv_len
39153 + -prx_pkt_attrib->icv_len
39154 + -LLC_HEADER_SIZE
39155 + -ETH_TYPE_LEN
39156 + -PAYLOAD_TYPE_LEN
39157 + -FIXED_IE;
39158 +
39159 + ptdls_sta->off_ch = *(ptr+2);
39160 +
39161 + //parsing information element
39162 + for(j=FIXED_IE; j<parsing_length;){
39163 +
39164 + pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
39165 +
39166 + switch (pIE->ElementID)
39167 + {
39168 + case _COUNTRY_IE_:
39169 + break;
39170 + case _CH_SWTICH_ANNOUNCE_:
39171 + break;
39172 + case _LINK_ID_IE_:
39173 + break;
39174 + case _CH_SWITCH_TIMING_:
39175 + _rtw_memcpy(&ptdls_sta->ch_switch_time, pIE->data, 2);
39176 + _rtw_memcpy(&ptdls_sta->ch_switch_timeout, pIE->data+2, 2);
39177 + default:
39178 + break;
39179 + }
39180 +
39181 + j += (pIE->Length + 2);
39182 +
39183 + }
39184 +
39185 + //todo: check status
39186 + ptdls_sta->stat_code=0;
39187 + ptdls_sta->tdls_sta_state |= TDLS_CH_SWITCH_ON_STATE;
39188 +
39189 + issue_nulldata(adapter, NULL, 1, 0, 0);
39190 +
39191 + issue_tdls_ch_switch_rsp(adapter, psa);
39192 +
39193 + DBG_871X("issue tdls channel switch response\n");
39194 +
39195 + if((ptdls_sta->tdls_sta_state & TDLS_CH_SWITCH_ON_STATE) && ptdls_sta->off_ch==pmlmeext->cur_channel){
39196 + DBG_871X("back to base channel %x\n", pmlmeext->cur_channel);
39197 + ptdls_sta->option=7;
39198 + rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_BASE_CH);
39199 + }else{
39200 + ptdls_sta->option=6;
39201 + rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_OFF_CH);
39202 + }
39203 + return _FAIL;
39204 +}
39205 +
39206 +sint On_TDLS_Ch_Switch_Rsp(_adapter *adapter, union recv_frame *precv_frame)
39207 +{
39208 + struct sta_info *ptdls_sta= NULL;
39209 + struct sta_priv *pstapriv = &adapter->stapriv;
39210 + u8 *ptr = precv_frame->u.hdr.rx_data;
39211 + struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
39212 + u8 *psa;
39213 + sint parsing_length;
39214 + PNDIS_802_11_VARIABLE_IEs pIE;
39215 + u8 FIXED_IE =4;
39216 + u16 stat_code, j, switch_time, switch_timeout;
39217 + struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
39218 +
39219 + psa = get_sa(ptr);
39220 + ptdls_sta = rtw_get_stainfo(pstapriv, psa);
39221 +
39222 + //if channel switch is running and receiving Unsolicited TDLS Channel Switch Response,
39223 + //it will go back to base channel and terminate this channel switch procedure
39224 + if(ptdls_sta->tdls_sta_state & TDLS_CH_SWITCH_ON_STATE ){
39225 + if(pmlmeext->cur_channel==ptdls_sta->off_ch){
39226 + DBG_871X("back to base channel %x\n", pmlmeext->cur_channel);
39227 + ptdls_sta->option=7;
39228 + rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_OFF_CH);
39229 + }else{
39230 + DBG_871X("receive unsolicited channel switch response \n");
39231 + rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_CS_OFF);
39232 + }
39233 + return _FAIL;
39234 + }
39235 +
39236 + //avoiding duplicated or unconditional ch. switch. rsp
39237 + if((ptdls_sta->tdls_sta_state & TDLS_CH_SW_INITIATOR_STATE) != TDLS_CH_SW_INITIATOR_STATE)
39238 + return _FAIL;
39239 +
39240 + ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;
39241 + parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
39242 + -prx_pkt_attrib->hdrlen
39243 + -prx_pkt_attrib->iv_len
39244 + -prx_pkt_attrib->icv_len
39245 + -LLC_HEADER_SIZE
39246 + -ETH_TYPE_LEN
39247 + -PAYLOAD_TYPE_LEN
39248 + -FIXED_IE;
39249 +
39250 + _rtw_memcpy(&stat_code, ptr+2, 2);
39251 +
39252 + if(stat_code!=0){
39253 + return _FAIL;
39254 + }
39255 +
39256 + //parsing information element
39257 + for(j=FIXED_IE; j<parsing_length;){
39258 +
39259 + pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
39260 +
39261 + switch (pIE->ElementID)
39262 + {
39263 + case _LINK_ID_IE_:
39264 + break;
39265 + case _CH_SWITCH_TIMING_:
39266 + _rtw_memcpy(&switch_time, pIE->data, 2);
39267 + if(switch_time > ptdls_sta->ch_switch_time)
39268 + _rtw_memcpy(&ptdls_sta->ch_switch_time, &switch_time, 2);
39269 +
39270 + _rtw_memcpy(&switch_timeout, pIE->data+2, 2);
39271 + if(switch_timeout > ptdls_sta->ch_switch_timeout)
39272 + _rtw_memcpy(&ptdls_sta->ch_switch_timeout, &switch_timeout, 2);
39273 +
39274 + default:
39275 + break;
39276 + }
39277 +
39278 + j += (pIE->Length + 2);
39279 +
39280 + }
39281 +
39282 + ptdls_sta->tdls_sta_state &= ~(TDLS_CH_SW_INITIATOR_STATE);
39283 + ptdls_sta->tdls_sta_state |=TDLS_CH_SWITCH_ON_STATE;
39284 +
39285 + //goto set_channel_workitem_callback()
39286 + ptdls_sta->option=6;
39287 + rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_OFF_CH);
39288 +
39289 + return _FAIL;
39290 +}
39291 +
39292 +#ifdef CONFIG_WFD
39293 +void wfd_ie_tdls(_adapter * padapter, u8 *pframe, u32 *pktlen )
39294 +{
39295 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
39296 + struct wifi_display_info *pwfd_info = padapter->tdlsinfo.wfd_info;
39297 + u8 wfdie[ MAX_WFD_IE_LEN] = { 0x00 };
39298 + u32 wfdielen = 0;
39299 +
39300 + // WFD OUI
39301 + wfdielen = 0;
39302 + wfdie[ wfdielen++ ] = 0x50;
39303 + wfdie[ wfdielen++ ] = 0x6F;
39304 + wfdie[ wfdielen++ ] = 0x9A;
39305 + wfdie[ wfdielen++ ] = 0x0A; // WFA WFD v1.0
39306 +
39307 + // Commented by Albert 20110825
39308 + // According to the WFD Specification, the negotiation request frame should contain 3 WFD attributes
39309 + // 1. WFD Device Information
39310 + // 2. Associated BSSID ( Optional )
39311 + // 3. Local IP Adress ( Optional )
39312 +
39313 + // WFD Device Information ATTR
39314 + // Type:
39315 + wfdie[ wfdielen++ ] = WFD_ATTR_DEVICE_INFO;
39316 +
39317 + // Length:
39318 + // Note: In the WFD specification, the size of length field is 2.
39319 + RTW_PUT_BE16(wfdie + wfdielen, 0x0006);
39320 + wfdielen += 2;
39321 +
39322 + // Value1:
39323 + // WFD device information
39324 + // available for WFD session + Preferred TDLS + WSD ( WFD Service Discovery )
39325 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_SESSION_AVAIL
39326 + | WFD_DEVINFO_PC_TDLS | WFD_DEVINFO_WSD);
39327 + wfdielen += 2;
39328 +
39329 + // Value2:
39330 + // Session Management Control Port
39331 + // Default TCP port for RTSP messages is 554
39332 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->rtsp_ctrlport );
39333 + wfdielen += 2;
39334 +
39335 + // Value3:
39336 + // WFD Device Maximum Throughput
39337 + // 300Mbps is the maximum throughput
39338 + RTW_PUT_BE16(wfdie + wfdielen, 300);
39339 + wfdielen += 2;
39340 +
39341 + // Associated BSSID ATTR
39342 + // Type:
39343 + wfdie[ wfdielen++ ] = WFD_ATTR_ASSOC_BSSID;
39344 +
39345 + // Length:
39346 + // Note: In the WFD specification, the size of length field is 2.
39347 + RTW_PUT_BE16(wfdie + wfdielen, 0x0006);
39348 + wfdielen += 2;
39349 +
39350 + // Value:
39351 + // Associated BSSID
39352 + if ( check_fwstate( pmlmepriv, _FW_LINKED) == _TRUE )
39353 + {
39354 + _rtw_memcpy( wfdie + wfdielen, &pmlmepriv->assoc_bssid[ 0 ], ETH_ALEN );
39355 + }
39356 + else
39357 + {
39358 + _rtw_memset( wfdie + wfdielen, 0x00, ETH_ALEN );
39359 + }
39360 +
39361 + // Local IP Address ATTR
39362 + wfdie[ wfdielen++ ] = WFD_ATTR_LOCAL_IP_ADDR;
39363 +
39364 + // Length:
39365 + // Note: In the WFD specification, the size of length field is 2.
39366 + RTW_PUT_BE16(wfdie + wfdielen, 0x0005);
39367 + wfdielen += 2;
39368 +
39369 + // Version:
39370 + // 0x01: Version1;IPv4
39371 + wfdie[ wfdielen++ ] = 0x01;
39372 +
39373 + // IPv4 Address
39374 + _rtw_memcpy( wfdie + wfdielen, pwfd_info->ip_address, 4 );
39375 + wfdielen += 4;
39376 +
39377 + pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, wfdielen, (unsigned char *) wfdie, pktlen);
39378 +
39379 +}
39380 +#endif //CONFIG_WFD
39381 +
39382 +void rtw_build_tdls_setup_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
39383 +{
39384 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
39385 + struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
39386 + struct pkt_attrib *pattrib = &pxmitframe->attrib;
39387 + struct registry_priv *pregistrypriv = &padapter->registrypriv;
39388 + struct sta_info *ptdls_sta=rtw_get_stainfo( (&padapter->stapriv) , pattrib->dst);
39389 +
39390 + u8 payload_type = 0x02;
39391 + u8 category = RTW_WLAN_CATEGORY_TDLS;
39392 + u8 action = TDLS_SETUP_REQUEST;
39393 + u8 bssrate[NDIS_802_11_LENGTH_RATES_EX]; //Use NDIS_802_11_LENGTH_RATES_EX in order to call func.rtw_set_supported_rate
39394 + int bssrate_len = 0, i = 0 ;
39395 + u8 more_supportedrates = 0;
39396 + unsigned int ie_len;
39397 + u8 *p;
39398 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
39399 + u8 link_id_addr[18] = {0};
39400 + u8 iedata=0;
39401 + u8 sup_ch[ 30 * 2 ] = {0x00 }, sup_ch_idx = 0, idx_5g = 2; //For supported channel
39402 + u8 timeout_itvl[5]; //set timeout interval to maximum value
39403 + u32 time;
39404 +
39405 + //SNonce
39406 + if(pattrib->encrypt){
39407 + for(i=0;i<8;i++){
39408 + time=rtw_get_current_time();
39409 + _rtw_memcpy(&ptdls_sta->SNonce[4*i], (u8 *)&time, 4);
39410 + }
39411 + }
39412 +
39413 + //payload type
39414 + pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
39415 + //category, action, dialog token
39416 + pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
39417 + pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
39418 + pframe = rtw_set_fixed_ie(pframe, 1, &(ptdls_sta->dialog), &(pattrib->pktlen));
39419 +
39420 + //capability
39421 + _rtw_memcpy(pframe, rtw_get_capability_from_ie(pmlmeinfo->network.IEs), 2);
39422 +
39423 + if(pattrib->encrypt)
39424 + *pframe =*pframe | BIT(4);
39425 + pframe += 2;
39426 + pattrib->pktlen += 2;
39427 +
39428 + //supported rates
39429 + rtw_set_supported_rate(bssrate, WIRELESS_11BG_24N);
39430 + bssrate_len = IEEE80211_CCK_RATE_LEN + IEEE80211_NUM_OFDM_RATESLEN;
39431 +
39432 + if (bssrate_len > 8)
39433 + {
39434 + pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , 8, bssrate, &(pattrib->pktlen));
39435 + more_supportedrates = 1;
39436 + }
39437 + else
39438 + {
39439 + pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , bssrate_len , bssrate, &(pattrib->pktlen));
39440 + }
39441 +
39442 + //country(optional)
39443 + //extended supported rates
39444 + if(more_supportedrates==1){
39445 + pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_ , (bssrate_len - 8), (bssrate + 8), &(pattrib->pktlen));
39446 + }
39447 +
39448 + //supported channels
39449 + pframe = rtw_tdls_set_sup_ch(pmlmeext, pframe, pattrib);
39450 +
39451 + // SRC IE
39452 + pframe = rtw_set_ie( pframe, _SRC_IE_, 16, TDLS_SRC, &(pattrib->pktlen));
39453 +
39454 + //RSNIE
39455 + if(pattrib->encrypt)
39456 + pframe = rtw_set_ie(pframe, _RSN_IE_2_, 20, TDLS_RSNIE, &(pattrib->pktlen));
39457 +
39458 + //extended capabilities
39459 + pframe = rtw_set_ie(pframe, _EXT_CAP_IE_ , 5, TDLS_EXT_CAPIE, &(pattrib->pktlen));
39460 +
39461 + //QoS capability(WMM_IE)
39462 + pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, 7, TDLS_WMMIE, &(pattrib->pktlen));
39463 +
39464 +
39465 + if(pattrib->encrypt){
39466 + //FTIE
39467 + _rtw_memset(pframe, 0, 84); //All fields except SNonce shall be set to 0
39468 + _rtw_memset(pframe, _FTIE_, 1); //version
39469 + _rtw_memset((pframe+1), 82, 1); //length
39470 + _rtw_memcpy((pframe+52), ptdls_sta->SNonce, 32);
39471 + pframe += 84;
39472 + pattrib->pktlen += 84;
39473 +
39474 + //Timeout interval
39475 + timeout_itvl[0]=0x02;
39476 + _rtw_memcpy(timeout_itvl+1, (u8 *)(&ptdls_sta->TDLS_PeerKey_Lifetime), 4);
39477 + pframe = rtw_set_ie(pframe, _TIMEOUT_ITVL_IE_, 5, timeout_itvl, &(pattrib->pktlen));
39478 + }
39479 +
39480 + //Sup_reg_classes(optional)
39481 + //HT capabilities
39482 + pframe = rtw_tdls_set_ht_cap(padapter, pframe, pattrib);
39483 +
39484 + //20/40 BSS coexistence
39485 + if(pmlmepriv->num_FortyMHzIntolerant>0)
39486 + iedata |= BIT(2);//20 MHz BSS Width Request
39487 + pframe = rtw_set_ie(pframe, EID_BSSCoexistence, 1, &iedata, &(pattrib->pktlen));
39488 +
39489 + //Link identifier
39490 + _rtw_memcpy(link_id_addr, pattrib->ra, 6);
39491 + _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
39492 + _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
39493 + pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
39494 +
39495 +#ifdef CONFIG_WFD
39496 + wfd_ie_tdls( padapter, pframe, &(pattrib->pktlen) );
39497 +#endif //CONFIG_WFD
39498 +
39499 +}
39500 +
39501 +void rtw_build_tdls_setup_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
39502 +{
39503 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
39504 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
39505 + struct pkt_attrib *pattrib = &pxmitframe->attrib;
39506 + struct sta_info *ptdls_sta;
39507 + struct registry_priv *pregistrypriv = &padapter->registrypriv;
39508 +
39509 + u8 payload_type = 0x02;
39510 + unsigned char category = RTW_WLAN_CATEGORY_TDLS;
39511 + unsigned char action = TDLS_SETUP_RESPONSE;
39512 + unsigned char bssrate[NDIS_802_11_LENGTH_RATES_EX];
39513 + int bssrate_len = 0;
39514 + u8 more_supportedrates = 0;
39515 + unsigned int ie_len;
39516 + unsigned char *p;
39517 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
39518 + u8 link_id_addr[18] = {0};
39519 + u8 iedata=0;
39520 + u8 timeout_itvl[5]; //setup response timeout interval will copy from request
39521 + u8 ANonce[32]; //maybe it can put in ontdls_req
39522 + u8 k; //for random ANonce
39523 + u8 *pftie, *ptimeout_ie, *plinkid_ie, *prsnie, *pftie_mic;
39524 + u32 time;
39525 +
39526 + ptdls_sta = rtw_get_stainfo( &(padapter->stapriv) , pattrib->dst);
39527 +
39528 + if(ptdls_sta == NULL )
39529 + {
39530 + DBG_871X("[%s] %d\n", __FUNCTION__, __LINE__);
39531 + return;
39532 + }
39533 +
39534 + if(pattrib->encrypt){
39535 + for(k=0;k<8;k++){
39536 + time=rtw_get_current_time();
39537 + _rtw_memcpy(&ptdls_sta->ANonce[4*k], (u8*)&time, 4);
39538 + }
39539 + }
39540 +
39541 + //payload type
39542 + pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
39543 + //category, action, status code
39544 + pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
39545 + pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
39546 + pframe = rtw_set_fixed_ie(pframe, 2, (u8 *)&ptdls_sta->stat_code, &(pattrib->pktlen));
39547 +
39548 + if(ptdls_sta->stat_code!=0) //invalid setup request
39549 + {
39550 + DBG_871X("ptdls_sta->stat_code:%04x \n", ptdls_sta->stat_code);
39551 + return;
39552 + }
39553 +
39554 + //dialog token
39555 + pframe = rtw_set_fixed_ie(pframe, 1, &(ptdls_sta->dialog), &(pattrib->pktlen));
39556 +
39557 + //capability
39558 + _rtw_memcpy(pframe, rtw_get_capability_from_ie(pmlmeinfo->network.IEs), 2);
39559 +
39560 + if(pattrib->encrypt )
39561 + *pframe =*pframe | BIT(4);
39562 + pframe += 2;
39563 + pattrib->pktlen += 2;
39564 +
39565 + //supported rates
39566 + rtw_set_supported_rate(bssrate, WIRELESS_11BG_24N);
39567 + bssrate_len = IEEE80211_CCK_RATE_LEN + IEEE80211_NUM_OFDM_RATESLEN;
39568 +
39569 + if (bssrate_len > 8)
39570 + {
39571 + pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , 8, bssrate, &(pattrib->pktlen));
39572 + more_supportedrates = 1;
39573 + }
39574 + else
39575 + {
39576 + pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , bssrate_len , bssrate, &(pattrib->pktlen));
39577 + }
39578 +
39579 + //country(optional)
39580 + //extended supported rates
39581 + if(more_supportedrates==1){
39582 + pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_ , (bssrate_len - 8), (bssrate + 8), &(pattrib->pktlen));
39583 + }
39584 +
39585 + //supported channels
39586 + pframe = rtw_tdls_set_sup_ch(pmlmeext, pframe, pattrib);
39587 +
39588 + // SRC IE
39589 + pframe = rtw_set_ie(pframe, _SRC_IE_ , 16, TDLS_SRC, &(pattrib->pktlen));
39590 +
39591 + //RSNIE
39592 + if(pattrib->encrypt){
39593 + prsnie = pframe;
39594 + pframe = rtw_set_ie(pframe, _RSN_IE_2_, 20, TDLS_RSNIE, &(pattrib->pktlen));
39595 + }
39596 +
39597 + //extended capabilities
39598 + pframe = rtw_set_ie(pframe, _EXT_CAP_IE_ , 5, TDLS_EXT_CAPIE, &(pattrib->pktlen));
39599 +
39600 + //QoS capability(WMM_IE)
39601 + pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, 7, TDLS_WMMIE, &(pattrib->pktlen));
39602 +
39603 + if(pattrib->encrypt){
39604 + wpa_tdls_generate_tpk(padapter, ptdls_sta);
39605 +
39606 + //FTIE
39607 + pftie = pframe;
39608 + pftie_mic = pframe+4;
39609 + _rtw_memset(pframe, 0, 84); //All fields except SNonce shall be set to 0
39610 + _rtw_memset(pframe, _FTIE_, 1); //version
39611 + _rtw_memset((pframe+1), 82, 1); //length
39612 + _rtw_memcpy((pframe+20), ptdls_sta->ANonce, 32);
39613 + _rtw_memcpy((pframe+52), ptdls_sta->SNonce, 32);
39614 + pframe += 84;
39615 + pattrib->pktlen += 84;
39616 +
39617 + //Timeout interval
39618 + ptimeout_ie = pframe;
39619 + timeout_itvl[0]=0x02;
39620 + _rtw_memcpy(timeout_itvl+1, (u8 *)(&ptdls_sta->TDLS_PeerKey_Lifetime), 4);
39621 + pframe = rtw_set_ie(pframe, _TIMEOUT_ITVL_IE_, 5, timeout_itvl, &(pattrib->pktlen));
39622 + }
39623 +
39624 + //Sup_reg_classes(optional)
39625 + //HT capabilities
39626 + pframe = rtw_tdls_set_ht_cap(padapter, pframe, pattrib);
39627 +
39628 + //20/40 BSS coexistence
39629 + if(pmlmepriv->num_FortyMHzIntolerant>0)
39630 + iedata |= BIT(2);//20 MHz BSS Width Request
39631 + pframe = rtw_set_ie(pframe, EID_BSSCoexistence, 1, &iedata, &(pattrib->pktlen));
39632 +
39633 + //Link identifier
39634 + plinkid_ie = pframe;
39635 + _rtw_memcpy(link_id_addr, pattrib->ra, 6);
39636 + _rtw_memcpy((link_id_addr+6), pattrib->dst, 6);
39637 + _rtw_memcpy((link_id_addr+12), pattrib->src, 6);
39638 + pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
39639 +
39640 + //fill FTIE mic
39641 + if(pattrib->encrypt)
39642 + wpa_tdls_ftie_mic(ptdls_sta->tpk.kck, 2, plinkid_ie, prsnie, ptimeout_ie, pftie, pftie_mic);
39643 +
39644 +#ifdef CONFIG_WFD
39645 + wfd_ie_tdls( padapter, pframe, &(pattrib->pktlen) );
39646 +#endif //CONFIG_WFD
39647 +
39648 +}
39649 +
39650 +void rtw_build_tdls_setup_cfm_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
39651 +{
39652 +
39653 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
39654 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
39655 + struct pkt_attrib *pattrib = &pxmitframe->attrib;
39656 + struct sta_info *ptdls_sta=rtw_get_stainfo( (&padapter->stapriv) , pattrib->dst);
39657 +
39658 + u8 payload_type = 0x02;
39659 + unsigned char category = RTW_WLAN_CATEGORY_TDLS;
39660 + unsigned char action = TDLS_SETUP_CONFIRM;
39661 + u8 more_supportedrates = 0;
39662 + unsigned int ie_len;
39663 + unsigned char *p;
39664 + u8 timeout_itvl[5]; //set timeout interval to maximum value
39665 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
39666 + u8 link_id_addr[18] = {0};
39667 + u8 *pftie, *ptimeout_ie, *plinkid_ie, *prsnie, *pftie_mic;
39668 +
39669 + //payload type
39670 + pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
39671 + //category, action, status code, dialog token
39672 + pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
39673 + pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
39674 + pframe = rtw_set_fixed_ie(pframe, 2, (u8 *)&ptdls_sta->stat_code, &(pattrib->pktlen));
39675 + pframe = rtw_set_fixed_ie(pframe, 1, &(ptdls_sta->dialog), &(pattrib->pktlen));
39676 +
39677 + if(ptdls_sta->stat_code!=0) //invalid setup request
39678 + return;
39679 +
39680 + //RSNIE
39681 + if(pattrib->encrypt){
39682 + prsnie = pframe;
39683 + pframe = rtw_set_ie(pframe, _RSN_IE_2_, 20, TDLS_RSNIE, &(pattrib->pktlen));
39684 + }
39685 +
39686 + //EDCA param set; WMM param ele.
39687 + if(pattrib->encrypt){
39688 + //FTIE
39689 + pftie = pframe;
39690 + pftie_mic = pframe+4;
39691 + _rtw_memset(pframe, 0, 84); //All fields except SNonce shall be set to 0
39692 + _rtw_memset(pframe, _FTIE_, 1); //version
39693 + _rtw_memset((pframe+1), 82, 1); //length
39694 + _rtw_memcpy((pframe+20), ptdls_sta->ANonce, 32);
39695 + _rtw_memcpy((pframe+52), ptdls_sta->SNonce, 32);
39696 + pframe += 84;
39697 + pattrib->pktlen += 84;
39698 +
39699 + //Timeout interval
39700 + ptimeout_ie = pframe;
39701 + timeout_itvl[0]=0x02;
39702 + _rtw_memcpy(timeout_itvl+1, (u8 *)(&ptdls_sta->TDLS_PeerKey_Lifetime), 4);
39703 + ptdls_sta->TPK_count=0;
39704 + _set_timer(&ptdls_sta->TPK_timer, ptdls_sta->TDLS_PeerKey_Lifetime/TPK_RESEND_COUNT);
39705 + pframe = rtw_set_ie(pframe, _TIMEOUT_ITVL_IE_, 5, timeout_itvl, &(pattrib->pktlen));
39706 + }
39707 +
39708 + //HT operation; todo
39709 + //Link identifier
39710 + plinkid_ie = pframe;
39711 + _rtw_memcpy(link_id_addr, pattrib->ra, 6);
39712 + _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
39713 + _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
39714 + pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
39715 +
39716 + //fill FTIE mic
39717 + if(pattrib->encrypt)
39718 + wpa_tdls_ftie_mic(ptdls_sta->tpk.kck, 3, plinkid_ie, prsnie, ptimeout_ie, pftie, pftie_mic);
39719 +
39720 +}
39721 +
39722 +void rtw_build_tdls_teardown_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
39723 +{
39724 +
39725 + struct pkt_attrib *pattrib = &pxmitframe->attrib;
39726 + u8 payload_type = 0x02;
39727 + unsigned char category = RTW_WLAN_CATEGORY_TDLS;
39728 + unsigned char action = TDLS_TEARDOWN;
39729 + u8 link_id_addr[18] = {0};
39730 +
39731 + struct sta_info *ptdls_sta = rtw_get_stainfo( &(padapter->stapriv) , pattrib->dst);
39732 + struct sta_priv *pstapriv = &padapter->stapriv;
39733 +
39734 + //payload type
39735 + pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
39736 + //category, action, reason code
39737 + pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
39738 + pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
39739 + pframe = rtw_set_fixed_ie(pframe, 1, (u8 *)&ptdls_sta->stat_code, &(pattrib->pktlen));
39740 +
39741 + //Link identifier
39742 + if(ptdls_sta->tdls_sta_state & TDLS_INITIATOR_STATE){
39743 + _rtw_memcpy(link_id_addr, pattrib->ra, 6);
39744 + _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
39745 + _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
39746 + }else if(ptdls_sta->tdls_sta_state & TDLS_RESPONDER_STATE){
39747 + _rtw_memcpy(link_id_addr, pattrib->ra, 6);
39748 + _rtw_memcpy((link_id_addr+6), pattrib->dst, 6);
39749 + _rtw_memcpy((link_id_addr+12), pattrib->src, 6);
39750 + }
39751 + pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
39752 +
39753 +}
39754 +
39755 +void rtw_build_tdls_dis_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
39756 +{
39757 +
39758 + struct pkt_attrib *pattrib = &pxmitframe->attrib;
39759 + u8 payload_type = 0x02;
39760 + u8 category = RTW_WLAN_CATEGORY_TDLS;
39761 + u8 action = TDLS_DISCOVERY_REQUEST;
39762 + u8 link_id_addr[18] = {0};
39763 + static u8 dialogtoken=0;
39764 +
39765 + //payload type
39766 + pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
39767 + //category, action, reason code
39768 + pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
39769 + pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
39770 + pframe = rtw_set_fixed_ie(pframe, 1, &(dialogtoken), &(pattrib->pktlen));
39771 + dialogtoken = (dialogtoken+1)%256;
39772 +
39773 + //Link identifier
39774 + _rtw_memcpy(link_id_addr, pattrib->ra, 6);
39775 + _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
39776 + _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
39777 + pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
39778 +
39779 +}
39780 +
39781 +void rtw_build_tdls_dis_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, u8 dialog)
39782 +{
39783 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
39784 + struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
39785 + struct pkt_attrib *pattrib = &pxmitframe->attrib;
39786 + struct registry_priv *pregistrypriv = &padapter->registrypriv;
39787 +
39788 + u8 category = RTW_WLAN_CATEGORY_PUBLIC;
39789 + u8 action = TDLS_DISCOVERY_RESPONSE;
39790 + u8 bssrate[NDIS_802_11_LENGTH_RATES_EX];
39791 + int bssrate_len = 0;
39792 + u8 more_supportedrates = 0;
39793 + u8 *p;
39794 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
39795 + u8 link_id_addr[18] = {0};
39796 + u8 iedata=0;
39797 + u8 timeout_itvl[5]; //set timeout interval to maximum value
39798 + u32 timeout_interval= TPK_RESEND_COUNT * 1000;
39799 +
39800 + //category, action, dialog token
39801 + pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
39802 + pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
39803 + pframe = rtw_set_fixed_ie(pframe, 1, &(dialog), &(pattrib->pktlen));
39804 +
39805 + //capability
39806 + _rtw_memcpy(pframe, rtw_get_capability_from_ie(pmlmeinfo->network.IEs), 2);
39807 +
39808 + if(pattrib->encrypt)
39809 + *pframe =*pframe | BIT(4);
39810 + pframe += 2;
39811 + pattrib->pktlen += 2;
39812 +
39813 + //supported rates
39814 + rtw_set_supported_rate(bssrate, WIRELESS_11BG_24N);
39815 + bssrate_len = IEEE80211_CCK_RATE_LEN + IEEE80211_NUM_OFDM_RATESLEN;
39816 +
39817 + if (bssrate_len > 8)
39818 + {
39819 + pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , 8, bssrate, &(pattrib->pktlen));
39820 + more_supportedrates = 1;
39821 + }
39822 + else
39823 + {
39824 + pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , bssrate_len , bssrate, &(pattrib->pktlen));
39825 + }
39826 +
39827 + //extended supported rates
39828 + if(more_supportedrates==1){
39829 + pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_ , (bssrate_len - 8), (bssrate + 8), &(pattrib->pktlen));
39830 + }
39831 +
39832 + //supported channels
39833 + pframe = rtw_tdls_set_sup_ch(pmlmeext, pframe, pattrib);
39834 +
39835 + //RSNIE
39836 + if(pattrib->encrypt)
39837 + pframe = rtw_set_ie(pframe, _RSN_IE_2_, 20, TDLS_RSNIE, &(pattrib->pktlen));
39838 +
39839 + //extended capability
39840 + pframe = rtw_set_ie(pframe, _EXT_CAP_IE_ , 5, TDLS_EXT_CAPIE, &(pattrib->pktlen));
39841 +
39842 + if(pattrib->encrypt){
39843 + //FTIE
39844 + _rtw_memset(pframe, 0, 84); //All fields shall be set to 0
39845 + _rtw_memset(pframe, _FTIE_, 1); //version
39846 + _rtw_memset((pframe+1), 82, 1); //length
39847 + pframe += 84;
39848 + pattrib->pktlen += 84;
39849 +
39850 + //Timeout interval
39851 + timeout_itvl[0]=0x02;
39852 + _rtw_memcpy(timeout_itvl+1, &timeout_interval, 4);
39853 + pframe = rtw_set_ie(pframe, _TIMEOUT_ITVL_IE_, 5, timeout_itvl, &(pattrib->pktlen));
39854 + }
39855 +
39856 + //Sup_reg_classes(optional)
39857 + //HT capabilities
39858 + pframe = rtw_tdls_set_ht_cap(padapter, pframe, pattrib);
39859 +
39860 + //20/40 BSS coexistence
39861 + if(pmlmepriv->num_FortyMHzIntolerant>0)
39862 + iedata |= BIT(2);//20 MHz BSS Width Request
39863 + pframe = rtw_set_ie(pframe, EID_BSSCoexistence, 1, &iedata, &(pattrib->pktlen));
39864 +
39865 + //Link identifier
39866 + _rtw_memcpy(link_id_addr, pattrib->ra, 6);
39867 + _rtw_memcpy((link_id_addr+6), pattrib->dst, 6);
39868 + _rtw_memcpy((link_id_addr+12), pattrib->src, 6);
39869 + pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
39870 +
39871 +}
39872 +
39873 +void rtw_build_tdls_peer_traffic_indication_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
39874 +{
39875 +
39876 + struct pkt_attrib *pattrib = &pxmitframe->attrib;
39877 + u8 payload_type = 0x02;
39878 + unsigned char category = RTW_WLAN_CATEGORY_TDLS;
39879 + unsigned char action = TDLS_PEER_TRAFFIC_INDICATION;
39880 +
39881 + u8 link_id_addr[18] = {0};
39882 + u8 AC_queue=0;
39883 + struct sta_priv *pstapriv = &padapter->stapriv;
39884 + struct sta_info *ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->dst);
39885 +
39886 + //payload type
39887 + pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
39888 + //category, action, reason code
39889 + pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
39890 + pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
39891 + pframe = rtw_set_fixed_ie(pframe, 1, &(ptdls_sta->dialog), &(pattrib->pktlen));
39892 +
39893 + //Link identifier
39894 + _rtw_memcpy(link_id_addr, pattrib->ra, 6);
39895 + _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
39896 + _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
39897 + pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
39898 +
39899 + //PTI control
39900 + //PU buffer status
39901 + if(ptdls_sta->uapsd_bk&BIT(1))
39902 + AC_queue=BIT(0);
39903 + if(ptdls_sta->uapsd_be&BIT(1))
39904 + AC_queue=BIT(1);
39905 + if(ptdls_sta->uapsd_vi&BIT(1))
39906 + AC_queue=BIT(2);
39907 + if(ptdls_sta->uapsd_vo&BIT(1))
39908 + AC_queue=BIT(3);
39909 + pframe = rtw_set_ie(pframe, _PTI_BUFFER_STATUS_, 1, &AC_queue, &(pattrib->pktlen));
39910 +
39911 +}
39912 +
39913 +void rtw_build_tdls_ch_switch_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
39914 +{
39915 +
39916 + struct pkt_attrib *pattrib = &pxmitframe->attrib;
39917 + struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
39918 + u8 payload_type = 0x02;
39919 + unsigned char category = RTW_WLAN_CATEGORY_TDLS;
39920 + unsigned char action = TDLS_CHANNEL_SWITCH_REQUEST;
39921 + u8 link_id_addr[18] = {0};
39922 + struct sta_priv *pstapriv = &padapter->stapriv;
39923 + struct sta_info *ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->dst);
39924 + u8 ch_switch_timing[4] = {0};
39925 + u16 switch_time= CH_SWITCH_TIME, switch_timeout=CH_SWITCH_TIMEOUT;
39926 +
39927 + //payload type
39928 + pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
39929 + //category, action, target_ch
39930 + pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
39931 + pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
39932 + pframe = rtw_set_fixed_ie(pframe, 1, &(ptdlsinfo->candidate_ch), &(pattrib->pktlen));
39933 +
39934 + //Link identifier
39935 + _rtw_memcpy(link_id_addr, pattrib->ra, 6);
39936 + _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
39937 + _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
39938 + pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
39939 +
39940 + //ch switch timing
39941 + _rtw_memcpy(ch_switch_timing, &switch_time, 2);
39942 + _rtw_memcpy(ch_switch_timing+2, &switch_timeout, 2);
39943 + pframe = rtw_set_ie(pframe, _CH_SWITCH_TIMING_, 4, ch_switch_timing, &(pattrib->pktlen));
39944 +
39945 + //update ch switch attrib to sta_info
39946 + ptdls_sta->off_ch=ptdlsinfo->candidate_ch;
39947 + ptdls_sta->ch_switch_time=switch_time;
39948 + ptdls_sta->ch_switch_timeout=switch_timeout;
39949 +
39950 +}
39951 +
39952 +void rtw_build_tdls_ch_switch_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
39953 +{
39954 +
39955 + struct pkt_attrib *pattrib = &pxmitframe->attrib;
39956 + u8 payload_type = 0x02;
39957 + unsigned char category = RTW_WLAN_CATEGORY_TDLS;
39958 + unsigned char action = TDLS_CHANNEL_SWITCH_RESPONSE;
39959 + u8 link_id_addr[18] = {0};
39960 + struct sta_priv *pstapriv = &padapter->stapriv;
39961 + struct sta_info *ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->dst);
39962 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
39963 + struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
39964 + u8 ch_switch_timing[4] = {0};
39965 +
39966 + //payload type
39967 + pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
39968 + //category, action, status_code
39969 + pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
39970 + pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
39971 + pframe = rtw_set_fixed_ie(pframe, 2, (u8 *)&ptdls_sta->stat_code, &(pattrib->pktlen));
39972 +
39973 + //Link identifier
39974 + _rtw_memcpy(link_id_addr, pattrib->ra, 6);
39975 + _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
39976 + _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
39977 + pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
39978 +
39979 + //ch switch timing
39980 + _rtw_memcpy(ch_switch_timing, &ptdls_sta->ch_switch_time, 2);
39981 + _rtw_memcpy(ch_switch_timing+2, &ptdls_sta->ch_switch_timeout, 2);
39982 + pframe = rtw_set_ie(pframe, _CH_SWITCH_TIMING_, 4, ch_switch_timing, &(pattrib->pktlen));
39983 +
39984 +}
39985 +
39986 +#ifdef CONFIG_WFD
39987 +void rtw_build_tunneled_probe_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
39988 +{
39989 +
39990 + struct pkt_attrib *pattrib = &pxmitframe->attrib;
39991 + struct wifidirect_info *pwdinfo = &padapter->wdinfo;
39992 + struct wifidirect_info *pbuddy_wdinfo = &padapter->pbuddy_adapter->wdinfo;
39993 + u8 payload_type = 0x02;
39994 + u8 category = RTW_WLAN_CATEGORY_P2P;
39995 + u8 WFA_OUI[3] = { 0x50, 0x6f, 0x9a};
39996 + u8 probe_req = 4;
39997 + u8 wfdielen = 0;
39998 +
39999 + //payload type
40000 + pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
40001 + //category, OUI, frame_body_type
40002 + pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
40003 + pframe = rtw_set_fixed_ie(pframe, 3, WFA_OUI, &(pattrib->pktlen));
40004 + pframe = rtw_set_fixed_ie(pframe, 1, &(probe_req), &(pattrib->pktlen));
40005 +
40006 + if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
40007 + {
40008 + wfdielen = build_probe_req_wfd_ie(pwdinfo, pframe);
40009 + pframe += wfdielen;
40010 + pattrib->pktlen += wfdielen;
40011 + }
40012 + else if(!rtw_p2p_chk_state(pbuddy_wdinfo, P2P_STATE_NONE))
40013 + {
40014 + wfdielen = build_probe_req_wfd_ie(pbuddy_wdinfo, pframe);
40015 + pframe += wfdielen;
40016 + pattrib->pktlen += wfdielen;
40017 + }
40018 +
40019 +}
40020 +
40021 +void rtw_build_tunneled_probe_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
40022 +{
40023 +
40024 + struct pkt_attrib *pattrib = &pxmitframe->attrib;
40025 + struct wifidirect_info *pwdinfo = &padapter->wdinfo;
40026 + struct wifidirect_info *pbuddy_wdinfo = &padapter->pbuddy_adapter->wdinfo;
40027 + u8 payload_type = 0x02;
40028 + u8 category = RTW_WLAN_CATEGORY_P2P;
40029 + u8 WFA_OUI[3] = { 0x50, 0x6f, 0x9a};
40030 + u8 probe_rsp = 5;
40031 + u8 wfdielen = 0;
40032 +
40033 + //payload type
40034 + pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
40035 + //category, OUI, frame_body_type
40036 + pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
40037 + pframe = rtw_set_fixed_ie(pframe, 3, WFA_OUI, &(pattrib->pktlen));
40038 + pframe = rtw_set_fixed_ie(pframe, 1, &(probe_rsp), &(pattrib->pktlen));
40039 +
40040 + if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
40041 + {
40042 + wfdielen = build_probe_resp_wfd_ie(pwdinfo, pframe, 1);
40043 + pframe += wfdielen;
40044 + pattrib->pktlen += wfdielen;
40045 + }
40046 + else if(!rtw_p2p_chk_state(pbuddy_wdinfo, P2P_STATE_NONE))
40047 + {
40048 + wfdielen = build_probe_resp_wfd_ie(pbuddy_wdinfo, pframe, 1);
40049 + pframe += wfdielen;
40050 + pattrib->pktlen += wfdielen;
40051 + }
40052 +
40053 +}
40054 +#endif //CONFIG_WFD
40055 +
40056 +void _TPK_timer_hdl(void *FunctionContext)
40057 +{
40058 + struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
40059 +
40060 + ptdls_sta->TPK_count++;
40061 + //TPK_timer set 1000 as default
40062 + //retry timer should set at least 301 sec.
40063 + if(ptdls_sta->TPK_count==TPK_RESEND_COUNT){
40064 + ptdls_sta->TPK_count=0;
40065 + issue_tdls_setup_req(ptdls_sta->padapter, ptdls_sta->hwaddr);
40066 + }
40067 +
40068 + _set_timer(&ptdls_sta->TPK_timer, ptdls_sta->TDLS_PeerKey_Lifetime/TPK_RESEND_COUNT);
40069 +}
40070 +
40071 +void init_TPK_timer(_adapter *padapter, struct sta_info *psta)
40072 +{
40073 + psta->padapter=padapter;
40074 +
40075 + _init_timer(&psta->TPK_timer, padapter->pnetdev, _TPK_timer_hdl, psta);
40076 +}
40077 +
40078 +// TDLS_DONE_CH_SEN: channel sensing and report candidate channel
40079 +// TDLS_OFF_CH: first time set channel to off channel
40080 +// TDLS_BASE_CH: when go back to the channel linked with AP, send null data to peer STA as an indication
40081 +void _ch_switch_timer_hdl(void *FunctionContext)
40082 +{
40083 +
40084 + struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
40085 + _adapter *padapter = ptdls_sta->padapter;
40086 +
40087 + if( ptdls_sta->option == TDLS_DONE_CH_SEN ){
40088 + rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_DONE_CH_SEN);
40089 + }else if( ptdls_sta->option == TDLS_OFF_CH ){
40090 + issue_nulldata_to_TDLS_peer_STA(ptdls_sta->padapter, ptdls_sta, 0);
40091 + _set_timer(&ptdls_sta->base_ch_timer, 500);
40092 + }else if( ptdls_sta->option == TDLS_BASE_CH){
40093 + issue_nulldata_to_TDLS_peer_STA(ptdls_sta->padapter, ptdls_sta, 0);
40094 + }
40095 +}
40096 +
40097 +void init_ch_switch_timer(_adapter *padapter, struct sta_info *psta)
40098 +{
40099 + psta->padapter=padapter;
40100 + _init_timer(&psta->option_timer, padapter->pnetdev, _ch_switch_timer_hdl, psta);
40101 +}
40102 +
40103 +void _base_ch_timer_hdl(void *FunctionContext)
40104 +{
40105 + struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
40106 + rtw_tdls_cmd(ptdls_sta->padapter, ptdls_sta->hwaddr, TDLS_P_OFF_CH);
40107 +}
40108 +
40109 +void init_base_ch_timer(_adapter *padapter, struct sta_info *psta)
40110 +{
40111 + psta->padapter=padapter;
40112 + _init_timer(&psta->base_ch_timer, padapter->pnetdev, _base_ch_timer_hdl, psta);
40113 +}
40114 +
40115 +void _off_ch_timer_hdl(void *FunctionContext)
40116 +{
40117 + struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
40118 + rtw_tdls_cmd(ptdls_sta->padapter, ptdls_sta->hwaddr, TDLS_P_BASE_CH );
40119 +}
40120 +
40121 +void init_off_ch_timer(_adapter *padapter, struct sta_info *psta)
40122 +{
40123 + psta->padapter=padapter;
40124 + _init_timer(&psta->off_ch_timer, padapter->pnetdev, _off_ch_timer_hdl, psta);
40125 +}
40126 +
40127 +void _tdls_handshake_timer_hdl(void *FunctionContext)
40128 +{
40129 + struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
40130 +
40131 + if(ptdls_sta != NULL)
40132 + {
40133 + if( !(ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE) )
40134 + {
40135 + DBG_871X("tdls handshake time out\n");
40136 + free_tdls_sta(ptdls_sta->padapter, ptdls_sta);
40137 + }
40138 + }
40139 +}
40140 +
40141 +void init_handshake_timer(_adapter *padapter, struct sta_info *psta)
40142 +{
40143 + psta->padapter=padapter;
40144 + _init_timer(&psta->handshake_timer, padapter->pnetdev, _tdls_handshake_timer_hdl, psta);
40145 +}
40146 +
40147 +//Check tdls peer sta alive.
40148 +void _tdls_alive_timer_phase1_hdl(void *FunctionContext)
40149 +{
40150 + _irqL irqL;
40151 + struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
40152 + _adapter *padapter = ptdls_sta->padapter;
40153 + struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
40154 +
40155 + _enter_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
40156 + ptdls_sta->timer_flag = 1;
40157 + _exit_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
40158 +
40159 + ptdls_sta->tdls_sta_state &= (~TDLS_ALIVE_STATE);
40160 +
40161 + DBG_871X("issue_tdls_dis_req to check alive\n");
40162 + issue_tdls_dis_req( padapter, ptdls_sta->hwaddr);
40163 + rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CKALV_PH1);
40164 + sta_update_last_rx_pkts(ptdls_sta);
40165 +
40166 + if ( ptdls_sta->timer_flag == 2 )
40167 + rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_FREE_STA);
40168 + else
40169 + {
40170 + _enter_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
40171 + ptdls_sta->timer_flag = 0;
40172 + _exit_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
40173 + }
40174 +
40175 +}
40176 +
40177 +void _tdls_alive_timer_phase2_hdl(void *FunctionContext)
40178 +{
40179 + _irqL irqL;
40180 + struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
40181 + _adapter *padapter = ptdls_sta->padapter;
40182 + struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
40183 +
40184 + _enter_critical_bh(&(ptdlsinfo->hdl_lock), &irqL);
40185 + ptdls_sta->timer_flag = 1;
40186 + _exit_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
40187 +
40188 + if( (ptdls_sta->tdls_sta_state & TDLS_ALIVE_STATE) &&
40189 + (sta_last_rx_pkts(ptdls_sta) + 3 <= sta_rx_pkts(ptdls_sta)) )
40190 + {
40191 + DBG_871X("TDLS STA ALIVE, ptdls_sta->sta_stats.last_rx_pkts:%llu, ptdls_sta->sta_stats.rx_pkts:%llu\n",
40192 + sta_last_rx_pkts(ptdls_sta), sta_rx_pkts(ptdls_sta));
40193 +
40194 + ptdls_sta->alive_count = 0;
40195 + rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CKALV_PH2);
40196 + }
40197 + else
40198 + {
40199 + if( !(ptdls_sta->tdls_sta_state & TDLS_ALIVE_STATE) )
40200 + DBG_871X("TDLS STA TOO FAR\n");
40201 + if( !(sta_last_rx_pkts(ptdls_sta) + 3 <= sta_rx_pkts(ptdls_sta)))
40202 + DBG_871X("TDLS LINK WITH LOW TRAFFIC, ptdls_sta->sta_stats.last_rx_pkts:%llu, ptdls_sta->sta_stats.rx_pkts:%llu\n",
40203 + sta_last_rx_pkts(ptdls_sta), sta_rx_pkts(ptdls_sta));
40204 +
40205 + ptdls_sta->alive_count++;
40206 + if( ptdls_sta->alive_count == TDLS_ALIVE_COUNT )
40207 + {
40208 + ptdls_sta->stat_code = _RSON_TDLS_TEAR_TOOFAR_;
40209 + issue_tdls_teardown(padapter, ptdls_sta->hwaddr);
40210 + }
40211 + else
40212 + {
40213 + rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CKALV_PH2);
40214 + }
40215 + }
40216 +
40217 + if ( ptdls_sta->timer_flag == 2 )
40218 + rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_FREE_STA);
40219 + else
40220 + {
40221 + _enter_critical_bh(&(ptdlsinfo->hdl_lock), &irqL);
40222 + ptdls_sta->timer_flag = 0;
40223 + _exit_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
40224 +}
40225 +
40226 +}
40227 +
40228 +void init_tdls_alive_timer(_adapter *padapter, struct sta_info *psta)
40229 +{
40230 + psta->padapter=padapter;
40231 + _init_timer(&psta->alive_timer1, padapter->pnetdev, _tdls_alive_timer_phase1_hdl, psta);
40232 + _init_timer(&psta->alive_timer2, padapter->pnetdev, _tdls_alive_timer_phase2_hdl, psta);
40233 +}
40234 +
40235 +int update_sgi_tdls(_adapter *padapter, struct sta_info *psta)
40236 +{
40237 + struct ht_priv *psta_ht = NULL;
40238 + psta_ht = &psta->htpriv;
40239 +
40240 + if(psta_ht->ht_option)
40241 + {
40242 + return psta_ht->sgi;
40243 + }
40244 + else
40245 + return _FALSE;
40246 +}
40247 +
40248 +u32 update_mask_tdls(_adapter *padapter, struct sta_info *psta)
40249 +{
40250 + int i;
40251 + u8 rf_type, id;
40252 + unsigned char sta_band = 0;
40253 + unsigned char limit;
40254 + unsigned int tx_ra_bitmap=0;
40255 + struct ht_priv *psta_ht = NULL;
40256 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
40257 + WLAN_BSSID_EX *pcur_network = (WLAN_BSSID_EX *)&pmlmepriv->cur_network.network;
40258 +
40259 + psta_ht = &psta->htpriv;
40260 + //b/g mode ra_bitmap
40261 + for (i=0; i<sizeof(psta->bssrateset); i++)
40262 + {
40263 + if (psta->bssrateset[i])
40264 + tx_ra_bitmap |= rtw_get_bit_value_from_ieee_value(psta->bssrateset[i]&0x7f);
40265 + }
40266 +
40267 + //n mode ra_bitmap
40268 + if(psta_ht->ht_option)
40269 + {
40270 + rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
40271 + if(rf_type == RF_2T2R)
40272 + limit=16;// 2R
40273 + else
40274 + limit=8;// 1R
40275 +
40276 + for (i=0; i<limit; i++) {
40277 + if (psta_ht->ht_cap.supp_mcs_set[i/8] & BIT(i%8))
40278 + tx_ra_bitmap |= BIT(i+12);
40279 + }
40280 + }
40281 +
40282 + if ( pcur_network->Configuration.DSConfig > 14 ) {
40283 + // 5G band
40284 + if (tx_ra_bitmap & 0xffff000)
40285 + sta_band |= WIRELESS_11_5N | WIRELESS_11A;
40286 + else
40287 + sta_band |= WIRELESS_11A;
40288 + } else {
40289 + if (tx_ra_bitmap & 0xffff000)
40290 + sta_band |= WIRELESS_11_24N | WIRELESS_11G | WIRELESS_11B;
40291 + else if (tx_ra_bitmap & 0xff0)
40292 + sta_band |= WIRELESS_11G |WIRELESS_11B;
40293 + else
40294 + sta_band |= WIRELESS_11B;
40295 + }
40296 +
40297 + id = networktype_to_raid(sta_band);
40298 + tx_ra_bitmap |= ((id<<28)&0xf0000000);
40299 + return tx_ra_bitmap;
40300 +}
40301 +
40302 +#endif //CONFIG_TDLS
40303 +
40304 --- a/drivers/net/wireless/rtl8192cu/core/rtw_wlan_util.c
40305 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_wlan_util.c
40306 @@ -16,8 +16,7 @@
40307 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
40308 *
40309 *
40310 -
40311 -******************************************************************************/
40312 + ******************************************************************************/
40313 #define _RTW_WLAN_UTIL_C_
40314
40315 #include <drv_conf.h>
40316 @@ -42,8 +41,11 @@ unsigned char AIRGOCAP_OUI[] = {0x00, 0x
40317 unsigned char REALTEK_96B_IE[] = {0x00, 0xe0, 0x4c, 0x02, 0x01, 0x20};
40318
40319 extern unsigned char MCS_rate_2R[16];
40320 +#ifdef CONFIG_DISABLE_MCS13TO15
40321 +extern unsigned char MCS_rate_2R_MCS13TO15_OFF[16];
40322 +#endif //CONFIG_DISABLE_MCS13TO15
40323 extern unsigned char MCS_rate_1R[16];
40324 -extern unsigned char WPA_OUI[];
40325 +extern unsigned char RTW_WPA_OUI[];
40326 extern unsigned char WPA_TKIP_CIPHER[4];
40327 extern unsigned char RSN_TKIP_CIPHER[4];
40328
40329 @@ -53,6 +55,23 @@ extern unsigned char RSN_TKIP_CIPHER[4];
40330 #define WAIT_FOR_BCN_TO_MIN (6000)
40331 #define WAIT_FOR_BCN_TO_MAX (20000)
40332
40333 +static u8 rtw_basic_rate_cck[4] = {
40334 + IEEE80211_CCK_RATE_1MB|IEEE80211_BASIC_RATE_MASK, IEEE80211_CCK_RATE_2MB|IEEE80211_BASIC_RATE_MASK,
40335 + IEEE80211_CCK_RATE_5MB|IEEE80211_BASIC_RATE_MASK, IEEE80211_CCK_RATE_11MB|IEEE80211_BASIC_RATE_MASK
40336 +};
40337 +
40338 +static u8 rtw_basic_rate_ofdm[3] = {
40339 + IEEE80211_OFDM_RATE_6MB|IEEE80211_BASIC_RATE_MASK, IEEE80211_OFDM_RATE_12MB|IEEE80211_BASIC_RATE_MASK,
40340 + IEEE80211_OFDM_RATE_24MB|IEEE80211_BASIC_RATE_MASK
40341 +};
40342 +
40343 +static u8 rtw_basic_rate_mix[7] = {
40344 + IEEE80211_CCK_RATE_1MB|IEEE80211_BASIC_RATE_MASK, IEEE80211_CCK_RATE_2MB|IEEE80211_BASIC_RATE_MASK,
40345 + IEEE80211_CCK_RATE_5MB|IEEE80211_BASIC_RATE_MASK, IEEE80211_CCK_RATE_11MB|IEEE80211_BASIC_RATE_MASK,
40346 + IEEE80211_OFDM_RATE_6MB|IEEE80211_BASIC_RATE_MASK, IEEE80211_OFDM_RATE_12MB|IEEE80211_BASIC_RATE_MASK,
40347 + IEEE80211_OFDM_RATE_24MB|IEEE80211_BASIC_RATE_MASK
40348 +};
40349 +
40350
40351 int cckrates_included(unsigned char *rate, int ratelen)
40352 {
40353 @@ -160,6 +179,7 @@ int judge_network_type(_adapter *padapte
40354 return network_type;
40355 }
40356
40357 +unsigned char ratetbl_val_2wifirate(unsigned char rate);
40358 unsigned char ratetbl_val_2wifirate(unsigned char rate)
40359 {
40360 unsigned char val = 0;
40361 @@ -220,6 +240,7 @@ unsigned char ratetbl_val_2wifirate(unsi
40362
40363 }
40364
40365 +int is_basicrate(_adapter *padapter, unsigned char rate);
40366 int is_basicrate(_adapter *padapter, unsigned char rate)
40367 {
40368 int i;
40369 @@ -242,7 +263,7 @@ int is_basicrate(_adapter *padapter, uns
40370 return _FALSE;
40371 }
40372
40373 -
40374 +unsigned int ratetbl2rateset(_adapter *padapter, unsigned char *rateset);
40375 unsigned int ratetbl2rateset(_adapter *padapter, unsigned char *rateset)
40376 {
40377 int i;
40378 @@ -288,29 +309,101 @@ void get_rate_set(_adapter *padapter, un
40379 _rtw_memcpy(pbssrate, supportedrates, *bssrate_len);
40380 }
40381
40382 +void UpdateBrateTbl(
40383 + IN PADAPTER Adapter,
40384 + IN u8 *mBratesOS
40385 +)
40386 +{
40387 + u8 i;
40388 + u8 rate;
40389 +
40390 + // 1M, 2M, 5.5M, 11M, 6M, 12M, 24M are mandatory.
40391 + for(i=0;i<NDIS_802_11_LENGTH_RATES_EX;i++)
40392 + {
40393 + rate = mBratesOS[i] & 0x7f;
40394 + switch(rate)
40395 + {
40396 + case IEEE80211_CCK_RATE_1MB:
40397 + case IEEE80211_CCK_RATE_2MB:
40398 + case IEEE80211_CCK_RATE_5MB:
40399 + case IEEE80211_CCK_RATE_11MB:
40400 + case IEEE80211_OFDM_RATE_6MB:
40401 + case IEEE80211_OFDM_RATE_12MB:
40402 + case IEEE80211_OFDM_RATE_24MB:
40403 + mBratesOS[i] |= IEEE80211_BASIC_RATE_MASK;
40404 + break;
40405 + }
40406 + }
40407 +
40408 +}
40409 +
40410 +void UpdateBrateTblForSoftAP(u8 *bssrateset, u32 bssratelen)
40411 +{
40412 + u8 i;
40413 + u8 rate;
40414 +
40415 + for(i=0;i<bssratelen;i++)
40416 + {
40417 + rate = bssrateset[i] & 0x7f;
40418 + switch(rate)
40419 + {
40420 + case IEEE80211_CCK_RATE_1MB:
40421 + case IEEE80211_CCK_RATE_2MB:
40422 + case IEEE80211_CCK_RATE_5MB:
40423 + case IEEE80211_CCK_RATE_11MB:
40424 + bssrateset[i] |= IEEE80211_BASIC_RATE_MASK;
40425 + break;
40426 + }
40427 + }
40428 +
40429 +}
40430 +
40431 void Save_DM_Func_Flag(_adapter *padapter)
40432 {
40433 u8 bSaveFlag = _TRUE;
40434
40435 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_DM_FUNC_OP, (u8 *)(&bSaveFlag));
40436 +#ifdef CONFIG_CONCURRENT_MODE
40437 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
40438 + if(pbuddy_adapter)
40439 + rtw_hal_set_hwreg(pbuddy_adapter, HW_VAR_DM_FUNC_OP, (u8 *)(&bSaveFlag));
40440 +#endif
40441 +
40442 + rtw_hal_set_hwreg(padapter, HW_VAR_DM_FUNC_OP, (u8 *)(&bSaveFlag));
40443 +
40444 }
40445
40446 void Restore_DM_Func_Flag(_adapter *padapter)
40447 {
40448 u8 bSaveFlag = _FALSE;
40449 -
40450 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_DM_FUNC_OP, (u8 *)(&bSaveFlag));
40451 +#ifdef CONFIG_CONCURRENT_MODE
40452 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
40453 + if(pbuddy_adapter)
40454 + rtw_hal_set_hwreg(pbuddy_adapter, HW_VAR_DM_FUNC_OP, (u8 *)(&bSaveFlag));
40455 +#endif
40456 + rtw_hal_set_hwreg(padapter, HW_VAR_DM_FUNC_OP, (u8 *)(&bSaveFlag));
40457 }
40458
40459 void Switch_DM_Func(_adapter *padapter, u8 mode, u8 enable)
40460 {
40461 +#ifdef CONFIG_CONCURRENT_MODE
40462 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
40463 +#endif
40464 +
40465 if(enable == _TRUE)
40466 {
40467 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_DM_FUNC_SET, (u8 *)(&mode));
40468 +#ifdef CONFIG_CONCURRENT_MODE
40469 + if(pbuddy_adapter)
40470 + rtw_hal_set_hwreg(pbuddy_adapter, HW_VAR_DM_FUNC_SET, (u8 *)(&mode));
40471 +#endif
40472 + rtw_hal_set_hwreg(padapter, HW_VAR_DM_FUNC_SET, (u8 *)(&mode));
40473 }
40474 else
40475 {
40476 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_DM_FUNC_CLR, (u8 *)(&mode));
40477 +#ifdef CONFIG_CONCURRENT_MODE
40478 + if(pbuddy_adapter)
40479 + rtw_hal_set_hwreg(pbuddy_adapter, HW_VAR_DM_FUNC_CLR, (u8 *)(&mode));
40480 +#endif
40481 + rtw_hal_set_hwreg(padapter, HW_VAR_DM_FUNC_CLR, (u8 *)(&mode));
40482 }
40483
40484 #if 0
40485 @@ -330,54 +423,176 @@ void Switch_DM_Func(_adapter *padapter,
40486
40487 }
40488
40489 -void Set_NETYPE1_MSR(_adapter *padapter, u8 type)
40490 +static void Set_NETYPE1_MSR(_adapter *padapter, u8 type)
40491 {
40492 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MEDIA_STATUS1, (u8 *)(&type));
40493 + rtw_hal_set_hwreg(padapter, HW_VAR_MEDIA_STATUS1, (u8 *)(&type));
40494 }
40495
40496 -void Set_NETYPE0_MSR(_adapter *padapter, u8 type)
40497 +static void Set_NETYPE0_MSR(_adapter *padapter, u8 type)
40498 {
40499 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MEDIA_STATUS, (u8 *)(&type));
40500 + rtw_hal_set_hwreg(padapter, HW_VAR_MEDIA_STATUS, (u8 *)(&type));
40501 +}
40502 +
40503 +void Set_MSR(_adapter *padapter, u8 type)
40504 +{
40505 +#ifdef CONFIG_CONCURRENT_MODE
40506 + if(padapter->iface_type == IFACE_PORT1)
40507 + {
40508 + Set_NETYPE1_MSR(padapter, type);
40509 + }
40510 + else
40511 +#endif
40512 + {
40513 + Set_NETYPE0_MSR(padapter, type);
40514 + }
40515 +}
40516 +
40517 +inline u8 rtw_get_oper_ch(_adapter *adapter)
40518 +{
40519 + return adapter_to_dvobj(adapter)->oper_channel;
40520 +}
40521 +
40522 +inline void rtw_set_oper_ch(_adapter *adapter, u8 ch)
40523 +{
40524 + if (adapter_to_dvobj(adapter)->oper_channel != ch)
40525 + adapter_to_dvobj(adapter)->on_oper_ch_time = rtw_get_current_time();
40526 +
40527 + adapter_to_dvobj(adapter)->oper_channel = ch;
40528 +}
40529 +
40530 +inline u8 rtw_get_oper_bw(_adapter *adapter)
40531 +{
40532 + return adapter_to_dvobj(adapter)->oper_bwmode;
40533 +}
40534 +
40535 +inline void rtw_set_oper_bw(_adapter *adapter, u8 bw)
40536 +{
40537 + adapter_to_dvobj(adapter)->oper_bwmode = bw;
40538 +}
40539 +
40540 +inline u8 rtw_get_oper_choffset(_adapter *adapter)
40541 +{
40542 + return adapter_to_dvobj(adapter)->oper_ch_offset;
40543 +}
40544 +
40545 +inline void rtw_set_oper_choffset(_adapter *adapter, u8 offset)
40546 +{
40547 + adapter_to_dvobj(adapter)->oper_ch_offset = offset;
40548 +}
40549 +
40550 +inline u32 rtw_get_on_oper_ch_time(_adapter *adapter)
40551 +{
40552 + return adapter_to_dvobj(adapter)->on_oper_ch_time;
40553 +}
40554 +
40555 +inline u32 rtw_get_on_cur_ch_time(_adapter *adapter)
40556 +{
40557 + if (adapter->mlmeextpriv.cur_channel == adapter_to_dvobj(adapter)->oper_channel)
40558 + return adapter_to_dvobj(adapter)->on_oper_ch_time;
40559 + else
40560 + return 0;
40561 }
40562
40563 void SelectChannel(_adapter *padapter, unsigned char channel)
40564 {
40565 - unsigned int scanMode;
40566 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
40567 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
40568 +
40569 +#ifdef CONFIG_DUALMAC_CONCURRENT
40570 + //saved channel info
40571 + rtw_set_oper_ch(padapter, channel);
40572 + dc_SelectChannel(padapter, channel);
40573 +#else //CONFIG_DUALMAC_CONCURRENT
40574 +
40575 + _enter_critical_mutex(&(adapter_to_dvobj(padapter)->setch_mutex), NULL);
40576
40577 - scanMode = (pmlmeext->sitesurvey_res.scan_mode == SCAN_ACTIVE)? 1: 0;//todo:
40578 + //saved channel info
40579 + rtw_set_oper_ch(padapter, channel);
40580
40581 - if(padapter->HalFunc.set_channel_handler)
40582 - padapter->HalFunc.set_channel_handler(padapter, channel);
40583 + rtw_hal_set_chan(padapter, channel);
40584
40585 + _exit_critical_mutex(&(adapter_to_dvobj(padapter)->setch_mutex), NULL);
40586 +
40587 +#endif // CONFIG_DUALMAC_CONCURRENT
40588 }
40589
40590 void SetBWMode(_adapter *padapter, unsigned short bwmode, unsigned char channel_offset)
40591 {
40592 - if(padapter->HalFunc.set_bwmode_handler)
40593 - padapter->HalFunc.set_bwmode_handler(padapter, (HT_CHANNEL_WIDTH)bwmode, channel_offset);
40594 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
40595 +
40596 +#ifdef CONFIG_DUALMAC_CONCURRENT
40597 + //saved bw info
40598 + rtw_set_oper_bw(padapter, bwmode);
40599 + rtw_set_oper_choffset(padapter, channel_offset);
40600 + dc_SetBWMode(padapter, bwmode, channel_offset);
40601 +#else //CONFIG_DUALMAC_CONCURRENT
40602 +
40603 + _enter_critical_mutex(&(adapter_to_dvobj(padapter)->setbw_mutex), NULL);
40604 +
40605 + //saved bw info
40606 + rtw_set_oper_bw(padapter, bwmode);
40607 + rtw_set_oper_choffset(padapter, channel_offset);
40608 +
40609 + rtw_hal_set_bwmode(padapter, (HT_CHANNEL_WIDTH)bwmode, channel_offset);
40610 +
40611 + _exit_critical_mutex(&(adapter_to_dvobj(padapter)->setbw_mutex), NULL);
40612 +
40613 +#endif // CONFIG_DUALMAC_CONCURRENT
40614 }
40615
40616 void set_channel_bwmode(_adapter *padapter, unsigned char channel, unsigned char channel_offset, unsigned short bwmode)
40617 {
40618 + u8 center_ch;
40619 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
40620 +
40621 + if ( padapter->bNotifyChannelChange )
40622 + {
40623 + DBG_871X( "[%s] ch = %d, offset = %d, bwmode = %d\n", __FUNCTION__, channel, channel_offset, bwmode );
40624 + }
40625 +
40626 if((bwmode == HT_CHANNEL_WIDTH_20)||(channel_offset == HAL_PRIME_CHNL_OFFSET_DONT_CARE))
40627 {
40628 - SelectChannel(padapter, channel);
40629 + //SelectChannel(padapter, channel);
40630 + center_ch = channel;
40631 }
40632 else
40633 {
40634 //switch to the proper channel
40635 if (channel_offset == HAL_PRIME_CHNL_OFFSET_LOWER)
40636 {
40637 - SelectChannel(padapter, channel + 2);
40638 + //SelectChannel(padapter, channel + 2);
40639 + center_ch = channel + 2;
40640 }
40641 else
40642 {
40643 - SelectChannel(padapter, channel - 2);
40644 + //SelectChannel(padapter, channel - 2);
40645 + center_ch = channel - 2;
40646 }
40647 }
40648
40649 + //set Channel , must be independant for correct co_ch value/
40650 +#ifdef CONFIG_DUALMAC_CONCURRENT
40651 + //saved channel/bw info
40652 + rtw_set_oper_ch(padapter, channel);
40653 + rtw_set_oper_bw(padapter, bwmode);
40654 + rtw_set_oper_choffset(padapter, channel_offset);
40655 + dc_SelectChannel(padapter, center_ch);// set center channel
40656 +#else //CONFIG_DUALMAC_CONCURRENT
40657 +
40658 + _enter_critical_mutex(&(adapter_to_dvobj(padapter)->setch_mutex), NULL);
40659
40660 + //saved channel/bw info
40661 + rtw_set_oper_ch(padapter, channel);
40662 + rtw_set_oper_bw(padapter, bwmode);
40663 + rtw_set_oper_choffset(padapter, channel_offset);
40664 +
40665 + rtw_hal_set_chan(padapter, center_ch);
40666 +
40667 + _exit_critical_mutex(&(adapter_to_dvobj(padapter)->setch_mutex), NULL);
40668 +
40669 +#endif // CONFIG_DUALMAC_CONCURRENT
40670 +
40671 +
40672 + //set BandWidth
40673 SetBWMode(padapter, bwmode, channel_offset);
40674
40675 }
40676 @@ -414,8 +629,14 @@ u16 get_beacon_interval(WLAN_BSSID_EX *b
40677
40678 int is_client_associated_to_ap(_adapter *padapter)
40679 {
40680 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
40681 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
40682 + struct mlme_ext_priv *pmlmeext;
40683 + struct mlme_ext_info *pmlmeinfo;
40684 +
40685 + if(!padapter)
40686 + return _FAIL;
40687 +
40688 + pmlmeext = &padapter->mlmeextpriv;
40689 + pmlmeinfo = &(pmlmeext->mlmext_info);
40690
40691 if ((pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS) && ((pmlmeinfo->state&0x03) == WIFI_FW_STATION_STATE))
40692 {
40693 @@ -481,17 +702,47 @@ void CAM_empty_entry(
40694 u8 ucIndex
40695 )
40696 {
40697 - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_CAM_EMPTY_ENTRY, (u8 *)(&ucIndex));
40698 + rtw_hal_set_hwreg(Adapter, HW_VAR_CAM_EMPTY_ENTRY, (u8 *)(&ucIndex));
40699 }
40700
40701 void invalidate_cam_all(_adapter *padapter)
40702 {
40703 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_CAM_INVALID_ALL, 0);
40704 + rtw_hal_set_hwreg(padapter, HW_VAR_CAM_INVALID_ALL, 0);
40705 +}
40706 +#if 0
40707 +static u32 _ReadCAM(_adapter *padapter ,u32 addr)
40708 +{
40709 + u32 count = 0, cmd;
40710 + cmd = CAM_POLLINIG |addr ;
40711 + rtw_write32(padapter, RWCAM, cmd);
40712 +
40713 + do{
40714 + if(0 == (rtw_read32(padapter,REG_CAMCMD) & CAM_POLLINIG)){
40715 + break;
40716 + }
40717 + }while(count++ < 100);
40718 +
40719 + return rtw_read32(padapter,REG_CAMREAD);
40720 +}
40721 +void read_cam(_adapter *padapter ,u8 entry)
40722 +{
40723 + u32 j,count = 0, addr, cmd;
40724 + addr = entry << 3;
40725 +
40726 + printk("********* DUMP CAM Entry_#%02d***************\n",entry);
40727 + for (j = 0; j < 6; j++)
40728 + {
40729 + cmd = _ReadCAM(padapter ,addr+j);
40730 + printk("offset:0x%02x => 0x%08x \n",addr+j,cmd);
40731 + }
40732 + printk("*********************************\n");
40733 }
40734 +#endif
40735
40736 void write_cam(_adapter *padapter, u8 entry, u16 ctrl, u8 *mac, u8 *key)
40737 {
40738 - unsigned int i, val, addr, cmd;
40739 + unsigned int i, val, addr;
40740 + //unsigned int cmd;
40741 int j;
40742 u32 cam_val[2];
40743
40744 @@ -519,14 +770,14 @@ void write_cam(_adapter *padapter, u8 en
40745 cam_val[0] = val;
40746 cam_val[1] = addr + (unsigned int)j;
40747
40748 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_CAM_WRITE, (u8 *)cam_val);
40749 + rtw_hal_set_hwreg(padapter, HW_VAR_CAM_WRITE, (u8 *)cam_val);
40750
40751 //rtw_write32(padapter, WCAMI, val);
40752
40753 //cmd = CAM_POLLINIG | CAM_WRITE | (addr + j);
40754 //rtw_write32(padapter, RWCAM, cmd);
40755
40756 - //DBG_8192C("%s=> cam write: %x, %x\n",__FUNCTION__, cmd, val);
40757 + //DBG_871X("%s=> cam write: %x, %x\n",__FUNCTION__, cmd, val);
40758
40759 }
40760
40761 @@ -544,14 +795,14 @@ void clear_cam_entry(_adapter *padapter,
40762 cam_val[0] = val;
40763 cam_val[1] = addr + (unsigned int)0;
40764
40765 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_CAM_WRITE, (u8 *)cam_val);
40766 + rtw_hal_set_hwreg(padapter, HW_VAR_CAM_WRITE, (u8 *)cam_val);
40767
40768
40769
40770 cam_val[0] = val;
40771 cam_val[1] = addr + (unsigned int)1;
40772
40773 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_CAM_WRITE, (u8 *)cam_val);
40774 + rtw_hal_set_hwreg(padapter, HW_VAR_CAM_WRITE, (u8 *)cam_val);
40775 #else
40776
40777 unsigned char null_sta[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
40778 @@ -586,21 +837,54 @@ void flush_all_cam_entry(_adapter *padap
40779 {
40780 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
40781 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
40782 -#if 0
40783 - unsigned char null_sta[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
40784 - unsigned char null_key[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00};
40785
40786 - for (i = 0; i < NUM_STA; i++)
40787 +#ifdef CONFIG_CONCURRENT_MODE
40788 +
40789 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
40790 +
40791 + //if(check_buddy_mlmeinfo_state(padapter, _HW_STATE_NOLINK_))
40792 + if(check_buddy_fwstate(padapter, _FW_LINKED) == _FALSE)
40793 {
40794 - write_cam(padapter, i, 0, null_sta, null_key);
40795 + rtw_hal_set_hwreg(padapter, HW_VAR_CAM_INVALID_ALL, 0);
40796 }
40797 -#else
40798 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_CAM_INVALID_ALL, 0);
40799 -#endif
40800 + else
40801 + {
40802 + if(check_fwstate(pmlmepriv, WIFI_STATION_STATE))
40803 + {
40804 + struct sta_priv *pstapriv = &padapter->stapriv;
40805 + struct sta_info *psta;
40806 + u8 cam_id;//cam_entry
40807 +
40808 + psta = rtw_get_stainfo(pstapriv, pmlmeinfo->network.MacAddress);
40809 + if(psta) {
40810 + if(psta->state & WIFI_AP_STATE)
40811 + {} //clear cam when ap free per sta_info
40812 + else {
40813 + if(psta->mac_id==2)
40814 + cam_id = 5;
40815 + else
40816 + cam_id = 4;
40817 + }
40818 + //clear_cam_entry(padapter, cam_id);
40819 + rtw_clearstakey_cmd(padapter, (u8*)psta, cam_id, _FALSE);
40820 + }
40821 + }
40822 + else if(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
40823 + {
40824 + //clear cam when ap free per sta_info
40825 + }
40826 + }
40827 +#else //CONFIG_CONCURRENT_MODE
40828 +
40829 + rtw_hal_set_hwreg(padapter, HW_VAR_CAM_INVALID_ALL, 0);
40830 +
40831 +#endif //CONFIG_CONCURRENT_MODE
40832 +
40833 _rtw_memset((u8 *)(pmlmeinfo->FW_sta_info), 0, sizeof(pmlmeinfo->FW_sta_info));
40834 +
40835 }
40836
40837 -#ifdef CONFIG_WFD
40838 +#if defined(CONFIG_P2P) && defined(CONFIG_WFD)
40839 int WFD_info_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE)
40840 {
40841 struct registry_priv *pregpriv = &padapter->registrypriv;
40842 @@ -622,8 +906,8 @@ int WFD_info_handler(_adapter *padapter,
40843 rtw_get_wfd_attr_content( wfd_ie, wfd_ielen, WFD_ATTR_DEVICE_INFO, attr_content, &attr_contentlen);
40844 if ( attr_contentlen )
40845 {
40846 - pwdinfo->wfd_info.peer_rtsp_ctrlport = RTW_GET_BE16( attr_content + 2 );
40847 - DBG_8192C( "[%s] Peer PORT NUM = %d\n", __FUNCTION__, pwdinfo->wfd_info.peer_rtsp_ctrlport );
40848 + pwdinfo->wfd_info->peer_rtsp_ctrlport = RTW_GET_BE16( attr_content + 2 );
40849 + DBG_8192C( "[%s] Peer PORT NUM = %d\n", __FUNCTION__, pwdinfo->wfd_info->peer_rtsp_ctrlport );
40850 return( _TRUE );
40851 }
40852 }
40853 @@ -638,7 +922,7 @@ int WFD_info_handler(_adapter *padapter,
40854
40855 int WMM_param_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE)
40856 {
40857 - struct registry_priv *pregpriv = &padapter->registrypriv;
40858 + //struct registry_priv *pregpriv = &padapter->registrypriv;
40859 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
40860 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
40861 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
40862 @@ -681,7 +965,6 @@ void WMMOnAssocRsp(_adapter *padapter)
40863 u8 acm_mask;
40864 u16 TXOP;
40865 u32 acParm, i;
40866 - struct registry_priv *pregpriv = &padapter->registrypriv;
40867 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
40868 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
40869
40870 @@ -715,22 +998,22 @@ void WMMOnAssocRsp(_adapter *padapter)
40871 switch (ACI)
40872 {
40873 case 0x0:
40874 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AC_PARAM_BE, (u8 *)(&acParm));
40875 + rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_BE, (u8 *)(&acParm));
40876 acm_mask |= (ACM? BIT(1):0);
40877 break;
40878
40879 case 0x1:
40880 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AC_PARAM_BK, (u8 *)(&acParm));
40881 + rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_BK, (u8 *)(&acParm));
40882 //acm_mask |= (ACM? BIT(0):0);
40883 break;
40884
40885 case 0x2:
40886 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AC_PARAM_VI, (u8 *)(&acParm));
40887 + rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_VI, (u8 *)(&acParm));
40888 acm_mask |= (ACM? BIT(2):0);
40889 break;
40890
40891 case 0x3:
40892 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AC_PARAM_VO, (u8 *)(&acParm));
40893 + rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_VO, (u8 *)(&acParm));
40894 acm_mask |= (ACM? BIT(3):0);
40895 break;
40896 }
40897 @@ -739,7 +1022,7 @@ void WMMOnAssocRsp(_adapter *padapter)
40898 }
40899
40900 if(padapter->registrypriv.acm_method == 1)
40901 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_ACM_CTRL, (u8 *)(&acm_mask));
40902 + rtw_hal_set_hwreg(padapter, HW_VAR_ACM_CTRL, (u8 *)(&acm_mask));
40903 else
40904 padapter->mlmepriv.acm_mask = acm_mask;
40905
40906 @@ -751,18 +1034,35 @@ static void bwmode_update_check(_adapter
40907 unsigned char new_bwmode;
40908 unsigned char new_ch_offset;
40909 struct HT_info_element *pHT_info;
40910 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
40911 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
40912 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
40913 -
40914 + struct registry_priv *pregistrypriv = &padapter->registrypriv;
40915 + struct ht_priv *phtpriv = &pmlmepriv->htpriv;
40916 + u8 cbw40_enable=0;
40917
40918 if(!pIE)
40919 return;
40920
40921 + if(phtpriv->ht_option == _FALSE) return;
40922 +
40923 + if(pIE->Length > sizeof(struct HT_info_element))
40924 + return;
40925 +
40926 pHT_info = (struct HT_info_element *)pIE->data;
40927
40928 - if(pHT_info->infos[0] & BIT(2))
40929 + if (pmlmeext->cur_channel > 14) {
40930 + if (pregistrypriv->cbw40_enable & BIT(1))
40931 + cbw40_enable = 1;
40932 + } else {
40933 + if (pregistrypriv->cbw40_enable & BIT(0))
40934 + cbw40_enable = 1;
40935 + }
40936 +
40937 + if((pHT_info->infos[0] & BIT(2)) && cbw40_enable )
40938 {
40939 new_bwmode = HT_CHANNEL_WIDTH_40;
40940 +
40941 switch (pHT_info->infos[0] & 0x3)
40942 {
40943 case 1:
40944 @@ -791,6 +1091,9 @@ static void bwmode_update_check(_adapter
40945
40946 pmlmeext->cur_bwmode = new_bwmode;
40947 pmlmeext->cur_ch_offset = new_ch_offset;
40948 +
40949 + //update HT info also
40950 + HT_info_handler(padapter, pIE);
40951 }
40952 else
40953 {
40954 @@ -842,7 +1145,8 @@ void HT_caps_handler(_adapter *padapter,
40955 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
40956 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
40957 struct ht_priv *phtpriv = &pmlmepriv->htpriv;
40958 -
40959 + struct registry_priv *pregistrypriv = &padapter->registrypriv;
40960 +
40961 if(pIE==NULL) return;
40962
40963 if(phtpriv->ht_option == _FALSE) return;
40964 @@ -855,57 +1159,68 @@ void HT_caps_handler(_adapter *padapter,
40965 {
40966 // Commented by Albert 2010/07/12
40967 // Got the endian issue here.
40968 - pmlmeinfo->HT_caps.HT_cap[i] &= (pIE->data[i]);
40969 + pmlmeinfo->HT_caps.u.HT_cap[i] &= (pIE->data[i]);
40970 }
40971 else
40972 {
40973 //modify from fw by Thomas 2010/11/17
40974 - if ((pmlmeinfo->HT_caps.HT_cap_element.AMPDU_para & 0x3) > (pIE->data[i] & 0x3))
40975 + if ((pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x3) > (pIE->data[i] & 0x3))
40976 {
40977 max_AMPDU_len = (pIE->data[i] & 0x3);
40978 }
40979 else
40980 {
40981 - max_AMPDU_len = (pmlmeinfo->HT_caps.HT_cap_element.AMPDU_para & 0x3);
40982 + max_AMPDU_len = (pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x3);
40983 }
40984
40985 - if ((pmlmeinfo->HT_caps.HT_cap_element.AMPDU_para & 0x1c) > (pIE->data[i] & 0x1c))
40986 + if ((pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x1c) > (pIE->data[i] & 0x1c))
40987 {
40988 - min_MPDU_spacing = (pmlmeinfo->HT_caps.HT_cap_element.AMPDU_para & 0x1c);
40989 + min_MPDU_spacing = (pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x1c);
40990 }
40991 else
40992 {
40993 min_MPDU_spacing = (pIE->data[i] & 0x1c);
40994 }
40995
40996 - pmlmeinfo->HT_caps.HT_cap_element.AMPDU_para = max_AMPDU_len | min_MPDU_spacing;
40997 + pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para = max_AMPDU_len | min_MPDU_spacing;
40998 }
40999 }
41000
41001 // Commented by Albert 2010/07/12
41002 // Have to handle the endian issue after copying.
41003 // HT_ext_caps didn't be used yet.
41004 - pmlmeinfo->HT_caps.HT_cap_element.HT_caps_info = le16_to_cpu( pmlmeinfo->HT_caps.HT_cap_element.HT_caps_info );
41005 - pmlmeinfo->HT_caps.HT_cap_element.HT_ext_caps = le16_to_cpu( pmlmeinfo->HT_caps.HT_cap_element.HT_ext_caps );
41006 + pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info = le16_to_cpu( pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info );
41007 + pmlmeinfo->HT_caps.u.HT_cap_element.HT_ext_caps = le16_to_cpu( pmlmeinfo->HT_caps.u.HT_cap_element.HT_ext_caps );
41008
41009 - padapter->HalFunc.GetHwRegHandler(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
41010 + rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
41011
41012 //update the MCS rates
41013 for (i = 0; i < 16; i++)
41014 {
41015 if((rf_type == RF_1T1R) || (rf_type == RF_1T2R))
41016 {
41017 - pmlmeinfo->HT_caps.HT_cap_element.MCS_rate[i] &= MCS_rate_1R[i];
41018 + pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_1R[i];
41019 }
41020 else
41021 {
41022 - pmlmeinfo->HT_caps.HT_cap_element.MCS_rate[i] &= MCS_rate_2R[i];
41023 + #ifdef CONFIG_DISABLE_MCS13TO15
41024 + if(pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40 && (pregistrypriv->wifi_spec!=1))
41025 + pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_2R_MCS13TO15_OFF[i];
41026 + else
41027 + pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_2R[i];
41028 + #else
41029 + pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_2R[i];
41030 + #endif //CONFIG_DISABLE_MCS13TO15
41031 }
41032 #ifdef RTL8192C_RECONFIG_TO_1T1R
41033 {
41034 - pmlmeinfo->HT_caps.HT_cap_element.MCS_rate[i] &= MCS_rate_1R[i];
41035 + pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_1R[i];
41036 }
41037 #endif
41038 +
41039 + if(pregistrypriv->special_rf_path)
41040 + pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_1R[i];
41041 +
41042 }
41043
41044 return;
41045 @@ -939,7 +1254,6 @@ void HTOnAssocRsp(_adapter *padapter)
41046 //struct registry_priv *pregpriv = &padapter->registrypriv;
41047 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
41048 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
41049 - //WLAN_BSSID_EX *cur_network = &(pmlmeinfo->network);
41050
41051 DBG_871X("%s\n", __FUNCTION__);
41052
41053 @@ -959,17 +1273,17 @@ void HTOnAssocRsp(_adapter *padapter)
41054 AMPDU_para [1:0]:Max AMPDU Len => 0:8k , 1:16k, 2:32k, 3:64k
41055 AMPDU_para [4:2]:Min MPDU Start Spacing
41056 */
41057 - max_AMPDU_len = pmlmeinfo->HT_caps.HT_cap_element.AMPDU_para & 0x03;
41058 + max_AMPDU_len = pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x03;
41059
41060 - min_MPDU_spacing = (pmlmeinfo->HT_caps.HT_cap_element.AMPDU_para & 0x1c) >> 2;
41061 + min_MPDU_spacing = (pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x1c) >> 2;
41062
41063 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AMPDU_MIN_SPACE, (u8 *)(&min_MPDU_spacing));
41064 + rtw_hal_set_hwreg(padapter, HW_VAR_AMPDU_MIN_SPACE, (u8 *)(&min_MPDU_spacing));
41065
41066 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AMPDU_FACTOR, (u8 *)(&max_AMPDU_len));
41067 + rtw_hal_set_hwreg(padapter, HW_VAR_AMPDU_FACTOR, (u8 *)(&max_AMPDU_len));
41068
41069 #if 0 //move to rtw_update_ht_cap()
41070 if ((pregpriv->cbw40_enable) &&
41071 - (pmlmeinfo->HT_caps.HT_cap_element.HT_caps_info & BIT(1)) &&
41072 + (pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info & BIT(1)) &&
41073 (pmlmeinfo->HT_info.infos[0] & BIT(2)))
41074 {
41075 //switch to the 40M Hz mode accoring to the AP
41076 @@ -999,7 +1313,7 @@ void HTOnAssocRsp(_adapter *padapter)
41077 //
41078 // Config SM Power Save setting
41079 //
41080 - pmlmeinfo->SM_PS = (pmlmeinfo->HT_caps.HT_cap_element.HT_caps_info & 0x0C) >> 2;
41081 + pmlmeinfo->SM_PS = (pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info & 0x0C) >> 2;
41082 if(pmlmeinfo->SM_PS == WLAN_HT_CAP_SM_PS_STATIC)
41083 {
41084 /*u8 i;
41085 @@ -1008,7 +1322,7 @@ void HTOnAssocRsp(_adapter *padapter)
41086 {
41087 pmlmeinfo->HT_caps.HT_cap_element.MCS_rate[i] &= MCS_rate_1R[i];
41088 }*/
41089 - DBG_8192C("%s(): WLAN_HT_CAP_SM_PS_STATIC\n",__FUNCTION__);
41090 + DBG_871X("%s(): WLAN_HT_CAP_SM_PS_STATIC\n",__FUNCTION__);
41091 }
41092
41093 //
41094 @@ -1081,6 +1395,24 @@ void VCS_update(_adapter *padapter, stru
41095 }
41096 }
41097
41098 +#ifdef CONFIG_TDLS
41099 +int check_ap_tdls_prohibited(u8 *pframe, u8 pkt_len)
41100 +{
41101 + u8 tdls_prohibited_bit = 0x40; //bit(38); TDLS_prohibited
41102 +
41103 + if(pkt_len < 5)
41104 + {
41105 + return _FALSE;
41106 + }
41107 +
41108 + pframe += 4;
41109 + if( (*pframe) & tdls_prohibited_bit )
41110 + return _TRUE;
41111 +
41112 + return _FALSE;
41113 +}
41114 +#endif //CONFIG_TDLS
41115 +
41116 void update_beacon_info(_adapter *padapter, u8 *pframe, uint pkt_len, struct sta_info *psta)
41117 {
41118 unsigned int i;
41119 @@ -1090,8 +1422,8 @@ void update_beacon_info(_adapter *padapt
41120 #ifdef CONFIG_TDLS
41121 struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
41122 u8 tdls_prohibited[] = { 0x00, 0x00, 0x00, 0x00, 0x10 }; //bit(38): TDLS_prohibited
41123 -#endif
41124 -
41125 +#endif //CONFIG_TDLS
41126 +
41127 len = pkt_len - (_BEACON_IE_OFFSET_ + WLAN_HDR_A3_LEN);
41128
41129 for (i = 0; i < len;)
41130 @@ -1122,10 +1454,10 @@ void update_beacon_info(_adapter *padapt
41131
41132 #ifdef CONFIG_TDLS
41133 case _EXT_CAP_IE_:
41134 - if( _rtw_memcmp(pIE->data, tdls_prohibited, 5) == _TRUE )
41135 + if( check_ap_tdls_prohibited(pIE->data, pIE->Length) == _TRUE )
41136 ptdlsinfo->ap_prohibited = _TRUE;
41137 break;
41138 -#endif
41139 +#endif //CONFIG_TDLS
41140 default:
41141 break;
41142 }
41143 @@ -1181,7 +1513,7 @@ unsigned int is_ap_in_tkip(_adapter *pad
41144 switch (pIE->ElementID)
41145 {
41146 case _VENDOR_SPECIFIC_IE_:
41147 - if ((_rtw_memcmp(pIE->data, WPA_OUI, 4)) && (_rtw_memcmp((pIE->data + 12), WPA_TKIP_CIPHER, 4)))
41148 + if ((_rtw_memcmp(pIE->data, RTW_WPA_OUI, 4)) && (_rtw_memcmp((pIE->data + 12), WPA_TKIP_CIPHER, 4)))
41149 {
41150 return _TRUE;
41151 }
41152 @@ -1209,6 +1541,7 @@ unsigned int is_ap_in_tkip(_adapter *pad
41153
41154 }
41155
41156 +int wifirate2_ratetbl_inx(unsigned char rate);
41157 int wifirate2_ratetbl_inx(unsigned char rate)
41158 {
41159 int inx = 0;
41160 @@ -1303,7 +1636,7 @@ unsigned int update_MSC_rate(struct HT_c
41161 {
41162 unsigned int mask = 0;
41163
41164 - mask = ((pHT_caps->HT_cap_element.MCS_rate[0] << 12) | (pHT_caps->HT_cap_element.MCS_rate[1] << 20));
41165 + mask = ((pHT_caps->u.HT_cap_element.MCS_rate[0] << 12) | (pHT_caps->u.HT_cap_element.MCS_rate[1] << 20));
41166
41167 return mask;
41168 }
41169 @@ -1322,7 +1655,7 @@ int support_short_GI(_adapter *padapter,
41170
41171 bit_offset = (pmlmeext->cur_bwmode & HT_CHANNEL_WIDTH_40)? 6: 5;
41172
41173 - if (pHT_caps->HT_cap_element.HT_caps_info & (0x1 << bit_offset))
41174 + if (pHT_caps->u.HT_cap_element.HT_caps_info & (0x1 << bit_offset))
41175 {
41176 return _SUCCESS;
41177 }
41178 @@ -1349,11 +1682,12 @@ unsigned char get_highest_rate_idx(u32 m
41179 return rate_idx;
41180 }
41181
41182 +unsigned char get_highest_mcs_rate(struct HT_caps_element *pHT_caps);
41183 unsigned char get_highest_mcs_rate(struct HT_caps_element *pHT_caps)
41184 {
41185 int i, mcs_rate;
41186
41187 - mcs_rate = (pHT_caps->HT_cap_element.MCS_rate[0] | (pHT_caps->HT_cap_element.MCS_rate[1] << 8));
41188 + mcs_rate = (pHT_caps->u.HT_cap_element.MCS_rate[0] | (pHT_caps->u.HT_cap_element.MCS_rate[1] << 8));
41189
41190 for (i = 15; i >= 0; i--)
41191 {
41192 @@ -1368,9 +1702,10 @@ unsigned char get_highest_mcs_rate(struc
41193
41194 void Update_RA_Entry(_adapter *padapter, u32 mac_id)
41195 {
41196 - padapter->HalFunc.UpdateRAMaskHandler(padapter, mac_id);
41197 + rtw_hal_update_ra_mask(padapter, mac_id);
41198 }
41199
41200 +void enable_rate_adaptive(_adapter *padapter, u32 mac_id);
41201 void enable_rate_adaptive(_adapter *padapter, u32 mac_id)
41202 {
41203 Update_RA_Entry(padapter, mac_id);
41204 @@ -1382,6 +1717,47 @@ void set_sta_rate(_adapter *padapter, st
41205 enable_rate_adaptive(padapter, psta->mac_id);
41206 }
41207
41208 +// Update RRSR and Rate for USERATE
41209 +void update_tx_basic_rate(_adapter *padapter, u8 wirelessmode)
41210 +{
41211 + NDIS_802_11_RATES_EX supported_rates;
41212 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
41213 +#ifdef CONFIG_P2P
41214 + struct wifidirect_info* pwdinfo = &padapter->wdinfo;
41215 +
41216 + // Added by Albert 2011/03/22
41217 + // In the P2P mode, the driver should not support the b mode.
41218 + // So, the Tx packet shouldn't use the CCK rate
41219 + if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
41220 + return;
41221 +#endif //CONFIG_P2P
41222 +#ifdef CONFIG_INTEL_WIDI
41223 + if (padapter->mlmepriv.widi_state != INTEL_WIDI_STATE_NONE)
41224 + return;
41225 +#endif //CONFIG_INTEL_WIDI
41226 +
41227 + _rtw_memset(supported_rates, 0, NDIS_802_11_LENGTH_RATES_EX);
41228 +
41229 + //clear B mod if current channel is in 5G band, avoid tx cck rate in 5G band.
41230 + if(pmlmeext->cur_channel > 14)
41231 + wirelessmode &= ~(WIRELESS_11B);
41232 +
41233 + if ((wirelessmode & WIRELESS_11B) && (wirelessmode == WIRELESS_11B)) {
41234 + _rtw_memcpy(supported_rates, rtw_basic_rate_cck, 4);
41235 + } else if (wirelessmode & WIRELESS_11B) {
41236 + _rtw_memcpy(supported_rates, rtw_basic_rate_mix, 7);
41237 + } else {
41238 + _rtw_memcpy(supported_rates, rtw_basic_rate_ofdm, 3);
41239 + }
41240 +
41241 + if (wirelessmode & WIRELESS_11B)
41242 + update_mgnt_tx_rate(padapter, IEEE80211_CCK_RATE_1MB);
41243 + else
41244 + update_mgnt_tx_rate(padapter, IEEE80211_OFDM_RATE_6MB);
41245 +
41246 + rtw_hal_set_hwreg(padapter, HW_VAR_BASIC_RATE, supported_rates);
41247 +}
41248 +
41249 unsigned char check_assoc_AP(u8 *pframe, uint len)
41250 {
41251 unsigned int i;
41252 @@ -1496,7 +1872,7 @@ void update_capinfo(PADAPTER Adapter, u1
41253 {
41254 ShortPreamble = _TRUE;
41255 pmlmeinfo->preamble_mode = PREAMBLE_SHORT;
41256 - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_ACK_PREAMBLE, (u8 *)&ShortPreamble );
41257 + rtw_hal_set_hwreg( Adapter, HW_VAR_ACK_PREAMBLE, (u8 *)&ShortPreamble );
41258 }
41259 }
41260 else
41261 @@ -1505,7 +1881,7 @@ void update_capinfo(PADAPTER Adapter, u1
41262 {
41263 ShortPreamble = _FALSE;
41264 pmlmeinfo->preamble_mode = PREAMBLE_LONG;
41265 - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_ACK_PREAMBLE, (u8 *)&ShortPreamble );
41266 + rtw_hal_set_hwreg( Adapter, HW_VAR_ACK_PREAMBLE, (u8 *)&ShortPreamble );
41267 }
41268 }
41269 }
41270 @@ -1545,18 +1921,22 @@ void update_capinfo(PADAPTER Adapter, u1
41271 }
41272 }
41273
41274 - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_SLOT_TIME, &pmlmeinfo->slotTime );
41275 + rtw_hal_set_hwreg( Adapter, HW_VAR_SLOT_TIME, &pmlmeinfo->slotTime );
41276
41277 }
41278
41279 void update_wireless_mode(_adapter *padapter)
41280 {
41281 - int ratelen, network_type = 0;
41282 - u16 SIFS_Timer;
41283 + u8 init_rate=0;
41284 + int ratelen, network_type = 0;
41285 + u32 SIFS_Timer, mask;
41286 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
41287 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
41288 WLAN_BSSID_EX *cur_network = &(pmlmeinfo->network);
41289 unsigned char *rate = cur_network->SupportedRates;
41290 +#ifdef CONFIG_CONCURRENT_MODE
41291 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
41292 +#endif //CONFIG_CONCURRENT_MODE
41293
41294 ratelen = rtw_get_rateset_len(cur_network->SupportedRates);
41295
41296 @@ -1596,16 +1976,39 @@ void update_wireless_mode(_adapter *pada
41297 }
41298
41299 pmlmeext->cur_wireless_mode = network_type & padapter->registrypriv.wireless_mode;
41300 +
41301 + //For STA mode, driver need to modify initial data rate, or MAC will use wrong tx rate.
41302 + //Modified by Thomas 2012-12-3
41303 + mask = update_supported_rate(cur_network->SupportedRates, ratelen);
41304 + init_rate = get_highest_rate_idx(mask)&0x3f;
41305 + rtw_hal_set_hwreg( padapter, HW_VAR_INIT_DATA_RATE, (u8 *)&init_rate);
41306 +
41307 +/*
41308 if((pmlmeext->cur_wireless_mode==WIRELESS_11G) ||
41309 (pmlmeext->cur_wireless_mode==WIRELESS_11BG))//WIRELESS_MODE_G)
41310 - SIFS_Timer = 0x0a0a;
41311 + SIFS_Timer = 0x0a0a;//CCK
41312 else
41313 - SIFS_Timer = 0x0e0e;//pHalData->SifsTime;
41314 - padapter->HalFunc.SetHwRegHandler( padapter, HW_VAR_SIFS, (u8 *)&SIFS_Timer);
41315 + SIFS_Timer = 0x0e0e;//pHalData->SifsTime; //OFDM
41316 +*/
41317
41318 -}
41319 + SIFS_Timer = 0x0a0a0808; //0x0808 -> for CCK, 0x0a0a -> for OFDM
41320 + //change this value if having IOT issues.
41321 +
41322 + rtw_hal_set_hwreg( padapter, HW_VAR_RESP_SIFS, (u8 *)&SIFS_Timer);
41323
41324 + if (pmlmeext->cur_wireless_mode & WIRELESS_11B)
41325 + update_mgnt_tx_rate(padapter, IEEE80211_CCK_RATE_1MB);
41326 + else
41327 + {
41328 + update_mgnt_tx_rate(padapter, IEEE80211_OFDM_RATE_6MB);
41329 +#ifdef CONFIG_CONCURRENT_MODE
41330 + if(pbuddy_adapter && (pmlmeext->cur_wireless_mode & WIRELESS_11A))
41331 + update_mgnt_tx_rate(pbuddy_adapter, IEEE80211_OFDM_RATE_6MB);
41332 +#endif //CONFIG_CONCURRENT_MODE
41333 + }
41334 +}
41335
41336 +void fire_write_MAC_cmd(_adapter *padapter, unsigned int addr, unsigned int value);
41337 void fire_write_MAC_cmd(_adapter *padapter, unsigned int addr, unsigned int value)
41338 {
41339 #if 0
41340 @@ -1633,13 +2036,6 @@ void fire_write_MAC_cmd(_adapter *padapt
41341 #endif
41342 }
41343
41344 -u8 bmc_support_rate_ofdm[4] =
41345 - {IEEE80211_OFDM_RATE_6MB|IEEE80211_BASIC_RATE_MASK, IEEE80211_OFDM_RATE_12MB|IEEE80211_BASIC_RATE_MASK,
41346 - IEEE80211_OFDM_RATE_18MB|IEEE80211_BASIC_RATE_MASK, IEEE80211_OFDM_RATE_24MB|IEEE80211_BASIC_RATE_MASK};
41347 -u8 bmc_support_rate_cck[4] =
41348 - {IEEE80211_CCK_RATE_1MB|IEEE80211_BASIC_RATE_MASK, IEEE80211_CCK_RATE_2MB|IEEE80211_BASIC_RATE_MASK,
41349 - IEEE80211_CCK_RATE_5MB|IEEE80211_BASIC_RATE_MASK, IEEE80211_CCK_RATE_11MB|IEEE80211_BASIC_RATE_MASK};
41350 -
41351 void update_bmc_sta_support_rate(_adapter *padapter, u32 mac_id)
41352 {
41353 struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
41354 @@ -1648,11 +2044,11 @@ void update_bmc_sta_support_rate(_adapte
41355 if(pmlmeext->cur_wireless_mode & WIRELESS_11B)
41356 {
41357 // Only B, B/G, and B/G/N AP could use CCK rate
41358 - _rtw_memcpy((pmlmeinfo->FW_sta_info[mac_id].SupportedRates), bmc_support_rate_cck, 4);
41359 + _rtw_memcpy((pmlmeinfo->FW_sta_info[mac_id].SupportedRates), rtw_basic_rate_cck, 4);
41360 }
41361 else
41362 {
41363 - _rtw_memcpy((pmlmeinfo->FW_sta_info[mac_id].SupportedRates), bmc_support_rate_ofdm, 4);
41364 + _rtw_memcpy((pmlmeinfo->FW_sta_info[mac_id].SupportedRates), rtw_basic_rate_ofdm, 3);
41365 }
41366 }
41367
41368 @@ -1736,12 +2132,12 @@ void update_TSF(struct mlme_ext_priv *pm
41369
41370 void correct_TSF(_adapter *padapter, struct mlme_ext_priv *pmlmeext)
41371 {
41372 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_CORRECT_TSF, 0);
41373 + rtw_hal_set_hwreg(padapter, HW_VAR_CORRECT_TSF, 0);
41374 }
41375
41376 void beacon_timing_control(_adapter *padapter)
41377 {
41378 - padapter->HalFunc.SetBeaconRelatedRegistersHandler(padapter);
41379 + rtw_hal_bcn_related_reg_setting(padapter);
41380 }
41381
41382 #if 0
41383 @@ -1818,7 +2214,7 @@ unsigned int setup_beacon_frame(_adapter
41384
41385 if ((len + TXDESC_SIZE) > 256)
41386 {
41387 - //DBG_8192C("marc: beacon frame too large\n");
41388 + //DBG_871X("marc: beacon frame too large\n");
41389 return 0;
41390 }
41391
41392 @@ -1846,3 +2242,64 @@ unsigned int setup_beacon_frame(_adapter
41393 }
41394 #endif
41395
41396 +static _adapter *pbuddy_padapter = NULL;
41397 +
41398 +int rtw_handle_dualmac(_adapter *adapter, bool init)
41399 +{
41400 + int status = _SUCCESS;
41401 + struct dvobj_priv *dvobj = adapter_to_dvobj(adapter);
41402 +
41403 + if (!IS_HARDWARE_TYPE_8192D(adapter))
41404 + goto exit;
41405 +
41406 + if (init) {
41407 + rtw_hal_get_def_var(adapter, HAL_DEF_DUAL_MAC_MODE, &dvobj->DualMacMode);
41408 + if (dvobj->DualMacMode == _TRUE) {
41409 + // temply disable IPS For 92D-VC
41410 + adapter->registrypriv.ips_mode = IPS_NONE;
41411 + }
41412 +
41413 + /* For SMSP on 92DU-VC, driver do not probe another Interface. */
41414 + if ((dvobj->DualMacMode != _TRUE) && (dvobj->InterfaceNumber != 0)) {
41415 + DBG_871X("%s(): Do not init another Interface because SMSP\n",__FUNCTION__);
41416 + status = _FAIL;
41417 + goto exit;
41418 + }
41419 +
41420 +#ifndef CONFIG_CONCURRENT_MODE
41421 + if (dvobj->DualMacMode == _TRUE) {
41422 + if (pbuddy_padapter == NULL) {
41423 + pbuddy_padapter = adapter;
41424 + DBG_871X("%s(): pbuddy_padapter == NULL, Set pbuddy_padapter\n",__FUNCTION__);
41425 + } else {
41426 + adapter->pbuddy_adapter = pbuddy_padapter;
41427 + pbuddy_padapter->pbuddy_adapter = adapter;
41428 + // clear global value
41429 + pbuddy_padapter = NULL;
41430 + DBG_871X("%s(): pbuddy_padapter exist, Exchange Information\n",__FUNCTION__);
41431 + }
41432 + }
41433 +
41434 +#ifdef CONFIG_DUALMAC_CONCURRENT
41435 + if (dvobj->InterfaceNumber == 0) {
41436 + //set adapter_type/iface type
41437 + adapter->isprimary = _TRUE;
41438 + adapter->adapter_type = PRIMARY_ADAPTER;
41439 + adapter->iface_type = IFACE_PORT0;
41440 + DBG_871X("%s(): PRIMARY_ADAPTER\n",__FUNCTION__);
41441 + } else {
41442 + //set adapter_type/iface type
41443 + adapter->isprimary = _FALSE;
41444 + adapter->adapter_type = SECONDARY_ADAPTER;
41445 + adapter->iface_type = IFACE_PORT1;
41446 + DBG_871X("%s(): SECONDARY_ADAPTER\n",__FUNCTION__);
41447 + }
41448 +#endif
41449 +#endif
41450 + }else {
41451 + pbuddy_padapter = NULL;
41452 + }
41453 +exit:
41454 + return status;
41455 +}
41456 +
41457 --- a/drivers/net/wireless/rtl8192cu/core/rtw_xmit.c
41458 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_xmit.c
41459 @@ -15,8 +15,8 @@
41460 * this program; if not, write to the Free Software Foundation, Inc.,
41461 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
41462 *
41463 - *
41464 -******************************************************************************/
41465 + *
41466 + ******************************************************************************/
41467 #define _RTW_XMIT_C_
41468
41469 #include <drv_conf.h>
41470 @@ -28,10 +28,6 @@
41471 #include <circ_buf.h>
41472 #include <ip.h>
41473
41474 -#ifdef CONFIG_TDLS
41475 -#include <rtl8192c_hal.h>
41476 -#endif
41477 -
41478 #if defined (PLATFORM_LINUX) && defined (PLATFORM_WINDOWS)
41479 #error "Shall be Linux or Windows, but not both!\n"
41480 #endif
41481 @@ -48,11 +44,6 @@
41482 static u8 P802_1H_OUI[P80211_OUI_LEN] = { 0x00, 0x00, 0xf8 };
41483 static u8 RFC1042_OUI[P80211_OUI_LEN] = { 0x00, 0x00, 0x00 };
41484
41485 -#ifdef CONFIG_TDLS
41486 -extern unsigned char MCS_rate_2R[16];
41487 -extern unsigned char MCS_rate_1R[16];
41488 -#endif
41489 -
41490 static void _init_txservq(struct tx_servq *ptxservq)
41491 {
41492 _func_enter_;
41493 @@ -99,11 +90,10 @@ _func_enter_;
41494 //_rtw_memset((unsigned char *)pxmitpriv, 0, sizeof(struct xmit_priv));
41495
41496 _rtw_spinlock_init(&pxmitpriv->lock);
41497 + _rtw_spinlock_init(&pxmitpriv->lock_sctx);
41498 _rtw_init_sema(&pxmitpriv->xmit_sema, 0);
41499 _rtw_init_sema(&pxmitpriv->terminate_xmitthread_sema, 0);
41500
41501 - ATOMIC_SET(&pxmitpriv->HwRdyXmitData, 1);
41502 -
41503 /*
41504 Please insert all the queue initializaiton using _rtw_init_queue below
41505 */
41506 @@ -124,7 +114,6 @@ _func_enter_;
41507
41508 _rtw_init_queue(&pxmitpriv->free_xmit_queue);
41509
41510 -
41511 /*
41512 Please allocate memory with the sz = (struct xmit_frame) * NR_XMITFRAME,
41513 and initialize free_xmit_frame below.
41514 @@ -210,6 +199,13 @@ _func_enter_;
41515 goto exit;
41516 }
41517
41518 +#ifdef CONFIG_SDIO_HCI
41519 + pxmitbuf->phead = pxmitbuf->pbuf;
41520 + pxmitbuf->pend = pxmitbuf->pbuf + MAX_XMITBUF_SZ;
41521 + pxmitbuf->len = 0;
41522 + pxmitbuf->pdata = pxmitbuf->ptail = pxmitbuf->phead;
41523 +#endif
41524 +
41525 pxmitbuf->flags = XMIT_VO_QUEUE;
41526
41527 rtw_list_insert_tail(&pxmitbuf->list, &(pxmitpriv->free_xmitbuf_queue.queue));
41528 @@ -223,6 +219,39 @@ _func_enter_;
41529
41530 pxmitpriv->free_xmitbuf_cnt = NR_XMITBUFF;
41531
41532 + /* init xframe_ext queue, the same count as extbuf */
41533 + _rtw_init_queue(&pxmitpriv->free_xframe_ext_queue);
41534 +
41535 + pxmitpriv->xframe_ext_alloc_addr = rtw_zvmalloc(NR_XMIT_EXTBUFF * sizeof(struct xmit_frame) + 4);
41536 +
41537 + if (pxmitpriv->xframe_ext_alloc_addr == NULL){
41538 + pxmitpriv->xframe_ext = NULL;
41539 + RT_TRACE(_module_rtl871x_xmit_c_,_drv_err_,("alloc xframe_ext fail!\n"));
41540 + res= _FAIL;
41541 + goto exit;
41542 + }
41543 + pxmitpriv->xframe_ext = (u8 *)N_BYTE_ALIGMENT((SIZE_PTR)(pxmitpriv->xframe_ext_alloc_addr), 4);
41544 + pxframe = (struct xmit_frame*)pxmitpriv->xframe_ext;
41545 +
41546 + for (i = 0; i < NR_XMIT_EXTBUFF; i++) {
41547 + _rtw_init_listhead(&(pxframe->list));
41548 +
41549 + pxframe->padapter = padapter;
41550 + pxframe->frame_tag = NULL_FRAMETAG;
41551 +
41552 + pxframe->pkt = NULL;
41553 +
41554 + pxframe->buf_addr = NULL;
41555 + pxframe->pxmitbuf = NULL;
41556 +
41557 + pxframe->ext_tag = 1;
41558 +
41559 + rtw_list_insert_tail(&(pxframe->list), &(pxmitpriv->free_xframe_ext_queue.queue));
41560 +
41561 + pxframe++;
41562 + }
41563 + pxmitpriv->free_xframe_ext_cnt = NR_XMIT_EXTBUFF;
41564 +
41565 // Init xmit extension buff
41566 _rtw_init_queue(&pxmitpriv->free_xmit_extbuf_queue);
41567
41568 @@ -262,6 +291,13 @@ _func_enter_;
41569 goto exit;
41570 }
41571
41572 +#ifdef CONFIG_SDIO_HCI
41573 + pxmitbuf->phead = pxmitbuf->pbuf;
41574 + pxmitbuf->pend = pxmitbuf->pbuf + MAX_XMIT_EXTBUF_SZ;
41575 + pxmitbuf->len = 0;
41576 + pxmitbuf->pdata = pxmitbuf->ptail = pxmitbuf->phead;
41577 +#endif
41578 +
41579 rtw_list_insert_tail(&pxmitbuf->list, &(pxmitpriv->free_xmit_extbuf_queue.queue));
41580 #ifdef DBG_XMIT_BUF
41581 pxmitbuf->no=i;
41582 @@ -287,8 +323,14 @@ _func_enter_;
41583 pxmitpriv->voq_cnt = 0;
41584 #endif
41585
41586 - if(padapter->HalFunc.init_xmit_priv != NULL)
41587 - padapter->HalFunc.init_xmit_priv(padapter);
41588 +
41589 +#ifdef CONFIG_XMIT_ACK
41590 + pxmitpriv->ack_tx = _FALSE;
41591 + _rtw_mutex_init(&pxmitpriv->ack_tx_mutex);
41592 + rtw_sctx_init(&pxmitpriv->ack_tx_ops, 0);
41593 +#endif
41594 +
41595 + rtw_hal_init_xmit_priv(padapter);
41596
41597 exit:
41598
41599 @@ -297,6 +339,7 @@ _func_exit_;
41600 return res;
41601 }
41602
41603 +void rtw_mfree_xmit_priv_lock (struct xmit_priv *pxmitpriv);
41604 void rtw_mfree_xmit_priv_lock (struct xmit_priv *pxmitpriv)
41605 {
41606 _rtw_spinlock_free(&pxmitpriv->lock);
41607 @@ -327,7 +370,7 @@ void _rtw_free_xmit_priv (struct xmit_pr
41608
41609 _func_enter_;
41610
41611 - padapter->HalFunc.free_xmit_priv(padapter);
41612 + rtw_hal_free_xmit_priv(padapter);
41613
41614 rtw_mfree_xmit_priv_lock(pxmitpriv);
41615
41616 @@ -336,7 +379,7 @@ void _rtw_free_xmit_priv (struct xmit_pr
41617
41618 for(i=0; i<NR_XMITFRAME; i++)
41619 {
41620 - rtw_os_xmit_complete(padapter, pxmitframe);
41621 + rtw_os_xmit_complete(padapter, pxmitframe);
41622
41623 pxmitframe++;
41624 }
41625 @@ -360,6 +403,17 @@ void _rtw_free_xmit_priv (struct xmit_pr
41626 rtw_vmfree(pxmitpriv->pallocated_xmitbuf, NR_XMITBUFF * sizeof(struct xmit_buf) + 4);
41627 }
41628
41629 + /* free xframe_ext queue, the same count as extbuf */
41630 + if ((pxmitframe = (struct xmit_frame*)pxmitpriv->xframe_ext)) {
41631 + for (i=0; i<NR_XMIT_EXTBUFF; i++) {
41632 + rtw_os_xmit_complete(padapter, pxmitframe);
41633 + pxmitframe++;
41634 + }
41635 + }
41636 + if (pxmitpriv->xframe_ext_alloc_addr)
41637 + rtw_vmfree(pxmitpriv->xframe_ext_alloc_addr, NR_XMIT_EXTBUFF * sizeof(struct xmit_frame) + 4);
41638 + _rtw_spinlock_free(&pxmitpriv->free_xframe_ext_queue.lock);
41639 +
41640 // free xmit extension buff
41641 _rtw_spinlock_free(&pxmitpriv->free_xmit_extbuf_queue.lock);
41642
41643 @@ -380,6 +434,10 @@ void _rtw_free_xmit_priv (struct xmit_pr
41644
41645 rtw_free_hwxmits(padapter);
41646
41647 +#ifdef CONFIG_XMIT_ACK
41648 + _rtw_mutex_free(&pxmitpriv->ack_tx_mutex);
41649 +#endif
41650 +
41651 out:
41652
41653 _func_exit_;
41654 @@ -394,6 +452,27 @@ static void update_attrib_vcs_info(_adap
41655 struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
41656 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
41657
41658 + if(pattrib->psta)
41659 + {
41660 + psta = pattrib->psta;
41661 + }
41662 + else
41663 + {
41664 + DBG_871X("%s, call rtw_get_stainfo()\n", __func__);
41665 + psta=rtw_get_stainfo(&padapter->stapriv ,&pattrib->ra[0] );
41666 + }
41667 +
41668 + if(psta==NULL)
41669 + {
41670 + DBG_871X("%s, psta==NUL\n", __func__);
41671 + return;
41672 + }
41673 +
41674 + if(!(psta->state &_FW_LINKED))
41675 + {
41676 + DBG_871X("%s, psta->state(0x%x) != _FW_LINKED\n", __func__, psta->state);
41677 + return;
41678 + }
41679
41680 if (pattrib->nr_frags != 1)
41681 {
41682 @@ -496,8 +575,6 @@ static void update_attrib_vcs_info(_adap
41683 break;
41684 }
41685 }
41686 - if(padapter->registrypriv.intel_class_mode==1)
41687 - pattrib->vcs_mode = RTS_CTS;
41688 }
41689
41690 static void update_attrib_phy_info(struct pkt_attrib *pattrib, struct sta_info *psta)
41691 @@ -527,20 +604,22 @@ static void update_attrib_phy_info(struc
41692 // if(psta->htpriv.agg_enable_bitmap & BIT(pattrib->priority))
41693 // pattrib->ampdu_en = _TRUE;
41694 //}
41695 -
41696 +
41697
41698 pattrib->retry_ctrl = _FALSE;
41699 -
41700 +
41701 }
41702
41703 -static void qos_acm(u8 acm_mask, struct pkt_attrib *pattrib)
41704 +u8 qos_acm(u8 acm_mask, u8 priority)
41705 {
41706 - switch (pattrib->priority)
41707 + u8 change_priority = priority;
41708 +
41709 + switch (priority)
41710 {
41711 case 0:
41712 case 3:
41713 if(acm_mask & BIT(1))
41714 - pattrib->priority = 2;
41715 + change_priority = 1;
41716 break;
41717 case 1:
41718 case 2:
41719 @@ -548,17 +627,19 @@ static void qos_acm(u8 acm_mask, struct
41720 case 4:
41721 case 5:
41722 if(acm_mask & BIT(2))
41723 - pattrib->priority = 3;
41724 + change_priority = 0;
41725 break;
41726 case 6:
41727 case 7:
41728 if(acm_mask & BIT(3))
41729 - pattrib->priority = 5;
41730 + change_priority = 5;
41731 break;
41732 default:
41733 - DBG_871X("qos_acm(): invalid pattrib->priority: %d!!!\n", pattrib->priority);
41734 + DBG_871X("qos_acm(): invalid pattrib->priority: %d!!!\n", priority);
41735 break;
41736 }
41737 +
41738 + return change_priority;
41739 }
41740
41741 static void set_qos(struct pkt_file *ppktfile, struct pkt_attrib *pattrib)
41742 @@ -628,7 +709,7 @@ static s32 update_attrib(_adapter *padap
41743 _rtw_memcpy(pattrib->ta, get_bssid(pmlmepriv), ETH_ALEN);
41744 }
41745
41746 - pattrib->pktlen = pktfile.pkt_len; // rtw_xmitframe_coalesce() overwirte this!
41747 + pattrib->pktlen = pktfile.pkt_len;
41748
41749 if (ETH_P_IP == pattrib->ether_type)
41750 {
41751 @@ -659,12 +740,10 @@ static s32 update_attrib(_adapter *padap
41752 }
41753 }
41754
41755 - #ifdef CONFIG_SET_SCAN_DENY_TIMER
41756 if ( (pattrib->ether_type == 0x888e) || (pattrib->dhcp_pkt == 1) )
41757 {
41758 - rtw_set_scan_deny(pmlmepriv, 3000);
41759 + rtw_set_scan_deny(padapter, 3000);
41760 }
41761 - #endif
41762
41763 #ifdef CONFIG_LPS
41764 // If EAPOL , ARP , OR DHCP packet, driver must be in active mode.
41765 @@ -730,9 +809,10 @@ static s32 update_attrib(_adapter *padap
41766 if(pqospriv->qos_option)
41767 {
41768 set_qos(&pktfile, pattrib);
41769 +
41770 if(pmlmepriv->acm_mask != 0)
41771 {
41772 - qos_acm(pmlmepriv->acm_mask, pattrib);
41773 + pattrib->priority = qos_acm(pmlmepriv->acm_mask, pattrib->priority);
41774 }
41775 }
41776 }
41777 @@ -831,6 +911,13 @@ static s32 update_attrib(_adapter *padap
41778 RT_TRACE(_module_rtl871x_xmit_c_,_drv_info_,("update_attrib: bswenc=_FALSE\n"));
41779 }
41780
41781 +#ifdef CONFIG_CONCURRENT_MODE
41782 + if((pattrib->encrypt && bmcast) || (pattrib->encrypt ==_WEP40_) || (pattrib->encrypt ==_WEP104_))
41783 + {
41784 + pattrib->bswenc = _TRUE;//force using sw enc.
41785 + }
41786 +#endif
41787 +
41788 rtw_set_tx_chksum_offload(pkt, pattrib);
41789
41790 update_attrib_phy_info(pattrib, psta);
41791 @@ -860,10 +947,21 @@ static s32 xmitframe_addmic(_adapter *pa
41792 }
41793 else
41794 {
41795 + DBG_871X("%s, call rtw_get_stainfo()\n", __func__);
41796 stainfo=rtw_get_stainfo(&padapter->stapriv ,&pattrib->ra[0]);
41797 }
41798
41799 + if(stainfo==NULL)
41800 + {
41801 + DBG_871X("%s, psta==NUL\n", __func__);
41802 + return _FAIL;
41803 + }
41804
41805 + if(!(stainfo->state &_FW_LINKED))
41806 + {
41807 + DBG_871X("%s, psta->state(0x%x) != _FW_LINKED\n", __func__, stainfo->state);
41808 + return _FAIL;
41809 + }
41810
41811 _func_enter_;
41812
41813 @@ -982,7 +1080,7 @@ _func_enter_;
41814 //if((psecuritypriv->sw_encrypt)||(pattrib->bswenc))
41815 if(pattrib->bswenc)
41816 {
41817 - //DBG_8192C("start xmitframe_swencrypt\n");
41818 + //DBG_871X("start xmitframe_swencrypt\n");
41819 RT_TRACE(_module_rtl871x_xmit_c_,_drv_alert_,("### xmitframe_swencrypt\n"));
41820 switch(pattrib->encrypt){
41821 case _WEP40_:
41822 @@ -1015,17 +1113,13 @@ s32 rtw_make_wlanhdr (_adapter *padapter
41823 struct rtw_ieee80211_hdr *pwlanhdr = (struct rtw_ieee80211_hdr *)hdr;
41824 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
41825 struct qos_priv *pqospriv = &pmlmepriv->qospriv;
41826 - u8 qos_option = _FALSE;
41827 + u8 qos_option = _FALSE;
41828 #ifdef CONFIG_TDLS
41829 struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
41830 struct sta_priv *pstapriv = &padapter->stapriv;
41831 - struct sta_info *ptdls_sta=NULL;
41832 - u8 tdls_seq=0;
41833 -#endif
41834 -
41835 -//#ifdef CONFIG_PWRCTRL
41836 -// struct pwrctrl_priv *pwrpriv = &(padapter->pwrctrlpriv);
41837 -//#endif
41838 + struct sta_info *ptdls_sta=NULL, *psta_backup=NULL;
41839 + u8 direct_link=0;
41840 +#endif //CONFIG_TDLS
41841
41842 sint res = _SUCCESS;
41843 u16 *fctrl = &pwlanhdr->frame_ctl;
41844 @@ -1039,6 +1133,7 @@ _func_enter_;
41845 if (pattrib->psta) {
41846 psta = pattrib->psta;
41847 } else {
41848 + DBG_871X("%s, call rtw_get_stainfo()\n", __func__);
41849 if(bmcst) {
41850 psta = rtw_get_bcmc_stainfo(padapter);
41851 } else {
41852 @@ -1046,6 +1141,18 @@ _func_enter_;
41853 }
41854 }
41855
41856 + if(psta==NULL)
41857 + {
41858 + DBG_871X("%s, psta==NUL\n", __func__);
41859 + return _FAIL;
41860 + }
41861 +
41862 + if(!(psta->state &_FW_LINKED))
41863 + {
41864 + DBG_871X("%s, psta->state(0x%x) != _FW_LINKED\n", __func__, psta->state);
41865 + return _FAIL;
41866 + }
41867 +
41868 _rtw_memset(hdr, 0, WLANHDR_OFFSET);
41869
41870 SetFrameSubType(fctrl, pattrib->subtype);
41871 @@ -1055,16 +1162,16 @@ _func_enter_;
41872 if ((check_fwstate(pmlmepriv, WIFI_STATION_STATE) == _TRUE)) {
41873 //to_ds = 1, fr_ds = 0;
41874 #ifdef CONFIG_TDLS
41875 - if((ptdlsinfo->setup_state==TDLS_LINKED_STATE)){
41876 + if((ptdlsinfo->setup_state == TDLS_LINKED_STATE)){
41877 ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->dst);
41878 - if((ptdls_sta!=NULL)&&((ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE)==TDLS_LINKED_STATE)&&(pattrib->ether_type!=0x0806)){
41879 + if((ptdls_sta!=NULL)&&(ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE)&&(pattrib->ether_type!=0x0806)){
41880 //TDLS data transfer, ToDS=0, FrDs=0
41881 _rtw_memcpy(pwlanhdr->addr1, pattrib->dst, ETH_ALEN);
41882 _rtw_memcpy(pwlanhdr->addr2, pattrib->src, ETH_ALEN);
41883 _rtw_memcpy(pwlanhdr->addr3, get_bssid(pmlmepriv), ETH_ALEN);
41884 - tdls_seq=1;
41885 + direct_link=1;
41886 }else{
41887 - // 1.usual data transfer
41888 + // 1.Data transfer to AP
41889 // 2.Arp pkt will relayed by AP
41890 SetToDs(fctrl);
41891 _rtw_memcpy(pwlanhdr->addr1, get_bssid(pmlmepriv), ETH_ALEN);
41892 @@ -1072,9 +1179,9 @@ _func_enter_;
41893 _rtw_memcpy(pwlanhdr->addr3, pattrib->dst, ETH_ALEN);
41894 }
41895 }else
41896 -#endif
41897 +#endif //CONFIG_TDLS
41898 {
41899 - //usual data transfer
41900 + //Data transfer to AP
41901 SetToDs(fctrl);
41902 _rtw_memcpy(pwlanhdr->addr1, get_bssid(pmlmepriv), ETH_ALEN);
41903 _rtw_memcpy(pwlanhdr->addr2, pattrib->src, ETH_ALEN);
41904 @@ -1110,14 +1217,6 @@ _func_enter_;
41905 goto exit;
41906 }
41907
41908 -/*#ifdef CONFIG_PWRCTRL
41909 - if (pwrpriv->cpwm >= FW_PWR1 && !(padapter->mlmepriv.sitesurveyctrl.traffic_busy))
41910 - SetPwrMgt(fctrl);
41911 -#else
41912 - if ((get_fwstate(pmlmepriv)) & WIFI_SLEEP_STATE)
41913 - SetPwrMgt(fctrl);
41914 -#endif*/
41915 -
41916 if(pattrib->mdata)
41917 SetMData(fctrl);
41918
41919 @@ -1140,31 +1239,20 @@ _func_enter_;
41920
41921 //Update Seq Num will be handled by f/w
41922 {
41923 -
41924 + if(psta){
41925 #ifdef CONFIG_TDLS
41926 - // 1. update seq_num per link by sta_info
41927 - // 2. rewrite encrypt to _AES_, also rewrite iv_len, icv_len
41928 - if(tdls_seq==1){
41929 - ptdls_sta->sta_xmitpriv.txseq_tid[pattrib->priority]++;
41930 - ptdls_sta->sta_xmitpriv.txseq_tid[pattrib->priority] &= 0xFFF;
41931 -
41932 - pattrib->seqnum = ptdls_sta->sta_xmitpriv.txseq_tid[pattrib->priority];
41933 -
41934 - SetSeqNum(hdr, pattrib->seqnum);
41935 -
41936 - if (pattrib->encrypt){
41937 - pattrib->encrypt= _AES_;
41938 - pattrib->iv_len=8;
41939 - pattrib->icv_len=8;
41940 + if(direct_link==1)
41941 + {
41942 + psta_backup = psta;
41943 + psta = ptdls_sta;
41944 }
41945 - }else
41946 -#endif
41947 - if(psta){
41948 +#endif //CONFIG_TDLS
41949 +
41950 psta->sta_xmitpriv.txseq_tid[pattrib->priority]++;
41951 psta->sta_xmitpriv.txseq_tid[pattrib->priority] &= 0xFFF;
41952
41953 pattrib->seqnum = psta->sta_xmitpriv.txseq_tid[pattrib->priority];
41954 -
41955 +
41956 SetSeqNum(hdr, pattrib->seqnum);
41957
41958
41959 @@ -1203,6 +1291,29 @@ _func_enter_;
41960
41961 }
41962
41963 +#ifdef CONFIG_TDLS
41964 + if(direct_link==1)
41965 + {
41966 + if (pattrib->encrypt){
41967 + pattrib->encrypt= _AES_;
41968 + pattrib->iv_len=8;
41969 + pattrib->icv_len=8;
41970 + }
41971 +
41972 + //qos_en, ht_en, init rate, ,bw, ch_offset, sgi
41973 + //pattrib->qos_en = ptdls_sta->qos_option;
41974 + pattrib->ht_en = ptdls_sta->htpriv.ht_option;
41975 + pattrib->raid = ptdls_sta->raid;
41976 + pattrib->bwmode = ptdls_sta->htpriv.bwmode;
41977 + pattrib->ch_offset = ptdls_sta->htpriv.ch_offset;
41978 + pattrib->sgi= ptdls_sta->htpriv.sgi;
41979 +
41980 + pattrib->mac_id = ptdls_sta->mac_id;
41981 +
41982 + psta = psta_backup;
41983 + }
41984 +#endif //CONFIG_TDLS
41985 +
41986 }
41987 }
41988
41989 @@ -1235,7 +1346,27 @@ s32 rtw_txframes_sta_ac_pending(_adapter
41990 struct tx_servq *ptxservq;
41991 int priority = pattrib->priority;
41992
41993 + if(pattrib->psta)
41994 + {
41995 psta = pattrib->psta;
41996 + }
41997 + else
41998 + {
41999 + DBG_871X("%s, call rtw_get_stainfo()\n", __func__);
42000 + psta=rtw_get_stainfo(&padapter->stapriv ,&pattrib->ra[0]);
42001 + }
42002 +
42003 + if(psta==NULL)
42004 + {
42005 + DBG_871X("%s, psta==NUL\n", __func__);
42006 + return 0;
42007 + }
42008 +
42009 + if(!(psta->state &_FW_LINKED))
42010 + {
42011 + DBG_871X("%s, psta->state(0x%x) != _FW_LINKED\n", __func__, psta->state);
42012 + return 0;
42013 + }
42014
42015 switch(priority)
42016 {
42017 @@ -1263,871 +1394,121 @@ s32 rtw_txframes_sta_ac_pending(_adapter
42018 }
42019
42020 #ifdef CONFIG_TDLS
42021 -void rtw_tdls_setup_req_fr(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
42022 -{
42023 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
42024 - struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
42025 - struct pkt_attrib *pattrib = &pxmitframe->attrib;
42026 - struct registry_priv *pregistrypriv = &padapter->registrypriv;
42027 - struct rtw_ieee80211_ht_cap ht_capie;
42028 - struct sta_info *ptdls_sta=rtw_get_stainfo( (&padapter->stapriv) , pattrib->dst);
42029 -
42030 - u8 payload_type = 0x02;
42031 - u8 category = RTW_WLAN_CATEGORY_TDLS;
42032 - u8 action = TDLS_SETUP_REQUEST;
42033 - u8 bssrate[NDIS_802_11_LENGTH_RATES_EX]; //Use NDIS_802_11_LENGTH_RATES_EX in order to call func.rtw_set_supported_rate
42034 - int bssrate_len = 0, i = 0 ;
42035 - u8 more_supportedrates = 0;
42036 - unsigned int ie_len;
42037 - u8 *p;
42038 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
42039 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
42040 - u8 link_id_addr[18] = {0};
42041 - u8 iedata=0;
42042 - u8 sup_ch[ 30 * 2 ] = {0x00 }, sup_ch_idx = 0, idx_5g = 2; //For supported channel
42043 - u8 timeout_itvl[5]; //set timeout interval to maximum value
42044 - u32 time;
42045 -
42046 - //SNonce
42047 - if(pattrib->encrypt){
42048 - for(i=0;i<8;i++){
42049 - time=rtw_get_current_time();
42050 - _rtw_memcpy(&ptdls_sta->SNonce[4*i], (u8 *)&time, 4);
42051 - }
42052 - }
42053 -
42054 - //payload type
42055 - pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
42056 - //category, action, dialog token
42057 - pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
42058 - pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
42059 - pframe = rtw_set_fixed_ie(pframe, 1, &(ptdls_sta->dialog), &(pattrib->pktlen));
42060 -
42061 - //capability
42062 - _rtw_memcpy(pframe, rtw_get_capability_from_ie(pmlmeinfo->network.IEs), 2);
42063 -
42064 - if(pattrib->encrypt)
42065 - *pframe =*pframe | BIT(4);
42066 - pframe += 2;
42067 - pattrib->pktlen += 2;
42068 -
42069 - //supported rates
42070 - rtw_set_supported_rate(bssrate, WIRELESS_11BG_24N);
42071 - bssrate_len = IEEE80211_CCK_RATE_LEN + IEEE80211_NUM_OFDM_RATESLEN;
42072 - //for (bssrate_len = 0; bssrate_len < NumRates; bssrate_len++) {
42073 - // if (pregistrypriv->dev_network.SupportedRates[bssrate_len]== 0) break;
42074 - // bssrate[bssrate_len] = pregistrypriv->dev_network.SupportedRates[bssrate_len];
42075 - //}
42076 -
42077 - if (bssrate_len > 8)
42078 - {
42079 - pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , 8, bssrate, &(pattrib->pktlen));
42080 - more_supportedrates = 1;
42081 - }
42082 - else
42083 - {
42084 - pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , bssrate_len , bssrate, &(pattrib->pktlen));
42085 - }
42086
42087 - //country(optional)
42088 - //extended supported rates
42089 - if(more_supportedrates==1){
42090 - pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_ , (bssrate_len - 8), (bssrate + 8), &(pattrib->pktlen));
42091 - }
42092 +int rtw_build_tdls_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, u8 action)
42093 +{
42094 + int res=_SUCCESS;
42095
42096 - //supported channels
42097 - do{
42098 - if( pmlmeext->channel_set[sup_ch_idx].ChannelNum == 11 )
42099 - {
42100 - sup_ch[0] = 1; //First channel number
42101 - sup_ch[1] = pmlmeext->channel_set[sup_ch_idx].ChannelNum; //Number of channel
42102 - }
42103 - else if( pmlmeext->channel_set[sup_ch_idx].ChannelNum == 13 )
42104 - {
42105 - sup_ch[0] = 1;
42106 - sup_ch[1] = pmlmeext->channel_set[sup_ch_idx].ChannelNum;;
42107 - }
42108 - else if( pmlmeext->channel_set[sup_ch_idx].ChannelNum > 13 )
42109 - {
42110 - sup_ch[idx_5g++] = pmlmeext->channel_set[sup_ch_idx].ChannelNum;
42111 - sup_ch[idx_5g++] = 1;
42112 - }
42113 -
42114 - sup_ch_idx++;
42115 + switch(action){
42116 + case TDLS_SETUP_REQUEST:
42117 + rtw_build_tdls_setup_req_ies(padapter, pxmitframe, pframe);
42118 + break;
42119 + case TDLS_SETUP_RESPONSE:
42120 + rtw_build_tdls_setup_rsp_ies(padapter, pxmitframe, pframe);
42121 + break;
42122 + case TDLS_SETUP_CONFIRM:
42123 + rtw_build_tdls_setup_cfm_ies(padapter, pxmitframe, pframe);
42124 + break;
42125 + case TDLS_TEARDOWN:
42126 + rtw_build_tdls_teardown_ies(padapter, pxmitframe, pframe);
42127 + break;
42128 + case TDLS_DISCOVERY_REQUEST:
42129 + rtw_build_tdls_dis_req_ies(padapter, pxmitframe, pframe);
42130 + break;
42131 + case TDLS_PEER_TRAFFIC_INDICATION:
42132 + rtw_build_tdls_peer_traffic_indication_ies(padapter, pxmitframe, pframe);
42133 + break;
42134 + case TDLS_CHANNEL_SWITCH_REQUEST:
42135 + rtw_build_tdls_ch_switch_req_ies(padapter, pxmitframe, pframe);
42136 + break;
42137 + case TDLS_CHANNEL_SWITCH_RESPONSE:
42138 + rtw_build_tdls_ch_switch_rsp_ies(padapter, pxmitframe, pframe);
42139 + break;
42140 +#ifdef CONFIG_WFD
42141 + case TUNNELED_PROBE_REQ:
42142 + rtw_build_tunneled_probe_req_ies(padapter, pxmitframe, pframe);
42143 + break;
42144 + case TUNNELED_PROBE_RSP:
42145 + rtw_build_tunneled_probe_rsp_ies(padapter, pxmitframe, pframe);
42146 + break;
42147 +#endif //CONFIG_WFD
42148 + default:
42149 + res=_FAIL;
42150 + break;
42151 }
42152 - while( pmlmeext->channel_set[sup_ch_idx].ChannelNum != 0 );
42153 - pframe = rtw_set_ie(pframe, _SUPPORTED_CH_IE_, idx_5g + 2, sup_ch, &(pattrib->pktlen));
42154 -
42155 - //RSNIE
42156 - if(pattrib->encrypt)
42157 - pframe = rtw_set_ie(pframe, _RSN_IE_2_, 20, TDLS_RSNIE, &(pattrib->pktlen));
42158 -
42159 - //extended capabilities
42160 - pframe = rtw_set_ie(pframe, _EXT_CAP_IE_ , 5, TDLS_EXT_CAPIE, &(pattrib->pktlen));
42161
42162 - //QoS capability(WMM_IE)
42163 - pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, 7, TDLS_WMMIE, &(pattrib->pktlen));
42164 -
42165 - //FTIE(optional)
42166 - if(pattrib->encrypt){
42167 - _rtw_memset(pframe, 0, 84); //All fields except SNonce shall be set to 0
42168 - _rtw_memset(pframe, _FTIE_, 1); //version
42169 - _rtw_memset((pframe+1), 82, 1); //length
42170 - _rtw_memcpy((pframe+52), ptdls_sta->SNonce, 32);
42171 - pframe += 84;
42172 - pattrib->pktlen += 84;
42173 + return res;
42174 +}
42175
42176 - //Timeout interval
42177 - timeout_itvl[0]=0x02;
42178 - _rtw_memcpy(timeout_itvl+1, (u8 *)(&ptdls_sta->TDLS_PeerKey_Lifetime), 4);
42179 - pframe = rtw_set_ie(pframe, _TIMEOUT_ITVL_IE_, 5, timeout_itvl, &(pattrib->pktlen));
42180 +s32 rtw_make_tdls_wlanhdr (_adapter *padapter , u8 *hdr, struct pkt_attrib *pattrib, u8 action)
42181 +{
42182 + u16 *qc;
42183 + struct rtw_ieee80211_hdr *pwlanhdr = (struct rtw_ieee80211_hdr *)hdr;
42184 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
42185 + struct qos_priv *pqospriv = &pmlmepriv->qospriv;
42186 + struct sta_priv *pstapriv = &padapter->stapriv;
42187 + struct sta_info *psta=NULL, *ptdls_sta=NULL;
42188 + u8 tdls_seq=0, baddr[ETH_ALEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
42189
42190 - }
42191 + sint res = _SUCCESS;
42192 + u16 *fctrl = &pwlanhdr->frame_ctl;
42193
42194 - //Sup_reg_classes(optional)
42195 - //HT capabilities
42196 - _rtw_memset(&ht_capie, 0, sizeof(struct rtw_ieee80211_ht_cap));
42197 +_func_enter_;
42198
42199 - ht_capie.cap_info = IEEE80211_HT_CAP_SUP_WIDTH |IEEE80211_HT_CAP_SGI_20 |IEEE80211_HT_CAP_SM_PS |
42200 - IEEE80211_HT_CAP_SGI_40 | IEEE80211_HT_CAP_TX_STBC |IEEE80211_HT_CAP_DSSSCCK40;
42201 + _rtw_memset(hdr, 0, WLANHDR_OFFSET);
42202
42203 - {
42204 - u32 rx_packet_offset, max_recvbuf_sz;
42205 - padapter->HalFunc.GetHalDefVarHandler(padapter, HAL_DEF_RX_PACKET_OFFSET, &rx_packet_offset);
42206 - padapter->HalFunc.GetHalDefVarHandler(padapter, HAL_DEF_MAX_RECVBUF_SZ, &max_recvbuf_sz);
42207 - if(max_recvbuf_sz-rx_packet_offset>(8191-256))
42208 - ht_capie.cap_info = ht_capie.cap_info |IEEE80211_HT_CAP_MAX_AMSDU;
42209 - }
42210 -
42211 - ht_capie.ampdu_params_info = (IEEE80211_HT_CAP_AMPDU_FACTOR&0x03);
42212 + SetFrameSubType(fctrl, pattrib->subtype);
42213
42214 - switch(pHalData->rf_type)
42215 - {
42216 - case RF_1T1R:
42217 - ht_capie.cap_info |= 0x0100;//RX STBC One spatial stream
42218 - _rtw_memcpy(ht_capie.supp_mcs_set, MCS_rate_1R, 16);
42219 + switch(action){
42220 + case TDLS_SETUP_REQUEST:
42221 + case TDLS_SETUP_RESPONSE:
42222 + case TDLS_SETUP_CONFIRM:
42223 + case TDLS_TEARDOWN: //directly to peer STA or via AP
42224 + case TDLS_PEER_TRAFFIC_INDICATION:
42225 + case TDLS_PEER_PSM_REQUEST: //directly to peer STA or via AP
42226 + case TUNNELED_PROBE_REQ:
42227 + case TUNNELED_PROBE_RSP:
42228 + SetToDs(fctrl);
42229 + _rtw_memcpy(pwlanhdr->addr1, get_bssid(pmlmepriv), ETH_ALEN);
42230 + _rtw_memcpy(pwlanhdr->addr2, pattrib->src, ETH_ALEN);
42231 + _rtw_memcpy(pwlanhdr->addr3, pattrib->dst, ETH_ALEN);
42232 break;
42233 -
42234 - case RF_2T2R:
42235 - case RF_1T2R:
42236 - default:
42237 - ht_capie.cap_info|= 0x0200;//RX STBC two spatial stream
42238 - _rtw_memcpy(ht_capie.supp_mcs_set, MCS_rate_2R, 16);
42239 + case TDLS_CHANNEL_SWITCH_REQUEST:
42240 + case TDLS_CHANNEL_SWITCH_RESPONSE:
42241 + case TDLS_PEER_PSM_RESPONSE:
42242 + case TDLS_PEER_TRAFFIC_RESPONSE:
42243 + _rtw_memcpy(pwlanhdr->addr1, pattrib->dst, ETH_ALEN);
42244 + _rtw_memcpy(pwlanhdr->addr2, pattrib->src, ETH_ALEN);
42245 + _rtw_memcpy(pwlanhdr->addr3, get_bssid(pmlmepriv), ETH_ALEN);
42246 + tdls_seq=1;
42247 + break;
42248 + case TDLS_DISCOVERY_REQUEST: //unicast: directly to peer sta, Bcast: via AP
42249 + if(_rtw_memcmp(pattrib->dst, baddr, ETH_ALEN) )
42250 + {
42251 + SetToDs(fctrl);
42252 + _rtw_memcpy(pwlanhdr->addr1, get_bssid(pmlmepriv), ETH_ALEN);
42253 + _rtw_memcpy(pwlanhdr->addr2, pattrib->src, ETH_ALEN);
42254 + _rtw_memcpy(pwlanhdr->addr3, pattrib->dst, ETH_ALEN);
42255 + }
42256 + else
42257 + {
42258 + _rtw_memcpy(pwlanhdr->addr1, pattrib->dst, ETH_ALEN);
42259 + _rtw_memcpy(pwlanhdr->addr2, pattrib->src, ETH_ALEN);
42260 + _rtw_memcpy(pwlanhdr->addr3, get_bssid(pmlmepriv), ETH_ALEN);
42261 + tdls_seq=1;
42262 + }
42263 break;
42264 }
42265 -
42266 - pframe = rtw_set_ie(pframe, _HT_CAPABILITY_IE_,
42267 - sizeof(struct rtw_ieee80211_ht_cap), (unsigned char*)&ht_capie, &(pattrib->pktlen));
42268 -
42269 - //20/40 BSS coexistence
42270 - if(pmlmepriv->num_FortyMHzIntolerant>0)
42271 - iedata |= BIT(2);//20 MHz BSS Width Request
42272 - pframe = rtw_set_ie(pframe, EID_BSSCoexistence, 1, &iedata, &(pattrib->pktlen));
42273 -
42274 - //Link identifier
42275 - _rtw_memcpy(link_id_addr, pattrib->ra, 6);
42276 - _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
42277 - _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
42278 - pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
42279 -
42280 -}
42281 -
42282 -void rtw_tdls_setup_rsp_fr(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
42283 -{
42284 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
42285 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
42286 - struct pkt_attrib *pattrib = &pxmitframe->attrib;
42287 - struct sta_info *ptdls_sta;
42288 - struct registry_priv *pregistrypriv = &padapter->registrypriv;
42289 - struct rtw_ieee80211_ht_cap ht_capie;
42290 -
42291 - u8 payload_type = 0x02;
42292 - unsigned char category = RTW_WLAN_CATEGORY_TDLS;
42293 - unsigned char action = TDLS_SETUP_RESPONSE;
42294 - unsigned char bssrate[NDIS_802_11_LENGTH_RATES_EX];
42295 - int bssrate_len = 0;
42296 - u8 more_supportedrates = 0;
42297 - unsigned int ie_len;
42298 - unsigned char *p;
42299 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
42300 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
42301 - u8 link_id_addr[18] = {0};
42302 - u8 sup_ch[ 30 * 2 ] = { 0x00 }, sup_ch_idx = 0, idx_5g = 2; //For supported channel
42303 - u8 iedata=0;
42304 - u8 timeout_itvl[5]; //setup response timeout interval will copy from request
42305 - u8 ANonce[32]; //maybe it can put in ontdls_req
42306 - u8 k; //for random ANonce
42307 - u8 *pftie, *ptimeout_ie, *plinkid_ie, *prsnie, *pftie_mic;
42308 - u32 time;
42309
42310 - ptdls_sta = rtw_get_stainfo( &(padapter->stapriv) , pattrib->dst);
42311 + if (pattrib->encrypt)
42312 + SetPrivacy(fctrl);
42313
42314 - if(ptdls_sta == NULL )
42315 + if (pqospriv->qos_option)
42316 {
42317 - DBG_8192C("[%s] %d\n", __FUNCTION__, __LINE__);
42318 - }
42319 - else
42320 - DBG_8192C("stat_code:%04x \n", ptdls_sta->stat_code);
42321 -
42322 - if(pattrib->encrypt){
42323 - for(k=0;k<8;k++){
42324 - time=rtw_get_current_time();
42325 - _rtw_memcpy(&ptdls_sta->ANonce[4*k], (u8*)&time, 4);
42326 - }
42327 - }
42328 -
42329 - //payload type
42330 - pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
42331 - //category, action, status code
42332 - pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
42333 - pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
42334 - pframe = rtw_set_fixed_ie(pframe, 2, (u8 *)&ptdls_sta->stat_code, &(pattrib->pktlen));
42335 -
42336 - if(ptdls_sta->stat_code!=0) //invalid setup request
42337 - return;
42338 -
42339 - //dialog token
42340 - pframe = rtw_set_fixed_ie(pframe, 1, &(ptdls_sta->dialog), &(pattrib->pktlen));
42341 -
42342 - //capability
42343 - _rtw_memcpy(pframe, rtw_get_capability_from_ie(pmlmeinfo->network.IEs), 2);
42344 -
42345 - if(pattrib->encrypt )
42346 - *pframe =*pframe | BIT(4);
42347 - pframe += 2;
42348 - pattrib->pktlen += 2;
42349 -
42350 - //supported rates
42351 - rtw_set_supported_rate(bssrate, WIRELESS_11BG_24N);
42352 - bssrate_len = IEEE80211_CCK_RATE_LEN + IEEE80211_NUM_OFDM_RATESLEN;
42353 - //for (bssrate_len = 0; bssrate_len < NumRates; bssrate_len++) {
42354 - // if (pregistrypriv->dev_network.SupportedRates[bssrate_len]== 0) break;
42355 - // bssrate[bssrate_len] = pregistrypriv->dev_network.SupportedRates[bssrate_len];
42356 - //}
42357 -
42358 - if (bssrate_len > 8)
42359 - {
42360 - pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , 8, bssrate, &(pattrib->pktlen));
42361 - more_supportedrates = 1;
42362 - }
42363 - else
42364 - {
42365 - pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , bssrate_len , bssrate, &(pattrib->pktlen));
42366 - }
42367 -
42368 - //country(optional)
42369 - //extended supported rates
42370 - if(more_supportedrates==1){
42371 - pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_ , (bssrate_len - 8), (bssrate + 8), &(pattrib->pktlen));
42372 - }
42373 -
42374 - //supported channels
42375 - do{
42376 - if( pmlmeext->channel_set[sup_ch_idx].ChannelNum == 11 )
42377 - {
42378 - sup_ch[0] = 1; //First channel number
42379 - sup_ch[1] = pmlmeext->channel_set[sup_ch_idx].ChannelNum;; //Number of channel
42380 - }
42381 - else if( pmlmeext->channel_set[sup_ch_idx].ChannelNum == 13 )
42382 - {
42383 - sup_ch[0] = 1;
42384 - sup_ch[1] = pmlmeext->channel_set[sup_ch_idx].ChannelNum;;
42385 - }
42386 - else if( pmlmeext->channel_set[sup_ch_idx].ChannelNum > 13 )
42387 - {
42388 - sup_ch[idx_5g++] = pmlmeext->channel_set[sup_ch_idx].ChannelNum;
42389 - sup_ch[idx_5g++] = 1;
42390 - }
42391 -
42392 - sup_ch_idx++;
42393 - }
42394 - while( pmlmeext->channel_set[sup_ch_idx].ChannelNum != 0 );
42395 - pframe = rtw_set_ie(pframe, _SUPPORTED_CH_IE_, idx_5g + 2, sup_ch, &(pattrib->pktlen));
42396 -
42397 - //RSNIE
42398 - if(pattrib->encrypt){
42399 - prsnie = pframe;
42400 - pframe = rtw_set_ie(pframe, _RSN_IE_2_, 20, TDLS_RSNIE, &(pattrib->pktlen));
42401 - }
42402 -
42403 - //extended capabilities
42404 - pframe = rtw_set_ie(pframe, _EXT_CAP_IE_ , 5, TDLS_EXT_CAPIE, &(pattrib->pktlen));
42405 -
42406 - //QoS capability(WMM_IE)
42407 - pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, 7, TDLS_WMMIE, &(pattrib->pktlen));
42408 -
42409 - //FTIE(optional)
42410 - if(pattrib->encrypt){
42411 - wpa_tdls_generate_tpk(padapter, ptdls_sta);
42412 -
42413 - pftie = pframe;
42414 - pftie_mic = pframe+4;
42415 - _rtw_memset(pframe, 0, 84); //All fields except SNonce shall be set to 0
42416 - _rtw_memset(pframe, _FTIE_, 1); //version
42417 - _rtw_memset((pframe+1), 82, 1); //length
42418 - _rtw_memcpy((pframe+20), ptdls_sta->ANonce, 32);
42419 - _rtw_memcpy((pframe+52), ptdls_sta->SNonce, 32);
42420 - pframe += 84;
42421 - pattrib->pktlen += 84;
42422 -
42423 - //Timeout interval
42424 - ptimeout_ie = pframe;
42425 - timeout_itvl[0]=0x02;
42426 - _rtw_memcpy(timeout_itvl+1, (u8 *)(&ptdls_sta->TDLS_PeerKey_Lifetime), 4);
42427 - pframe = rtw_set_ie(pframe, _TIMEOUT_ITVL_IE_, 5, timeout_itvl, &(pattrib->pktlen));
42428 - }
42429 -
42430 - //Sup_reg_classes(optional)
42431 - //HT capabilities
42432 - _rtw_memset(&ht_capie, 0, sizeof(struct rtw_ieee80211_ht_cap));
42433 -
42434 - ht_capie.cap_info = IEEE80211_HT_CAP_SUP_WIDTH |IEEE80211_HT_CAP_SGI_20 |IEEE80211_HT_CAP_SM_PS |
42435 - IEEE80211_HT_CAP_SGI_40 | IEEE80211_HT_CAP_TX_STBC |IEEE80211_HT_CAP_DSSSCCK40;
42436 -
42437 - {
42438 - u32 rx_packet_offset, max_recvbuf_sz;
42439 - padapter->HalFunc.GetHalDefVarHandler(padapter, HAL_DEF_RX_PACKET_OFFSET, &rx_packet_offset);
42440 - padapter->HalFunc.GetHalDefVarHandler(padapter, HAL_DEF_MAX_RECVBUF_SZ, &max_recvbuf_sz);
42441 - if(max_recvbuf_sz-rx_packet_offset>(8191-256))
42442 - ht_capie.cap_info = ht_capie.cap_info |IEEE80211_HT_CAP_MAX_AMSDU;
42443 - }
42444 -
42445 - ht_capie.ampdu_params_info = (IEEE80211_HT_CAP_AMPDU_FACTOR&0x03);
42446 -
42447 - switch(pHalData->rf_type)
42448 - {
42449 - case RF_1T1R:
42450 - ht_capie.cap_info |= 0x0100;//RX STBC One spatial stream
42451 - _rtw_memcpy(ht_capie.supp_mcs_set, MCS_rate_1R, 16);
42452 - break;
42453 -
42454 - case RF_2T2R:
42455 - case RF_1T2R:
42456 - default:
42457 - ht_capie.cap_info|= 0x0200;//RX STBC two spatial stream
42458 - _rtw_memcpy(ht_capie.supp_mcs_set, MCS_rate_2R, 16);
42459 - break;
42460 - }
42461 -
42462 - pframe = rtw_set_ie(pframe, _HT_CAPABILITY_IE_,
42463 - sizeof(struct rtw_ieee80211_ht_cap), (unsigned char*)&ht_capie, &(pattrib->pktlen));
42464 -
42465 - //20/40 BSS coexistence
42466 - if(pmlmepriv->num_FortyMHzIntolerant>0)
42467 - iedata |= BIT(2);//20 MHz BSS Width Request
42468 - pframe = rtw_set_ie(pframe, EID_BSSCoexistence, 1, &iedata, &(pattrib->pktlen));
42469 -
42470 - //Link identifier
42471 - plinkid_ie = pframe;
42472 - _rtw_memcpy(link_id_addr, pattrib->ra, 6);
42473 - _rtw_memcpy((link_id_addr+6), pattrib->dst, 6);
42474 - _rtw_memcpy((link_id_addr+12), pattrib->src, 6);
42475 - pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
42476 -
42477 - //fill ftie mic
42478 - if(pattrib->encrypt)
42479 - wpa_tdls_ftie_mic(ptdls_sta->tpk.kck, 2, plinkid_ie, prsnie, ptimeout_ie, pftie, pftie_mic);
42480 -
42481 -}
42482 -
42483 -void rtw_tdls_setup_cfm_fr(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
42484 -{
42485 -
42486 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
42487 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
42488 - struct pkt_attrib *pattrib = &pxmitframe->attrib;
42489 - struct sta_info *ptdls_sta=rtw_get_stainfo( (&padapter->stapriv) , pattrib->dst);
42490 -
42491 - u8 payload_type = 0x02;
42492 - unsigned char category = RTW_WLAN_CATEGORY_TDLS;
42493 - unsigned char action = TDLS_SETUP_CONFIRM;
42494 - u8 more_supportedrates = 0;
42495 - unsigned int ie_len;
42496 - unsigned char *p;
42497 - u8 timeout_itvl[5]; //set timeout interval to maximum value
42498 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
42499 - u8 link_id_addr[18] = {0};
42500 - u8 *pftie, *ptimeout_ie, *plinkid_ie, *prsnie, *pftie_mic;
42501 -
42502 - //payload type
42503 - pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
42504 - //category, action, status code, dialog token
42505 - pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
42506 - pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
42507 - pframe = rtw_set_fixed_ie(pframe, 2, (u8 *)&ptdls_sta->stat_code, &(pattrib->pktlen));
42508 - pframe = rtw_set_fixed_ie(pframe, 1, &(ptdls_sta->dialog), &(pattrib->pktlen));
42509 -
42510 - if(ptdls_sta->stat_code!=0) //invalid setup request
42511 - return;
42512 -
42513 - //RSNIE
42514 - if(pattrib->encrypt){
42515 - prsnie = pframe;
42516 - pframe = rtw_set_ie(pframe, _RSN_IE_2_, 20, TDLS_RSNIE, &(pattrib->pktlen));
42517 - }
42518 -
42519 - //EDCA param set; WMM param ele.
42520 - if(pattrib->encrypt){
42521 - //FTIE
42522 - pftie = pframe;
42523 - pftie_mic = pframe+4;
42524 - _rtw_memset(pframe, 0, 84); //All fields except SNonce shall be set to 0
42525 - _rtw_memset(pframe, _FTIE_, 1); //version
42526 - _rtw_memset((pframe+1), 82, 1); //length
42527 - _rtw_memcpy((pframe+20), ptdls_sta->ANonce, 32);
42528 - _rtw_memcpy((pframe+52), ptdls_sta->SNonce, 32);
42529 - pframe += 84;
42530 - pattrib->pktlen += 84;
42531 -
42532 - //Timeout interval
42533 - ptimeout_ie = pframe;
42534 - timeout_itvl[0]=0x02;
42535 - _rtw_memcpy(timeout_itvl+1, (u8 *)(&ptdls_sta->TDLS_PeerKey_Lifetime), 4);
42536 - ptdls_sta->TPK_count=0;
42537 - _set_timer(&ptdls_sta->TPK_timer, ptdls_sta->TDLS_PeerKey_Lifetime/TPK_RESEND_COUNT);
42538 - pframe = rtw_set_ie(pframe, _TIMEOUT_ITVL_IE_, 5, timeout_itvl, &(pattrib->pktlen));
42539 - }
42540 -
42541 - //HT operation; todo
42542 - //Link identifier
42543 - plinkid_ie = pframe;
42544 - _rtw_memcpy(link_id_addr, pattrib->ra, 6);
42545 - _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
42546 - _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
42547 - pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
42548 -
42549 - //fill ftie mic
42550 - if(pattrib->encrypt)
42551 - wpa_tdls_ftie_mic(ptdls_sta->tpk.kck, 3, plinkid_ie, prsnie, ptimeout_ie, pftie, pftie_mic);
42552 -
42553 -}
42554 -
42555 -void rtw_tdls_teardown_fr(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
42556 -{
42557 -
42558 - struct pkt_attrib *pattrib = &pxmitframe->attrib;
42559 - u8 payload_type = 0x02;
42560 - unsigned char category = RTW_WLAN_CATEGORY_TDLS;
42561 - unsigned char action = TDLS_TEARDOWN;
42562 - u8 link_id_addr[18] = {0};
42563 -
42564 - struct sta_info *ptdls_sta = rtw_get_stainfo( &(padapter->stapriv) , pattrib->dst);
42565 - struct sta_priv *pstapriv = &padapter->stapriv;
42566 -
42567 - //payload type
42568 - pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
42569 - //category, action, reason code
42570 - pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
42571 - pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
42572 - pframe = rtw_set_fixed_ie(pframe, 1, (u8 *)&ptdls_sta->stat_code, &(pattrib->pktlen));
42573 -
42574 - //Link identifier
42575 - if((ptdls_sta->tdls_sta_state & TDLS_INITIATOR_STATE)==TDLS_INITIATOR_STATE){
42576 - _rtw_memcpy(link_id_addr, pattrib->ra, 6);
42577 - _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
42578 - _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
42579 - }else if((ptdls_sta->tdls_sta_state & TDLS_RESPONDER_STATE)==TDLS_RESPONDER_STATE){
42580 - _rtw_memcpy(link_id_addr, pattrib->ra, 6);
42581 - _rtw_memcpy((link_id_addr+6), pattrib->dst, 6);
42582 - _rtw_memcpy((link_id_addr+12), pattrib->src, 6);
42583 - }
42584 - pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
42585 -
42586 -}
42587 -
42588 -void rtw_tdls_dis_req_fr(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
42589 -{
42590 -
42591 - struct pkt_attrib *pattrib = &pxmitframe->attrib;
42592 - u8 payload_type = 0x02;
42593 - u8 category = RTW_WLAN_CATEGORY_TDLS;
42594 - u8 action = TDLS_DISCOVERY_REQUEST;
42595 - u8 link_id_addr[18] = {0};
42596 - static u8 dialogtoken=0;
42597 -
42598 - //payload type
42599 - pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
42600 - //category, action, reason code
42601 - pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
42602 - pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
42603 - pframe = rtw_set_fixed_ie(pframe, 1, &(dialogtoken), &(pattrib->pktlen));
42604 - dialogtoken = (dialogtoken+1)%256;
42605 -
42606 - //Link identifier
42607 - _rtw_memcpy(link_id_addr, pattrib->ra, 6);
42608 - _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
42609 - _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
42610 - pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
42611 -
42612 -}
42613 -
42614 -void rtw_tdls_dis_rsp_fr(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, u8 dialog)
42615 -{
42616 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
42617 - struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
42618 - struct pkt_attrib *pattrib = &pxmitframe->attrib;
42619 - struct registry_priv *pregistrypriv = &padapter->registrypriv;
42620 - struct rtw_ieee80211_ht_cap ht_capie;
42621 -
42622 - u8 category = RTW_WLAN_CATEGORY_PUBLIC;
42623 - u8 action = TDLS_DISCOVERY_RESPONSE;
42624 - u8 bssrate[NDIS_802_11_LENGTH_RATES_EX];
42625 - int bssrate_len = 0;
42626 - u8 more_supportedrates = 0;
42627 - u8 *p;
42628 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
42629 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
42630 - u8 link_id_addr[18] = {0};
42631 - u8 sup_ch[ 30 * 2 ] = {0x00 }, sup_ch_idx = 0, idx_5g = 2; //For supported channel
42632 - u8 iedata=0;
42633 - u8 timeout_itvl[5]; //set timeout interval to maximum value
42634 - u32 timeout_interval= TPK_RESEND_COUNT * 1000;
42635 -
42636 - //category, action, dialog token
42637 - pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
42638 - pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
42639 - pframe = rtw_set_fixed_ie(pframe, 1, &(dialog), &(pattrib->pktlen));
42640 -
42641 - //capability
42642 - _rtw_memcpy(pframe, rtw_get_capability_from_ie(pmlmeinfo->network.IEs), 2);
42643 -
42644 - if(pattrib->encrypt)
42645 - *pframe =*pframe | BIT(4);
42646 - pframe += 2;
42647 - pattrib->pktlen += 2;
42648 -
42649 - //supported rates
42650 - rtw_set_supported_rate(bssrate, WIRELESS_11BG_24N);
42651 - bssrate_len = IEEE80211_CCK_RATE_LEN + IEEE80211_NUM_OFDM_RATESLEN;
42652 - //for (bssrate_len = 0; bssrate_len < NumRates; bssrate_len++) {
42653 - // if (pregistrypriv->dev_network.SupportedRates[bssrate_len] == 0) break;
42654 - // bssrate[bssrate_len] = pregistrypriv->dev_network.SupportedRates[bssrate_len];
42655 - //}
42656 -
42657 - if (bssrate_len > 8)
42658 - {
42659 - pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , 8, bssrate, &(pattrib->pktlen));
42660 - more_supportedrates = 1;
42661 - }
42662 - else
42663 - {
42664 - pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , bssrate_len , bssrate, &(pattrib->pktlen));
42665 - }
42666 -
42667 - //extended supported rates
42668 - if(more_supportedrates==1){
42669 - pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_ , (bssrate_len - 8), (bssrate + 8), &(pattrib->pktlen));
42670 - }
42671 -
42672 - //supported channels
42673 - do{
42674 - if( pmlmeext->channel_set[sup_ch_idx].ChannelNum == 11 )
42675 - {
42676 - sup_ch[0] = 1; //First channel number
42677 - sup_ch[1] = pmlmeext->channel_set[sup_ch_idx].ChannelNum;; //Number of channel
42678 - }
42679 - else if( pmlmeext->channel_set[sup_ch_idx].ChannelNum == 13 )
42680 - {
42681 - sup_ch[0] = 1;
42682 - sup_ch[1] = pmlmeext->channel_set[sup_ch_idx].ChannelNum;;
42683 - }
42684 - else if( pmlmeext->channel_set[sup_ch_idx].ChannelNum > 13 )
42685 - {
42686 - sup_ch[idx_5g++] = pmlmeext->channel_set[sup_ch_idx].ChannelNum;
42687 - sup_ch[idx_5g++] = 1;
42688 - }
42689 -
42690 - sup_ch_idx++;
42691 - }
42692 - while( pmlmeext->channel_set[sup_ch_idx].ChannelNum != 0 );
42693 - pframe = rtw_set_ie(pframe, _SUPPORTED_CH_IE_, idx_5g + 2, sup_ch, &(pattrib->pktlen));
42694 -
42695 - //RSNIE
42696 - if(pattrib->encrypt)
42697 - pframe = rtw_set_ie(pframe, _RSN_IE_2_, 20, TDLS_RSNIE, &(pattrib->pktlen));
42698 -
42699 - //extended capability
42700 - pframe = rtw_set_ie(pframe, _EXT_CAP_IE_ , 5, TDLS_EXT_CAPIE, &(pattrib->pktlen));
42701 -
42702 - //FTIE
42703 - if(pattrib->encrypt){
42704 - _rtw_memset(pframe, 0, 84); //All fields except SNonce shall be set to 0
42705 - _rtw_memset(pframe, _FTIE_, 1); //version
42706 - _rtw_memset((pframe+1), 82, 1); //length
42707 - pframe += 84;
42708 - pattrib->pktlen += 84;
42709 - //Timeout interval
42710 - timeout_itvl[0]=0x02;
42711 - _rtw_memcpy(timeout_itvl+1, &timeout_interval, 4);
42712 - pframe = rtw_set_ie(pframe, _TIMEOUT_ITVL_IE_, 5, timeout_itvl, &(pattrib->pktlen));
42713 -
42714 - }
42715 -
42716 - //Sup_reg_classes(optional)
42717 - //HT capabilities
42718 - _rtw_memset(&ht_capie, 0, sizeof(struct rtw_ieee80211_ht_cap));
42719 -
42720 - ht_capie.cap_info = IEEE80211_HT_CAP_SUP_WIDTH |IEEE80211_HT_CAP_SGI_20 |IEEE80211_HT_CAP_SM_PS |
42721 - IEEE80211_HT_CAP_SGI_40 | IEEE80211_HT_CAP_TX_STBC |IEEE80211_HT_CAP_DSSSCCK40;
42722 -
42723 - {
42724 - u32 rx_packet_offset, max_recvbuf_sz;
42725 - padapter->HalFunc.GetHalDefVarHandler(padapter, HAL_DEF_RX_PACKET_OFFSET, &rx_packet_offset);
42726 - padapter->HalFunc.GetHalDefVarHandler(padapter, HAL_DEF_MAX_RECVBUF_SZ, &max_recvbuf_sz);
42727 - if(max_recvbuf_sz-rx_packet_offset>(8191-256))
42728 - ht_capie.cap_info = ht_capie.cap_info |IEEE80211_HT_CAP_MAX_AMSDU;
42729 - }
42730 -
42731 - ht_capie.ampdu_params_info = (IEEE80211_HT_CAP_AMPDU_FACTOR&0x03);
42732 -
42733 - switch(pHalData->rf_type)
42734 - {
42735 - case RF_1T1R:
42736 - ht_capie.cap_info |= 0x0100;//RX STBC One spatial stream
42737 - _rtw_memcpy(ht_capie.supp_mcs_set, MCS_rate_1R, 16);
42738 - break;
42739 -
42740 - case RF_2T2R:
42741 - case RF_1T2R:
42742 - default:
42743 - ht_capie.cap_info|= 0x0200;//RX STBC two spatial stream
42744 - _rtw_memcpy(ht_capie.supp_mcs_set, MCS_rate_2R, 16);
42745 - break;
42746 - }
42747 -
42748 - pframe = rtw_set_ie(pframe, _HT_CAPABILITY_IE_,
42749 - sizeof(struct rtw_ieee80211_ht_cap), (unsigned char*)&ht_capie, &(pattrib->pktlen));
42750 -
42751 - //20/40 BSS coexistence
42752 - if(pmlmepriv->num_FortyMHzIntolerant>0)
42753 - iedata |= BIT(2);//20 MHz BSS Width Request
42754 - pframe = rtw_set_ie(pframe, EID_BSSCoexistence, 1, &iedata, &(pattrib->pktlen));
42755 -
42756 - //Link identifier
42757 - _rtw_memcpy(link_id_addr, pattrib->ra, 6);
42758 - _rtw_memcpy((link_id_addr+6), pattrib->dst, 6);
42759 - _rtw_memcpy((link_id_addr+12), pattrib->src, 6);
42760 - pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
42761 -
42762 -}
42763 -
42764 -void rtw_tdls_peer_traffic_indication_fr(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
42765 -{
42766 -
42767 - struct pkt_attrib *pattrib = &pxmitframe->attrib;
42768 - u8 payload_type = 0x02;
42769 - unsigned char category = RTW_WLAN_CATEGORY_TDLS;
42770 - unsigned char action = TDLS_PEER_TRAFFIC_INDICATION;
42771 -
42772 - u8 link_id_addr[18] = {0};
42773 - u8 AC_queue=0;
42774 - struct sta_priv *pstapriv = &padapter->stapriv;
42775 - struct sta_info *ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->dst);
42776 -
42777 - //payload type
42778 - pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
42779 - //category, action, reason code
42780 - pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
42781 - pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
42782 - pframe = rtw_set_fixed_ie(pframe, 1, &(ptdls_sta->dialog), &(pattrib->pktlen));
42783 -
42784 - //Link identifier
42785 - _rtw_memcpy(link_id_addr, pattrib->ra, 6);
42786 - _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
42787 - _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
42788 - pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
42789 -
42790 - //PTI control
42791 - //PU buffer status
42792 - if(ptdls_sta->uapsd_bk&BIT(1))
42793 - AC_queue=BIT(0);
42794 - if(ptdls_sta->uapsd_be&BIT(1))
42795 - AC_queue=BIT(1);
42796 - if(ptdls_sta->uapsd_vi&BIT(1))
42797 - AC_queue=BIT(2);
42798 - if(ptdls_sta->uapsd_vo&BIT(1))
42799 - AC_queue=BIT(3);
42800 - pframe = rtw_set_ie(pframe, _PTI_BUFFER_STATUS_, 1, &AC_queue, &(pattrib->pktlen));
42801 -
42802 -}
42803 -
42804 -void rtw_tdls_ch_switch_req_fr(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
42805 -{
42806 -
42807 - struct pkt_attrib *pattrib = &pxmitframe->attrib;
42808 - struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
42809 - u8 payload_type = 0x02;
42810 - unsigned char category = RTW_WLAN_CATEGORY_TDLS;
42811 - unsigned char action = TDLS_CHANNEL_SWITCH_REQUEST;
42812 - u8 link_id_addr[18] = {0};
42813 - struct sta_priv *pstapriv = &padapter->stapriv;
42814 - struct sta_info *ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->dst);
42815 - u8 ch_switch_timing[4] = {0};
42816 - u16 switch_time= CH_SWITCH_TIME, switch_timeout=CH_SWITCH_TIMEOUT;
42817 -
42818 - //payload type
42819 - pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
42820 - //category, action, target_ch
42821 - pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
42822 - pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
42823 - pframe = rtw_set_fixed_ie(pframe, 1, &(ptdlsinfo->candidate_ch), &(pattrib->pktlen));
42824 -
42825 - //Link identifier
42826 - _rtw_memcpy(link_id_addr, pattrib->ra, 6);
42827 - _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
42828 - _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
42829 - pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
42830 -
42831 - //ch switch timing
42832 - _rtw_memcpy(ch_switch_timing, &switch_time, 2);
42833 - _rtw_memcpy(ch_switch_timing+2, &switch_timeout, 2);
42834 - pframe = rtw_set_ie(pframe, _CH_SWITCH_TIMING_, 4, ch_switch_timing, &(pattrib->pktlen));
42835 -
42836 - //update ch switch attrib to sta_info
42837 - ptdls_sta->off_ch=ptdlsinfo->candidate_ch;
42838 - ptdls_sta->ch_switch_time=switch_time;
42839 - ptdls_sta->ch_switch_timeout=switch_timeout;
42840 -
42841 -}
42842 -
42843 -void rtw_tdls_ch_switch_rsp_fr(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
42844 -{
42845 -
42846 - struct pkt_attrib *pattrib = &pxmitframe->attrib;
42847 - u8 payload_type = 0x02;
42848 - unsigned char category = RTW_WLAN_CATEGORY_TDLS;
42849 - unsigned char action = TDLS_CHANNEL_SWITCH_RESPONSE;
42850 - u8 link_id_addr[18] = {0};
42851 - struct sta_priv *pstapriv = &padapter->stapriv;
42852 - struct sta_info *ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->dst);
42853 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
42854 - struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
42855 - u8 ch_switch_timing[4] = {0};
42856 -
42857 - //payload type
42858 - pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
42859 - //category, action, status_code
42860 - pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
42861 - pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
42862 - pframe = rtw_set_fixed_ie(pframe, 2, (u8 *)&ptdls_sta->stat_code, &(pattrib->pktlen));
42863 -
42864 - //Link identifier
42865 - _rtw_memcpy(link_id_addr, pattrib->ra, 6);
42866 - _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
42867 - _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
42868 - pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
42869 -
42870 - //ch switch timing
42871 - _rtw_memcpy(ch_switch_timing, &ptdls_sta->ch_switch_time, 2);
42872 - _rtw_memcpy(ch_switch_timing+2, &ptdls_sta->ch_switch_timeout, 2);
42873 - pframe = rtw_set_ie(pframe, _CH_SWITCH_TIMING_, 4, ch_switch_timing, &(pattrib->pktlen));
42874 -
42875 -}
42876 -
42877 -int rtw_tdls_fr(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, u8 action)
42878 -{
42879 - int res=_SUCCESS;
42880 -
42881 - switch(action){
42882 - case TDLS_SETUP_REQUEST:
42883 - rtw_tdls_setup_req_fr(padapter, pxmitframe, pframe);
42884 - break;
42885 - case TDLS_SETUP_RESPONSE:
42886 - rtw_tdls_setup_rsp_fr(padapter, pxmitframe, pframe);
42887 - break;
42888 - case TDLS_SETUP_CONFIRM:
42889 - rtw_tdls_setup_cfm_fr(padapter, pxmitframe, pframe);
42890 - break;
42891 - case TDLS_TEARDOWN:
42892 - rtw_tdls_teardown_fr(padapter, pxmitframe, pframe);
42893 - break;
42894 - case TDLS_DISCOVERY_REQUEST:
42895 - rtw_tdls_dis_req_fr(padapter, pxmitframe, pframe);
42896 - break;
42897 - case TDLS_PEER_TRAFFIC_INDICATION:
42898 - rtw_tdls_peer_traffic_indication_fr(padapter, pxmitframe, pframe);
42899 - break;
42900 - case TDLS_CHANNEL_SWITCH_REQUEST:
42901 - rtw_tdls_ch_switch_req_fr(padapter, pxmitframe, pframe);
42902 - break;
42903 - case TDLS_CHANNEL_SWITCH_RESPONSE:
42904 - rtw_tdls_ch_switch_rsp_fr(padapter, pxmitframe, pframe);
42905 - break;
42906 - default:
42907 - res=_FAIL;
42908 - break;
42909 - }
42910 -
42911 - return res;
42912 -}
42913 -
42914 -s32 rtw_make_tdls_wlanhdr (_adapter *padapter , u8 *hdr, struct pkt_attrib *pattrib, u8 action)
42915 -{
42916 - u16 *qc;
42917 - struct rtw_ieee80211_hdr *pwlanhdr = (struct rtw_ieee80211_hdr *)hdr;
42918 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
42919 - struct qos_priv *pqospriv = &pmlmepriv->qospriv;
42920 - struct sta_priv *pstapriv = &padapter->stapriv;
42921 - struct sta_info *psta=NULL, *ptdls_sta=NULL;
42922 - u8 tdls_seq=0, baddr[ETH_ALEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
42923 -
42924 - sint res = _SUCCESS;
42925 - u16 *fctrl = &pwlanhdr->frame_ctl;
42926 -
42927 -_func_enter_;
42928 -
42929 - _rtw_memset(hdr, 0, WLANHDR_OFFSET);
42930 -
42931 - SetFrameSubType(fctrl, pattrib->subtype);
42932 -
42933 - switch(action){
42934 - case TDLS_SETUP_REQUEST:
42935 - case TDLS_SETUP_RESPONSE:
42936 - case TDLS_SETUP_CONFIRM:
42937 - case TDLS_TEARDOWN: //directly to peer STA or via AP
42938 - case TDLS_PEER_TRAFFIC_INDICATION:
42939 - case TDLS_PEER_PSM_REQUEST: //directly to peer STA or via AP
42940 - SetToDs(fctrl);
42941 - _rtw_memcpy(pwlanhdr->addr1, get_bssid(pmlmepriv), ETH_ALEN);
42942 - _rtw_memcpy(pwlanhdr->addr2, pattrib->src, ETH_ALEN);
42943 - _rtw_memcpy(pwlanhdr->addr3, pattrib->dst, ETH_ALEN);
42944 - break;
42945 - case TDLS_CHANNEL_SWITCH_REQUEST:
42946 - case TDLS_CHANNEL_SWITCH_RESPONSE:
42947 - case TDLS_PEER_PSM_RESPONSE:
42948 - case TDLS_PEER_TRAFFIC_RESPONSE:
42949 - _rtw_memcpy(pwlanhdr->addr1, pattrib->dst, ETH_ALEN);
42950 - _rtw_memcpy(pwlanhdr->addr2, pattrib->src, ETH_ALEN);
42951 - _rtw_memcpy(pwlanhdr->addr3, get_bssid(pmlmepriv), ETH_ALEN);
42952 - tdls_seq=1;
42953 - break;
42954 - case TDLS_DISCOVERY_REQUEST: //unicast: directly to peer sta, Bcast: via AP
42955 - if(_rtw_memcmp(pattrib->dst, baddr, 6) )
42956 - {
42957 - SetToDs(fctrl);
42958 - _rtw_memcpy(pwlanhdr->addr1, get_bssid(pmlmepriv), ETH_ALEN);
42959 - _rtw_memcpy(pwlanhdr->addr2, pattrib->src, ETH_ALEN);
42960 - _rtw_memcpy(pwlanhdr->addr3, pattrib->dst, ETH_ALEN);
42961 - }
42962 - else
42963 - {
42964 - _rtw_memcpy(pwlanhdr->addr1, pattrib->dst, ETH_ALEN);
42965 - _rtw_memcpy(pwlanhdr->addr2, pattrib->src, ETH_ALEN);
42966 - _rtw_memcpy(pwlanhdr->addr3, get_bssid(pmlmepriv), ETH_ALEN);
42967 - tdls_seq=1;
42968 - }
42969 - break;
42970 - }
42971 -
42972 - if (pattrib->encrypt)
42973 - SetPrivacy(fctrl);
42974 -
42975 - if (pqospriv->qos_option)
42976 - {
42977 - qc = (unsigned short *)(hdr + pattrib->hdrlen - 2);
42978 - if (pattrib->priority)
42979 - SetPriority(qc, pattrib->priority);
42980 - SetAckpolicy(qc, pattrib->ack_policy);
42981 + qc = (unsigned short *)(hdr + pattrib->hdrlen - 2);
42982 + if (pattrib->priority)
42983 + SetPriority(qc, pattrib->priority);
42984 + SetAckpolicy(qc, pattrib->ack_policy);
42985 }
42986
42987 psta = pattrib->psta;
42988 @@ -2243,10 +1624,10 @@ _func_enter_;
42989 llc_sz = rtw_put_snap(pframe, pattrib->ether_type);
42990 pframe += llc_sz;
42991
42992 - //pattrib->pktlen will be counted in rtw_tdls_fr
42993 + //pattrib->pktlen will be counted in rtw_build_tdls_ies
42994 pattrib->pktlen = 0;
42995
42996 - rtw_tdls_fr(padapter, pxmitframe, pframe, action);
42997 + rtw_build_tdls_ies(padapter, pxmitframe, pframe, action);
42998
42999 if ((pattrib->icv_len >0 )&& (pattrib->bswenc)) {
43000 pframe += pattrib->pktlen;
43001 @@ -2273,7 +1654,24 @@ _func_exit_;
43002
43003 return res;
43004 }
43005 -#endif
43006 +#endif //CONFIG_TDLS
43007 +
43008 +/*
43009 + * Calculate wlan 802.11 packet MAX size from pkt_attrib
43010 + * This function doesn't consider fragment case
43011 + */
43012 +u32 rtw_calculate_wlan_pkt_size_by_attribue(struct pkt_attrib *pattrib)
43013 +{
43014 + u32 len = 0;
43015 +
43016 + len = pattrib->hdrlen + pattrib->iv_len; // WLAN Header and IV
43017 + len += SNAP_SIZE + sizeof(u16); // LLC
43018 + len += pattrib->pktlen;
43019 + if (pattrib->encrypt == _TKIP_) len += 8; // MIC
43020 + len += pattrib->icv_len; // ICV
43021 +
43022 + return len;
43023 +}
43024
43025 /*
43026
43027 @@ -2311,17 +1709,33 @@ s32 rtw_xmitframe_coalesce(_adapter *pad
43028
43029 _func_enter_;
43030
43031 - if (pattrib->psta) {
43032 + if (pattrib->psta)
43033 + {
43034 psta = pattrib->psta;
43035 - } else {
43036 + } else
43037 + {
43038 + DBG_871X("%s, call rtw_get_stainfo()\n", __func__);
43039 psta = rtw_get_stainfo(&padapter->stapriv, pattrib->ra);
43040 }
43041
43042 if(psta==NULL)
43043 + {
43044 +
43045 + DBG_871X("%s, psta==NUL\n", __func__);
43046 return _FAIL;
43047 + }
43048
43049 - if (pxmitframe->buf_addr == NULL)
43050 +
43051 + if(!(psta->state &_FW_LINKED))
43052 + {
43053 + DBG_871X("%s, psta->state(0x%x) != _FW_LINKED\n", __func__, psta->state);
43054 + return _FAIL;
43055 + }
43056 +
43057 + if (pxmitframe->buf_addr == NULL){
43058 + DBG_8192C("==> %s buf_addr==NULL \n",__FUNCTION__);
43059 return _FAIL;
43060 + }
43061
43062 pbuf_start = pxmitframe->buf_addr;
43063
43064 @@ -2340,8 +1754,6 @@ _func_enter_;
43065 _rtw_open_pktfile(pkt, &pktfile);
43066 _rtw_pktfile_read(&pktfile, NULL, pattrib->pkt_hdrlen);
43067
43068 - pattrib->pktlen = pktfile.pkt_len;
43069 -
43070 frg_inx = 0;
43071 frg_len = pxmitpriv->frag_len - 4;//2346-4 = 2342
43072
43073 @@ -2435,23 +1847,10 @@ _func_enter_;
43074 ((pattrib->bswenc) ? pattrib->icv_len : 0) + mem_sz;
43075
43076 ClearMFrag(mem_start);
43077 -
43078 -#ifdef CONFIG_SDIO_HCI
43079 - RT_TRACE(_module_rtl871x_xmit_c_,_drv_err_,("coalesce: pattrib->last_txcmdsz=%d pxmitframe->pxmitbuf->phead=0x%p pxmitframe->pxmitbuf->ptail=0x%p pxmitframe->pxmitbuf->len=%d\n", pattrib->last_txcmdsz, pxmitframe->pxmitbuf->phead, pxmitframe->pxmitbuf->ptail, pxmitframe->pxmitbuf->len));
43080 - pxmitframe->pxmitbuf->ptail = pxmitframe->buf_addr + _RND512(pframe-pxmitframe->buf_addr);
43081 - pxmitframe->pxmitbuf->len += pxmitframe->pxmitbuf->ptail - pxmitframe->buf_addr;//(pframe-mem_start);
43082 - RT_TRACE(_module_rtl871x_xmit_c_, _drv_err_, ("coalesce: [2] pattrib->last_txcmdsz=%d pxmitframe->pxmitbuf->ptail=0x%p pxmitframe->pxmitbuf->len=%d\n", pattrib->last_txcmdsz, pxmitframe->pxmitbuf->ptail, pxmitframe->pxmitbuf->len));
43083 -#endif
43084
43085 break;
43086 -
43087 } else {
43088 -
43089 -#ifdef CONFIG_SDIO_HCI
43090 - pxmitframe->pxmitbuf->ptail = pxmitframe->buf_addr + _RND512(pframe-pxmitframe->buf_addr);
43091 - pxmitframe->pxmitbuf->len += pxmitframe->pxmitbuf->ptail - pxmitframe->buf_addr;
43092 - pframe=pxmitframe->pxmitbuf->ptail;
43093 -#endif
43094 + RT_TRACE(_module_rtl871x_xmit_c_, _drv_err_, ("%s: There're still something in packet!\n", __FUNCTION__));
43095 }
43096
43097 addr = (SIZE_PTR)(pframe);
43098 @@ -2467,10 +1866,6 @@ _func_enter_;
43099 goto exit;
43100 }
43101
43102 -#ifdef CONFIG_SDIO_HCI
43103 - fillin_txdesc(padapter, pxmitframe);
43104 -#endif
43105 -
43106 xmitframe_swencrypt(padapter, pxmitframe);
43107
43108 if(bmcst == _FALSE)
43109 @@ -2485,6 +1880,244 @@ _func_exit_;
43110 return res;
43111 }
43112
43113 +#ifdef CONFIG_IEEE80211W
43114 +//broadcast or multicast management pkt use BIP, unicast management pkt use CCMP encryption
43115 +s32 rtw_mgmt_xmitframe_coalesce(_adapter *padapter, _pkt *pkt, struct xmit_frame *pxmitframe)
43116 +{
43117 + struct pkt_file pktfile;
43118 + s32 frg_inx, frg_len, mpdu_len, llc_sz, mem_sz;
43119 + SIZE_PTR addr;
43120 + u8 *pframe, *mem_start = NULL, *tmp_buf=NULL;
43121 + u8 hw_hdr_offset, subtype ;
43122 + struct sta_info *psta = NULL;
43123 + struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
43124 + struct pkt_attrib *pattrib = &pxmitframe->attrib;
43125 + u8 *pbuf_start;
43126 + s32 bmcst = IS_MCAST(pattrib->ra);
43127 + s32 res = _FAIL;
43128 + u8 *BIP_AAD=NULL;
43129 + u8 *MGMT_body=NULL;
43130 +
43131 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
43132 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
43133 + struct rtw_ieee80211_hdr *pwlanhdr;
43134 + u8 MME[_MME_IE_LENGTH_];
43135 +
43136 + _irqL irqL;
43137 + u32 ori_len;
43138 + mem_start = pframe = (u8 *)(pxmitframe->buf_addr) + TXDESC_OFFSET;
43139 + pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
43140 +
43141 +_func_enter_;
43142 + ori_len = BIP_AAD_SIZE+pattrib->pktlen;
43143 + tmp_buf = BIP_AAD = rtw_zmalloc(ori_len);
43144 + subtype = GetFrameSubType(pframe); //bit(7)~bit(2)
43145 +
43146 + if(BIP_AAD == NULL)
43147 + return _FAIL;
43148 +
43149 + _enter_critical_bh(&padapter->security_key_mutex, &irqL);
43150 +
43151 + //only support station mode
43152 + if(!check_fwstate(pmlmepriv, WIFI_STATION_STATE) || !check_fwstate(pmlmepriv, _FW_LINKED))
43153 + goto xmitframe_coalesce_success;
43154 +
43155 + //IGTK key is not install, it may not support 802.11w
43156 + if(padapter->securitypriv.binstallBIPkey != _TRUE)
43157 + {
43158 + DBG_871X("no instll BIP key\n");
43159 + goto xmitframe_coalesce_success;
43160 + }
43161 + //station mode doesn't need TX BIP, just ready the code
43162 + if(bmcst)
43163 + {
43164 + int frame_body_len;
43165 + u8 mic[16];
43166 +
43167 + _rtw_memset(MME, 0, 18);
43168 +
43169 + //other types doesn't need the BIP
43170 + if(GetFrameSubType(pframe) != WIFI_DEAUTH && GetFrameSubType(pframe) != WIFI_DISASSOC)
43171 + goto xmitframe_coalesce_fail;
43172 +
43173 + MGMT_body = pframe + sizeof(struct rtw_ieee80211_hdr_3addr);
43174 + pframe += pattrib->pktlen;
43175 +
43176 + //octent 0 and 1 is key index ,BIP keyid is 4 or 5, LSB only need octent 0
43177 + MME[0]=padapter->securitypriv.dot11wBIPKeyid;
43178 + //copy packet number
43179 + _rtw_memcpy(&MME[2], &pmlmeext->mgnt_80211w_IPN, 6);
43180 + //increase the packet number
43181 + pmlmeext->mgnt_80211w_IPN++;
43182 +
43183 + //add MME IE with MIC all zero, MME string doesn't include element id and length
43184 + pframe = rtw_set_ie(pframe, _MME_IE_ , 16 , MME, &(pattrib->pktlen));
43185 + pattrib->last_txcmdsz = pattrib->pktlen;
43186 + // total frame length - header length
43187 + frame_body_len = pattrib->pktlen - sizeof(struct rtw_ieee80211_hdr_3addr);
43188 +
43189 + //conscruct AAD, copy frame control field
43190 + _rtw_memcpy(BIP_AAD, &pwlanhdr->frame_ctl, 2);
43191 + ClearRetry(BIP_AAD);
43192 + ClearPwrMgt(BIP_AAD);
43193 + ClearMData(BIP_AAD);
43194 + //conscruct AAD, copy address 1 to address 3
43195 + _rtw_memcpy(BIP_AAD+2, pwlanhdr->addr1, 18);
43196 + //copy management fram body
43197 + _rtw_memcpy(BIP_AAD+BIP_AAD_SIZE, MGMT_body, frame_body_len);
43198 + /*//dump total packet include MME with zero MIC
43199 + {
43200 + int i;
43201 + printk("Total packet: ");
43202 + for(i=0; i < BIP_AAD_SIZE+frame_body_len; i++)
43203 + printk(" %02x ", BIP_AAD[i]);
43204 + printk("\n");
43205 + }*/
43206 + //calculate mic
43207 + if(omac1_aes_128(padapter->securitypriv.dot11wBIPKey[padapter->securitypriv.dot11wBIPKeyid].skey
43208 + , BIP_AAD, BIP_AAD_SIZE+frame_body_len, mic))
43209 + goto xmitframe_coalesce_fail;
43210 +
43211 + /*//dump calculated mic result
43212 + {
43213 + int i;
43214 + printk("Calculated mic result: ");
43215 + for(i=0; i<16; i++)
43216 + printk(" %02x ", mic[i]);
43217 + printk("\n");
43218 + }*/
43219 + //copy right BIP mic value, total is 128bits, we use the 0~63 bits
43220 + _rtw_memcpy(pframe-8, mic, 8);
43221 + /*/dump all packet after mic ok
43222 + {
43223 + int pp;
43224 + printk("pattrib->pktlen = %d \n", pattrib->pktlen);
43225 + for(pp=0;pp< pattrib->pktlen; pp++)
43226 + printk(" %02x ", mem_start[pp]);
43227 + printk("\n");
43228 + }*/
43229 + }
43230 + else //unicast mgmt frame TX
43231 + {
43232 + //start to encrypt mgmt frame
43233 + if(subtype == WIFI_DEAUTH || subtype == WIFI_DISASSOC ||
43234 + subtype == WIFI_REASSOCREQ || subtype == WIFI_ACTION)
43235 + {
43236 + if (pattrib->psta)
43237 + psta = pattrib->psta;
43238 + else
43239 + {
43240 + psta = rtw_get_stainfo(&padapter->stapriv, pattrib->ra);
43241 + }
43242 +
43243 + if(psta==NULL)
43244 + {
43245 +
43246 + DBG_871X("%s, psta==NUL\n", __func__);
43247 + goto xmitframe_coalesce_fail;
43248 + }
43249 +
43250 + if(!(psta->state & _FW_LINKED) || pxmitframe->buf_addr==NULL)
43251 + {
43252 + DBG_871X("%s, not _FW_LINKED or addr null\n", __func__);
43253 + goto xmitframe_coalesce_fail;
43254 + }
43255 +
43256 + //DBG_871X("%s, action frame category=%d \n", __func__, pframe[WLAN_HDR_A3_LEN]);
43257 + //according 802.11-2012 standard, these five types are not robust types
43258 + if(subtype == WIFI_ACTION &&
43259 + (pframe[WLAN_HDR_A3_LEN] == RTW_WLAN_CATEGORY_PUBLIC ||
43260 + pframe[WLAN_HDR_A3_LEN] == RTW_WLAN_CATEGORY_HT ||
43261 + pframe[WLAN_HDR_A3_LEN] == RTW_WLAN_CATEGORY_UNPROTECTED_WNM ||
43262 + pframe[WLAN_HDR_A3_LEN] == RTW_WLAN_CATEGORY_SELF_PROTECTED ||
43263 + pframe[WLAN_HDR_A3_LEN] == RTW_WLAN_CATEGORY_P2P))
43264 + goto xmitframe_coalesce_fail;
43265 + //before encrypt dump the management packet content
43266 + /*{
43267 + int i;
43268 + printk("Management pkt: ");
43269 + for(i=0; i<pattrib->pktlen; i++)
43270 + printk(" %02x ", pframe[i]);
43271 + printk("=======\n");
43272 + }*/
43273 + if(pattrib->encrypt>0)
43274 + _rtw_memcpy(pattrib->dot118021x_UncstKey.skey, psta->dot118021x_UncstKey.skey, 16);
43275 + //bakeup original management packet
43276 + _rtw_memcpy(tmp_buf, pframe, pattrib->pktlen);
43277 + //move to data portion
43278 + pframe += pattrib->hdrlen;
43279 +
43280 + //802.11w unicast management packet must be _AES_
43281 + pattrib->iv_len = 8;
43282 + //it's MIC of AES
43283 + pattrib->icv_len = 8;
43284 +
43285 + switch(pattrib->encrypt)
43286 + {
43287 + case _AES_:
43288 + //set AES IV header
43289 + AES_IV(pattrib->iv, psta->dot11wtxpn, 0);
43290 + break;
43291 + default:
43292 + goto xmitframe_coalesce_fail;
43293 + }
43294 + //insert iv header into management frame
43295 + _rtw_memcpy(pframe, pattrib->iv, pattrib->iv_len);
43296 + pframe += pattrib->iv_len;
43297 + //copy mgmt data portion after CCMP header
43298 + _rtw_memcpy(pframe, tmp_buf+pattrib->hdrlen, pattrib->pktlen-pattrib->hdrlen);
43299 + //move pframe to end of mgmt pkt
43300 + pframe += pattrib->pktlen-pattrib->hdrlen;
43301 + //add 8 bytes CCMP IV header to length
43302 + pattrib->pktlen += pattrib->iv_len;
43303 + /*//dump management packet include AES IV header
43304 + {
43305 + int i;
43306 + printk("Management pkt + IV: ");
43307 + //for(i=0; i<pattrib->pktlen; i++)
43308 + //printk(" %02x ", mem_start[i]);
43309 + printk("@@@@@@@@@@@@@\n");
43310 + }*/
43311 +
43312 + if ((pattrib->icv_len >0 )&& (pattrib->bswenc)) {
43313 + _rtw_memcpy(pframe, pattrib->icv, pattrib->icv_len);
43314 + pframe += pattrib->icv_len;
43315 + }
43316 + //add 8 bytes MIC
43317 + pattrib->pktlen += pattrib->icv_len;
43318 + //set final tx command size
43319 + pattrib->last_txcmdsz = pattrib->pktlen;
43320 +
43321 + //set protected bit must be beofre SW encrypt
43322 + SetPrivacy(mem_start);
43323 + /*//dump management packet include AES header
43324 + {
43325 + int i;
43326 + printk("prepare to enc Management pkt + IV: ");
43327 + for(i=0; i<pattrib->pktlen; i++)
43328 + printk(" %02x ", mem_start[i]);
43329 + printk("@@@@@@@@@@@@@\n");
43330 + }*/
43331 + //software encrypt
43332 + xmitframe_swencrypt(padapter, pxmitframe);
43333 + }
43334 + }
43335 +
43336 +xmitframe_coalesce_success:
43337 + _exit_critical_bh(&padapter->security_key_mutex, &irqL);
43338 + rtw_mfree(BIP_AAD, ori_len);
43339 +_func_exit_;
43340 + return _SUCCESS;
43341 +
43342 +xmitframe_coalesce_fail:
43343 + _exit_critical_bh(&padapter->security_key_mutex, &irqL);
43344 + rtw_mfree(BIP_AAD, ori_len);
43345 +_func_exit_;
43346 +
43347 + return _FAIL;
43348 +}
43349 +#endif //CONFIG_IEEE80211W
43350 +
43351 /* Logical Link Control(LLC) SubNetwork Attachment Point(SNAP) header
43352 * IEEE LLC/SNAP header contains 8 octets
43353 * First 3 octets comprise the LLC portion
43354 @@ -2637,12 +2270,17 @@ _func_enter_;
43355
43356 #ifdef CONFIG_SDIO_HCI
43357 pxmitbuf->len = 0;
43358 - pxmitbuf->phead = pxmitbuf->pdata = pxmitbuf->ptail = pxmitbuf->pbuf;
43359 - pxmitbuf->pend = pxmitbuf->pbuf + (MAX_XMIT_EXTBUF_SZ-4);
43360 + pxmitbuf->pdata = pxmitbuf->ptail = pxmitbuf->phead;
43361 #endif
43362 #ifdef CONFIG_PCI_HCI
43363 pxmitbuf->len = 0;
43364 #endif
43365 +
43366 + if (pxmitbuf->sctx) {
43367 + DBG_871X("%s pxmitbuf->sctx is not NULL\n", __func__);
43368 + rtw_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_BUF_ALLOC);
43369 + }
43370 +
43371 }
43372
43373 _exit_critical(&pfree_queue->lock, &irqL);
43374 @@ -2690,7 +2328,7 @@ struct xmit_buf *rtw_alloc_xmitbuf(struc
43375
43376 _func_enter_;
43377
43378 - //DBG_8192C("+rtw_alloc_xmitbuf\n");
43379 + //DBG_871X("+rtw_alloc_xmitbuf\n");
43380
43381 _enter_critical(&pfree_xmitbuf_queue->lock, &irqL);
43382
43383 @@ -2713,18 +2351,22 @@ _func_enter_;
43384 #ifdef DBG_XMIT_BUF
43385 DBG_871X("DBG_XMIT_BUF ALLOC no=%d, free_xmitbuf_cnt=%d\n",pxmitbuf->no, pxmitpriv->free_xmitbuf_cnt);
43386 #endif
43387 - //DBG_8192C("alloc, free_xmitbuf_cnt=%d\n", pxmitpriv->free_xmitbuf_cnt);
43388 + //DBG_871X("alloc, free_xmitbuf_cnt=%d\n", pxmitpriv->free_xmitbuf_cnt);
43389
43390 pxmitbuf->priv_data = NULL;
43391
43392 #ifdef CONFIG_SDIO_HCI
43393 pxmitbuf->len = 0;
43394 - pxmitbuf->phead = pxmitbuf->pdata = pxmitbuf->ptail = pxmitbuf->pbuf;
43395 - pxmitbuf->pend = pxmitbuf->pbuf + MAX_XMITBUF_SZ;
43396 + pxmitbuf->pdata = pxmitbuf->ptail = pxmitbuf->phead;
43397 #endif
43398 #ifdef CONFIG_PCI_HCI
43399 pxmitbuf->len = 0;
43400 #endif
43401 +
43402 + if (pxmitbuf->sctx) {
43403 + DBG_871X("%s pxmitbuf->sctx is not NULL\n", __func__);
43404 + rtw_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_BUF_ALLOC);
43405 + }
43406 }
43407 #ifdef DBG_XMIT_BUF
43408 else
43409 @@ -2747,13 +2389,18 @@ s32 rtw_free_xmitbuf(struct xmit_priv *p
43410
43411 _func_enter_;
43412
43413 - //DBG_8192C("+rtw_free_xmitbuf\n");
43414 + //DBG_871X("+rtw_free_xmitbuf\n");
43415
43416 if(pxmitbuf==NULL)
43417 {
43418 return _FAIL;
43419 }
43420
43421 + if (pxmitbuf->sctx) {
43422 + DBG_871X("%s pxmitbuf->sctx is not NULL\n", __func__);
43423 + rtw_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_BUF_FREE);
43424 + }
43425 +
43426 if(pxmitbuf->ext_tag)
43427 {
43428 rtw_free_xmitbuf_ext(pxmitpriv, pxmitbuf);
43429 @@ -2767,7 +2414,7 @@ _func_enter_;
43430 rtw_list_insert_tail(&(pxmitbuf->list), get_list_head(pfree_xmitbuf_queue));
43431
43432 pxmitpriv->free_xmitbuf_cnt++;
43433 - //DBG_8192C("FREE, free_xmitbuf_cnt=%d\n", pxmitpriv->free_xmitbuf_cnt);
43434 + //DBG_871X("FREE, free_xmitbuf_cnt=%d\n", pxmitpriv->free_xmitbuf_cnt);
43435 #ifdef DBG_XMIT_BUF
43436 DBG_871X("DBG_XMIT_BUF FREE no=%d, free_xmitbuf_cnt=%d\n",pxmitbuf->no ,pxmitpriv->free_xmitbuf_cnt);
43437 #endif
43438 @@ -2779,6 +2426,40 @@ _func_exit_;
43439 return _SUCCESS;
43440 }
43441
43442 +void rtw_init_xmitframe(struct xmit_frame *pxframe)
43443 +{
43444 + if (pxframe != NULL)//default value setting
43445 + {
43446 + pxframe->buf_addr = NULL;
43447 + pxframe->pxmitbuf = NULL;
43448 +
43449 + _rtw_memset(&pxframe->attrib, 0, sizeof(struct pkt_attrib));
43450 + //pxframe->attrib.psta = NULL;
43451 +
43452 + pxframe->frame_tag = DATA_FRAMETAG;
43453 +
43454 +#ifdef CONFIG_USB_HCI
43455 + pxframe->pkt = NULL;
43456 + pxframe->pkt_offset = 1;//default use pkt_offset to fill tx desc
43457 +
43458 +#ifdef CONFIG_USB_TX_AGGREGATION
43459 + pxframe->agg_num = 1;
43460 +#endif
43461 +
43462 +#endif //#ifdef CONFIG_USB_HCI
43463 +
43464 +#if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
43465 + pxframe->pg_num = 1;
43466 + pxframe->agg_num = 1;
43467 +#endif
43468 +
43469 +#ifdef CONFIG_XMIT_ACK
43470 + pxframe->ack_report = 0;
43471 +#endif
43472 +
43473 + }
43474 +}
43475 +
43476 /*
43477 Calling context:
43478 1. OS_TXENTRY
43479 @@ -2790,7 +2471,6 @@ Otherwise, we must use _enter/_exit crit
43480 Must be very very cautious...
43481
43482 */
43483 -
43484 struct xmit_frame *rtw_alloc_xmitframe(struct xmit_priv *pxmitpriv)//(_queue *pfree_xmit_queue)
43485 {
43486 /*
43487 @@ -2803,7 +2483,9 @@ struct xmit_frame *rtw_alloc_xmitframe(s
43488 struct xmit_frame *pxframe = NULL;
43489 _list *plist, *phead;
43490 _queue *pfree_xmit_queue = &pxmitpriv->free_xmit_queue;
43491 +#ifdef PLATFORM_LINUX
43492 _adapter *padapter = pxmitpriv->adapter;
43493 +#endif //PLATFORM_LINUX
43494
43495 _func_enter_;
43496
43497 @@ -2820,53 +2502,95 @@ _func_enter_;
43498 pxframe = LIST_CONTAINOR(plist, struct xmit_frame, list);
43499
43500 rtw_list_delete(&(pxframe->list));
43501 + pxmitpriv->free_xmitframe_cnt--;
43502 + RT_TRACE(_module_rtl871x_xmit_c_, _drv_info_, ("rtw_alloc_xmitframe():free_xmitframe_cnt=%d\n", pxmitpriv->free_xmitframe_cnt));
43503 }
43504
43505 - if (pxframe != NULL)
43506 - {
43507 - pxmitpriv->free_xmitframe_cnt--;
43508 +#ifdef PLATFORM_LINUX
43509 +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35))
43510 + if(pxmitpriv->free_xmitframe_cnt==1)
43511 + {
43512 + if (!rtw_netif_queue_stopped(padapter->pnetdev))
43513 + rtw_netif_stop_queue(padapter->pnetdev);
43514 + }
43515 +#endif
43516 +#endif
43517
43518 - RT_TRACE(_module_rtl871x_xmit_c_, _drv_info_, ("rtw_alloc_xmitframe():free_xmitframe_cnt=%d\n", pxmitpriv->free_xmitframe_cnt));
43519 + _exit_critical_bh(&pfree_xmit_queue->lock, &irqL);
43520
43521 - pxframe->buf_addr = NULL;
43522 - pxframe->pxmitbuf = NULL;
43523 + rtw_init_xmitframe(pxframe);
43524
43525 - _rtw_memset(&pxframe->attrib, 0, sizeof(struct pkt_attrib));
43526 - //pxframe->attrib.psta = NULL;
43527 +_func_exit_;
43528 +
43529 + return pxframe;
43530 +}
43531 +
43532 +struct xmit_frame *rtw_alloc_xmitframe_ext(struct xmit_priv *pxmitpriv)
43533 +{
43534 + _irqL irqL;
43535 + struct xmit_frame *pxframe = NULL;
43536 + _list *plist, *phead;
43537 + _queue *queue = &pxmitpriv->free_xframe_ext_queue;
43538 +
43539 +_func_enter_;
43540 +
43541 + _enter_critical_bh(&queue->lock, &irqL);
43542 +
43543 + if (_rtw_queue_empty(queue) == _TRUE) {
43544 + RT_TRACE(_module_rtl871x_xmit_c_,_drv_info_,("rtw_alloc_xmitframe_ext:%d\n", pxmitpriv->free_xframe_ext_cnt));
43545 + pxframe = NULL;
43546 + } else {
43547 + phead = get_list_head(queue);
43548 + plist = get_next(phead);
43549 + pxframe = LIST_CONTAINOR(plist, struct xmit_frame, list);
43550 +
43551 + rtw_list_delete(&(pxframe->list));
43552 + pxmitpriv->free_xframe_ext_cnt--;
43553 + RT_TRACE(_module_rtl871x_xmit_c_, _drv_info_, ("rtw_alloc_xmitframe_ext():free_xmitframe_cnt=%d\n", pxmitpriv->free_xframe_ext_cnt));
43554 + }
43555 +
43556 + _exit_critical_bh(&queue->lock, &irqL);
43557 +
43558 + rtw_init_xmitframe(pxframe);
43559
43560 - pxframe->frame_tag = DATA_FRAMETAG;
43561 +_func_exit_;
43562
43563 -#ifdef CONFIG_USB_HCI
43564 - pxframe->pkt = NULL;
43565 - pxframe->pkt_offset = 1;//default use pkt_offset to fill tx desc
43566 + return pxframe;
43567 +}
43568
43569 -#ifdef CONFIG_USB_TX_AGGREGATION
43570 - pxframe->agg_num = 1;
43571 -#endif
43572 +struct xmit_frame *rtw_alloc_xmitframe_once(struct xmit_priv *pxmitpriv)
43573 +{
43574 + struct xmit_frame *pxframe = NULL;
43575 + u8 *alloc_addr;
43576
43577 -#endif //#ifdef CONFIG_USB_HCI
43578 + alloc_addr = rtw_zmalloc(sizeof(struct xmit_frame) + 4);
43579 +
43580 + if (alloc_addr == NULL)
43581 + goto exit;
43582 +
43583 + pxframe = (struct xmit_frame *)N_BYTE_ALIGMENT((SIZE_PTR)(alloc_addr), 4);
43584 + pxframe->alloc_addr = alloc_addr;
43585
43586 -#ifdef PLATFORM_LINUX
43587 - if(pxmitpriv->free_xmitframe_cnt==1)
43588 - {
43589 - if (!netif_queue_stopped(padapter->pnetdev))
43590 - netif_stop_queue(padapter->pnetdev);
43591 - }
43592 -#endif
43593 + pxframe->padapter = pxmitpriv->adapter;
43594 + pxframe->frame_tag = NULL_FRAMETAG;
43595
43596 - }
43597 + pxframe->pkt = NULL;
43598
43599 - _exit_critical_bh(&pfree_xmit_queue->lock, &irqL);
43600 + pxframe->buf_addr = NULL;
43601 + pxframe->pxmitbuf = NULL;
43602
43603 -_func_exit_;
43604 + rtw_init_xmitframe(pxframe);
43605
43606 + DBG_871X("################## %s ##################\n", __func__);
43607 +
43608 +exit:
43609 return pxframe;
43610 }
43611
43612 s32 rtw_free_xmitframe(struct xmit_priv *pxmitpriv, struct xmit_frame *pxmitframe)
43613 {
43614 _irqL irqL;
43615 - _queue *pfree_xmit_queue = &pxmitpriv->free_xmit_queue;
43616 + _queue *queue;
43617 _adapter *padapter = pxmitpriv->adapter;
43618 _pkt *pndis_pkt = NULL;
43619
43620 @@ -2877,22 +2601,40 @@ _func_enter_;
43621 goto exit;
43622 }
43623
43624 - _enter_critical_bh(&pfree_xmit_queue->lock, &irqL);
43625 -
43626 - rtw_list_delete(&pxmitframe->list);
43627 -
43628 if (pxmitframe->pkt){
43629 pndis_pkt = pxmitframe->pkt;
43630 pxmitframe->pkt = NULL;
43631 }
43632
43633 - rtw_list_insert_tail(&pxmitframe->list, get_list_head(pfree_xmit_queue));
43634 + if (pxmitframe->alloc_addr) {
43635 + DBG_871X("################## %s with alloc_addr ##################\n", __func__);
43636 + rtw_mfree(pxmitframe->alloc_addr, sizeof(struct xmit_frame) + 4);
43637 + goto check_pkt_complete;
43638 + }
43639 +
43640 + if (pxmitframe->ext_tag == 0)
43641 + queue = &pxmitpriv->free_xmit_queue;
43642 + else if(pxmitframe->ext_tag == 1)
43643 + queue = &pxmitpriv->free_xframe_ext_queue;
43644 + else
43645 + {}
43646
43647 - pxmitpriv->free_xmitframe_cnt++;
43648 - RT_TRACE(_module_rtl871x_xmit_c_, _drv_debug_, ("rtw_free_xmitframe():free_xmitframe_cnt=%d\n", pxmitpriv->free_xmitframe_cnt));
43649 + _enter_critical_bh(&queue->lock, &irqL);
43650
43651 - _exit_critical_bh(&pfree_xmit_queue->lock, &irqL);
43652 + rtw_list_delete(&pxmitframe->list);
43653 + rtw_list_insert_tail(&pxmitframe->list, get_list_head(queue));
43654 + if (pxmitframe->ext_tag == 0) {
43655 + pxmitpriv->free_xmitframe_cnt++;
43656 + RT_TRACE(_module_rtl871x_xmit_c_, _drv_debug_, ("rtw_free_xmitframe():free_xmitframe_cnt=%d\n", pxmitpriv->free_xmitframe_cnt));
43657 + } else if(pxmitframe->ext_tag == 1) {
43658 + pxmitpriv->free_xframe_ext_cnt++;
43659 + RT_TRACE(_module_rtl871x_xmit_c_, _drv_debug_, ("rtw_free_xmitframe():free_xframe_ext_cnt=%d\n", pxmitpriv->free_xframe_ext_cnt));
43660 + } else {
43661 + }
43662 +
43663 + _exit_critical_bh(&queue->lock, &irqL);
43664
43665 +check_pkt_complete:
43666
43667 if(pndis_pkt)
43668 rtw_os_pkt_complete(padapter, pndis_pkt);
43669 @@ -2904,26 +2646,6 @@ _func_exit_;
43670 return _SUCCESS;
43671 }
43672
43673 -s32 rtw_free_xmitframe_ex(struct xmit_priv *pxmitpriv, struct xmit_frame *pxmitframe)
43674 -{
43675 -
43676 -_func_enter_;
43677 -
43678 - if(pxmitframe==NULL){
43679 - goto exit;
43680 - }
43681 -
43682 - RT_TRACE(_module_rtl871x_xmit_c_, _drv_debug_, ("rtw_free_xmitframe_ex()\n"));
43683 -
43684 - rtw_free_xmitframe(pxmitpriv, pxmitframe);
43685 -
43686 -exit:
43687 -
43688 -_func_exit_;
43689 -
43690 - return _SUCCESS;
43691 -}
43692 -
43693 void rtw_free_xmitframe_queue(struct xmit_priv *pxmitpriv, _queue *pframequeue)
43694 {
43695 _irqL irqL;
43696 @@ -2995,11 +2717,7 @@ static struct xmit_frame *dequeue_one_xm
43697
43698 ptxservq->qcnt--;
43699
43700 - //rtw_list_insert_tail(&pxmitframe->list, &phwxmit->pending);
43701 -
43702 - //ptxservq->qcnt--;
43703 -
43704 - break;
43705 + break;
43706
43707 pxmitframe = NULL;
43708
43709 @@ -3118,7 +2836,7 @@ _func_exit_;
43710 #if 1
43711 struct tx_servq *rtw_get_sta_pending(_adapter *padapter, struct sta_info *psta, sint up, u8 *ac)
43712 {
43713 - struct tx_servq *ptxservq;
43714 + struct tx_servq *ptxservq=NULL;
43715
43716 _func_enter_;
43717
43718 @@ -3243,15 +2961,23 @@ _func_enter_;
43719 if (pattrib->psta) {
43720 psta = pattrib->psta;
43721 } else {
43722 + DBG_871X("%s, call rtw_get_stainfo()\n", __func__);
43723 psta = rtw_get_stainfo(pstapriv, pattrib->ra);
43724 }
43725
43726 if (psta == NULL) {
43727 res = _FAIL;
43728 + DBG_8192C("rtw_xmit_classifier: psta == NULL\n");
43729 RT_TRACE(_module_rtl871x_xmit_c_,_drv_err_,("rtw_xmit_classifier: psta == NULL\n"));
43730 goto exit;
43731 }
43732
43733 + if(!(psta->state &_FW_LINKED))
43734 + {
43735 + DBG_871X("%s, psta->state(0x%x) != _FW_LINKED\n", __func__, psta->state);
43736 + return _FAIL;
43737 + }
43738 +
43739 ptxservq = rtw_get_sta_pending(padapter, psta, pattrib->priority, (u8 *)(&ac_index));
43740
43741 //_enter_critical(&pstapending->lock, &irqL0);
43742 @@ -3363,8 +3089,6 @@ _func_enter_;
43743 _func_exit_;
43744 }
43745
43746 -
43747 -
43748 #ifdef CONFIG_BR_EXT
43749 int rtw_br_client_tx(_adapter *padapter, struct sk_buff **pskb)
43750 {
43751 @@ -3411,7 +3135,7 @@ int rtw_br_client_tx(_adapter *padapter,
43752 *((unsigned short *)(skb->data+MACADDRLEN*2+2-i*2)) = *((unsigned short *)(skb->data+MACADDRLEN*2-2-i*2));
43753 skb_pull(skb, 4);
43754 }
43755 -
43756 + //if SA == br_mac && skb== IP => copy SIP to br_ip ?? why
43757 if (!memcmp(skb->data+MACADDRLEN, padapter->br_mac, MACADDRLEN) &&
43758 (*((unsigned short *)(skb->data+MACADDRLEN*2)) == __constant_htons(ETH_P_IP)))
43759 memcpy(padapter->br_ip, skb->data+WLAN_ETHHDR_LEN+12, 4);
43760 @@ -3455,14 +3179,14 @@ int rtw_br_client_tx(_adapter *padapter,
43761 *((unsigned short *)(skb->data+MACADDRLEN*2+2)) = vlan_hdr;
43762 }
43763
43764 - newskb = skb_copy(skb, GFP_ATOMIC);
43765 + newskb = rtw_skb_copy(skb);
43766 if (newskb == NULL) {
43767 //priv->ext_stats.tx_drops++;
43768 - DEBUG_ERR("TX DROP: skb_copy fail!\n");
43769 + DEBUG_ERR("TX DROP: rtw_skb_copy fail!\n");
43770 //goto stop_proc;
43771 return -1;
43772 }
43773 - dev_kfree_skb_any(skb);
43774 + rtw_skb_free(skb);
43775
43776 *pskb = skb = newskb;
43777 if (is_vlan_tag) {
43778 @@ -3498,7 +3222,7 @@ int rtw_br_client_tx(_adapter *padapter,
43779
43780 }
43781 // we just print warning message and let it go
43782 - DEBUG_WARN("%s()-%d: nat25_db_handle INSERT Warning!\n", __FUNCTION__, __LINE__);
43783 + //DEBUG_WARN("%s()-%d: nat25_db_handle INSERT Warning!\n", __FUNCTION__, __LINE__);
43784 //return -1; // return -1 will cause system crash on 2011/08/30!
43785 return 0;
43786 }
43787 @@ -3556,8 +3280,8 @@ static void do_queue_select(_adapter *pa
43788 RT_TRACE(_module_rtl871x_xmit_c_,_drv_info_,("### do_queue_select priority=%d ,qsel = %d\n",pattrib->priority ,qsel));
43789
43790 #ifdef CONFIG_CONCURRENT_MODE
43791 - if (check_fwstate(&padapter->mlmepriv, WIFI_AP_STATE) == _TRUE)
43792 - qsel = 7;//
43793 +// if (check_fwstate(&padapter->mlmepriv, WIFI_AP_STATE) == _TRUE)
43794 +// qsel = 7;//
43795 #endif
43796
43797 pattrib->qsel = qsel;
43798 @@ -3573,6 +3297,8 @@ static void do_queue_select(_adapter *pa
43799 */
43800 s32 rtw_xmit(_adapter *padapter, _pkt **ppkt)
43801 {
43802 + static u32 start = 0;
43803 + static u32 drop_cnt = 0;
43804 #ifdef CONFIG_AP_MODE
43805 _irqL irqL0;
43806 #endif
43807 @@ -3585,13 +3311,21 @@ s32 rtw_xmit(_adapter *padapter, _pkt **
43808
43809 s32 res;
43810
43811 + if (start == 0)
43812 + start = rtw_get_current_time();
43813
43814 pxmitframe = rtw_alloc_xmitframe(pxmitpriv);
43815 +
43816 + if (rtw_get_passing_time_ms(start) > 2000) {
43817 + if (drop_cnt)
43818 + DBG_871X("DBG_TX_DROP_FRAME %s no more pxmitframe, drop_cnt:%u\n", __FUNCTION__, drop_cnt);
43819 + start = rtw_get_current_time();
43820 + drop_cnt = 0;
43821 + }
43822 +
43823 if (pxmitframe == NULL) {
43824 + drop_cnt ++;
43825 RT_TRACE(_module_xmit_osdep_c_, _drv_err_, ("rtw_xmit: no more pxmitframe\n"));
43826 - #ifdef DBG_TX_DROP_FRAME
43827 - DBG_871X("DBG_TX_DROP_FRAME %s no more pxmitframe\n", __FUNCTION__);
43828 - #endif
43829 return -1;
43830 }
43831
43832 @@ -3605,11 +3339,14 @@ s32 rtw_xmit(_adapter *padapter, _pkt **
43833 rcu_read_unlock();
43834 #endif // (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 35))
43835
43836 - if( br_port && check_fwstate(pmlmepriv, WIFI_STATION_STATE|WIFI_ADHOC_STATE) == _TRUE)
43837 + if( br_port && check_fwstate(pmlmepriv, WIFI_STATION_STATE|WIFI_ADHOC_STATE) == _TRUE)
43838 {
43839 res = rtw_br_client_tx(padapter, ppkt);
43840 if (res == -1)
43841 + {
43842 + rtw_free_xmitframe(pxmitpriv, pxmitframe);
43843 return -1;
43844 + }
43845 }
43846
43847 #endif // CONFIG_BR_EXT
43848 @@ -3629,7 +3366,7 @@ s32 rtw_xmit(_adapter *padapter, _pkt **
43849
43850 do_queue_select(padapter, &pxmitframe->attrib);
43851
43852 -#ifdef CONFIG_AP_MODE
43853 +#if defined(CONFIG_AP_MODE) || defined(CONFIG_TDLS)
43854 _enter_critical_bh(&pxmitpriv->lock, &irqL0);
43855 if(xmitframe_enqueue_for_sleeping_sta(padapter, pxmitframe) == _TRUE)
43856 {
43857 @@ -3637,57 +3374,15 @@ s32 rtw_xmit(_adapter *padapter, _pkt **
43858 return 1;
43859 }
43860 _exit_critical_bh(&pxmitpriv->lock, &irqL0);
43861 -#endif
43862 +#endif
43863
43864 - if (padapter->HalFunc.hal_xmit(padapter, pxmitframe) == _FALSE)
43865 + if (rtw_hal_xmit(padapter, pxmitframe) == _FALSE)
43866 return 1;
43867
43868 return 0;
43869 }
43870
43871 #ifdef CONFIG_TDLS
43872 -void process_enqueue_frame(_adapter *padapter, struct xmit_frame *pxmitframe, struct sta_info *psta)
43873 -{
43874 - _irqL irqL;
43875 - struct sta_info *ptdls_sta=NULL;
43876 - struct sta_priv *pstapriv = &padapter->stapriv;
43877 - struct pkt_attrib *pattrib = &pxmitframe->attrib;
43878 - ptdls_sta=rtw_get_stainfo(pstapriv, pattrib->dst);
43879 -
43880 - //enqueue frame for TDLS sleeping STA
43881 - rtw_list_delete(&pxmitframe->list);
43882 - _enter_critical_bh(&ptdls_sta->sleep_q.lock, &irqL);
43883 - rtw_list_insert_tail(&pxmitframe->list, get_list_head(&ptdls_sta->sleep_q));
43884 - ptdls_sta->sleepq_len++;
43885 -
43886 - //indicate 4-AC queue bit in TDLS peer traffic indication
43887 - switch(pattrib->priority)
43888 - {
43889 - case 1:
43890 - case 2:
43891 - ptdls_sta->uapsd_bk = ptdls_sta->uapsd_bk | BIT(0);
43892 - break;
43893 - case 4:
43894 - case 5:
43895 - ptdls_sta->uapsd_vi = ptdls_sta->uapsd_vi | BIT(0);
43896 - break;
43897 - case 6:
43898 - case 7:
43899 - ptdls_sta->uapsd_vo = ptdls_sta->uapsd_vo | BIT(0);
43900 - break;
43901 - case 0:
43902 - case 3:
43903 - default:
43904 - ptdls_sta->uapsd_be = ptdls_sta->uapsd_be | BIT(0);
43905 - break;
43906 - }
43907 -
43908 - ptdls_sta->sleepq_ac_len++;
43909 -
43910 - _exit_critical_bh(&ptdls_sta->sleep_q.lock, &irqL);
43911 -
43912 -}
43913 -
43914 sint xmitframe_enqueue_for_tdls_sleeping_sta(_adapter *padapter, struct xmit_frame *pxmitframe)
43915 {
43916 sint ret=_FALSE;
43917 @@ -3697,7 +3392,6 @@ sint xmitframe_enqueue_for_tdls_sleeping
43918 struct sta_priv *pstapriv = &padapter->stapriv;
43919 struct pkt_attrib *pattrib = &pxmitframe->attrib;
43920 struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
43921 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
43922 int i;
43923
43924 ptdls_sta=rtw_get_stainfo(pstapriv, pattrib->dst);
43925 @@ -3709,7 +3403,7 @@ sint xmitframe_enqueue_for_tdls_sleeping
43926 {
43927 ret = _TRUE;
43928 return ret;
43929 - }
43930 + }
43931
43932 _enter_critical_bh(&ptdls_sta->sleep_q.lock, &irqL);
43933
43934 @@ -3749,7 +3443,6 @@ sint xmitframe_enqueue_for_tdls_sleeping
43935 if(ptdls_sta->sleepq_len==1)
43936 {
43937 //transmit TDLS PTI via AP
43938 - ptdls_sta->option=2;
43939 rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_SD_PTI);
43940 }
43941 ret = _TRUE;
43942 @@ -3762,9 +3455,9 @@ sint xmitframe_enqueue_for_tdls_sleeping
43943 return ret;
43944
43945 }
43946 -#endif
43947 +#endif //CONFIG_TDLS
43948
43949 -#ifdef CONFIG_AP_MODE
43950 +#if defined(CONFIG_AP_MODE) || defined(CONFIG_TDLS)
43951
43952 sint xmitframe_enqueue_for_sleeping_sta(_adapter *padapter, struct xmit_frame *pxmitframe)
43953 {
43954 @@ -3778,7 +3471,7 @@ sint xmitframe_enqueue_for_sleeping_sta(
43955 #ifdef CONFIG_TDLS
43956 struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
43957
43958 - if( ptdlsinfo->setup_state & TDLS_LINKED_STATE )
43959 + if( ptdlsinfo->setup_state == TDLS_LINKED_STATE )
43960 {
43961 ret = xmitframe_enqueue_for_tdls_sleeping_sta(padapter, pxmitframe);
43962 return ret;
43963 @@ -3794,11 +3487,21 @@ sint xmitframe_enqueue_for_sleeping_sta(
43964 }
43965 else
43966 {
43967 + DBG_871X("%s, call rtw_get_stainfo()\n", __func__);
43968 psta=rtw_get_stainfo(pstapriv, pattrib->ra);
43969 }
43970
43971 if(psta==NULL)
43972 - return ret;
43973 + {
43974 + DBG_871X("%s, psta==NUL\n", __func__);
43975 + return _FALSE;
43976 + }
43977 +
43978 + if(!(psta->state &_FW_LINKED))
43979 + {
43980 + DBG_871X("%s, psta->state(0x%x) != _FW_LINKED\n", __func__, psta->state);
43981 + return _FALSE;
43982 + }
43983
43984 if(pattrib->triggered==1)
43985 {
43986 @@ -3925,6 +3628,7 @@ sint xmitframe_enqueue_for_sleeping_sta(
43987
43988 static void dequeue_xmitframes_to_sleeping_queue(_adapter *padapter, struct sta_info *psta, _queue *pframequeue)
43989 {
43990 + sint ret;
43991 _list *plist, *phead;
43992 u8 ac_index;
43993 struct tx_servq *ptxservq;
43994 @@ -3941,8 +3645,10 @@ static void dequeue_xmitframes_to_sleepi
43995
43996 plist = get_next(plist);
43997
43998 - xmitframe_enqueue_for_sleeping_sta(padapter, pxmitframe);
43999 + ret = xmitframe_enqueue_for_sleeping_sta(padapter, pxmitframe);
44000
44001 + if(_TRUE == ret)
44002 + {
44003 pattrib = &pxmitframe->attrib;
44004
44005 ptxservq = rtw_get_sta_pending(padapter, psta, pattrib->priority, (u8 *)(&ac_index));
44006 @@ -3950,6 +3656,12 @@ static void dequeue_xmitframes_to_sleepi
44007 ptxservq->qcnt--;
44008 phwxmits[ac_index].accnt--;
44009 }
44010 + else
44011 + {
44012 + //DBG_871X("xmitframe_enqueue_for_sleeping_sta return _FALSE\n");
44013 + }
44014 +
44015 + }
44016
44017 }
44018
44019 @@ -3973,7 +3685,7 @@ void stop_sta_xmit(_adapter *padapter, s
44020
44021 #ifdef CONFIG_TDLS
44022 if( !(psta->tdls_sta_state & TDLS_LINKED_STATE) )
44023 -#endif //CONFIG_TDLS
44024 +#endif //CONFIG_TDLS
44025 pstapriv->sta_dz_bitmap |= BIT(psta->aid);
44026
44027
44028 @@ -4014,7 +3726,7 @@ void stop_sta_xmit(_adapter *padapter, s
44029 _exit_critical_bh(&pxmitpriv->lock, &irqL0);
44030
44031
44032 -}
44033 +}
44034
44035 void wakeup_sta_to_xmit(_adapter *padapter, struct sta_info *psta)
44036 {
44037 @@ -4024,8 +3736,13 @@ void wakeup_sta_to_xmit(_adapter *padapt
44038 _list *xmitframe_plist, *xmitframe_phead;
44039 struct xmit_frame *pxmitframe=NULL;
44040 struct sta_priv *pstapriv = &padapter->stapriv;
44041 + struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
44042
44043 - _enter_critical_bh(&psta->sleep_q.lock, &irqL);
44044 + psta_bmc = rtw_get_bcmc_stainfo(padapter);
44045 +
44046 +
44047 + //_enter_critical_bh(&psta->sleep_q.lock, &irqL);
44048 + _enter_critical_bh(&pxmitpriv->lock, &irqL);
44049
44050 xmitframe_phead = get_list_head(&psta->sleep_q);
44051 xmitframe_plist = get_next(xmitframe_phead);
44052 @@ -4082,53 +3799,25 @@ void wakeup_sta_to_xmit(_adapter *padapt
44053
44054 pxmitframe->attrib.triggered = 1;
44055
44056 +/*
44057 _exit_critical_bh(&psta->sleep_q.lock, &irqL);
44058 - if(padapter->HalFunc.hal_xmit(padapter, pxmitframe) == _TRUE)
44059 + if(rtw_hal_xmit(padapter, pxmitframe) == _TRUE)
44060 {
44061 rtw_os_xmit_complete(padapter, pxmitframe);
44062 }
44063 _enter_critical_bh(&psta->sleep_q.lock, &irqL);
44064 +*/
44065 + rtw_hal_xmitframe_enqueue(padapter, pxmitframe);
44066
44067 - if(psta->sleepq_len==0)
44068 - {
44069 -#ifdef CONFIG_TDLS
44070 - if( psta->tdls_sta_state & TDLS_LINKED_STATE )
44071 - {
44072 - if(psta->state&WIFI_SLEEP_STATE)
44073 - psta->state ^= WIFI_SLEEP_STATE;
44074 -
44075 - _exit_critical_bh(&psta->sleep_q.lock, &irqL);
44076 - return;
44077 - }
44078 -#endif
44079 - pstapriv->tim_bitmap &= ~BIT(psta->aid);
44080 -
44081 - //DBG_871X("wakeup to xmit, qlen==0, update_BCNTIM, tim=%x\n", pstapriv->tim_bitmap);
44082 - //upate BCN for TIM IE
44083 - //update_BCNTIM(padapter);
44084 - update_mask = BIT(0);
44085 -
44086 - if(psta->state&WIFI_SLEEP_STATE)
44087 - psta->state ^= WIFI_SLEEP_STATE;
44088 -
44089 - pstapriv->sta_dz_bitmap &= ~BIT(psta->aid);
44090 -
44091 - }
44092
44093 }
44094
44095 - _exit_critical_bh(&psta->sleep_q.lock, &irqL);
44096 -
44097 -
44098 //for BC/MC Frames
44099 - psta_bmc = rtw_get_bcmc_stainfo(padapter);
44100 if(!psta_bmc)
44101 - return;
44102 + goto _exit;
44103
44104 if((pstapriv->sta_dz_bitmap&0xfffe) == 0x0)//no any sta in ps mode
44105 {
44106 - _enter_critical_bh(&psta_bmc->sleep_q.lock, &irqL);
44107 -
44108 xmitframe_phead = get_list_head(&psta_bmc->sleep_q);
44109 xmitframe_plist = get_next(xmitframe_phead);
44110
44111 @@ -4148,36 +3837,71 @@ void wakeup_sta_to_xmit(_adapter *padapt
44112
44113
44114 pxmitframe->attrib.triggered = 1;
44115 -
44116 +/*
44117 _exit_critical_bh(&psta_bmc->sleep_q.lock, &irqL);
44118 - if(padapter->HalFunc.hal_xmit(padapter, pxmitframe) == _TRUE)
44119 + if(rtw_hal_xmit(padapter, pxmitframe) == _TRUE)
44120 {
44121 rtw_os_xmit_complete(padapter, pxmitframe);
44122 }
44123 _enter_critical_bh(&psta_bmc->sleep_q.lock, &irqL);
44124
44125 +*/
44126 + rtw_hal_xmitframe_enqueue(padapter, pxmitframe);
44127
44128 - if(psta_bmc->sleepq_len==0)
44129 - {
44130 - pstapriv->tim_bitmap &= ~BIT(0);
44131 - pstapriv->sta_dz_bitmap &= ~BIT(0);
44132 -
44133 - //DBG_871X("wakeup to xmit, qlen==0, update_BCNTIM, tim=%x\n", pstapriv->tim_bitmap);
44134 - //upate BCN for TIM IE
44135 - //update_BCNTIM(padapter);
44136 - update_mask |= BIT(1);
44137 - }
44138 -
44139 }
44140
44141 - _exit_critical_bh(&psta_bmc->sleep_q.lock, &irqL);
44142 + if(psta_bmc->sleepq_len==0)
44143 + {
44144 + pstapriv->tim_bitmap &= ~BIT(0);
44145 + pstapriv->sta_dz_bitmap &= ~BIT(0);
44146 +
44147 + //DBG_871X("wakeup to xmit, qlen==0, update_BCNTIM, tim=%x\n", pstapriv->tim_bitmap);
44148 + //upate BCN for TIM IE
44149 + //update_BCNTIM(padapter);
44150 + update_mask |= BIT(1);
44151 + }
44152 +
44153 + }
44154
44155 + if(psta->sleepq_len==0)
44156 + {
44157 +#ifdef CONFIG_TDLS
44158 + if( psta->tdls_sta_state & TDLS_LINKED_STATE )
44159 + {
44160 + if(psta->state&WIFI_SLEEP_STATE)
44161 + psta->state ^= WIFI_SLEEP_STATE;
44162 +
44163 + goto _exit;
44164 }
44165 +#endif //CONFIG_TDLS
44166 + pstapriv->tim_bitmap &= ~BIT(psta->aid);
44167 +
44168 + //DBG_871X("wakeup to xmit, qlen==0, update_BCNTIM, tim=%x\n", pstapriv->tim_bitmap);
44169 + //upate BCN for TIM IE
44170 + //update_BCNTIM(padapter);
44171 + update_mask = BIT(0);
44172 +
44173 + if(psta->state&WIFI_SLEEP_STATE)
44174 + psta->state ^= WIFI_SLEEP_STATE;
44175 +
44176 + if(psta->state & WIFI_STA_ALIVE_CHK_STATE)
44177 + {
44178 + psta->expire_to = pstapriv->expire_to;
44179 + psta->state ^= WIFI_STA_ALIVE_CHK_STATE;
44180 + }
44181 +
44182 + pstapriv->sta_dz_bitmap &= ~BIT(psta->aid);
44183 + }
44184 +
44185 +_exit:
44186
44187 + //_exit_critical_bh(&psta_bmc->sleep_q.lock, &irqL);
44188 + _exit_critical_bh(&pxmitpriv->lock, &irqL);
44189
44190 if(update_mask)
44191 {
44192 //update_BCNTIM(padapter);
44193 + //printk("%s => call update_beacon\n",__FUNCTION__);
44194 update_beacon(padapter, _TIM_IE_, NULL, _FALSE);
44195 }
44196
44197 @@ -4190,8 +3914,11 @@ void xmit_delivery_enabled_frames(_adapt
44198 _list *xmitframe_plist, *xmitframe_phead;
44199 struct xmit_frame *pxmitframe=NULL;
44200 struct sta_priv *pstapriv = &padapter->stapriv;
44201 + struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
44202
44203 - _enter_critical_bh(&psta->sleep_q.lock, &irqL);
44204 +
44205 + //_enter_critical_bh(&psta->sleep_q.lock, &irqL);
44206 + _enter_critical_bh(&pxmitpriv->lock, &irqL);
44207
44208 xmitframe_phead = get_list_head(&psta->sleep_q);
44209 xmitframe_plist = get_next(xmitframe_phead);
44210 @@ -4244,17 +3971,21 @@ void xmit_delivery_enabled_frames(_adapt
44211
44212 pxmitframe->attrib.triggered = 1;
44213
44214 - if(padapter->HalFunc.hal_xmit(padapter, pxmitframe) == _TRUE)
44215 +/*
44216 + if(rtw_hal_xmit(padapter, pxmitframe) == _TRUE)
44217 {
44218 rtw_os_xmit_complete(padapter, pxmitframe);
44219 }
44220 +*/
44221 + rtw_hal_xmitframe_enqueue(padapter, pxmitframe);
44222
44223 if((psta->sleepq_ac_len==0) && (!psta->has_legacy_ac) && (wmmps_ac))
44224 {
44225 #ifdef CONFIG_TDLS
44226 if(psta->tdls_sta_state & TDLS_LINKED_STATE )
44227 {
44228 - _exit_critical_bh(&psta->sleep_q.lock, &irqL);
44229 + //_exit_critical_bh(&psta->sleep_q.lock, &irqL);
44230 + _exit_critical_bh(&pxmitpriv->lock, &irqL);
44231 return;
44232 }
44233 #endif //CONFIG_TDLS
44234 @@ -4267,11 +3998,159 @@ void xmit_delivery_enabled_frames(_adapt
44235 //update_mask = BIT(0);
44236 }
44237
44238 - }
44239 + }
44240
44241 - _exit_critical_bh(&psta->sleep_q.lock, &irqL);
44242 + //_exit_critical_bh(&psta->sleep_q.lock, &irqL);
44243 + _exit_critical_bh(&pxmitpriv->lock, &irqL);
44244
44245 }
44246
44247 #endif
44248
44249 +void rtw_sctx_init(struct submit_ctx *sctx, int timeout_ms)
44250 +{
44251 + sctx->timeout_ms = timeout_ms;
44252 + sctx->submit_time= rtw_get_current_time();
44253 +#ifdef PLATFORM_LINUX /* TODO: add condition wating interface for other os */
44254 + init_completion(&sctx->done);
44255 +#endif
44256 + sctx->status = RTW_SCTX_SUBMITTED;
44257 +}
44258 +
44259 +int rtw_sctx_wait(struct submit_ctx *sctx)
44260 +{
44261 + int ret = _FAIL;
44262 + unsigned long expire;
44263 + int status = 0;
44264 +
44265 +#ifdef PLATFORM_LINUX
44266 + expire= sctx->timeout_ms ? msecs_to_jiffies(sctx->timeout_ms) : MAX_SCHEDULE_TIMEOUT;
44267 + if (!wait_for_completion_timeout(&sctx->done, expire)) {
44268 + /* timeout, do something?? */
44269 + status = RTW_SCTX_DONE_TIMEOUT;
44270 + DBG_871X("%s timeout\n", __func__);
44271 + } else {
44272 + status = sctx->status;
44273 + }
44274 +#endif
44275 +
44276 + if (status == RTW_SCTX_DONE_SUCCESS) {
44277 + ret = _SUCCESS;
44278 + }
44279 +
44280 + return ret;
44281 +}
44282 +
44283 +bool rtw_sctx_chk_waring_status(int status)
44284 +{
44285 + switch(status) {
44286 + case RTW_SCTX_DONE_UNKNOWN:
44287 + case RTW_SCTX_DONE_BUF_ALLOC:
44288 + case RTW_SCTX_DONE_BUF_FREE:
44289 +
44290 + case RTW_SCTX_DONE_DRV_STOP:
44291 + case RTW_SCTX_DONE_DEV_REMOVE:
44292 + return _TRUE;
44293 + default:
44294 + return _FALSE;
44295 + }
44296 +}
44297 +
44298 +void rtw_sctx_done_err(struct submit_ctx **sctx, int status)
44299 +{
44300 + if (*sctx) {
44301 + if (rtw_sctx_chk_waring_status(status))
44302 + DBG_871X("%s status:%d\n", __func__, status);
44303 + (*sctx)->status = status;
44304 + #ifdef PLATFORM_LINUX
44305 + complete(&((*sctx)->done));
44306 + #endif
44307 + *sctx = NULL;
44308 + }
44309 +}
44310 +
44311 +void rtw_sctx_done(struct submit_ctx **sctx)
44312 +{
44313 + rtw_sctx_done_err(sctx, RTW_SCTX_DONE_SUCCESS);
44314 +}
44315 +
44316 +#ifdef CONFIG_XMIT_ACK
44317 +
44318 +#ifdef CONFIG_XMIT_ACK_POLLING
44319 +s32 c2h_evt_hdl(_adapter *adapter, struct c2h_evt_hdr *c2h_evt, c2h_id_filter filter);
44320 +
44321 +/**
44322 + * rtw_ack_tx_polling -
44323 + * @pxmitpriv: xmit_priv to address ack_tx_ops
44324 + * @timeout_ms: timeout msec
44325 + *
44326 + * Init ack_tx_ops and then do c2h_evt_hdl() and polling ack_tx_ops repeatedly
44327 + * till tx report or timeout
44328 + * Returns: _SUCCESS if TX report ok, _FAIL for others
44329 + */
44330 +int rtw_ack_tx_polling(struct xmit_priv *pxmitpriv, u32 timeout_ms)
44331 +{
44332 + int ret = _FAIL;
44333 + struct submit_ctx *pack_tx_ops = &pxmitpriv->ack_tx_ops;
44334 + _adapter *adapter = container_of(pxmitpriv, _adapter, xmitpriv);
44335 +
44336 + pack_tx_ops->submit_time = rtw_get_current_time();
44337 + pack_tx_ops->timeout_ms = timeout_ms;
44338 + pack_tx_ops->status = RTW_SCTX_SUBMITTED;
44339 +
44340 + do {
44341 + c2h_evt_hdl(adapter, NULL, rtw_hal_c2h_id_filter_ccx(adapter));
44342 + if (pack_tx_ops->status != RTW_SCTX_SUBMITTED)
44343 + break;
44344 +
44345 + if (adapter->bDriverStopped) {
44346 + pack_tx_ops->status = RTW_SCTX_DONE_DRV_STOP;
44347 + break;
44348 + }
44349 + if (adapter->bSurpriseRemoved) {
44350 + pack_tx_ops->status = RTW_SCTX_DONE_DEV_REMOVE;
44351 + break;
44352 + }
44353 +
44354 + rtw_msleep_os(10);
44355 + } while (rtw_get_passing_time_ms(pack_tx_ops->submit_time) < timeout_ms);
44356 +
44357 + if (pack_tx_ops->status == RTW_SCTX_SUBMITTED) {
44358 + pack_tx_ops->status = RTW_SCTX_DONE_TIMEOUT;
44359 + DBG_871X("%s timeout\n", __func__);
44360 + }
44361 +
44362 + if (pack_tx_ops->status == RTW_SCTX_DONE_SUCCESS)
44363 + ret = _SUCCESS;
44364 +
44365 + return ret;
44366 +}
44367 +#endif
44368 +
44369 +int rtw_ack_tx_wait(struct xmit_priv *pxmitpriv, u32 timeout_ms)
44370 +{
44371 +#ifdef CONFIG_XMIT_ACK_POLLING
44372 + return rtw_ack_tx_polling(pxmitpriv, timeout_ms);
44373 +#else
44374 + struct submit_ctx *pack_tx_ops = &pxmitpriv->ack_tx_ops;
44375 +
44376 + pack_tx_ops->submit_time = rtw_get_current_time();
44377 + pack_tx_ops->timeout_ms = timeout_ms;
44378 + pack_tx_ops->status = RTW_SCTX_SUBMITTED;
44379 +
44380 + return rtw_sctx_wait(pack_tx_ops);
44381 +#endif
44382 +}
44383 +
44384 +void rtw_ack_tx_done(struct xmit_priv *pxmitpriv, int status)
44385 +{
44386 + struct submit_ctx *pack_tx_ops = &pxmitpriv->ack_tx_ops;
44387 +
44388 + if (pxmitpriv->ack_tx) {
44389 + rtw_sctx_done_err(&pack_tx_ops, status);
44390 + } else {
44391 + DBG_871X("%s ack_tx not set\n", __func__);
44392 + }
44393 +}
44394 +#endif //CONFIG_XMIT_ACK
44395 +
44396 --- /dev/null
44397 +++ b/drivers/net/wireless/rtl8192cu/hal/HalPwrSeqCmd.c
44398 @@ -0,0 +1,177 @@
44399 +/******************************************************************************
44400 + *
44401 + * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
44402 + *
44403 + * This program is free software; you can redistribute it and/or modify it
44404 + * under the terms of version 2 of the GNU General Public License as
44405 + * published by the Free Software Foundation.
44406 + *
44407 + * This program is distributed in the hope that it will be useful, but WITHOUT
44408 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
44409 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
44410 + * more details.
44411 + *
44412 + * You should have received a copy of the GNU General Public License along with
44413 + * this program; if not, write to the Free Software Foundation, Inc.,
44414 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
44415 + *
44416 + *
44417 + ******************************************************************************/
44418 +/*++
44419 +Copyright (c) Realtek Semiconductor Corp. All rights reserved.
44420 +
44421 +Module Name:
44422 + HalPwrSeqCmd.c
44423 +
44424 +Abstract:
44425 + Implement HW Power sequence configuration CMD handling routine for Realtek devices.
44426 +
44427 +Major Change History:
44428 + When Who What
44429 + ---------- --------------- -------------------------------
44430 + 2011-10-26 Lucas Modify to be compatible with SD4-CE driver.
44431 + 2011-07-07 Roger Create.
44432 +
44433 +--*/
44434 +#include <HalPwrSeqCmd.h>
44435 +#include <sdio_ops.h>
44436 +
44437 +
44438 +//
44439 +// Description:
44440 +// This routine deal with the Power Configuration CMDs parsing for RTL8723/RTL8188E Series IC.
44441 +//
44442 +// Assumption:
44443 +// We should follow specific format which was released from HW SD.
44444 +//
44445 +// 2011.07.07, added by Roger.
44446 +//
44447 +u8 HalPwrSeqCmdParsing(
44448 + PADAPTER padapter,
44449 + u8 CutVersion,
44450 + u8 FabVersion,
44451 + u8 InterfaceType,
44452 + WLAN_PWR_CFG PwrSeqCmd[])
44453 +{
44454 + WLAN_PWR_CFG PwrCfgCmd = {0};
44455 + u8 bPollingBit = _FALSE;
44456 + u32 AryIdx = 0;
44457 + u8 value = 0;
44458 + u32 offset = 0;
44459 + u32 pollingCount = 0; // polling autoload done.
44460 + u32 maxPollingCnt = 5000;
44461 +
44462 + do {
44463 + PwrCfgCmd = PwrSeqCmd[AryIdx];
44464 +
44465 + RT_TRACE(_module_hal_init_c_ , _drv_info_,
44466 + ("HalPwrSeqCmdParsing: offset(%#x) cut_msk(%#x) fab_msk(%#x) interface_msk(%#x) base(%#x) cmd(%#x) msk(%#x) value(%#x)\n",
44467 + GET_PWR_CFG_OFFSET(PwrCfgCmd),
44468 + GET_PWR_CFG_CUT_MASK(PwrCfgCmd),
44469 + GET_PWR_CFG_FAB_MASK(PwrCfgCmd),
44470 + GET_PWR_CFG_INTF_MASK(PwrCfgCmd),
44471 + GET_PWR_CFG_BASE(PwrCfgCmd),
44472 + GET_PWR_CFG_CMD(PwrCfgCmd),
44473 + GET_PWR_CFG_MASK(PwrCfgCmd),
44474 + GET_PWR_CFG_VALUE(PwrCfgCmd)));
44475 +
44476 + //2 Only Handle the command whose FAB, CUT, and Interface are matched
44477 + if ((GET_PWR_CFG_FAB_MASK(PwrCfgCmd) & FabVersion) &&
44478 + (GET_PWR_CFG_CUT_MASK(PwrCfgCmd) & CutVersion) &&
44479 + (GET_PWR_CFG_INTF_MASK(PwrCfgCmd) & InterfaceType))
44480 + {
44481 + switch (GET_PWR_CFG_CMD(PwrCfgCmd))
44482 + {
44483 + case PWR_CMD_READ:
44484 + RT_TRACE(_module_hal_init_c_ , _drv_info_, ("HalPwrSeqCmdParsing: PWR_CMD_READ\n"));
44485 + break;
44486 +
44487 + case PWR_CMD_WRITE:
44488 + RT_TRACE(_module_hal_init_c_ , _drv_info_, ("HalPwrSeqCmdParsing: PWR_CMD_WRITE\n"));
44489 + offset = GET_PWR_CFG_OFFSET(PwrCfgCmd);
44490 +
44491 +#ifdef CONFIG_SDIO_HCI
44492 + //
44493 + // <Roger_Notes> We should deal with interface specific address mapping for some interfaces, e.g., SDIO interface
44494 + // 2011.07.07.
44495 + //
44496 + if (GET_PWR_CFG_BASE(PwrCfgCmd) == PWR_BASEADDR_SDIO)
44497 + {
44498 + // Read Back SDIO Local value
44499 + value = SdioLocalCmd52Read1Byte(padapter, offset);
44500 +
44501 + value &= ~(GET_PWR_CFG_MASK(PwrCfgCmd));
44502 + value |= (GET_PWR_CFG_VALUE(PwrCfgCmd) & GET_PWR_CFG_MASK(PwrCfgCmd));
44503 +
44504 + // Write Back SDIO Local value
44505 + SdioLocalCmd52Write1Byte(padapter, offset, value);
44506 + }
44507 + else
44508 +#endif
44509 + {
44510 + // Read the value from system register
44511 + value = rtw_read8(padapter, offset);
44512 +
44513 + value &= ~(GET_PWR_CFG_MASK(PwrCfgCmd));
44514 + value |= (GET_PWR_CFG_VALUE(PwrCfgCmd) & GET_PWR_CFG_MASK(PwrCfgCmd));
44515 +
44516 + // Write the value back to sytem register
44517 + rtw_write8(padapter, offset, value);
44518 + }
44519 + break;
44520 +
44521 + case PWR_CMD_POLLING:
44522 + RT_TRACE(_module_hal_init_c_ , _drv_info_, ("HalPwrSeqCmdParsing: PWR_CMD_POLLING\n"));
44523 +
44524 + bPollingBit = _FALSE;
44525 + offset = GET_PWR_CFG_OFFSET(PwrCfgCmd);
44526 +
44527 + do {
44528 +#ifdef CONFIG_SDIO_HCI
44529 + if (GET_PWR_CFG_BASE(PwrCfgCmd) == PWR_BASEADDR_SDIO)
44530 + value = SdioLocalCmd52Read1Byte(padapter, offset);
44531 + else
44532 +#endif
44533 + value = rtw_read8(padapter, offset);
44534 +
44535 + value &= GET_PWR_CFG_MASK(PwrCfgCmd);
44536 + if (value == (GET_PWR_CFG_VALUE(PwrCfgCmd) & GET_PWR_CFG_MASK(PwrCfgCmd)))
44537 + bPollingBit = _TRUE;
44538 + else
44539 + rtw_udelay_os(10);
44540 +
44541 + if (pollingCount++ > maxPollingCnt) {
44542 + RT_TRACE(_module_hal_init_c_ , _drv_err_, ("Fail to polling Offset[%#x]\n", offset));
44543 + return _FALSE;
44544 + }
44545 + } while (!bPollingBit);
44546 +
44547 + break;
44548 +
44549 + case PWR_CMD_DELAY:
44550 + RT_TRACE(_module_hal_init_c_ , _drv_info_, ("HalPwrSeqCmdParsing: PWR_CMD_DELAY\n"));
44551 + if (GET_PWR_CFG_VALUE(PwrCfgCmd) == PWRSEQ_DELAY_US)
44552 + rtw_udelay_os(GET_PWR_CFG_OFFSET(PwrCfgCmd));
44553 + else
44554 + rtw_udelay_os(GET_PWR_CFG_OFFSET(PwrCfgCmd)*1000);
44555 + break;
44556 +
44557 + case PWR_CMD_END:
44558 + // When this command is parsed, end the process
44559 + RT_TRACE(_module_hal_init_c_ , _drv_info_, ("HalPwrSeqCmdParsing: PWR_CMD_END\n"));
44560 + return _TRUE;
44561 + break;
44562 +
44563 + default:
44564 + RT_TRACE(_module_hal_init_c_ , _drv_err_, ("HalPwrSeqCmdParsing: Unknown CMD!!\n"));
44565 + break;
44566 + }
44567 + }
44568 +
44569 + AryIdx++;//Add Array Index
44570 + }while(1);
44571 +
44572 + return _TRUE;
44573 +}
44574 +
44575 +
44576 --- /dev/null
44577 +++ b/drivers/net/wireless/rtl8192cu/hal/dm.c
44578 @@ -0,0 +1,314 @@
44579 +/******************************************************************************
44580 + *
44581 + * Copyright(c) 2007 - 2013 Realtek Corporation. All rights reserved.
44582 + *
44583 + * This program is free software; you can redistribute it and/or modify it
44584 + * under the terms of version 2 of the GNU General Public License as
44585 + * published by the Free Software Foundation.
44586 + *
44587 + * This program is distributed in the hope that it will be useful, but WITHOUT
44588 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
44589 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
44590 + * more details.
44591 + *
44592 + * You should have received a copy of the GNU General Public License along with
44593 + * this program; if not, write to the Free Software Foundation, Inc.,
44594 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
44595 + *
44596 + *
44597 + ******************************************************************************/
44598 +
44599 +#include <drv_conf.h>
44600 +#include <osdep_service.h>
44601 +#include <drv_types.h>
44602 +
44603 +#ifdef CONFIG_RTL8192C
44604 +#include <rtl8192c_hal.h>
44605 +#endif
44606 +
44607 +#ifdef CONFIG_RTL8192D
44608 +#include <rtl8192d_hal.h>
44609 +#endif
44610 +
44611 +bool rtw_adapter_linked(_adapter *adapter)
44612 +{
44613 + bool linked = _FALSE;
44614 + struct mlme_priv *mlmepriv = &adapter->mlmepriv;
44615 +
44616 + if( (check_fwstate(mlmepriv, WIFI_AP_STATE) == _TRUE) ||
44617 + (check_fwstate(mlmepriv, WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE) == _TRUE))
44618 + {
44619 + if(adapter->stapriv.asoc_sta_count > 2)
44620 + linked = _TRUE;
44621 + }
44622 + else{//Station mode
44623 + if(check_fwstate(mlmepriv, _FW_LINKED)== _TRUE)
44624 + linked = _TRUE;
44625 + }
44626 +
44627 + return linked;
44628 +}
44629 +
44630 +bool dm_linked(_adapter *adapter)
44631 +{
44632 + bool linked;
44633 +
44634 + if ((linked = rtw_adapter_linked(adapter)))
44635 + goto exit;
44636 +
44637 +#ifdef CONFIG_CONCURRENT_MODE
44638 + if ((adapter = adapter->pbuddy_adapter) == NULL)
44639 + goto exit;
44640 + linked = rtw_adapter_linked(adapter);
44641 +#endif
44642 +
44643 +exit:
44644 + return linked;
44645 +}
44646 +
44647 +#if 0
44648 +void dm_enable_EDCCA(_adapter *adapter)
44649 +{
44650 + // Enable EDCCA. The value is suggested by SD3 Wilson.
44651 +
44652 + //
44653 + // Revised for ASUS 11b/g performance issues, suggested by BB Neil, 2012.04.13.
44654 + //
44655 + /*if((pDM_Odm->SupportICType == ODM_RTL8723A)&&(IS_WIRELESS_MODE_G(pAdapter)))
44656 + {
44657 + rtw_write8(adapter,rOFDM0_ECCAThreshold,0x00);
44658 + rtw_write8(adapter,rOFDM0_ECCAThreshold+2,0xFD);
44659 +
44660 + }
44661 + else*/
44662 + {
44663 + rtw_write8(adapter,rOFDM0_ECCAThreshold,0x03);
44664 + rtw_write8(adapter,rOFDM0_ECCAThreshold+2,0x00);
44665 + }
44666 +}
44667 +
44668 +void dm_disable_EDCCA(_adapter *adapter)
44669 +{
44670 + // Disable EDCCA..
44671 + rtw_write8(adapter, rOFDM0_ECCAThreshold, 0x7f);
44672 + rtw_write8(adapter, rOFDM0_ECCAThreshold+2, 0x7f);
44673 +}
44674 +
44675 +//
44676 +// Description: According to initial gain value to determine to enable or disable EDCCA.
44677 +//
44678 +// Suggested by SD3 Wilson. Added by tynli. 2011.11.25.
44679 +//
44680 +void dm_dynamic_EDCCA(_adapter *pAdapter)
44681 +{
44682 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
44683 + struct dm_priv *dmpriv = &pHalData->dmpriv;
44684 + u8 RegC50, RegC58;
44685 +
44686 + RegC50 = (u8)PHY_QueryBBReg(pAdapter, rOFDM0_XAAGCCore1, bMaskByte0);
44687 + RegC58 = (u8)PHY_QueryBBReg(pAdapter, rOFDM0_XBAGCCore1, bMaskByte0);
44688 +
44689 +
44690 + if((RegC50 > 0x28 && RegC58 > 0x28)
44691 + /*|| ((pDM_Odm->SupportICType == ODM_RTL8723A && IS_WIRELESS_MODE_G(pAdapter) && RegC50>0x26))
44692 + || (pDM_Odm->SupportICType == ODM_RTL8188E && RegC50 > 0x28)*/
44693 + )
44694 + {
44695 + if(!dmpriv->bPreEdccaEnable)
44696 + {
44697 + dm_enable_EDCCA(pAdapter);
44698 + dmpriv->bPreEdccaEnable = _TRUE;
44699 + }
44700 +
44701 + }
44702 + else if((RegC50 < 0x25 && RegC58 < 0x25)
44703 + /*|| (pDM_Odm->SupportICType == ODM_RTL8188E && RegC50 < 0x25)*/
44704 + )
44705 + {
44706 + if(dmpriv->bPreEdccaEnable)
44707 + {
44708 + dm_disable_EDCCA(pAdapter);
44709 + dmpriv->bPreEdccaEnable = _FALSE;
44710 + }
44711 + }
44712 +}
44713 +#endif
44714 +
44715 +#define DM_ADAPTIVITY_VER "ADAPTIVITY_V001"
44716 +
44717 +int dm_adaptivity_get_parm_str(_adapter *pAdapter, char *buf, int len)
44718 +{
44719 +#ifdef CONFIG_DM_ADAPTIVITY
44720 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
44721 + struct dm_priv *dmpriv = &pHalData->dmpriv;
44722 +
44723 + return snprintf(buf, len, DM_ADAPTIVITY_VER"\n"
44724 + "TH_L2H_ini\tTH_EDCCA_HL_diff\tIGI_Base\tForceEDCCA\tAdapEn_RSSI\tIGI_LowerBound\n"
44725 + "0x%02x\t%d\t0x%02x\t%d\t%u\t%u\n",
44726 + (u8)dmpriv->TH_L2H_ini,
44727 + dmpriv->TH_EDCCA_HL_diff,
44728 + dmpriv->IGI_Base,
44729 + dmpriv->ForceEDCCA,
44730 + dmpriv->AdapEn_RSSI,
44731 + dmpriv->IGI_LowerBound
44732 + );
44733 +#endif /* CONFIG_DM_ADAPTIVITY */
44734 + return 0;
44735 +}
44736 +
44737 +void dm_adaptivity_set_parm(_adapter *pAdapter, s8 TH_L2H_ini, s8 TH_EDCCA_HL_diff,
44738 + s8 IGI_Base, bool ForceEDCCA, u8 AdapEn_RSSI, u8 IGI_LowerBound)
44739 +{
44740 +#ifdef CONFIG_DM_ADAPTIVITY
44741 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
44742 + struct dm_priv *dmpriv = &pHalData->dmpriv;
44743 +
44744 + dmpriv->TH_L2H_ini = TH_L2H_ini;
44745 + dmpriv->TH_EDCCA_HL_diff = TH_EDCCA_HL_diff;
44746 + dmpriv->IGI_Base = IGI_Base;
44747 + dmpriv->ForceEDCCA = ForceEDCCA;
44748 + dmpriv->AdapEn_RSSI = AdapEn_RSSI;
44749 + dmpriv->IGI_LowerBound = IGI_LowerBound;
44750 +
44751 +#endif /* CONFIG_DM_ADAPTIVITY */
44752 +}
44753 +
44754 +void dm_adaptivity_init(_adapter *pAdapter)
44755 +{
44756 +#ifdef CONFIG_DM_ADAPTIVITY
44757 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
44758 + struct dm_priv *dmpriv = &pHalData->dmpriv;
44759 +
44760 + /*
44761 + if(pDM_Odm->SupportICType == ODM_RTL8723B)
44762 + {
44763 + pDM_Odm->TH_L2H_ini = 0xf8; // -8
44764 + }
44765 + if((pDM_Odm->SupportICType == ODM_RTL8192E)&&(pDM_Odm->SupportInterface == ODM_ITRF_PCIE))
44766 + {
44767 + pDM_Odm->TH_L2H_ini = 0xf0; // -16
44768 + }
44769 + else */
44770 + {
44771 + dmpriv->TH_L2H_ini = 0xf9; // -7
44772 + }
44773 +
44774 + dmpriv->TH_EDCCA_HL_diff = 7;
44775 + dmpriv->IGI_Base = 0x32;
44776 + dmpriv->IGI_target = 0x1c;
44777 + dmpriv->ForceEDCCA = 0;
44778 + dmpriv->AdapEn_RSSI = 20;
44779 + dmpriv->IGI_LowerBound = 0;
44780 +
44781 + //Reg524[11]=0 is easily to transmit packets during adaptivity test
44782 + PHY_SetBBReg(pAdapter, 0x524, BIT11, 1); // stop counting if EDCCA is asserted
44783 +
44784 +#endif /* CONFIG_DM_ADAPTIVITY */
44785 +}
44786 +
44787 +void dm_adaptivity(_adapter *pAdapter)
44788 +{
44789 +#ifdef CONFIG_DM_ADAPTIVITY
44790 + s8 TH_L2H_dmc, TH_H2L_dmc;
44791 + s8 TH_L2H, TH_H2L, Diff, IGI_target;
44792 + u32 value32;
44793 + BOOLEAN EDCCA_State;
44794 +
44795 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
44796 + struct dm_priv *dmpriv = &pHalData->dmpriv;
44797 + DIG_T *pDigTable = &dmpriv->DM_DigTable;
44798 + u8 IGI = pDigTable->CurIGValue;
44799 + u8 RSSI_Min = pDigTable->Rssi_val_min;
44800 + HT_CHANNEL_WIDTH BandWidth = pHalData->CurrentChannelBW;
44801 +
44802 + if (!(dmpriv->DMFlag & DYNAMIC_FUNC_ADAPTIVITY))
44803 + {
44804 + LOG_LEVEL(_drv_info_, "Go to odm_DynamicEDCCA() \n");
44805 + // Add by Neil Chen to enable edcca to MP Platform
44806 + // Adjust EDCCA.
44807 + /*if(pDM_Odm->SupportICType & ODM_IC_11N_SERIES)
44808 + dm_dynamic_EDCCA(pAdapter);
44809 + */
44810 + return;
44811 + }
44812 + LOG_LEVEL(_drv_info_, "odm_Adaptivity() =====> \n");
44813 +
44814 + LOG_LEVEL(_drv_info_, "ForceEDCCA=%d, IGI_Base=0x%x, TH_L2H_ini = %d, TH_EDCCA_HL_diff = %d, AdapEn_RSSI = %d\n",
44815 + dmpriv->ForceEDCCA, dmpriv->IGI_Base, dmpriv->TH_L2H_ini, dmpriv->TH_EDCCA_HL_diff, dmpriv->AdapEn_RSSI);
44816 +
44817 + /*if(pDM_Odm->SupportICType & ODM_IC_11AC_SERIES)
44818 + PHY_SetBBReg(0x800, BIT10, 0); //ADC_mask enable
44819 + */
44820 +
44821 + if(!dm_linked(pAdapter) || pHalData->CurrentChannel > 149) /* Band4 doesn't need adaptivity */
44822 + {
44823 + /*if(pDM_Odm->SupportICType & ODM_IC_11N_SERIES)*/
44824 + {
44825 + PHY_SetBBReg(pAdapter,rOFDM0_ECCAThreshold, bMaskByte0, 0x7f);
44826 + PHY_SetBBReg(pAdapter,rOFDM0_ECCAThreshold, bMaskByte2, 0x7f);
44827 + }
44828 + /*else
44829 + {
44830 + ODM_SetBBReg(pDM_Odm, rFPGA0_XB_LSSIReadBack, 0xFFFF, (0x7f<<8) | 0x7f);
44831 + }*/
44832 + return;
44833 + }
44834 +
44835 + if(!dmpriv->ForceEDCCA)
44836 + {
44837 + if(RSSI_Min > dmpriv->AdapEn_RSSI)
44838 + EDCCA_State = 1;
44839 + else if(RSSI_Min < (dmpriv->AdapEn_RSSI - 5))
44840 + EDCCA_State = 0;
44841 + }
44842 + else
44843 + EDCCA_State = 1;
44844 + //if((pDM_Odm->SupportICType & ODM_IC_11AC_SERIES) && (*pDM_Odm->pBandType == BAND_ON_5G))
44845 + //IGI_target = pDM_Odm->IGI_Base;
44846 + //else
44847 + {
44848 +
44849 + if(BandWidth == HT_CHANNEL_WIDTH_20) //CHANNEL_WIDTH_20
44850 + IGI_target = dmpriv->IGI_Base;
44851 + else if(BandWidth == HT_CHANNEL_WIDTH_40)
44852 + IGI_target = dmpriv->IGI_Base + 2;
44853 + /*else if(*pDM_Odm->pBandWidth == ODM_BW80M)
44854 + IGI_target = pDM_Odm->IGI_Base + 6;*/
44855 + else
44856 + IGI_target = dmpriv->IGI_Base;
44857 + }
44858 +
44859 + dmpriv->IGI_target = (u8)IGI_target;
44860 +
44861 + LOG_LEVEL(_drv_info_, "BandWidth=%s, IGI_target=0x%x, EDCCA_State=%d\n",
44862 + (BandWidth==HT_CHANNEL_WIDTH_40)?"40M":"20M", IGI_target, EDCCA_State);
44863 +
44864 + if(EDCCA_State == 1)
44865 + {
44866 + Diff = IGI_target -(s8)IGI;
44867 + TH_L2H_dmc = dmpriv->TH_L2H_ini + Diff;
44868 + if(TH_L2H_dmc > 10) TH_L2H_dmc = 10;
44869 + TH_H2L_dmc = TH_L2H_dmc - dmpriv->TH_EDCCA_HL_diff;
44870 + }
44871 + else
44872 + {
44873 + TH_L2H_dmc = 0x7f;
44874 + TH_H2L_dmc = 0x7f;
44875 + }
44876 +
44877 + LOG_LEVEL(_drv_info_, "IGI=0x%x, TH_L2H_dmc = %d, TH_H2L_dmc = %d\n",
44878 + IGI, TH_L2H_dmc, TH_H2L_dmc);
44879 +
44880 + /*if(pDM_Odm->SupportICType & ODM_IC_11N_SERIES)*/
44881 + {
44882 + PHY_SetBBReg(pAdapter,rOFDM0_ECCAThreshold, bMaskByte0, (u8)TH_L2H_dmc);
44883 + PHY_SetBBReg(pAdapter,rOFDM0_ECCAThreshold, bMaskByte2, (u8)TH_H2L_dmc);
44884 + }
44885 + /*else
44886 + PHY_SetBBReg(pAdapter, rFPGA0_XB_LSSIReadBack, 0xFFFF, ((u8)TH_H2L_dmc<<8) | (u8)TH_L2H_dmc);*/
44887 +
44888 +skip_dm:
44889 + return;
44890 +#endif /* CONFIG_DM_ADAPTIVITY */
44891 +}
44892 +
44893 --- /dev/null
44894 +++ b/drivers/net/wireless/rtl8192cu/hal/dm.h
44895 @@ -0,0 +1,30 @@
44896 +/******************************************************************************
44897 + *
44898 + * Copyright(c) 2007 - 2013 Realtek Corporation. All rights reserved.
44899 + *
44900 + * This program is free software; you can redistribute it and/or modify it
44901 + * under the terms of version 2 of the GNU General Public License as
44902 + * published by the Free Software Foundation.
44903 + *
44904 + * This program is distributed in the hope that it will be useful, but WITHOUT
44905 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
44906 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
44907 + * more details.
44908 + *
44909 + * You should have received a copy of the GNU General Public License along with
44910 + * this program; if not, write to the Free Software Foundation, Inc.,
44911 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
44912 + *
44913 + *
44914 + ******************************************************************************/
44915 +
44916 + #ifndef __DM_H__
44917 +#define __DM_H__
44918 +
44919 +int dm_adaptivity_get_parm_str(_adapter *pAdapter, char *buf, int len);
44920 +void dm_adaptivity_set_parm(_adapter *pAdapter, s8 TH_L2H_ini, s8 TH_EDCCA_HL_diff,
44921 + s8 IGI_Base, bool ForceEDCCA, u8 AdapEn_RSSI, u8 IGI_LowerBound);
44922 +void dm_adaptivity_init(_adapter *pAdapter);
44923 +void dm_adaptivity(_adapter *pAdapter);
44924 +
44925 +#endif /* __DM_H__ */
44926 --- /dev/null
44927 +++ b/drivers/net/wireless/rtl8192cu/hal/hal_com.c
44928 @@ -0,0 +1,371 @@
44929 +/******************************************************************************
44930 + *
44931 + * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
44932 + *
44933 + * This program is free software; you can redistribute it and/or modify it
44934 + * under the terms of version 2 of the GNU General Public License as
44935 + * published by the Free Software Foundation.
44936 + *
44937 + * This program is distributed in the hope that it will be useful, but WITHOUT
44938 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
44939 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
44940 + * more details.
44941 + *
44942 + * You should have received a copy of the GNU General Public License along with
44943 + * this program; if not, write to the Free Software Foundation, Inc.,
44944 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
44945 + *
44946 + *
44947 + ******************************************************************************/
44948 +#include <drv_conf.h>
44949 +#include <osdep_service.h>
44950 +#include <drv_types.h>
44951 +#include <rtw_byteorder.h>
44952 +
44953 +#include <hal_intf.h>
44954 +#include <hal_com.h>
44955 +
44956 +#ifdef CONFIG_RTL8192C
44957 +#include <rtl8192c_hal.h>
44958 +#endif
44959 +#ifdef CONFIG_RTL8192D
44960 +#include <rtl8192d_hal.h>
44961 +#endif
44962 +
44963 +#define _HAL_COM_C_
44964 +
44965 +//============================================================
44966 +// Global var
44967 +//============================================================
44968 +u32 OFDMSwingTable[OFDM_TABLE_SIZE_92D] = {
44969 + 0x7f8001fe, // 0, +6.0dB
44970 + 0x788001e2, // 1, +5.5dB
44971 + 0x71c001c7, // 2, +5.0dB
44972 + 0x6b8001ae, // 3, +4.5dB
44973 + 0x65400195, // 4, +4.0dB
44974 + 0x5fc0017f, // 5, +3.5dB
44975 + 0x5a400169, // 6, +3.0dB
44976 + 0x55400155, // 7, +2.5dB
44977 + 0x50800142, // 8, +2.0dB
44978 + 0x4c000130, // 9, +1.5dB
44979 + 0x47c0011f, // 10, +1.0dB
44980 + 0x43c0010f, // 11, +0.5dB
44981 + 0x40000100, // 12, +0dB
44982 + 0x3c8000f2, // 13, -0.5dB
44983 + 0x390000e4, // 14, -1.0dB
44984 + 0x35c000d7, // 15, -1.5dB
44985 + 0x32c000cb, // 16, -2.0dB
44986 + 0x300000c0, // 17, -2.5dB
44987 + 0x2d4000b5, // 18, -3.0dB
44988 + 0x2ac000ab, // 19, -3.5dB
44989 + 0x288000a2, // 20, -4.0dB
44990 + 0x26000098, // 21, -4.5dB
44991 + 0x24000090, // 22, -5.0dB
44992 + 0x22000088, // 23, -5.5dB
44993 + 0x20000080, // 24, -6.0dB
44994 + 0x1e400079, // 25, -6.5dB
44995 + 0x1c800072, // 26, -7.0dB
44996 + 0x1b00006c, // 27. -7.5dB
44997 + 0x19800066, // 28, -8.0dB
44998 + 0x18000060, // 29, -8.5dB
44999 + 0x16c0005b, // 30, -9.0dB
45000 + 0x15800056, // 31, -9.5dB
45001 + 0x14400051, // 32, -10.0dB
45002 + 0x1300004c, // 33, -10.5dB
45003 + 0x12000048, // 34, -11.0dB
45004 + 0x11000044, // 35, -11.5dB
45005 + 0x10000040, // 36, -12.0dB
45006 + 0x0f00003c,// 37, -12.5dB
45007 + 0x0e400039,// 38, -13.0dB
45008 + 0x0d800036,// 39, -13.5dB
45009 + 0x0cc00033,// 40, -14.0dB
45010 + 0x0c000030,// 41, -14.5dB
45011 + 0x0b40002d,// 42, -15.0dB
45012 +};
45013 +
45014 +
45015 +u8 CCKSwingTable_Ch1_Ch13[CCK_TABLE_SIZE][8] = {
45016 + {0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04}, // 0, +0dB
45017 + {0x33, 0x32, 0x2b, 0x23, 0x1a, 0x11, 0x08, 0x04}, // 1, -0.5dB
45018 + {0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x03}, // 2, -1.0dB
45019 + {0x2d, 0x2d, 0x27, 0x1f, 0x18, 0x0f, 0x08, 0x03}, // 3, -1.5dB
45020 + {0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03}, // 4, -2.0dB
45021 + {0x28, 0x28, 0x22, 0x1c, 0x15, 0x0d, 0x07, 0x03}, // 5, -2.5dB
45022 + {0x26, 0x25, 0x21, 0x1b, 0x14, 0x0d, 0x06, 0x03}, // 6, -3.0dB
45023 + {0x24, 0x23, 0x1f, 0x19, 0x13, 0x0c, 0x06, 0x03}, // 7, -3.5dB
45024 + {0x22, 0x21, 0x1d, 0x18, 0x11, 0x0b, 0x06, 0x02}, // 8, -4.0dB
45025 + {0x20, 0x20, 0x1b, 0x16, 0x11, 0x08, 0x05, 0x02}, // 9, -4.5dB
45026 + {0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02}, // 10, -5.0dB
45027 + {0x1d, 0x1c, 0x18, 0x14, 0x0f, 0x0a, 0x05, 0x02}, // 11, -5.5dB
45028 + {0x1b, 0x1a, 0x17, 0x13, 0x0e, 0x09, 0x04, 0x02}, // 12, -6.0dB
45029 + {0x1a, 0x19, 0x16, 0x12, 0x0d, 0x09, 0x04, 0x02}, // 13, -6.5dB
45030 + {0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02}, // 14, -7.0dB
45031 + {0x17, 0x16, 0x13, 0x10, 0x0c, 0x08, 0x04, 0x02}, // 15, -7.5dB
45032 + {0x16, 0x15, 0x12, 0x0f, 0x0b, 0x07, 0x04, 0x01}, // 16, -8.0dB
45033 + {0x14, 0x14, 0x11, 0x0e, 0x0b, 0x07, 0x03, 0x02}, // 17, -8.5dB
45034 + {0x13, 0x13, 0x10, 0x0d, 0x0a, 0x06, 0x03, 0x01}, // 18, -9.0dB
45035 + {0x12, 0x12, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, // 19, -9.5dB
45036 + {0x11, 0x11, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, // 20, -10.0dB
45037 + {0x10, 0x10, 0x0e, 0x0b, 0x08, 0x05, 0x03, 0x01}, // 21, -10.5dB
45038 + {0x0f, 0x0f, 0x0d, 0x0b, 0x08, 0x05, 0x03, 0x01}, // 22, -11.0dB
45039 + {0x0e, 0x0e, 0x0c, 0x0a, 0x08, 0x05, 0x02, 0x01}, // 23, -11.5dB
45040 + {0x0d, 0x0d, 0x0c, 0x0a, 0x07, 0x05, 0x02, 0x01}, // 24, -12.0dB
45041 + {0x0d, 0x0c, 0x0b, 0x09, 0x07, 0x04, 0x02, 0x01}, // 25, -12.5dB
45042 + {0x0c, 0x0c, 0x0a, 0x09, 0x06, 0x04, 0x02, 0x01}, // 26, -13.0dB
45043 + {0x0b, 0x0b, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x01}, // 27, -13.5dB
45044 + {0x0b, 0x0a, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01}, // 28, -14.0dB
45045 + {0x0a, 0x0a, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01}, // 29, -14.5dB
45046 + {0x0a, 0x09, 0x08, 0x07, 0x05, 0x03, 0x02, 0x01}, // 30, -15.0dB
45047 + {0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01}, // 31, -15.5dB
45048 + {0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01} // 32, -16.0dB
45049 +};
45050 +
45051 +
45052 +u8 CCKSwingTable_Ch14 [CCK_TABLE_SIZE][8]= {
45053 + {0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00}, // 0, +0dB
45054 + {0x33, 0x32, 0x2b, 0x19, 0x00, 0x00, 0x00, 0x00}, // 1, -0.5dB
45055 + {0x30, 0x2f, 0x29, 0x18, 0x00, 0x00, 0x00, 0x00}, // 2, -1.0dB
45056 + {0x2d, 0x2d, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00}, // 3, -1.5dB
45057 + {0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00}, // 4, -2.0dB
45058 + {0x28, 0x28, 0x24, 0x14, 0x00, 0x00, 0x00, 0x00}, // 5, -2.5dB
45059 + {0x26, 0x25, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00}, // 6, -3.0dB
45060 + {0x24, 0x23, 0x1f, 0x12, 0x00, 0x00, 0x00, 0x00}, // 7, -3.5dB
45061 + {0x22, 0x21, 0x1d, 0x11, 0x00, 0x00, 0x00, 0x00}, // 8, -4.0dB
45062 + {0x20, 0x20, 0x1b, 0x10, 0x00, 0x00, 0x00, 0x00}, // 9, -4.5dB
45063 + {0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00}, // 10, -5.0dB
45064 + {0x1d, 0x1c, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, // 11, -5.5dB
45065 + {0x1b, 0x1a, 0x17, 0x0e, 0x00, 0x00, 0x00, 0x00}, // 12, -6.0dB
45066 + {0x1a, 0x19, 0x16, 0x0d, 0x00, 0x00, 0x00, 0x00}, // 13, -6.5dB
45067 + {0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00}, // 14, -7.0dB
45068 + {0x17, 0x16, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00}, // 15, -7.5dB
45069 + {0x16, 0x15, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00}, // 16, -8.0dB
45070 + {0x14, 0x14, 0x11, 0x0a, 0x00, 0x00, 0x00, 0x00}, // 17, -8.5dB
45071 + {0x13, 0x13, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00}, // 18, -9.0dB
45072 + {0x12, 0x12, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, // 19, -9.5dB
45073 + {0x11, 0x11, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, // 20, -10.0dB
45074 + {0x10, 0x10, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00}, // 21, -10.5dB
45075 + {0x0f, 0x0f, 0x0d, 0x08, 0x00, 0x00, 0x00, 0x00}, // 22, -11.0dB
45076 + {0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00}, // 23, -11.5dB
45077 + {0x0d, 0x0d, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00}, // 24, -12.0dB
45078 + {0x0d, 0x0c, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x00}, // 25, -12.5dB
45079 + {0x0c, 0x0c, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00}, // 26, -13.0dB
45080 + {0x0b, 0x0b, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00}, // 27, -13.5dB
45081 + {0x0b, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00}, // 28, -14.0dB
45082 + {0x0a, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00}, // 29, -14.5dB
45083 + {0x0a, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00}, // 30, -15.0dB
45084 + {0x09, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00}, // 31, -15.5dB
45085 + {0x09, 0x08, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00} // 32, -16.0dB
45086 +};
45087 +
45088 +
45089 +#ifdef CONFIG_CHIP_VER_INTEGRATION
45090 +void dump_chip_info(HAL_VERSION ChipVersion)
45091 +{
45092 + if(IS_81XXC(ChipVersion)){
45093 + DBG_871X("Chip Version Info: %s_",IS_92C_SERIAL(ChipVersion)?"CHIP_8192C":"CHIP_8188C");
45094 + }
45095 + else if(IS_92D(ChipVersion)){
45096 + DBG_871X("Chip Version Info: CHIP_8192D_");
45097 + }
45098 + else if(IS_8723_SERIES(ChipVersion)){
45099 + DBG_871X("Chip Version Info: CHIP_8723A_");
45100 + }
45101 + else if(IS_8188E(ChipVersion)){
45102 + DBG_871X("Chip Version Info: CHIP_8188E_");
45103 + }
45104 +
45105 + DBG_871X("%s_",IS_NORMAL_CHIP(ChipVersion)?"Normal_Chip":"Test_Chip");
45106 + DBG_871X("%s_",IS_CHIP_VENDOR_TSMC(ChipVersion)?"TSMC":"UMC");
45107 + if(IS_A_CUT(ChipVersion)) DBG_871X("A_CUT_");
45108 + else if(IS_B_CUT(ChipVersion)) DBG_871X("B_CUT_");
45109 + else if(IS_C_CUT(ChipVersion)) DBG_871X("C_CUT_");
45110 + else if(IS_D_CUT(ChipVersion)) DBG_871X("D_CUT_");
45111 + else if(IS_E_CUT(ChipVersion)) DBG_871X("E_CUT_");
45112 + else DBG_871X("UNKNOWN_CUT(%d)_",ChipVersion.CUTVersion);
45113 +
45114 + if(IS_1T1R(ChipVersion)) DBG_871X("1T1R_");
45115 + else if(IS_1T2R(ChipVersion)) DBG_871X("1T2R_");
45116 + else if(IS_2T2R(ChipVersion)) DBG_871X("2T2R_");
45117 + else DBG_871X("UNKNOWN_RFTYPE(%d)_",ChipVersion.RFType);
45118 +
45119 +
45120 + DBG_871X("RomVer(%d)\n",ChipVersion.ROMVer);
45121 +}
45122 +
45123 +#endif
45124 +
45125 +#define EEPROM_CHANNEL_PLAN_BY_HW_MASK 0x80
45126 +
45127 +u8 //return the final channel plan decision
45128 +hal_com_get_channel_plan(
45129 + IN PADAPTER padapter,
45130 + IN u8 hw_channel_plan, //channel plan from HW (efuse/eeprom)
45131 + IN u8 sw_channel_plan, //channel plan from SW (registry/module param)
45132 + IN u8 def_channel_plan, //channel plan used when the former two is invalid
45133 + IN BOOLEAN AutoLoadFail
45134 + )
45135 +{
45136 + u8 swConfig;
45137 + u8 chnlPlan;
45138 +
45139 + swConfig = _TRUE;
45140 + if (!AutoLoadFail)
45141 + {
45142 + if (!rtw_is_channel_plan_valid(sw_channel_plan))
45143 + swConfig = _FALSE;
45144 + if (hw_channel_plan & EEPROM_CHANNEL_PLAN_BY_HW_MASK)
45145 + swConfig = _FALSE;
45146 + }
45147 +
45148 + if (swConfig == _TRUE)
45149 + chnlPlan = sw_channel_plan;
45150 + else
45151 + chnlPlan = hw_channel_plan & (~EEPROM_CHANNEL_PLAN_BY_HW_MASK);
45152 +
45153 + if (!rtw_is_channel_plan_valid(chnlPlan))
45154 + chnlPlan = def_channel_plan;
45155 +
45156 + return chnlPlan;
45157 +}
45158 +
45159 +u8 MRateToHwRate(u8 rate)
45160 +{
45161 + u8 ret = DESC_RATE1M;
45162 +
45163 + switch(rate)
45164 + {
45165 + // CCK and OFDM non-HT rates
45166 + case IEEE80211_CCK_RATE_1MB: ret = DESC_RATE1M; break;
45167 + case IEEE80211_CCK_RATE_2MB: ret = DESC_RATE2M; break;
45168 + case IEEE80211_CCK_RATE_5MB: ret = DESC_RATE5_5M; break;
45169 + case IEEE80211_CCK_RATE_11MB: ret = DESC_RATE11M; break;
45170 + case IEEE80211_OFDM_RATE_6MB: ret = DESC_RATE6M; break;
45171 + case IEEE80211_OFDM_RATE_9MB: ret = DESC_RATE9M; break;
45172 + case IEEE80211_OFDM_RATE_12MB: ret = DESC_RATE12M; break;
45173 + case IEEE80211_OFDM_RATE_18MB: ret = DESC_RATE18M; break;
45174 + case IEEE80211_OFDM_RATE_24MB: ret = DESC_RATE24M; break;
45175 + case IEEE80211_OFDM_RATE_36MB: ret = DESC_RATE36M; break;
45176 + case IEEE80211_OFDM_RATE_48MB: ret = DESC_RATE48M; break;
45177 + case IEEE80211_OFDM_RATE_54MB: ret = DESC_RATE54M; break;
45178 +
45179 + // HT rates since here
45180 + //case MGN_MCS0: ret = DESC_RATEMCS0; break;
45181 + //case MGN_MCS1: ret = DESC_RATEMCS1; break;
45182 + //case MGN_MCS2: ret = DESC_RATEMCS2; break;
45183 + //case MGN_MCS3: ret = DESC_RATEMCS3; break;
45184 + //case MGN_MCS4: ret = DESC_RATEMCS4; break;
45185 + //case MGN_MCS5: ret = DESC_RATEMCS5; break;
45186 + //case MGN_MCS6: ret = DESC_RATEMCS6; break;
45187 + //case MGN_MCS7: ret = DESC_RATEMCS7; break;
45188 +
45189 + default: break;
45190 + }
45191 +
45192 + return ret;
45193 +}
45194 +
45195 +void HalSetBrateCfg(
45196 + IN PADAPTER Adapter,
45197 + IN u8 *mBratesOS,
45198 + OUT u16 *pBrateCfg)
45199 +{
45200 + u8 i, is_brate, brate;
45201 +
45202 + for(i=0;i<NDIS_802_11_LENGTH_RATES_EX;i++)
45203 + {
45204 + is_brate = mBratesOS[i] & IEEE80211_BASIC_RATE_MASK;
45205 + brate = mBratesOS[i] & 0x7f;
45206 +
45207 + if( is_brate )
45208 + {
45209 + switch(brate)
45210 + {
45211 + case IEEE80211_CCK_RATE_1MB: *pBrateCfg |= RATE_1M; break;
45212 + case IEEE80211_CCK_RATE_2MB: *pBrateCfg |= RATE_2M; break;
45213 + case IEEE80211_CCK_RATE_5MB: *pBrateCfg |= RATE_5_5M;break;
45214 + case IEEE80211_CCK_RATE_11MB: *pBrateCfg |= RATE_11M; break;
45215 + case IEEE80211_OFDM_RATE_6MB: *pBrateCfg |= RATE_6M; break;
45216 + case IEEE80211_OFDM_RATE_9MB: *pBrateCfg |= RATE_9M; break;
45217 + case IEEE80211_OFDM_RATE_12MB: *pBrateCfg |= RATE_12M; break;
45218 + case IEEE80211_OFDM_RATE_18MB: *pBrateCfg |= RATE_18M; break;
45219 + case IEEE80211_OFDM_RATE_24MB: *pBrateCfg |= RATE_24M; break;
45220 + case IEEE80211_OFDM_RATE_36MB: *pBrateCfg |= RATE_36M; break;
45221 + case IEEE80211_OFDM_RATE_48MB: *pBrateCfg |= RATE_48M; break;
45222 + case IEEE80211_OFDM_RATE_54MB: *pBrateCfg |= RATE_54M; break;
45223 + }
45224 + }
45225 + }
45226 +}
45227 +
45228 +void hal_init_macaddr(_adapter *adapter)
45229 +{
45230 + rtw_hal_set_hwreg(adapter, HW_VAR_MAC_ADDR, adapter->eeprompriv.mac_addr);
45231 +#ifdef CONFIG_CONCURRENT_MODE
45232 + if (adapter->pbuddy_adapter)
45233 + rtw_hal_set_hwreg(adapter->pbuddy_adapter, HW_VAR_MAC_ADDR, adapter->pbuddy_adapter->eeprompriv.mac_addr);
45234 +#endif
45235 +}
45236 +
45237 +/*
45238 +* C2H event format:
45239 +* Field TRIGGER CONTENT CMD_SEQ CMD_LEN CMD_ID
45240 +* BITS [127:120] [119:16] [15:8] [7:4] [3:0]
45241 +*/
45242 +
45243 +void c2h_evt_clear(_adapter *adapter)
45244 +{
45245 + rtw_write8(adapter, REG_C2HEVT_CLEAR, C2H_EVT_HOST_CLOSE);
45246 +}
45247 +
45248 +s32 c2h_evt_read(_adapter *adapter, u8 *buf)
45249 +{
45250 + s32 ret = _FAIL;
45251 + struct c2h_evt_hdr *c2h_evt;
45252 + int i;
45253 + u8 trigger;
45254 +
45255 + if (buf == NULL)
45256 + goto exit;
45257 +
45258 + trigger = rtw_read8(adapter, REG_C2HEVT_CLEAR);
45259 +
45260 + if (trigger == C2H_EVT_HOST_CLOSE) {
45261 + goto exit; /* Not ready */
45262 + } else if (trigger != C2H_EVT_FW_CLOSE) {
45263 + goto clear_evt; /* Not a valid value */
45264 + }
45265 +
45266 + c2h_evt = (struct c2h_evt_hdr *)buf;
45267 +
45268 + _rtw_memset(c2h_evt, 0, 16);
45269 +
45270 + *buf = rtw_read8(adapter, REG_C2HEVT_MSG_NORMAL);
45271 + *(buf+1) = rtw_read8(adapter, REG_C2HEVT_MSG_NORMAL + 1);
45272 +
45273 + RT_PRINT_DATA(_module_hal_init_c_, _drv_info_, "c2h_evt_read(): ",
45274 + &c2h_evt , sizeof(c2h_evt));
45275 +
45276 + if (0) {
45277 + DBG_871X("%s id:%u, len:%u, seq:%u, trigger:0x%02x\n", __func__
45278 + , c2h_evt->id, c2h_evt->plen, c2h_evt->seq, trigger);
45279 + }
45280 +
45281 + /* Read the content */
45282 + for (i = 0; i < c2h_evt->plen; i++)
45283 + c2h_evt->payload[i] = rtw_read8(adapter, REG_C2HEVT_MSG_NORMAL + sizeof(*c2h_evt) + i);
45284 +
45285 + RT_PRINT_DATA(_module_hal_init_c_, _drv_info_, "c2h_evt_read(): Command Content:\n",
45286 + c2h_evt->payload, c2h_evt->plen);
45287 +
45288 + ret = _SUCCESS;
45289 +
45290 +clear_evt:
45291 + /*
45292 + * Clear event to notify FW we have read the command.
45293 + * If this field isn't clear, the FW won't update the next command message.
45294 + */
45295 + c2h_evt_clear(adapter);
45296 +exit:
45297 + return ret;
45298 +}
45299 +
45300 --- a/drivers/net/wireless/rtl8192cu/hal/hal_init.c
45301 +++ /dev/null
45302 @@ -1,120 +0,0 @@
45303 -/******************************************************************************
45304 - *
45305 - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
45306 - *
45307 - * This program is free software; you can redistribute it and/or modify it
45308 - * under the terms of version 2 of the GNU General Public License as
45309 - * published by the Free Software Foundation.
45310 - *
45311 - * This program is distributed in the hope that it will be useful, but WITHOUT
45312 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
45313 - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
45314 - * more details.
45315 - *
45316 - * You should have received a copy of the GNU General Public License along with
45317 - * this program; if not, write to the Free Software Foundation, Inc.,
45318 - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
45319 - *
45320 - *
45321 - ******************************************************************************/
45322 -
45323 -#define _HAL_INIT_C_
45324 -#include <drv_conf.h>
45325 -#include <osdep_service.h>
45326 -#include <drv_types.h>
45327 -#include <rtw_byteorder.h>
45328 -
45329 -#include <hal_init.h>
45330 -
45331 -#ifdef CONFIG_SDIO_HCI
45332 - #include <sdio_hal.h>
45333 -#elif defined(CONFIG_USB_HCI)
45334 - #include <usb_hal.h>
45335 -#endif
45336 -
45337 -void intf_chip_configure(_adapter *padapter)
45338 -{
45339 - if(padapter->HalFunc.intf_chip_configure)
45340 - padapter->HalFunc.intf_chip_configure(padapter);
45341 -}
45342 -
45343 -void intf_read_chip_info(_adapter *padapter)
45344 -{
45345 - if(padapter->HalFunc.read_adapter_info)
45346 - padapter->HalFunc.read_adapter_info(padapter);
45347 -}
45348 -
45349 -void intf_read_chip_version(_adapter *padapter)
45350 -{
45351 - if(padapter->HalFunc.read_chip_version)
45352 - padapter->HalFunc.read_chip_version(padapter);
45353 -}
45354 -
45355 -void rtw_dm_init(_adapter *padapter)
45356 -{
45357 - if(padapter->HalFunc.dm_init)
45358 - padapter->HalFunc.dm_init(padapter);
45359 -}
45360 -
45361 -void rtw_sw_led_init(_adapter *padapter)
45362 -{
45363 - if(padapter->HalFunc.InitSwLeds)
45364 - padapter->HalFunc.InitSwLeds(padapter);
45365 -}
45366 -
45367 -void rtw_sw_led_deinit(_adapter *padapter)
45368 -{
45369 - if(padapter->HalFunc.DeInitSwLeds)
45370 - padapter->HalFunc.DeInitSwLeds(padapter);
45371 -}
45372 -
45373 -uint rtw_hal_init(_adapter *padapter)
45374 -{
45375 - uint status = _SUCCESS;
45376 -
45377 - padapter->hw_init_completed=_FALSE;
45378 -
45379 - status = padapter->HalFunc.hal_init(padapter);
45380 -
45381 - if(status == _SUCCESS){
45382 - padapter->hw_init_completed = _TRUE;
45383 - }
45384 - else{
45385 - padapter->hw_init_completed = _FALSE;
45386 - RT_TRACE(_module_hal_init_c_,_drv_err_,("rtw_hal_init: hal__init fail\n"));
45387 - }
45388 -
45389 - RT_TRACE(_module_hal_init_c_,_drv_err_,("-rtl871x_hal_init:status=0x%x\n",status));
45390 -
45391 - return status;
45392 -
45393 -}
45394 -
45395 -uint rtw_hal_deinit(_adapter *padapter)
45396 -{
45397 - uint status = _SUCCESS;
45398 -
45399 -_func_enter_;
45400 -
45401 - status = padapter->HalFunc.hal_deinit(padapter);
45402 -
45403 - if(status == _SUCCESS){
45404 - padapter->hw_init_completed = _FALSE;
45405 - }
45406 - else
45407 - {
45408 - RT_TRACE(_module_hal_init_c_,_drv_err_,("\n rtw_hal_deinit: hal_init fail\n"));
45409 - }
45410 -
45411 -_func_exit_;
45412 -
45413 - return status;
45414 -
45415 -}
45416 -#ifdef DBG_CONFIG_ERROR_DETECT
45417 -void rtw_sreset_init(_adapter *padapter)
45418 -{
45419 - if(padapter->HalFunc.sreset_init_value)
45420 - padapter->HalFunc.sreset_init_value(padapter);
45421 -}
45422 -#endif
45423 --- /dev/null
45424 +++ b/drivers/net/wireless/rtl8192cu/hal/hal_intf.c
45425 @@ -0,0 +1,546 @@
45426 +/******************************************************************************
45427 + *
45428 + * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
45429 + *
45430 + * This program is free software; you can redistribute it and/or modify it
45431 + * under the terms of version 2 of the GNU General Public License as
45432 + * published by the Free Software Foundation.
45433 + *
45434 + * This program is distributed in the hope that it will be useful, but WITHOUT
45435 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
45436 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
45437 + * more details.
45438 + *
45439 + * You should have received a copy of the GNU General Public License along with
45440 + * this program; if not, write to the Free Software Foundation, Inc.,
45441 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
45442 + *
45443 + *
45444 + ******************************************************************************/
45445 +
45446 +#define _HAL_INTF_C_
45447 +#include <drv_conf.h>
45448 +#include <osdep_service.h>
45449 +#include <drv_types.h>
45450 +#include <rtw_byteorder.h>
45451 +
45452 +#include <hal_intf.h>
45453 +
45454 +#ifdef CONFIG_SDIO_HCI
45455 + #include <sdio_hal.h>
45456 +#elif defined(CONFIG_USB_HCI)
45457 + #include <usb_hal.h>
45458 +#elif defined(CONFIG_GSPI_HCI)
45459 + #include <gspi_hal.h>
45460 +#endif
45461 +
45462 +void rtw_hal_chip_configure(_adapter *padapter)
45463 +{
45464 + if(padapter->HalFunc.intf_chip_configure)
45465 + padapter->HalFunc.intf_chip_configure(padapter);
45466 +}
45467 +
45468 +void rtw_hal_read_chip_info(_adapter *padapter)
45469 +{
45470 + if(padapter->HalFunc.read_adapter_info)
45471 + padapter->HalFunc.read_adapter_info(padapter);
45472 +}
45473 +
45474 +void rtw_hal_read_chip_version(_adapter *padapter)
45475 +{
45476 + if(padapter->HalFunc.read_chip_version)
45477 + padapter->HalFunc.read_chip_version(padapter);
45478 +}
45479 +
45480 +void rtw_hal_def_value_init(_adapter *padapter)
45481 +{
45482 + if(padapter->HalFunc.init_default_value)
45483 + padapter->HalFunc.init_default_value(padapter);
45484 +}
45485 +
45486 +void rtw_hal_free_data(_adapter *padapter)
45487 +{
45488 + if(padapter->HalFunc.free_hal_data)
45489 + padapter->HalFunc.free_hal_data(padapter);
45490 +}
45491 +
45492 +void rtw_hal_dm_init(_adapter *padapter)
45493 +{
45494 + if(padapter->HalFunc.dm_init)
45495 + padapter->HalFunc.dm_init(padapter);
45496 +}
45497 +
45498 +void rtw_hal_dm_deinit(_adapter *padapter)
45499 +{
45500 + // cancel dm timer
45501 + if(padapter->HalFunc.dm_deinit)
45502 + padapter->HalFunc.dm_deinit(padapter);
45503 +}
45504 +
45505 +void rtw_hal_sw_led_init(_adapter *padapter)
45506 +{
45507 + if(padapter->HalFunc.InitSwLeds)
45508 + padapter->HalFunc.InitSwLeds(padapter);
45509 +}
45510 +
45511 +void rtw_hal_sw_led_deinit(_adapter *padapter)
45512 +{
45513 + if(padapter->HalFunc.DeInitSwLeds)
45514 + padapter->HalFunc.DeInitSwLeds(padapter);
45515 +}
45516 +
45517 +uint rtw_hal_init(_adapter *padapter)
45518 +{
45519 + uint status = _SUCCESS;
45520 +
45521 + if(padapter->hw_init_completed == _TRUE)
45522 + {
45523 + DBG_871X("rtw_hal_init: hw_init_completed == _TRUE\n");
45524 + goto success;
45525 + }
45526 +#ifdef CONFIG_DEINIT_BEFORE_INIT
45527 + status = padapter->HalFunc.hal_deinit(padapter);
45528 + if(status != _SUCCESS){
45529 + DBG_871X("rtw_hal_init: hal_deinit before hal_init FAIL !!\n");
45530 + goto fail;
45531 + }
45532 +#endif
45533 +
45534 +#ifdef CONFIG_DUALMAC_CONCURRENT
45535 + // before init mac0, driver must init mac1 first to avoid usb rx error.
45536 + if((padapter->pbuddy_adapter != NULL) && (padapter->DualMacConcurrent == _TRUE)
45537 + && (padapter->adapter_type == PRIMARY_ADAPTER))
45538 + {
45539 + if(padapter->pbuddy_adapter->hw_init_completed == _TRUE)
45540 + {
45541 + DBG_871X("rtw_hal_init: pbuddy_adapter hw_init_completed == _TRUE\n");
45542 + }
45543 + else
45544 + {
45545 +#ifdef CONFIG_DEINIT_BEFORE_INIT
45546 + status = padapter->HalFunc.hal_deinit(padapter->pbuddy_adapter);
45547 + if(status != _SUCCESS){
45548 + DBG_871X("rtw_hal_init: hal_deinit before hal_init FAIL !!(pbuddy_adapter)\n");
45549 + goto fail;
45550 + }
45551 +#endif
45552 + status = padapter->HalFunc.hal_init(padapter->pbuddy_adapter);
45553 + if(status == _SUCCESS){
45554 + padapter->pbuddy_adapter->hw_init_completed = _TRUE;
45555 + }
45556 + else{
45557 + padapter->pbuddy_adapter->hw_init_completed = _FALSE;
45558 + RT_TRACE(_module_hal_init_c_,_drv_err_,("rtw_hal_init: hal__init fail(pbuddy_adapter)\n"));
45559 + goto fail;
45560 + }
45561 + }
45562 + }
45563 +#else
45564 + if(adapter_to_dvobj(padapter)->DualMacMode == _TRUE)
45565 + {
45566 + if(padapter->pbuddy_adapter != NULL) {
45567 + if(padapter->pbuddy_adapter->hw_init_completed == _FALSE)
45568 + {
45569 +#ifdef CONFIG_DEINIT_BEFORE_INIT
45570 + status = padapter->HalFunc.hal_deinit(padapter->pbuddy_adapter);
45571 + if(status != _SUCCESS){
45572 + DBG_871X("rtw_hal_init: hal_deinit before hal_init FAIL !!(pbuddy_adapter)\n");
45573 + goto fail;
45574 + }
45575 +#endif
45576 + status = padapter->HalFunc.hal_init(padapter->pbuddy_adapter);
45577 + if(status == _SUCCESS){
45578 + padapter->pbuddy_adapter->hw_init_completed = _TRUE;
45579 + }
45580 + else{
45581 + padapter->pbuddy_adapter->hw_init_completed = _FALSE;
45582 + RT_TRACE(_module_hal_init_c_,_drv_err_,("rtw_hal_init: hal__init fail for another interface\n"));
45583 + }
45584 + }
45585 + }
45586 + }
45587 +#endif
45588 +
45589 + padapter->hw_init_completed=_FALSE;
45590 +
45591 + status = padapter->HalFunc.hal_init(padapter);
45592 +
45593 + if(status == _SUCCESS){
45594 + padapter->hw_init_completed = _TRUE;
45595 + }
45596 + else{
45597 + padapter->hw_init_completed = _FALSE;
45598 + RT_TRACE(_module_hal_init_c_,_drv_err_,("rtw_hal_init: hal__init fail\n"));
45599 + goto fail;
45600 + }
45601 +
45602 +success:
45603 +
45604 + if (padapter->registrypriv.notch_filter == 1)
45605 + rtw_hal_notch_filter(padapter, 1);
45606 +
45607 + rtw_hal_reset_security_engine(padapter);
45608 +
45609 + rtw_sec_restore_wep_key(padapter);
45610 +
45611 + init_hw_mlme_ext(padapter);
45612 +
45613 +fail:
45614 +
45615 + RT_TRACE(_module_hal_init_c_,_drv_err_,("-rtl871x_hal_init:status=0x%x\n",status));
45616 +
45617 + return status;
45618 +}
45619 +
45620 +uint rtw_hal_deinit(_adapter *padapter)
45621 +{
45622 + uint status = _SUCCESS;
45623 +
45624 +_func_enter_;
45625 +
45626 + status = padapter->HalFunc.hal_deinit(padapter);
45627 +
45628 + if(status == _SUCCESS){
45629 + padapter->hw_init_completed = _FALSE;
45630 + }
45631 + else
45632 + {
45633 + RT_TRACE(_module_hal_init_c_,_drv_err_,("\n rtw_hal_deinit: hal_init fail\n"));
45634 + }
45635 +
45636 +_func_exit_;
45637 +
45638 + return status;
45639 +}
45640 +
45641 +void rtw_hal_set_hwreg(_adapter *padapter, u8 variable, u8 *val)
45642 +{
45643 + if (padapter->HalFunc.SetHwRegHandler)
45644 + padapter->HalFunc.SetHwRegHandler(padapter, variable, val);
45645 +}
45646 +
45647 +void rtw_hal_get_hwreg(_adapter *padapter, u8 variable, u8 *val)
45648 +{
45649 + if (padapter->HalFunc.GetHwRegHandler)
45650 + padapter->HalFunc.GetHwRegHandler(padapter, variable, val);
45651 +}
45652 +
45653 +u8 rtw_hal_set_def_var(_adapter *padapter, HAL_DEF_VARIABLE eVariable, PVOID pValue)
45654 +{
45655 + if(padapter->HalFunc.SetHalDefVarHandler)
45656 + return padapter->HalFunc.SetHalDefVarHandler(padapter,eVariable,pValue);
45657 + return _FAIL;
45658 +}
45659 +
45660 +u8 rtw_hal_get_def_var(_adapter *padapter, HAL_DEF_VARIABLE eVariable, PVOID pValue)
45661 +{
45662 + if(padapter->HalFunc.GetHalDefVarHandler)
45663 + return padapter->HalFunc.GetHalDefVarHandler(padapter,eVariable,pValue);
45664 + return _FAIL;
45665 +}
45666 +
45667 +void rtw_hal_enable_interrupt(_adapter *padapter)
45668 +{
45669 + if (padapter->HalFunc.enable_interrupt)
45670 + padapter->HalFunc.enable_interrupt(padapter);
45671 + else
45672 + DBG_871X("%s: HalFunc.enable_interrupt is NULL!\n", __FUNCTION__);
45673 +
45674 +}
45675 +void rtw_hal_disable_interrupt(_adapter *padapter)
45676 +{
45677 + if (padapter->HalFunc.disable_interrupt)
45678 + padapter->HalFunc.disable_interrupt(padapter);
45679 + else
45680 + DBG_871X("%s: HalFunc.disable_interrupt is NULL!\n", __FUNCTION__);
45681 +
45682 +}
45683 +
45684 +u32 rtw_hal_inirp_init(_adapter *padapter)
45685 +{
45686 + u32 rst = _FAIL;
45687 + if(padapter->HalFunc.inirp_init)
45688 + rst = padapter->HalFunc.inirp_init(padapter);
45689 + else
45690 + DBG_871X(" %s HalFunc.inirp_init is NULL!!!\n",__FUNCTION__);
45691 + return rst;
45692 +}
45693 +
45694 +u32 rtw_hal_inirp_deinit(_adapter *padapter)
45695 +{
45696 +
45697 + if(padapter->HalFunc.inirp_deinit)
45698 + return padapter->HalFunc.inirp_deinit(padapter);
45699 +
45700 + return _FAIL;
45701 +
45702 +}
45703 +
45704 +u8 rtw_hal_intf_ps_func(_adapter *padapter,HAL_INTF_PS_FUNC efunc_id, u8* val)
45705 +{
45706 + if(padapter->HalFunc.interface_ps_func)
45707 + return padapter->HalFunc.interface_ps_func(padapter,efunc_id,val);
45708 + return _FAIL;
45709 +}
45710 +
45711 +s32 rtw_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe)
45712 +{
45713 + if(padapter->HalFunc.hal_xmitframe_enqueue)
45714 + return padapter->HalFunc.hal_xmitframe_enqueue(padapter, pxmitframe);
45715 +
45716 + return _FALSE;
45717 +}
45718 +
45719 +s32 rtw_hal_xmit(_adapter *padapter, struct xmit_frame *pxmitframe)
45720 +{
45721 + if(padapter->HalFunc.hal_xmit)
45722 + return padapter->HalFunc.hal_xmit(padapter, pxmitframe);
45723 +
45724 + return _FALSE;
45725 +}
45726 +
45727 +s32 rtw_hal_mgnt_xmit(_adapter *padapter, struct xmit_frame *pmgntframe)
45728 +{
45729 + s32 ret = _FAIL;
45730 + unsigned char *pframe;
45731 + struct rtw_ieee80211_hdr *pwlanhdr;
45732 +
45733 + pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
45734 + pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
45735 + _rtw_memcpy(pmgntframe->attrib.ra, pwlanhdr->addr1, ETH_ALEN);
45736 +
45737 +#ifdef CONFIG_IEEE80211W
45738 + if(padapter->securitypriv.binstallBIPkey == _TRUE)
45739 + {
45740 + if(IS_MCAST(pmgntframe->attrib.ra))
45741 + {
45742 + pmgntframe->attrib.encrypt = _BIP_;
45743 + //pmgntframe->attrib.bswenc = _TRUE;
45744 + }
45745 + else
45746 + {
45747 + pmgntframe->attrib.encrypt = _AES_;
45748 + pmgntframe->attrib.bswenc = _TRUE;
45749 + }
45750 + rtw_mgmt_xmitframe_coalesce(padapter, pmgntframe->pkt, pmgntframe);
45751 + }
45752 +#endif //CONFIG_IEEE80211W
45753 +
45754 + if(padapter->HalFunc.mgnt_xmit)
45755 + ret = padapter->HalFunc.mgnt_xmit(padapter, pmgntframe);
45756 + return ret;
45757 +}
45758 +
45759 +s32 rtw_hal_init_xmit_priv(_adapter *padapter)
45760 +{
45761 + if(padapter->HalFunc.init_xmit_priv != NULL)
45762 + return padapter->HalFunc.init_xmit_priv(padapter);
45763 + return _FAIL;
45764 +}
45765 +
45766 +void rtw_hal_free_xmit_priv(_adapter *padapter)
45767 +{
45768 + if(padapter->HalFunc.free_xmit_priv != NULL)
45769 + padapter->HalFunc.free_xmit_priv(padapter);
45770 +}
45771 +
45772 +s32 rtw_hal_init_recv_priv(_adapter *padapter)
45773 +{
45774 + if(padapter->HalFunc.init_recv_priv)
45775 + return padapter->HalFunc.init_recv_priv(padapter);
45776 +
45777 + return _FAIL;
45778 +}
45779 +
45780 +void rtw_hal_free_recv_priv(_adapter *padapter)
45781 +{
45782 + if(padapter->HalFunc.free_recv_priv)
45783 + padapter->HalFunc.free_recv_priv(padapter);
45784 +}
45785 +
45786 +void rtw_hal_update_ra_mask(_adapter *padapter, u32 mac_id)
45787 +{
45788 + if(padapter->HalFunc.UpdateRAMaskHandler)
45789 + padapter->HalFunc.UpdateRAMaskHandler(padapter,mac_id);
45790 +}
45791 +
45792 +void rtw_hal_add_ra_tid(_adapter *padapter, u32 bitmap, u8 arg)
45793 +{
45794 + if(padapter->HalFunc.Add_RateATid)
45795 + padapter->HalFunc.Add_RateATid(padapter, bitmap, arg);
45796 +}
45797 +
45798 +u32 rtw_hal_read_bbreg(_adapter *padapter, u32 RegAddr, u32 BitMask)
45799 +{
45800 + u32 data = 0;
45801 + if (padapter->HalFunc.read_bbreg)
45802 + data = padapter->HalFunc.read_bbreg(padapter, RegAddr, BitMask);
45803 + return data;
45804 +}
45805 +
45806 +void rtw_hal_write_bbreg(_adapter *padapter, u32 RegAddr, u32 BitMask, u32 Data)
45807 +{
45808 + if (padapter->HalFunc.write_bbreg)
45809 + padapter->HalFunc.write_bbreg(padapter, RegAddr, BitMask, Data);
45810 +}
45811 +
45812 +u32 rtw_hal_read_rfreg(_adapter *padapter, u32 eRFPath, u32 RegAddr, u32 BitMask)
45813 +{
45814 + u32 data = 0;
45815 + if (padapter->HalFunc.read_rfreg)
45816 + data = padapter->HalFunc.read_rfreg(padapter, eRFPath, RegAddr, BitMask);
45817 + return data;
45818 +}
45819 +
45820 +void rtw_hal_write_rfreg(_adapter *padapter, u32 eRFPath, u32 RegAddr, u32 BitMask, u32 Data)
45821 +{
45822 + if (padapter->HalFunc.write_rfreg)
45823 + padapter->HalFunc.write_rfreg(padapter, eRFPath, RegAddr, BitMask, Data);
45824 +}
45825 +
45826 +s32 rtw_hal_interrupt_handler(_adapter *padapter)
45827 +{
45828 + if(padapter->HalFunc.interrupt_handler)
45829 + return padapter->HalFunc.interrupt_handler(padapter);
45830 + return _FAIL;
45831 +}
45832 +
45833 +void rtw_hal_set_bwmode(_adapter *padapter, HT_CHANNEL_WIDTH Bandwidth, u8 Offset)
45834 +{
45835 + if(padapter->HalFunc.set_bwmode_handler)
45836 + padapter->HalFunc.set_bwmode_handler(padapter, Bandwidth, Offset);
45837 +}
45838 +
45839 +void rtw_hal_set_chan(_adapter *padapter, u8 channel)
45840 +{
45841 + if(padapter->HalFunc.set_channel_handler)
45842 + padapter->HalFunc.set_channel_handler(padapter, channel);
45843 +}
45844 +
45845 +void rtw_hal_dm_watchdog(_adapter *padapter)
45846 +{
45847 + if(padapter->HalFunc.hal_dm_watchdog)
45848 + padapter->HalFunc.hal_dm_watchdog(padapter);
45849 +}
45850 +
45851 +void rtw_hal_bcn_related_reg_setting(_adapter *padapter)
45852 +{
45853 + if(padapter->HalFunc.SetBeaconRelatedRegistersHandler)
45854 + padapter->HalFunc.SetBeaconRelatedRegistersHandler(padapter);
45855 +}
45856 +
45857 +#ifdef CONFIG_ANTENNA_DIVERSITY
45858 +u8 rtw_hal_antdiv_before_linked(_adapter *padapter)
45859 +{
45860 + if (padapter->HalFunc.AntDivBeforeLinkHandler)
45861 + return padapter->HalFunc.AntDivBeforeLinkHandler(padapter);
45862 + return _FALSE;
45863 +}
45864 +
45865 +void rtw_hal_antdiv_rssi_compared(_adapter *padapter, WLAN_BSSID_EX *dst, WLAN_BSSID_EX *src)
45866 +{
45867 + if (padapter->HalFunc.AntDivCompareHandler)
45868 + padapter->HalFunc.AntDivCompareHandler(padapter, dst, src);
45869 +}
45870 +#endif
45871 +
45872 +#ifdef CONFIG_HOSTAPD_MLME
45873 +s32 rtw_hal_hostap_mgnt_xmit_entry(_adapter *padapter, _pkt *pkt)
45874 +{
45875 + if (padapter->HalFunc.hostap_mgnt_xmit_entry)
45876 + return padapter->HalFunc.hostap_mgnt_xmit_entry(padapter, pkt);
45877 + return _FAIL;
45878 +}
45879 +#endif //CONFIG_HOSTAPD_MLME
45880 +
45881 +#ifdef DBG_CONFIG_ERROR_DETECT
45882 +void rtw_hal_sreset_init(_adapter *padapter)
45883 +{
45884 + if(padapter->HalFunc.sreset_init_value)
45885 + padapter->HalFunc.sreset_init_value(padapter);
45886 +}
45887 +
45888 +void rtw_hal_sreset_reset(_adapter *padapter)
45889 +{
45890 + padapter = GET_PRIMARY_ADAPTER(padapter);
45891 +
45892 + if(padapter->HalFunc.silentreset)
45893 + padapter->HalFunc.silentreset(padapter);
45894 +}
45895 +
45896 +void rtw_hal_sreset_reset_value(_adapter *padapter)
45897 +{
45898 + if(padapter->HalFunc.sreset_reset_value)
45899 + padapter->HalFunc.sreset_reset_value(padapter);
45900 +}
45901 +
45902 +void rtw_hal_sreset_xmit_status_check(_adapter *padapter)
45903 +{
45904 +#ifdef CONFIG_CONCURRENT_MODE
45905 + if (padapter->adapter_type != PRIMARY_ADAPTER)
45906 + return;
45907 +#endif
45908 + if(padapter->HalFunc.sreset_xmit_status_check)
45909 + padapter->HalFunc.sreset_xmit_status_check(padapter);
45910 +}
45911 +
45912 +void rtw_hal_sreset_linked_status_check(_adapter *padapter)
45913 +{
45914 + if(padapter->HalFunc.sreset_linked_status_check)
45915 + padapter->HalFunc.sreset_linked_status_check(padapter);
45916 +}
45917 +
45918 +u8 rtw_hal_sreset_get_wifi_status(_adapter *padapter)
45919 +{
45920 + u8 status = 0;
45921 + if(padapter->HalFunc.sreset_get_wifi_status)
45922 + status = padapter->HalFunc.sreset_get_wifi_status(padapter);
45923 + return status;
45924 +}
45925 +
45926 +bool rtw_hal_sreset_inprogress(_adapter *padapter)
45927 +{
45928 + bool inprogress = _FALSE;
45929 +
45930 + padapter = GET_PRIMARY_ADAPTER(padapter);
45931 +
45932 + if(padapter->HalFunc.sreset_inprogress)
45933 + inprogress = padapter->HalFunc.sreset_inprogress(padapter);
45934 + return inprogress;
45935 +}
45936 +#endif //DBG_CONFIG_ERROR_DETECT
45937 +
45938 +#ifdef CONFIG_IOL
45939 +int rtw_hal_iol_cmd(ADAPTER *adapter, struct xmit_frame *xmit_frame, u32 max_wating_ms)
45940 +{
45941 + if (adapter->HalFunc.IOL_exec_cmds_sync)
45942 + return adapter->HalFunc.IOL_exec_cmds_sync(adapter, xmit_frame, max_wating_ms);
45943 + return _FAIL;
45944 +}
45945 +#endif
45946 +
45947 +void rtw_hal_notch_filter(_adapter *adapter, bool enable)
45948 +{
45949 + if(adapter->HalFunc.hal_notch_filter)
45950 + adapter->HalFunc.hal_notch_filter(adapter,enable);
45951 +}
45952 +
45953 +void rtw_hal_reset_security_engine(_adapter * adapter)
45954 +{
45955 + if(adapter->HalFunc.hal_reset_security_engine)
45956 + adapter->HalFunc.hal_reset_security_engine(adapter);
45957 +}
45958 +
45959 +s32 rtw_hal_c2h_handler(_adapter *adapter, struct c2h_evt_hdr *c2h_evt)
45960 +{
45961 + s32 ret = _FAIL;
45962 + if (adapter->HalFunc.c2h_handler)
45963 + ret = adapter->HalFunc.c2h_handler(adapter, c2h_evt);
45964 + return ret;
45965 +}
45966 +
45967 +c2h_id_filter rtw_hal_c2h_id_filter_ccx(_adapter *adapter)
45968 +{
45969 + return adapter->HalFunc.c2h_id_filter_ccx;
45970 +}
45971 +
45972 --- a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_cmd.c
45973 +++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_cmd.c
45974 @@ -16,8 +16,7 @@
45975 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
45976 *
45977 *
45978 -
45979 -******************************************************************************/
45980 + ******************************************************************************/
45981 #define _RTL8192C_CMD_C_
45982
45983 #include <drv_conf.h>
45984 @@ -33,67 +32,12 @@
45985 #include <rtl8192c_hal.h>
45986
45987
45988 -#if 0
45989 -static BOOLEAN
45990 -CheckWriteMSG(
45991 - IN PADAPTER Adapter,
45992 - IN u8 BoxNum
45993 -)
45994 -{
45995 - u8 valHMETFR;
45996 - BOOLEAN Result = _FALSE;
45997 -
45998 - valHMETFR = rtw_read8(Adapter, REG_HMETFR);
45999 -
46000 - //DbgPrint("CheckWriteH2C(): Reg[0x%2x] = %x\n",REG_HMETFR, valHMETFR);
46001 -
46002 - if(((valHMETFR>>BoxNum)&BIT0) == 1)
46003 - Result = _TRUE;
46004 -
46005 - return Result;
46006 -
46007 -}
46008 -
46009 -static BOOLEAN CheckFwReadLastMSG(
46010 - IN PADAPTER Adapter,
46011 - IN u8 BoxNum
46012 -)
46013 -{
46014 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
46015 - u8 valHMETFR, valMCUTST_1;
46016 - BOOLEAN Result = _FALSE;
46017 -
46018 - valHMETFR = rtw_read8(Adapter, REG_HMETFR);
46019 - valMCUTST_1 = rtw_read8(Adapter, (REG_MCUTST_1+BoxNum));
46020 -
46021 - //DbgPrint("REG[%x] = %x, REG[%x] = %x\n",
46022 - // REG_HMETFR, valHMETFR, REG_MCUTST_1+BoxNum, valMCUTST_1 );
46023 -
46024 - // Do not seperate to 91C and 88C, we use the same setting. Suggested by SD4 Filen. 2009.12.03.
46025 - if(IS_NORMAL_CHIP(pHalData->VersionID))
46026 - {
46027 - if(((valHMETFR>>BoxNum)&BIT0) == 0)
46028 - Result = _TRUE;
46029 - }
46030 - else
46031 - {
46032 - if((((valHMETFR>>BoxNum)&BIT0) == 0) && (valMCUTST_1 == 0))
46033 - {
46034 - Result = _TRUE;
46035 - }
46036 - }
46037 -
46038 - return Result;
46039 -}
46040 -#endif
46041 -
46042 -
46043 #define RTL92C_MAX_H2C_BOX_NUMS 4
46044 #define RTL92C_MAX_CMD_LEN 5
46045 #define MESSAGE_BOX_SIZE 4
46046 #define EX_MESSAGE_BOX_SIZE 2
46047
46048 -static u8 _is_fw_read_cmd_down(_adapter* padapter, u8 isvern, u8 msgbox_num)
46049 +static u8 _is_fw_read_cmd_down(_adapter* padapter, u8 msgbox_num)
46050 {
46051 u8 read_down = _FALSE;
46052 int retry_cnts = 100;
46053 @@ -103,17 +47,10 @@ static u8 _is_fw_read_cmd_down(_adapter*
46054 // DBG_8192C(" _is_fw_read_cmd_down ,isnormal_chip(%x),reg_1cc(%x),msg_box(%d)...\n",isvern,rtw_read8(padapter,REG_HMETFR),msgbox_num);
46055
46056 do{
46057 - valid = rtw_read8(padapter,REG_HMETFR) & BIT(msgbox_num);
46058 - if(isvern){
46059 - if(0 == valid ){
46060 - read_down = _TRUE;
46061 - }
46062 - }
46063 - else{
46064 - if((0 == valid) && (0 == rtw_read8(padapter, REG_MCUTST_1+msgbox_num))){
46065 - read_down = _TRUE;
46066 - }
46067 - }
46068 + valid = rtw_read8(padapter,REG_HMETFR) & BIT(msgbox_num);
46069 + if(0 == valid ){
46070 + read_down = _TRUE;
46071 + }
46072 }while( (!read_down) && (retry_cnts--));
46073
46074 return read_down;
46075 @@ -129,19 +66,28 @@ static u8 _is_fw_read_cmd_down(_adapter*
46076 ******************************************/
46077 int rtl8192c_FillH2CCmd(_adapter* padapter, u8 ElementID, u32 CmdLen, u8* pCmdBuffer)
46078 {
46079 -#if 1
46080 u8 bcmd_down = _FALSE;
46081 int retry_cnts = 100;
46082 u8 h2c_box_num;
46083 u32 msgbox_addr;
46084 u32 msgbox_ex_addr;
46085 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
46086 - u8 isnchip =IS_NORMAL_CHIP(pHalData->VersionID);
46087 u32 h2c_cmd = 0;
46088 u16 h2c_cmd_ex = 0;
46089 int ret = _FAIL;
46090
46091 - _func_enter_;
46092 +_func_enter_;
46093 +
46094 + padapter = GET_PRIMARY_ADAPTER(padapter);
46095 + pHalData = GET_HAL_DATA(padapter);
46096 +
46097 + if(padapter->bFWReady == _FALSE)
46098 + {
46099 + DBG_8192C("FillH2CCmd(): return H2C cmd because fw is not ready\n");
46100 + return ret;
46101 + }
46102 +
46103 + _enter_critical_mutex(&(adapter_to_dvobj(padapter)->h2c_fwcmd_mutex), NULL);
46104
46105 if(!pCmdBuffer){
46106 goto exit;
46107 @@ -153,7 +99,7 @@ int rtl8192c_FillH2CCmd(_adapter* padapt
46108 do{
46109 h2c_box_num = pHalData->LastHMEBoxNum;
46110
46111 - if(!_is_fw_read_cmd_down(padapter, isnchip, h2c_box_num)){
46112 + if(!_is_fw_read_cmd_down(padapter, h2c_box_num)){
46113 DBG_8192C(" fw read cmd failed...\n");
46114 goto exit;
46115 }
46116 @@ -179,14 +125,6 @@ int rtl8192c_FillH2CCmd(_adapter* padapt
46117 h2c_cmd = cpu_to_le32( h2c_cmd );
46118 rtw_write32(padapter,msgbox_addr, h2c_cmd);
46119
46120 - if(!isnchip){//for Test chip
46121 - if(! (rtw_read8(padapter, REG_HMETFR) & BIT(h2c_box_num))){
46122 - DBG_8192C("Chip test - check fw write failed, write again..\n");
46123 - continue;
46124 - }
46125 - // Fill H2C protection register.
46126 - rtw_write8(padapter,REG_MCUTST_1+h2c_box_num, 0xFF);
46127 - }
46128 bcmd_down = _TRUE;
46129
46130 // DBG_8192C("MSG_BOX:%d,CmdLen(%d), reg:0x%x =>h2c_cmd:0x%x, reg:0x%x =>h2c_cmd_ex:0x%x ..\n"
46131 @@ -202,178 +140,13 @@ int rtl8192c_FillH2CCmd(_adapter* padapt
46132 DBG_8192C("H2C Cmd exe failed. \n" );
46133 */
46134 ret = _SUCCESS;
46135 - _func_exit_;
46136 -
46137 -#else
46138 - u8 BoxNum;
46139 - u16 BOXReg, BOXExtReg;
46140 - u8 BoxContent[4], BoxExtContent[2];
46141 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
46142 - u8 BufIndex=0;
46143 - u8 bWriteSucess = _FALSE;
46144 - u8 IsFwRead = _FALSE;
46145 - u8 WaitH2cLimmit = 100;
46146 -
46147 - u32 h2c_cmd = 0;
46148 - u16 h2c_cmd_ex = 0;
46149
46150 -_func_enter_;
46151 -
46152 - //DBG_8192C("FillH2CCmd : ElementID=%d \n",ElementID);
46153 -
46154 - while(!bWriteSucess)
46155 - {
46156 - // 2. Find the last BOX number which has been writen.
46157 - BoxNum = pHalData->LastHMEBoxNum;
46158 - switch(BoxNum)
46159 - {
46160 - case 0:
46161 - BOXReg = REG_HMEBOX_0;
46162 - BOXExtReg = REG_HMEBOX_EXT_0;
46163 - break;
46164 - case 1:
46165 - BOXReg = REG_HMEBOX_1;
46166 - BOXExtReg = REG_HMEBOX_EXT_1;
46167 - break;
46168 - case 2:
46169 - BOXReg = REG_HMEBOX_2;
46170 - BOXExtReg = REG_HMEBOX_EXT_2;
46171 - break;
46172 - case 3:
46173 - BOXReg = REG_HMEBOX_3;
46174 - BOXExtReg = REG_HMEBOX_EXT_3;
46175 - break;
46176 - default:
46177 - break;
46178 - }
46179 -
46180 - // 3. Check if the box content is empty.
46181 - IsFwRead = CheckFwReadLastMSG(padapter, BoxNum);
46182 - while(!IsFwRead)
46183 - {
46184 - //wait until Fw read
46185 - WaitH2cLimmit--;
46186 - if(WaitH2cLimmit == 0)
46187 - {
46188 - DBG_8192C("FillH2CCmd92C(): Wating too long for FW read clear HMEBox(%d)!!!\n", BoxNum);
46189 - break;
46190 - }
46191 - rtw_msleep_os(10); //us
46192 - IsFwRead = CheckFwReadLastMSG(padapter, BoxNum);
46193 - //U1btmp = PlatformEFIORead1Byte(Adapter, 0x1BF);
46194 - //RT_TRACE(COMP_CMD, DBG_LOUD, ("FillH2CCmd92C(): Wating for FW read clear HMEBox(%d)!!! 0x1BF = %2x\n", BoxNum, U1btmp));
46195 - }
46196 -
46197 - // If Fw has not read the last H2C cmd, break and give up this H2C.
46198 - if(!IsFwRead)
46199 - {
46200 - DBG_8192C("FillH2CCmd92C(): Write H2C register BOX[%d] fail!!!!! Fw do not read. \n", BoxNum);
46201 - break;
46202 - }
46203 -
46204 - // 4. Fill the H2C cmd into box
46205 - _rtw_memset(BoxContent, 0, sizeof(BoxContent));
46206 - _rtw_memset(BoxExtContent, 0, sizeof(BoxExtContent));
46207 -
46208 - BoxContent[0] = ElementID; // Fill element ID
46209 -
46210 - //DBG_8192C("FillH2CCmd92C():Write ElementID BOXReg(%4x) = %2x \n", BOXReg, ElementID);
46211 -
46212 - switch(CmdLen)
46213 - {
46214 - case 1:
46215 - {
46216 - BoxContent[0] &= ~(BIT7);
46217 - _rtw_memcpy((u8*)(BoxContent)+1, pCmdBuffer+BufIndex, 1);
46218 - rtw_write32(padapter, BOXReg, *((u32*)BoxContent));
46219 - h2c_cmd = *((u32*)BoxContent);
46220 - break;
46221 - }
46222 - case 2:
46223 - {
46224 - BoxContent[0] &= ~(BIT7);
46225 - _rtw_memcpy((u8*)(BoxContent)+1, pCmdBuffer+BufIndex, 2);
46226 - rtw_write32(padapter, BOXReg, *((u32*)BoxContent));
46227 - h2c_cmd = *((u32*)BoxContent);
46228 - break;
46229 - }
46230 - case 3:
46231 - {
46232 - BoxContent[0] &= ~(BIT7);
46233 - _rtw_memcpy((u8*)(BoxContent)+1, pCmdBuffer+BufIndex, 3);
46234 - rtw_write32(padapter, BOXReg, *((u32*)BoxContent));
46235 - h2c_cmd = *((u32*)BoxContent);
46236 - break;
46237 - }
46238 - case 4:
46239 - {
46240 - BoxContent[0] |= (BIT7);
46241 - _rtw_memcpy((u8*)(BoxExtContent), pCmdBuffer+BufIndex, 2);
46242 - _rtw_memcpy((u8*)(BoxContent)+1, pCmdBuffer+BufIndex+2, 2);
46243 - rtw_write16(padapter, BOXExtReg, *((u16*)BoxExtContent));
46244 - rtw_write32(padapter, BOXReg, *((u32*)BoxContent));
46245 - h2c_cmd = *((u32*)BoxContent);
46246 - h2c_cmd_ex = *((u32*)BoxExtContent);
46247 - break;
46248 - }
46249 - case 5:
46250 - {
46251 - BoxContent[0] |= (BIT7);
46252 - _rtw_memcpy((u8*)(BoxExtContent), pCmdBuffer+BufIndex, 2);
46253 - _rtw_memcpy((u8*)(BoxContent)+1, pCmdBuffer+BufIndex+2, 3);
46254 - rtw_write16(padapter, BOXExtReg, *((u16*)BoxExtContent));
46255 - rtw_write32(padapter, BOXReg, *((u32*)BoxContent));
46256 - h2c_cmd = *((u32*)BoxContent);
46257 - h2c_cmd_ex = *((u32*)BoxExtContent);
46258 - break;
46259 - }
46260 - default:
46261 - break;
46262 -
46263 - }
46264 -
46265 -
46266 - DBG_8192C("MSG_BOX:%d,CmdLen(%d), reg:0x%x =>h2c_cmd:0x%x, reg:0x%x =>h2c_cmd_ex:0x%x ..\n"
46267 - ,pHalData->LastHMEBoxNum ,CmdLen,BOXReg,h2c_cmd,BOXExtReg,h2c_cmd_ex);
46268 -
46269 - //DBG_8192C("FillH2CCmd(): BoxExtContent=0x%x\n", *(u16*)BoxExtContent);
46270 - //DBG_8192C("FillH2CCmd(): BoxContent=0x%x\n", *(u32*)BoxContent);
46271 -
46272 - if(IS_NORMAL_CHIP(pHalData->VersionID))
46273 - {
46274 - // 5. Normal chip does not need to check if the H2C cmd has be written successfully.
46275 - bWriteSucess = _TRUE;
46276 - }
46277 - else
46278 - {
46279 - // 5. Check if the H2C cmd has be written successfully.
46280 - bWriteSucess = CheckWriteMSG(padapter, BoxNum);
46281 - if(!bWriteSucess) //If not then write again.
46282 - continue;
46283 -
46284 - //6. Fill H2C protection register.
46285 -
46286 - rtw_write8(padapter, REG_MCUTST_1+BoxNum, 0xFF);
46287 - //RT_TRACE(COMP_CMD, DBG_LOUD, ("FillH2CCmd92C():Write Reg(%4x) = 0xFF \n", REG_MCUTST_1+BoxNum));
46288 - }
46289 +exit:
46290
46291 - // Record the next BoxNum
46292 - pHalData->LastHMEBoxNum = BoxNum+1;
46293 - if(pHalData->LastHMEBoxNum == 4) // loop to 0
46294 - pHalData->LastHMEBoxNum = 0;
46295 -
46296 - //DBG_8192C("FillH2CCmd92C():pHalData->LastHMEBoxNum = %d\n", pHalData->LastHMEBoxNum);
46297 -
46298 - }
46299 + _exit_critical_mutex(&(adapter_to_dvobj(padapter)->h2c_fwcmd_mutex), NULL);
46300
46301 _func_exit_;
46302
46303 -#endif
46304 -
46305 -#ifdef CONFIG_CONCURRENT_MODE
46306 - //_exit_critical_mutex(padapter->ph2c_fwcmd_mutex, NULL);
46307 -#endif
46308 -exit:
46309 return ret;
46310
46311 }
46312 @@ -445,67 +218,18 @@ _func_exit_;
46313
46314 }
46315
46316 -u8 rtl8192c_set_ext_macid_period_cmd(_adapter*padapter, u8 period)
46317 -{
46318 - u8 ext_macid_period=0;
46319 - u8 res=_SUCCESS;
46320 -
46321 -_func_enter_;
46322 -
46323 - ext_macid_period=period;
46324 -
46325 - rtl8192c_FillH2CCmd(padapter, EXT_MACID_PERIOD_EID, 1, &ext_macid_period);
46326 -
46327 -_func_exit_;
46328 -
46329 - return res;
46330 -
46331 -}
46332 -
46333 -u8 rtl8192c_set_raid64_cmd(_adapter*padapter, u32 mask, u8 arg)
46334 -{
46335 - u8 buf[5];
46336 - u8 res=_SUCCESS;
46337 -
46338 -_func_enter_;
46339 -
46340 - _rtw_memset(buf, 0, 5);
46341 - mask = cpu_to_le32( mask );
46342 - _rtw_memcpy(buf, &mask, 4);
46343 - buf[4] = arg;
46344 -
46345 - rtl8192c_FillH2CCmd(padapter, MACID64_CONFIG_EID, 5, buf);
46346 -
46347 -_func_exit_;
46348 -
46349 - return res;
46350 -
46351 -}
46352 //bitmap[0:27] = tx_rate_bitmap
46353 //bitmap[28:31]= Rate Adaptive id
46354 //arg[0:4] = macid
46355 //arg[5] = Short GI
46356 -void rtl8192c_Add_RateATid(PADAPTER pAdapter, u32 bitmap, u8 arg, u8 mac_id)
46357 +void rtl8192c_Add_RateATid(PADAPTER pAdapter, u32 bitmap, u8 arg)
46358 {
46359
46360 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
46361
46362 if(pHalData->fw_ractrl == _TRUE)
46363 {
46364 - DBG_8192C("%s() pHalData->fw_ractrl == _TRUE\n",__FUNCTION__);
46365 -#ifdef SUPPORT_64_STA
46366 - if(mac_id >=FW_CTRL_MACID){
46367 - rtl8192c_set_ext_macid_period_cmd(pAdapter,20);
46368 - rtl8192c_set_raid64_cmd(pAdapter, bitmap, arg);
46369 - DBG_8192C("%s() rtl8192c_set_raid64_cmd, bitmap=0x%x, arg =0x%x\n",__FUNCTION__,bitmap,arg);
46370 - }
46371 - else
46372 -#endif //SUPPORT_64_STA
46373 - {
46374 - rtl8192c_set_raid_cmd(pAdapter, bitmap, arg);
46375 - DBG_8192C("%s() rtl8192c_set_raid_cmd, bitmap=0x%x, arg =0x%x\n",__FUNCTION__,bitmap,arg);
46376 - }
46377 -
46378 + rtl8192c_set_raid_cmd(pAdapter, bitmap, arg);
46379 }
46380 else
46381 {
46382 @@ -976,7 +700,7 @@ static void SetFwRsvdPagePkt(PADAPTER Ad
46383 pattrib->pktlen = pattrib->last_txcmdsz = TotalPacketLen - TxDescLen;
46384 _rtw_memcpy(pmgntframe->buf_addr, ReservedPagePacket, TotalPacketLen);
46385
46386 - Adapter->HalFunc.mgnt_xmit(Adapter, pmgntframe);
46387 + rtw_hal_mgnt_xmit(Adapter, pmgntframe);
46388
46389 bDLOK = _TRUE;
46390
46391 @@ -1003,6 +727,8 @@ _func_enter_;
46392
46393 if(mstatus == 1)
46394 {
46395 + BOOLEAN bRecover = _FALSE;
46396 +
46397 // We should set AID, correct TSF, HW seq enable before set JoinBssReport to Fw in 88/92C.
46398 // Suggested by filen. Added by tynli.
46399 rtw_write16(padapter, REG_BCN_PSR_RPT, (0xC000|pmlmeinfo->aid));
46400 @@ -1012,52 +738,47 @@ _func_enter_;
46401 //rtw_write16(padapter, REG_NQOS_SEQ, ((pmlmeext->mgnt_seq+100)&0xFFF));
46402 //rtw_write8(padapter, REG_HWSEQ_CTRL, 0xFF);
46403
46404 - if(IS_NORMAL_CHIP(pHalData->VersionID))
46405 + //set REG_CR bit 8
46406 + //U1bTmp = rtw_read8(padapter, REG_CR+1);
46407 + rtw_write8(padapter, REG_CR+1, 0x03);
46408 +
46409 + // Disable Hw protection for a time which revserd for Hw sending beacon.
46410 + // Fix download reserved page packet fail that access collision with the protection time.
46411 + // 2010.05.11. Added by tynli.
46412 + //SetBcnCtrlReg(padapter, 0, BIT3);
46413 + //SetBcnCtrlReg(padapter, BIT4, 0);
46414 + rtw_write8(padapter, REG_BCN_CTRL, rtw_read8(padapter, REG_BCN_CTRL)&(~BIT(3)));
46415 + rtw_write8(padapter, REG_BCN_CTRL, rtw_read8(padapter, REG_BCN_CTRL)|BIT(4));
46416 +
46417 + // Set FWHW_TXQ_CTRL 0x422[6]=0 to tell Hw the packet is not a real beacon frame.
46418 + if(pHalData->RegFwHwTxQCtrl&BIT6)
46419 + bRecover = _TRUE;
46420 +
46421 + // To tell Hw the packet is not a real beacon frame.
46422 + //U1bTmp = rtw_read8(padapter, REG_FWHW_TXQ_CTRL+2);
46423 + rtw_write8(padapter, REG_FWHW_TXQ_CTRL+2, (pHalData->RegFwHwTxQCtrl&(~BIT6)));
46424 + pHalData->RegFwHwTxQCtrl &= (~BIT6);
46425 + SetFwRsvdPagePkt(padapter, 0);
46426 +
46427 + // 2010.05.11. Added by tynli.
46428 + //SetBcnCtrlReg(padapter, BIT3, 0);
46429 + //SetBcnCtrlReg(padapter, 0, BIT4);
46430 + rtw_write8(padapter, REG_BCN_CTRL, rtw_read8(padapter, REG_BCN_CTRL)|BIT(3));
46431 + rtw_write8(padapter, REG_BCN_CTRL, rtw_read8(padapter, REG_BCN_CTRL)&(~BIT(4)));
46432 +
46433 + // To make sure that if there exists an adapter which would like to send beacon.
46434 + // If exists, the origianl value of 0x422[6] will be 1, we should check this to
46435 + // prevent from setting 0x422[6] to 0 after download reserved page, or it will cause
46436 + // the beacon cannot be sent by HW.
46437 + // 2010.06.23. Added by tynli.
46438 + if(bRecover)
46439 {
46440 - BOOLEAN bRecover = _FALSE;
46441 -
46442 - //set REG_CR bit 8
46443 - //U1bTmp = rtw_read8(padapter, REG_CR+1);
46444 - rtw_write8(padapter, REG_CR+1, 0x03);
46445 -
46446 - // Disable Hw protection for a time which revserd for Hw sending beacon.
46447 - // Fix download reserved page packet fail that access collision with the protection time.
46448 - // 2010.05.11. Added by tynli.
46449 - //SetBcnCtrlReg(padapter, 0, BIT3);
46450 - //SetBcnCtrlReg(padapter, BIT4, 0);
46451 - rtw_write8(padapter, REG_BCN_CTRL, rtw_read8(padapter, REG_BCN_CTRL)&(~BIT(3)));
46452 - rtw_write8(padapter, REG_BCN_CTRL, rtw_read8(padapter, REG_BCN_CTRL)|BIT(4));
46453 -
46454 - // Set FWHW_TXQ_CTRL 0x422[6]=0 to tell Hw the packet is not a real beacon frame.
46455 - if(pHalData->RegFwHwTxQCtrl&BIT6)
46456 - bRecover = _TRUE;
46457 -
46458 - // To tell Hw the packet is not a real beacon frame.
46459 - //U1bTmp = rtw_read8(padapter, REG_FWHW_TXQ_CTRL+2);
46460 - rtw_write8(padapter, REG_FWHW_TXQ_CTRL+2, (pHalData->RegFwHwTxQCtrl&(~BIT6)));
46461 - pHalData->RegFwHwTxQCtrl &= (~BIT6);
46462 - SetFwRsvdPagePkt(padapter, 0);
46463 -
46464 - // 2010.05.11. Added by tynli.
46465 - //SetBcnCtrlReg(padapter, BIT3, 0);
46466 - //SetBcnCtrlReg(padapter, 0, BIT4);
46467 - rtw_write8(padapter, REG_BCN_CTRL, rtw_read8(padapter, REG_BCN_CTRL)|BIT(3));
46468 - rtw_write8(padapter, REG_BCN_CTRL, rtw_read8(padapter, REG_BCN_CTRL)&(~BIT(4)));
46469 -
46470 - // To make sure that if there exists an adapter which would like to send beacon.
46471 - // If exists, the origianl value of 0x422[6] will be 1, we should check this to
46472 - // prevent from setting 0x422[6] to 0 after download reserved page, or it will cause
46473 - // the beacon cannot be sent by HW.
46474 - // 2010.06.23. Added by tynli.
46475 - if(bRecover)
46476 - {
46477 - rtw_write8(padapter, REG_FWHW_TXQ_CTRL+2, (pHalData->RegFwHwTxQCtrl|BIT6));
46478 - pHalData->RegFwHwTxQCtrl |= BIT6;
46479 - }
46480 -
46481 - // Clear CR[8] or beacon packet will not be send to TxBuf anymore.
46482 - rtw_write8(padapter, REG_CR+1, 0x02);
46483 + rtw_write8(padapter, REG_FWHW_TXQ_CTRL+2, (pHalData->RegFwHwTxQCtrl|BIT6));
46484 + pHalData->RegFwHwTxQCtrl |= BIT6;
46485 }
46486 +
46487 + // Clear CR[8] or beacon packet will not be send to TxBuf anymore.
46488 + rtw_write8(padapter, REG_CR+1, 0x02);
46489 }
46490
46491 JoinBssRptParm.OpMode = mstatus;
46492 @@ -1067,7 +788,7 @@ _func_enter_;
46493 _func_exit_;
46494 }
46495
46496 -#ifdef CONFIG_P2P
46497 +#ifdef CONFIG_P2P_PS
46498 void rtl8192c_set_p2p_ctw_period_cmd(_adapter* padapter, u8 ctwindow)
46499 {
46500 struct P2P_PS_CTWPeriod_t p2p_ps_ctw;
46501 @@ -1103,7 +824,7 @@ _func_enter_;
46502 {
46503 p2p_ps_offload->CTWindow_En = 1;
46504 ctwindow = pwdinfo->ctwindow;
46505 - if(IS_HARDWARE_TYPE_8723(padapter))
46506 + if(IS_HARDWARE_TYPE_8723A(padapter))
46507 {
46508 //rtw_write16(padapter, REG_ATIMWND, ctwindow);
46509 }
46510 @@ -1174,7 +895,7 @@ _func_enter_;
46511 case P2P_PS_SCAN_DONE:
46512 DBG_8192C("P2P_PS_SCAN_DONE \n");
46513 p2p_ps_offload->discovery = 0;
46514 - pwdinfo->p2p_ps = P2P_PS_ENABLE;
46515 + pwdinfo->p2p_ps_state = P2P_PS_ENABLE;
46516 break;
46517 default:
46518 break;
46519 @@ -1185,7 +906,7 @@ _func_enter_;
46520 _func_exit_;
46521
46522 }
46523 -#endif //CONFIG_P2P
46524 +#endif // CONFIG_P2P_PS
46525
46526 #ifdef CONFIG_IOL
46527 #include <rtw_iol.h>
46528 @@ -1199,9 +920,8 @@ int rtl8192c_IOL_exec_cmds_sync(ADAPTER
46529
46530 if (rtw_IOL_append_END_cmd(xmit_frame) != _SUCCESS)
46531 goto exit;
46532 -
46533 - //adapter->HalFunc.mgnt_xmit(adapter, xmit_frame);
46534 - rtw_dump_xframe_sync(adapter, xmit_frame);
46535 +
46536 + dump_mgntframe_and_wait(adapter, xmit_frame, max_wating_ms);
46537
46538 IoOffloadLoc.LocCmd = 0;
46539 if(_SUCCESS != rtl8192c_FillH2CCmd(adapter, H2C_92C_IO_OFFLOAD, sizeof(IO_OFFLOAD_LOC), (u8 *)&IoOffloadLoc))
46540 @@ -1274,6 +994,84 @@ exit:
46541 #endif //CONFIG_IOL
46542
46543
46544 +#ifdef CONFIG_BEACON_DISABLE_OFFLOAD
46545 +/*
46546 + rtl8192c_dis_beacon_fun_cmd()
46547 + This function shall only be called by PORT1.
46548 + PORT0's beacon function can't be disabled, because it's used by RA function in FW/HW.
46549 +
46550 + // Still has the REG_BCN_CTRL_1 modified by unknowned party issue in case of Primary Interface + PORT1 combination.
46551 +*/
46552 +u8 rtl8192c_dis_beacon_fun_cmd(_adapter* padapter)
46553 +{
46554 + u8 buf[2];
46555 + u8 res=_SUCCESS;
46556 +
46557 +_func_enter_;
46558 +
46559 + _rtw_memset(buf, 0, sizeof(buf));
46560 +
46561 + if (padapter->iface_type == IFACE_PORT0) {
46562 + //buf[0] = 0x1;
46563 + DBG_871X("%s(): ERROR! padapter->iface_type = %d\n", __FUNCTION__, padapter->iface_type);
46564 + return _FAIL;
46565 + } else
46566 + buf[1] = 0x1;
46567 +
46568 + rtl8192c_FillH2CCmd(padapter, H2C_92C_DISABLE_BCN_FUNC, 2, buf);
46569 +
46570 +_func_exit_;
46571 +
46572 + return res;
46573 +
46574 +}
46575 +#endif // CONFIG_BEACON_DISABLE_OFFLOAD
46576 +
46577 +
46578 +#ifdef CONFIG_TSF_RESET_OFFLOAD
46579 +/*
46580 + ask FW to Reset sync register at Beacon early interrupt
46581 +*/
46582 +u8 rtl8192c_reset_tsf(_adapter *padapter, u8 reset_port )
46583 +{
46584 + u8 buf[2];
46585 + u8 res=_SUCCESS;
46586 +
46587 +_func_enter_;
46588 + if (IFACE_PORT0==reset_port) {
46589 + buf[0] = 0x1; buf[1] = 0;
46590 +
46591 + } else{
46592 + buf[0] = 0x0; buf[1] = 0x1;
46593 + }
46594 + rtl8192c_FillH2CCmd(padapter, H2C_92C_RESET_TSF, 2, buf);
46595 +_func_exit_;
46596 +
46597 + return res;
46598 +}
46599 +
46600 +int reset_tsf(PADAPTER Adapter, u8 reset_port )
46601 +{
46602 + u8 reset_cnt_before = 0, reset_cnt_after = 0, loop_cnt = 0;
46603 + u32 reg_reset_tsf_cnt = (IFACE_PORT0==reset_port) ?
46604 + REG_FW_RESET_TSF_CNT_0:REG_FW_RESET_TSF_CNT_1;
46605 +
46606 + rtw_scan_abort(Adapter->pbuddy_adapter); /* site survey will cause reset_tsf fail */
46607 + reset_cnt_after = reset_cnt_before = rtw_read8(Adapter,reg_reset_tsf_cnt);
46608 + rtl8192c_reset_tsf(Adapter, reset_port);
46609 +
46610 + while ((reset_cnt_after == reset_cnt_before ) && (loop_cnt < 10)) {
46611 + rtw_msleep_os(100);
46612 + loop_cnt++;
46613 + reset_cnt_after = rtw_read8(Adapter, reg_reset_tsf_cnt);
46614 + }
46615 +
46616 + return(loop_cnt >= 10) ? _FAIL : _TRUE;
46617 +}
46618 +
46619 +
46620 +#endif // CONFIG_TSF_RESET_OFFLOAD
46621 +
46622 #ifdef CONFIG_WOWLAN
46623
46624 void rtl8192c_set_wowlan_cmd(_adapter* padapter)
46625 @@ -1310,6 +1108,8 @@ _func_enter_;
46626 pwowlan_parm.mode |=FW_WOWLAN_REKEY_WAKEUP;
46627 pwowlan_parm.mode |=FW_WOWLAN_DEAUTH_WAKEUP;
46628
46629 + rtl8192c_set_FwJoinBssReport_cmd( padapter, 1);
46630 +
46631 //GPIO3
46632 pwowlan_parm.gpio_index=3;
46633
46634 @@ -1323,7 +1123,6 @@ _func_enter_;
46635 }
46636 rtl8192c_FillH2CCmd(padapter, H2C_WO_WLAN_CMD, 4, (u8 *)&pwowlan_parm);
46637
46638 - rtl8192c_set_FwJoinBssReport_cmd( padapter, 1);
46639 //keep alive period = 3 * 10 BCN interval
46640 pwowlan_parm.mode =3;
46641 pwowlan_parm.gpio_index=3;
46642 @@ -1356,6 +1155,5 @@ _func_exit_;
46643
46644
46645
46646 -
46647
46648
46649 --- a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_dm.c
46650 +++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_dm.c
46651 @@ -15,8 +15,8 @@
46652 * this program; if not, write to the Free Software Foundation, Inc.,
46653 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
46654 *
46655 - *
46656 -******************************************************************************/
46657 + *
46658 + ******************************************************************************/
46659 //============================================================
46660 // Description:
46661 //
46662 @@ -34,7 +34,10 @@
46663 #include <rtw_byteorder.h>
46664
46665 #include <rtl8192c_hal.h>
46666 -
46667 +#include "../dm.h"
46668 +#ifdef CONFIG_INTEL_PROXIM
46669 +#include "../proxim/intel_proxim.h"
46670 +#endif
46671 //============================================================
46672 // Global var
46673 //============================================================
46674 @@ -95,6 +98,7 @@ static void dm_DIGInit(
46675
46676 pDigTable->rx_gain_range_max = DM_DIG_MAX;
46677 pDigTable->rx_gain_range_min = DM_DIG_MIN;
46678 + pDigTable->rx_gain_range_min_nolink = 0;
46679
46680 pDigTable->BackoffVal = DM_DIG_BACKOFF_DEFAULT;
46681 pDigTable->BackoffVal_range_max = DM_DIG_BACKOFF_MAX;
46682 @@ -123,8 +127,12 @@ static u8 dm_initial_gain_MinPWDB(
46683 (pDigTable->CurSTAConnectState == DIG_STA_CONNECT) )
46684 {
46685 if(pdmpriv->EntryMinUndecoratedSmoothedPWDB != 0)
46686 +#ifdef CONFIG_CONCURRENT_MODE
46687 + Rssi_val_min = (pdmpriv->UndecoratedSmoothedPWDB+pdmpriv->EntryMinUndecoratedSmoothedPWDB)/2;
46688 +#else
46689 Rssi_val_min = (pdmpriv->EntryMinUndecoratedSmoothedPWDB > pdmpriv->UndecoratedSmoothedPWDB)?
46690 pdmpriv->UndecoratedSmoothedPWDB:pdmpriv->EntryMinUndecoratedSmoothedPWDB;
46691 +#endif //CONFIG_CONCURRENT_MODE
46692 else
46693 Rssi_val_min = pdmpriv->UndecoratedSmoothedPWDB;
46694 }
46695 @@ -151,6 +159,9 @@ dm_FalseAlarmCounterStatistics(
46696 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
46697 struct dm_priv *pdmpriv = &pHalData->dmpriv;
46698 PFALSE_ALARM_STATISTICS FalseAlmCnt = &(pdmpriv->FalseAlmCnt);
46699 +#ifdef CONFIG_CONCURRENT_MODE
46700 + PADAPTER pbuddy_adapter = Adapter->pbuddy_adapter;
46701 +#endif //CONFIG_CONCURRENT_MODE
46702
46703 ret_value = PHY_QueryBBReg(Adapter, rOFDM_PHYCounter1, bMaskDWord);
46704 FalseAlmCnt->Cnt_Parity_Fail = ((ret_value&0xffff0000)>>16);
46705 @@ -183,7 +194,13 @@ dm_FalseAlarmCounterStatistics(
46706 FalseAlmCnt->Cnt_Crc8_fail +
46707 FalseAlmCnt->Cnt_Mcs_fail +
46708 FalseAlmCnt->Cnt_Cck_fail);
46709 +
46710 Adapter->recvpriv.FalseAlmCnt_all = FalseAlmCnt->Cnt_all;
46711 +#ifdef CONFIG_CONCURRENT_MODE
46712 + if(pbuddy_adapter)
46713 + pbuddy_adapter->recvpriv.FalseAlmCnt_all = FalseAlmCnt->Cnt_all;
46714 +#endif //CONFIG_CONCURRENT_MODE
46715 +
46716 //reset false alarm counter registers
46717 PHY_SetBBReg(Adapter, rOFDM1_LSTF, 0x08000000, 1);
46718 PHY_SetBBReg(Adapter, rOFDM1_LSTF, 0x08000000, 0);
46719 @@ -210,6 +227,21 @@ DM_Write_DIG(
46720 struct dm_priv *pdmpriv = &pHalData->dmpriv;
46721 DIG_T *pDigTable = &pdmpriv->DM_DigTable;
46722
46723 +#ifdef CONFIG_CONCURRENT_MODE
46724 + if(rtw_buddy_adapter_up(pAdapter))
46725 + {
46726 + PADAPTER pbuddy_adapter = pAdapter->pbuddy_adapter;
46727 + PHAL_DATA_TYPE pbuddy_HalData = GET_HAL_DATA(pbuddy_adapter);
46728 + struct dm_priv *pbuddy_dmpriv = &pbuddy_HalData->dmpriv;
46729 + DIG_T *pbuddy_DigTable = &pbuddy_dmpriv->DM_DigTable;
46730 +
46731 + //sync IGValue
46732 + pbuddy_DigTable->PreIGValue = pDigTable->PreIGValue;
46733 + pbuddy_DigTable->CurIGValue = pDigTable->CurIGValue;
46734 + }
46735 +#endif //CONFIG_CONCURRENT_MODE
46736 +
46737 +
46738 //RT_TRACE( COMP_DIG, DBG_LOUD, ("CurIGValue = 0x%lx, PreIGValue = 0x%lx, BackoffVal = %d\n",
46739 // DM_DigTable.CurIGValue, DM_DigTable.PreIGValue, DM_DigTable.BackoffVal));
46740
46741 @@ -220,14 +252,25 @@ DM_Write_DIG(
46742 return;
46743 }
46744
46745 - if(pDigTable->PreIGValue != pDigTable->CurIGValue)
46746 + if( (pDigTable->PreIGValue != pDigTable->CurIGValue) || ( pAdapter->bForceWriteInitGain ) )
46747 {
46748 // Set initial gain.
46749 //PHY_SetBBReg(pAdapter, rOFDM0_XAAGCCore1, bMaskByte0, pDigTable->CurIGValue);
46750 //PHY_SetBBReg(pAdapter, rOFDM0_XBAGCCore1, bMaskByte0, pDigTable->CurIGValue);
46751 //printk("%s DIG(0x%02x)\n",__FUNCTION__,pDigTable->CurIGValue);
46752 - PHY_SetBBReg(pAdapter, rOFDM0_XAAGCCore1, 0x7f, pDigTable->CurIGValue);
46753 - PHY_SetBBReg(pAdapter, rOFDM0_XBAGCCore1, 0x7f, pDigTable->CurIGValue);
46754 +
46755 +#if defined CONFIG_WIDI_DIG_3E && defined CONFIG_INTEL_WIDI
46756 + if( pAdapter->mlmepriv.widi_enable == _TRUE )
46757 + {
46758 + PHY_SetBBReg(pAdapter, rOFDM0_XAAGCCore1, 0x7f, 0x3e);
46759 + PHY_SetBBReg(pAdapter, rOFDM0_XBAGCCore1, 0x7f, 0x3e);
46760 + }
46761 + else
46762 +#endif //defined CONFIG_WIDI_DIG_3E && defined CONFIG_INTEL_WIDI
46763 + {
46764 + PHY_SetBBReg(pAdapter, rOFDM0_XAAGCCore1, 0x7f, pDigTable->CurIGValue);
46765 + PHY_SetBBReg(pAdapter, rOFDM0_XBAGCCore1, 0x7f, pDigTable->CurIGValue);
46766 + }
46767 pDigTable->PreIGValue = pDigTable->CurIGValue;
46768 }
46769 }
46770 @@ -256,7 +299,7 @@ dm_CtrlInitGainByFA(
46771
46772 if(value_IGI > DM_DIG_FA_UPPER)
46773 value_IGI = DM_DIG_FA_UPPER;
46774 - if(value_IGI < DM_DIG_FA_LOWER)
46775 + if(value_IGI < DM_DIG_FA_LOWER)
46776 value_IGI = DM_DIG_FA_LOWER;
46777
46778 if(FalseAlmCnt->Cnt_all > 10000)
46779 @@ -276,7 +319,10 @@ VOID dm_CtrlInitGainByRssi( IN PADAPTER
46780 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
46781 struct dm_priv *pdmpriv = &pHalData->dmpriv;
46782 DIG_T *pDigTable = &pdmpriv->DM_DigTable;
46783 - PFALSE_ALARM_STATISTICS FalseAlmCnt = &(pdmpriv->FalseAlmCnt);
46784 + PFALSE_ALARM_STATISTICS FalseAlmCnt = &(pdmpriv->FalseAlmCnt);
46785 +#ifdef CONFIG_DM_ADAPTIVITY
46786 + u8 Adap_IGI_Upper = pdmpriv->IGI_target + 30 + (u8) pdmpriv->TH_L2H_ini -(u8) pdmpriv->TH_EDCCA_HL_diff;
46787 +#endif
46788
46789 //modify DIG upper bound
46790 if((pDigTable->Rssi_val_min + 20) > DM_DIG_MAX )
46791 @@ -393,6 +439,22 @@ VOID dm_CtrlInitGainByRssi( IN PADAPTER
46792 if(pDigTable->CurIGValue < pDigTable->rx_gain_range_min)
46793 pDigTable->CurIGValue = pDigTable->rx_gain_range_min;
46794
46795 +#ifdef CONFIG_DM_ADAPTIVITY
46796 + if(pdmpriv->DMFlag & DYNAMIC_FUNC_ADAPTIVITY)
46797 + {
46798 + if(pDigTable->CurIGValue > Adap_IGI_Upper)
46799 + pDigTable->CurIGValue = Adap_IGI_Upper;
46800 +
46801 + if(pdmpriv->IGI_LowerBound != 0)
46802 + {
46803 + if(pDigTable->CurIGValue < pdmpriv->IGI_LowerBound)
46804 + pDigTable->CurIGValue = pdmpriv->IGI_LowerBound;
46805 + }
46806 + LOG_LEVEL(_drv_info_, FUNC_ADPT_FMT": pdmpriv->IGI_LowerBound = %d\n",
46807 + FUNC_ADPT_ARG(pAdapter), pdmpriv->IGI_LowerBound);
46808 + }
46809 +#endif /* CONFIG_DM_ADAPTIVITY */
46810 +
46811 //printk("%s => rx_gain_range_max(0x%02x) rx_gain_range_min(0x%02x)\n",__FUNCTION__,
46812 // pDigTable->rx_gain_range_max,pDigTable->rx_gain_range_min);
46813 //printk("%s CurIGValue(0x%02x) <====\n",__FUNCTION__,pDigTable->CurIGValue );
46814 @@ -408,6 +470,10 @@ static VOID dm_CtrlInitGainByRssi(IN PAD
46815 struct dm_priv *pdmpriv = &pHalData->dmpriv;
46816 DIG_T *pDigTable = &pdmpriv->DM_DigTable;
46817 PFALSE_ALARM_STATISTICS FalseAlmCnt = &(pdmpriv->FalseAlmCnt);
46818 + u8 RSSI_tmp = dm_initial_gain_MinPWDB(pAdapter);
46819 +#ifdef CONFIG_DM_ADAPTIVITY
46820 + u8 Adap_IGI_Upper = pdmpriv->IGI_target + 30 + (u8) pdmpriv->TH_L2H_ini -(u8) pdmpriv->TH_EDCCA_HL_diff;
46821 +#endif
46822
46823 //modify DIG upper bound
46824 if((pDigTable->Rssi_val_min + 20) > DM_DIG_MAX )
46825 @@ -415,7 +481,6 @@ static VOID dm_CtrlInitGainByRssi(IN PAD
46826 else
46827 pDigTable->rx_gain_range_max = pDigTable->Rssi_val_min + 20;
46828 //printk("%s Rssi_val_min(0x%02x),rx_gain_range_max(0x%02x)\n",__FUNCTION__,pDigTable->Rssi_val_min,pDigTable->rx_gain_range_max);
46829 -
46830 //modify DIG lower bound, deal with abnorally large false alarm
46831 if(FalseAlmCnt->Cnt_all > 10000)
46832 {
46833 @@ -515,6 +580,14 @@ static VOID dm_CtrlInitGainByRssi(IN PAD
46834 }
46835 #endif
46836
46837 + if(RSSI_tmp <= DM_DIG_MIN)
46838 + pDigTable->rx_gain_range_min = DM_DIG_MIN;
46839 + else if(RSSI_tmp >= DM_DIG_MAX)
46840 + pDigTable->rx_gain_range_min = DM_DIG_MAX;
46841 + else
46842 + pDigTable->rx_gain_range_min = RSSI_tmp;
46843 +
46844 +
46845 //Check initial gain by upper/lower bound
46846 if(pDigTable->CurIGValue >pDigTable->rx_gain_range_max)
46847 pDigTable->CurIGValue = pDigTable->rx_gain_range_max;
46848 @@ -522,6 +595,22 @@ static VOID dm_CtrlInitGainByRssi(IN PAD
46849 if(pDigTable->CurIGValue < pDigTable->rx_gain_range_min)
46850 pDigTable->CurIGValue = pDigTable->rx_gain_range_min;
46851
46852 +#ifdef CONFIG_DM_ADAPTIVITY
46853 + if(pdmpriv->DMFlag & DYNAMIC_FUNC_ADAPTIVITY)
46854 + {
46855 + if(pDigTable->CurIGValue > Adap_IGI_Upper)
46856 + pDigTable->CurIGValue = Adap_IGI_Upper;
46857 +
46858 + if(pdmpriv->IGI_LowerBound != 0)
46859 + {
46860 + if(pDigTable->CurIGValue < pdmpriv->IGI_LowerBound)
46861 + pDigTable->CurIGValue = pdmpriv->IGI_LowerBound;
46862 + }
46863 + LOG_LEVEL(_drv_info_, FUNC_ADPT_FMT": pdmpriv->IGI_LowerBound = %d\n",
46864 + FUNC_ADPT_ARG(pAdapter), pdmpriv->IGI_LowerBound);
46865 + }
46866 +#endif /* CONFIG_DM_ADAPTIVITY */
46867 +
46868 //printk("%s => rx_gain_range_max(0x%02x) rx_gain_range_min(0x%02x)\n",__FUNCTION__,
46869 // pDigTable->rx_gain_range_max,pDigTable->rx_gain_range_min);
46870 //printk("%s CurIGValue(0x%02x) <====\n",__FUNCTION__,pDigTable->CurIGValue );
46871 @@ -541,6 +630,20 @@ dm_initial_gain_Multi_STA(
46872 DIG_T *pDigTable = &pdmpriv->DM_DigTable;
46873 int rssi_strength = pdmpriv->EntryMinUndecoratedSmoothedPWDB;
46874 BOOLEAN bMulti_STA = _FALSE;
46875 +
46876 +#ifdef CONFIG_CONCURRENT_MODE
46877 + //AP Mode
46878 + if(check_buddy_fwstate(pAdapter, WIFI_AP_STATE) == _TRUE && (rssi_strength !=0))
46879 + {
46880 + bMulti_STA = _TRUE;
46881 + }
46882 + else if(pDigTable->CurMultiSTAConnectState == DIG_MultiSTA_CONNECT && rssi_strength==0) //STA+STA MODE
46883 + {
46884 + bMulti_STA = _TRUE;
46885 + rssi_strength = pdmpriv->UndecoratedSmoothedPWDB;
46886 + }
46887 +#endif //CONFIG_CONCURRENT_MODE
46888 +
46889
46890 //ADHOC and AP Mode
46891 if(check_fwstate(pmlmepriv, WIFI_AP_STATE|WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE) == _TRUE)
46892 @@ -607,12 +710,14 @@ dm_initial_gain_STA_beforelinked(
46893 //CurrentIGI = pDM_DigTable->rx_gain_range_min;//pDM_DigTable->CurIGValue = pDM_DigTable->rx_gain_range_min
46894 //ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): DIG BeforeLink\n"));
46895 //2012.03.30 LukeLee: enable DIG before link but with very high thresholds
46896 - if(pFalseAlmCnt->Cnt_all > 10000)
46897 - pDigTable->CurIGValue = pDigTable->CurIGValue + 2;//pDM_DigTable->CurIGValue = pDM_DigTable->PreIGValue+2;
46898 - else if (pFalseAlmCnt->Cnt_all > 8000)
46899 - pDigTable->CurIGValue = pDigTable->CurIGValue + 1;//pDM_DigTable->CurIGValue = pDM_DigTable->PreIGValue+1;
46900 + // Updated by Albert 2012/09/27
46901 + // Copy the same rule from 8192du code.
46902 + if( pFalseAlmCnt->Cnt_all > 2000 )
46903 + pDigTable->CurIGValue += 2;
46904 + else if ( ( pFalseAlmCnt->Cnt_all > 1000 ) && ( pFalseAlmCnt->Cnt_all <= 1000 ) )
46905 + pDigTable->CurIGValue += 1;
46906 else if(pFalseAlmCnt->Cnt_all < 500)
46907 - pDigTable->CurIGValue = pDigTable->CurIGValue - 1;//pDM_DigTable->CurIGValue =pDM_DigTable->PreIGValue-1;
46908 + pDigTable->CurIGValue -= 1;
46909
46910 //Check initial gain by upper/lower bound
46911 if(pDigTable->CurIGValue >pDigTable->rx_gain_range_max)
46912 @@ -647,20 +752,21 @@ dm_initial_gain_STA(
46913 {
46914 pDigTable->Rssi_val_min = dm_initial_gain_MinPWDB(pAdapter);
46915 dm_CtrlInitGainByRssi(pAdapter);
46916 - }
46917 -#ifdef CONFIG_IOCTL_CFG80211
46918 - else if((wdev_to_priv(pAdapter->rtw_wdev))->p2p_enabled == _TRUE)
46919 + }
46920 +#if 0
46921 + else if((wdev_to_priv(pAdapter->rtw_wdev))->p2p_enabled == _TRUE
46922 + && pAdapter->wdinfo.driver_interface == DRIVER_CFG80211)
46923 {
46924 - pDigTable->CurIGValue = 0x30;
46925 + //pDigTable->CurIGValue = 0x30;
46926 DM_Write_DIG(pAdapter);
46927 }
46928 -#endif
46929 +#endif
46930 else{ // pDigTable->CurSTAConnectState == DIG_STA_DISCONNECT
46931 #ifdef CONFIG_BEFORE_LINKED_DIG
46932 //printk("%s==> ##1 CurIGI(0x%02x),PreIGValue(0x%02x) \n",__FUNCTION__,pDigTable->CurIGValue,pDigTable->PreIGValue );
46933 dm_initial_gain_STA_beforelinked(pAdapter);
46934 DM_Write_DIG(pAdapter);
46935 - #endif
46936 + #endif //CONFIG_BEFORE_LINKED_DIG
46937 }
46938 }
46939 else
46940 @@ -671,11 +777,11 @@ dm_initial_gain_STA(
46941 pDigTable->BackoffVal = DM_DIG_BACKOFF_DEFAULT;
46942 pDigTable->CurIGValue = 0x20;
46943 pDigTable->PreIGValue = 0;
46944 -
46945 #ifdef CONFIG_BEFORE_LINKED_DIG
46946 //printk("%s==> ##2 CurIGI(0x%02x),PreIGValue(0x%02x) \n",__FUNCTION__,pDigTable->CurIGValue,pDigTable->PreIGValue );
46947 dm_initial_gain_STA_beforelinked(pAdapter);
46948 - #endif
46949 + #endif //CONFIG_BEFORE_LINKED_DIG
46950 +
46951
46952 DM_Write_DIG(pAdapter);
46953 }
46954 @@ -749,7 +855,15 @@ dm_CtrlInitGainByTwoPort(
46955 DIG_T *pDigTable = &pdmpriv->DM_DigTable;
46956
46957 if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY) == _TRUE)
46958 - return;
46959 + {
46960 +#ifdef CONFIG_IOCTL_CFG80211
46961 + if((wdev_to_priv(pAdapter->rtw_wdev))->p2p_enabled == _TRUE)
46962 + {
46963 + }
46964 + else
46965 +#endif
46966 + return;
46967 + }
46968
46969 // Decide the current status and if modify initial gain or not
46970 if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING) == _TRUE)
46971 @@ -779,9 +893,31 @@ dm_CtrlInitGainByTwoPort(
46972 pDigTable->CurMultiSTAConnectState = DIG_MultiSTA_CONNECT;
46973 }
46974
46975 +#ifdef CONFIG_CONCURRENT_MODE
46976 + if(check_buddy_fwstate(pAdapter, WIFI_AP_STATE) == _TRUE)
46977 + {
46978 + PADAPTER pbuddy_adapter = pAdapter->pbuddy_adapter;
46979 +
46980 + if(pbuddy_adapter->stapriv.asoc_sta_count > 2)
46981 + {
46982 + pDigTable->CurSTAConnectState = DIG_STA_CONNECT;
46983 + pDigTable->CurMultiSTAConnectState = DIG_MultiSTA_CONNECT;
46984 + }
46985 + }
46986 + else if(check_buddy_fwstate(pAdapter, WIFI_STATION_STATE) == _TRUE &&
46987 + check_buddy_fwstate(pAdapter, _FW_LINKED) == _TRUE)
46988 + {
46989 + pDigTable->CurSTAConnectState = DIG_STA_CONNECT;
46990 +
46991 + }
46992 +#endif //CONFIG_CONCURRENT_MODE
46993 +
46994
46995 dm_initial_gain_STA(pAdapter);
46996 dm_initial_gain_Multi_STA(pAdapter);
46997 + //Baron temp DIG solution for DMP
46998 + //dm_CtrlInitGainByFA(pAdapter);
46999 +
47000 dm_CCK_PacketDetectionThresh(pAdapter);
47001
47002 pDigTable->PreSTAConnectState = pDigTable->CurSTAConnectState;
47003 @@ -795,7 +931,10 @@ static void dm_DIG(
47004 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
47005 struct dm_priv *pdmpriv = &pHalData->dmpriv;
47006 DIG_T *pDigTable = &pdmpriv->DM_DigTable;
47007 -
47008 +
47009 + //Read 0x0c50; Initial gain
47010 + pDigTable->PreIGValue = (u8)PHY_QueryBBReg(pAdapter, rOFDM0_XAAGCCore1, bMaskByte0);
47011 +
47012 //RTPRINT(FDM, DM_Monitor, ("dm_DIG() ==>\n"));
47013
47014 if(pdmpriv->bDMInitialGainEnable == _FALSE)
47015 @@ -854,7 +993,11 @@ static void dm_InitDynamicTxPower(IN PAD
47016 struct dm_priv *pdmpriv = &pHalData->dmpriv;
47017
47018 #ifdef CONFIG_USB_HCI
47019 +#ifdef CONFIG_INTEL_PROXIM
47020 + if((pHalData->BoardType == BOARD_USB_High_PA)||(Adapter->proximity.proxim_support==_TRUE))
47021 +#else
47022 if(pHalData->BoardType == BOARD_USB_High_PA)
47023 +#endif
47024 {
47025 dm_SavePowerIndex(Adapter);
47026 pdmpriv->bDynamicTxPowerEnable = _TRUE;
47027 @@ -900,7 +1043,47 @@ static void dm_DynamicTxPower(IN PADAPTE
47028 pdmpriv->LastDTPLvl=TxHighPwrLevel_Normal;
47029 return;
47030 }
47031 +#ifdef CONFIG_INTEL_PROXIM
47032 + if(Adapter->proximity.proxim_on== _TRUE){
47033 + struct proximity_priv *prox_priv=Adapter->proximity.proximity_priv;
47034 + // Intel set fixed tx power
47035 + printk("\n %s Adapter->proximity.proxim_on=%d prox_priv->proxim_modeinfo->power_output=%d \n",__FUNCTION__,Adapter->proximity.proxim_on,prox_priv->proxim_modeinfo->power_output);
47036 + if(prox_priv!=NULL){
47037 + if(prox_priv->proxim_modeinfo->power_output> 0)
47038
47039 + {
47040 + switch(prox_priv->proxim_modeinfo->power_output){
47041 + case 1:
47042 + pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_100;
47043 + printk("TxHighPwrLevel_100\n");
47044 + break;
47045 + case 2:
47046 + pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_70;
47047 + printk("TxHighPwrLevel_70\n");
47048 + break;
47049 + case 3:
47050 + pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_50;
47051 + printk("TxHighPwrLevel_50\n");
47052 + break;
47053 + case 4:
47054 + pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_35;
47055 + printk("TxHighPwrLevel_35\n");
47056 + break;
47057 + case 5:
47058 + pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_15;
47059 + printk("TxHighPwrLevel_15\n");
47060 + break;
47061 + default:
47062 + pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_100;
47063 + printk("TxHighPwrLevel_100\n");
47064 + break;
47065 + }
47066 + }
47067 + }
47068 + }
47069 + else
47070 +#endif
47071 +{
47072 if(check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) // Default port
47073 {
47074 //todo: AP Mode
47075 @@ -938,7 +1121,7 @@ static void dm_DynamicTxPower(IN PADAPTE
47076 pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
47077 //RT_TRACE(COMP_HIPWR, DBG_LOUD, ("TxHighPwrLevel_Normal\n"));
47078 }
47079 -
47080 +}
47081 if( (pdmpriv->DynamicTxHighPowerLvl != pdmpriv->LastDTPLvl) )
47082 {
47083 PHY_SetTxPowerLevel8192C(Adapter, pHalData->CurrentChannel);
47084 @@ -1230,8 +1413,6 @@ dm_CheckEdcaTurbo(
47085 edca_param = 0x6ea42b;
47086 }
47087 #endif
47088 - if(Adapter->registrypriv.intel_class_mode==1)
47089 - edca_param=0xa44f;
47090 rtw_write32(Adapter, REG_EDCA_BE_PARAM, edca_param);
47091
47092 pdmpriv->prv_traffic_idx = trafficIndex;
47093 @@ -1260,30 +1441,28 @@ dm_CheckEdcaTurbo_EXIT:
47094
47095 }
47096
47097 -#define DPK_DELTA_MAPPING_NUM 13
47098 -#define index_mapping_HP_NUM 15
47099 -//091212 chiyokolin
47100 +#define DPK_DELTA_MAPPING_NUM 13
47101 +#define index_mapping_HP_NUM 15
47102 +
47103 static VOID
47104 dm_TXPowerTrackingCallback_ThermalMeter_92C(
47105 IN PADAPTER Adapter)
47106 {
47107 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
47108 struct dm_priv *pdmpriv = &pHalData->dmpriv;
47109 - u8 ThermalValue = 0, delta, delta_LCK, delta_IQK, delta_HP, TimeOut = 100, ThermalValue_HP_count = 0;
47110 - u32 ThermalValue_HP = 0;
47111 - s8 delta_DPK;
47112 + u8 ThermalValue = 0, delta, delta_LCK, delta_IQK, delta_HP, TimeOut = 100;
47113 int ele_A, ele_D, TempCCk, X, value32;
47114 int Y, ele_C;
47115 - s8 OFDM_index[2], CCK_index = 0, OFDM_index_old[2], CCK_index_old = 0, delta_APK;
47116 - int i = 0, CCKSwingNeedUpdate = 0;
47117 + s8 OFDM_index[2], CCK_index = 0, OFDM_index_old[2], CCK_index_old = 0;
47118 + int i = 0;
47119 BOOLEAN is2T = IS_92C_SERIAL(pHalData->VersionID);
47120 -#if 0
47121 -//#ifdef CONFIG_MP_INCLUDED
47122 - PMPT_CONTEXT pMptCtx = &(Adapter->MptCtx);
47123 - pu1Byte TxPwrLevel = pMptCtx->TxPwrLevel;
47124 -#endif
47125
47126 +#if MP_DRIVER == 1
47127 + PMPT_CONTEXT pMptCtx = &(Adapter->mppriv.MptCtx);
47128 + u8 *TxPwrLevel = pMptCtx->TxPwrLevel;
47129 +#endif
47130 u8 OFDM_min_index = 6, rf; //OFDM BB Swing should be less than +3.0dB, which is required by Arthur
47131 +#if 0
47132 u32 DPK_delta_mapping[2][DPK_DELTA_MAPPING_NUM] = {
47133 {0x1c, 0x1c, 0x1d, 0x1d, 0x1e,
47134 0x1f, 0x00, 0x00, 0x01, 0x01,
47135 @@ -1291,14 +1470,18 @@ dm_TXPowerTrackingCallback_ThermalMeter_
47136 {0x1c, 0x1d, 0x1e, 0x1e, 0x1e,
47137 0x1f, 0x00, 0x00, 0x01, 0x02,
47138 0x02, 0x03, 0x03}};
47139 -
47140 - s8 index_mapping_HP[index_mapping_HP_NUM] = {
47141 +#endif
47142 +#ifdef CONFIG_USB_HCI
47143 + u8 ThermalValue_HP_count = 0;
47144 + u32 ThermalValue_HP = 0;
47145 + s32 index_mapping_HP[index_mapping_HP_NUM] = {
47146 0, 1, 3, 4, 6,
47147 7, 9, 10, 12, 13,
47148 15, 16, 18, 19, 21
47149 };
47150
47151 s8 index_HP;
47152 +#endif
47153
47154 pdmpriv->TXPowerTrackingCallbackCnt++; //cosa add for debug
47155 pdmpriv->bTXPowerTrackingInit = _TRUE;
47156 @@ -1310,12 +1493,11 @@ dm_TXPowerTrackingCallback_ThermalMeter_
47157
47158 //DBG_8192C("===>dm_TXPowerTrackingCallback_ThermalMeter_92C\n");
47159
47160 - ThermalValue = (u8)PHY_QueryRFReg(Adapter, RF90_PATH_A, RF_T_METER, 0x1f); // 0x24: RF Reg[4:0]
47161 + ThermalValue = (u8)PHY_QueryRFReg(Adapter, RF_PATH_A, RF_T_METER, 0x1f); // 0x24: RF Reg[4:0]
47162
47163 //DBG_8192C("\n\nReadback Thermal Meter = 0x%x pre thermal meter 0x%x EEPROMthermalmeter 0x%x\n",ThermalValue,pdmpriv->ThermalValue, pHalData->EEPROMThermalMeter);
47164
47165 rtl8192c_PHY_APCalibrate(Adapter, (ThermalValue - pHalData->EEPROMThermalMeter));
47166 - rtl8192c_PHY_DigitalPredistortion(Adapter);
47167
47168 if(is2T)
47169 rf = 2;
47170 @@ -1328,7 +1510,7 @@ dm_TXPowerTrackingCallback_ThermalMeter_
47171 {
47172 //Query OFDM path A default setting
47173 ele_D = PHY_QueryBBReg(Adapter, rOFDM0_XATxIQImbalance, bMaskDWord)&bMaskOFDM_D;
47174 - for(i=0; i<OFDM_TABLE_SIZE; i++) //find the index
47175 + for(i=0; i<OFDM_TABLE_SIZE_92C; i++) //find the index
47176 {
47177 if(ele_D == (OFDMSwingTable[i]&bMaskOFDM_D))
47178 {
47179 @@ -1342,7 +1524,7 @@ dm_TXPowerTrackingCallback_ThermalMeter_
47180 if(is2T)
47181 {
47182 ele_D = PHY_QueryBBReg(Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord)&bMaskOFDM_D;
47183 - for(i=0; i<OFDM_TABLE_SIZE; i++) //find the index
47184 + for(i=0; i<OFDM_TABLE_SIZE_92C; i++) //find the index
47185 {
47186 if(ele_D == (OFDMSwingTable[i]&bMaskOFDM_D))
47187 {
47188 @@ -1434,7 +1616,6 @@ dm_TXPowerTrackingCallback_ThermalMeter_
47189 }
47190 delta_LCK = (ThermalValue > pdmpriv->ThermalValue_LCK)?(ThermalValue - pdmpriv->ThermalValue_LCK):(pdmpriv->ThermalValue_LCK - ThermalValue);
47191 delta_IQK = (ThermalValue > pdmpriv->ThermalValue_IQK)?(ThermalValue - pdmpriv->ThermalValue_IQK):(pdmpriv->ThermalValue_IQK - ThermalValue);
47192 - delta_DPK = pdmpriv->ThermalValue_DPK - ThermalValue;
47193
47194 //DBG_8192C("Readback Thermal Meter = 0x%lx pre thermal meter 0x%lx EEPROMthermalmeter 0x%lx delta 0x%lx delta_LCK 0x%lx delta_IQK 0x%lx\n", ThermalValue, pHalData->ThermalValue, pHalData->EEPROMThermalMeter, delta, delta_LCK, delta_IQK);
47195
47196 @@ -1480,29 +1661,26 @@ dm_TXPowerTrackingCallback_ThermalMeter_
47197 {
47198 for(i = 0; i < rf; i++)
47199 pdmpriv->OFDM_index[i] -= delta;
47200 -
47201 pdmpriv->CCK_index -= delta;
47202 }
47203 else
47204 {
47205 for(i = 0; i < rf; i++)
47206 pdmpriv->OFDM_index[i] += delta;
47207 -
47208 pdmpriv->CCK_index += delta;
47209 }
47210 }
47211
47212 - /*
47213 - if(is2T)
47214 + /*if(is2T)
47215 {
47216 DBG_8192C("temp OFDM_A_index=0x%x, OFDM_B_index=0x%x, CCK_index=0x%x\n",
47217 - pdmpriv->OFDM_index[0], pdmpriv->OFDM_index[1], pdmpriv->CCK_index);
47218 + pdmpriv->OFDM_index[0], pdmpriv->OFDM_index[1], pdmpriv->CCK_index);
47219 }
47220 else
47221 {
47222 - //DBG_8192C("temp OFDM_A_index=0x%x, CCK_index=0x%x\n",pdmpriv->OFDM_index[0], pdmpriv->CCK_index);
47223 - }
47224 - */
47225 + DBG_8192C("temp OFDM_A_index=0x%x, CCK_index=0x%x\n",
47226 + pdmpriv->OFDM_index[0], pdmpriv->CCK_index);
47227 + }*/
47228
47229 //no adjust
47230 #ifdef CONFIG_USB_HCI
47231 @@ -1521,8 +1699,8 @@ dm_TXPowerTrackingCallback_ThermalMeter_
47232 OFDM_index[i] = pdmpriv->OFDM_index[i];
47233 CCK_index = pdmpriv->CCK_index;
47234 }
47235 -#if 0
47236 -//#ifdef CONFIG_MP_INCLUDED
47237 +
47238 +#if MP_DRIVER == 1
47239 for(i = 0; i < rf; i++)
47240 {
47241 if(TxPwrLevel[i] >=0 && TxPwrLevel[i] <=26)
47242 @@ -1584,34 +1762,33 @@ dm_TXPowerTrackingCallback_ThermalMeter_
47243
47244 for(i = 0; i < rf; i++)
47245 {
47246 - if(OFDM_index[i] > OFDM_TABLE_SIZE-1)
47247 - OFDM_index[i] = OFDM_TABLE_SIZE-1;
47248 + if(OFDM_index[i] > (OFDM_TABLE_SIZE_92C-1))
47249 + OFDM_index[i] = (OFDM_TABLE_SIZE_92C-1);
47250 else if (OFDM_index[i] < OFDM_min_index)
47251 OFDM_index[i] = OFDM_min_index;
47252 }
47253
47254 - if(CCK_index > CCK_TABLE_SIZE-1)
47255 - CCK_index = CCK_TABLE_SIZE-1;
47256 + if(CCK_index > (CCK_TABLE_SIZE-1))
47257 + CCK_index = (CCK_TABLE_SIZE-1);
47258 else if (CCK_index < 0)
47259 CCK_index = 0;
47260
47261 - /*
47262 - if(is2T)
47263 + /*if(is2T)
47264 {
47265 - DBG_8192C("new OFDM_A_index=0x%x, OFDM_B_index=0x%x, CCK_index=0x%x\n", OFDM_index[0], OFDM_index[1], CCK_index);
47266 + DBG_8192C("new OFDM_A_index=0x%x, OFDM_B_index=0x%x, CCK_index=0x%x\n",
47267 + OFDM_index[0], OFDM_index[1], CCK_index);
47268 }
47269 else
47270 {
47271 - //DBG_8192C("new OFDM_A_index=0x%x, CCK_index=0x%x\n", OFDM_index[0], CCK_index);
47272 - }
47273 - */
47274 -
47275 + DBG_8192C("new OFDM_A_index=0x%x, CCK_index=0x%x\n",
47276 + OFDM_index[0], CCK_index);
47277 + }*/
47278 }
47279
47280 if(pdmpriv->TxPowerTrackControl && (delta != 0 || delta_HP != 0))
47281 {
47282 //Adujst OFDM Ant_A according to IQK result
47283 - ele_D = (OFDMSwingTable[(u8)OFDM_index[0]] & 0xFFC00000)>>22;
47284 + ele_D = (OFDMSwingTable[OFDM_index[0]] & 0xFFC00000)>>22;
47285 X = pdmpriv->RegE94;
47286 Y = pdmpriv->RegE9C;
47287
47288 @@ -1642,7 +1819,7 @@ dm_TXPowerTrackingCallback_ThermalMeter_
47289 }
47290 else
47291 {
47292 - PHY_SetBBReg(Adapter, rOFDM0_XATxIQImbalance, bMaskDWord, OFDMSwingTable[(u8)OFDM_index[0]]);
47293 + PHY_SetBBReg(Adapter, rOFDM0_XATxIQImbalance, bMaskDWord, OFDMSwingTable[OFDM_index[0]]);
47294 PHY_SetBBReg(Adapter, rOFDM0_XCTxAFE, bMaskH4Bits, 0x00);
47295 PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT31|BIT29, 0x00);
47296 }
47297 @@ -1651,24 +1828,24 @@ dm_TXPowerTrackingCallback_ThermalMeter_
47298
47299 //Adjust CCK according to IQK result
47300 if(!pdmpriv->bCCKinCH14){
47301 - rtw_write8(Adapter, 0xa22, CCKSwingTable_Ch1_Ch13[(u8)CCK_index][0]);
47302 - rtw_write8(Adapter, 0xa23, CCKSwingTable_Ch1_Ch13[(u8)CCK_index][1]);
47303 - rtw_write8(Adapter, 0xa24, CCKSwingTable_Ch1_Ch13[(u8)CCK_index][2]);
47304 - rtw_write8(Adapter, 0xa25, CCKSwingTable_Ch1_Ch13[(u8)CCK_index][3]);
47305 - rtw_write8(Adapter, 0xa26, CCKSwingTable_Ch1_Ch13[(u8)CCK_index][4]);
47306 - rtw_write8(Adapter, 0xa27, CCKSwingTable_Ch1_Ch13[(u8)CCK_index][5]);
47307 - rtw_write8(Adapter, 0xa28, CCKSwingTable_Ch1_Ch13[(u8)CCK_index][6]);
47308 - rtw_write8(Adapter, 0xa29, CCKSwingTable_Ch1_Ch13[(u8)CCK_index][7]);
47309 + rtw_write8(Adapter, 0xa22, CCKSwingTable_Ch1_Ch13[CCK_index][0]);
47310 + rtw_write8(Adapter, 0xa23, CCKSwingTable_Ch1_Ch13[CCK_index][1]);
47311 + rtw_write8(Adapter, 0xa24, CCKSwingTable_Ch1_Ch13[CCK_index][2]);
47312 + rtw_write8(Adapter, 0xa25, CCKSwingTable_Ch1_Ch13[CCK_index][3]);
47313 + rtw_write8(Adapter, 0xa26, CCKSwingTable_Ch1_Ch13[CCK_index][4]);
47314 + rtw_write8(Adapter, 0xa27, CCKSwingTable_Ch1_Ch13[CCK_index][5]);
47315 + rtw_write8(Adapter, 0xa28, CCKSwingTable_Ch1_Ch13[CCK_index][6]);
47316 + rtw_write8(Adapter, 0xa29, CCKSwingTable_Ch1_Ch13[CCK_index][7]);
47317 }
47318 else{
47319 - rtw_write8(Adapter, 0xa22, CCKSwingTable_Ch14[(u8)CCK_index][0]);
47320 - rtw_write8(Adapter, 0xa23, CCKSwingTable_Ch14[(u8)CCK_index][1]);
47321 - rtw_write8(Adapter, 0xa24, CCKSwingTable_Ch14[(u8)CCK_index][2]);
47322 - rtw_write8(Adapter, 0xa25, CCKSwingTable_Ch14[(u8)CCK_index][3]);
47323 - rtw_write8(Adapter, 0xa26, CCKSwingTable_Ch14[(u8)CCK_index][4]);
47324 - rtw_write8(Adapter, 0xa27, CCKSwingTable_Ch14[(u8)CCK_index][5]);
47325 - rtw_write8(Adapter, 0xa28, CCKSwingTable_Ch14[(u8)CCK_index][6]);
47326 - rtw_write8(Adapter, 0xa29, CCKSwingTable_Ch14[(u8)CCK_index][7]);
47327 + rtw_write8(Adapter, 0xa22, CCKSwingTable_Ch14[CCK_index][0]);
47328 + rtw_write8(Adapter, 0xa23, CCKSwingTable_Ch14[CCK_index][1]);
47329 + rtw_write8(Adapter, 0xa24, CCKSwingTable_Ch14[CCK_index][2]);
47330 + rtw_write8(Adapter, 0xa25, CCKSwingTable_Ch14[CCK_index][3]);
47331 + rtw_write8(Adapter, 0xa26, CCKSwingTable_Ch14[CCK_index][4]);
47332 + rtw_write8(Adapter, 0xa27, CCKSwingTable_Ch14[CCK_index][5]);
47333 + rtw_write8(Adapter, 0xa28, CCKSwingTable_Ch14[CCK_index][6]);
47334 + rtw_write8(Adapter, 0xa29, CCKSwingTable_Ch14[CCK_index][7]);
47335 }
47336
47337 if(is2T)
47338 @@ -1704,7 +1881,7 @@ dm_TXPowerTrackingCallback_ThermalMeter_
47339
47340 }
47341 else{
47342 - PHY_SetBBReg(Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord, OFDMSwingTable[(u8)OFDM_index[1]]);
47343 + PHY_SetBBReg(Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord, OFDMSwingTable[OFDM_index[1]]);
47344 PHY_SetBBReg(Adapter, rOFDM0_XDTxAFE, bMaskH4Bits, 0x00);
47345 PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT27|BIT25, 0x00);
47346 }
47347 @@ -1716,7 +1893,7 @@ dm_TXPowerTrackingCallback_ThermalMeter_
47348 DBG_8192C("TxPwrTracking 0xc80 = 0x%x, 0xc94 = 0x%x RF 0x24 = 0x%x\n", \
47349 PHY_QueryBBReg(Adapter, 0xc80, bMaskDWord),\
47350 PHY_QueryBBReg(Adapter, 0xc94, bMaskDWord), \
47351 - PHY_QueryRFReg(Adapter, RF90_PATH_A, 0x24, bMaskDWord));
47352 + PHY_QueryRFReg(Adapter, RF_PATH_A, 0x24, bMaskDWord));
47353 */
47354 }
47355
47356 @@ -1730,20 +1907,6 @@ dm_TXPowerTrackingCallback_ThermalMeter_
47357 rtl8192c_PHY_IQCalibrate(Adapter,_FALSE);
47358 }
47359
47360 - if(delta_DPK != 0)
47361 - {
47362 - delta_DPK = ThermalValue - pHalData->EEPROMThermalMeter;
47363 -
47364 - //if(pdmpriv->bDPPathAOK || pdmpriv->bDPPathBOK)
47365 - // DBG_8192C("TxPwrTracking delata_DPK = %d\n", delta_DPK);
47366 -
47367 - if(pdmpriv->bDPPathAOK)
47368 - PHY_SetBBReg(Adapter, 0xb68, 0x7c00, DPK_delta_mapping[0][((delta_DPK+13)/2)]);
47369 - if(pdmpriv->bDPPathBOK)
47370 - PHY_SetBBReg(Adapter, 0xb6c, 0x7c00, DPK_delta_mapping[1][((delta_DPK+13)/2)]);
47371 - pdmpriv->ThermalValue_DPK = ThermalValue;
47372 - }
47373 -
47374 //update thermal meter value
47375 if(pdmpriv->TxPowerTrackControl)
47376 pdmpriv->ThermalValue = ThermalValue;
47377 @@ -1819,7 +1982,7 @@ dm_CheckTXPowerTracking_ThermalMeter(
47378 if(!pdmpriv->TM_Trigger) //at least delay 1 sec
47379 {
47380 //pHalData->TxPowerCheckCnt++; //cosa add for debug
47381 - PHY_SetRFReg(Adapter, RF90_PATH_A, RF_T_METER, bRFRegOffsetMask, 0x60);
47382 + PHY_SetRFReg(Adapter, RF_PATH_A, RF_T_METER, bRFRegOffsetMask, 0x60);
47383 //DBG_8192C("Trigger 92C Thermal Meter!!\n");
47384
47385 pdmpriv->TM_Trigger = 1;
47386 @@ -2998,9 +3161,9 @@ dm_CheckRfCtrlGPIO(
47387 }
47388 }
47389 else if (IS_HARDWARE_TYPE_8192CU(Adapter) ||
47390 - IS_HARDWARE_TYPE_8723U(Adapter)||
47391 + IS_HARDWARE_TYPE_8723AU(Adapter)||
47392 IS_HARDWARE_TYPE_8192DU(Adapter) ||
47393 - IS_HARDWARE_TYPE_8723S(Adapter))
47394 + IS_HARDWARE_TYPE_8723AS(Adapter))
47395 { // Not support Selective suspend
47396 RT_TRACE(COMP_RF, DBG_LOUD, ("USB SS Disable\n"));
47397 if (SUPPORT_HW_RADIO_DETECT(Adapter))
47398 @@ -3260,14 +3423,14 @@ dm_CheckStatistics(
47399 return;
47400
47401 //2008.12.10 tynli Add for getting Current_Tx_Rate_Reg flexibly.
47402 - Adapter->HalFunc.GetHwRegHandler( Adapter, HW_VAR_INIT_TX_RATE, (pu1Byte)(&Adapter->TxStats.CurrentInitTxRate) );
47403 + rtw_hal_get_hwreg( Adapter, HW_VAR_INIT_TX_RATE, (pu1Byte)(&Adapter->TxStats.CurrentInitTxRate) );
47404
47405 // Calculate current Tx Rate(Successful transmited!!)
47406
47407 // Calculate current Rx Rate(Successful received!!)
47408
47409 //for tx tx retry count
47410 - Adapter->HalFunc.GetHwRegHandler( Adapter, HW_VAR_RETRY_COUNT, (pu1Byte)(&Adapter->TxStats.NumTxRetryCount) );
47411 + rtw_hal_get_hwreg( Adapter, HW_VAR_RETRY_COUNT, (pu1Byte)(&Adapter->TxStats.NumTxRetryCount) );
47412 #endif
47413 }
47414
47415 @@ -3275,10 +3438,14 @@ static void dm_CheckPbcGPIO(_adapter *pa
47416 {
47417 u8 tmp1byte;
47418 u8 bPbcPressed = _FALSE;
47419 + int i=0;
47420
47421 if(!padapter->registrypriv.hw_wps_pbc)
47422 return;
47423
47424 + do
47425 + {
47426 + i++;
47427 #ifdef CONFIG_USB_HCI
47428 tmp1byte = rtw_read8(padapter, GPIO_IO_SEL);
47429 tmp1byte |= (HAL_8192C_HW_GPIO_WPS_BIT);
47430 @@ -3294,30 +3461,44 @@ static void dm_CheckPbcGPIO(_adapter *pa
47431 tmp1byte =rtw_read8(padapter, GPIO_IN);
47432
47433 if (tmp1byte == 0xff)
47434 - return ;
47435 + {
47436 + bPbcPressed = _FALSE;
47437 + break ;
47438 + }
47439
47440 if (tmp1byte&HAL_8192C_HW_GPIO_WPS_BIT)
47441 {
47442 bPbcPressed = _TRUE;
47443 +
47444 + if(i<=3)
47445 + rtw_msleep_os(50);
47446 }
47447 #else
47448 tmp1byte = rtw_read8(padapter, GPIO_IN);
47449 //RT_TRACE(COMP_IO, DBG_TRACE, ("dm_CheckPbcGPIO - %x\n", tmp1byte));
47450
47451 if (tmp1byte == 0xff || padapter->init_adpt_in_progress)
47452 - return ;
47453 + {
47454 + bPbcPressed = _FALSE;
47455 + break ;
47456 + }
47457
47458 if((tmp1byte&HAL_8192C_HW_GPIO_WPS_BIT)==0)
47459 {
47460 bPbcPressed = _TRUE;
47461 +
47462 + if(i<=3)
47463 + rtw_msleep_os(50);
47464 }
47465 -#endif
47466 +#endif
47467
47468 + }while(i<=3 && bPbcPressed == _TRUE);
47469 +
47470 if( _TRUE == bPbcPressed)
47471 {
47472 // Here we only set bPbcPressed to true
47473 // After trigger PBC, the variable will be set to false
47474 - DBG_8192C("CheckPbcGPIO - PBC is pressed\n");
47475 + DBG_8192C("CheckPbcGPIO - PBC is pressed, try_cnt=%d\n", i-1);
47476
47477 #ifdef RTK_DMP_PLATFORM
47478 #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,12))
47479 @@ -3336,7 +3517,7 @@ static void dm_CheckPbcGPIO(_adapter *pa
47480 rtw_signal_process(padapter->pid[0], SIGUSR1);
47481 #endif
47482 #endif
47483 - }
47484 + }
47485 }
47486
47487 #ifdef CONFIG_PCI_HCI
47488 @@ -3641,9 +3822,7 @@ rtl8192c_dm_RF_Saving(
47489 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
47490 struct dm_priv *pdmpriv = &pHalData->dmpriv;
47491 PS_T *pPSTable = &pdmpriv->DM_PSTable;
47492 -
47493 - if(pAdapter->registrypriv.intel_class_mode==1)
47494 - return;
47495 +
47496 if(pdmpriv->initialize == 0){
47497 pdmpriv->rf_saving_Reg874 = (PHY_QueryBBReg(pAdapter, rFPGA0_XCD_RFInterfaceSW, bMaskDWord)&0x1CC000)>>14;
47498 pdmpriv->rf_saving_RegC70 = (PHY_QueryBBReg(pAdapter, rOFDM0_AGCParameter1, bMaskDWord)&BIT3)>>3;
47499 @@ -4424,7 +4603,7 @@ void rtl8192c_init_dm_priv(IN PADAPTER A
47500 PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
47501 struct dm_priv *pdmpriv = &pHalData->dmpriv;
47502
47503 - _rtw_memset(pdmpriv, 0, sizeof(struct dm_priv));
47504 + //_rtw_memset(pdmpriv, 0, sizeof(struct dm_priv));
47505
47506 #ifdef CONFIG_SW_ANTENNA_DIVERSITY
47507 _init_timer(&(pdmpriv->SwAntennaSwitchTimer), Adapter->pnetdev , dm_SW_AntennaSwitchCallback, Adapter);
47508 @@ -4600,52 +4779,85 @@ rtl8192c_InitHalDm(
47509 {
47510 pdmpriv->INIDATA_RATE[i] = rtw_read8(Adapter, REG_INIDATA_RATE_SEL+i) & 0x3f;
47511 }
47512 +
47513 +#ifdef CONFIG_DM_ADAPTIVITY
47514 + pdmpriv->DMFlag |= DYNAMIC_FUNC_ADAPTIVITY;
47515 + dm_adaptivity_init(Adapter);
47516 +#endif
47517 +
47518 }
47519 -VOID
47520 -rtl8192c_HalDmPollingC2HEvt(
47521 - IN PADAPTER padapter
47522 - )
47523 +
47524 +#ifdef CONFIG_CONCURRENT_MODE
47525 +static void FindMinimumRSSI(PADAPTER Adapter)
47526 {
47527 - u8 trigger=0,evt_id=0,evt_len=0,idx=0,tmp8=0,evt_seq=0;
47528 - u8 evt_buf[15];
47529 + PHAL_DATA_TYPE pbuddy_HalData;
47530 + struct dm_priv *pbuddy_dmpriv;
47531 + PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
47532 + struct dm_priv *pdmpriv = &pHalData->dmpriv;
47533 + PADAPTER pbuddy_adapter = Adapter->pbuddy_adapter;
47534 + struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;
47535 +
47536 + if(!rtw_buddy_adapter_up(Adapter))
47537 + return;
47538 +
47539 + pbuddy_HalData = GET_HAL_DATA(pbuddy_adapter);
47540 + pbuddy_dmpriv = &pbuddy_HalData->dmpriv;
47541
47542 - trigger=rtw_read8(padapter,REG_C2HEVT_CLEAR);
47543 - while (trigger ==0xFF)
47544 + //get min. [PWDB] when both interfaces are connected
47545 + if((check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE
47546 + && Adapter->stapriv.asoc_sta_count > 2
47547 + && check_buddy_fwstate(Adapter, _FW_LINKED)) ||
47548 + (check_buddy_fwstate(Adapter, WIFI_AP_STATE) == _TRUE
47549 + && pbuddy_adapter->stapriv.asoc_sta_count > 2
47550 + && check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) ||
47551 + (check_fwstate(pmlmepriv, WIFI_STATION_STATE)
47552 + && check_fwstate(pmlmepriv, _FW_LINKED)
47553 + && check_buddy_fwstate(Adapter,WIFI_STATION_STATE)
47554 + && check_buddy_fwstate(Adapter,_FW_LINKED)))
47555 + {
47556 + if(pdmpriv->UndecoratedSmoothedPWDB > pbuddy_dmpriv->UndecoratedSmoothedPWDB)
47557 + pdmpriv->UndecoratedSmoothedPWDB = pbuddy_dmpriv->UndecoratedSmoothedPWDB;
47558 + }//primary interface is not connected
47559 + else if((check_buddy_fwstate(Adapter, WIFI_AP_STATE) == _TRUE
47560 + && pbuddy_adapter->stapriv.asoc_sta_count > 2) ||
47561 + (check_buddy_fwstate(Adapter,WIFI_STATION_STATE)
47562 + && check_buddy_fwstate(Adapter,_FW_LINKED)))
47563 + {
47564 + pdmpriv->UndecoratedSmoothedPWDB = pbuddy_dmpriv->UndecoratedSmoothedPWDB;
47565 + }
47566 + //secondary is not connected
47567 + else if((check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE
47568 + && Adapter->stapriv.asoc_sta_count > 2) ||
47569 + (check_fwstate(pmlmepriv, WIFI_STATION_STATE)
47570 + && check_fwstate(pmlmepriv, _FW_LINKED)))
47571 {
47572 - tmp8=rtw_read8(padapter,REG_C2HEVT_MSG_NORMAL);
47573 - evt_id=tmp8&0xf;
47574 - evt_len=(tmp8&0xf0)>>4;
47575 - evt_seq=rtw_read8(padapter,REG_C2HEVT_MSG_NORMAL+1);
47576 - DBG_8192C(" %s evt_id =0x%x evt_len=0x%x evt_seq=0x%x\n",__FUNCTION__,evt_id,evt_len,evt_seq);
47577 - for(idx=0;idx<evt_len;idx++){
47578 - evt_buf[idx]=rtw_read8(padapter,(REG_C2HEVT_MSG_NORMAL+2+idx));
47579 - }
47580 - switch(evt_id){
47581 - case EVT_EXT_RA_RPT_EID:
47582 - DBG_8192C(" %s EVT_EXT_RA_RPT_EID[0x%x] evt_len=0x%x\n",__FUNCTION__,evt_id,evt_len);
47583 - {
47584 - u8 mac_id=evt_buf[0],num_sta=evt_len-1;
47585 - struct sta_priv *pstapriv=&padapter->stapriv;
47586 - struct sta_info *psta=NULL;
47587 - DBG_8192C(" %s mac_id=%d\n",__FUNCTION__,mac_id);
47588 - for(idx=0;idx<num_sta;idx++){
47589 - psta=pstapriv->sta_aid[mac_id-2+idx];
47590 - if(psta !=NULL){
47591 - psta->init_rate=evt_buf[idx];
47592 - DBG_8192C(" %s mac_id=%d psta->init_rate=0x%x\n",__FUNCTION__,mac_id,psta->init_rate);
47593 - }
47594 - }
47595 -
47596 - }
47597 - default:
47598 - DBG_8192C(" %s evt_id =0x%x evt_len=0x%x\n",__FUNCTION__,evt_id,evt_len);
47599 - }
47600 - rtw_write8(padapter, REG_C2HEVT_CLEAR,0x0);
47601 - rtw_mdelay_os(1);
47602 - trigger=rtw_read8(padapter,REG_C2HEVT_CLEAR);
47603 + pbuddy_dmpriv->UndecoratedSmoothedPWDB = 0;
47604 }
47605 - //DBG_8192C(" %s End\n",__FUNCTION__);
47606 -}
47607 + //both interfaces are not connected
47608 + else
47609 + {
47610 + pdmpriv->UndecoratedSmoothedPWDB = 0;
47611 + pbuddy_dmpriv->UndecoratedSmoothedPWDB = 0;
47612 + }
47613 +
47614 + //primary interface is ap mode
47615 + if(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE && Adapter->stapriv.asoc_sta_count > 2)
47616 + {
47617 + pbuddy_dmpriv->EntryMinUndecoratedSmoothedPWDB = 0;
47618 + }//secondary interface is ap mode
47619 + else if(check_buddy_fwstate(Adapter, WIFI_AP_STATE) == _TRUE && pbuddy_adapter->stapriv.asoc_sta_count > 2)
47620 + {
47621 + pdmpriv->EntryMinUndecoratedSmoothedPWDB = pbuddy_dmpriv->EntryMinUndecoratedSmoothedPWDB;
47622 + }
47623 + else //both interfaces are not ap mode
47624 + {
47625 + pdmpriv->EntryMinUndecoratedSmoothedPWDB = pbuddy_dmpriv->EntryMinUndecoratedSmoothedPWDB = 0;
47626 + }
47627 +
47628 +}
47629 +
47630 +#endif //CONFIG_CONCURRENT_MODE
47631 +
47632 VOID
47633 rtl8192c_HalDmWatchDog(
47634 IN PADAPTER Adapter
47635 @@ -4653,21 +4865,45 @@ rtl8192c_HalDmWatchDog(
47636 {
47637 BOOLEAN bFwCurrentInPSMode = _FALSE;
47638 BOOLEAN bFwPSAwake = _TRUE;
47639 + u8 hw_init_completed = _FALSE;
47640 PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
47641 struct dm_priv *pdmpriv = &pHalData->dmpriv;
47642 + struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;
47643 +#ifdef CONFIG_CONCURRENT_MODE
47644 + PADAPTER pbuddy_adapter = Adapter->pbuddy_adapter;
47645 +#endif //CONFIG_CONCURRENT_MODE
47646 +
47647 + #if defined(CONFIG_CONCURRENT_MODE)
47648 + if (Adapter->isprimary == _FALSE && pbuddy_adapter) {
47649 + hw_init_completed = pbuddy_adapter->hw_init_completed;
47650 + } else
47651 + #endif
47652 + {
47653 + hw_init_completed = Adapter->hw_init_completed;
47654 + }
47655
47656 + if (hw_init_completed == _FALSE)
47657 + goto skip_dm;
47658
47659 #ifdef CONFIG_LPS
47660 - bFwCurrentInPSMode = Adapter->pwrctrlpriv.bFwCurrentInPSMode;
47661 - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_FWLPS_RF_ON, (u8 *)(&bFwPSAwake));
47662 + #if defined(CONFIG_CONCURRENT_MODE)
47663 + if (Adapter->iface_type != IFACE_PORT0 && pbuddy_adapter) {
47664 + bFwCurrentInPSMode = pbuddy_adapter->pwrctrlpriv.bFwCurrentInPSMode;
47665 + rtw_hal_get_hwreg(pbuddy_adapter, HW_VAR_FWLPS_RF_ON, (u8 *)(&bFwPSAwake));
47666 + } else
47667 + #endif
47668 + {
47669 + bFwCurrentInPSMode = Adapter->pwrctrlpriv.bFwCurrentInPSMode;
47670 + rtw_hal_get_hwreg(Adapter, HW_VAR_FWLPS_RF_ON, (u8 *)(&bFwPSAwake));
47671 + }
47672 #endif
47673
47674 -#ifdef CONFIG_P2P
47675 +#ifdef CONFIG_P2P_PS
47676 // Fw is under p2p powersaving mode, driver should stop dynamic mechanism.
47677 // modifed by thomas. 2011.06.11.
47678 - if(Adapter->wdinfo.p2p_ps_enable)
47679 + if(Adapter->wdinfo.p2p_ps_mode)
47680 bFwPSAwake = _FALSE;
47681 -#endif //CONFIG_P2P
47682 +#endif // CONFIG_P2P_PS
47683
47684 // Stop dynamic mechanism when:
47685 // 1. RF is OFF. (No need to do DM.)
47686 @@ -4679,7 +4915,7 @@ rtl8192c_HalDmWatchDog(
47687 // 4. RFChangeInProgress is TRUE. (Prevent from broken by IPS/HW/SW Rf off.)
47688 // Noted by tynli. 2010.06.01.
47689 //if(rfState == eRfOn)
47690 - if( (Adapter->hw_init_completed == _TRUE)
47691 + if( (hw_init_completed == _TRUE)
47692 && ((!bFwCurrentInPSMode) && bFwPSAwake))
47693 {
47694 //
47695 @@ -4692,14 +4928,21 @@ rtl8192c_HalDmWatchDog(
47696 //
47697 PWDB_Monitor(Adapter);
47698
47699 + dm_RSSIMonitorCheck(Adapter);
47700 +
47701 +#ifdef CONFIG_CONCURRENT_MODE
47702 + if(Adapter->adapter_type > PRIMARY_ADAPTER)
47703 + goto _record_initrate;
47704 +
47705 + FindMinimumRSSI(Adapter);
47706 +#endif
47707 +
47708 //
47709 // Dynamic Initial Gain mechanism.
47710 //
47711 -
47712 - dm_RSSIMonitorCheck(Adapter);
47713 -
47714 dm_FalseAlarmCounterStatistics(Adapter);
47715 dm_DIG(Adapter);
47716 + dm_adaptivity(Adapter);
47717
47718 //
47719 //Dynamic BB Power Saving Mechanism
47720 @@ -4714,7 +4957,12 @@ rtl8192c_HalDmWatchDog(
47721 //
47722 // Tx Power Tracking.
47723 //
47724 - rtl8192c_dm_CheckTXPowerTracking(Adapter);
47725 +#if MP_DRIVER == 0
47726 +#ifdef CONFIG_BUSY_TRAFFIC_SKIP_PWR_TRACK
47727 + if(pmlmepriv->LinkDetectInfo.bBusyTraffic == _FALSE)
47728 +#endif //CONFIG_BUSY_TRAFFIC_SKIP_PWR_TRACK
47729 +#endif
47730 + rtl8192c_dm_CheckTXPowerTracking(Adapter);
47731
47732 //
47733 // Rate Adaptive by Rx Signal Strength mechanism.
47734 @@ -4757,24 +5005,38 @@ rtl8192c_HalDmWatchDog(
47735 // PlatformScheduleWorkItem(&(GET_HAL_DATA(Adapter)->HalResetWorkItem));
47736 #endif
47737
47738 -#ifdef SUPPORT_64_STA
47739 - rtl8192c_HalDmPollingC2HEvt(Adapter);
47740 -#endif //SUPPORT_64_STA
47741 +
47742 +_record_initrate:
47743 +
47744 // Read REG_INIDATA_RATE_SEL value for TXDESC.
47745 if(check_fwstate(&Adapter->mlmepriv, WIFI_STATION_STATE) == _TRUE)
47746 {
47747 pdmpriv->INIDATA_RATE[0] = rtw_read8(Adapter, REG_INIDATA_RATE_SEL) & 0x3f;
47748 +
47749 +#ifdef CONFIG_TDLS
47750 + if(Adapter->tdlsinfo.setup_state == TDLS_LINKED_STATE)
47751 + {
47752 + u8 i=1;
47753 + for(; i < (Adapter->tdlsinfo.macid_index) ; i++)
47754 + {
47755 + pdmpriv->INIDATA_RATE[i] = rtw_read8(Adapter, (REG_INIDATA_RATE_SEL+i)) & 0x3f;
47756 + }
47757 + }
47758 +#endif //CONFIG_TDLS
47759 +
47760 }
47761 else
47762 {
47763 u8 i;
47764 - for(i=1 ;( i < (Adapter->stapriv.asoc_sta_count + 1))&&(i <FW_CTRL_MACID ); i++)
47765 + for(i=1 ; i < (Adapter->stapriv.asoc_sta_count + 1); i++)
47766 {
47767 pdmpriv->INIDATA_RATE[i] = rtw_read8(Adapter, (REG_INIDATA_RATE_SEL+i)) & 0x3f;
47768 }
47769 }
47770 }
47771
47772 +skip_dm:
47773 +
47774 // Check GPIO to determine current RF on/off and Pbc status.
47775 // Check Hardware Radio ON/OFF or not
47776 //if(Adapter->MgntInfo.PowerSaveControl.bGpioRfSw)
47777 --- a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_hal_init.c
47778 +++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_hal_init.c
47779 @@ -16,7 +16,7 @@
47780 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
47781 *
47782 *
47783 - *******************************************************************************/
47784 + ******************************************************************************/
47785
47786 #define _RTL8192C_HAL_INIT_C_
47787 #include <drv_conf.h>
47788 @@ -101,7 +101,7 @@ _FWDownloadEnable(
47789 rtw_write8(Adapter, REG_MCUFWDL, tmp&0xfe);
47790
47791 // Reserved for fw extension.
47792 - //rtw_write8(Adapter, REG_MCUFWDL+1, 0x00);
47793 + rtw_write8(Adapter, REG_MCUFWDL+1, 0x00);
47794 }
47795 }
47796
47797 @@ -123,22 +123,32 @@ _BlockWrite(
47798 u8 *bufferPtr = (u8 *)buffer;
47799 u32 *pu4BytePtr = (u32 *)buffer;
47800 u32 i, offset, blockCount, remainSize;
47801 + u8 remainFW[4] = {0, 0, 0, 0};
47802 + u8 *p = NULL;
47803
47804 blockCount = size / blockSize;
47805 remainSize = size % blockSize;
47806
47807 for(i = 0 ; i < blockCount ; i++){
47808 offset = i * blockSize;
47809 - rtw_write32(Adapter, (FW_8192C_START_ADDRESS + offset), *(pu4BytePtr + i));
47810 + rtw_write32(Adapter, (FW_8192C_START_ADDRESS + offset), cpu_to_le32(*(pu4BytePtr + i)));
47811 }
47812
47813 + p = (u8*)((u32*)(bufferPtr + blockCount * blockSize));
47814 if(remainSize){
47815 - offset = blockCount * blockSize;
47816 - bufferPtr += offset;
47817 -
47818 - for(i = 0 ; i < remainSize ; i++){
47819 - rtw_write8(Adapter, (FW_8192C_START_ADDRESS + offset + i), *(bufferPtr + i));
47820 + switch (remainSize) {
47821 + case 0:
47822 + break;
47823 + case 3:
47824 + remainFW[2]=*(p+2);
47825 + case 2:
47826 + remainFW[1]=*(p+1);
47827 + case 1:
47828 + remainFW[0]=*(p);
47829 + ret = rtw_write32(Adapter, (FW_8192C_START_ADDRESS + blockCount * blockSize),
47830 + le32_to_cpu(*(u32*)remainFW));
47831 }
47832 + return ret;
47833 }
47834 #else
47835
47836 @@ -256,50 +266,36 @@ _WriteFW(
47837 // We can remove _ReadChipVersion from ReadAdapterInfo8192C later.
47838
47839 int ret = _SUCCESS;
47840 - BOOLEAN isNormalChip;
47841 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
47842 -
47843 - isNormalChip = IS_NORMAL_CHIP(pHalData->VersionID);
47844 -
47845 - if(isNormalChip){
47846 - u32 pageNums,remainSize ;
47847 - u32 page,offset;
47848 - u8* bufferPtr = (u8*)buffer;
47849 + u32 pageNums,remainSize ;
47850 + u32 page,offset;
47851 + u8* bufferPtr = (u8*)buffer;
47852
47853 #ifdef CONFIG_PCI_HCI
47854 - // 20100120 Joseph: Add for 88CE normal chip.
47855 - // Fill in zero to make firmware image to dword alignment.
47856 - _FillDummy(bufferPtr, &size);
47857 + // 20100120 Joseph: Add for 88CE normal chip.
47858 + // Fill in zero to make firmware image to dword alignment.
47859 +// _FillDummy(bufferPtr, &size);
47860 #endif
47861
47862 - pageNums = size / MAX_PAGE_SIZE ;
47863 - //RT_ASSERT((pageNums <= 4), ("Page numbers should not greater then 4 \n"));
47864 - remainSize = size % MAX_PAGE_SIZE;
47865 -
47866 - for(page = 0; page < pageNums; page++){
47867 - offset = page *MAX_PAGE_SIZE;
47868 - ret = _PageWrite(Adapter,page, (bufferPtr+offset),MAX_PAGE_SIZE);
47869 -
47870 - if(ret == _FAIL)
47871 - goto exit;
47872 - }
47873 - if(remainSize){
47874 - offset = pageNums *MAX_PAGE_SIZE;
47875 - page = pageNums;
47876 - ret = _PageWrite(Adapter,page, (bufferPtr+offset),remainSize);
47877 -
47878 - if(ret == _FAIL)
47879 - goto exit;
47880 - }
47881 - //RT_TRACE(COMP_INIT, DBG_LOUD, ("_WriteFW Done- for Normal chip.\n"));
47882 + pageNums = size / MAX_PAGE_SIZE ;
47883 + //RT_ASSERT((pageNums <= 4), ("Page numbers should not greater then 4 \n"));
47884 + remainSize = size % MAX_PAGE_SIZE;
47885 +
47886 + for(page = 0; page < pageNums; page++){
47887 + offset = page *MAX_PAGE_SIZE;
47888 + ret = _PageWrite(Adapter,page, (bufferPtr+offset),MAX_PAGE_SIZE);
47889 +
47890 + if(ret == _FAIL)
47891 + goto exit;
47892 }
47893 - else {
47894 - ret = _BlockWrite(Adapter,buffer,size);
47895 + if(remainSize){
47896 + offset = pageNums *MAX_PAGE_SIZE;
47897 + page = pageNums;
47898 + ret = _PageWrite(Adapter,page, (bufferPtr+offset),remainSize);
47899
47900 if(ret == _FAIL)
47901 goto exit;
47902 - //RT_TRACE(COMP_INIT, DBG_LOUD, ("_WriteFW Done- for Test chip.\n"));
47903 - }
47904 + }
47905 + //RT_TRACE(COMP_INIT, DBG_LOUD, ("_WriteFW Done- for Normal chip.\n"));
47906
47907 exit:
47908 return ret;
47909 @@ -311,7 +307,6 @@ static int _FWFreeToGo(
47910 {
47911 u32 counter = 0;
47912 u32 value32;
47913 - u8 value8;
47914 u32 restarted = _FALSE;
47915
47916 // polling CheckSum report
47917 @@ -328,10 +323,10 @@ static int _FWFreeToGo(
47918 //RT_TRACE(COMP_INIT, DBG_LOUD, ("Checksum report OK ! REG_MCUFWDL:0x%08x .\n",value32));
47919
47920
47921 - value8 = rtw_read8(Adapter, REG_MCUFWDL);
47922 - value8 |= MCUFWDL_RDY;
47923 - value8 &= ~WINTINI_RDY;
47924 - rtw_write8(Adapter, REG_MCUFWDL, value8);
47925 + value32 = rtw_read32(Adapter, REG_MCUFWDL);
47926 + value32 |= MCUFWDL_RDY;
47927 + value32 &= ~WINTINI_RDY;
47928 + rtw_write32(Adapter, REG_MCUFWDL, value32);
47929
47930
47931 POLLING_FW_READY:
47932 @@ -432,7 +427,7 @@ int FirmwareDownload92C(
47933 s8 R92CFwImageFileName_TSMC_WW[] ={RTL8192C_FW_TSMC_WW_IMG};
47934 s8 R92CFwImageFileName_UMC_WW[] ={RTL8192C_FW_UMC_WW_IMG};
47935 s8 R92CFwImageFileName_UMC_B_WW[] ={RTL8192C_FW_UMC_B_WW_IMG};
47936 -#endif
47937 +#endif //CONFIG_WOWLAN
47938
47939 //s8 R8723FwImageFileName_UMC[] ={RTL8723_FW_UMC_IMG};
47940 u8* FwImage = NULL;
47941 @@ -442,7 +437,7 @@ int FirmwareDownload92C(
47942 u8* FwImageWoWLAN;
47943 u32 FwImageWoWLANLen;
47944 char* pFwImageFileName_WoWLAN;
47945 -#endif
47946 +#endif //CONFIG_WOWLAN
47947 u8* pucMappedFile = NULL;
47948 //vivi, merge 92c and 92s into one driver, 20090817
47949 //vivi modify this temply, consider it later!!!!!!!!
47950 @@ -461,55 +456,43 @@ int FirmwareDownload92C(
47951 goto Exit;
47952 }
47953
47954 - if(IS_NORMAL_CHIP(pHalData->VersionID))
47955 + if(IS_VENDOR_UMC_A_CUT(pHalData->VersionID) && !IS_92C_SERIAL(pHalData->VersionID))
47956 {
47957 - if(IS_VENDOR_UMC_A_CUT(pHalData->VersionID) && !IS_92C_SERIAL(pHalData->VersionID))
47958 - {
47959 - pFwImageFileName = R92CFwImageFileName_UMC;
47960 - FwImage = Rtl819XFwUMCACutImageArray;
47961 - FwImageLen = UMCACutImgArrayLength;
47962 -#ifdef CONFIG_WOWLAN
47963 - pFwImageFileName_WoWLAN = R92CFwImageFileName_UMC_WW;
47964 - FwImageWoWLAN= Rtl8192C_FwUMCWWImageArray;
47965 - FwImageWoWLANLen =UMCACutWWImgArrayLength ;
47966 -#endif
47967 - DBG_8192C(" ===> FirmwareDownload91C() fw:Rtl819XFwImageArray_UMC\n");
47968 - }
47969 - else if(IS_81xxC_VENDOR_UMC_B_CUT(pHalData->VersionID))
47970 - {
47971 - // The ROM code of UMC B-cut Fw is the same as TSMC. by tynli. 2011.01.14.
47972 - pFwImageFileName = R92CFwImageFileName_UMC_B;
47973 - FwImage = Rtl819XFwUMCBCutImageArray;
47974 - FwImageLen = UMCBCutImgArrayLength;
47975 + pFwImageFileName = R92CFwImageFileName_UMC;
47976 + FwImage = Rtl819XFwUMCACutImageArray;
47977 + FwImageLen = UMCACutImgArrayLength;
47978 #ifdef CONFIG_WOWLAN
47979 - pFwImageFileName_WoWLAN = R92CFwImageFileName_UMC_B_WW;
47980 - FwImageWoWLAN= Rtl8192C_FwUMCBCutWWImageArray;
47981 - FwImageWoWLANLen =UMCBCutWWImgArrayLength ;
47982 -#endif
47983 -
47984 - DBG_8192C(" ===> FirmwareDownload91C() fw:Rtl819XFwImageArray_UMC_B\n");
47985 - }
47986 - else
47987 - {
47988 - pFwImageFileName = R92CFwImageFileName_TSMC;
47989 - FwImage = Rtl819XFwTSMCImageArray;
47990 - FwImageLen = TSMCImgArrayLength;
47991 + pFwImageFileName_WoWLAN = R92CFwImageFileName_UMC_WW;
47992 + FwImageWoWLAN= Rtl8192C_FwUMCWWImageArray;
47993 + FwImageWoWLANLen =UMCACutWWImgArrayLength ;
47994 +#endif //CONFIG_WOWLAN
47995 + DBG_8192C(" ===> FirmwareDownload91C() fw:Rtl819XFwImageArray_UMC\n");
47996 + }
47997 + else if(IS_81xxC_VENDOR_UMC_B_CUT(pHalData->VersionID))
47998 + {
47999 + // The ROM code of UMC B-cut Fw is the same as TSMC. by tynli. 2011.01.14.
48000 + pFwImageFileName = R92CFwImageFileName_UMC_B;
48001 + FwImage = Rtl819XFwUMCBCutImageArray;
48002 + FwImageLen = UMCBCutImgArrayLength;
48003 #ifdef CONFIG_WOWLAN
48004 - pFwImageFileName_WoWLAN = R92CFwImageFileName_TSMC_WW;
48005 - FwImageWoWLAN= Rtl8192C_FwTSMCWWImageArray;
48006 - FwImageWoWLANLen =TSMCWWImgArrayLength ;
48007 -#endif
48008 - DBG_8192C(" ===> FirmwareDownload91C() fw:Rtl819XFwImageArray_TSMC\n");
48009 - }
48010 + pFwImageFileName_WoWLAN = R92CFwImageFileName_UMC_B_WW;
48011 + FwImageWoWLAN= Rtl8192C_FwUMCBCutWWImageArray;
48012 + FwImageWoWLANLen =UMCBCutWWImgArrayLength ;
48013 +#endif //CONFIG_WOWLAN
48014 +
48015 + DBG_8192C(" ===> FirmwareDownload91C() fw:Rtl819XFwImageArray_UMC_B\n");
48016 }
48017 else
48018 {
48019 - #if 0
48020 - pFwImageFileName = TestChipFwFile;
48021 - FwImage = Rtl8192CTestFwImg;
48022 - FwImageLen = Rtl8192CTestFwImgLen;
48023 - RT_TRACE(COMP_INIT, DBG_LOUD, (" ===> FirmwareDownload91C() fw:Rtl8192CTestFwImg\n"));
48024 - #endif
48025 + pFwImageFileName = R92CFwImageFileName_TSMC;
48026 + FwImage = Rtl819XFwTSMCImageArray;
48027 + FwImageLen = TSMCImgArrayLength;
48028 +#ifdef CONFIG_WOWLAN
48029 + pFwImageFileName_WoWLAN = R92CFwImageFileName_TSMC_WW;
48030 + FwImageWoWLAN= Rtl8192C_FwTSMCWWImageArray;
48031 + FwImageWoWLANLen =TSMCWWImgArrayLength ;
48032 +#endif //CONFIG_WOWLAN
48033 + DBG_8192C(" ===> FirmwareDownload91C() fw:Rtl819XFwImageArray_TSMC\n");
48034 }
48035
48036 //RT_TRACE(COMP_INIT, DBG_LOUD, (" ===> FirmwareDownload91C() fw:%s\n", pFwImageFileName));
48037 @@ -559,7 +542,7 @@ int FirmwareDownload92C(
48038 pFirmware->szWoWLANFwBuffer=FwImageWoWLAN;
48039 pFirmware->ulWoWLANFwLength = FwImageWoWLANLen;
48040 }
48041 -#endif
48042 +#endif //CONFIG_WOWLAN
48043
48044 break;
48045 }
48046 @@ -571,23 +554,20 @@ int FirmwareDownload92C(
48047 pFwHdr = (PRT_8192C_FIRMWARE_HDR)pFirmware->szWoWLANFwBuffer;
48048 }
48049 else
48050 -#endif
48051 +#endif //CONFIG_WOWLAN
48052 {
48053 - #ifdef DBG_FW_STORE_FILE_PATH //used to store firmware to file...
48054 - if(pFirmware->ulFwLength > 0)
48055 - {
48056 - rtw_store_to_file(DBG_FW_STORE_FILE_PATH, pFirmware->szFwBuffer, pFirmware->ulFwLength);
48057 - }
48058 - #endif
48059 -
48060 -
48061 -
48062 + #ifdef DBG_FW_STORE_FILE_PATH //used to store firmware to file...
48063 + if(pFirmware->ulFwLength > 0)
48064 + {
48065 + rtw_store_to_file(DBG_FW_STORE_FILE_PATH, pFirmware->szFwBuffer, pFirmware->ulFwLength);
48066 + }
48067 + #endif
48068
48069 - pFirmwareBuf = pFirmware->szFwBuffer;
48070 - FirmwareLen = pFirmware->ulFwLength;
48071 + pFirmwareBuf = pFirmware->szFwBuffer;
48072 + FirmwareLen = pFirmware->ulFwLength;
48073
48074 - // To Check Fw header. Added by tynli. 2009.12.04.
48075 - pFwHdr = (PRT_8192C_FIRMWARE_HDR)pFirmware->szFwBuffer;
48076 + // To Check Fw header. Added by tynli. 2009.12.04.
48077 + pFwHdr = (PRT_8192C_FIRMWARE_HDR)pFirmware->szFwBuffer;
48078 }
48079 pHalData->FirmwareVersion = le16_to_cpu(pFwHdr->Version);
48080 pHalData->FirmwareSubVersion = le16_to_cpu(pFwHdr->Subversion);
48081 @@ -634,6 +614,7 @@ int FirmwareDownload92C(
48082 break;
48083 }
48084 _FWDownloadEnable(Adapter, _FALSE);
48085 +
48086 if(_SUCCESS != rtStatus){
48087 DBG_8192C("DL Firmware failed!\n");
48088 goto Exit;
48089 @@ -671,7 +652,7 @@ InitializeFirmwareVars92C(
48090 pHalData->LastHMEBoxNum = 0;
48091 }
48092
48093 -
48094 +#ifdef CONFIG_WOWLAN
48095 //===========================================
48096
48097 //
48098 @@ -716,7 +697,7 @@ SetFwRelatedForWoWLAN8192CU(
48099
48100 }
48101 }
48102 -
48103 +#endif // CONFIG_WOWLAN
48104
48105 #ifdef CONFIG_BT_COEXIST
48106 static void _update_bt_param(_adapter *padapter)
48107 @@ -812,7 +793,6 @@ void rtl8192c_ReadBluetoothCoexistInfo(
48108 )
48109 {
48110 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
48111 - BOOLEAN isNormal = IS_NORMAL_CHIP(pHalData->VersionID);
48112 struct btcoexist_priv *pbtpriv = &(pHalData->bt_coexist);
48113 u8 rf_opt4;
48114
48115 @@ -825,19 +805,13 @@ void rtl8192c_ReadBluetoothCoexistInfo(
48116 return;
48117 }
48118
48119 - if(isNormal)
48120 - {
48121 - pbtpriv->BT_Coexist = (((PROMContent[EEPROM_RF_OPT1]&BOARD_TYPE_NORMAL_MASK)>>5) == BOARD_USB_COMBO)?_TRUE:_FALSE; // bit [7:5]
48122 - rf_opt4 = PROMContent[EEPROM_RF_OPT4];
48123 - pbtpriv->BT_CoexistType = ((rf_opt4&0xe)>>1); // bit [3:1]
48124 - pbtpriv->BT_Ant_Num = (rf_opt4&0x1); // bit [0]
48125 - pbtpriv->BT_Ant_isolation = ((rf_opt4&0x10)>>4); // bit [4]
48126 - pbtpriv->BT_RadioSharedType = ((rf_opt4&0x20)>>5); // bit [5]
48127 - }
48128 - else
48129 - {
48130 - pbtpriv->BT_Coexist = (PROMContent[EEPROM_RF_OPT4] >> 4) ? _TRUE : _FALSE;
48131 - }
48132 + pbtpriv->BT_Coexist = (((PROMContent[EEPROM_RF_OPT1]&BOARD_TYPE_NORMAL_MASK)>>5) == BOARD_USB_COMBO)?_TRUE:_FALSE; // bit [7:5]
48133 + rf_opt4 = PROMContent[EEPROM_RF_OPT4];
48134 + pbtpriv->BT_CoexistType = ((rf_opt4&0xe)>>1); // bit [3:1]
48135 + pbtpriv->BT_Ant_Num = (rf_opt4&0x1); // bit [0]
48136 + pbtpriv->BT_Ant_isolation = ((rf_opt4&0x10)>>4); // bit [4]
48137 + pbtpriv->BT_RadioSharedType = ((rf_opt4&0x20)>>5); // bit [5]
48138 +
48139 _update_bt_param(Adapter);
48140
48141 }
48142 @@ -859,7 +833,7 @@ rtl8192c_ReadChipVersion(
48143 {
48144 #if 0
48145 // Test chip.
48146 - if(IS_HARDWARE_TYPE_8723(Adapter)) {
48147 + if(IS_HARDWARE_TYPE_8723A(Adapter)) {
48148 ChipVersion |= ((value32 & VENDOR_ID) ? CHIP_VENDOR_UMC : 0);
48149 ChipVersion |= ((value32 & BT_FUNC) ? CHIP_8723: 0); // RTL8723 with BT function.
48150 }
48151 @@ -941,7 +915,7 @@ rtl8192c_ReadChipVersion(
48152 }
48153 else if(IS_8723_SERIES(ChipVersion))
48154 {
48155 - //RT_ASSERT(IS_HARDWARE_TYPE_8723(Adapter), ("Incorrect chip version!!\n"));
48156 + //RT_ASSERT(IS_HARDWARE_TYPE_8723A(Adapter), ("Incorrect chip version!!\n"));
48157 value32 = rtw_read32(Adapter, REG_GPIO_OUTSTS);
48158 ChipVersion |= ((value32 & RF_RL_ID)>>20); //ROM code version.
48159 }
48160 @@ -1035,35 +1009,22 @@ rtl8192c_ReadChipVersion(
48161 return ChipVersion;
48162 }
48163
48164 +void
48165 +rtl8192c_EfuseParseChnlPlan(
48166 + IN PADAPTER padapter,
48167 + IN u8* hwinfo,
48168 + IN BOOLEAN AutoLoadFail
48169 + )
48170 +{
48171 + padapter->mlmepriv.ChannelPlan = hal_com_get_channel_plan(
48172 + padapter
48173 + , hwinfo?hwinfo[EEPROM_CHANNEL_PLAN]:0xFF
48174 + , padapter->registrypriv.channel_plan
48175 + , RT_CHANNEL_DOMAIN_WORLD_WIDE_13
48176 + , AutoLoadFail
48177 + );
48178
48179 -RT_CHANNEL_DOMAIN
48180 -_HalMapChannelPlan8192C(
48181 - IN PADAPTER Adapter,
48182 - IN u8 HalChannelPlan
48183 - )
48184 -{
48185 - RT_CHANNEL_DOMAIN rtChannelDomain;
48186 -
48187 - switch(HalChannelPlan)
48188 - {
48189 -#if 0 /* Not using EEPROM_CHANNEL_PLAN directly */
48190 - case EEPROM_CHANNEL_PLAN_GLOBAL_DOMAIN:
48191 - rtChannelDomain = RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN;
48192 - break;
48193 - case EEPROM_CHANNEL_PLAN_WORLD_WIDE_13:
48194 - rtChannelDomain = RT_CHANNEL_DOMAIN_WORLD_WIDE_13;
48195 - break;
48196 -#endif /* Not using EEPROM_CHANNEL_PLAN directly */
48197 - default:
48198 - if(HalChannelPlan == 0xFF)
48199 - rtChannelDomain = RT_CHANNEL_DOMAIN_WORLD_WIDE_13;
48200 - else
48201 - rtChannelDomain = (RT_CHANNEL_DOMAIN)HalChannelPlan;
48202 - break;
48203 - }
48204 -
48205 - return rtChannelDomain;
48206 -
48207 + DBG_871X("mlmepriv.ChannelPlan = 0x%02x\n", padapter->mlmepriv.ChannelPlan);
48208 }
48209
48210 u8 GetEEPROMSize8192C(PADAPTER Adapter)
48211 @@ -1079,42 +1040,6 @@ u8 GetEEPROMSize8192C(PADAPTER Adapter)
48212 return size;
48213 }
48214
48215 -void rtl8192c_HalSetBrateCfg(
48216 - IN PADAPTER Adapter,
48217 - IN u8 *mBratesOS,
48218 - OUT u16 *pBrateCfg
48219 -)
48220 -{
48221 - u8 is_brate;
48222 - u8 i;
48223 - u8 brate;
48224 -
48225 - for(i=0;i<NDIS_802_11_LENGTH_RATES_EX;i++)
48226 - {
48227 - is_brate = mBratesOS[i] & IEEE80211_BASIC_RATE_MASK;
48228 - brate = mBratesOS[i] & 0x7f;
48229 - if( is_brate )
48230 - {
48231 - switch(brate)
48232 - {
48233 - case IEEE80211_CCK_RATE_1MB: *pBrateCfg |= RATE_1M; break;
48234 - case IEEE80211_CCK_RATE_2MB: *pBrateCfg |= RATE_2M; break;
48235 - case IEEE80211_CCK_RATE_5MB: *pBrateCfg |= RATE_5_5M;break;
48236 - case IEEE80211_CCK_RATE_11MB: *pBrateCfg |= RATE_11M; break;
48237 - case IEEE80211_OFDM_RATE_6MB: *pBrateCfg |= RATE_6M; break;
48238 - case IEEE80211_OFDM_RATE_9MB: *pBrateCfg |= RATE_9M; break;
48239 - case IEEE80211_OFDM_RATE_12MB: *pBrateCfg |= RATE_12M; break;
48240 - case IEEE80211_OFDM_RATE_18MB: *pBrateCfg |= RATE_18M; break;
48241 - case IEEE80211_OFDM_RATE_24MB: *pBrateCfg |= RATE_24M; break;
48242 - case IEEE80211_OFDM_RATE_36MB: *pBrateCfg |= RATE_36M; break;
48243 - case IEEE80211_OFDM_RATE_48MB: *pBrateCfg |= RATE_48M; break;
48244 - case IEEE80211_OFDM_RATE_54MB: *pBrateCfg |= RATE_54M; break;
48245 - }
48246 - }
48247 -
48248 - }
48249 -}
48250 -
48251 void rtl8192c_free_hal_data(_adapter * padapter)
48252 {
48253 _func_enter_;
48254 @@ -1250,7 +1175,7 @@ rtl8192c_EfusePowerSwitch(
48255 {
48256 hal_EfusePowerSwitch_RTL8192C(pAdapter, bWrite, PwrState);
48257 }
48258 - else if(IS_HARDWARE_TYPE_8723(pAdapter))
48259 + else if(IS_HARDWARE_TYPE_8723A(pAdapter))
48260 {
48261 hal_EfusePowerSwitch_RTL8723(pAdapter, bWrite, PwrState);
48262 }
48263 @@ -1377,8 +1302,8 @@ ReadEFuse_RTL8192C(
48264 // 5. Calculate Efuse utilization.
48265 //
48266 efuse_usage = (u8)((efuse_utilized*100)/EFUSE_REAL_CONTENT_LEN);
48267 - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_EFUSE_BYTES, (u8 *)&efuse_utilized);
48268 - //Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_EFUSE_USAGE, (pu1Byte)&efuse_usage);
48269 + rtw_hal_set_hwreg(Adapter, HW_VAR_EFUSE_BYTES, (u8 *)&efuse_utilized);
48270 + //rtw_hal_set_hwreg(Adapter, HW_VAR_EFUSE_USAGE, (pu1Byte)&efuse_usage);
48271 }
48272
48273 static VOID
48274 @@ -1539,8 +1464,8 @@ ReadEFuse_RTL8723(
48275 // 5. Calculate Efuse utilization.
48276 //
48277 efuse_usage = (u8)((efuse_utilized*100)/EFUSE_REAL_CONTENT_LEN);
48278 - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_EFUSE_BYTES, (u8 *)&efuse_utilized);
48279 - //Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_EFUSE_USAGE, (pu1Byte)&efuse_usage);
48280 + rtw_hal_set_hwreg(Adapter, HW_VAR_EFUSE_BYTES, (u8 *)&efuse_utilized);
48281 + //rtw_hal_set_hwreg(Adapter, HW_VAR_EFUSE_USAGE, (pu1Byte)&efuse_usage);
48282 }
48283
48284 static BOOLEAN
48285 @@ -1561,7 +1486,7 @@ Hal_EfuseSwitchToBank(
48286 }
48287 else
48288 {
48289 - if(IS_HARDWARE_TYPE_8723(pAdapter) &&
48290 + if(IS_HARDWARE_TYPE_8723A(pAdapter) &&
48291 INCLUDE_MULTI_FUNC_BT(pAdapter))
48292 {
48293 value32 = rtw_read32(pAdapter, EFUSE_TEST);
48294 @@ -1828,7 +1753,7 @@ ReadEFuseByIC(
48295 {
48296 ReadEFuse_RTL8192C(Adapter, _offset, _size_byte, pbuf, bPseudoTest);
48297 }
48298 - else if(IS_HARDWARE_TYPE_8723(Adapter))
48299 + else if(IS_HARDWARE_TYPE_8723A(Adapter))
48300 {
48301 ReadEFuse_RTL8723(Adapter, _offset, _size_byte, pbuf, bPseudoTest);
48302 }
48303 @@ -1894,7 +1819,7 @@ Hal_EFUSEGetEfuseDefinition(
48304 {
48305 *pMax_section = EFUSE_MAX_SECTION;
48306 }
48307 - else if(IS_HARDWARE_TYPE_8723(pAdapter))
48308 + else if(IS_HARDWARE_TYPE_8723A(pAdapter))
48309 {
48310 *pMax_section = EFUSE_MAX_SECTION_8723;
48311 }
48312 @@ -1944,7 +1869,7 @@ Hal_EFUSEGetEfuseDefinition(
48313 {
48314 *pu2Tmp = (u16)EFUSE_MAP_LEN;
48315 }
48316 - else if(IS_HARDWARE_TYPE_8723(pAdapter))
48317 + else if(IS_HARDWARE_TYPE_8723A(pAdapter))
48318 {
48319 *pu2Tmp = (u16)EFUSE_MAP_LEN_8723;
48320 }
48321 @@ -2320,7 +2245,7 @@ hal_EfuseGetCurrentSize_8723(IN PADAPTER
48322 }
48323 else
48324 {
48325 - pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_EFUSE_BYTES, (u8 *)&efuse_addr);
48326 + rtw_hal_get_hwreg(pAdapter, HW_VAR_EFUSE_BYTES, (u8 *)&efuse_addr);
48327 }
48328 //RTPRINT(FEEPROM, EFUSE_PG, ("hal_EfuseGetCurrentSize_8723(), start_efuse_addr = %d\n", efuse_addr));
48329
48330 @@ -2368,7 +2293,7 @@ hal_EfuseGetCurrentSize_8723(IN PADAPTER
48331 }
48332 else
48333 {
48334 - pAdapter->HalFunc.SetHwRegHandler(pAdapter, HW_VAR_EFUSE_BYTES, (u8 *)&efuse_addr);
48335 + rtw_hal_set_hwreg(pAdapter, HW_VAR_EFUSE_BYTES, (u8 *)&efuse_addr);
48336 //RTPRINT(FEEPROM, EFUSE_PG, ("hal_EfuseGetCurrentSize_8723(), return %d\n", efuse_addr));
48337 }
48338
48339 @@ -2406,7 +2331,7 @@ rtl8192c_EfuseGetCurrentSize(
48340 {
48341 ret = hal_EfuseGetCurrentSize_8192C(pAdapter, bPseudoTest);
48342 }
48343 - else if(IS_HARDWARE_TYPE_8723(pAdapter))
48344 + else if(IS_HARDWARE_TYPE_8723A(pAdapter))
48345 {
48346 ret = hal_EfuseGetCurrentSize_8723(pAdapter, bPseudoTest);
48347 }
48348 @@ -2631,7 +2556,7 @@ Hal_EfusePgPacketRead( IN PADAPTER pAdap
48349 {
48350 ret = hal_EfusePgPacketRead_8192C(pAdapter, offset, data, bPseudoTest);
48351 }
48352 - else if(IS_HARDWARE_TYPE_8723(pAdapter))
48353 + else if(IS_HARDWARE_TYPE_8723A(pAdapter))
48354 {
48355 ret = hal_EfusePgPacketRead_8723(pAdapter, offset, data, bPseudoTest);
48356 }
48357 @@ -3044,7 +2969,7 @@ hal_EfusePartialWriteCheck(
48358 }
48359 else
48360 {
48361 - pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_EFUSE_BYTES, (u8 *)&startAddr);
48362 + rtw_hal_get_hwreg(pAdapter, HW_VAR_EFUSE_BYTES, (u8 *)&startAddr);
48363 startAddr%=EFUSE_REAL_CONTENT_LEN;
48364 }
48365 }
48366 @@ -3533,7 +3458,7 @@ Hal_EfusePgPacketWrite(IN PADAPTER pAdap
48367 {
48368 ret = hal_EfusePgPacketWrite_8192C(pAdapter, offset, word_en, data, bPseudoTest);
48369 }
48370 - else if(IS_HARDWARE_TYPE_8723(pAdapter))
48371 + else if(IS_HARDWARE_TYPE_8723A(pAdapter))
48372 {
48373 ret = hal_EfusePgPacketWrite_8723(pAdapter, offset, word_en, data, bPseudoTest);
48374 }
48375 @@ -3591,7 +3516,62 @@ void rtl8192c_read_chip_version(PADAPTER
48376 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
48377 pHalData->VersionID = rtl8192c_ReadChipVersion(pAdapter);
48378 }
48379 +
48380 +void hal_notch_filter_8192c(_adapter *adapter, bool enable)
48381 +{
48382 + if (enable) {
48383 + DBG_871X("Enable notch filter\n");
48384 + rtw_write8(adapter, rOFDM0_RxDSP+1, rtw_read8(adapter, rOFDM0_RxDSP+1) | BIT1);
48385 + } else {
48386 + DBG_871X("Disable notch filter\n");
48387 + rtw_write8(adapter, rOFDM0_RxDSP+1, rtw_read8(adapter, rOFDM0_RxDSP+1) & ~BIT1);
48388 + }
48389 +}
48390 +
48391 +void hal_reset_security_engine_8192c(_adapter * adapter)
48392 +{
48393 + rtw_write8(adapter, 0x522, 0xFF);
48394 + rtw_write8(adapter, 0x21, 0x35);
48395 + rtw_usleep_os(300);
48396 + rtw_write8(adapter, 0x101, rtw_read8(adapter,0x101)&~0x02);
48397 + rtw_write8(adapter, 0x101, rtw_read8(adapter,0x101)|0x02);
48398 + rtw_write8(adapter, 0x21, 0x55);
48399 + rtw_write8(adapter, 0x522, 0x00);
48400 +}
48401 +
48402 +s32 c2h_id_filter_ccx_8192c(u8 id)
48403 +{
48404 + s32 ret = _FALSE;
48405 + if (id == C2H_CCX_TX_RPT)
48406 + ret = _TRUE;
48407
48408 + return ret;
48409 +}
48410 +
48411 +static s32 c2h_handler_8192c(_adapter *padapter, struct c2h_evt_hdr *c2h_evt)
48412 +{
48413 + s32 ret = _SUCCESS;
48414 + u8 i = 0;
48415 +
48416 + if (c2h_evt == NULL) {
48417 + DBG_8192C("%s c2h_evt is NULL\n",__FUNCTION__);
48418 + ret = _FAIL;
48419 + goto exit;
48420 + }
48421 +
48422 + switch (c2h_evt->id) {
48423 + case C2H_CCX_TX_RPT:
48424 + handle_txrpt_ccx_8192c(padapter, c2h_evt->payload);
48425 + break;
48426 + default:
48427 + ret = _FAIL;
48428 + break;
48429 + }
48430 +
48431 +exit:
48432 + return ret;
48433 +}
48434 +
48435 void rtl8192c_set_hal_ops(struct hal_ops *pHalFunc)
48436 {
48437 pHalFunc->free_hal_data = &rtl8192c_free_hal_data;
48438 @@ -3608,15 +3588,15 @@ void rtl8192c_set_hal_ops(struct hal_ops
48439 pHalFunc->Add_RateATid = &rtl8192c_Add_RateATid;
48440
48441 #ifdef CONFIG_ANTENNA_DIVERSITY
48442 - pHalFunc->SwAntDivBeforeLinkHandler = &SwAntDivBeforeLink8192C;
48443 - pHalFunc->SwAntDivCompareHandler = &SwAntDivCompare8192C;
48444 + pHalFunc->AntDivBeforeLinkHandler = &SwAntDivBeforeLink8192C;
48445 + pHalFunc->AntDivCompareHandler = &SwAntDivCompare8192C;
48446 #endif
48447
48448 pHalFunc->read_bbreg = &rtl8192c_PHY_QueryBBReg;
48449 pHalFunc->write_bbreg = &rtl8192c_PHY_SetBBReg;
48450 pHalFunc->read_rfreg = &rtl8192c_PHY_QueryRFReg;
48451 - pHalFunc->write_rfreg = &rtl8192c_PHY_SetRFReg;
48452 -
48453 + pHalFunc->write_rfreg = &rtl8192c_PHY_SetRFReg;
48454 +
48455 //Efuse related function
48456 pHalFunc->EfusePowerSwitch = &rtl8192c_EfusePowerSwitch;
48457 pHalFunc->ReadEFuse = &rtl8192c_ReadEFuse;
48458 @@ -3627,16 +3607,22 @@ void rtl8192c_set_hal_ops(struct hal_ops
48459 pHalFunc->Efuse_WordEnableDataWrite = &rtl8192c_Efuse_WordEnableDataWrite;
48460
48461 #ifdef DBG_CONFIG_ERROR_DETECT
48462 - pHalFunc->sreset_init_value = &rtl8192c_sreset_init_value;
48463 - pHalFunc->sreset_reset_value = &rtl8192c_sreset_reset_value;
48464 - pHalFunc->silentreset = &rtl8192c_silentreset_for_specific_platform;
48465 + pHalFunc->sreset_init_value = &sreset_init_value;
48466 + pHalFunc->sreset_reset_value = &sreset_reset_value;
48467 + pHalFunc->silentreset = &sreset_reset;
48468 pHalFunc->sreset_xmit_status_check = &rtl8192c_sreset_xmit_status_check;
48469 pHalFunc->sreset_linked_status_check = &rtl8192c_sreset_linked_status_check;
48470 - pHalFunc->sreset_get_wifi_status = &rtl8192c_sreset_get_wifi_status;
48471 + pHalFunc->sreset_get_wifi_status = &sreset_get_wifi_status;
48472 + pHalFunc->sreset_inprogress= &sreset_inprogress;
48473 #endif
48474
48475 #ifdef CONFIG_IOL
48476 pHalFunc->IOL_exec_cmds_sync = &rtl8192c_IOL_exec_cmds_sync;
48477 #endif
48478 + pHalFunc->hal_notch_filter = &hal_notch_filter_8192c;
48479 + pHalFunc->hal_reset_security_engine = hal_reset_security_engine_8192c;
48480 +
48481 + pHalFunc->c2h_handler = c2h_handler_8192c;
48482 + pHalFunc->c2h_id_filter_ccx = c2h_id_filter_ccx_8192c;
48483 }
48484
48485 --- a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_mp.c
48486 +++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_mp.c
48487 @@ -107,7 +107,7 @@ void Hal_mpt_SwitchRfSetting(PADAPTER pA
48488 {
48489 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
48490 struct mp_priv *pmp = &pAdapter->mppriv;
48491 - u8 ChannelToSw = pmp->channel, eRFPath = RF90_PATH_A;
48492 + u8 ChannelToSw = pmp->channel, eRFPath = RF_PATH_A;
48493 u8 ulRateIdx = pmp->rateidx;
48494 u8 ulbandwidth = pmp->bandwidth;
48495 PMPT_CONTEXT pMptCtx = &(pAdapter->mppriv.MptCtx);
48496 @@ -340,7 +340,7 @@ void Hal_MPT_CCKTxPowerAdjustbyIndex(PAD
48497 PMPT_CONTEXT pMptCtx = &pAdapter->mppriv.MptCtx;
48498
48499
48500 - if (!IS_92C_SERIAL(pHalData->VersionID) || !IS_NORMAL_CHIP(pHalData->VersionID))
48501 + if (!IS_92C_SERIAL(pHalData->VersionID))
48502 return;
48503 #if 0
48504 while(PlatformAtomicExchange(&Adapter->IntrCCKRefCount, TRUE) == TRUE)
48505 @@ -459,7 +459,7 @@ void Hal_SetChannel(PADAPTER pAdapter)
48506 for (eRFPath = 0; eRFPath < pHalData->NumTotalRFPath; eRFPath++)
48507 {
48508 if(IS_HARDWARE_TYPE_8192D(pAdapter))
48509 - _write_rfreg(pAdapter, (RF90_RADIO_PATH_E)eRFPath, rRfChannel, 0xFF, channel);
48510 + _write_rfreg(pAdapter, (RF_RADIO_PATH_E)eRFPath, rRfChannel, 0xFF, channel);
48511 else
48512 _write_rfreg(pAdapter, eRFPath, rRfChannel, 0x3FF, channel);
48513 }
48514 @@ -475,13 +475,6 @@ void Hal_SetChannel(PADAPTER pAdapter)
48515 pHalData->dmpriv.bCCKinCH14 = _FALSE;
48516 Hal_MPT_CCKTxPowerAdjust(pAdapter, pHalData->dmpriv.bCCKinCH14);
48517 }
48518 -#if 0
48519 -//#ifdef CONFIG_USB_HCI
48520 - // Georgia add 2009-11-17, suggested by Edlu , for 8188CU ,46 PIN
48521 - if (!IS_92C_SERIAL(pHalData->VersionID) && !IS_NORMAL_CHIP(pHalData->VersionID)) {
48522 - mpt_AdjustRFRegByRateByChan92CU(pAdapter, rate, pHalData->CurrentChannel, bandwidth);
48523 - }
48524 -#endif
48525
48526 #endif
48527 }
48528 @@ -538,14 +531,6 @@ void Hal_SetOFDMTxPower(PADAPTER pAdapte
48529 write_bbreg(pAdapter, rTxAGC_A_Mcs11_Mcs08, bMaskDWord, TxAGC);
48530 write_bbreg(pAdapter, rTxAGC_A_Mcs15_Mcs12, bMaskDWord, TxAGC);
48531
48532 - if (pHalData->dmpriv.bAPKdone && !IS_NORMAL_CHIP(pHalData->VersionID))
48533 - {
48534 - if (tmpval > pMptCtx->APK_bound[RF_PATH_A])
48535 - write_rfreg(pAdapter, RF_PATH_A, 0xe, pHalData->dmpriv.APKoutput[0][0]);
48536 - else
48537 - write_rfreg(pAdapter, RF_PATH_A, 0xe, pHalData->dmpriv.APKoutput[0][1]);
48538 - }
48539 -
48540 // HT Tx-rf(B)
48541 tmpval = TxPower[RF_PATH_B];
48542 TxAGC = (tmpval<<24) | (tmpval<<16) | (tmpval<<8) | tmpval;
48543 @@ -557,14 +542,6 @@ void Hal_SetOFDMTxPower(PADAPTER pAdapte
48544 write_bbreg(pAdapter, rTxAGC_B_Mcs11_Mcs08, bMaskDWord, TxAGC);
48545 write_bbreg(pAdapter, rTxAGC_B_Mcs15_Mcs12, bMaskDWord, TxAGC);
48546
48547 - if (pHalData->dmpriv.bAPKdone && !IS_NORMAL_CHIP(pHalData->VersionID))
48548 - {
48549 - if (tmpval > pMptCtx->APK_bound[RF_PATH_B])
48550 - write_rfreg(pAdapter, RF_PATH_B, 0xe, pHalData->dmpriv.APKoutput[1][0]);
48551 - else
48552 - write_rfreg(pAdapter, RF_PATH_B, 0xe, pHalData->dmpriv.APKoutput[1][1]);
48553 - }
48554 -
48555 RT_TRACE(_module_mp_, _drv_notice_,
48556 ("-SetOFDMTxPower: A[0x%02x] B[0x%02x]\n",
48557 TxPower[RF_PATH_A], TxPower[RF_PATH_B]));
48558 @@ -800,7 +777,7 @@ void Hal_SetAntenna(PADAPTER pAdapter)
48559 // 2008/10/31 MH From SD3 Willi's suggestion. We must read RFA 2T table.
48560 if ((pHalData->VersionID == VERSION_8192S_ACUT)) // For RTL8192SU A-Cut only, by Roger, 2008.11.07.
48561 {
48562 - mpt_RFConfigFromPreParaArrary(pAdapter, 1, RF90_PATH_A);
48563 + mpt_RFConfigFromPreParaArrary(pAdapter, 1, RF_PATH_A);
48564 }
48565 #endif
48566 // 2009/01/08 MH From Sd3 Willis. We need to enable RFA/B by SW control
48567 --- a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_phycfg.c
48568 +++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_phycfg.c
48569 @@ -16,8 +16,7 @@
48570 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
48571 *
48572 *
48573 -
48574 -******************************************************************************/
48575 + ******************************************************************************/
48576 /******************************************************************************
48577
48578 Module: rtl8192c_phycfg.c
48579 @@ -197,7 +196,7 @@ rtl8192c_PHY_SetBBReg(
48580 if(BitMask!= bMaskDWord){//if not "double word" write
48581 OriginalValue = rtw_read32(Adapter, RegAddr);
48582 BitShift = phy_CalculateBitShift(BitMask);
48583 - Data = ((OriginalValue & (~BitMask)) | (Data << BitShift));
48584 + Data = ((OriginalValue & (~BitMask)) | ((Data << BitShift) & BitMask));
48585 }
48586
48587 rtw_write32(Adapter, RegAddr, Data);
48588 @@ -231,7 +230,7 @@ rtl8192c_PHY_SetBBReg(
48589 static u32
48590 phy_FwRFSerialRead(
48591 IN PADAPTER Adapter,
48592 - IN RF90_RADIO_PATH_E eRFPath,
48593 + IN RF_RADIO_PATH_E eRFPath,
48594 IN u32 Offset )
48595 {
48596 u32 retValue = 0;
48597 @@ -260,7 +259,7 @@ phy_FwRFSerialRead(
48598 static VOID
48599 phy_FwRFSerialWrite(
48600 IN PADAPTER Adapter,
48601 - IN RF90_RADIO_PATH_E eRFPath,
48602 + IN RF_RADIO_PATH_E eRFPath,
48603 IN u32 Offset,
48604 IN u32 Data )
48605 {
48606 @@ -275,7 +274,7 @@ phy_FwRFSerialWrite(
48607 *
48608 * Input:
48609 * PADAPTER Adapter,
48610 -* RF90_RADIO_PATH_E eRFPath, //Radio path of A/B/C/D
48611 +* RF_RADIO_PATH_E eRFPath, //Radio path of A/B/C/D
48612 * u4Byte Offset, //The target address to be read
48613 *
48614 * Output: None
48615 @@ -290,7 +289,7 @@ phy_FwRFSerialWrite(
48616 static u32
48617 phy_RFSerialRead(
48618 IN PADAPTER Adapter,
48619 - IN RF90_RADIO_PATH_E eRFPath,
48620 + IN RF_RADIO_PATH_E eRFPath,
48621 IN u32 Offset
48622 )
48623 {
48624 @@ -327,7 +326,7 @@ phy_RFSerialRead(
48625 // For RF A/B write 0x824/82c(does not work in the future)
48626 // We must use 0x824 for RF A and B to execute read trigger
48627 tmplong = PHY_QueryBBReg(Adapter, rFPGA0_XA_HSSIParameter2, bMaskDWord);
48628 - if(eRFPath == RF90_PATH_A)
48629 + if(eRFPath == RF_PATH_A)
48630 tmplong2 = tmplong;
48631 else
48632 tmplong2 = PHY_QueryBBReg(Adapter, pPhyReg->rfHSSIPara2, bMaskDWord);
48633 @@ -343,9 +342,9 @@ phy_RFSerialRead(
48634 PHY_SetBBReg(Adapter, rFPGA0_XA_HSSIParameter2, bMaskDWord, tmplong|bLSSIReadEdge);
48635 rtw_udelay_os(10);//PlatformStallExecution(10);
48636
48637 - if(eRFPath == RF90_PATH_A)
48638 + if(eRFPath == RF_PATH_A)
48639 RfPiEnable = (u8)PHY_QueryBBReg(Adapter, rFPGA0_XA_HSSIParameter1, BIT8);
48640 - else if(eRFPath == RF90_PATH_B)
48641 + else if(eRFPath == RF_PATH_B)
48642 RfPiEnable = (u8)PHY_QueryBBReg(Adapter, rFPGA0_XB_HSSIParameter1, BIT8);
48643
48644 if(RfPiEnable)
48645 @@ -373,7 +372,7 @@ phy_RFSerialRead(
48646 *
48647 * Input:
48648 * PADAPTER Adapter,
48649 -* RF90_RADIO_PATH_E eRFPath, //Radio path of A/B/C/D
48650 +* RF_RADIO_PATH_E eRFPath, //Radio path of A/B/C/D
48651 * u4Byte Offset, //The target address to be read
48652 * u4Byte Data //The new register Data in the target bit position
48653 * //of the target to be read
48654 @@ -412,7 +411,7 @@ phy_RFSerialRead(
48655 static VOID
48656 phy_RFSerialWrite(
48657 IN PADAPTER Adapter,
48658 - IN RF90_RADIO_PATH_E eRFPath,
48659 + IN RF_RADIO_PATH_E eRFPath,
48660 IN u32 Offset,
48661 IN u32 Data
48662 )
48663 @@ -471,7 +470,7 @@ phy_RFSerialWrite(
48664 *
48665 * Input:
48666 * PADAPTER Adapter,
48667 -* RF90_RADIO_PATH_E eRFPath, //Radio path of A/B/C/D
48668 +* RF_RADIO_PATH_E eRFPath, //Radio path of A/B/C/D
48669 * u4Byte RegAddr, //The target address to be read
48670 * u4Byte BitMask //The target bit position in the target address
48671 * //to be read
48672 @@ -483,7 +482,7 @@ phy_RFSerialWrite(
48673 u32
48674 rtl8192c_PHY_QueryRFReg(
48675 IN PADAPTER Adapter,
48676 - IN RF90_RADIO_PATH_E eRFPath,
48677 + IN RF_RADIO_PATH_E eRFPath,
48678 IN u32 RegAddr,
48679 IN u32 BitMask
48680 )
48681 @@ -532,7 +531,7 @@ rtl8192c_PHY_QueryRFReg(
48682 *
48683 * Input:
48684 * PADAPTER Adapter,
48685 -* RF90_RADIO_PATH_E eRFPath, //Radio path of A/B/C/D
48686 +* RF_RADIO_PATH_E eRFPath, //Radio path of A/B/C/D
48687 * u4Byte RegAddr, //The target address to be modified
48688 * u4Byte BitMask //The target bit position in the target address
48689 * //to be modified
48690 @@ -546,7 +545,7 @@ rtl8192c_PHY_QueryRFReg(
48691 VOID
48692 rtl8192c_PHY_SetRFReg(
48693 IN PADAPTER Adapter,
48694 - IN RF90_RADIO_PATH_E eRFPath,
48695 + IN RF_RADIO_PATH_E eRFPath,
48696 IN u32 RegAddr,
48697 IN u32 BitMask,
48698 IN u32 Data
48699 @@ -716,20 +715,12 @@ PHY_MACConfig8192C(
48700 s8 *pszMACRegFile;
48701 s8 sz88CMACRegFile[] = RTL8188C_PHY_MACREG;
48702 s8 sz92CMACRegFile[] = RTL8192C_PHY_MACREG;
48703 - BOOLEAN isNormal = IS_NORMAL_CHIP(pHalData->VersionID);
48704 BOOLEAN is92C = IS_92C_SERIAL(pHalData->VersionID);
48705
48706 - if(isNormal)
48707 - {
48708 - if(is92C)
48709 - pszMACRegFile = sz92CMACRegFile;
48710 - else
48711 - pszMACRegFile = sz88CMACRegFile;
48712 - }
48713 + if(is92C)
48714 + pszMACRegFile = sz92CMACRegFile;
48715 else
48716 - {
48717 - //pszMACRegFile = TestMacRegFile;
48718 - }
48719 + pszMACRegFile = sz88CMACRegFile;
48720
48721 //
48722 // Config MAC
48723 @@ -746,7 +737,7 @@ PHY_MACConfig8192C(
48724 #ifdef CONFIG_PCI_HCI
48725 //this switching setting cause some 8192cu hw have redownload fw fail issue
48726 //improve 2-stream TX EVM by Jenyu
48727 - if(isNormal && is92C)
48728 + if(is92C)
48729 rtw_write8(Adapter, REG_SPS0_CTRL+3,0x71);
48730 #endif
48731
48732 @@ -784,102 +775,102 @@ phy_InitBBRFRegisterDefinition(
48733 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
48734
48735 // RF Interface Sowrtware Control
48736 - pHalData->PHYRegDef[RF90_PATH_A].rfintfs = rFPGA0_XAB_RFInterfaceSW; // 16 LSBs if read 32-bit from 0x870
48737 - pHalData->PHYRegDef[RF90_PATH_B].rfintfs = rFPGA0_XAB_RFInterfaceSW; // 16 MSBs if read 32-bit from 0x870 (16-bit for 0x872)
48738 - pHalData->PHYRegDef[RF90_PATH_C].rfintfs = rFPGA0_XCD_RFInterfaceSW;// 16 LSBs if read 32-bit from 0x874
48739 - pHalData->PHYRegDef[RF90_PATH_D].rfintfs = rFPGA0_XCD_RFInterfaceSW;// 16 MSBs if read 32-bit from 0x874 (16-bit for 0x876)
48740 + pHalData->PHYRegDef[RF_PATH_A].rfintfs = rFPGA0_XAB_RFInterfaceSW; // 16 LSBs if read 32-bit from 0x870
48741 + pHalData->PHYRegDef[RF_PATH_B].rfintfs = rFPGA0_XAB_RFInterfaceSW; // 16 MSBs if read 32-bit from 0x870 (16-bit for 0x872)
48742 + pHalData->PHYRegDef[RF_PATH_C].rfintfs = rFPGA0_XCD_RFInterfaceSW;// 16 LSBs if read 32-bit from 0x874
48743 + pHalData->PHYRegDef[RF_PATH_D].rfintfs = rFPGA0_XCD_RFInterfaceSW;// 16 MSBs if read 32-bit from 0x874 (16-bit for 0x876)
48744
48745 // RF Interface Readback Value
48746 - pHalData->PHYRegDef[RF90_PATH_A].rfintfi = rFPGA0_XAB_RFInterfaceRB; // 16 LSBs if read 32-bit from 0x8E0
48747 - pHalData->PHYRegDef[RF90_PATH_B].rfintfi = rFPGA0_XAB_RFInterfaceRB;// 16 MSBs if read 32-bit from 0x8E0 (16-bit for 0x8E2)
48748 - pHalData->PHYRegDef[RF90_PATH_C].rfintfi = rFPGA0_XCD_RFInterfaceRB;// 16 LSBs if read 32-bit from 0x8E4
48749 - pHalData->PHYRegDef[RF90_PATH_D].rfintfi = rFPGA0_XCD_RFInterfaceRB;// 16 MSBs if read 32-bit from 0x8E4 (16-bit for 0x8E6)
48750 + pHalData->PHYRegDef[RF_PATH_A].rfintfi = rFPGA0_XAB_RFInterfaceRB; // 16 LSBs if read 32-bit from 0x8E0
48751 + pHalData->PHYRegDef[RF_PATH_B].rfintfi = rFPGA0_XAB_RFInterfaceRB;// 16 MSBs if read 32-bit from 0x8E0 (16-bit for 0x8E2)
48752 + pHalData->PHYRegDef[RF_PATH_C].rfintfi = rFPGA0_XCD_RFInterfaceRB;// 16 LSBs if read 32-bit from 0x8E4
48753 + pHalData->PHYRegDef[RF_PATH_D].rfintfi = rFPGA0_XCD_RFInterfaceRB;// 16 MSBs if read 32-bit from 0x8E4 (16-bit for 0x8E6)
48754
48755 // RF Interface Output (and Enable)
48756 - pHalData->PHYRegDef[RF90_PATH_A].rfintfo = rFPGA0_XA_RFInterfaceOE; // 16 LSBs if read 32-bit from 0x860
48757 - pHalData->PHYRegDef[RF90_PATH_B].rfintfo = rFPGA0_XB_RFInterfaceOE; // 16 LSBs if read 32-bit from 0x864
48758 + pHalData->PHYRegDef[RF_PATH_A].rfintfo = rFPGA0_XA_RFInterfaceOE; // 16 LSBs if read 32-bit from 0x860
48759 + pHalData->PHYRegDef[RF_PATH_B].rfintfo = rFPGA0_XB_RFInterfaceOE; // 16 LSBs if read 32-bit from 0x864
48760
48761 // RF Interface (Output and) Enable
48762 - pHalData->PHYRegDef[RF90_PATH_A].rfintfe = rFPGA0_XA_RFInterfaceOE; // 16 MSBs if read 32-bit from 0x860 (16-bit for 0x862)
48763 - pHalData->PHYRegDef[RF90_PATH_B].rfintfe = rFPGA0_XB_RFInterfaceOE; // 16 MSBs if read 32-bit from 0x864 (16-bit for 0x866)
48764 + pHalData->PHYRegDef[RF_PATH_A].rfintfe = rFPGA0_XA_RFInterfaceOE; // 16 MSBs if read 32-bit from 0x860 (16-bit for 0x862)
48765 + pHalData->PHYRegDef[RF_PATH_B].rfintfe = rFPGA0_XB_RFInterfaceOE; // 16 MSBs if read 32-bit from 0x864 (16-bit for 0x866)
48766
48767 //Addr of LSSI. Wirte RF register by driver
48768 - pHalData->PHYRegDef[RF90_PATH_A].rf3wireOffset = rFPGA0_XA_LSSIParameter; //LSSI Parameter
48769 - pHalData->PHYRegDef[RF90_PATH_B].rf3wireOffset = rFPGA0_XB_LSSIParameter;
48770 + pHalData->PHYRegDef[RF_PATH_A].rf3wireOffset = rFPGA0_XA_LSSIParameter; //LSSI Parameter
48771 + pHalData->PHYRegDef[RF_PATH_B].rf3wireOffset = rFPGA0_XB_LSSIParameter;
48772
48773 // RF parameter
48774 - pHalData->PHYRegDef[RF90_PATH_A].rfLSSI_Select = rFPGA0_XAB_RFParameter; //BB Band Select
48775 - pHalData->PHYRegDef[RF90_PATH_B].rfLSSI_Select = rFPGA0_XAB_RFParameter;
48776 - pHalData->PHYRegDef[RF90_PATH_C].rfLSSI_Select = rFPGA0_XCD_RFParameter;
48777 - pHalData->PHYRegDef[RF90_PATH_D].rfLSSI_Select = rFPGA0_XCD_RFParameter;
48778 + pHalData->PHYRegDef[RF_PATH_A].rfLSSI_Select = rFPGA0_XAB_RFParameter; //BB Band Select
48779 + pHalData->PHYRegDef[RF_PATH_B].rfLSSI_Select = rFPGA0_XAB_RFParameter;
48780 + pHalData->PHYRegDef[RF_PATH_C].rfLSSI_Select = rFPGA0_XCD_RFParameter;
48781 + pHalData->PHYRegDef[RF_PATH_D].rfLSSI_Select = rFPGA0_XCD_RFParameter;
48782
48783 // Tx AGC Gain Stage (same for all path. Should we remove this?)
48784 - pHalData->PHYRegDef[RF90_PATH_A].rfTxGainStage = rFPGA0_TxGainStage; //Tx gain stage
48785 - pHalData->PHYRegDef[RF90_PATH_B].rfTxGainStage = rFPGA0_TxGainStage; //Tx gain stage
48786 - pHalData->PHYRegDef[RF90_PATH_C].rfTxGainStage = rFPGA0_TxGainStage; //Tx gain stage
48787 - pHalData->PHYRegDef[RF90_PATH_D].rfTxGainStage = rFPGA0_TxGainStage; //Tx gain stage
48788 + pHalData->PHYRegDef[RF_PATH_A].rfTxGainStage = rFPGA0_TxGainStage; //Tx gain stage
48789 + pHalData->PHYRegDef[RF_PATH_B].rfTxGainStage = rFPGA0_TxGainStage; //Tx gain stage
48790 + pHalData->PHYRegDef[RF_PATH_C].rfTxGainStage = rFPGA0_TxGainStage; //Tx gain stage
48791 + pHalData->PHYRegDef[RF_PATH_D].rfTxGainStage = rFPGA0_TxGainStage; //Tx gain stage
48792
48793 // Tranceiver A~D HSSI Parameter-1
48794 - pHalData->PHYRegDef[RF90_PATH_A].rfHSSIPara1 = rFPGA0_XA_HSSIParameter1; //wire control parameter1
48795 - pHalData->PHYRegDef[RF90_PATH_B].rfHSSIPara1 = rFPGA0_XB_HSSIParameter1; //wire control parameter1
48796 + pHalData->PHYRegDef[RF_PATH_A].rfHSSIPara1 = rFPGA0_XA_HSSIParameter1; //wire control parameter1
48797 + pHalData->PHYRegDef[RF_PATH_B].rfHSSIPara1 = rFPGA0_XB_HSSIParameter1; //wire control parameter1
48798
48799 // Tranceiver A~D HSSI Parameter-2
48800 - pHalData->PHYRegDef[RF90_PATH_A].rfHSSIPara2 = rFPGA0_XA_HSSIParameter2; //wire control parameter2
48801 - pHalData->PHYRegDef[RF90_PATH_B].rfHSSIPara2 = rFPGA0_XB_HSSIParameter2; //wire control parameter2
48802 + pHalData->PHYRegDef[RF_PATH_A].rfHSSIPara2 = rFPGA0_XA_HSSIParameter2; //wire control parameter2
48803 + pHalData->PHYRegDef[RF_PATH_B].rfHSSIPara2 = rFPGA0_XB_HSSIParameter2; //wire control parameter2
48804
48805 // RF switch Control
48806 - pHalData->PHYRegDef[RF90_PATH_A].rfSwitchControl = rFPGA0_XAB_SwitchControl; //TR/Ant switch control
48807 - pHalData->PHYRegDef[RF90_PATH_B].rfSwitchControl = rFPGA0_XAB_SwitchControl;
48808 - pHalData->PHYRegDef[RF90_PATH_C].rfSwitchControl = rFPGA0_XCD_SwitchControl;
48809 - pHalData->PHYRegDef[RF90_PATH_D].rfSwitchControl = rFPGA0_XCD_SwitchControl;
48810 + pHalData->PHYRegDef[RF_PATH_A].rfSwitchControl = rFPGA0_XAB_SwitchControl; //TR/Ant switch control
48811 + pHalData->PHYRegDef[RF_PATH_B].rfSwitchControl = rFPGA0_XAB_SwitchControl;
48812 + pHalData->PHYRegDef[RF_PATH_C].rfSwitchControl = rFPGA0_XCD_SwitchControl;
48813 + pHalData->PHYRegDef[RF_PATH_D].rfSwitchControl = rFPGA0_XCD_SwitchControl;
48814
48815 // AGC control 1
48816 - pHalData->PHYRegDef[RF90_PATH_A].rfAGCControl1 = rOFDM0_XAAGCCore1;
48817 - pHalData->PHYRegDef[RF90_PATH_B].rfAGCControl1 = rOFDM0_XBAGCCore1;
48818 - pHalData->PHYRegDef[RF90_PATH_C].rfAGCControl1 = rOFDM0_XCAGCCore1;
48819 - pHalData->PHYRegDef[RF90_PATH_D].rfAGCControl1 = rOFDM0_XDAGCCore1;
48820 + pHalData->PHYRegDef[RF_PATH_A].rfAGCControl1 = rOFDM0_XAAGCCore1;
48821 + pHalData->PHYRegDef[RF_PATH_B].rfAGCControl1 = rOFDM0_XBAGCCore1;
48822 + pHalData->PHYRegDef[RF_PATH_C].rfAGCControl1 = rOFDM0_XCAGCCore1;
48823 + pHalData->PHYRegDef[RF_PATH_D].rfAGCControl1 = rOFDM0_XDAGCCore1;
48824
48825 // AGC control 2
48826 - pHalData->PHYRegDef[RF90_PATH_A].rfAGCControl2 = rOFDM0_XAAGCCore2;
48827 - pHalData->PHYRegDef[RF90_PATH_B].rfAGCControl2 = rOFDM0_XBAGCCore2;
48828 - pHalData->PHYRegDef[RF90_PATH_C].rfAGCControl2 = rOFDM0_XCAGCCore2;
48829 - pHalData->PHYRegDef[RF90_PATH_D].rfAGCControl2 = rOFDM0_XDAGCCore2;
48830 + pHalData->PHYRegDef[RF_PATH_A].rfAGCControl2 = rOFDM0_XAAGCCore2;
48831 + pHalData->PHYRegDef[RF_PATH_B].rfAGCControl2 = rOFDM0_XBAGCCore2;
48832 + pHalData->PHYRegDef[RF_PATH_C].rfAGCControl2 = rOFDM0_XCAGCCore2;
48833 + pHalData->PHYRegDef[RF_PATH_D].rfAGCControl2 = rOFDM0_XDAGCCore2;
48834
48835 // RX AFE control 1
48836 - pHalData->PHYRegDef[RF90_PATH_A].rfRxIQImbalance = rOFDM0_XARxIQImbalance;
48837 - pHalData->PHYRegDef[RF90_PATH_B].rfRxIQImbalance = rOFDM0_XBRxIQImbalance;
48838 - pHalData->PHYRegDef[RF90_PATH_C].rfRxIQImbalance = rOFDM0_XCRxIQImbalance;
48839 - pHalData->PHYRegDef[RF90_PATH_D].rfRxIQImbalance = rOFDM0_XDRxIQImbalance;
48840 + pHalData->PHYRegDef[RF_PATH_A].rfRxIQImbalance = rOFDM0_XARxIQImbalance;
48841 + pHalData->PHYRegDef[RF_PATH_B].rfRxIQImbalance = rOFDM0_XBRxIQImbalance;
48842 + pHalData->PHYRegDef[RF_PATH_C].rfRxIQImbalance = rOFDM0_XCRxIQImbalance;
48843 + pHalData->PHYRegDef[RF_PATH_D].rfRxIQImbalance = rOFDM0_XDRxIQImbalance;
48844
48845 // RX AFE control 1
48846 - pHalData->PHYRegDef[RF90_PATH_A].rfRxAFE = rOFDM0_XARxAFE;
48847 - pHalData->PHYRegDef[RF90_PATH_B].rfRxAFE = rOFDM0_XBRxAFE;
48848 - pHalData->PHYRegDef[RF90_PATH_C].rfRxAFE = rOFDM0_XCRxAFE;
48849 - pHalData->PHYRegDef[RF90_PATH_D].rfRxAFE = rOFDM0_XDRxAFE;
48850 + pHalData->PHYRegDef[RF_PATH_A].rfRxAFE = rOFDM0_XARxAFE;
48851 + pHalData->PHYRegDef[RF_PATH_B].rfRxAFE = rOFDM0_XBRxAFE;
48852 + pHalData->PHYRegDef[RF_PATH_C].rfRxAFE = rOFDM0_XCRxAFE;
48853 + pHalData->PHYRegDef[RF_PATH_D].rfRxAFE = rOFDM0_XDRxAFE;
48854
48855 // Tx AFE control 1
48856 - pHalData->PHYRegDef[RF90_PATH_A].rfTxIQImbalance = rOFDM0_XATxIQImbalance;
48857 - pHalData->PHYRegDef[RF90_PATH_B].rfTxIQImbalance = rOFDM0_XBTxIQImbalance;
48858 - pHalData->PHYRegDef[RF90_PATH_C].rfTxIQImbalance = rOFDM0_XCTxIQImbalance;
48859 - pHalData->PHYRegDef[RF90_PATH_D].rfTxIQImbalance = rOFDM0_XDTxIQImbalance;
48860 + pHalData->PHYRegDef[RF_PATH_A].rfTxIQImbalance = rOFDM0_XATxIQImbalance;
48861 + pHalData->PHYRegDef[RF_PATH_B].rfTxIQImbalance = rOFDM0_XBTxIQImbalance;
48862 + pHalData->PHYRegDef[RF_PATH_C].rfTxIQImbalance = rOFDM0_XCTxIQImbalance;
48863 + pHalData->PHYRegDef[RF_PATH_D].rfTxIQImbalance = rOFDM0_XDTxIQImbalance;
48864
48865 // Tx AFE control 2
48866 - pHalData->PHYRegDef[RF90_PATH_A].rfTxAFE = rOFDM0_XATxAFE;
48867 - pHalData->PHYRegDef[RF90_PATH_B].rfTxAFE = rOFDM0_XBTxAFE;
48868 - pHalData->PHYRegDef[RF90_PATH_C].rfTxAFE = rOFDM0_XCTxAFE;
48869 - pHalData->PHYRegDef[RF90_PATH_D].rfTxAFE = rOFDM0_XDTxAFE;
48870 + pHalData->PHYRegDef[RF_PATH_A].rfTxAFE = rOFDM0_XATxAFE;
48871 + pHalData->PHYRegDef[RF_PATH_B].rfTxAFE = rOFDM0_XBTxAFE;
48872 + pHalData->PHYRegDef[RF_PATH_C].rfTxAFE = rOFDM0_XCTxAFE;
48873 + pHalData->PHYRegDef[RF_PATH_D].rfTxAFE = rOFDM0_XDTxAFE;
48874
48875 // Tranceiver LSSI Readback SI mode
48876 - pHalData->PHYRegDef[RF90_PATH_A].rfLSSIReadBack = rFPGA0_XA_LSSIReadBack;
48877 - pHalData->PHYRegDef[RF90_PATH_B].rfLSSIReadBack = rFPGA0_XB_LSSIReadBack;
48878 - pHalData->PHYRegDef[RF90_PATH_C].rfLSSIReadBack = rFPGA0_XC_LSSIReadBack;
48879 - pHalData->PHYRegDef[RF90_PATH_D].rfLSSIReadBack = rFPGA0_XD_LSSIReadBack;
48880 + pHalData->PHYRegDef[RF_PATH_A].rfLSSIReadBack = rFPGA0_XA_LSSIReadBack;
48881 + pHalData->PHYRegDef[RF_PATH_B].rfLSSIReadBack = rFPGA0_XB_LSSIReadBack;
48882 + pHalData->PHYRegDef[RF_PATH_C].rfLSSIReadBack = rFPGA0_XC_LSSIReadBack;
48883 + pHalData->PHYRegDef[RF_PATH_D].rfLSSIReadBack = rFPGA0_XD_LSSIReadBack;
48884
48885 // Tranceiver LSSI Readback PI mode
48886 - pHalData->PHYRegDef[RF90_PATH_A].rfLSSIReadBackPi = TransceiverA_HSPI_Readback;
48887 - pHalData->PHYRegDef[RF90_PATH_B].rfLSSIReadBackPi = TransceiverB_HSPI_Readback;
48888 - //pHalData->PHYRegDef[RF90_PATH_C].rfLSSIReadBackPi = rFPGA0_XC_LSSIReadBack;
48889 - //pHalData->PHYRegDef[RF90_PATH_D].rfLSSIReadBackPi = rFPGA0_XD_LSSIReadBack;
48890 + pHalData->PHYRegDef[RF_PATH_A].rfLSSIReadBackPi = TransceiverA_HSPI_Readback;
48891 + pHalData->PHYRegDef[RF_PATH_B].rfLSSIReadBackPi = TransceiverB_HSPI_Readback;
48892 + //pHalData->PHYRegDef[RF_PATH_C].rfLSSIReadBackPi = rFPGA0_XC_LSSIReadBack;
48893 + //pHalData->PHYRegDef[RF_PATH_D].rfLSSIReadBackPi = rFPGA0_XD_LSSIReadBack;
48894
48895 }
48896
48897 @@ -981,56 +972,38 @@ phy_ConfigBBWithHeaderFile(
48898 //
48899 if(IS_92C_SERIAL(pHalData->VersionID))
48900 {
48901 - if(IS_NORMAL_CHIP(pHalData->VersionID))
48902 - {
48903 - AGCTAB_ArrayLen = AGCTAB_2TArrayLength;
48904 - Rtl819XAGCTAB_Array_Table = Rtl819XAGCTAB_2TArray;
48905 - PHY_REGArrayLen = PHY_REG_2TArrayLength;
48906 - Rtl819XPHY_REGArray_Table = Rtl819XPHY_REG_2TArray;
48907 + AGCTAB_ArrayLen = AGCTAB_2TArrayLength;
48908 + Rtl819XAGCTAB_Array_Table = Rtl819XAGCTAB_2TArray;
48909 + PHY_REGArrayLen = PHY_REG_2TArrayLength;
48910 + Rtl819XPHY_REGArray_Table = Rtl819XPHY_REG_2TArray;
48911 #ifdef CONFIG_USB_HCI
48912 - if(pHalData->BoardType == BOARD_MINICARD )
48913 - {
48914 - PHY_REGArrayLen = PHY_REG_2T_mCardArrayLength;
48915 - Rtl819XPHY_REGArray_Table = Rtl819XPHY_REG_2T_mCardArray;
48916 - }
48917 -#endif
48918 - }
48919 - else
48920 + if(pHalData->BoardType == BOARD_MINICARD )
48921 {
48922 - DBG_8192C(" ===> phy_ConfigBBWithHeaderFile(): do not support test chip\n");
48923 - ret = _FAIL;
48924 - goto exit;
48925 + PHY_REGArrayLen = PHY_REG_2T_mCardArrayLength;
48926 + Rtl819XPHY_REGArray_Table = Rtl819XPHY_REG_2T_mCardArray;
48927 }
48928 +#endif
48929 }
48930 else
48931 {
48932 - if(IS_NORMAL_CHIP(pHalData->VersionID))
48933 - {
48934 - AGCTAB_ArrayLen = AGCTAB_1TArrayLength;
48935 - Rtl819XAGCTAB_Array_Table = Rtl819XAGCTAB_1TArray;
48936 - PHY_REGArrayLen = PHY_REG_1TArrayLength;
48937 - Rtl819XPHY_REGArray_Table = Rtl819XPHY_REG_1TArray;
48938 + AGCTAB_ArrayLen = AGCTAB_1TArrayLength;
48939 + Rtl819XAGCTAB_Array_Table = Rtl819XAGCTAB_1TArray;
48940 + PHY_REGArrayLen = PHY_REG_1TArrayLength;
48941 + Rtl819XPHY_REGArray_Table = Rtl819XPHY_REG_1TArray;
48942 #ifdef CONFIG_USB_HCI
48943 - if(pHalData->BoardType == BOARD_MINICARD )
48944 - {
48945 - PHY_REGArrayLen = PHY_REG_1T_mCardArrayLength;
48946 - Rtl819XPHY_REGArray_Table = Rtl819XPHY_REG_1T_mCardArray;
48947 - }
48948 - else if(pHalData->BoardType == BOARD_USB_High_PA)
48949 - {
48950 - AGCTAB_ArrayLen = AGCTAB_1T_HPArrayLength;
48951 - Rtl819XAGCTAB_Array_Table = Rtl819XAGCTAB_1T_HPArray;
48952 - PHY_REGArrayLen = PHY_REG_1T_HPArrayLength;
48953 - Rtl819XPHY_REGArray_Table = Rtl819XPHY_REG_1T_HPArray;
48954 - }
48955 -#endif
48956 + if(pHalData->BoardType == BOARD_MINICARD )
48957 + {
48958 + PHY_REGArrayLen = PHY_REG_1T_mCardArrayLength;
48959 + Rtl819XPHY_REGArray_Table = Rtl819XPHY_REG_1T_mCardArray;
48960 }
48961 - else
48962 + else if(pHalData->BoardType == BOARD_USB_High_PA)
48963 {
48964 - DBG_8192C(" ===> phy_ConfigBBWithHeaderFile(): do not support test chip\n");
48965 - ret = _FAIL;
48966 - goto exit;
48967 + AGCTAB_ArrayLen = AGCTAB_1T_HPArrayLength;
48968 + Rtl819XAGCTAB_Array_Table = Rtl819XAGCTAB_1T_HPArray;
48969 + PHY_REGArrayLen = PHY_REG_1T_HPArrayLength;
48970 + Rtl819XPHY_REGArray_Table = Rtl819XPHY_REG_1T_HPArray;
48971 }
48972 +#endif
48973 }
48974
48975 if(ConfigType == BaseBand_Config_PHY_REG)
48976 @@ -1095,7 +1068,7 @@ phy_ConfigBBWithHeaderFile(
48977 PHY_SetBBReg(Adapter, Rtl819XPHY_REGArray_Table[i], bMaskDWord, Rtl819XPHY_REGArray_Table[i+1]);
48978
48979 // Add 1us delay between BB/RF register setting.
48980 - rtw_udelay_os(1);
48981 + rtw_udelay_os(1);
48982
48983 //RT_TRACE(COMP_INIT, DBG_TRACE, ("The Rtl819XPHY_REGArray_Table[0] is %lx Rtl819XPHY_REGArray[1] is %lx \n",Rtl819XPHY_REGArray_Table[i], Rtl819XPHY_REGArray_Table[i+1]));
48984 }
48985 @@ -1311,31 +1284,23 @@ phy_ConfigBBWithPgHeaderFile(
48986 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
48987
48988 // Default: pHalData->RF_Type = RF_2T2R.
48989 - if(IS_NORMAL_CHIP(pHalData->VersionID))
48990 - {
48991 - PHY_REGArrayPGLen = PHY_REG_Array_PGLength;
48992 - Rtl819XPHY_REGArray_Table_PG = Rtl819XPHY_REG_Array_PG;
48993 + PHY_REGArrayPGLen = PHY_REG_Array_PGLength;
48994 + Rtl819XPHY_REGArray_Table_PG = Rtl819XPHY_REG_Array_PG;
48995
48996 #ifdef CONFIG_USB_HCI
48997 // 2010/10/19 Chiyoko According to Alex/Willson opinion, VAU/dongle can share the same PHY_REG_PG.txt
48998 /*
48999 - if(pHalData->BoardType == BOARD_MINICARD )
49000 - {
49001 - PHY_REGArrayPGLen = PHY_REG_Array_PG_mCardLength;
49002 - Rtl819XPHY_REGArray_Table_PG = Rtl819XPHY_REG_Array_PG_mCard;
49003 - }
49004 - else */if(pHalData->BoardType ==BOARD_USB_High_PA )
49005 - {
49006 - PHY_REGArrayPGLen = PHY_REG_Array_PG_HPLength;
49007 - Rtl819XPHY_REGArray_Table_PG = Rtl819XPHY_REG_Array_PG_HP;
49008 - }
49009 -#endif
49010 + if(pHalData->BoardType == BOARD_MINICARD )
49011 + {
49012 + PHY_REGArrayPGLen = PHY_REG_Array_PG_mCardLength;
49013 + Rtl819XPHY_REGArray_Table_PG = Rtl819XPHY_REG_Array_PG_mCard;
49014 }
49015 - else
49016 + else */if(pHalData->BoardType ==BOARD_USB_High_PA )
49017 {
49018 - DBG_8192C(" ===> phy_ConfigBBWithPgHeaderFile(): do not support test chip\n");
49019 - return _FAIL;
49020 + PHY_REGArrayPGLen = PHY_REG_Array_PG_HPLength;
49021 + Rtl819XPHY_REGArray_Table_PG = Rtl819XPHY_REG_Array_PG_HP;
49022 }
49023 +#endif
49024
49025 if(ConfigType == BaseBand_Config_PHY_REG)
49026 {
49027 @@ -1745,7 +1710,7 @@ PHY_BBConfig8192C(
49028
49029 phy_InitBBRFRegisterDefinition(Adapter);
49030
49031 - if(IS_HARDWARE_TYPE_8723(Adapter))
49032 + if(IS_HARDWARE_TYPE_8723A(Adapter))
49033 {
49034 // Suggested by Scott. tynli_test. 2010.12.30.
49035 //1. 0x28[1] = 1
49036 @@ -1762,6 +1727,9 @@ PHY_BBConfig8192C(
49037 TmpU1B = rtw_read8(Adapter, REG_SYS_FUNC_EN);
49038 rtw_write8(Adapter, REG_SYS_FUNC_EN, (TmpU1B|FEN_BB_GLB_RSTn|FEN_BBRSTB));
49039
49040 + //undo clock gated
49041 + rtw_write32(Adapter, rFPGA0_XCD_RFParameter, rtw_read32(Adapter, rFPGA0_XCD_RFParameter)&(~BIT31));
49042 +
49043 //4. 0x25[6] = 0
49044 TmpU1B = rtw_read8(Adapter, REG_AFE_XTAL_CTRL+1);
49045 rtw_write8(Adapter, REG_AFE_XTAL_CTRL+1, (TmpU1B&(~BIT6)));
49046 @@ -1790,24 +1758,16 @@ PHY_BBConfig8192C(
49047 #else
49048 rtw_write8(Adapter, REG_SYS_FUNC_EN, FEN_PPLL|FEN_PCIEA|FEN_DIO_PCIE|FEN_BB_GLB_RSTn|FEN_BBRSTB);
49049 #endif
49050 +
49051 + //undo clock gated
49052 + rtw_write32(Adapter, rFPGA0_XCD_RFParameter, rtw_read32(Adapter, rFPGA0_XCD_RFParameter)&(~BIT31));
49053
49054 // 2009/10/21 by SD1 Jong. Modified by tynli. Not in Documented in V8.1.
49055 - if(!IS_NORMAL_CHIP(pHalData->VersionID))
49056 - {
49057 #ifdef CONFIG_USB_HCI
49058 - rtw_write8(Adapter, REG_LDOHCI12_CTRL, 0x1f);
49059 -#else
49060 - rtw_write8(Adapter, REG_LDOHCI12_CTRL, 0x1b);
49061 + //To Fix MAC loopback mode fail. Suggested by SD4 Johnny. 2010.03.23.
49062 + rtw_write8(Adapter, REG_LDOHCI12_CTRL, 0x0f);
49063 + rtw_write8(Adapter, 0x15, 0xe9);
49064 #endif
49065 - }
49066 - else
49067 - {
49068 -#ifdef CONFIG_USB_HCI
49069 - //To Fix MAC loopback mode fail. Suggested by SD4 Johnny. 2010.03.23.
49070 - rtw_write8(Adapter, REG_LDOHCI12_CTRL, 0x0f);
49071 - rtw_write8(Adapter, 0x15, 0xe9);
49072 -#endif
49073 - }
49074
49075 rtw_write8(Adapter, REG_AFE_XTAL_CTRL+1, 0x80);
49076
49077 @@ -1854,50 +1814,6 @@ PHY_BBConfig8192C(
49078 rtw_write8(Adapter, 0xc72, 0x50);
49079 #endif
49080
49081 - // <tynli_note> For fix 8723 WL_TRSW bug. Suggested by Scott. 2011.01.24.
49082 - if(IS_HARDWARE_TYPE_8723(Adapter))
49083 - {
49084 - if(!IS_NORMAL_CHIP(pHalData->VersionID))
49085 - {
49086 - // 1. 0x40[2] = 1
49087 - value8 = rtw_read8(Adapter, REG_GPIO_MUXCFG);
49088 - rtw_write8(Adapter, REG_GPIO_MUXCFG, (value8|BIT2));
49089 -
49090 - // 2. 0x804[14] = 0 // BB disable TRSW control, enable SW control
49091 - PHY_SetBBReg(Adapter, rFPGA0_TxInfo, BIT14, 0x0);
49092 -
49093 - // 3. 0x870[6:5] = 2'b11
49094 - PHY_SetBBReg(Adapter, rFPGA0_XAB_RFInterfaceSW, (BIT5|BIT6), 0x3);
49095 -
49096 - // 4. 0x860[6:5] = 2'b00 // BB SW control TRSW pin output level
49097 - PHY_SetBBReg(Adapter, rFPGA0_XA_RFInterfaceOE, (BIT5|BIT6), 0x0);
49098 - }
49099 - }
49100 -#if 0
49101 - // Check BB/RF confiuration setting.
49102 - // We only need to configure RF which is turned on.
49103 - PathMap = (u1Byte)(PHY_QueryBBReg(Adapter, rFPGA0_TxInfo, 0xf) |
49104 - PHY_QueryBBReg(Adapter, rOFDM0_TRxPathEnable, 0xf));
49105 - pHalData->RF_PathMap = PathMap;
49106 - for(index = 0; index<4; index++)
49107 - {
49108 - if((PathMap>>index)&0x1)
49109 - rf_num++;
49110 - }
49111 -
49112 - if((GET_RF_TYPE(Adapter) ==RF_1T1R && rf_num!=1) ||
49113 - (GET_RF_TYPE(Adapter)==RF_1T2R && rf_num!=2) ||
49114 - (GET_RF_TYPE(Adapter)==RF_2T2R && rf_num!=2) ||
49115 - (GET_RF_TYPE(Adapter)==RF_2T2R_GREEN && rf_num!=2) ||
49116 - (GET_RF_TYPE(Adapter)==RF_2T4R && rf_num!=4))
49117 - {
49118 - RT_TRACE(
49119 - COMP_INIT,
49120 - DBG_LOUD,
49121 - ("PHY_BBConfig8192C: RF_Type(%x) does not match RF_Num(%x)!!\n", pHalData->RF_Type, rf_num));
49122 - }
49123 -#endif
49124 -
49125 return rtStatus;
49126 }
49127
49128 @@ -1946,7 +1862,7 @@ PHY_RFConfig8192C(
49129 *
49130 * Input: PADAPTER Adapter
49131 * ps1Byte pFileName
49132 - * RF90_RADIO_PATH_E eRFPath
49133 + * RF_RADIO_PATH_E eRFPath
49134 *
49135 * Output: NONE
49136 *
49137 @@ -1958,7 +1874,7 @@ int
49138 rtl8192c_PHY_ConfigRFWithParaFile(
49139 IN PADAPTER Adapter,
49140 IN u8* pFileName,
49141 - RF90_RADIO_PATH_E eRFPath
49142 + RF_RADIO_PATH_E eRFPath
49143 )
49144 {
49145 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
49146 @@ -1992,7 +1908,7 @@ u32 Rtl8192S_HighPower_RadioA_Array[High
49147 int
49148 PHY_ConfigRFExternalPA(
49149 IN PADAPTER Adapter,
49150 - RF90_RADIO_PATH_E eRFPath
49151 + RF_RADIO_PATH_E eRFPath
49152 )
49153 {
49154 int rtStatus = _SUCCESS;
49155 @@ -2027,7 +1943,7 @@ PHY_ConfigRFExternalPA(
49156 *
49157 * Input: PADAPTER Adapter
49158 * ps1Byte pFileName
49159 - * RF90_RADIO_PATH_E eRFPath
49160 + * RF_RADIO_PATH_E eRFPath
49161 *
49162 * Output: NONE
49163 *
49164 @@ -2038,7 +1954,7 @@ PHY_ConfigRFExternalPA(
49165 int
49166 rtl8192c_PHY_ConfigRFWithHeaderFile(
49167 IN PADAPTER Adapter,
49168 - RF90_RADIO_PATH_E eRFPath
49169 + RF_RADIO_PATH_E eRFPath
49170 )
49171 {
49172
49173 @@ -2054,51 +1970,35 @@ rtl8192c_PHY_ConfigRFWithHeaderFile(
49174 //
49175 if(IS_92C_SERIAL(pHalData->VersionID))
49176 {
49177 - if(IS_NORMAL_CHIP(pHalData->VersionID))
49178 - {
49179 - RadioA_ArrayLen = RadioA_2TArrayLength;
49180 - Rtl819XRadioA_Array_Table = Rtl819XRadioA_2TArray;
49181 - RadioB_ArrayLen = RadioB_2TArrayLength;
49182 - Rtl819XRadioB_Array_Table = Rtl819XRadioB_2TArray;
49183 - }
49184 - else
49185 - {
49186 - rtStatus = _FAIL;
49187 - goto exit;
49188 - }
49189 + RadioA_ArrayLen = RadioA_2TArrayLength;
49190 + Rtl819XRadioA_Array_Table = Rtl819XRadioA_2TArray;
49191 + RadioB_ArrayLen = RadioB_2TArrayLength;
49192 + Rtl819XRadioB_Array_Table = Rtl819XRadioB_2TArray;
49193 }
49194 else
49195 {
49196 - if(IS_NORMAL_CHIP(pHalData->VersionID))
49197 - {
49198 - RadioA_ArrayLen = RadioA_1TArrayLength;
49199 - Rtl819XRadioA_Array_Table = Rtl819XRadioA_1TArray;
49200 - RadioB_ArrayLen = RadioB_1TArrayLength;
49201 - Rtl819XRadioB_Array_Table = Rtl819XRadioB_1TArray;
49202 + RadioA_ArrayLen = RadioA_1TArrayLength;
49203 + Rtl819XRadioA_Array_Table = Rtl819XRadioA_1TArray;
49204 + RadioB_ArrayLen = RadioB_1TArrayLength;
49205 + Rtl819XRadioB_Array_Table = Rtl819XRadioB_1TArray;
49206 #ifdef CONFIG_USB_HCI
49207 - if( BOARD_MINICARD == pHalData->BoardType )
49208 - {
49209 - RadioA_ArrayLen = RadioA_1T_mCardArrayLength;
49210 - Rtl819XRadioA_Array_Table = Rtl819XRadioA_1T_mCardArray;
49211 - RadioB_ArrayLen = RadioB_1T_mCardArrayLength;
49212 - Rtl819XRadioB_Array_Table = Rtl819XRadioB_1T_mCardArray;
49213 - }
49214 - else if( BOARD_USB_High_PA == pHalData->BoardType )
49215 - {
49216 - RadioA_ArrayLen = RadioA_1T_HPArrayLength;
49217 - Rtl819XRadioA_Array_Table = Rtl819XRadioA_1T_HPArray;
49218 - }
49219 -#endif
49220 + if( BOARD_MINICARD == pHalData->BoardType )
49221 + {
49222 + RadioA_ArrayLen = RadioA_1T_mCardArrayLength;
49223 + Rtl819XRadioA_Array_Table = Rtl819XRadioA_1T_mCardArray;
49224 + RadioB_ArrayLen = RadioB_1T_mCardArrayLength;
49225 + Rtl819XRadioB_Array_Table = Rtl819XRadioB_1T_mCardArray;
49226 }
49227 - else
49228 + else if( BOARD_USB_High_PA == pHalData->BoardType )
49229 {
49230 - rtStatus = _FAIL;
49231 - goto exit;
49232 + RadioA_ArrayLen = RadioA_1T_HPArrayLength;
49233 + Rtl819XRadioA_Array_Table = Rtl819XRadioA_1T_HPArray;
49234 }
49235 +#endif
49236 }
49237
49238 switch(eRFPath){
49239 - case RF90_PATH_A:
49240 + case RF_PATH_A:
49241 #ifdef CONFIG_IOL_RF_RF90_PATH_A
49242 if(rtw_IOL_applied(Adapter))
49243 {
49244 @@ -2169,7 +2069,7 @@ rtl8192c_PHY_ConfigRFWithHeaderFile(
49245 //Add for High Power PA
49246 PHY_ConfigRFExternalPA(Adapter, eRFPath);
49247 break;
49248 - case RF90_PATH_B:
49249 + case RF_PATH_B:
49250 #ifdef CONFIG_IOL_RF_RF90_PATH_B
49251 if(rtw_IOL_applied(Adapter))
49252 {
49253 @@ -2247,9 +2147,9 @@ rtl8192c_PHY_ConfigRFWithHeaderFile(
49254 }
49255
49256 break;
49257 - case RF90_PATH_C:
49258 + case RF_PATH_C:
49259 break;
49260 - case RF90_PATH_D:
49261 + case RF_PATH_D:
49262 break;
49263 }
49264
49265 @@ -2267,7 +2167,7 @@ exit:
49266 *
49267 * Input: PADAPTER Adapter
49268 * HW90_BLOCK_E CheckBlock
49269 - * RF90_RADIO_PATH_E eRFPath // it is used only when CheckBlock is HW90_BLOCK_RF
49270 + * RF_RADIO_PATH_E eRFPath // it is used only when CheckBlock is HW90_BLOCK_RF
49271 *
49272 * Output: NONE
49273 *
49274 @@ -2279,7 +2179,7 @@ int
49275 PHY_CheckBBAndRFOK(
49276 IN PADAPTER Adapter,
49277 IN HW90_BLOCK_E CheckBlock,
49278 - IN RF90_RADIO_PATH_E eRFPath
49279 + IN RF_RADIO_PATH_E eRFPath
49280 )
49281 {
49282 int rtStatus = _SUCCESS;
49283 @@ -2534,21 +2434,21 @@ static void getTxPowerIndex(
49284 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
49285 u8 index = (channel -1);
49286 // 1. CCK
49287 - cckPowerLevel[RF90_PATH_A] = pHalData->TxPwrLevelCck[RF90_PATH_A][index]; //RF-A
49288 - cckPowerLevel[RF90_PATH_B] = pHalData->TxPwrLevelCck[RF90_PATH_B][index]; //RF-B
49289 + cckPowerLevel[RF_PATH_A] = pHalData->TxPwrLevelCck[RF_PATH_A][index]; //RF-A
49290 + cckPowerLevel[RF_PATH_B] = pHalData->TxPwrLevelCck[RF_PATH_B][index]; //RF-B
49291
49292 // 2. OFDM for 1S or 2S
49293 if (GET_RF_TYPE(Adapter) == RF_1T2R || GET_RF_TYPE(Adapter) == RF_1T1R)
49294 {
49295 // Read HT 40 OFDM TX power
49296 - ofdmPowerLevel[RF90_PATH_A] = pHalData->TxPwrLevelHT40_1S[RF90_PATH_A][index];
49297 - ofdmPowerLevel[RF90_PATH_B] = pHalData->TxPwrLevelHT40_1S[RF90_PATH_B][index];
49298 + ofdmPowerLevel[RF_PATH_A] = pHalData->TxPwrLevelHT40_1S[RF_PATH_A][index];
49299 + ofdmPowerLevel[RF_PATH_B] = pHalData->TxPwrLevelHT40_1S[RF_PATH_B][index];
49300 }
49301 else if (GET_RF_TYPE(Adapter) == RF_2T2R)
49302 {
49303 // Read HT 40 OFDM TX power
49304 - ofdmPowerLevel[RF90_PATH_A] = pHalData->TxPwrLevelHT40_2S[RF90_PATH_A][index];
49305 - ofdmPowerLevel[RF90_PATH_B] = pHalData->TxPwrLevelHT40_2S[RF90_PATH_B][index];
49306 + ofdmPowerLevel[RF_PATH_A] = pHalData->TxPwrLevelHT40_2S[RF_PATH_A][index];
49307 + ofdmPowerLevel[RF_PATH_B] = pHalData->TxPwrLevelHT40_2S[RF_PATH_B][index];
49308 }
49309 //RTPRINT(FPHY, PHY_TXPWR, ("Channel-%d, set tx power index !!\n", channel));
49310 }
49311 @@ -2769,13 +2669,13 @@ PHY_ScanOperationBackup8192C(
49312 {
49313 case SCAN_OPT_BACKUP:
49314 IoType = IO_CMD_PAUSE_DM_BY_SCAN;
49315 - Adapter->HalFunc.SetHwRegHandler(Adapter,HW_VAR_IO_CMD, (pu1Byte)&IoType);
49316 + rtw_hal_set_hwreg(Adapter,HW_VAR_IO_CMD, (pu1Byte)&IoType);
49317
49318 break;
49319
49320 case SCAN_OPT_RESTORE:
49321 IoType = IO_CMD_RESUME_DM_BY_SCAN;
49322 - Adapter->HalFunc.SetHwRegHandler(Adapter,HW_VAR_IO_CMD, (pu1Byte)&IoType);
49323 + rtw_hal_set_hwreg(Adapter,HW_VAR_IO_CMD, (pu1Byte)&IoType);
49324 break;
49325
49326 default:
49327 @@ -2845,7 +2745,7 @@ _PHY_SetBWMode92C(
49328
49329 regBwOpMode = rtw_read8(Adapter, REG_BWOPMODE);
49330 regRRSR_RSC = rtw_read8(Adapter, REG_RRSR+2);
49331 - //regBwOpMode = Adapter->HalFunc.GetHwRegHandler(Adapter,HW_VAR_BWMODE,(pu1Byte)&regBwOpMode);
49332 + //regBwOpMode = rtw_hal_get_hwreg(Adapter,HW_VAR_BWMODE,(pu1Byte)&regBwOpMode);
49333
49334 switch(pHalData->CurrentChannelBW)
49335 {
49336 @@ -3041,6 +2941,11 @@ static void _PHY_SwChnl8192C(PADAPTER Ad
49337 u32 param1, param2;
49338 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
49339
49340 + if ( Adapter->bNotifyChannelChange )
49341 + {
49342 + DBG_871X( "[%s] ch = %d\n", __FUNCTION__, channel );
49343 + }
49344 +
49345 //s1. pre common command - CmdID_SetTxPowerLevel
49346 PHY_SetTxPowerLevel8192C(Adapter, channel);
49347
49348 @@ -3050,7 +2955,7 @@ static void _PHY_SwChnl8192C(PADAPTER Ad
49349 for(eRFPath = 0; eRFPath <pHalData->NumTotalRFPath; eRFPath++)
49350 {
49351 pHalData->RfRegChnlVal[eRFPath] = ((pHalData->RfRegChnlVal[eRFPath] & 0xfffffc00) | param2);
49352 - PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)eRFPath, param1, bRFRegOffsetMask, pHalData->RfRegChnlVal[eRFPath]);
49353 + PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)eRFPath, param1, bRFRegOffsetMask, pHalData->RfRegChnlVal[eRFPath]);
49354 }
49355
49356
49357 @@ -3184,7 +3089,7 @@ phy_SwChnlStepByStep(
49358 pChnlAccessSetting = &Adapter->MgntInfo.Info8185.ChannelAccessSetting;
49359 RT_ASSERT((pChnlAccessSetting != NULL), ("pChnlAccessSetting should not be NULL\n"));
49360
49361 - //for(eRFPath = RF90_PATH_A; eRFPath <pHalData->NumTotalRFPath; eRFPath++)
49362 + //for(eRFPath = RF_PATH_A; eRFPath <pHalData->NumTotalRFPath; eRFPath++)
49363 //for(eRFPath = 0; eRFPath <pHalData->NumTotalRFPath; eRFPath++)
49364 //{
49365 // <1> Fill up pre common command.
49366 @@ -3292,9 +3197,9 @@ phy_SwChnlStepByStep(
49367 {
49368 #if 1
49369 pHalData->RfRegChnlVal[eRFPath] = ((pHalData->RfRegChnlVal[eRFPath] & 0xfffffc00) | CurrentCmd->Para2);
49370 - PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)eRFPath, CurrentCmd->Para1, bRFRegOffsetMask, pHalData->RfRegChnlVal[eRFPath]);
49371 + PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)eRFPath, CurrentCmd->Para1, bRFRegOffsetMask, pHalData->RfRegChnlVal[eRFPath]);
49372 #else
49373 - PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)eRFPath, CurrentCmd->Para1, bRFRegOffsetMask, (CurrentCmd->Para2));
49374 + PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)eRFPath, CurrentCmd->Para1, bRFRegOffsetMask, (CurrentCmd->Para2));
49375 #endif
49376 }
49377 break;
49378 @@ -3441,7 +3346,7 @@ PHY_SetMonitorMode8192C(
49379
49380 pHalData->bInMonitorMode = TRUE;
49381 pAdapter->HalFunc.AllowAllDestAddrHandler(pAdapter, TRUE, TRUE);
49382 - pAdapter->HalFunc.SetHwRegHandler(pAdapter, HW_VAR_CHECK_BSSID, (pu1Byte)&bFilterOutNonAssociatedBSSID);
49383 + rtw_hal_set_hwreg(pAdapter, HW_VAR_CHECK_BSSID, (pu1Byte)&bFilterOutNonAssociatedBSSID);
49384 }
49385 else
49386 {
49387 @@ -3450,7 +3355,7 @@ PHY_SetMonitorMode8192C(
49388
49389 pAdapter->HalFunc.AllowAllDestAddrHandler(pAdapter, FALSE, TRUE);
49390 pHalData->bInMonitorMode = FALSE;
49391 - pAdapter->HalFunc.SetHwRegHandler(pAdapter, HW_VAR_CHECK_BSSID, (pu1Byte)&bFilterOutNonAssociatedBSSID);
49392 + rtw_hal_set_hwreg(pAdapter, HW_VAR_CHECK_BSSID, (pu1Byte)&bFilterOutNonAssociatedBSSID);
49393 }
49394 #endif
49395 }
49396 @@ -3483,11 +3388,11 @@ PHY_CheckIsLegalRfPath8192C(
49397
49398 // NOt check RF Path now.!
49399 #if 0
49400 - if (pHalData->RF_Type == RF_1T2R && eRFPath != RF90_PATH_A)
49401 + if (pHalData->RF_Type == RF_1T2R && eRFPath != RF_PATH_A)
49402 {
49403 rtValue = FALSE;
49404 }
49405 - if (pHalData->RF_Type == RF_1T2R && eRFPath != RF90_PATH_A)
49406 + if (pHalData->RF_Type == RF_1T2R && eRFPath != RF_PATH_A)
49407 {
49408
49409 }
49410 @@ -3512,48 +3417,49 @@ _PHY_PathA_IQK(
49411 {
49412 u32 regEAC, regE94, regE9C, regEA4;
49413 u8 result = 0x00;
49414 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
49415
49416 //RTPRINT(FINIT, INIT_IQK, ("Path A IQK!\n"));
49417
49418 //path-A IQK setting
49419 //RTPRINT(FINIT, INIT_IQK, ("Path-A IQK setting!\n"));
49420 - PHY_SetBBReg(pAdapter, 0xe30, bMaskDWord, 0x10008c1f);
49421 - PHY_SetBBReg(pAdapter, 0xe34, bMaskDWord, 0x10008c1f);
49422 - PHY_SetBBReg(pAdapter, 0xe38, bMaskDWord, 0x82140102);
49423 + PHY_SetBBReg(pAdapter, rTx_IQK_Tone_A, bMaskDWord, 0x10008c1f);
49424 + PHY_SetBBReg(pAdapter, rRx_IQK_Tone_A, bMaskDWord, 0x10008c1f);
49425 + PHY_SetBBReg(pAdapter, rTx_IQK_PI_A, bMaskDWord, 0x82140102);
49426
49427 - PHY_SetBBReg(pAdapter, 0xe3c, bMaskDWord, configPathB ? 0x28160202 : 0x28160502);
49428 + PHY_SetBBReg(pAdapter, rRx_IQK_PI_A, bMaskDWord, configPathB ? 0x28160202 :
49429 + IS_81xxC_VENDOR_UMC_B_CUT(pHalData->VersionID)?0x28160202:0x28160502);
49430
49431 -#if 1
49432 //path-B IQK setting
49433 if(configPathB)
49434 {
49435 - PHY_SetBBReg(pAdapter, 0xe50, bMaskDWord, 0x10008c22);
49436 - PHY_SetBBReg(pAdapter, 0xe54, bMaskDWord, 0x10008c22);
49437 - PHY_SetBBReg(pAdapter, 0xe58, bMaskDWord, 0x82140102);
49438 - PHY_SetBBReg(pAdapter, 0xe5c, bMaskDWord, 0x28160202);
49439 + PHY_SetBBReg(pAdapter, rTx_IQK_Tone_B, bMaskDWord, 0x10008c22);
49440 + PHY_SetBBReg(pAdapter, rRx_IQK_Tone_B, bMaskDWord, 0x10008c22);
49441 + PHY_SetBBReg(pAdapter, rTx_IQK_PI_B, bMaskDWord, 0x82140102);
49442 + PHY_SetBBReg(pAdapter, rRx_IQK_PI_B, bMaskDWord, 0x28160202);
49443 }
49444 -#endif
49445 +
49446 //LO calibration setting
49447 //RTPRINT(FINIT, INIT_IQK, ("LO calibration setting!\n"));
49448 - PHY_SetBBReg(pAdapter, 0xe4c, bMaskDWord, 0x001028d1);
49449 + PHY_SetBBReg(pAdapter, rIQK_AGC_Rsp, bMaskDWord, 0x001028d1);
49450
49451 //One shot, path A LOK & IQK
49452 //RTPRINT(FINIT, INIT_IQK, ("One shot, path A LOK & IQK!\n"));
49453 - PHY_SetBBReg(pAdapter, 0xe48, bMaskDWord, 0xf9000000);
49454 - PHY_SetBBReg(pAdapter, 0xe48, bMaskDWord, 0xf8000000);
49455 + PHY_SetBBReg(pAdapter, rIQK_AGC_Pts, bMaskDWord, 0xf9000000);
49456 + PHY_SetBBReg(pAdapter, rIQK_AGC_Pts, bMaskDWord, 0xf8000000);
49457
49458 // delay x ms
49459 //RTPRINT(FINIT, INIT_IQK, ("Delay %d ms for One shot, path A LOK & IQK.\n", IQK_DELAY_TIME));
49460 rtw_udelay_os(IQK_DELAY_TIME*1000);//PlatformStallExecution(IQK_DELAY_TIME*1000);
49461
49462 // Check failed
49463 - regEAC = PHY_QueryBBReg(pAdapter, 0xeac, bMaskDWord);
49464 + regEAC = PHY_QueryBBReg(pAdapter, rRx_Power_After_IQK_A_2, bMaskDWord);
49465 //RTPRINT(FINIT, INIT_IQK, ("0xeac = 0x%x\n", regEAC));
49466 - regE94 = PHY_QueryBBReg(pAdapter, 0xe94, bMaskDWord);
49467 + regE94 = PHY_QueryBBReg(pAdapter, rTx_Power_Before_IQK_A, bMaskDWord);
49468 //RTPRINT(FINIT, INIT_IQK, ("0xe94 = 0x%x\n", regE94));
49469 - regE9C= PHY_QueryBBReg(pAdapter, 0xe9c, bMaskDWord);
49470 + regE9C= PHY_QueryBBReg(pAdapter, rTx_Power_After_IQK_A, bMaskDWord);
49471 //RTPRINT(FINIT, INIT_IQK, ("0xe9c = 0x%x\n", regE9C));
49472 - regEA4= PHY_QueryBBReg(pAdapter, 0xea4, bMaskDWord);
49473 + regEA4= PHY_QueryBBReg(pAdapter, rRx_Power_Before_IQK_A_2, bMaskDWord);
49474 //RTPRINT(FINIT, INIT_IQK, ("0xea4 = 0x%x\n", regEA4));
49475
49476 if(!(regEAC & BIT28) &&
49477 @@ -3583,37 +3489,26 @@ _PHY_PathB_IQK(
49478 u32 regEAC, regEB4, regEBC, regEC4, regECC;
49479 u8 result = 0x00;
49480 //RTPRINT(FINIT, INIT_IQK, ("Path B IQK!\n"));
49481 -#if 0
49482 - //path-B IQK setting
49483 - RTPRINT(FINIT, INIT_IQK, ("Path-B IQK setting!\n"));
49484 - PHY_SetBBReg(pAdapter, 0xe50, bMaskDWord, 0x10008c22);
49485 - PHY_SetBBReg(pAdapter, 0xe54, bMaskDWord, 0x10008c22);
49486 - PHY_SetBBReg(pAdapter, 0xe58, bMaskDWord, 0x82140102);
49487 - PHY_SetBBReg(pAdapter, 0xe5c, bMaskDWord, 0x28160202);
49488
49489 - //LO calibration setting
49490 - RTPRINT(FINIT, INIT_IQK, ("LO calibration setting!\n"));
49491 - PHY_SetBBReg(pAdapter, 0xe4c, bMaskDWord, 0x001028d1);
49492 -#endif
49493 //One shot, path B LOK & IQK
49494 //RTPRINT(FINIT, INIT_IQK, ("One shot, path A LOK & IQK!\n"));
49495 - PHY_SetBBReg(pAdapter, 0xe60, bMaskDWord, 0x00000002);
49496 - PHY_SetBBReg(pAdapter, 0xe60, bMaskDWord, 0x00000000);
49497 + PHY_SetBBReg(pAdapter, rIQK_AGC_Cont, bMaskDWord, 0x00000002);
49498 + PHY_SetBBReg(pAdapter, rIQK_AGC_Cont, bMaskDWord, 0x00000000);
49499
49500 // delay x ms
49501 //RTPRINT(FINIT, INIT_IQK, ("Delay %d ms for One shot, path B LOK & IQK.\n", IQK_DELAY_TIME));
49502 rtw_udelay_os(IQK_DELAY_TIME*1000);//PlatformStallExecution(IQK_DELAY_TIME*1000);
49503
49504 // Check failed
49505 - regEAC = PHY_QueryBBReg(pAdapter, 0xeac, bMaskDWord);
49506 + regEAC = PHY_QueryBBReg(pAdapter, rRx_Power_After_IQK_A_2, bMaskDWord);
49507 //RTPRINT(FINIT, INIT_IQK, ("0xeac = 0x%x\n", regEAC));
49508 - regEB4 = PHY_QueryBBReg(pAdapter, 0xeb4, bMaskDWord);
49509 + regEB4 = PHY_QueryBBReg(pAdapter, rTx_Power_Before_IQK_B, bMaskDWord);
49510 //RTPRINT(FINIT, INIT_IQK, ("0xeb4 = 0x%x\n", regEB4));
49511 - regEBC= PHY_QueryBBReg(pAdapter, 0xebc, bMaskDWord);
49512 + regEBC= PHY_QueryBBReg(pAdapter, rTx_Power_After_IQK_B, bMaskDWord);
49513 //RTPRINT(FINIT, INIT_IQK, ("0xebc = 0x%x\n", regEBC));
49514 - regEC4= PHY_QueryBBReg(pAdapter, 0xec4, bMaskDWord);
49515 + regEC4= PHY_QueryBBReg(pAdapter, rRx_Power_Before_IQK_B_2, bMaskDWord);
49516 //RTPRINT(FINIT, INIT_IQK, ("0xec4 = 0x%x\n", regEC4));
49517 - regECC= PHY_QueryBBReg(pAdapter, 0xecc, bMaskDWord);
49518 + regECC= PHY_QueryBBReg(pAdapter, rRx_Power_After_IQK_B_2, bMaskDWord);
49519 //RTPRINT(FINIT, INIT_IQK, ("0xecc = 0x%x\n", regECC));
49520
49521 if(!(regEAC & BIT31) &&
49522 @@ -3638,15 +3533,15 @@ _PHY_PathB_IQK(
49523 static VOID
49524 _PHY_PathAFillIQKMatrix(
49525 IN PADAPTER pAdapter,
49526 - IN BOOLEAN bIQKOK,
49527 - IN int result[][8],
49528 - IN u8 final_candidate,
49529 - IN BOOLEAN bTxOnly
49530 + IN BOOLEAN bIQKOK,
49531 + IN int result[][8],
49532 + IN u8 final_candidate,
49533 + IN BOOLEAN bTxOnly
49534 )
49535 {
49536 u32 Oldval_0, X, TX0_A, reg;
49537 - int Y, TX0_C;
49538 -
49539 + s32 Y, TX0_C;
49540 +
49541 DBG_8192C("Path A IQ Calibration %s !\n",(bIQKOK)?"Success":"Failed");
49542
49543 if(final_candidate == 0xFF)
49544 @@ -3657,7 +3552,7 @@ _PHY_PathAFillIQKMatrix(
49545
49546 X = result[final_candidate][0];
49547 if ((X & 0x00000200) != 0)
49548 - X = X | 0xFFFFFC00;
49549 + X = X | 0xFFFFFC00;
49550 TX0_A = (X * Oldval_0) >> 8;
49551 //RTPRINT(FINIT, INIT_IQK, ("X = 0x%lx, TX0_A = 0x%lx, Oldval_0 0x%lx\n", X, TX0_A, Oldval_0));
49552 PHY_SetBBReg(pAdapter, rOFDM0_XATxIQImbalance, 0x3FF, TX0_A);
49553 @@ -3665,7 +3560,7 @@ _PHY_PathAFillIQKMatrix(
49554
49555 Y = result[final_candidate][1];
49556 if ((Y & 0x00000200) != 0)
49557 - Y = Y | 0xFFFFFC00;
49558 + Y = Y | 0xFFFFFC00;
49559 TX0_C = (Y * Oldval_0) >> 8;
49560 //RTPRINT(FINIT, INIT_IQK, ("Y = 0x%lx, TX = 0x%lx\n", Y, TX0_C));
49561 PHY_SetBBReg(pAdapter, rOFDM0_XCTxAFE, 0xF0000000, ((TX0_C&0x3C0)>>6));
49562 @@ -3680,26 +3575,26 @@ _PHY_PathAFillIQKMatrix(
49563
49564 reg = result[final_candidate][2];
49565 PHY_SetBBReg(pAdapter, rOFDM0_XARxIQImbalance, 0x3FF, reg);
49566 -
49567 +
49568 reg = result[final_candidate][3] & 0x3F;
49569 PHY_SetBBReg(pAdapter, rOFDM0_XARxIQImbalance, 0xFC00, reg);
49570
49571 reg = (result[final_candidate][3] >> 6) & 0xF;
49572 - PHY_SetBBReg(pAdapter, 0xca0, 0xF0000000, reg);
49573 + PHY_SetBBReg(pAdapter, rOFDM0_RxIQExtAnta, 0xF0000000, reg);
49574 }
49575 }
49576
49577 static VOID
49578 _PHY_PathBFillIQKMatrix(
49579 IN PADAPTER pAdapter,
49580 - IN BOOLEAN bIQKOK,
49581 - IN int result[][8],
49582 - IN u8 final_candidate,
49583 + IN BOOLEAN bIQKOK,
49584 + IN int result[][8],
49585 + IN u8 final_candidate,
49586 IN BOOLEAN bTxOnly //do Tx only
49587 )
49588 {
49589 u32 Oldval_1, X, TX1_A, reg;
49590 - int Y, TX1_C;
49591 + s32 Y, TX1_C;
49592
49593 DBG_8192C("Path B IQ Calibration %s !\n",(bIQKOK)?"Success":"Failed");
49594
49595 @@ -3731,7 +3626,7 @@ _PHY_PathBFillIQKMatrix(
49596
49597 reg = result[final_candidate][6];
49598 PHY_SetBBReg(pAdapter, rOFDM0_XBRxIQImbalance, 0x3FF, reg);
49599 -
49600 +
49601 reg = result[final_candidate][7] & 0x3F;
49602 PHY_SetBBReg(pAdapter, rOFDM0_XBRxIQImbalance, 0xFC00, reg);
49603
49604 @@ -3860,9 +3755,9 @@ _PHY_PathAStandBy(
49605 {
49606 //RTPRINT(FINIT, INIT_IQK, ("Path-A standby mode!\n"));
49607
49608 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x0);
49609 + PHY_SetBBReg(pAdapter, rFPGA0_IQK, bMaskDWord, 0x0);
49610 PHY_SetBBReg(pAdapter, 0x840, bMaskDWord, 0x00010000);
49611 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x80800000);
49612 + PHY_SetBBReg(pAdapter, rFPGA0_IQK, bMaskDWord, 0x80800000);
49613 }
49614
49615 static VOID
49616 @@ -3915,7 +3810,7 @@ _PHY_SimularityCompare(
49617 else if (result[c2][i]+result[c2][i+1] == 0)
49618 final_candidate[(i/4)] = c1;
49619 else
49620 - SimularityBitMap = SimularityBitMap|(1<<i);
49621 + SimularityBitMap = SimularityBitMap|(1<<i);
49622 }
49623 else
49624 SimularityBitMap = SimularityBitMap|(1<<i);
49625 @@ -3964,17 +3859,26 @@ _PHY_IQCalibrate(
49626 struct dm_priv *pdmpriv = &pHalData->dmpriv;
49627 u32 i;
49628 u8 PathAOK, PathBOK;
49629 - u32 ADDA_REG[IQK_ADDA_REG_NUM] = { 0x85c, 0xe6c, 0xe70, 0xe74,
49630 - 0xe78, 0xe7c, 0xe80, 0xe84,
49631 - 0xe88, 0xe8c, 0xed0, 0xed4,
49632 - 0xed8, 0xedc, 0xee0, 0xeec };
49633 -
49634 - u32 IQK_MAC_REG[IQK_MAC_REG_NUM] = {0x522, 0x550, 0x551,0x040};
49635 -
49636 - u32 IQK_BB_REG[IQK_BB_REG_NUM] = {
49637 - 0xc04, 0xc08, 0x874, 0xb68, 0xb6c,
49638 - 0x870, 0x860, 0x864, 0x800
49639 - };
49640 + u32 ADDA_REG[IQK_ADDA_REG_NUM] = {
49641 + rFPGA0_XCD_SwitchControl, rBlue_Tooth,
49642 + rRx_Wait_CCA, rTx_CCK_RFON,
49643 + rTx_CCK_BBON, rTx_OFDM_RFON,
49644 + rTx_OFDM_BBON, rTx_To_Rx,
49645 + rTx_To_Tx, rRx_CCK,
49646 + rRx_OFDM, rRx_Wait_RIFS,
49647 + rRx_TO_Rx, rStandby,
49648 + rSleep, rPMPD_ANAEN };
49649 +
49650 + u32 IQK_MAC_REG[IQK_MAC_REG_NUM] = {
49651 + REG_TXPAUSE, REG_BCN_CTRL,
49652 + REG_BCN_CTRL_1, REG_GPIO_MUXCFG};
49653 +
49654 + u32 IQK_BB_REG_92C[IQK_BB_REG_NUM] = {
49655 + rOFDM0_TRxPathEnable, rOFDM0_TRMuxPar,
49656 + rFPGA0_XCD_RFInterfaceSW, rConfig_AntA, rConfig_AntB,
49657 + rFPGA0_XAB_RFInterfaceSW, rFPGA0_XA_RFInterfaceOE,
49658 + rFPGA0_XB_RFInterfaceOE, rFPGA0_RFMOD
49659 + };
49660
49661 #if MP_DRIVER
49662 const u32 retryCount = 9;
49663 @@ -3986,11 +3890,10 @@ _PHY_IQCalibrate(
49664 // PHY_REG.txt , and radio_a, radio_b.txt
49665
49666 u32 bbvalue;
49667 - BOOLEAN isNormal = IS_NORMAL_CHIP(pHalData->VersionID);
49668
49669 if(t==0)
49670 {
49671 - bbvalue = PHY_QueryBBReg(pAdapter, 0x800, bMaskDWord);
49672 + bbvalue = PHY_QueryBBReg(pAdapter, rFPGA0_RFMOD, bMaskDWord);
49673 //RTPRINT(FINIT, INIT_IQK, ("PHY_IQCalibrate()==>0x%08lx\n",bbvalue));
49674
49675 //RTPRINT(FINIT, INIT_IQK, ("IQ Calibration for %s\n", (is2T ? "2T2R" : "1T1R")));
49676 @@ -3998,7 +3901,7 @@ _PHY_IQCalibrate(
49677 // Save ADDA parameters, turn Path A ADDA on
49678 _PHY_SaveADDARegisters(pAdapter, ADDA_REG, pdmpriv->ADDA_backup,IQK_ADDA_REG_NUM);
49679 _PHY_SaveMACRegisters(pAdapter, IQK_MAC_REG, pdmpriv->IQK_MAC_backup);
49680 - _PHY_SaveADDARegisters(pAdapter, IQK_BB_REG, pdmpriv->IQK_BB_backup, IQK_BB_REG_NUM);
49681 + _PHY_SaveADDARegisters(pAdapter, IQK_BB_REG_92C, pdmpriv->IQK_BB_backup, IQK_BB_REG_NUM);
49682 }
49683 _PHY_PathADDAOn(pAdapter, ADDA_REG, _TRUE, is2T);
49684
49685 @@ -4012,60 +3915,54 @@ _PHY_IQCalibrate(
49686 _PHY_PIModeSwitch(pAdapter, _TRUE);
49687 }
49688
49689 - PHY_SetBBReg(pAdapter, 0x800, BIT24, 0x00);
49690 - PHY_SetBBReg(pAdapter, 0xc04, bMaskDWord, 0x03a05600);
49691 - PHY_SetBBReg(pAdapter, 0xc08, bMaskDWord, 0x000800e4);
49692 - PHY_SetBBReg(pAdapter, 0x874, bMaskDWord, 0x22204000);
49693 - PHY_SetBBReg(pAdapter, 0x870, BIT10, 0x01);
49694 - PHY_SetBBReg(pAdapter, 0x870, BIT26, 0x01);
49695 - PHY_SetBBReg(pAdapter, 0x860, BIT10, 0x00);
49696 - PHY_SetBBReg(pAdapter, 0x864, BIT10, 0x00);
49697 + PHY_SetBBReg(pAdapter, rFPGA0_RFMOD, BIT24, 0x00);
49698 + PHY_SetBBReg(pAdapter, rOFDM0_TRxPathEnable, bMaskDWord, 0x03a05600);
49699 + PHY_SetBBReg(pAdapter, rOFDM0_TRMuxPar, bMaskDWord, 0x000800e4);
49700 + PHY_SetBBReg(pAdapter, rFPGA0_XCD_RFInterfaceSW, bMaskDWord, 0x22204000);
49701 + PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFInterfaceSW, BIT10, 0x01);
49702 + PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFInterfaceSW, BIT26, 0x01);
49703 + PHY_SetBBReg(pAdapter, rFPGA0_XA_RFInterfaceOE, BIT10, 0x00);
49704 + PHY_SetBBReg(pAdapter, rFPGA0_XB_RFInterfaceOE, BIT10, 0x00);
49705
49706 if(is2T)
49707 {
49708 - PHY_SetBBReg(pAdapter, 0x840, bMaskDWord, 0x00010000);
49709 - PHY_SetBBReg(pAdapter, 0x844, bMaskDWord, 0x00010000);
49710 + PHY_SetBBReg(pAdapter, rFPGA0_XA_LSSIParameter, bMaskDWord, 0x00010000);
49711 + PHY_SetBBReg(pAdapter, rFPGA0_XB_LSSIParameter, bMaskDWord, 0x00010000);
49712 }
49713
49714 //MAC settings
49715 _PHY_MACSettingCalibration(pAdapter, IQK_MAC_REG, pdmpriv->IQK_MAC_backup);
49716
49717 //Page B init
49718 - if(isNormal)
49719 - PHY_SetBBReg(pAdapter, 0xb68, bMaskDWord, 0x00080000);
49720 - else
49721 - PHY_SetBBReg(pAdapter, 0xb68, bMaskDWord, 0x0f600000);
49722 + PHY_SetBBReg(pAdapter, rConfig_AntA, bMaskDWord, 0x00080000);
49723
49724 if(is2T)
49725 {
49726 - if(isNormal)
49727 - PHY_SetBBReg(pAdapter, 0xb6c, bMaskDWord, 0x00080000);
49728 - else
49729 - PHY_SetBBReg(pAdapter, 0xb6c, bMaskDWord, 0x0f600000);
49730 + PHY_SetBBReg(pAdapter, rConfig_AntB, bMaskDWord, 0x00080000);
49731 }
49732
49733 // IQ calibration setting
49734 //RTPRINT(FINIT, INIT_IQK, ("IQK setting!\n"));
49735 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x80800000);
49736 - PHY_SetBBReg(pAdapter, 0xe40, bMaskDWord, 0x01007c00);
49737 - PHY_SetBBReg(pAdapter, 0xe44, bMaskDWord, 0x01004800);
49738 + PHY_SetBBReg(pAdapter, rFPGA0_IQK, bMaskDWord, 0x80800000);
49739 + PHY_SetBBReg(pAdapter, rTx_IQK, bMaskDWord, 0x01007c00);
49740 + PHY_SetBBReg(pAdapter, rRx_IQK, bMaskDWord, 0x01004800);
49741
49742 for(i = 0 ; i < retryCount ; i++){
49743 PathAOK = _PHY_PathA_IQK(pAdapter, is2T);
49744 if(PathAOK == 0x03){
49745 DBG_8192C("Path A IQK Success!!\n");
49746 - result[t][0] = (PHY_QueryBBReg(pAdapter, 0xe94, bMaskDWord)&0x3FF0000)>>16;
49747 - result[t][1] = (PHY_QueryBBReg(pAdapter, 0xe9c, bMaskDWord)&0x3FF0000)>>16;
49748 - result[t][2] = (PHY_QueryBBReg(pAdapter, 0xea4, bMaskDWord)&0x3FF0000)>>16;
49749 - result[t][3] = (PHY_QueryBBReg(pAdapter, 0xeac, bMaskDWord)&0x3FF0000)>>16;
49750 + result[t][0] = (PHY_QueryBBReg(pAdapter, rTx_Power_Before_IQK_A, bMaskDWord)&0x3FF0000)>>16;
49751 + result[t][1] = (PHY_QueryBBReg(pAdapter, rTx_Power_After_IQK_A, bMaskDWord)&0x3FF0000)>>16;
49752 + result[t][2] = (PHY_QueryBBReg(pAdapter, rRx_Power_Before_IQK_A_2, bMaskDWord)&0x3FF0000)>>16;
49753 + result[t][3] = (PHY_QueryBBReg(pAdapter, rRx_Power_After_IQK_A_2, bMaskDWord)&0x3FF0000)>>16;
49754 break;
49755 }
49756 else if (i == (retryCount-1) && PathAOK == 0x01) //Tx IQK OK
49757 {
49758 DBG_8192C("Path A IQK Only Tx Success!!\n");
49759
49760 - result[t][0] = (PHY_QueryBBReg(pAdapter, 0xe94, bMaskDWord)&0x3FF0000)>>16;
49761 - result[t][1] = (PHY_QueryBBReg(pAdapter, 0xe9c, bMaskDWord)&0x3FF0000)>>16;
49762 + result[t][0] = (PHY_QueryBBReg(pAdapter, rTx_Power_Before_IQK_A, bMaskDWord)&0x3FF0000)>>16;
49763 + result[t][1] = (PHY_QueryBBReg(pAdapter, rTx_Power_After_IQK_A, bMaskDWord)&0x3FF0000)>>16;
49764 }
49765 }
49766
49767 @@ -4083,17 +3980,17 @@ _PHY_IQCalibrate(
49768 PathBOK = _PHY_PathB_IQK(pAdapter);
49769 if(PathBOK == 0x03){
49770 DBG_8192C("Path B IQK Success!!\n");
49771 - result[t][4] = (PHY_QueryBBReg(pAdapter, 0xeb4, bMaskDWord)&0x3FF0000)>>16;
49772 - result[t][5] = (PHY_QueryBBReg(pAdapter, 0xebc, bMaskDWord)&0x3FF0000)>>16;
49773 - result[t][6] = (PHY_QueryBBReg(pAdapter, 0xec4, bMaskDWord)&0x3FF0000)>>16;
49774 - result[t][7] = (PHY_QueryBBReg(pAdapter, 0xecc, bMaskDWord)&0x3FF0000)>>16;
49775 + result[t][4] = (PHY_QueryBBReg(pAdapter, rTx_Power_Before_IQK_B, bMaskDWord)&0x3FF0000)>>16;
49776 + result[t][5] = (PHY_QueryBBReg(pAdapter, rTx_Power_After_IQK_B, bMaskDWord)&0x3FF0000)>>16;
49777 + result[t][6] = (PHY_QueryBBReg(pAdapter, rRx_Power_Before_IQK_B_2, bMaskDWord)&0x3FF0000)>>16;
49778 + result[t][7] = (PHY_QueryBBReg(pAdapter, rRx_Power_After_IQK_B_2, bMaskDWord)&0x3FF0000)>>16;
49779 break;
49780 }
49781 else if (i == (retryCount - 1) && PathBOK == 0x01) //Tx IQK OK
49782 {
49783 DBG_8192C("Path B Only Tx IQK Success!!\n");
49784 - result[t][4] = (PHY_QueryBBReg(pAdapter, 0xeb4, bMaskDWord)&0x3FF0000)>>16;
49785 - result[t][5] = (PHY_QueryBBReg(pAdapter, 0xebc, bMaskDWord)&0x3FF0000)>>16;
49786 + result[t][4] = (PHY_QueryBBReg(pAdapter, rTx_Power_Before_IQK_B, bMaskDWord)&0x3FF0000)>>16;
49787 + result[t][5] = (PHY_QueryBBReg(pAdapter, rTx_Power_After_IQK_B, bMaskDWord)&0x3FF0000)>>16;
49788 }
49789 }
49790
49791 @@ -4104,7 +4001,7 @@ _PHY_IQCalibrate(
49792
49793 //Back to BB mode, load original value
49794 //RTPRINT(FINIT, INIT_IQK, ("IQK:Back to BB mode, load original value!\n"));
49795 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0);
49796 + PHY_SetBBReg(pAdapter, rFPGA0_IQK, bMaskDWord, 0);
49797
49798 if(t!=0)
49799 {
49800 @@ -4120,17 +4017,17 @@ _PHY_IQCalibrate(
49801 _PHY_ReloadMACRegisters(pAdapter, IQK_MAC_REG, pdmpriv->IQK_MAC_backup);
49802
49803 // Reload BB parameters
49804 - _PHY_ReloadADDARegisters(pAdapter, IQK_BB_REG, pdmpriv->IQK_BB_backup, IQK_BB_REG_NUM);
49805 + _PHY_ReloadADDARegisters(pAdapter, IQK_BB_REG_92C, pdmpriv->IQK_BB_backup, IQK_BB_REG_NUM);
49806
49807 // Restore RX initial gain
49808 - PHY_SetBBReg(pAdapter, 0x840, bMaskDWord, 0x00032ed3);
49809 + PHY_SetBBReg(pAdapter, rFPGA0_XA_LSSIParameter, bMaskDWord, 0x00032ed3);
49810 if(is2T){
49811 - PHY_SetBBReg(pAdapter, 0x844, bMaskDWord, 0x00032ed3);
49812 + PHY_SetBBReg(pAdapter, rFPGA0_XB_LSSIParameter, bMaskDWord, 0x00032ed3);
49813 }
49814
49815 //load 0xe30 IQC default value
49816 - PHY_SetBBReg(pAdapter, 0xe30, bMaskDWord, 0x01008c00);
49817 - PHY_SetBBReg(pAdapter, 0xe34, bMaskDWord, 0x01008c00);
49818 + PHY_SetBBReg(pAdapter, rTx_IQK_Tone_A, bMaskDWord, 0x01008c00);
49819 + PHY_SetBBReg(pAdapter, rRx_IQK_Tone_A, bMaskDWord, 0x01008c00);
49820
49821 }
49822 //RTPRINT(FINIT, INIT_IQK, ("_PHY_IQCalibrate() <==\n"));
49823 @@ -4146,8 +4043,6 @@ _PHY_LCCalibrate(
49824 {
49825 u8 tmpReg;
49826 u32 RF_Amode = 0, RF_Bmode = 0, LC_Cal;
49827 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
49828 - BOOLEAN isNormal = IS_NORMAL_CHIP(pHalData->VersionID);
49829
49830 //Check continuous TX and Packet TX
49831 tmpReg = rtw_read8(pAdapter, 0xd03);
49832 @@ -4161,47 +4056,43 @@ _PHY_LCCalibrate(
49833 {
49834 //1. Read original RF mode
49835 //Path-A
49836 - RF_Amode = PHY_QueryRFReg(pAdapter, RF90_PATH_A, 0x00, bMask12Bits);
49837 + RF_Amode = PHY_QueryRFReg(pAdapter, RF_PATH_A, RF_AC, bMask12Bits);
49838
49839 //Path-B
49840 if(is2T)
49841 - RF_Bmode = PHY_QueryRFReg(pAdapter, RF90_PATH_B, 0x00, bMask12Bits);
49842 + RF_Bmode = PHY_QueryRFReg(pAdapter, RF_PATH_B, RF_AC, bMask12Bits);
49843
49844 //2. Set RF mode = standby mode
49845 //Path-A
49846 - PHY_SetRFReg(pAdapter, RF90_PATH_A, 0x00, bMask12Bits, (RF_Amode&0x8FFFF)|0x10000);
49847 + PHY_SetRFReg(pAdapter, RF_PATH_A, RF_AC, bMask12Bits, (RF_Amode&0x8FFFF)|0x10000);
49848
49849 //Path-B
49850 if(is2T)
49851 - PHY_SetRFReg(pAdapter, RF90_PATH_B, 0x00, bMask12Bits, (RF_Bmode&0x8FFFF)|0x10000);
49852 + PHY_SetRFReg(pAdapter, RF_PATH_B, RF_AC, bMask12Bits, (RF_Bmode&0x8FFFF)|0x10000);
49853 }
49854
49855 //3. Read RF reg18
49856 - LC_Cal = PHY_QueryRFReg(pAdapter, RF90_PATH_A, 0x18, bMask12Bits);
49857 + LC_Cal = PHY_QueryRFReg(pAdapter, RF_PATH_A, RF_CHNLBW, bMask12Bits);
49858
49859 //4. Set LC calibration begin
49860 - PHY_SetRFReg(pAdapter, RF90_PATH_A, 0x18, bMask12Bits, LC_Cal|0x08000);
49861 + PHY_SetRFReg(pAdapter, RF_PATH_A, RF_CHNLBW, bMask12Bits, LC_Cal|0x08000);
49862
49863 - if(isNormal) {
49864 - #ifdef CONFIG_LONG_DELAY_ISSUE
49865 - rtw_msleep_os(100);
49866 - #else
49867 - rtw_mdelay_os(100);
49868 - #endif
49869 - }
49870 - else
49871 - rtw_mdelay_os(3);
49872 + #ifdef CONFIG_LONG_DELAY_ISSUE
49873 + rtw_msleep_os(100);
49874 + #else
49875 + rtw_mdelay_os(100);
49876 + #endif
49877
49878 //Restore original situation
49879 if((tmpReg&0x70) != 0) //Deal with contisuous TX case
49880 {
49881 //Path-A
49882 rtw_write8(pAdapter, 0xd03, tmpReg);
49883 - PHY_SetRFReg(pAdapter, RF90_PATH_A, 0x00, bMask12Bits, RF_Amode);
49884 + PHY_SetRFReg(pAdapter, RF_PATH_A, RF_AC, bMask12Bits, RF_Amode);
49885
49886 //Path-B
49887 if(is2T)
49888 - PHY_SetRFReg(pAdapter, RF90_PATH_B, 0x00, bMask12Bits, RF_Bmode);
49889 + PHY_SetRFReg(pAdapter, RF_PATH_B, RF_AC, bMask12Bits, RF_Bmode);
49890 }
49891 else // Deal with Packet TX case
49892 {
49893 @@ -4223,17 +4114,18 @@ _PHY_APCalibrate(
49894 IN BOOLEAN is2T
49895 )
49896 {
49897 -#if 1//(PLATFORM == PLATFORM_WINDOWS)//???
49898 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
49899 struct dm_priv *pdmpriv = &pHalData->dmpriv;
49900
49901 u32 regD[PATH_NUM];
49902 - u32 tmpReg, index, offset, path, i, pathbound = PATH_NUM, apkbound;
49903 -
49904 + u32 tmpReg, index, offset, i, apkbound;
49905 + u8 path, pathbound = PATH_NUM;
49906 u32 BB_backup[APK_BB_REG_NUM];
49907 u32 BB_REG[APK_BB_REG_NUM] = {
49908 - 0x904, 0xc04, 0x800, 0xc08, 0x874,
49909 - 0x870, 0x860, 0x864 };
49910 + rFPGA1_TxBlock, rOFDM0_TRxPathEnable,
49911 + rFPGA0_RFMOD, rOFDM0_TRMuxPar,
49912 + rFPGA0_XCD_RFInterfaceSW, rFPGA0_XAB_RFInterfaceSW,
49913 + rFPGA0_XA_RFInterfaceOE, rFPGA0_XB_RFInterfaceOE };
49914 u32 BB_AP_MODE[APK_BB_REG_NUM] = {
49915 0x00000020, 0x00a05430, 0x02040000,
49916 0x000800e4, 0x00204000 };
49917 @@ -4243,14 +4135,19 @@ _PHY_APCalibrate(
49918
49919 u32 AFE_backup[IQK_ADDA_REG_NUM];
49920 u32 AFE_REG[IQK_ADDA_REG_NUM] = {
49921 - 0x85c, 0xe6c, 0xe70, 0xe74, 0xe78,
49922 - 0xe7c, 0xe80, 0xe84, 0xe88, 0xe8c,
49923 - 0xed0, 0xed4, 0xed8, 0xedc, 0xee0,
49924 - 0xeec};
49925 + rFPGA0_XCD_SwitchControl, rBlue_Tooth,
49926 + rRx_Wait_CCA, rTx_CCK_RFON,
49927 + rTx_CCK_BBON, rTx_OFDM_RFON,
49928 + rTx_OFDM_BBON, rTx_To_Rx,
49929 + rTx_To_Tx, rRx_CCK,
49930 + rRx_OFDM, rRx_Wait_RIFS,
49931 + rRx_TO_Rx, rStandby,
49932 + rSleep, rPMPD_ANAEN };
49933
49934 u32 MAC_backup[IQK_MAC_REG_NUM];
49935 u32 MAC_REG[IQK_MAC_REG_NUM] = {
49936 - 0x522, 0x550, 0x551, 0x040};
49937 + REG_TXPAUSE, REG_BCN_CTRL,
49938 + REG_BCN_CTRL_1, REG_GPIO_MUXCFG};
49939
49940 u32 APK_RF_init_value[PATH_NUM][APK_BB_REG_NUM] = {
49941 {0x0852c, 0x1852c, 0x5852c, 0x1852c, 0x5852c},
49942 @@ -4271,20 +4168,20 @@ _PHY_APCalibrate(
49943 {0x52019, 0x52017, 0x52010, 0x5200d, 0x5206a}, //path settings equal to path b settings
49944 {0x52019, 0x52017, 0x52010, 0x5200d, 0x5206a}
49945 };
49946 -
49947 +#if 0
49948 u32 APK_RF_value_A[PATH_NUM][APK_BB_REG_NUM] = {
49949 {0x1adb0, 0x1adb0, 0x1ada0, 0x1ad90, 0x1ad80},
49950 {0x00fb0, 0x00fb0, 0x00fa0, 0x00f90, 0x00f80}
49951 };
49952 -
49953 +#endif
49954 u32 AFE_on_off[PATH_NUM] = {
49955 0x04db25a4, 0x0b1b25a4}; //path A on path B off / path A off path B on
49956
49957 u32 APK_offset[PATH_NUM] = {
49958 - 0xb68, 0xb6c};
49959 + rConfig_AntA, rConfig_AntB};
49960
49961 u32 APK_normal_offset[PATH_NUM] = {
49962 - 0xb28, 0xb98};
49963 + rConfig_Pmpd_AntA, rConfig_Pmpd_AntB};
49964
49965 u32 APK_value[PATH_NUM] = {
49966 0x92fc0000, 0x12fc0000};
49967 @@ -4294,7 +4191,7 @@ _PHY_APCalibrate(
49968
49969 char APK_delta_mapping[APK_BB_REG_NUM][13] = {
49970 {-4, -3, -2, -2, -1, -1, 0, 1, 2, 3, 4, 5, 6},
49971 - {-4, -3, -2, -2, -1, -1, 0, 1, 2, 3, 4, 5, 6},
49972 + {-4, -3, -2, -2, -1, -1, 0, 1, 2, 3, 4, 5, 6},
49973 {-6, -4, -2, -2, -1, -1, 0, 1, 2, 3, 4, 5, 6},
49974 {-1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6},
49975 {-11, -9, -7, -5, -3, -1, 0, 0, 0, 0, 0, 0, 0}
49976 @@ -4314,17 +4211,15 @@ _PHY_APCalibrate(
49977 };
49978
49979 u32 APK_result[PATH_NUM][APK_BB_REG_NUM]; //val_1_1a, val_1_2a, val_2a, val_3a, val_4a
49980 - u32 AP_curve[PATH_NUM][APK_CURVE_REG_NUM];
49981 + //u32 AP_curve[PATH_NUM][APK_CURVE_REG_NUM];
49982
49983 int BB_offset, delta_V, delta_offset;
49984
49985 - BOOLEAN isNormal = IS_NORMAL_CHIP(pHalData->VersionID);
49986 -
49987 #if (MP_DRIVER == 1)
49988 PMPT_CONTEXT pMptCtx = &pAdapter->mppriv.MptCtx;
49989
49990 pMptCtx->APK_bound[0] = 45;
49991 - pMptCtx->APK_bound[1] = 52;
49992 + pMptCtx->APK_bound[1] = 52;
49993 #endif
49994
49995 //RTPRINT(FINIT, INIT_IQK, ("==>PHY_APCalibrate() delta %d\n", delta));
49996 @@ -4335,48 +4230,39 @@ _PHY_APCalibrate(
49997 pathbound = 1;
49998
49999 //2 FOR NORMAL CHIP SETTINGS
50000 - if(isNormal)
50001 - {
50002 +
50003 // Temporarily do not allow normal driver to do the following settings because these offset
50004 // and value will cause RF internal PA to be unpredictably disabled by HW, such that RF Tx signal
50005 // will disappear after disable/enable card many times on 88CU. RF SD and DD have not find the
50006 // root cause, so we remove these actions temporarily. Added by tynli and SD3 Allen. 2010.05.31.
50007 #if (MP_DRIVER != 1)
50008 - return;
50009 + return;
50010 #endif
50011 -
50012 - //settings adjust for normal chip
50013 - for(index = 0; index < PATH_NUM; index ++)
50014 - {
50015 - APK_offset[index] = APK_normal_offset[index];
50016 - APK_value[index] = APK_normal_value[index];
50017 - AFE_on_off[index] = 0x6fdb25a4;
50018 - }
50019 -
50020 - for(index = 0; index < APK_BB_REG_NUM; index ++)
50021 - {
50022 - for(path = 0; path < pathbound; path++)
50023 - {
50024 - APK_RF_init_value[path][index] = APK_normal_RF_init_value[path][index];
50025 - APK_RF_value_0[path][index] = APK_normal_RF_value_0[path][index];
50026 - }
50027 - BB_AP_MODE[index] = BB_normal_AP_MODE[index];
50028 - }
50029
50030 - apkbound = 6;
50031 + //settings adjust for normal chip
50032 + for(index = 0; index < PATH_NUM; index ++)
50033 + {
50034 + APK_offset[index] = APK_normal_offset[index];
50035 + APK_value[index] = APK_normal_value[index];
50036 + AFE_on_off[index] = 0x6fdb25a4;
50037 }
50038 - else
50039 +
50040 + for(index = 0; index < APK_BB_REG_NUM; index ++)
50041 {
50042 - PHY_SetBBReg(pAdapter, 0xb68, bMaskDWord, 0x0fe00000);
50043 - if(is2T)
50044 - PHY_SetBBReg(pAdapter, 0xb68, bMaskDWord, 0x0fe00000);
50045 - apkbound = 12;
50046 + for(path = 0; path < pathbound; path++)
50047 + {
50048 + APK_RF_init_value[path][index] = APK_normal_RF_init_value[path][index];
50049 + APK_RF_value_0[path][index] = APK_normal_RF_value_0[path][index];
50050 + }
50051 + BB_AP_MODE[index] = BB_normal_AP_MODE[index];
50052 }
50053 -
50054 +
50055 + apkbound = 6;
50056 +
50057 //save BB default value
50058 for(index = 0; index < APK_BB_REG_NUM ; index++)
50059 {
50060 - if(index == 0 && isNormal) //skip
50061 + if(index == 0) //skip
50062 continue;
50063 BB_backup[index] = PHY_QueryBBReg(pAdapter, BB_REG[index], bMaskDWord);
50064 }
50065 @@ -4385,116 +4271,93 @@ _PHY_APCalibrate(
50066 _PHY_SaveMACRegisters(pAdapter, MAC_REG, MAC_backup);
50067
50068 //save AFE default value
50069 - _PHY_SaveADDARegisters(pAdapter, AFE_REG, AFE_backup,16);
50070 + _PHY_SaveADDARegisters(pAdapter, AFE_REG, AFE_backup, IQK_ADDA_REG_NUM);
50071
50072 for(path = 0; path < pathbound; path++)
50073 {
50074 - //save old AP curve
50075 - if(isNormal)
50076 + if(path == RF_PATH_A)
50077 {
50078 - if(path == RF90_PATH_A)
50079 + //path A APK
50080 + //load APK setting
50081 + //path-A
50082 + offset = rPdp_AntA;
50083 + for(index = 0; index < 11; index ++)
50084 {
50085 - //path A APK
50086 - //load APK setting
50087 - //path-A
50088 - offset = 0xb00;
50089 - for(index = 0; index < 11; index ++)
50090 - {
50091 - PHY_SetBBReg(pAdapter, offset, bMaskDWord, APK_normal_setting_value_1[index]);
50092 - //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0x%x value 0x%x\n", offset, PHY_QueryBBReg(pAdapter, offset, bMaskDWord)));
50093 -
50094 - offset += 0x04;
50095 - }
50096 + PHY_SetBBReg(pAdapter, offset, bMaskDWord, APK_normal_setting_value_1[index]);
50097 + //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0x%x value 0x%x\n", offset, PHY_QueryBBReg(pAdapter, offset, bMaskDWord)));
50098
50099 - PHY_SetBBReg(pAdapter, 0xb98, bMaskDWord, 0x12680000);
50100 + offset += 0x04;
50101 + }
50102 +
50103 + PHY_SetBBReg(pAdapter, rConfig_Pmpd_AntB, bMaskDWord, 0x12680000);
50104 +
50105 + offset = rConfig_AntA;
50106 + for(; index < 13; index ++)
50107 + {
50108 + PHY_SetBBReg(pAdapter, offset, bMaskDWord, APK_normal_setting_value_1[index]);
50109 + //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0x%x value 0x%x\n", offset, PHY_QueryBBReg(pAdapter, offset, bMaskDWord)));
50110
50111 - offset = 0xb68;
50112 - for(; index < 13; index ++)
50113 - {
50114 - PHY_SetBBReg(pAdapter, offset, bMaskDWord, APK_normal_setting_value_1[index]);
50115 - //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0x%x value 0x%x\n", offset, PHY_QueryBBReg(pAdapter, offset, bMaskDWord)));
50116 -
50117 - offset += 0x04;
50118 - }
50119 + offset += 0x04;
50120 + }
50121 +
50122 + //page-B1
50123 + PHY_SetBBReg(pAdapter, rFPGA0_IQK, bMaskDWord, 0x40000000);
50124 +
50125 + //path A
50126 + offset = rPdp_AntA;
50127 + for(index = 0; index < 16; index++)
50128 + {
50129 + PHY_SetBBReg(pAdapter, offset, bMaskDWord, APK_normal_setting_value_2[index]);
50130 + //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0x%x value 0x%x\n", offset, PHY_QueryBBReg(pAdapter, offset, bMaskDWord)));
50131
50132 - //page-B1
50133 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x40000000);
50134 + offset += 0x04;
50135 + }
50136 + PHY_SetBBReg(pAdapter, rFPGA0_IQK, bMaskDWord, 0x00000000);
50137 + }
50138 + else if(path == RF_PATH_B)
50139 + {
50140 + //path B APK
50141 + //load APK setting
50142 + //path-B
50143 + offset = rPdp_AntB;
50144 + for(index = 0; index < 10; index ++)
50145 + {
50146 + PHY_SetBBReg(pAdapter, offset, bMaskDWord, APK_normal_setting_value_1[index]);
50147 + //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0x%x value 0x%x\n", offset, PHY_QueryBBReg(pAdapter, offset, bMaskDWord)));
50148
50149 - //path A
50150 - offset = 0xb00;
50151 - for(index = 0; index < 16; index++)
50152 - {
50153 - PHY_SetBBReg(pAdapter, offset, bMaskDWord, APK_normal_setting_value_2[index]);
50154 - //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0x%x value 0x%x\n", offset, PHY_QueryBBReg(pAdapter, offset, bMaskDWord)));
50155 -
50156 - offset += 0x04;
50157 - }
50158 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x00000000);
50159 + offset += 0x04;
50160 }
50161 - else if(path == RF90_PATH_B)
50162 + PHY_SetBBReg(pAdapter, rConfig_Pmpd_AntA, bMaskDWord, 0x12680000);
50163 +
50164 + PHY_SetBBReg(pAdapter, rConfig_Pmpd_AntB, bMaskDWord, 0x12680000);
50165 +
50166 + offset = rConfig_AntA;
50167 + index = 11;
50168 + for(; index < 13; index ++) //offset 0xb68, 0xb6c
50169 {
50170 - //path B APK
50171 - //load APK setting
50172 - //path-B
50173 - offset = 0xb70;
50174 - for(index = 0; index < 10; index ++)
50175 - {
50176 - PHY_SetBBReg(pAdapter, offset, bMaskDWord, APK_normal_setting_value_1[index]);
50177 - //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0x%x value 0x%x\n", offset, PHY_QueryBBReg(pAdapter, offset, bMaskDWord)));
50178 -
50179 - offset += 0x04;
50180 - }
50181 - PHY_SetBBReg(pAdapter, 0xb28, bMaskDWord, 0x12680000);
50182 -
50183 - PHY_SetBBReg(pAdapter, 0xb98, bMaskDWord, 0x12680000);
50184 + PHY_SetBBReg(pAdapter, offset, bMaskDWord, APK_normal_setting_value_1[index]);
50185 + //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0x%x value 0x%x\n", offset, PHY_QueryBBReg(pAdapter, offset, bMaskDWord)));
50186
50187 - offset = 0xb68;
50188 - index = 11;
50189 - for(; index < 13; index ++) //offset 0xb68, 0xb6c
50190 - {
50191 - PHY_SetBBReg(pAdapter, offset, bMaskDWord, APK_normal_setting_value_1[index]);
50192 - //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0x%x value 0x%x\n", offset, PHY_QueryBBReg(pAdapter, offset, bMaskDWord)));
50193 -
50194 - offset += 0x04;
50195 - }
50196 -
50197 - //page-B1
50198 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x40000000);
50199 + offset += 0x04;
50200 + }
50201 +
50202 + //page-B1
50203 + PHY_SetBBReg(pAdapter, rFPGA0_IQK, bMaskDWord, 0x40000000);
50204 +
50205 + //path B
50206 + offset = 0xb60;
50207 + for(index = 0; index < 16; index++)
50208 + {
50209 + PHY_SetBBReg(pAdapter, offset, bMaskDWord, APK_normal_setting_value_2[index]);
50210 + //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0x%x value 0x%x\n", offset, PHY_QueryBBReg(pAdapter, offset, bMaskDWord)));
50211
50212 - //path B
50213 - offset = 0xb60;
50214 - for(index = 0; index < 16; index++)
50215 - {
50216 - PHY_SetBBReg(pAdapter, offset, bMaskDWord, APK_normal_setting_value_2[index]);
50217 - //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0x%x value 0x%x\n", offset, PHY_QueryBBReg(pAdapter, offset, bMaskDWord)));
50218 -
50219 - offset += 0x04;
50220 - }
50221 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x00000000);
50222 - }
50223 -
50224 -#if 0
50225 - tmpReg = PHY_QueryRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0x3, bMaskDWord);
50226 - AP_curve[path][0] = tmpReg & 0x1F; //[4:0]
50227 -
50228 - tmpReg = PHY_QueryRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0x4, bMaskDWord);
50229 - AP_curve[path][1] = (tmpReg & 0xF8000) >> 15; //[19:15]
50230 - AP_curve[path][2] = (tmpReg & 0x7C00) >> 10; //[14:10]
50231 - AP_curve[path][3] = (tmpReg & 0x3E0) >> 5; //[9:5]
50232 -#endif
50233 - }
50234 - else
50235 - {
50236 - tmpReg = PHY_QueryRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0xe, bMaskDWord);
50237 -
50238 - AP_curve[path][0] = (tmpReg & 0xF8000) >> 15; //[19:15]
50239 - AP_curve[path][1] = (tmpReg & 0x7C00) >> 10; //[14:10]
50240 - AP_curve[path][2] = (tmpReg & 0x3E0) >> 5; //[9:5]
50241 - AP_curve[path][3] = tmpReg & 0x1F; //[4:0]
50242 - }
50243 -
50244 + offset += 0x04;
50245 + }
50246 + PHY_SetBBReg(pAdapter, rFPGA0_IQK, bMaskDWord, 0x00000000);
50247 + }
50248 +
50249 //save RF default value
50250 - regD[path] = PHY_QueryRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0xd, bMaskDWord);
50251 + regD[path] = PHY_QueryRFReg(pAdapter, (RF_RADIO_PATH_E)path, RF_TXBIAS_A, bRFRegOffsetMask);
50252
50253 //Path A AFE all on, path B AFE All off or vise versa
50254 for(index = 0; index < IQK_ADDA_REG_NUM ; index++)
50255 @@ -4506,7 +4369,7 @@ _PHY_APCalibrate(
50256 {
50257 for(index = 0; index < APK_BB_REG_NUM ; index++)
50258 {
50259 - if(index == 0 && isNormal) //skip
50260 + if(index == 0) //skip
50261 continue;
50262 else if (index < 5)
50263 PHY_SetBBReg(pAdapter, BB_REG[index], bMaskDWord, BB_AP_MODE[index]);
50264 @@ -4515,13 +4378,13 @@ _PHY_APCalibrate(
50265 else
50266 PHY_SetBBReg(pAdapter, BB_REG[index], BIT10, 0x0);
50267 }
50268 - PHY_SetBBReg(pAdapter, 0xe30, bMaskDWord, 0x01008c00);
50269 - PHY_SetBBReg(pAdapter, 0xe34, bMaskDWord, 0x01008c00);
50270 + PHY_SetBBReg(pAdapter, rTx_IQK_Tone_A, bMaskDWord, 0x01008c00);
50271 + PHY_SetBBReg(pAdapter, rRx_IQK_Tone_A, bMaskDWord, 0x01008c00);
50272 }
50273 else //path B
50274 {
50275 - PHY_SetBBReg(pAdapter, 0xe50, bMaskDWord, 0x01008c00);
50276 - PHY_SetBBReg(pAdapter, 0xe54, bMaskDWord, 0x01008c00);
50277 + PHY_SetBBReg(pAdapter, rTx_IQK_Tone_B, bMaskDWord, 0x01008c00);
50278 + PHY_SetBBReg(pAdapter, rRx_IQK_Tone_B, bMaskDWord, 0x01008c00);
50279 }
50280
50281 //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0x800 %x\n", PHY_QueryBBReg(pAdapter, 0x800, bMaskDWord)));
50282 @@ -4529,15 +4392,15 @@ _PHY_APCalibrate(
50283 //MAC settings
50284 _PHY_MACSettingCalibration(pAdapter, MAC_REG, MAC_backup);
50285
50286 - if(path == RF90_PATH_A) //Path B to standby mode
50287 + if(path == RF_PATH_A) //Path B to standby mode
50288 {
50289 - PHY_SetRFReg(pAdapter, RF90_PATH_B, 0x0, bMaskDWord, 0x10000);
50290 + PHY_SetRFReg(pAdapter, RF_PATH_B, RF_AC, bRFRegOffsetMask, 0x10000);
50291 }
50292 else //Path A to standby mode
50293 {
50294 - PHY_SetRFReg(pAdapter, RF90_PATH_A, 0x00, bMaskDWord, 0x10000);
50295 - PHY_SetRFReg(pAdapter, RF90_PATH_A, 0x10, bMaskDWord, 0x1000f);
50296 - PHY_SetRFReg(pAdapter, RF90_PATH_A, 0x11, bMaskDWord, 0x20103);
50297 + PHY_SetRFReg(pAdapter, RF_PATH_A, RF_AC, bRFRegOffsetMask, 0x10000);
50298 + PHY_SetRFReg(pAdapter, RF_PATH_A, RF_MODE1, bRFRegOffsetMask, 0x1000f);
50299 + PHY_SetRFReg(pAdapter, RF_PATH_A, RF_MODE2, bRFRegOffsetMask, 0x20103);
50300 }
50301
50302 delta_offset = ((delta+14)/2);
50303 @@ -4549,7 +4412,7 @@ _PHY_APCalibrate(
50304 //AP calibration
50305 for(index = 0; index < APK_BB_REG_NUM; index++)
50306 {
50307 - if(index != 1 && isNormal) //only DO PA11+PAD01001, AP RF setting
50308 + if(index != 1) //only DO PA11+PAD01001, AP RF setting
50309 continue;
50310
50311 tmpReg = APK_RF_init_value[path][index];
50312 @@ -4581,53 +4444,42 @@ _PHY_APCalibrate(
50313 tmpReg = (tmpReg & 0xFFF0FFFF) | (BB_offset << 16);
50314 }
50315 #endif
50316 - PHY_SetRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0xc, bMaskDWord, 0x8992e);
50317 - //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0xc %x\n", PHY_QueryRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0xc, bMaskDWord)));
50318 - PHY_SetRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0x0, bMaskDWord, APK_RF_value_0[path][index]);
50319 - //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0x0 %x\n", PHY_QueryRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0x0, bMaskDWord)));
50320 - PHY_SetRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0xd, bMaskDWord, tmpReg);
50321 - //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0xd %x\n", PHY_QueryRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0xd, bMaskDWord)));
50322 - if(!isNormal)
50323 - {
50324 - PHY_SetRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0xa, bMaskDWord, APK_RF_value_A[path][index]);
50325 - //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0xa %x\n", PHY_QueryRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0xa, bMaskDWord)));
50326 - }
50327 -
50328 +
50329 +#ifdef CONFIG_PCI_HCI
50330 + if(IS_81xxC_VENDOR_UMC_B_CUT(pHalData->VersionID))
50331 + PHY_SetRFReg(pAdapter, (RF_RADIO_PATH_E)path, RF_IPA_A, bRFRegOffsetMask, 0x894ae);
50332 + else
50333 +#endif
50334 + PHY_SetRFReg(pAdapter, (RF_RADIO_PATH_E)path, RF_IPA_A, bRFRegOffsetMask, 0x8992e);
50335 + //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0xc %x\n", PHY_QueryRFReg(pAdapter, (RF_RADIO_PATH_E)path, 0xc, bMaskDWord)));
50336 + PHY_SetRFReg(pAdapter, (RF_RADIO_PATH_E)path, RF_AC, bRFRegOffsetMask, APK_RF_value_0[path][index]);
50337 + //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0x0 %x\n", PHY_QueryRFReg(pAdapter, (RF_RADIO_PATH_E)path, 0x0, bMaskDWord)));
50338 + PHY_SetRFReg(pAdapter, (RF_RADIO_PATH_E)path, RF_TXBIAS_A, bRFRegOffsetMask, tmpReg);
50339 + //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0xd %x\n", PHY_QueryRFReg(pAdapter, (RF_RADIO_PATH_E)path, 0xd, bMaskDWord)));
50340 +
50341 // PA11+PAD01111, one shot
50342 i = 0;
50343 do
50344 {
50345 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x80000000);
50346 + PHY_SetBBReg(pAdapter, rFPGA0_IQK, bMaskDWord, 0x80000000);
50347 {
50348 PHY_SetBBReg(pAdapter, APK_offset[path], bMaskDWord, APK_value[0]);
50349 //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0x%x value 0x%x\n", APK_offset[path], PHY_QueryBBReg(pAdapter, APK_offset[path], bMaskDWord)));
50350 rtw_mdelay_os(3);
50351 PHY_SetBBReg(pAdapter, APK_offset[path], bMaskDWord, APK_value[1]);
50352 //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0x%x value 0x%x\n", APK_offset[path], PHY_QueryBBReg(pAdapter, APK_offset[path], bMaskDWord)));
50353 - if(isNormal) {
50354 - #ifdef CONFIG_LONG_DELAY_ISSUE
50355 - rtw_msleep_os(20);
50356 - #else
50357 - rtw_mdelay_os(20);
50358 - #endif
50359 - }
50360 - else
50361 - rtw_mdelay_os(3);
50362 + #ifdef CONFIG_LONG_DELAY_ISSUE
50363 + rtw_msleep_os(20);
50364 + #else
50365 + rtw_mdelay_os(20);
50366 + #endif
50367 }
50368 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x00000000);
50369 + PHY_SetBBReg(pAdapter, rFPGA0_IQK, bMaskDWord, 0x00000000);
50370
50371 - if(!isNormal)
50372 - {
50373 - tmpReg = PHY_QueryRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0xb, bMaskDWord);
50374 - tmpReg = (tmpReg & 0x3E00) >> 9;
50375 - }
50376 + if(path == RF_PATH_A)
50377 + tmpReg = PHY_QueryBBReg(pAdapter, rAPK, 0x03E00000);
50378 else
50379 - {
50380 - if(path == RF90_PATH_A)
50381 - tmpReg = PHY_QueryBBReg(pAdapter, 0xbd8, 0x03E00000);
50382 - else
50383 - tmpReg = PHY_QueryBBReg(pAdapter, 0xbd8, 0xF8000000);
50384 - }
50385 + tmpReg = PHY_QueryBBReg(pAdapter, rAPK, 0xF8000000);
50386 //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0xbd8[25:21] %x\n", tmpReg));
50387
50388 i++;
50389 @@ -4644,7 +4496,7 @@ _PHY_APCalibrate(
50390 //reload BB default value
50391 for(index = 0; index < APK_BB_REG_NUM ; index++)
50392 {
50393 - if(index == 0 && isNormal) //skip
50394 + if(index == 0) //skip
50395 continue;
50396 PHY_SetBBReg(pAdapter, BB_REG[index], bMaskDWord, BB_backup[index]);
50397 }
50398 @@ -4655,50 +4507,17 @@ _PHY_APCalibrate(
50399 //reload RF path default value
50400 for(path = 0; path < pathbound; path++)
50401 {
50402 - PHY_SetRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0xd, bMaskDWord, regD[path]);
50403 - if(path == RF90_PATH_B)
50404 + PHY_SetRFReg(pAdapter, (RF_RADIO_PATH_E)path, RF_TXBIAS_A, bRFRegOffsetMask, regD[path]);
50405 + if(path == RF_PATH_B)
50406 {
50407 - PHY_SetRFReg(pAdapter, RF90_PATH_A, 0x10, bMaskDWord, 0x1000f);
50408 - PHY_SetRFReg(pAdapter, RF90_PATH_A, 0x11, bMaskDWord, 0x20101);
50409 + PHY_SetRFReg(pAdapter, RF_PATH_A, RF_MODE1, bRFRegOffsetMask, 0x1000f);
50410 + PHY_SetRFReg(pAdapter, RF_PATH_A, RF_MODE2, bRFRegOffsetMask, 0x20101);
50411 }
50412 -#if 1
50413 - if(!isNormal)
50414 - {
50415 - for(index = 0; index < APK_BB_REG_NUM ; index++)
50416 - {
50417 - if(APK_result[path][index] > 12)
50418 - APK_result[path][index] = AP_curve[path][index-1];
50419 - //RTPRINT(FINIT, INIT_IQK, ("apk result %d 0x%x \t", index, APK_result[path][index]));
50420 - }
50421 - }
50422 - else
50423 - { //note no index == 0
50424 - if (APK_result[path][1] > 6)
50425 - APK_result[path][1] = 6;
50426 - //RTPRINT(FINIT, INIT_IQK, ("apk path %d result %d 0x%x \t", path, 1, APK_result[path][1]));
50427 -
50428 -#if 0
50429 - if(APK_result[path][2] < 2)
50430 - APK_result[path][2] = 2;
50431 - else if (APK_result[path][2] > 6)
50432 - APK_result[path][2] = 6;
50433 - RTPRINT(FINIT, INIT_IQK, ("apk result %d 0x%x \t", 2, APK_result[path][2]));
50434 -
50435 - if(APK_result[path][3] < 2)
50436 - APK_result[path][3] = 2;
50437 - else if (APK_result[path][3] > 6)
50438 - APK_result[path][3] = 6;
50439 - RTPRINT(FINIT, INIT_IQK, ("apk result %d 0x%x \t", 3, APK_result[path][3]));
50440 -
50441 - if(APK_result[path][4] < 5)
50442 - APK_result[path][4] = 5;
50443 - else if (APK_result[path][4] > 9)
50444 - APK_result[path][4] = 9;
50445 - RTPRINT(FINIT, INIT_IQK, ("apk result %d 0x%x \t", 4, APK_result[path][4]));
50446 -#endif
50447 -
50448 - }
50449 -#endif
50450 +
50451 + //note no index == 0
50452 + if (APK_result[path][1] > 6)
50453 + APK_result[path][1] = 6;
50454 + //RTPRINT(FINIT, INIT_IQK, ("apk path %d result %d 0x%x \t", path, 1, APK_result[path][1]));
50455 }
50456
50457 //RTPRINT(FINIT, INIT_IQK, ("\n"));
50458 @@ -4706,489 +4525,23 @@ _PHY_APCalibrate(
50459
50460 for(path = 0; path < pathbound; path++)
50461 {
50462 - if(isNormal)
50463 - {
50464 - PHY_SetRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0x3, bMaskDWord,
50465 - ((APK_result[path][1] << 15) | (APK_result[path][1] << 10) | (APK_result[path][1] << 5) | APK_result[path][1]));
50466 - if(path == RF90_PATH_A)
50467 - PHY_SetRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0x4, bMaskDWord,
50468 - ((APK_result[path][1] << 15) | (APK_result[path][1] << 10) | (0x00 << 5) | 0x05));
50469 - else
50470 - PHY_SetRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0x4, bMaskDWord,
50471 - ((APK_result[path][1] << 15) | (APK_result[path][1] << 10) | (0x02 << 5) | 0x05));
50472 - PHY_SetRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0xe, bMaskDWord,
50473 - ((0x08 << 15) | (0x08 << 10) | (0x08 << 5) | 0x08));
50474 - }
50475 + PHY_SetRFReg(pAdapter, (RF_RADIO_PATH_E)path, RF_BS_PA_APSET_G1_G4, bRFRegOffsetMask,
50476 + ((APK_result[path][1] << 15) | (APK_result[path][1] << 10) | (APK_result[path][1] << 5) | APK_result[path][1]));
50477 + if(path == RF_PATH_A)
50478 + PHY_SetRFReg(pAdapter, (RF_RADIO_PATH_E)path, RF_BS_PA_APSET_G5_G8, bRFRegOffsetMask,
50479 + ((APK_result[path][1] << 15) | (APK_result[path][1] << 10) | (0x00 << 5) | 0x05));
50480 else
50481 - {
50482 - for(index = 0; index < 2; index++)
50483 - pdmpriv->APKoutput[path][index] = ((APK_result[path][index] << 15) | (APK_result[path][2] << 10) | (APK_result[path][3] << 5) | APK_result[path][4]);
50484 -
50485 -#if (MP_DRIVER == 1)
50486 - if(pMptCtx->TxPwrLevel[path] > pMptCtx->APK_bound[path])
50487 - {
50488 - PHY_SetRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0xe, bMaskDWord,
50489 - pdmpriv->APKoutput[path][0]);
50490 - }
50491 - else
50492 - {
50493 - PHY_SetRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0xe, bMaskDWord,
50494 - pdmpriv->APKoutput[path][1]);
50495 - }
50496 -#else
50497 - PHY_SetRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0xe, bMaskDWord,
50498 - pdmpriv->APKoutput[path][0]);
50499 -#endif
50500 - }
50501 + PHY_SetRFReg(pAdapter, (RF_RADIO_PATH_E)path, RF_BS_PA_APSET_G5_G8, bRFRegOffsetMask,
50502 + ((APK_result[path][1] << 15) | (APK_result[path][1] << 10) | (0x02 << 5) | 0x05));
50503 + PHY_SetRFReg(pAdapter, (RF_RADIO_PATH_E)path, RF_BS_PA_APSET_G9_G11, bRFRegOffsetMask,
50504 + ((0x08 << 15) | (0x08 << 10) | (0x08 << 5) | 0x08));
50505 }
50506
50507 pdmpriv->bAPKdone = _TRUE;
50508
50509 //RTPRINT(FINIT, INIT_IQK, ("<==PHY_APCalibrate()\n"));
50510 -#endif
50511 }
50512
50513 -
50514 -#define DP_BB_REG_NUM 7
50515 -#define DP_RF_REG_NUM 1
50516 -#define DP_RETRY_LIMIT 10
50517 -#define DP_PATH_NUM 2
50518 -#define DP_DPK_NUM 3
50519 -#define DP_DPK_VALUE_NUM 2
50520 -
50521 -//digital predistortion
50522 -static VOID
50523 -_PHY_DigitalPredistortion(
50524 - IN PADAPTER pAdapter,
50525 - IN BOOLEAN is2T
50526 - )
50527 -{
50528 -#if 1//(PLATFORM == PLATFORM_WINDOWS)
50529 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
50530 - struct dm_priv *pdmpriv = &pHalData->dmpriv;
50531 -
50532 - u32 tmpReg, tmpReg2, index, offset, path, i, pathbound = PATH_NUM;
50533 - u32 AFE_backup[IQK_ADDA_REG_NUM];
50534 - u32 AFE_REG[IQK_ADDA_REG_NUM] = {
50535 - 0x85c, 0xe6c, 0xe70, 0xe74, 0xe78,
50536 - 0xe7c, 0xe80, 0xe84, 0xe88, 0xe8c,
50537 - 0xed0, 0xed4, 0xed8, 0xedc, 0xee0,
50538 - 0xeec};
50539 -
50540 - u32 BB_backup[DP_BB_REG_NUM];
50541 - u32 BB_REG[DP_BB_REG_NUM] = {
50542 - 0xc04, 0x800, 0xc08, 0x874,
50543 - 0x870, 0x860, 0x864};
50544 - u32 BB_settings[DP_BB_REG_NUM] = {
50545 - 0x00a05430, 0x02040000, 0x000800e4, 0x22208000,
50546 - 0x0, 0x0, 0x0};
50547 -
50548 - u32 RF_backup[DP_PATH_NUM][DP_RF_REG_NUM];
50549 - u32 RF_REG[DP_RF_REG_NUM] = {
50550 - 0x0d};
50551 -
50552 - u32 MAC_backup[IQK_MAC_REG_NUM];
50553 - u32 MAC_REG[IQK_MAC_REG_NUM] = {
50554 - 0x522, 0x550, 0x551, 0x040};
50555 -
50556 - u32 Tx_AGC[DP_DPK_NUM][DP_DPK_VALUE_NUM] = {
50557 - {0x1e1e1e1e, 0x03901e1e},
50558 - {0x18181818, 0x03901818},
50559 - {0x0e0e0e0e, 0x03900e0e}
50560 - };
50561 -
50562 -// u32 RF_PATHA_backup[DP_RF_REG_NUM];
50563 -// u32 RF_REG_PATHA[DP_RF_REG_NUM] = {
50564 -// 0x00, 0x10, 0x11};
50565 -
50566 - u32 Reg800, Reg874, Regc04, Regc08, Reg040;
50567 -
50568 - u32 AFE_on_off[PATH_NUM] = {
50569 - 0x04db25a4, 0x0b1b25a4}; //path A on path B off / path A off path B on
50570 -
50571 - u32 RetryCount = 0;
50572 -
50573 - BOOLEAN isNormal = IS_NORMAL_CHIP(pHalData->VersionID);
50574 -
50575 - //DBG_8192C("==>_PHY_DigitalPredistortion()\n");
50576 -
50577 - //DBG_8192C("_PHY_DigitalPredistortion for %s %s\n", (is2T ? "2T2R" : "1T1R"), (isNormal ? "Normal chip" : "Test chip"));
50578 -
50579 - if(!isNormal)
50580 - return;
50581 -
50582 - //save BB default value
50583 - for(index=0; index<DP_BB_REG_NUM; index++)
50584 - BB_backup[index] = PHY_QueryBBReg(pAdapter, BB_REG[index], bMaskDWord);
50585 -
50586 - //save MAC default value
50587 - _PHY_SaveMACRegisters(pAdapter, BB_REG, MAC_backup);
50588 -
50589 - //save RF default value
50590 - for(path=0; path<DP_PATH_NUM; path++)
50591 - {
50592 - for(index=0; index<DP_RF_REG_NUM; index++)
50593 - RF_backup[path][index] = PHY_QueryRFReg(pAdapter, (RF90_RADIO_PATH_E)path, RF_REG[index], bMaskDWord);
50594 - }
50595 -
50596 - //save AFE default value
50597 - _PHY_SaveADDARegisters(pAdapter, AFE_REG, AFE_backup, IQK_ADDA_REG_NUM);
50598 -
50599 - //Path A/B AFE all on
50600 - for(index = 0; index < IQK_ADDA_REG_NUM ; index++)
50601 - PHY_SetBBReg(pAdapter, AFE_REG[index], bMaskDWord, 0x6fdb25a4);
50602 -
50603 - //BB register setting
50604 - for(index = 0; index < DP_BB_REG_NUM; index++)
50605 - {
50606 - if(index < 4)
50607 - PHY_SetBBReg(pAdapter, BB_REG[index], bMaskDWord, BB_settings[index]);
50608 - else if (index == 4)
50609 - PHY_SetBBReg(pAdapter, BB_REG[index], bMaskDWord, BB_backup[index]|BIT10|BIT26);
50610 - else
50611 - PHY_SetBBReg(pAdapter, BB_REG[index], BIT10, 0x00);
50612 - }
50613 -
50614 - //MAC register setting
50615 - _PHY_MACSettingCalibration(pAdapter, MAC_REG, MAC_backup);
50616 -
50617 - //PAGE-E IQC setting
50618 - PHY_SetBBReg(pAdapter, 0xe30, bMaskDWord, 0x01008c00);
50619 - PHY_SetBBReg(pAdapter, 0xe34, bMaskDWord, 0x01008c00);
50620 - PHY_SetBBReg(pAdapter, 0xe50, bMaskDWord, 0x01008c00);
50621 - PHY_SetBBReg(pAdapter, 0xe54, bMaskDWord, 0x01008c00);
50622 -
50623 - //path_A DPK
50624 - //Path B to standby mode
50625 - PHY_SetRFReg(pAdapter, RF90_PATH_B, RF_AC, bMaskDWord, 0x10000);
50626 -
50627 - // PA gain = 11 & PAD1 => tx_agc 1f ~11
50628 - // PA gain = 11 & PAD2 => tx_agc 10~0e
50629 - // PA gain = 01 => tx_agc 0b~0d
50630 - // PA gain = 00 => tx_agc 0a~00
50631 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x40000000);
50632 - PHY_SetBBReg(pAdapter, 0xbc0, bMaskDWord, 0x0005361f);
50633 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x00000000);
50634 -
50635 - //do inner loopback DPK 3 times
50636 - for(i = 0; i < 3; i++)
50637 - {
50638 - //PA gain = 11 & PAD2 => tx_agc = 0x0f/0x0c/0x07
50639 - for(index = 0; index < 3; index++)
50640 - PHY_SetBBReg(pAdapter, 0xe00+index*4, bMaskDWord, Tx_AGC[i][0]);
50641 - PHY_SetBBReg(pAdapter, 0xe00+index*4, bMaskDWord, Tx_AGC[i][1]);
50642 - for(index = 0; index < 4; index++)
50643 - PHY_SetBBReg(pAdapter, 0xe10+index*4, bMaskDWord, Tx_AGC[i][0]);
50644 -
50645 - // PAGE_B for Path-A inner loopback DPK setting
50646 - PHY_SetBBReg(pAdapter, 0xb00, bMaskDWord, 0x02097098);
50647 - PHY_SetBBReg(pAdapter, 0xb04, bMaskDWord, 0xf76d9f84);
50648 - PHY_SetBBReg(pAdapter, 0xb28, bMaskDWord, 0x0004ab87);
50649 - PHY_SetBBReg(pAdapter, 0xb68, bMaskDWord, 0x00880000);
50650 -
50651 - //----send one shot signal----//
50652 - // Path A
50653 - PHY_SetBBReg(pAdapter, 0xb28, bMaskDWord, 0x80047788);
50654 - rtw_mdelay_os(1);
50655 - PHY_SetBBReg(pAdapter, 0xb28, bMaskDWord, 0x00047788);
50656 - #ifdef CONFIG_LONG_DELAY_ISSUE
50657 - rtw_msleep_os(50);
50658 - #else
50659 - rtw_mdelay_os(50);
50660 - #endif
50661 - }
50662 -
50663 - //PA gain = 11 => tx_agc = 1a
50664 - for(index = 0; index < 3; index++)
50665 - PHY_SetBBReg(pAdapter, 0xe00+index*4, bMaskDWord, 0x34343434);
50666 - PHY_SetBBReg(pAdapter, 0xe08+index*4, bMaskDWord, 0x03903434);
50667 - for(index = 0; index < 4; index++)
50668 - PHY_SetBBReg(pAdapter, 0xe10+index*4, bMaskDWord, 0x34343434);
50669 -
50670 - //====================================
50671 - // PAGE_B for Path-A DPK setting
50672 - //====================================
50673 - // open inner loopback @ b00[19]:10 od 0xb00 0x01097018
50674 - PHY_SetBBReg(pAdapter, 0xb00, bMaskDWord, 0x02017098);
50675 - PHY_SetBBReg(pAdapter, 0xb04, bMaskDWord, 0xf76d9f84);
50676 - PHY_SetBBReg(pAdapter, 0xb28, bMaskDWord, 0x0004ab87);
50677 - PHY_SetBBReg(pAdapter, 0xb68, bMaskDWord, 0x00880000);
50678 -
50679 - //rf_lpbk_setup
50680 - //1.rf 00:5205a, rf 0d:0e52c
50681 - PHY_SetRFReg(pAdapter, RF90_PATH_A, 0x0c, bMaskDWord, 0x8992b);
50682 - PHY_SetRFReg(pAdapter, RF90_PATH_A, 0x0d, bMaskDWord, 0x0e52c);
50683 - PHY_SetRFReg(pAdapter, RF90_PATH_A, 0x00, bMaskDWord, 0x5205a );
50684 -
50685 - //----send one shot signal----//
50686 - // Path A
50687 - PHY_SetBBReg(pAdapter, 0xb28, bMaskDWord, 0x800477c0);
50688 - rtw_mdelay_os(1);
50689 - PHY_SetBBReg(pAdapter, 0xb28, bMaskDWord, 0x000477c0);
50690 - #ifdef CONFIG_LONG_DELAY_ISSUE
50691 - rtw_msleep_os(50);
50692 - #else
50693 - rtw_mdelay_os(50);
50694 - #endif
50695 -
50696 - while(RetryCount < DP_RETRY_LIMIT && !pdmpriv->bDPPathAOK)
50697 - {
50698 - //----read back measurement results----//
50699 - PHY_SetBBReg(pAdapter, 0xb00, bMaskDWord, 0x0c297018);
50700 - tmpReg = PHY_QueryBBReg(pAdapter, 0xbe0, bMaskDWord);
50701 - rtw_mdelay_os(10);
50702 - PHY_SetBBReg(pAdapter, 0xb00, bMaskDWord, 0x0c29701f);
50703 - tmpReg2 = PHY_QueryBBReg(pAdapter, 0xbe8, bMaskDWord);
50704 - rtw_mdelay_os(10);
50705 -
50706 - tmpReg = (tmpReg & bMaskHWord) >> 16;
50707 - tmpReg2 = (tmpReg2 & bMaskHWord) >> 16;
50708 - if(tmpReg < 0xf0 || tmpReg > 0x105 || tmpReg2 > 0xff )
50709 - {
50710 - PHY_SetBBReg(pAdapter, 0xb00, bMaskDWord, 0x02017098);
50711 -
50712 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x80000000);
50713 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x00000000);
50714 - rtw_mdelay_os(1);
50715 - PHY_SetBBReg(pAdapter, 0xb28, bMaskDWord, 0x800477c0);
50716 - rtw_mdelay_os(1);
50717 - PHY_SetBBReg(pAdapter, 0xb28, bMaskDWord, 0x000477c0);
50718 - #ifdef CONFIG_LONG_DELAY_ISSUE
50719 - rtw_msleep_os(50);
50720 - #else
50721 - rtw_mdelay_os(50);
50722 - #endif
50723 - RetryCount++;
50724 - DBG_8192C("path A DPK RetryCount %d 0xbe0[31:16] %x 0xbe8[31:16] %x\n", RetryCount, tmpReg, tmpReg2);
50725 - }
50726 - else
50727 - {
50728 - DBG_8192C("path A DPK Sucess\n");
50729 - pdmpriv->bDPPathAOK = _TRUE;
50730 - break;
50731 - }
50732 - }
50733 - RetryCount = 0;
50734 -
50735 - //DPP path A
50736 - if(pdmpriv->bDPPathAOK)
50737 - {
50738 - // DP settings
50739 - PHY_SetBBReg(pAdapter, 0xb00, bMaskDWord, 0x01017098);
50740 - PHY_SetBBReg(pAdapter, 0xb04, bMaskDWord, 0x776d9f84);
50741 - PHY_SetBBReg(pAdapter, 0xb28, bMaskDWord, 0x0004ab87);
50742 - PHY_SetBBReg(pAdapter, 0xb68, bMaskDWord, 0x00880000);
50743 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x40000000);
50744 -
50745 - for(i=0xb00; i<=0xb3c; i+=4)
50746 - {
50747 - PHY_SetBBReg(pAdapter, i, bMaskDWord, 0x40004000);
50748 - //DBG_8192C("path A ofsset = 0x%x\n", i);
50749 - }
50750 -
50751 - //pwsf
50752 - PHY_SetBBReg(pAdapter, 0xb40, bMaskDWord, 0x40404040);
50753 - PHY_SetBBReg(pAdapter, 0xb44, bMaskDWord, 0x28324040);
50754 - PHY_SetBBReg(pAdapter, 0xb48, bMaskDWord, 0x10141920);
50755 -
50756 - for(i=0xb4c; i<=0xb5c; i+=4)
50757 - {
50758 - PHY_SetBBReg(pAdapter, i, bMaskDWord, 0x0c0c0c0c);
50759 - }
50760 -
50761 - //TX_AGC boundary
50762 - PHY_SetBBReg(pAdapter, 0xbc0, bMaskDWord, 0x0005361f);
50763 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x00000000);
50764 - }
50765 - else
50766 - {
50767 - PHY_SetBBReg(pAdapter, 0xb00, bMaskDWord, 0x00000000);
50768 - PHY_SetBBReg(pAdapter, 0xb04, bMaskDWord, 0x00000000);
50769 - }
50770 -
50771 - //DPK path B
50772 - if(is2T)
50773 - {
50774 - //Path A to standby mode
50775 - PHY_SetRFReg(pAdapter, RF90_PATH_A, RF_AC, bMaskDWord, 0x10000);
50776 -
50777 - // LUTs => tx_agc
50778 - // PA gain = 11 & PAD1, => tx_agc 1f ~11
50779 - // PA gain = 11 & PAD2, => tx_agc 10 ~0e
50780 - // PA gain = 01 => tx_agc 0b ~0d
50781 - // PA gain = 00 => tx_agc 0a ~00
50782 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x40000000);
50783 - PHY_SetBBReg(pAdapter, 0xbc4, bMaskDWord, 0x0005361f);
50784 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x00000000);
50785 -
50786 - //do inner loopback DPK 3 times
50787 - for(i = 0; i < 3; i++)
50788 - {
50789 - //PA gain = 11 & PAD2 => tx_agc = 0x0f/0x0c/0x07
50790 - for(index = 0; index < 4; index++)
50791 - PHY_SetBBReg(pAdapter, 0x830+index*4, bMaskDWord, Tx_AGC[i][0]);
50792 - for(index = 0; index < 2; index++)
50793 - PHY_SetBBReg(pAdapter, 0x848+index*4, bMaskDWord, Tx_AGC[i][0]);
50794 - for(index = 0; index < 2; index++)
50795 - PHY_SetBBReg(pAdapter, 0x868+index*4, bMaskDWord, Tx_AGC[i][0]);
50796 -
50797 - // PAGE_B for Path-A inner loopback DPK setting
50798 - PHY_SetBBReg(pAdapter, 0xb70, bMaskDWord, 0x02097098);
50799 - PHY_SetBBReg(pAdapter, 0xb74, bMaskDWord, 0xf76d9f84);
50800 - PHY_SetBBReg(pAdapter, 0xb98, bMaskDWord, 0x0004ab87);
50801 - PHY_SetBBReg(pAdapter, 0xb6c, bMaskDWord, 0x00880000);
50802 -
50803 - //----send one shot signal----//
50804 - // Path B
50805 - PHY_SetBBReg(pAdapter, 0xb98, bMaskDWord, 0x80047788);
50806 - rtw_mdelay_os(1);
50807 - PHY_SetBBReg(pAdapter, 0xb98, bMaskDWord, 0x00047788);
50808 - #ifdef CONFIG_LONG_DELAY_ISSUE
50809 - rtw_msleep_os(50);
50810 - #else
50811 - rtw_mdelay_os(50);
50812 - #endif
50813 - }
50814 -
50815 - // PA gain = 11 => tx_agc = 1a
50816 - for(index = 0; index < 4; index++)
50817 - PHY_SetBBReg(pAdapter, 0x830+index*4, bMaskDWord, 0x34343434);
50818 - for(index = 0; index < 2; index++)
50819 - PHY_SetBBReg(pAdapter, 0x848+index*4, bMaskDWord, 0x34343434);
50820 - for(index = 0; index < 2; index++)
50821 - PHY_SetBBReg(pAdapter, 0x868+index*4, bMaskDWord, 0x34343434);
50822 -
50823 - // PAGE_B for Path-B DPK setting
50824 - PHY_SetBBReg(pAdapter, 0xb70, bMaskDWord, 0x02017098);
50825 - PHY_SetBBReg(pAdapter, 0xb74, bMaskDWord, 0xf76d9f84);
50826 - PHY_SetBBReg(pAdapter, 0xb98, bMaskDWord, 0x0004ab87);
50827 - PHY_SetBBReg(pAdapter, 0xb6c, bMaskDWord, 0x00880000);
50828 -
50829 - // RF lpbk switches on
50830 - PHY_SetBBReg(pAdapter, 0x840, bMaskDWord, 0x0101000f);
50831 - PHY_SetBBReg(pAdapter, 0x840, bMaskDWord, 0x01120103);
50832 -
50833 - //Path-B RF lpbk
50834 - PHY_SetRFReg(pAdapter, RF90_PATH_B, 0x0c, bMaskDWord, 0x8992b);
50835 - PHY_SetRFReg(pAdapter, RF90_PATH_B, 0x0d, bMaskDWord, 0x0e52c);
50836 - PHY_SetRFReg(pAdapter, RF90_PATH_B, RF_AC, bMaskDWord, 0x5205a);
50837 -
50838 - //----send one shot signal----//
50839 - PHY_SetBBReg(pAdapter, 0xb98, bMaskDWord, 0x800477c0);
50840 - rtw_mdelay_os(1);
50841 - PHY_SetBBReg(pAdapter, 0xb98, bMaskDWord, 0x000477c0);
50842 - #ifdef CONFIG_LONG_DELAY_ISSUE
50843 - rtw_msleep_os(50);
50844 - #else
50845 - rtw_mdelay_os(50);
50846 - #endif
50847 -
50848 - while(RetryCount < DP_RETRY_LIMIT && !pdmpriv->bDPPathBOK)
50849 - {
50850 - //----read back measurement results----//
50851 - PHY_SetBBReg(pAdapter, 0xb70, bMaskDWord, 0x0c297018);
50852 - tmpReg = PHY_QueryBBReg(pAdapter, 0xbf0, bMaskDWord);
50853 - PHY_SetBBReg(pAdapter, 0xb70, bMaskDWord, 0x0c29701f);
50854 - tmpReg2 = PHY_QueryBBReg(pAdapter, 0xbf8, bMaskDWord);
50855 -
50856 - tmpReg = (tmpReg & bMaskHWord) >> 16;
50857 - tmpReg2 = (tmpReg2 & bMaskHWord) >> 16;
50858 -
50859 - if(tmpReg < 0xf0 || tmpReg > 0x105 || tmpReg2 > 0xff)
50860 - {
50861 - PHY_SetBBReg(pAdapter, 0xb70, bMaskDWord, 0x02017098);
50862 -
50863 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x80000000);
50864 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x00000000);
50865 - rtw_mdelay_os(1);
50866 - PHY_SetBBReg(pAdapter, 0xb98, bMaskDWord, 0x800477c0);
50867 - rtw_mdelay_os(1);
50868 - PHY_SetBBReg(pAdapter, 0xb98, bMaskDWord, 0x000477c0);
50869 - #ifdef CONFIG_LONG_DELAY_ISSUE
50870 - rtw_msleep_os(50);
50871 - #else
50872 - rtw_mdelay_os(50);
50873 - #endif
50874 - RetryCount++;
50875 - DBG_8192C("path B DPK RetryCount %d 0xbf0[31:16] %x, 0xbf8[31:16] %x\n", RetryCount , tmpReg, tmpReg2);
50876 - }
50877 - else
50878 - {
50879 - DBG_8192C("path B DPK Success\n");
50880 - pdmpriv->bDPPathBOK = _TRUE;
50881 - break;
50882 - }
50883 - }
50884 -
50885 - //DPP path B
50886 - if(pdmpriv->bDPPathBOK)
50887 - {
50888 - // DP setting
50889 - // LUT by SRAM
50890 - PHY_SetBBReg(pAdapter, 0xb70, bMaskDWord, 0x01017098);
50891 - PHY_SetBBReg(pAdapter, 0xb74, bMaskDWord, 0x776d9f84);
50892 - PHY_SetBBReg(pAdapter, 0xb98, bMaskDWord, 0x0004ab87);
50893 - PHY_SetBBReg(pAdapter, 0xb6c, bMaskDWord, 0x00880000);
50894 -
50895 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x40000000);
50896 - for(i=0xb60; i<=0xb9c; i+=4)
50897 - {
50898 - PHY_SetBBReg(pAdapter, i, bMaskDWord, 0x40004000);
50899 - //DBG_8192C("path B ofsset = 0x%x\n", i);
50900 - }
50901 -
50902 - // PWSF
50903 - PHY_SetBBReg(pAdapter, 0xba0, bMaskDWord, 0x40404040);
50904 - PHY_SetBBReg(pAdapter, 0xba4, bMaskDWord, 0x28324050);
50905 - PHY_SetBBReg(pAdapter, 0xba8, bMaskDWord, 0x0c141920);
50906 -
50907 - for(i=0xbac; i<=0xbbc; i+=4)
50908 - {
50909 - PHY_SetBBReg(pAdapter, i, bMaskDWord, 0x0c0c0c0c);
50910 - }
50911 -
50912 - // tx_agc boundary
50913 - PHY_SetBBReg(pAdapter, 0xbc4, bMaskDWord, 0x0005361f);
50914 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x00000000);
50915 -
50916 - }
50917 - else
50918 - {
50919 - PHY_SetBBReg(pAdapter, 0xb70, bMaskDWord, 0x00000000);
50920 - PHY_SetBBReg(pAdapter, 0xb74, bMaskDWord, 0x00000000);
50921 - }
50922 - }
50923 -
50924 - //reload BB default value
50925 - for(index=0; index<DP_BB_REG_NUM; index++)
50926 - PHY_SetBBReg(pAdapter, BB_REG[index], bMaskDWord, BB_backup[index]);
50927 -
50928 - //reload RF default value
50929 - for(path = 0; path<DP_PATH_NUM; path++)
50930 - {
50931 - for( i = 0 ; i < DP_RF_REG_NUM ; i++){
50932 - PHY_SetRFReg(pAdapter, (RF90_RADIO_PATH_E)path, RF_REG[i], bMaskDWord, RF_backup[path][i]);
50933 - }
50934 - }
50935 - PHY_SetRFReg(pAdapter, RF90_PATH_A, RF_MODE1, bMaskDWord, 0x1000f); //standby mode
50936 - PHY_SetRFReg(pAdapter, RF90_PATH_A, RF_MODE2, bMaskDWord, 0x20101); //RF lpbk switches off
50937 -
50938 - //reload AFE default value
50939 - _PHY_ReloadADDARegisters(pAdapter, AFE_REG, AFE_backup, IQK_ADDA_REG_NUM);
50940 -
50941 - //reload MAC default value
50942 - _PHY_ReloadMACRegisters(pAdapter, MAC_REG, MAC_backup);
50943 -
50944 -// for( i = 0 ; i < DP_RF_REG_NUM ; i++){
50945 -// PHY_SetRFReg(pAdapter, RF90_PATH_A, RF_REG_PATHA[i], bMaskDWord, RF_PATHA_backup[i]);
50946 -// }
50947 -
50948 - pdmpriv->bDPdone = _TRUE;
50949 - //DBG_8192C("<==_PHY_DigitalPredistortion()\n");
50950 -#endif
50951 -}
50952 -
50953 -
50954 static VOID _PHY_SetRFPathSwitch(
50955 IN PADAPTER pAdapter,
50956 IN BOOLEAN bMain,
50957 @@ -5255,22 +4608,6 @@ static BOOLEAN _PHY_QueryRFPathSwitch(
50958 }
50959 }
50960
50961 -
50962 -static VOID
50963 -_PHY_DumpRFReg(IN PADAPTER pAdapter)
50964 -{
50965 - u32 rfRegValue,rfRegOffset;
50966 -
50967 - //RTPRINT(FINIT, INIT_RF, ("PHY_DumpRFReg()====>\n"));
50968 -
50969 - for(rfRegOffset = 0x00;rfRegOffset<=0x30;rfRegOffset++){
50970 - rfRegValue = PHY_QueryRFReg(pAdapter,RF90_PATH_A, rfRegOffset, bMaskDWord);
50971 - //RTPRINT(FINIT, INIT_RF, (" 0x%02x = 0x%08x\n",rfRegOffset,rfRegValue));
50972 - }
50973 - //RTPRINT(FINIT, INIT_RF, ("<===== PHY_DumpRFReg()\n"));
50974 -}
50975 -
50976 -
50977 VOID
50978 rtl8192c_PHY_IQCalibrate(
50979 IN PADAPTER pAdapter,
50980 @@ -5279,27 +4616,29 @@ rtl8192c_PHY_IQCalibrate(
50981 {
50982 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
50983 struct dm_priv *pdmpriv = &pHalData->dmpriv;
50984 - u32 IQK_BB_REG[9] = {
50985 - rOFDM0_XARxIQImbalance, rOFDM0_XBRxIQImbalance, rOFDM0_ECCAThreshold, rOFDM0_AGCRSSITable,
50986 - rOFDM0_XATxIQImbalance, rOFDM0_XBTxIQImbalance, rOFDM0_XCTxAFE, rOFDM0_XDTxAFE, rOFDM0_RxIQExtAnta};
50987 - int result[4][8]; //last is final result
50988 + s32 result[4][8]; //last is final result
50989 u8 i, final_candidate;
50990 BOOLEAN bPathAOK, bPathBOK;
50991 - int RegE94, RegE9C, RegEA4, RegEAC, RegEB4, RegEBC, RegEC4, RegECC, RegTmp = 0;
50992 + s32 RegE94, RegE9C, RegEA4, RegEAC, RegEB4, RegEBC, RegEC4, RegECC, RegTmp = 0;
50993 BOOLEAN is12simular, is13simular, is23simular;
50994 + BOOLEAN bStartContTx = _FALSE, bSingleTone = _FALSE, bCarrierSuppression = _FALSE;
50995 + u32 IQK_BB_REG_92C[IQK_BB_REG_NUM] = {
50996 + rOFDM0_XARxIQImbalance, rOFDM0_XBRxIQImbalance,
50997 + rOFDM0_ECCAThreshold, rOFDM0_AGCRSSITable,
50998 + rOFDM0_XATxIQImbalance, rOFDM0_XBTxIQImbalance,
50999 + rOFDM0_XCTxAFE, rOFDM0_XDTxAFE,
51000 + rOFDM0_RxIQExtAnta};
51001
51002
51003 -#if (MP_DRIVER == 1)
51004 +#if MP_DRIVER == 1
51005 + bStartContTx = pAdapter->mppriv.MptCtx.bStartContTx;
51006 + bSingleTone = pAdapter->mppriv.MptCtx.bSingleTone;
51007 + bCarrierSuppression = pAdapter->mppriv.MptCtx.bCarrierSuppression;
51008 +#endif
51009 +
51010 //ignore IQK when continuous Tx
51011 - if (pAdapter->mppriv.MptCtx.bStartContTx == _TRUE)
51012 - return;
51013 - if (pAdapter->mppriv.MptCtx.bCarrierSuppression == _TRUE)
51014 - return;
51015 - if (pAdapter->mppriv.MptCtx.bSingleCarrier == _TRUE)
51016 + if(bStartContTx || bSingleTone || bCarrierSuppression)
51017 return;
51018 - if (pAdapter->mppriv.MptCtx.bSingleTone == _TRUE)
51019 - return;
51020 -#endif
51021
51022 #if DISABLE_BB_RF
51023 return;
51024 @@ -5307,7 +4646,7 @@ rtl8192c_PHY_IQCalibrate(
51025
51026 if(bReCovery)
51027 {
51028 - _PHY_ReloadADDARegisters(pAdapter, IQK_BB_REG, pdmpriv->IQK_BB_backup_recover, 9);
51029 + _PHY_ReloadADDARegisters(pAdapter, IQK_BB_REG_92C, pdmpriv->IQK_BB_backup_recover, 9);
51030 return;
51031 }
51032 DBG_8192C("IQK:Start!!!\n");
51033 @@ -5330,7 +4669,6 @@ rtl8192c_PHY_IQCalibrate(
51034 {
51035 if(IS_92C_SERIAL( pHalData->VersionID)){
51036 _PHY_IQCalibrate(pAdapter, result, i, _TRUE);
51037 - //_PHY_DumpRFReg(pAdapter);
51038 }
51039 else{
51040 // For 88C 1T1R
51041 @@ -5401,15 +4739,8 @@ rtl8192c_PHY_IQCalibrate(
51042 }
51043 else
51044 {
51045 -
51046 - #if 0
51047 - DBG_871X("%s do _PHY_ReloadADDARegisters\n");
51048 - _PHY_ReloadADDARegisters(pAdapter, IQK_BB_REG, pdmpriv->IQK_BB_backup_recover, 9);
51049 - return;
51050 - #else
51051 - pdmpriv->RegE94 = pdmpriv->RegEB4 = 0x100; //X default value
51052 - pdmpriv->RegE9C = pdmpriv->RegEBC = 0x0; //Y default value
51053 - #endif
51054 + RegE94 = RegEB4 = pdmpriv->RegE94 = pdmpriv->RegEB4 = 0x100; //X default value
51055 + RegE9C = RegEBC = pdmpriv->RegE9C = pdmpriv->RegEBC = 0x0; //Y default value
51056 }
51057
51058 if((RegE94 != 0)/*&&(RegEA4 != 0)*/)
51059 @@ -5420,7 +4751,7 @@ rtl8192c_PHY_IQCalibrate(
51060 _PHY_PathBFillIQKMatrix(pAdapter, bPathBOK, result, final_candidate, (RegEC4 == 0));
51061 }
51062
51063 - _PHY_SaveADDARegisters(pAdapter, IQK_BB_REG, pdmpriv->IQK_BB_backup_recover, 9);
51064 + _PHY_SaveADDARegisters(pAdapter, IQK_BB_REG_92C, pdmpriv->IQK_BB_backup_recover, 9);
51065
51066 }
51067
51068 @@ -5431,24 +4762,26 @@ rtl8192c_PHY_LCCalibrate(
51069 )
51070 {
51071 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
51072 + struct mlme_ext_priv *pmlmeext = &pAdapter->mlmeextpriv;
51073 + BOOLEAN bStartContTx = _FALSE, bSingleTone = _FALSE, bCarrierSuppression = _FALSE;
51074
51075 -
51076 -#if (MP_DRIVER == 1)
51077 - // ignore LCK when continuous Tx
51078 - if (pAdapter->mppriv.MptCtx.bStartContTx == _TRUE)
51079 - return;
51080 - if (pAdapter->mppriv.MptCtx.bCarrierSuppression == _TRUE)
51081 - return;
51082 - if (pAdapter->mppriv.MptCtx.bSingleCarrier == _TRUE)
51083 - return;
51084 - if (pAdapter->mppriv.MptCtx.bSingleTone == _TRUE)
51085 - return;
51086 +#if MP_DRIVER == 1
51087 + bStartContTx = pAdapter->mppriv.MptCtx.bStartContTx;
51088 + bSingleTone = pAdapter->mppriv.MptCtx.bSingleTone;
51089 + bCarrierSuppression = pAdapter->mppriv.MptCtx.bCarrierSuppression;
51090 #endif
51091
51092 #if DISABLE_BB_RF
51093 return;
51094 #endif
51095
51096 + //ignore IQK when continuous Tx
51097 + if(bStartContTx || bSingleTone || bCarrierSuppression)
51098 + return;
51099 +
51100 + if(pmlmeext->sitesurvey_res.state == SCAN_PROCESS)
51101 + return;
51102 +
51103 if(IS_92C_SERIAL( pHalData->VersionID)){
51104 _PHY_LCCalibrate(pAdapter, _TRUE);
51105 }
51106 @@ -5467,6 +4800,9 @@ rtl8192c_PHY_APCalibrate(
51107 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
51108 struct dm_priv *pdmpriv = &pHalData->dmpriv;
51109
51110 + //default disable APK, because Tx NG issue, suggest by Jenyu, 2011.11.25
51111 + return;
51112 +
51113 #if DISABLE_BB_RF
51114 return;
51115 #endif
51116 @@ -5474,9 +4810,6 @@ rtl8192c_PHY_APCalibrate(
51117 if(pdmpriv->bAPKdone)
51118 return;
51119
51120 -// if(IS_NORMAL_CHIP(pHalData->VersionID))
51121 -// return;
51122 -
51123 if(IS_92C_SERIAL( pHalData->VersionID)){
51124 _PHY_APCalibrate(pAdapter, delta, _TRUE);
51125 }
51126 @@ -5486,32 +4819,6 @@ rtl8192c_PHY_APCalibrate(
51127 }
51128 }
51129
51130 -VOID
51131 -rtl8192c_PHY_DigitalPredistortion(
51132 - IN PADAPTER pAdapter
51133 - )
51134 -{
51135 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
51136 - struct dm_priv *pdmpriv = &pHalData->dmpriv;
51137 -
51138 -#if DISABLE_BB_RF
51139 - return;
51140 -#endif
51141 -
51142 - return;
51143 -
51144 - if(pdmpriv->bDPdone)
51145 - return;
51146 -
51147 - if(IS_92C_SERIAL( pHalData->VersionID)){
51148 - _PHY_DigitalPredistortion(pAdapter, _TRUE);
51149 - }
51150 - else{
51151 - // For 88C 1T1R
51152 - _PHY_DigitalPredistortion(pAdapter, _FALSE);
51153 - }
51154 -}
51155 -
51156 VOID rtl8192c_PHY_SetRFPathSwitch(
51157 IN PADAPTER pAdapter,
51158 IN BOOLEAN bMain
51159 @@ -5532,52 +4839,3 @@ VOID rtl8192c_PHY_SetRFPathSwitch(
51160 }
51161 }
51162
51163 -//
51164 -// Move from phycfg.c to gen.c to be code independent later
51165 -//
51166 -//-------------------------Move to other DIR later----------------------------*/
51167 -#ifdef CONFIG_USB_HCI
51168 -
51169 -//
51170 -// Description:
51171 -// To dump all Tx FIFO LLT related link-list table.
51172 -// Added by Roger, 2009.03.10.
51173 -//
51174 -VOID
51175 -DumpBBDbgPort_92CU(
51176 - IN PADAPTER Adapter
51177 - )
51178 -{
51179 -
51180 - //RT_TRACE(COMP_SEND, DBG_WARNING, ("\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n"));
51181 - //RT_TRACE(COMP_SEND, DBG_WARNING, ("BaseBand Debug Ports:\n"));
51182 -
51183 - PHY_SetBBReg(Adapter, 0x0908, 0xffff, 0x0000);
51184 - //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xdf4, PHY_QueryBBReg(Adapter, 0x0df4, bMaskDWord)));
51185 -
51186 - PHY_SetBBReg(Adapter, 0x0908, 0xffff, 0x0803);
51187 - //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xdf4, PHY_QueryBBReg(Adapter, 0x0df4, bMaskDWord)));
51188 -
51189 - PHY_SetBBReg(Adapter, 0x0908, 0xffff, 0x0a06);
51190 - //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xdf4, PHY_QueryBBReg(Adapter, 0x0df4, bMaskDWord)));
51191 -
51192 - PHY_SetBBReg(Adapter, 0x0908, 0xffff, 0x0007);
51193 - //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xdf4, PHY_QueryBBReg(Adapter, 0x0df4, bMaskDWord)));
51194 -
51195 - PHY_SetBBReg(Adapter, 0x0908, 0xffff, 0x0100);
51196 - PHY_SetBBReg(Adapter, 0x0a28, 0x00ff0000, 0x000f0000);
51197 - //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xdf4, PHY_QueryBBReg(Adapter, 0x0df4, bMaskDWord)));
51198 -
51199 - PHY_SetBBReg(Adapter, 0x0908, 0xffff, 0x0100);
51200 - PHY_SetBBReg(Adapter, 0x0a28, 0x00ff0000, 0x00150000);
51201 - //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xdf4, PHY_QueryBBReg(Adapter, 0x0df4, bMaskDWord)));
51202 -
51203 - //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0x800, PHY_QueryBBReg(Adapter, 0x0800, bMaskDWord)));
51204 - //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0x900, PHY_QueryBBReg(Adapter, 0x0900, bMaskDWord)));
51205 - //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xa00, PHY_QueryBBReg(Adapter, 0x0a00, bMaskDWord)));
51206 - //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xa54, PHY_QueryBBReg(Adapter, 0x0a54, bMaskDWord)));
51207 - //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xa58, PHY_QueryBBReg(Adapter, 0x0a58, bMaskDWord)));
51208 -
51209 -}
51210 -#endif
51211 -
51212 --- a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_rf6052.c
51213 +++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_rf6052.c
51214 @@ -16,8 +16,7 @@
51215 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
51216 *
51217 *
51218 -
51219 -******************************************************************************/
51220 + ******************************************************************************/
51221 /******************************************************************************
51222 *
51223 *
51224 @@ -109,35 +108,35 @@ void rtl8192c_RF_ChangeTxPath( IN PADAPT
51225 if (RF_Path_Type == 2 && (DataRate&0xF) <= 0x7)
51226 {
51227 // Set TX SYNC power G2G3 loop filter
51228 - PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)RF90_PATH_A,
51229 + PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)RF_PATH_A,
51230 RF_TXPA_G2, bRFRegOffsetMask, 0x0f000);
51231 - PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)RF90_PATH_A,
51232 + PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)RF_PATH_A,
51233 RF_TXPA_G3, bRFRegOffsetMask, 0xeacf1);
51234
51235 // Change TX AGC gain table
51236 for (i = 0; i < 6; i++)
51237 - PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)RF90_PATH_A,
51238 + PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)RF_PATH_A,
51239 RF_TX_AGC, bRFRegOffsetMask, tx_gain_tbl1[i]);
51240
51241 // Set PA to high value
51242 - PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)RF90_PATH_A,
51243 + PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)RF_PATH_A,
51244 RF_TXPA_G2, bRFRegOffsetMask, 0x01e39);
51245 }
51246 else if (RF_Path_Type == 1 && (DataRate&0xF) >= 0x8)
51247 {
51248 // Set TX SYNC power G2G3 loop filter
51249 - PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)RF90_PATH_A,
51250 + PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)RF_PATH_A,
51251 RF_TXPA_G2, bRFRegOffsetMask, 0x04440);
51252 - PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)RF90_PATH_A,
51253 + PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)RF_PATH_A,
51254 RF_TXPA_G3, bRFRegOffsetMask, 0xea4f1);
51255
51256 // Change TX AGC gain table
51257 for (i = 0; i < 6; i++)
51258 - PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)RF90_PATH_A,
51259 + PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)RF_PATH_A,
51260 RF_TX_AGC, bRFRegOffsetMask, tx_gain_tbl2[i]);
51261
51262 // Set PA low gain
51263 - PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)RF90_PATH_A,
51264 + PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)RF_PATH_A,
51265 RF_TXPA_G2, bRFRegOffsetMask, 0x01e19);
51266 }
51267 #endif
51268 @@ -170,12 +169,12 @@ rtl8192c_PHY_RF6052SetBandwidth(
51269 {
51270 case HT_CHANNEL_WIDTH_20:
51271 pHalData->RfRegChnlVal[0] = ((pHalData->RfRegChnlVal[0] & 0xfffff3ff) | 0x0400);
51272 - PHY_SetRFReg(Adapter, RF90_PATH_A, RF_CHNLBW, bRFRegOffsetMask, pHalData->RfRegChnlVal[0]);
51273 + PHY_SetRFReg(Adapter, RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask, pHalData->RfRegChnlVal[0]);
51274 break;
51275
51276 case HT_CHANNEL_WIDTH_40:
51277 pHalData->RfRegChnlVal[0] = ((pHalData->RfRegChnlVal[0] & 0xfffff3ff));
51278 - PHY_SetRFReg(Adapter, RF90_PATH_A, RF_CHNLBW, bRFRegOffsetMask, pHalData->RfRegChnlVal[0]);
51279 + PHY_SetRFReg(Adapter, RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask, pHalData->RfRegChnlVal[0]);
51280 break;
51281
51282 default:
51283 @@ -232,14 +231,14 @@ rtl8192c_PHY_RF6052SetCckTxPower(
51284
51285 if(pmlmeext->sitesurvey_res.state == SCAN_PROCESS)
51286 {
51287 - TxAGC[RF90_PATH_A] = 0x3f3f3f3f;
51288 - TxAGC[RF90_PATH_B] = 0x3f3f3f3f;
51289 + TxAGC[RF_PATH_A] = 0x3f3f3f3f;
51290 + TxAGC[RF_PATH_B] = 0x3f3f3f3f;
51291
51292 TurboScanOff = _TRUE;//disable turbo scan
51293
51294 if(TurboScanOff)
51295 {
51296 - for(idx1=RF90_PATH_A; idx1<=RF90_PATH_B; idx1++)
51297 + for(idx1=RF_PATH_A; idx1<=RF_PATH_B; idx1++)
51298 {
51299 TxAGC[idx1] =
51300 pPowerlevel[idx1] | (pPowerlevel[idx1]<<8) |
51301 @@ -259,17 +258,17 @@ rtl8192c_PHY_RF6052SetCckTxPower(
51302 // In the future, two mechanism shall be separated from each other and maintained independantly. Thanks for Lanhsin's reminder.
51303 if(pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level1)
51304 {
51305 - TxAGC[RF90_PATH_A] = 0x10101010;
51306 - TxAGC[RF90_PATH_B] = 0x10101010;
51307 + TxAGC[RF_PATH_A] = 0x10101010;
51308 + TxAGC[RF_PATH_B] = 0x10101010;
51309 }
51310 else if(pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level2)
51311 {
51312 - TxAGC[RF90_PATH_A] = 0x00000000;
51313 - TxAGC[RF90_PATH_B] = 0x00000000;
51314 + TxAGC[RF_PATH_A] = 0x00000000;
51315 + TxAGC[RF_PATH_B] = 0x00000000;
51316 }
51317 else
51318 {
51319 - for(idx1=RF90_PATH_A; idx1<=RF90_PATH_B; idx1++)
51320 + for(idx1=RF_PATH_A; idx1<=RF_PATH_B; idx1++)
51321 {
51322 TxAGC[idx1] =
51323 pPowerlevel[idx1] | (pPowerlevel[idx1]<<8) |
51324 @@ -280,16 +279,16 @@ rtl8192c_PHY_RF6052SetCckTxPower(
51325 {
51326 tmpval = (pHalData->MCSTxPowerLevelOriginalOffset[0][6]) +
51327 (pHalData->MCSTxPowerLevelOriginalOffset[0][7]<<8);
51328 - TxAGC[RF90_PATH_A] += tmpval;
51329 + TxAGC[RF_PATH_A] += tmpval;
51330
51331 tmpval = (pHalData->MCSTxPowerLevelOriginalOffset[0][14]) +
51332 (pHalData->MCSTxPowerLevelOriginalOffset[0][15]<<24);
51333 - TxAGC[RF90_PATH_B] += tmpval;
51334 + TxAGC[RF_PATH_B] += tmpval;
51335 }
51336 }
51337 }
51338
51339 - for(idx1=RF90_PATH_A; idx1<=RF90_PATH_B; idx1++)
51340 + for(idx1=RF_PATH_A; idx1<=RF_PATH_B; idx1++)
51341 {
51342 ptr = (u8*)(&(TxAGC[idx1]));
51343 for(idx2=0; idx2<4; idx2++)
51344 @@ -301,18 +300,18 @@ rtl8192c_PHY_RF6052SetCckTxPower(
51345 }
51346
51347 // rf-A cck tx power
51348 - tmpval = TxAGC[RF90_PATH_A]&0xff;
51349 + tmpval = TxAGC[RF_PATH_A]&0xff;
51350 PHY_SetBBReg(Adapter, rTxAGC_A_CCK1_Mcs32, bMaskByte1, tmpval);
51351 //RTPRINT(FPHY, PHY_TXPWR, ("CCK PWR 1M (rf-A) = 0x%x (reg 0x%x)\n", tmpval, rTxAGC_A_CCK1_Mcs32));
51352 - tmpval = TxAGC[RF90_PATH_A]>>8;
51353 + tmpval = TxAGC[RF_PATH_A]>>8;
51354 PHY_SetBBReg(Adapter, rTxAGC_B_CCK11_A_CCK2_11, 0xffffff00, tmpval);
51355 //RTPRINT(FPHY, PHY_TXPWR, ("CCK PWR 2~11M (rf-A) = 0x%x (reg 0x%x)\n", tmpval, rTxAGC_B_CCK11_A_CCK2_11));
51356
51357 // rf-B cck tx power
51358 - tmpval = TxAGC[RF90_PATH_B]>>24;
51359 + tmpval = TxAGC[RF_PATH_B]>>24;
51360 PHY_SetBBReg(Adapter, rTxAGC_B_CCK11_A_CCK2_11, bMaskByte0, tmpval);
51361 //RTPRINT(FPHY, PHY_TXPWR, ("CCK PWR 11M (rf-B) = 0x%x (reg 0x%x)\n", tmpval, rTxAGC_B_CCK11_A_CCK2_11));
51362 - tmpval = TxAGC[RF90_PATH_B]&0x00ffffff;
51363 + tmpval = TxAGC[RF_PATH_B]&0x00ffffff;
51364 PHY_SetBBReg(Adapter, rTxAGC_B_CCK1_55_Mcs32, 0xffffff00, tmpval);
51365 //RTPRINT(FPHY, PHY_TXPWR, ("CCK PWR 1~5.5M (rf-B) = 0x%x (reg 0x%x)\n",
51366 // tmpval, rTxAGC_B_CCK1_55_Mcs32));
51367 @@ -333,7 +332,8 @@ static void getPowerBase(
51368 {
51369 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
51370 u32 powerBase0, powerBase1;
51371 - u8 Legacy_pwrdiff=0, HT20_pwrdiff=0;
51372 + u8 Legacy_pwrdiff=0;
51373 + s8 HT20_pwrdiff=0;
51374 u8 i, powerlevel[2];
51375
51376 for(i=0; i<2; i++)
51377 @@ -639,43 +639,27 @@ phy_RF6052_Config_ParaFile(
51378 {
51379 if(IS_92C_SERIAL( pHalData->VersionID))// 88c's IPA is different from 92c's
51380 {
51381 - if(IS_NORMAL_CHIP(pHalData->VersionID))
51382 - {
51383 - pszRadioAFile = sz92CRadioAFile;
51384 - pszRadioBFile = sz92CRadioBFile;
51385 - }
51386 - else
51387 - {
51388 - rtStatus = _FAIL;
51389 - return rtStatus;
51390 - }
51391 + pszRadioAFile = sz92CRadioAFile;
51392 + pszRadioBFile = sz92CRadioBFile;
51393 }
51394 else
51395 {
51396 - if(IS_NORMAL_CHIP(pHalData->VersionID))
51397 - {
51398 - pszRadioAFile = sz88CRadioAFile;
51399 - pszRadioBFile = sz88CRadioBFile;
51400 + pszRadioAFile = sz88CRadioAFile;
51401 + pszRadioBFile = sz88CRadioBFile;
51402 #ifdef CONFIG_USB_HCI
51403 - if( BOARD_MINICARD == pHalData->BoardType)
51404 - {
51405 - pszRadioAFile = sz88CRadioAFile_mCard;
51406 - pszRadioBFile = sz88CRadioBFile_mCard;
51407 - }
51408 - else if( BOARD_USB_High_PA == pHalData->BoardType)
51409 - {
51410 - pszRadioAFile = sz88CRadioAFile_HP;
51411 - }
51412 -#endif
51413 + if( BOARD_MINICARD == pHalData->BoardType)
51414 + {
51415 + pszRadioAFile = sz88CRadioAFile_mCard;
51416 + pszRadioBFile = sz88CRadioBFile_mCard;
51417 }
51418 - else
51419 + else if( BOARD_USB_High_PA == pHalData->BoardType)
51420 {
51421 - rtStatus = _FAIL;
51422 - return rtStatus;
51423 + pszRadioAFile = sz88CRadioAFile_HP;
51424 }
51425 +#endif
51426 }
51427 }
51428 - else if(IS_HARDWARE_TYPE_8723(Adapter))
51429 + else if(IS_HARDWARE_TYPE_8723A(Adapter))
51430 {
51431 pszRadioAFile = sz8723RadioAFile;
51432 pszRadioBFile = sz8723RadioBFile;
51433 @@ -684,7 +668,7 @@ phy_RF6052_Config_ParaFile(
51434 //3//-----------------------------------------------------------------
51435 //3// <2> Initialize RF
51436 //3//-----------------------------------------------------------------
51437 - //for(eRFPath = RF90_PATH_A; eRFPath <pHalData->NumTotalRFPath; eRFPath++)
51438 + //for(eRFPath = RF_PATH_A; eRFPath <pHalData->NumTotalRFPath; eRFPath++)
51439 for(eRFPath = 0; eRFPath <pHalData->NumTotalRFPath; eRFPath++)
51440 {
51441
51442 @@ -693,12 +677,12 @@ phy_RF6052_Config_ParaFile(
51443 /*----Store original RFENV control type----*/
51444 switch(eRFPath)
51445 {
51446 - case RF90_PATH_A:
51447 - case RF90_PATH_C:
51448 + case RF_PATH_A:
51449 + case RF_PATH_C:
51450 u4RegValue = PHY_QueryBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV);
51451 break;
51452 - case RF90_PATH_B :
51453 - case RF90_PATH_D:
51454 + case RF_PATH_B :
51455 + case RF_PATH_D:
51456 u4RegValue = PHY_QueryBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV<<16);
51457 break;
51458 }
51459 @@ -721,35 +705,35 @@ phy_RF6052_Config_ParaFile(
51460 /*----Initialize RF fom connfiguration file----*/
51461 switch(eRFPath)
51462 {
51463 - case RF90_PATH_A:
51464 + case RF_PATH_A:
51465 #ifdef CONFIG_EMBEDDED_FWIMG
51466 - rtStatus= rtl8192c_PHY_ConfigRFWithHeaderFile(Adapter,(RF90_RADIO_PATH_E)eRFPath);
51467 + rtStatus= rtl8192c_PHY_ConfigRFWithHeaderFile(Adapter,(RF_RADIO_PATH_E)eRFPath);
51468 #else
51469 - rtStatus = rtl8192c_PHY_ConfigRFWithParaFile(Adapter, pszRadioAFile, (RF90_RADIO_PATH_E)eRFPath);
51470 + rtStatus = rtl8192c_PHY_ConfigRFWithParaFile(Adapter, pszRadioAFile, (RF_RADIO_PATH_E)eRFPath);
51471 #endif
51472 break;
51473 - case RF90_PATH_B:
51474 + case RF_PATH_B:
51475 #ifdef CONFIG_EMBEDDED_FWIMG
51476 - rtStatus = rtl8192c_PHY_ConfigRFWithHeaderFile(Adapter,(RF90_RADIO_PATH_E)eRFPath);
51477 + rtStatus = rtl8192c_PHY_ConfigRFWithHeaderFile(Adapter,(RF_RADIO_PATH_E)eRFPath);
51478 #else
51479 - rtStatus = rtl8192c_PHY_ConfigRFWithParaFile(Adapter, pszRadioBFile, (RF90_RADIO_PATH_E)eRFPath);
51480 + rtStatus = rtl8192c_PHY_ConfigRFWithParaFile(Adapter, pszRadioBFile, (RF_RADIO_PATH_E)eRFPath);
51481 #endif
51482 break;
51483 - case RF90_PATH_C:
51484 + case RF_PATH_C:
51485 break;
51486 - case RF90_PATH_D:
51487 + case RF_PATH_D:
51488 break;
51489 }
51490
51491 /*----Restore RFENV control type----*/;
51492 switch(eRFPath)
51493 {
51494 - case RF90_PATH_A:
51495 - case RF90_PATH_C:
51496 + case RF_PATH_A:
51497 + case RF_PATH_C:
51498 PHY_SetBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV, u4RegValue);
51499 break;
51500 - case RF90_PATH_B :
51501 - case RF90_PATH_D:
51502 + case RF_PATH_B :
51503 + case RF_PATH_D:
51504 PHY_SetBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV<<16, u4RegValue);
51505 break;
51506 }
51507 @@ -847,7 +831,7 @@ PHY_RF6052_Config8192C(
51508 u32
51509 PHY_RFShadowRead(
51510 IN PADAPTER Adapter,
51511 - IN RF90_RADIO_PATH_E eRFPath,
51512 + IN RF_RADIO_PATH_E eRFPath,
51513 IN u32 Offset)
51514 {
51515 return RF_Shadow[eRFPath][Offset].Value;
51516 @@ -858,7 +842,7 @@ PHY_RFShadowRead(
51517 VOID
51518 PHY_RFShadowWrite(
51519 IN PADAPTER Adapter,
51520 - IN RF90_RADIO_PATH_E eRFPath,
51521 + IN RF_RADIO_PATH_E eRFPath,
51522 IN u32 Offset,
51523 IN u32 Data)
51524 {
51525 @@ -871,7 +855,7 @@ PHY_RFShadowWrite(
51526 BOOLEAN
51527 PHY_RFShadowCompare(
51528 IN PADAPTER Adapter,
51529 - IN RF90_RADIO_PATH_E eRFPath,
51530 + IN RF_RADIO_PATH_E eRFPath,
51531 IN u32 Offset)
51532 {
51533 u32 reg;
51534 @@ -897,7 +881,7 @@ PHY_RFShadowCompare(
51535 VOID
51536 PHY_RFShadowRecorver(
51537 IN PADAPTER Adapter,
51538 - IN RF90_RADIO_PATH_E eRFPath,
51539 + IN RF_RADIO_PATH_E eRFPath,
51540 IN u32 Offset)
51541 {
51542 // Check if the address is error
51543 @@ -928,7 +912,7 @@ PHY_RFShadowCompareAll(
51544 {
51545 for (Offset = 0; Offset <= RF6052_MAX_REG; Offset++)
51546 {
51547 - PHY_RFShadowCompare(Adapter, (RF90_RADIO_PATH_E)eRFPath, Offset);
51548 + PHY_RFShadowCompare(Adapter, (RF_RADIO_PATH_E)eRFPath, Offset);
51549 }
51550 }
51551
51552 @@ -946,7 +930,7 @@ PHY_RFShadowRecorverAll(
51553 {
51554 for (Offset = 0; Offset <= RF6052_MAX_REG; Offset++)
51555 {
51556 - PHY_RFShadowRecorver(Adapter, (RF90_RADIO_PATH_E)eRFPath, Offset);
51557 + PHY_RFShadowRecorver(Adapter, (RF_RADIO_PATH_E)eRFPath, Offset);
51558 }
51559 }
51560
51561 @@ -956,7 +940,7 @@ PHY_RFShadowRecorverAll(
51562 VOID
51563 PHY_RFShadowCompareFlagSet(
51564 IN PADAPTER Adapter,
51565 - IN RF90_RADIO_PATH_E eRFPath,
51566 + IN RF_RADIO_PATH_E eRFPath,
51567 IN u32 Offset,
51568 IN u8 Type)
51569 {
51570 @@ -969,7 +953,7 @@ PHY_RFShadowCompareFlagSet(
51571 VOID
51572 PHY_RFShadowRecorverFlagSet(
51573 IN PADAPTER Adapter,
51574 - IN RF90_RADIO_PATH_E eRFPath,
51575 + IN RF_RADIO_PATH_E eRFPath,
51576 IN u32 Offset,
51577 IN u8 Type)
51578 {
51579 @@ -992,9 +976,9 @@ PHY_RFShadowCompareFlagSetAll(
51580 {
51581 // 2008/11/20 MH For S3S4 test, we only check reg 26/27 now!!!!
51582 if (Offset != 0x26 && Offset != 0x27)
51583 - PHY_RFShadowCompareFlagSet(Adapter, (RF90_RADIO_PATH_E)eRFPath, Offset, _FALSE);
51584 + PHY_RFShadowCompareFlagSet(Adapter, (RF_RADIO_PATH_E)eRFPath, Offset, _FALSE);
51585 else
51586 - PHY_RFShadowCompareFlagSet(Adapter, (RF90_RADIO_PATH_E)eRFPath, Offset, _TRUE);
51587 + PHY_RFShadowCompareFlagSet(Adapter, (RF_RADIO_PATH_E)eRFPath, Offset, _TRUE);
51588 }
51589 }
51590
51591 @@ -1014,9 +998,9 @@ PHY_RFShadowRecorverFlagSetAll(
51592 {
51593 // 2008/11/20 MH For S3S4 test, we only check reg 26/27 now!!!!
51594 if (Offset != 0x26 && Offset != 0x27)
51595 - PHY_RFShadowRecorverFlagSet(Adapter, (RF90_RADIO_PATH_E)eRFPath, Offset, _FALSE);
51596 + PHY_RFShadowRecorverFlagSet(Adapter, (RF_RADIO_PATH_E)eRFPath, Offset, _FALSE);
51597 else
51598 - PHY_RFShadowRecorverFlagSet(Adapter, (RF90_RADIO_PATH_E)eRFPath, Offset, _TRUE);
51599 + PHY_RFShadowRecorverFlagSet(Adapter, (RF_RADIO_PATH_E)eRFPath, Offset, _TRUE);
51600 }
51601 }
51602
51603 --- a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_rxdesc.c
51604 +++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_rxdesc.c
51605 @@ -16,7 +16,7 @@
51606 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
51607 *
51608 *
51609 -******************************************************************************/
51610 + ******************************************************************************/
51611 #define _RTL8192C_REDESC_C_
51612 #include <drv_conf.h>
51613 #include <osdep_service.h>
51614 @@ -196,7 +196,7 @@ static s32 translate2dbm(u8 signal_stre
51615 return signal_power;
51616 }
51617
51618 -void rtl8192c_query_rx_phy_status(union recv_frame *prframe, struct phy_stat *pphy_stat)
51619 +static void query_rx_phy_status(union recv_frame *prframe, struct phy_stat *pphy_stat)
51620 {
51621 PHY_STS_OFDM_8192CD_T *pOfdm_buf;
51622 PHY_STS_CCK_8192CD_T *pCck_buf;
51623 @@ -383,9 +383,9 @@ void rtl8192c_query_rx_phy_status(union
51624 //continue;
51625
51626 rx_pwr[i] = ((pOfdm_buf->trsw_gain_X[i]&0x3F)*2) - 110;
51627 - pattrib->rx_rssi[i]=query_rx_pwr_percentage(rx_pwr[i]);
51628 + padapter->recvpriv.RxRssi[i] = rx_pwr[i];
51629 /* Translate DBM to percentage. */
51630 - rssi=query_rx_pwr_percentage(rx_pwr[i]);
51631 + pattrib->rx_rssi[i] = rssi = query_rx_pwr_percentage(rx_pwr[i]);
51632 total_rssi += rssi;
51633
51634 RT_TRACE(_module_rtl871x_recv_c_, _drv_err_, ("RF-%d RXPWR=%x RSSI=%d\n", i, rx_pwr[i], rssi));
51635 @@ -733,8 +733,7 @@ static void process_link_qual(_adapter *
51636 }// Process_UiLinkQuality8192S
51637
51638
51639 -//void rtl8192c_process_phy_info(_adapter *padapter, union recv_frame *prframe)
51640 -void rtl8192c_process_phy_info(_adapter *padapter, void *prframe)
51641 +static void process_phy_info(_adapter *padapter, union recv_frame *prframe)
51642 {
51643 union recv_frame *precvframe = (union recv_frame *)prframe;
51644
51645 @@ -764,4 +763,114 @@ void rtl8192c_process_phy_info(_adapter
51646
51647 }
51648
51649 +
51650 +void rtl8192c_translate_rx_signal_stuff(union recv_frame *precvframe, struct phy_stat *pphy_info)
51651 +{
51652 + struct rx_pkt_attrib *pattrib = &precvframe->u.hdr.attrib;
51653 + _adapter *padapter = precvframe->u.hdr.adapter;
51654 + u8 bPacketMatchBSSID =_FALSE;
51655 + u8 bPacketToSelf = _FALSE;
51656 + u8 bPacketBeacon = _FALSE;
51657 +
51658 + if((pattrib->physt) && (pphy_info != NULL))
51659 + {
51660 + bPacketMatchBSSID = ((!IsFrameTypeCtrl(precvframe->u.hdr.rx_data)) && !(pattrib->icv_err) && !(pattrib->crc_err) &&
51661 + _rtw_memcmp(get_hdr_bssid(precvframe->u.hdr.rx_data), get_my_bssid(&padapter->mlmeextpriv.mlmext_info.network), ETH_ALEN));
51662 +
51663 +
51664 + bPacketToSelf = bPacketMatchBSSID && (_rtw_memcmp(get_da(precvframe->u.hdr.rx_data), myid(&padapter->eeprompriv), ETH_ALEN));
51665 +
51666 + bPacketBeacon =bPacketMatchBSSID && (GetFrameSubType(precvframe->u.hdr.rx_data) == WIFI_BEACON);
51667 +
51668 + query_rx_phy_status(precvframe, pphy_info);
51669 +
51670 + precvframe->u.hdr.psta = NULL;
51671 + if(bPacketMatchBSSID && check_fwstate(&padapter->mlmepriv, WIFI_AP_STATE) == _TRUE)
51672 + {
51673 + u8 *sa;
51674 + struct sta_info *psta=NULL;
51675 + struct sta_priv *pstapriv = &padapter->stapriv;
51676 +
51677 + sa = get_sa(precvframe->u.hdr.rx_data);
51678 +
51679 + psta = rtw_get_stainfo(pstapriv, sa);
51680 + if(psta)
51681 + {
51682 + precvframe->u.hdr.psta = psta;
51683 + process_phy_info(padapter, precvframe);
51684 + }
51685 + }
51686 + else if(bPacketToSelf || bPacketBeacon)
51687 + {
51688 + if(check_fwstate(&padapter->mlmepriv, WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE) == _TRUE)
51689 + {
51690 + u8 *sa;
51691 + struct sta_info *psta=NULL;
51692 + struct sta_priv *pstapriv = &padapter->stapriv;
51693 +
51694 + sa = get_sa(precvframe->u.hdr.rx_data);
51695 +
51696 + psta = rtw_get_stainfo(pstapriv, sa);
51697 + if(psta)
51698 + {
51699 + precvframe->u.hdr.psta = psta;
51700 + }
51701 + }
51702 +
51703 + process_phy_info(padapter, precvframe);
51704 + }
51705 + }
51706 +}
51707 +
51708 +void rtl8192c_query_rx_desc_status(union recv_frame *precvframe, struct recv_stat *pdesc)
51709 +{
51710 + struct rx_pkt_attrib *pattrib = &precvframe->u.hdr.attrib;
51711 +
51712 + //Offset 0
51713 + pattrib->physt = (u8)((le32_to_cpu(pdesc->rxdw0) >> 26) & 0x1);
51714 + pattrib->pkt_len = (u16)(le32_to_cpu(pdesc->rxdw0)&0x00003fff);
51715 + pattrib->drvinfo_sz = (u8)((le32_to_cpu(pdesc->rxdw0) >> 16) & 0xf) * 8;//uint 2^3 = 8 bytes
51716 +
51717 + pattrib->shift_sz = (u8)((le32_to_cpu(pdesc->rxdw0) >> 24) & 0x3);
51718 +
51719 + pattrib->crc_err = (u8)((le32_to_cpu(pdesc->rxdw0) >> 14) & 0x1);
51720 + pattrib->icv_err = (u8)((le32_to_cpu(pdesc->rxdw0) >> 15) & 0x1);
51721 + pattrib->qos = (u8)(( le32_to_cpu( pdesc->rxdw0 ) >> 23) & 0x1);// Qos data, wireless lan header length is 26
51722 + pattrib->bdecrypted = (le32_to_cpu(pdesc->rxdw0) & BIT(27))? 0:1;
51723 +
51724 + //Offset 4
51725 + pattrib->mfrag = (u8)((le32_to_cpu(pdesc->rxdw1) >> 27) & 0x1);//more fragment bit
51726 +
51727 + //Offset 8
51728 + pattrib->frag_num = (u8)((le32_to_cpu(pdesc->rxdw2) >> 12) & 0xf);//fragmentation number
51729 +
51730 + //Offset 12
51731 +#ifdef CONFIG_TCP_CSUM_OFFLOAD_RX
51732 + if ( le32_to_cpu(pdesc->rxdw3) & BIT(13)){
51733 + pattrib->tcpchk_valid = 1; // valid
51734 + if ( le32_to_cpu(pdesc->rxdw3) & BIT(11) ) {
51735 + pattrib->tcp_chkrpt = 1; // correct
51736 + //DBG_8192C("tcp csum ok\n");
51737 + }
51738 + else
51739 + pattrib->tcp_chkrpt = 0; // incorrect
51740 +
51741 + if ( le32_to_cpu(pdesc->rxdw3) & BIT(12) )
51742 + pattrib->ip_chkrpt = 1; // correct
51743 + else
51744 + pattrib->ip_chkrpt = 0; // incorrect
51745 + }
51746 + else {
51747 + pattrib->tcpchk_valid = 0; // invalid
51748 + }
51749 +#endif
51750 +
51751 + pattrib->mcs_rate=(u8)((le32_to_cpu(pdesc->rxdw3))&0x3f);
51752 + pattrib->rxht=(u8)((le32_to_cpu(pdesc->rxdw3) >>6)&0x1);
51753 + pattrib->sgi=(u8)((le32_to_cpu(pdesc->rxdw3) >>8)&0x1);
51754 + //Offset 16
51755 + //Offset 20
51756 +
51757 +}
51758 +
51759
51760 --- a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_sreset.c
51761 +++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_sreset.c
51762 @@ -16,189 +16,10 @@
51763 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
51764 *
51765 *
51766 -
51767 -******************************************************************************/
51768 + ******************************************************************************/
51769 #include <rtl8192c_sreset.h>
51770 #include <rtl8192c_hal.h>
51771 #ifdef DBG_CONFIG_ERROR_DETECT
51772 -extern void rtw_cancel_all_timer(_adapter *padapter);
51773 -
51774 -void rtl8192c_sreset_init_value(_adapter *padapter)
51775 -{
51776 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
51777 - struct sreset_priv *psrtpriv = &pHalData->srestpriv;
51778 -
51779 - _rtw_mutex_init(&psrtpriv->silentreset_mutex );
51780 - psrtpriv->silent_reset_inprogress = _FALSE;
51781 - psrtpriv->Wifi_Error_Status = WIFI_STATUS_SUCCESS;
51782 - psrtpriv->last_tx_time =0;
51783 - psrtpriv->last_tx_complete_time =0;
51784 -}
51785 -void rtl8192c_sreset_reset_value(_adapter *padapter)
51786 -{
51787 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
51788 - struct sreset_priv *psrtpriv = &pHalData->srestpriv;
51789 - psrtpriv->silent_reset_inprogress = _FALSE;
51790 - psrtpriv->Wifi_Error_Status = WIFI_STATUS_SUCCESS;
51791 - psrtpriv->last_tx_time =0;
51792 - psrtpriv->last_tx_complete_time =0;
51793 -}
51794 -
51795 -static void _restore_security_setting(_adapter *padapter)
51796 -{
51797 - u8 EntryId = 0;
51798 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
51799 - struct sta_priv * pstapriv = &padapter->stapriv;
51800 - struct sta_info *psta;
51801 - struct security_priv* psecuritypriv=&(padapter->securitypriv);
51802 - struct mlme_ext_info *pmlmeinfo = &padapter->mlmeextpriv.mlmext_info;
51803 -
51804 - (pmlmeinfo->auth_algo == dot11AuthAlgrthm_8021X)
51805 - ? rtw_write8(padapter, REG_SECCFG, 0xcc)
51806 - : rtw_write8(padapter, REG_SECCFG, 0xcf);
51807 -
51808 - if ( ( padapter->securitypriv.dot11PrivacyAlgrthm == _WEP40_ ) ||
51809 - ( padapter->securitypriv.dot11PrivacyAlgrthm == _WEP104_ ))
51810 - {
51811 -
51812 - for(EntryId=0; EntryId<4; EntryId++)
51813 - {
51814 - if(EntryId == psecuritypriv->dot11PrivacyKeyIndex)
51815 - rtw_set_key(padapter,&padapter->securitypriv, EntryId, 1);
51816 - else
51817 - rtw_set_key(padapter,&padapter->securitypriv, EntryId, 0);
51818 - }
51819 -
51820 - }
51821 - else if((padapter->securitypriv.dot11PrivacyAlgrthm == _TKIP_) ||
51822 - (padapter->securitypriv.dot11PrivacyAlgrthm == _AES_))
51823 - {
51824 - psta = rtw_get_stainfo(pstapriv, get_bssid(pmlmepriv));
51825 - if (psta == NULL) {
51826 - //DEBUG_ERR( ("Set wpa_set_encryption: Obtain Sta_info fail \n"));
51827 - }
51828 - else
51829 - {
51830 - //pairwise key
51831 - rtw_setstakey_cmd(padapter, (unsigned char *)psta, _TRUE);
51832 - //group key
51833 - rtw_set_key(padapter,&padapter->securitypriv,padapter->securitypriv.dot118021XGrpKeyid, 0);
51834 - }
51835 - }
51836 -
51837 -}
51838 -
51839 -static void _restore_network_status(_adapter *padapter)
51840 -{
51841 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
51842 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
51843 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
51844 - WLAN_BSSID_EX *pnetwork = (WLAN_BSSID_EX*)(&(pmlmeinfo->network));
51845 - unsigned short caps;
51846 - u8 join_type;
51847 -#if 1
51848 -
51849 - //=======================================================
51850 - // reset related register of Beacon control
51851 -
51852 - //set MSR to nolink
51853 - Set_NETYPE0_MSR(padapter, _HW_STATE_NOLINK_);
51854 - // reject all data frame
51855 - rtw_write16(padapter, REG_RXFLTMAP2,0x00);
51856 - //reset TSF
51857 - rtw_write8(padapter, REG_DUAL_TSF_RST, (BIT(0)|BIT(1)));
51858 -
51859 - //disable update TSF
51860 - if(IS_NORMAL_CHIP(pHalData->VersionID))
51861 - rtw_write8(padapter, REG_BCN_CTRL, rtw_read8(padapter, REG_BCN_CTRL)|BIT(4));
51862 - else
51863 - rtw_write8(padapter, REG_BCN_CTRL, rtw_read8(padapter, REG_BCN_CTRL)|BIT(4)|BIT(5));
51864 -
51865 - //=======================================================
51866 - rtw_joinbss_reset(padapter);
51867 - set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
51868 - //pmlmeinfo->assoc_AP_vendor = maxAP;
51869 -
51870 - if (padapter->registrypriv.wifi_spec) {
51871 - // for WiFi test, follow WMM test plan spec
51872 - rtw_write32(padapter, REG_EDCA_VO_PARAM, 0x002F431C);
51873 - rtw_write32(padapter, REG_EDCA_VI_PARAM, 0x005E541C);
51874 - rtw_write32(padapter, REG_EDCA_BE_PARAM, 0x0000A525);
51875 - rtw_write32(padapter, REG_EDCA_BK_PARAM, 0x0000A549);
51876 -
51877 - // for WiFi test, mixed mode with intel STA under bg mode throughput issue
51878 - if (padapter->mlmepriv.htpriv.ht_option == 0)
51879 - rtw_write32(padapter, REG_EDCA_BE_PARAM, 0x00004320);
51880 -
51881 - } else {
51882 - rtw_write32(padapter, REG_EDCA_VO_PARAM, 0x002F3217);
51883 - rtw_write32(padapter, REG_EDCA_VI_PARAM, 0x005E4317);
51884 - rtw_write32(padapter, REG_EDCA_BE_PARAM, 0x00105320);
51885 - rtw_write32(padapter, REG_EDCA_BK_PARAM, 0x0000A444);
51886 - }
51887 -
51888 - //disable dynamic functions, such as high power, DIG
51889 - //Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);
51890 -#endif
51891 -
51892 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_BSSID, pmlmeinfo->network.MacAddress);
51893 - join_type = 0;
51894 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_JOIN, (u8 *)(&join_type));
51895 -
51896 - Set_NETYPE0_MSR(padapter, (pmlmeinfo->state & 0x3));
51897 -
51898 - mlmeext_joinbss_event_callback(padapter, 1);
51899 - //restore Sequence No.
51900 - rtw_write8(padapter,0x4dc,padapter->xmitpriv.nqos_ssn);
51901 -}
51902 -void rtl8192c_silentreset_for_specific_platform(_adapter *padapter)
51903 -{
51904 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
51905 - struct sreset_priv *psrtpriv = &pHalData->srestpriv;
51906 -
51907 - struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
51908 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
51909 - struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
51910 - _irqL irqL;
51911 -
51912 -#ifdef DBG_CONFIG_ERROR_RESET
51913 -
51914 - DBG_871X("%s\n", __FUNCTION__);
51915 -
51916 - psrtpriv->Wifi_Error_Status = WIFI_STATUS_SUCCESS;
51917 -
51918 - if (!netif_queue_stopped(padapter->pnetdev))
51919 - netif_stop_queue(padapter->pnetdev);
51920 -
51921 - rtw_cancel_all_timer(padapter);
51922 - tasklet_kill(&pxmitpriv->xmit_tasklet);
51923 -
51924 - _enter_critical_mutex(&psrtpriv->silentreset_mutex, &irqL);
51925 - psrtpriv->silent_reset_inprogress = _TRUE;
51926 - pwrpriv->change_rfpwrstate = rf_off;
51927 -#ifdef CONFIG_IPS
51928 - ips_enter(padapter);
51929 - ips_leave(padapter);
51930 -#endif
51931 - if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)
51932 - {
51933 - _restore_network_status(padapter);
51934 - _restore_security_setting(padapter);
51935 - }
51936 -
51937 - _clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY | _FW_UNDER_LINKING);
51938 -
51939 - psrtpriv->silent_reset_inprogress = _FALSE;
51940 - _exit_critical_mutex(&psrtpriv->silentreset_mutex, &irqL);
51941 -
51942 - tasklet_hi_schedule(&pxmitpriv->xmit_tasklet);
51943 - _set_timer(&padapter->mlmepriv.dynamic_chk_timer, 2000);
51944 -
51945 - if (netif_queue_stopped(padapter->pnetdev))
51946 - netif_wake_queue(padapter->pnetdev);
51947 -#endif
51948 -}
51949 -
51950 void rtl8192c_sreset_xmit_status_check(_adapter *padapter)
51951 {
51952 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
51953 @@ -210,34 +31,44 @@ void rtl8192c_sreset_xmit_status_check(_
51954 u32 txdma_status;
51955 if( (txdma_status=rtw_read32(padapter, REG_TXDMA_STATUS)) !=0x00){
51956 DBG_871X("%s REG_TXDMA_STATUS:0x%08x\n", __FUNCTION__, txdma_status);
51957 - rtl8192c_silentreset_for_specific_platform(padapter);
51958 + rtw_hal_sreset_reset(padapter);
51959 }
51960
51961 //total xmit irp = 4
51962 //DBG_8192C("==>%s free_xmitbuf_cnt(%d),txirp_cnt(%d)\n",__FUNCTION__,pxmitpriv->free_xmitbuf_cnt,pxmitpriv->txirp_cnt);
51963 //if(pxmitpriv->txirp_cnt == NR_XMITBUFF+1)
51964 current_time = rtw_get_current_time();
51965 - if(0==pxmitpriv->free_xmitbuf_cnt)
51966 - {
51967 - diff_time = jiffies_to_msecs(current_time - psrtpriv->last_tx_time);
51968 -
51969 - if(diff_time > 2000){
51970 - if(psrtpriv->last_tx_complete_time==0){
51971 +
51972 + if(0 == pxmitpriv->free_xmitbuf_cnt || 0 == pxmitpriv->free_xmit_extbuf_cnt) {
51973 +
51974 + diff_time = rtw_get_passing_time_ms(psrtpriv->last_tx_time);
51975 +
51976 + if (diff_time > 2000) {
51977 + if (psrtpriv->last_tx_complete_time == 0) {
51978 psrtpriv->last_tx_complete_time = current_time;
51979 }
51980 else{
51981 - diff_time = jiffies_to_msecs(current_time - psrtpriv->last_tx_complete_time);
51982 - if(diff_time > 4000){
51983 + diff_time = rtw_get_passing_time_ms(psrtpriv->last_tx_complete_time);
51984 + if (diff_time > 4000) {
51985 //padapter->Wifi_Error_Status = WIFI_TX_HANG;
51986 - DBG_8192C("%s tx hang\n", __FUNCTION__);
51987 - rtl8192c_silentreset_for_specific_platform(padapter);
51988 + DBG_871X("%s tx hang\n", __FUNCTION__);
51989 + rtw_hal_sreset_reset(padapter);
51990 }
51991 }
51992 - }
51993 - }
51994 + }
51995 + }
51996 +
51997 + if (psrtpriv->dbg_trigger_point == SRESET_TGP_XMIT_STATUS) {
51998 + psrtpriv->dbg_trigger_point = SRESET_TGP_NULL;
51999 + rtw_hal_sreset_reset(padapter);
52000 + return;
52001 + }
52002 }
52003 void rtl8192c_sreset_linked_status_check(_adapter *padapter)
52004 {
52005 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
52006 + struct sreset_priv *psrtpriv = &pHalData->srestpriv;
52007 +
52008 u32 regc50,regc58,reg824,reg800;
52009 regc50 = rtw_read32(padapter,0xc50);
52010 regc58 = rtw_read32(padapter,0xc58);
52011 @@ -250,44 +81,14 @@ void rtl8192c_sreset_linked_status_check
52012 {
52013 DBG_8192C("%s regc50:0x%08x, regc58:0x%08x, reg824:0x%08x, reg800:0x%08x,\n", __FUNCTION__,
52014 regc50, regc58, reg824, reg800);
52015 - rtl8192c_silentreset_for_specific_platform(padapter);
52016 - }
52017 -}
52018 -
52019 -#ifdef DBG_CONFIG_ERROR_DETECT
52020 -u8 rtl8192c_sreset_get_wifi_status(_adapter *padapter)
52021 -{
52022 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
52023 - struct sreset_priv *psrtpriv = &pHalData->srestpriv;
52024 -
52025 - u8 status = WIFI_STATUS_SUCCESS;
52026 - u32 val32 = 0;
52027 - _irqL irqL;
52028 - if(psrtpriv->silent_reset_inprogress == _TRUE)
52029 - {
52030 - return status;
52031 + rtw_hal_sreset_reset(padapter);
52032 }
52033 - val32 =rtw_read32(padapter,REG_TXDMA_STATUS);
52034 - if(val32==0xeaeaeaea){
52035 - psrtpriv->Wifi_Error_Status = WIFI_IF_NOT_EXIST;
52036 - }
52037 - else if(val32!=0){
52038 - DBG_8192C("txdmastatu(%x)\n",val32);
52039 - psrtpriv->Wifi_Error_Status = WIFI_MAC_TXDMA_ERROR;
52040 - }
52041
52042 - if(WIFI_STATUS_SUCCESS !=psrtpriv->Wifi_Error_Status)
52043 - {
52044 - DBG_8192C("==>%s error_status(0x%x) \n",__FUNCTION__,psrtpriv->Wifi_Error_Status);
52045 - status = (psrtpriv->Wifi_Error_Status &( ~(USB_READ_PORT_FAIL|USB_WRITE_PORT_FAIL)));
52046 + if (psrtpriv->dbg_trigger_point == SRESET_TGP_LINK_STATUS) {
52047 + psrtpriv->dbg_trigger_point = SRESET_TGP_NULL;
52048 + rtw_hal_sreset_reset(padapter);
52049 + return;
52050 }
52051 - DBG_8192C("==> %s wifi_status(0x%x)\n",__FUNCTION__,status);
52052 -
52053 - //status restore
52054 - psrtpriv->Wifi_Error_Status = WIFI_STATUS_SUCCESS;
52055 -
52056 - return status;
52057 }
52058 #endif
52059
52060 -#endif
52061 --- /dev/null
52062 +++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_xmit.c
52063 @@ -0,0 +1,63 @@
52064 +/******************************************************************************
52065 + *
52066 + * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
52067 + *
52068 + * This program is free software; you can redistribute it and/or modify it
52069 + * under the terms of version 2 of the GNU General Public License as
52070 + * published by the Free Software Foundation.
52071 + *
52072 + * This program is distributed in the hope that it will be useful, but WITHOUT
52073 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
52074 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
52075 + * more details.
52076 + *
52077 + * You should have received a copy of the GNU General Public License along with
52078 + * this program; if not, write to the Free Software Foundation, Inc.,
52079 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
52080 + *
52081 + *
52082 + ******************************************************************************/
52083 +#define _RTL8192C_XMIT_C_
52084 +
52085 +#include <drv_conf.h>
52086 +#include <osdep_service.h>
52087 +#include <drv_types.h>
52088 +#include <rtl8192c_hal.h>
52089 +
52090 +#ifdef CONFIG_XMIT_ACK
52091 +void dump_txrpt_ccx_8192c(void *buf)
52092 +{
52093 + struct txrpt_ccx_8192c *txrpt_ccx = buf;
52094 +
52095 + DBG_871X("%s:\n"
52096 + "retry_cnt:%u, rsvd_0:%u, rts_retry_cnt:%u, rsvd_1:%u\n"
52097 + "ccx_qtime:%u, missed_pkt_num:%u, rsvd_4:%u\n"
52098 + "mac_id:%u, des1_fragssn:%u\n"
52099 + "rpt_pkt_num:%u, pkt_drop:%u, lifetime_over:%u, retry_over:%u\n"
52100 + "edca_tx_queue:%u, rsvd_7:%u, bmc:%u, pkt_ok:%u, init_ccx:%u\n"
52101 + , __func__
52102 + , txrpt_ccx->retry_cnt, txrpt_ccx->rsvd_0, txrpt_ccx->rts_retry_cnt, txrpt_ccx->rsvd_1
52103 + , txrpt_ccx_qtime_8192c(txrpt_ccx), txrpt_ccx->missed_pkt_num, txrpt_ccx->rsvd_4
52104 + , txrpt_ccx->mac_id, txrpt_ccx->des1_fragssn
52105 + , txrpt_ccx->rpt_pkt_num, txrpt_ccx->pkt_drop, txrpt_ccx->lifetime_over, txrpt_ccx->retry_over
52106 + , txrpt_ccx->edca_tx_queue, txrpt_ccx->rsvd_7, txrpt_ccx->bmc, txrpt_ccx->pkt_ok, txrpt_ccx->int_ccx
52107 + );
52108 +}
52109 +
52110 +void handle_txrpt_ccx_8192c(_adapter *adapter, void *buf)
52111 +{
52112 + struct txrpt_ccx_8192c *txrpt_ccx = buf;
52113 +
52114 + #ifdef DBG_CCX
52115 + dump_txrpt_ccx_8192c(buf);
52116 + #endif
52117 +
52118 + if (txrpt_ccx->int_ccx) {
52119 + if (txrpt_ccx->pkt_ok)
52120 + rtw_ack_tx_done(&adapter->xmitpriv, RTW_SCTX_DONE_SUCCESS);
52121 + else
52122 + rtw_ack_tx_done(&adapter->xmitpriv, RTW_SCTX_DONE_CCX_PKT_FAIL);
52123 + }
52124 +}
52125 +#endif //CONFIG_XMIT_ACK
52126 +
52127 --- a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/Hal8192CUHWImg.c
52128 +++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/Hal8192CUHWImg.c
52129 @@ -24,9 +24,994 @@
52130 #include "Hal8192CUHWImg.h"
52131
52132 #ifdef CONFIG_BT_COEXISTENCE
52133 -// =================== v79 TSMC COMMON 2011-10-06 =======================
52134 +// =================== v84 TSMC COMMON 2012-04-13 =======================
52135 u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayLength] = {
52136 -0xc1,0x88,0x02,0x00,0x4f,0x00,0x00,0x00,0x0a,0x06,0x18,0x02,0x58,0x3f,0x00,0x00,
52137 +0xc1,0x88,0x02,0x00,0x54,0x00,0x01,0x00,0x04,0x13,0x11,0x07,0x3a,0x3d,0x00,0x00,
52138 +0x58,0x97,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
52139 +0x02,0x43,0xba,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
52140 +0x00,0x00,0x00,0x02,0x50,0xa1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
52141 +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
52142 +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
52143 +0x00,0x00,0x00,0x02,0x57,0x91,0x00,0x00,0x00,0x00,0x00,0xa1,0xe8,0x00,0x00,0x00,
52144 +0x05,0x04,0x03,0x02,0x00,0x03,0x06,0x05,0x04,0x03,0x00,0x04,0x06,0x05,0x04,0x02,
52145 +0x00,0x04,0x08,0x07,0x06,0x04,0x00,0x06,0x0a,0x09,0x08,0x06,0x00,0x08,0x0a,0x09,
52146 +0x08,0x04,0x00,0x08,0x0a,0x09,0x08,0x02,0x00,0x08,0x0a,0x09,0x08,0x00,0x00,0x08,
52147 +0x12,0x11,0x10,0x08,0x00,0x10,0x1a,0x19,0x18,0x10,0x00,0x18,0x22,0x21,0x20,0x18,
52148 +0x00,0x20,0x22,0x21,0x20,0x10,0x00,0x20,0x22,0x21,0x20,0x08,0x00,0x20,0x22,0x21,
52149 +0x1c,0x08,0x00,0x20,0x22,0x21,0x14,0x08,0x00,0x20,0x22,0x20,0x18,0x08,0x00,0x20,
52150 +0x31,0x30,0x20,0x10,0x00,0x30,0x31,0x30,0x18,0x00,0x00,0x30,0x31,0x2f,0x10,0x10,
52151 +0x00,0x30,0x31,0x2c,0x10,0x10,0x00,0x30,0x31,0x28,0x10,0x00,0x00,0x30,0x31,0x20,
52152 +0x10,0x00,0x00,0x30,0x31,0x10,0x10,0x00,0x00,0x30,0x04,0x04,0x04,0x05,0x04,0x04,
52153 +0x04,0x05,0x05,0x05,0x06,0x06,0x04,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x04,0x04,
52154 +0x05,0x05,0x05,0x05,0x06,0x06,0x04,0x04,0x05,0x05,0x05,0x05,0x06,0x07,0x0a,0x0b,
52155 +0x0d,0x10,0x04,0x05,0x05,0x06,0x06,0x09,0x0c,0x11,0x08,0x08,0x09,0x09,0x0a,0x0c,
52156 +0x10,0x11,0x04,0x04,0x04,0x05,0x04,0x04,0x05,0x07,0x07,0x07,0x08,0x0a,0x04,0x04,
52157 +0x04,0x04,0x06,0x0a,0x0b,0x0d,0x05,0x05,0x07,0x07,0x08,0x0b,0x0d,0x0f,0x04,0x04,
52158 +0x04,0x05,0x07,0x07,0x09,0x09,0x0c,0x0e,0x10,0x12,0x04,0x04,0x05,0x05,0x06,0x0a,
52159 +0x11,0x13,0x09,0x09,0x09,0x09,0x0c,0x0e,0x11,0x13,0x00,0x00,0x00,0x00,0x00,0x00,
52160 +0x00,0x00,0x00,0x24,0x26,0x2a,0x18,0x1a,0x1d,0x1f,0x21,0x27,0x29,0x2a,0x00,0x00,
52161 +0x00,0x1f,0x23,0x28,0x2a,0x2c,0x00,0x04,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x18,
52162 +0x00,0x24,0x00,0x30,0x00,0x48,0x00,0x60,0x00,0x90,0x00,0xc0,0x00,0xd8,0x00,0x50,
52163 +0x00,0x78,0x00,0xa0,0x00,0xc8,0x01,0x40,0x01,0x90,0x01,0xe0,0x02,0x30,0x01,0x2c,
52164 +0x01,0x40,0x01,0xe0,0x02,0xd0,0x03,0xe8,0x04,0xb0,0x06,0x40,0x07,0xd0,0x00,0x02,
52165 +0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x0c,0x00,0x12,0x00,0x18,0x00,0x24,0x00,0x30,
52166 +0x00,0x48,0x00,0x60,0x00,0x6c,0x00,0x28,0x00,0x3c,0x00,0x50,0x00,0x64,0x00,0xa0,
52167 +0x00,0xc8,0x00,0xf0,0x01,0x18,0x00,0x64,0x00,0xa0,0x00,0xf0,0x01,0x68,0x01,0xf4,
52168 +0x02,0x58,0x03,0x20,0x03,0xe8,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x04,0x04,
52169 +0x05,0x07,0x04,0x04,0x07,0x0a,0x0a,0x0c,0x0c,0x12,0x05,0x07,0x07,0x08,0x0b,0x12,
52170 +0x24,0x3c,0x01,0x01,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x01,0x02,
52171 +0x03,0x04,0x05,0x06,0x07,0x08,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x20,0x1e,
52172 +0x1c,0x18,0x10,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
52173 +0xbb,0x01,0x0c,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe0,0x22,0x50,
52174 +0x06,0xe9,0x25,0x82,0xf8,0xe6,0x22,0xbb,0xfe,0x06,0xe9,0x25,0x82,0xf8,0xe2,0x22,
52175 +0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe4,0x93,0x22,0xbb,0x01,0x06,
52176 +0x89,0x82,0x8a,0x83,0xf0,0x22,0x50,0x02,0xf7,0x22,0xbb,0xfe,0x01,0xf3,0x22,0xf8,
52177 +0xbb,0x01,0x0d,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe8,0xf0,0x22,
52178 +0x50,0x06,0xe9,0x25,0x82,0xc8,0xf6,0x22,0xbb,0xfe,0x05,0xe9,0x25,0x82,0xc8,0xf2,
52179 +0x22,0xc5,0xf0,0xf8,0xa3,0xe0,0x28,0xf0,0xc5,0xf0,0xf8,0xe5,0x82,0x15,0x82,0x70,
52180 +0x02,0x15,0x83,0xe0,0x38,0xf0,0x22,0xbb,0x01,0x0a,0x89,0x82,0x8a,0x83,0xe0,0xf5,
52181 +0xf0,0xa3,0xe0,0x22,0x50,0x06,0x87,0xf0,0x09,0xe7,0x19,0x22,0xbb,0xfe,0x07,0xe3,
52182 +0xf5,0xf0,0x09,0xe3,0x19,0x22,0x89,0x82,0x8a,0x83,0xe4,0x93,0xf5,0xf0,0x74,0x01,
52183 +0x93,0x22,0xbb,0x01,0x10,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe0,
52184 +0xf5,0xf0,0xa3,0xe0,0x22,0x50,0x09,0xe9,0x25,0x82,0xf8,0x86,0xf0,0x08,0xe6,0x22,
52185 +0xbb,0xfe,0x0a,0xe9,0x25,0x82,0xf8,0xe2,0xf5,0xf0,0x08,0xe2,0x22,0xe5,0x83,0x2a,
52186 +0xf5,0x83,0xe9,0x93,0xf5,0xf0,0xa3,0xe9,0x93,0x22,0xbb,0x01,0x0a,0x89,0x82,0x8a,
52187 +0x83,0xf0,0xe5,0xf0,0xa3,0xf0,0x22,0x50,0x06,0xf7,0x09,0xa7,0xf0,0x19,0x22,0xbb,
52188 +0xfe,0x06,0xf3,0xe5,0xf0,0x09,0xf3,0x19,0x22,0xf8,0xbb,0x01,0x11,0xe5,0x82,0x29,
52189 +0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe8,0xf0,0xe5,0xf0,0xa3,0xf0,0x22,0x50,0x09,
52190 +0xe9,0x25,0x82,0xc8,0xf6,0x08,0xa6,0xf0,0x22,0xbb,0xfe,0x09,0xe9,0x25,0x82,0xc8,
52191 +0xf2,0xe5,0xf0,0x08,0xf2,0x22,0xef,0x4b,0xff,0xee,0x4a,0xfe,0xed,0x49,0xfd,0xec,
52192 +0x48,0xfc,0x22,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x22,0xa4,
52193 +0x25,0x82,0xf5,0x82,0xe5,0xf0,0x35,0x83,0xf5,0x83,0x22,0xe0,0xfb,0xa3,0xe0,0xfa,
52194 +0xa3,0xe0,0xf9,0x22,0xf8,0xe0,0xfb,0xa3,0xa3,0xe0,0xf9,0x25,0xf0,0xf0,0xe5,0x82,
52195 +0x15,0x82,0x70,0x02,0x15,0x83,0xe0,0xfa,0x38,0xf0,0x22,0xeb,0xf0,0xa3,0xea,0xf0,
52196 +0xa3,0xe9,0xf0,0x22,0xd0,0x83,0xd0,0x82,0xf8,0xe4,0x93,0x70,0x12,0x74,0x01,0x93,
52197 +0x70,0x0d,0xa3,0xa3,0x93,0xf8,0x74,0x01,0x93,0xf5,0x82,0x88,0x83,0xe4,0x73,0x74,
52198 +0x02,0x93,0x68,0x60,0xef,0xa3,0xa3,0xa3,0x80,0xdf,0x02,0x43,0xf8,0x02,0x48,0x29,
52199 +0xe4,0x93,0xa3,0xf8,0xe4,0x93,0xa3,0x40,0x03,0xf6,0x80,0x01,0xf2,0x08,0xdf,0xf4,
52200 +0x80,0x29,0xe4,0x93,0xa3,0xf8,0x54,0x07,0x24,0x0c,0xc8,0xc3,0x33,0xc4,0x54,0x0f,
52201 +0x44,0x20,0xc8,0x83,0x40,0x04,0xf4,0x56,0x80,0x01,0x46,0xf6,0xdf,0xe4,0x80,0x0b,
52202 +0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x90,0x44,0x3d,0xe4,0x7e,0x01,0x93,0x60,
52203 +0xbc,0xa3,0xff,0x54,0x3f,0x30,0xe5,0x09,0x54,0x1f,0xfe,0xe4,0x93,0xa3,0x60,0x01,
52204 +0x0e,0xcf,0x54,0xc0,0x25,0xe0,0x60,0xa8,0x40,0xb8,0xe4,0x93,0xa3,0xfa,0xe4,0x93,
52205 +0xa3,0xf8,0xe4,0x93,0xa3,0xc8,0xc5,0x82,0xc8,0xca,0xc5,0x83,0xca,0xf0,0xa3,0xc8,
52206 +0xc5,0x82,0xc8,0xca,0xc5,0x83,0xca,0xdf,0xe9,0xde,0xe7,0x80,0xbe,0x41,0x9e,0x77,
52207 +0x00,0x41,0x9e,0xae,0x00,0x41,0x9e,0x54,0x80,0x41,0x9e,0xb0,0x00,0x00,0xf0,0x90,
52208 +0x9e,0x5d,0xe0,0x90,0x9e,0x86,0xf0,0xe4,0xfb,0xfd,0x7f,0x54,0x7e,0x01,0xd3,0x10,
52209 +0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x85,0xe0,0xfb,0xa3,0xe0,0xf5,0x44,0xe4,0xf5,
52210 +0x45,0x12,0x35,0xab,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x01,0x5f,0xe4,0xf0,0x90,0x01,
52211 +0x3c,0x74,0x08,0xf0,0xe4,0x90,0x9e,0x85,0xf0,0x90,0x9e,0x5b,0xe0,0x90,0x9e,0x86,
52212 +0xf0,0xe4,0xfb,0xfd,0x7f,0x5c,0x7e,0x01,0x91,0x5e,0x90,0x01,0x5f,0x74,0x05,0xf0,
52213 +0x90,0x06,0x92,0x74,0x02,0xf0,0x90,0x9e,0x63,0x14,0xf0,0xe5,0x61,0x54,0x0f,0xc3,
52214 +0x94,0x0c,0x50,0x03,0x12,0x54,0xe3,0x22,0x8f,0x82,0x8e,0x83,0xa3,0xa3,0xa3,0xe4,
52215 +0xf0,0x22,0xe4,0xf5,0x65,0x7f,0x60,0x7e,0x01,0x80,0xed,0x7d,0x01,0xaf,0x62,0x02,
52216 +0x54,0xe7,0xb1,0xb0,0xbf,0x01,0x12,0x90,0x9e,0x79,0xe0,0xff,0xe4,0xfd,0xf1,0x79,
52217 +0x12,0x5f,0xf7,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0xb1,0xb0,0xbf,0x01,0x0f,0x90,
52218 +0x02,0x09,0xe0,0xff,0x7d,0x01,0xf1,0x79,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0x22,
52219 +0x22,0x22,0x00,0x02,0x45,0x03,0x02,0x45,0x06,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
52220 +0x8b,0x20,0x8a,0x21,0x89,0x22,0x90,0x9e,0x87,0x71,0x8b,0xab,0x23,0xaa,0x24,0xa9,
52221 +0x25,0x90,0x9e,0x8a,0x71,0x8b,0xaf,0x26,0x15,0x26,0xef,0x60,0x1b,0x90,0x9e,0x8a,
52222 +0xe4,0x75,0xf0,0x01,0x71,0x74,0x12,0x29,0xd9,0xff,0x90,0x9e,0x87,0xe4,0x75,0xf0,
52223 +0x01,0x71,0x74,0xef,0x51,0x4d,0x80,0xde,0xab,0x20,0xaa,0x21,0xa9,0x22,0xd0,0xd0,
52224 +0x92,0xaf,0x22,0x90,0x9e,0x11,0x12,0x2a,0x8b,0x00,0x00,0x00,0x00,0x90,0x06,0xa9,
52225 +0xe0,0x90,0x9e,0x10,0xf0,0xe0,0x54,0xc0,0x70,0x08,0x53,0x64,0xfe,0x53,0x64,0xfd,
52226 +0x91,0xcb,0x90,0x9e,0x10,0xe0,0x30,0xe6,0x13,0x43,0x64,0x01,0x90,0x9e,0x66,0xe0,
52227 +0x64,0x02,0x60,0x04,0x91,0xd2,0x80,0x07,0x91,0x79,0x80,0x03,0x53,0x64,0xfe,0x90,
52228 +0x9e,0x10,0xe0,0x30,0xe7,0x16,0x43,0x64,0x02,0xe4,0x90,0x9e,0x85,0x91,0x4e,0x90,
52229 +0x01,0x57,0x74,0x05,0xf0,0x90,0x9e,0x67,0x74,0x01,0xf0,0x22,0x53,0x64,0xfd,0x22,
52230 +0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x01,0xc4,0x74,0xb0,0xf0,0x74,0x45,0xa3,
52231 +0xf0,0x90,0x04,0x1d,0xe0,0x60,0x1a,0x90,0x05,0x22,0xe0,0x54,0x90,0x60,0x07,0x90,
52232 +0x01,0xc6,0xe0,0x44,0x40,0xf0,0x90,0x01,0xc7,0xe0,0x30,0xe1,0xe4,0x7f,0x00,0x80,
52233 +0x02,0x7f,0x01,0xd0,0xd0,0x92,0xaf,0x22,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,
52234 +0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,
52235 +0x05,0xc0,0x06,0xc0,0x07,0x75,0x13,0x00,0x90,0x01,0xc4,0x74,0xe8,0xf0,0x74,0x45,
52236 +0xa3,0xf0,0x53,0x91,0xdf,0x90,0x01,0x3c,0xe0,0x55,0x30,0xf5,0x34,0xa3,0xe0,0x55,
52237 +0x31,0xf5,0x35,0xa3,0xe0,0x55,0x32,0xf5,0x36,0xa3,0xe0,0x55,0x33,0xf5,0x37,0xe5,
52238 +0x34,0x30,0xe0,0x06,0x90,0x01,0x3c,0x74,0x01,0xf0,0xe5,0x34,0x30,0xe1,0x09,0x90,
52239 +0x01,0x3c,0x74,0x02,0xf0,0x12,0x61,0xc9,0xe5,0x34,0x30,0xe2,0x38,0x90,0x01,0x3c,
52240 +0x74,0x04,0xf0,0x90,0x06,0x92,0xe0,0x30,0xe0,0x24,0x90,0x9e,0x85,0xe4,0xf0,0x90,
52241 +0x9e,0x5b,0xe0,0x90,0x9e,0x86,0xf0,0xe4,0xfb,0xfd,0x7f,0x58,0x7e,0x01,0x91,0x5e,
52242 +0x90,0x01,0x5b,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x01,0xf0,0x80,0x07,0x90,0x9e,
52243 +0x64,0xe4,0xf0,0x91,0xcb,0xe5,0x34,0x30,0xe3,0x38,0x90,0x01,0x3c,0x74,0x08,0xf0,
52244 +0x90,0x06,0x92,0xe0,0x30,0xe1,0x24,0x90,0x9e,0x85,0xe4,0xf0,0x90,0x9e,0x5b,0xe0,
52245 +0x90,0x9e,0x86,0xf0,0xe4,0xfb,0xfd,0x7f,0x5c,0x7e,0x01,0x91,0x5e,0x90,0x01,0x5f,
52246 +0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x02,0xf0,0x80,0x07,0x90,0x9e,0x63,0xe4,0xf0,
52247 +0x91,0xcb,0xe5,0x34,0x30,0xe4,0x09,0x90,0x01,0x3c,0x74,0x10,0xf0,0x12,0x4b,0xfb,
52248 +0xe5,0x34,0x30,0xe5,0x09,0x90,0x01,0x3c,0x74,0x20,0xf0,0x12,0x4c,0x3d,0xe5,0x35,
52249 +0x30,0xe0,0x44,0x90,0x01,0x3d,0x74,0x01,0xf0,0x90,0x01,0x2f,0xe0,0x44,0x7f,0xf0,
52250 +0x90,0x00,0x83,0xe0,0x54,0x0f,0xf5,0x13,0xb4,0x01,0x02,0x80,0x1c,0xe5,0x13,0xb4,
52251 +0x02,0x05,0x90,0x00,0x83,0x80,0x12,0xe5,0x13,0xb4,0x04,0x05,0x90,0x00,0x83,0x80,
52252 +0x08,0xe5,0x13,0xb4,0x0c,0x06,0x90,0x00,0x83,0xe0,0xf5,0x62,0x90,0x01,0xbb,0xe5,
52253 +0x62,0xf0,0x12,0x60,0xc0,0x91,0xcb,0xe5,0x35,0x30,0xe2,0x06,0x90,0x01,0x3d,0x74,
52254 +0x04,0xf0,0xe5,0x35,0x30,0xe4,0x06,0x90,0x01,0x3d,0x74,0x10,0xf0,0xe5,0x36,0x30,
52255 +0xe0,0x06,0x90,0x01,0x3e,0x74,0x01,0xf0,0xe5,0x36,0x30,0xe1,0x06,0x90,0x01,0x3e,
52256 +0x74,0x02,0xf0,0x74,0xe8,0x04,0x90,0x01,0xc4,0xf0,0x74,0x45,0xa3,0xf0,0xd0,0x07,
52257 +0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,
52258 +0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,0x32,0x90,0x9e,0x98,0xef,0xf0,0xa3,0xed,
52259 +0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xe5,0x63,0x60,0x05,0xe4,0xff,0x12,0x54,0x97,0x90,
52260 +0x9e,0x98,0xe0,0x30,0xe0,0x09,0x90,0x9e,0x9a,0xe4,0xf0,0xa3,0x74,0x80,0xf0,0x90,
52261 +0x9e,0x98,0xe0,0xff,0xc3,0x13,0x90,0xfd,0x10,0xf0,0x90,0x04,0x25,0xef,0xf0,0x90,
52262 +0x9e,0x99,0xe0,0x60,0x1f,0xa3,0xa3,0xe0,0xff,0x24,0x0f,0xf5,0x82,0xe4,0x34,0xfc,
52263 +0xf5,0x83,0xe0,0x44,0x80,0xf0,0x74,0x10,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,
52264 +0xe0,0x44,0x80,0xf0,0x90,0x9e,0x9a,0xa3,0xe0,0xff,0xfd,0x24,0x08,0xf5,0x82,0xe4,
52265 +0x34,0xfc,0xf5,0x83,0xe4,0xf0,0x74,0x09,0x2d,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,
52266 +0xe0,0x54,0xf0,0xf0,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,
52267 +0xf7,0xf0,0x90,0x9e,0x9a,0xe0,0xfe,0xa3,0xe0,0xff,0x22,0x75,0x28,0x33,0xe4,0xf5,
52268 +0x29,0x75,0x2a,0x07,0xf5,0x2b,0x90,0x01,0x30,0xe5,0x28,0xf0,0xa3,0xe5,0x29,0xf0,
52269 +0xa3,0xe5,0x2a,0xf0,0xa3,0xe5,0x2b,0xf0,0x22,0xe4,0x90,0x9e,0x16,0xf0,0xa3,0xf0,
52270 +0x75,0x8e,0x02,0xf1,0xa1,0xf1,0xe9,0x90,0x9e,0x7e,0xef,0xf0,0xf1,0xdd,0x90,0x9e,
52271 +0x80,0xef,0xf0,0xf1,0xf6,0x90,0x9e,0x75,0xee,0xf0,0xa3,0xef,0xf0,0xe4,0xf5,0x57,
52272 +0x12,0x6e,0x77,0xf1,0xd4,0x12,0x60,0x4b,0x12,0x32,0x3d,0xf1,0xc9,0x11,0x0b,0x12,
52273 +0x50,0x0e,0xf1,0xcd,0xf1,0xb1,0x12,0x44,0xff,0xf1,0x45,0x90,0x9e,0x18,0xe5,0xd9,
52274 +0xf0,0x11,0xd0,0xc2,0xaf,0x90,0x00,0x80,0xe0,0x44,0x40,0xf0,0xb1,0x45,0x75,0xe8,
52275 +0x03,0x43,0xa8,0x85,0xd2,0xaf,0x90,0x9e,0x16,0xe0,0x64,0x01,0xf0,0x24,0x29,0x90,
52276 +0x01,0xc4,0xf0,0x74,0x48,0xa3,0xf0,0xe5,0x57,0x30,0xe4,0x0a,0xc2,0xaf,0x53,0x57,
52277 +0xef,0xd2,0xaf,0x12,0x58,0x74,0xe5,0x57,0x30,0xe6,0x17,0xc2,0xaf,0x53,0x57,0xbf,
52278 +0xd2,0xaf,0x12,0x67,0xa1,0x90,0x9e,0x43,0xe0,0xff,0x60,0x03,0xb4,0x01,0x03,0x12,
52279 +0x7b,0x5c,0x90,0x9e,0x43,0xe0,0x70,0x03,0x12,0x7c,0x5f,0x12,0x73,0x85,0x80,0xb6,
52280 +0x90,0x01,0x3c,0x74,0xff,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x01,0x34,0xf0,0xa3,0xf0,
52281 +0xa3,0xf0,0xa3,0xf0,0xfd,0x7f,0x54,0x31,0x05,0x7d,0xff,0x7f,0x55,0x31,0x05,0x7d,
52282 +0xff,0x7f,0x56,0x31,0x05,0x7d,0xff,0x7f,0x57,0x80,0x0a,0xf0,0x90,0x00,0x45,0xe0,
52283 +0x54,0xfe,0xfd,0x7f,0x45,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x8f,0x82,0x75,0x83,
52284 +0x00,0xed,0xf0,0xb1,0x45,0xd0,0xd0,0x92,0xaf,0x22,0xef,0x14,0x60,0x30,0x14,0x60,
52285 +0x66,0x24,0x02,0x60,0x02,0x21,0xc1,0x90,0x9e,0x3f,0x74,0x02,0xf0,0x90,0x00,0x48,
52286 +0xe0,0x44,0x0c,0xfd,0x7f,0x48,0x31,0x05,0x90,0x00,0x47,0xe0,0x44,0x08,0xfd,0x7f,
52287 +0x47,0x31,0x05,0x90,0x00,0x45,0xe0,0x44,0x10,0xfd,0x7f,0x45,0x80,0x71,0xe4,0x90,
52288 +0x9e,0x3f,0xf0,0x90,0x9e,0x3b,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
52289 +0x80,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x00,0x45,0xe0,0x44,0xef,0xfd,0x7f,0x45,0x31,
52290 +0x05,0x90,0x00,0x45,0xe0,0x54,0xef,0xfd,0x7f,0x45,0x31,0x05,0x90,0x00,0x46,0xe0,
52291 +0x44,0x10,0xfd,0x7f,0x46,0x80,0x38,0x90,0x9e,0x3f,0x74,0x01,0xf0,0x90,0x9e,0x45,
52292 +0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,
52293 +0x90,0x00,0x45,0xe0,0x44,0x20,0xfd,0x7f,0x45,0x31,0x05,0x90,0x00,0x45,0xe0,0x44,
52294 +0x10,0xfd,0x7f,0x45,0x31,0x05,0x90,0x00,0x46,0xe0,0x44,0x10,0xfd,0x7f,0x46,0x31,
52295 +0x05,0x22,0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x9e,0x41,0xf0,0x90,0x00,0x01,0x12,
52296 +0x42,0x20,0x25,0xe0,0x25,0xe0,0x90,0x9e,0x40,0xf0,0x12,0x29,0xd9,0x25,0xe0,0x25,
52297 +0xe0,0x90,0x9e,0x44,0xf0,0x90,0x05,0x60,0xe0,0x90,0x9e,0x4f,0xf0,0x90,0x05,0x61,
52298 +0xe0,0x90,0x9e,0x50,0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x51,0xf0,0x90,0x05,0x63,
52299 +0xe0,0x90,0x9e,0x52,0xf0,0xa2,0xaf,0xe4,0x33,0x90,0x9e,0x24,0xf0,0xc2,0xaf,0x90,
52300 +0x9e,0x40,0xe0,0xff,0x91,0xf0,0x90,0x9e,0x24,0xe0,0x24,0xff,0x92,0xaf,0x90,0x9e,
52301 +0x41,0xe0,0x70,0x02,0x41,0xc8,0x90,0x9e,0x40,0xe0,0x70,0x02,0x41,0xc8,0x90,0x9e,
52302 +0x44,0xe0,0x70,0x02,0x41,0xc8,0xa2,0xaf,0xe4,0x33,0x90,0x9e,0x24,0xf0,0xc2,0xaf,
52303 +0x90,0x9e,0x53,0x74,0x01,0xf0,0x90,0x9e,0x24,0xe0,0x24,0xff,0x92,0xaf,0x11,0xfc,
52304 +0x90,0x00,0x46,0xe0,0x44,0x01,0xfd,0x7f,0x46,0x31,0x05,0x90,0x9e,0x39,0xe0,0x60,
52305 +0x15,0x90,0x9e,0x45,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,
52306 +0x08,0x12,0x2f,0xd9,0x80,0x06,0x90,0x05,0x22,0x74,0x7f,0xf0,0x90,0x00,0x45,0xe0,
52307 +0x54,0xef,0xfd,0x7f,0x45,0x31,0x05,0x90,0x05,0x87,0xe0,0x64,0x80,0xf0,0x90,0x9e,
52308 +0x4f,0xe0,0x90,0x05,0x84,0xf0,0x90,0x9e,0x50,0xe0,0x90,0x05,0x85,0xf0,0x90,0x9e,
52309 +0x51,0xe0,0x90,0x05,0x86,0xf0,0x90,0x9e,0x52,0xe0,0x90,0x05,0x87,0xf0,0xa2,0xaf,
52310 +0xe4,0x33,0x90,0x9e,0x24,0xf0,0xc2,0xaf,0x90,0x01,0x3c,0xe0,0x44,0x20,0xf0,0x7d,
52311 +0x20,0xe4,0xff,0x12,0x37,0x00,0x80,0x2b,0x90,0x9e,0x41,0xe0,0x70,0x2d,0x90,0x9e,
52312 +0x53,0x11,0xfb,0x90,0x00,0x46,0xe0,0x54,0xfe,0xfd,0x7f,0x46,0x31,0x05,0x90,0x05,
52313 +0x22,0xe4,0xf0,0xa2,0xaf,0x33,0x90,0x9e,0x24,0xf0,0xc2,0xaf,0x7d,0x20,0xe4,0xff,
52314 +0x12,0x36,0x92,0x90,0x9e,0x24,0xe0,0x24,0xff,0x92,0xaf,0x22,0x8b,0x14,0x8a,0x15,
52315 +0x89,0x16,0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x9e,0x42,0xf0,0xe0,0x30,0xe0,0x4b,
52316 +0x90,0x9e,0x39,0x74,0x01,0xf0,0x7f,0x80,0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0x3b,
52317 +0x12,0x2a,0x7f,0xab,0x14,0xaa,0x15,0xa9,0x16,0x90,0x00,0x01,0x12,0x42,0x20,0xff,
52318 +0xe4,0xfc,0xfd,0xfe,0x78,0x1a,0x12,0x2a,0x6c,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,
52319 +0x07,0x90,0x9e,0x3b,0x12,0x43,0x53,0xec,0x54,0x03,0xfc,0x12,0x43,0x46,0x90,0x9e,
52320 +0x45,0x12,0x2a,0x7f,0x90,0x05,0x22,0xe4,0xf0,0x80,0x2d,0xe4,0x90,0x9e,0x39,0xf0,
52321 +0x7f,0x80,0x7e,0x08,0x12,0x27,0xde,0xec,0x54,0x03,0xfc,0xec,0x44,0xc0,0xfc,0x90,
52322 +0x9e,0x3b,0x12,0x2a,0x7f,0x90,0x9e,0x3b,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,
52323 +0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,0x42,0xe0,0x30,0xe1,0x19,0x7d,
52324 +0x0c,0x7f,0x47,0x31,0x05,0x90,0x00,0x48,0xe0,0x44,0x0c,0xfd,0x7f,0x48,0x31,0x05,
52325 +0x90,0x00,0x46,0xe0,0x44,0x10,0x80,0x1c,0x90,0x00,0x47,0xe0,0x54,0xf3,0xfd,0x7f,
52326 +0x47,0x31,0x05,0x90,0x00,0x48,0xe0,0x54,0xf3,0xfd,0x7f,0x48,0x31,0x05,0x90,0x00,
52327 +0x46,0xe0,0x54,0xef,0xfd,0x7f,0x46,0x31,0x05,0xe4,0x90,0x9e,0x3f,0xf0,0x22,0x90,
52328 +0x01,0x30,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x01,0x38,0xf0,0xa3,0xf0,
52329 +0xa3,0xf0,0xa3,0xf0,0xfd,0x7f,0x50,0x31,0x05,0xe4,0xfd,0x7f,0x51,0x31,0x05,0xe4,
52330 +0xfd,0x7f,0x52,0x31,0x05,0xe4,0xfd,0x7f,0x53,0x21,0x05,0xe5,0x65,0x64,0x01,0x70,
52331 +0x3b,0xd1,0x85,0xbf,0x01,0x04,0x7f,0x01,0xd1,0x79,0x90,0x00,0x46,0xe0,0x44,0x04,
52332 +0xfd,0x7f,0x46,0x31,0x05,0x90,0x00,0x44,0xe0,0x54,0xfb,0xfd,0x7f,0x44,0x31,0x05,
52333 +0x90,0x00,0x46,0xe0,0x54,0xfb,0xfd,0x7f,0x46,0x31,0x05,0x7f,0x02,0xd1,0xa1,0x8f,
52334 +0x69,0x90,0x01,0xc9,0xe5,0x69,0xf0,0xb4,0x01,0x02,0xd1,0x19,0x22,0x90,0x9e,0x41,
52335 +0xe0,0x64,0x01,0x60,0x02,0x81,0xef,0x90,0x00,0x46,0xe0,0x44,0x01,0xfd,0x7f,0x46,
52336 +0x31,0x05,0x90,0x9e,0x53,0xe0,0x70,0x31,0x90,0x9e,0x39,0xe0,0x60,0x15,0x90,0x9e,
52337 +0x45,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,
52338 +0xd9,0x80,0x06,0x90,0x05,0x22,0x74,0x7f,0xf0,0x90,0x9e,0x40,0xe0,0xff,0x91,0xf0,
52339 +0x90,0x9e,0x53,0x74,0x01,0x11,0xfb,0x80,0x3f,0x90,0x9e,0x53,0xe0,0x64,0x01,0x70,
52340 +0x37,0x90,0x9e,0x44,0xe0,0xff,0x91,0xf0,0xe4,0x90,0x9e,0x53,0xf0,0x90,0x00,0x45,
52341 +0xe0,0x44,0x01,0xfd,0x7f,0x45,0x31,0x05,0x90,0x9e,0x39,0xe0,0x60,0x15,0x90,0x9e,
52342 +0x3b,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,
52343 +0xd9,0x80,0x05,0x90,0x05,0x22,0xe4,0xf0,0x90,0x05,0x87,0xe0,0x64,0x80,0xf0,0x90,
52344 +0x9e,0x4f,0xe0,0x90,0x05,0x84,0xf0,0x90,0x9e,0x50,0xe0,0x90,0x05,0x85,0xf0,0x90,
52345 +0x9e,0x51,0xe0,0x90,0x05,0x86,0xf0,0x90,0x9e,0x52,0xe0,0x90,0x05,0x87,0xf0,0x22,
52346 +0x90,0x05,0x60,0xe0,0x90,0x9e,0x4f,0xf0,0x90,0x05,0x61,0xe0,0x90,0x9e,0x50,0xf0,
52347 +0x90,0x05,0x62,0xe0,0x90,0x9e,0x51,0xf0,0x90,0x05,0x63,0xe0,0x90,0x9e,0x52,0xf0,
52348 +0xc3,0x74,0xff,0x9f,0xfe,0x90,0x9e,0x50,0xe0,0xd3,0x9e,0x40,0x1e,0xe0,0x2f,0xf0,
52349 +0xa3,0xe0,0xb4,0xff,0x0f,0xe4,0xf0,0xa3,0xe0,0xb4,0xff,0x03,0xe4,0xf0,0x22,0x90,
52350 +0x9e,0x52,0x80,0x03,0x90,0x9e,0x51,0xe0,0x04,0xf0,0x22,0x90,0x9e,0x50,0xe0,0x2f,
52351 +0xf0,0x22,0xe0,0x5f,0xf0,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x7f,0x10,0xdf,0xfe,
52352 +0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x2a,0xed,
52353 +0xf0,0x90,0x9e,0x29,0xef,0xf0,0xd3,0x94,0x07,0x50,0x4e,0xa3,0xe0,0x70,0x1a,0x90,
52354 +0x9e,0x29,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,
52355 +0xff,0x90,0x00,0x47,0xe0,0x5f,0xf0,0x80,0x17,0x90,0x9e,0x29,0xe0,0xff,0x74,0x01,
52356 +0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x47,0xe0,0x4f,0xf0,
52357 +0xb1,0x45,0x90,0x9e,0x29,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,
52358 +0xd8,0xfc,0xf4,0xff,0x90,0x00,0x46,0x80,0x59,0x90,0x9e,0x29,0xe0,0x24,0xf8,0xf0,
52359 +0xa3,0xe0,0x70,0x1d,0x90,0x9e,0x29,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,
52360 +0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0x80,
52361 +0x1a,0x90,0x9e,0x29,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,
52362 +0xfc,0xc4,0x54,0xf0,0xff,0x90,0x00,0x43,0xe0,0x4f,0xf0,0xb1,0x45,0x90,0x9e,0x29,
52363 +0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,
52364 +0x00,0x43,0xb1,0x42,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x00,0x49,0xe0,0x90,0x9e,0xb1,
52365 +0xf0,0xe0,0x54,0x0f,0xf0,0x44,0xf0,0xfd,0x7f,0x49,0x31,0x05,0x90,0x9e,0xb1,0xe0,
52366 +0x44,0xb0,0xfd,0x7f,0x49,0x21,0x05,0x90,0x9e,0x27,0xee,0xf0,0xa3,0xef,0xf0,0x75,
52367 +0x65,0x01,0x8e,0x66,0xf5,0x67,0xe4,0xfd,0x7f,0x0b,0xb1,0x55,0xe4,0xfd,0x7f,0x02,
52368 +0xb1,0x55,0xd1,0x85,0xe4,0xff,0xd1,0x79,0xe4,0xf5,0x69,0x90,0x01,0xc9,0xe5,0x69,
52369 +0xf0,0x90,0x9e,0x27,0xe0,0xfc,0xa3,0xe0,0xfd,0xec,0xfb,0x8d,0x44,0xe4,0xf5,0x45,
52370 +0x7d,0x01,0x7f,0x60,0x7e,0x01,0x02,0x35,0xab,0x90,0x01,0xca,0xe5,0x68,0xf0,0xef,
52371 +0x60,0x02,0xd1,0x19,0x22,0x7f,0x0b,0xd1,0xa1,0xef,0x65,0x68,0x60,0x10,0xe5,0x68,
52372 +0xb4,0x01,0x05,0xe4,0xf5,0x68,0x80,0x03,0x75,0x68,0x01,0x7f,0x01,0x22,0x7f,0x00,
52373 +0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0xb2,0xef,0xf0,0xd3,0x94,0x07,
52374 +0x50,0x43,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,
52375 +0xff,0x90,0x00,0x46,0xb1,0x42,0x90,0x9e,0xb2,0xe0,0xfd,0x74,0x01,0x7e,0x00,0xa8,
52376 +0x05,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,0x44,0xe0,
52377 +0xfb,0xe4,0xfe,0xef,0x5b,0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,
52378 +0xd8,0xf8,0xff,0x80,0x4b,0x90,0x9e,0xb2,0xe0,0x24,0xf8,0xf0,0xe0,0xff,0x74,0x01,
52379 +0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,
52380 +0xf0,0xb1,0x45,0x90,0x9e,0xb2,0xe0,0xfd,0x74,0x01,0x7e,0x00,0xa8,0x05,0x08,0x80,
52381 +0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,0x42,0xe0,0xfb,0xe4,0xfe,
52382 +0xef,0x5b,0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,0xd8,0xf8,0xff,
52383 +0xd0,0xd0,0x92,0xaf,0x22,0xe4,0xfd,0x7f,0x45,0x31,0x05,0x90,0x04,0xfd,0xe4,0xf0,
52384 +0xa3,0xf0,0x90,0x9e,0x43,0xf0,0x90,0x9e,0x49,0xf0,0x90,0x9e,0x4c,0xf0,0x90,0x9e,
52385 +0x4a,0xf0,0x90,0x9e,0x4d,0xf0,0x90,0x9e,0x4b,0xf0,0x90,0x9e,0x4e,0xf0,0x90,0x9e,
52386 +0x35,0x04,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,0x3a,0xf0,0x90,0x9e,
52387 +0x3f,0xf0,0x90,0x9e,0x41,0xf0,0x90,0x9e,0x53,0xf0,0x90,0x9e,0x44,0xf0,0x90,0x9e,
52388 +0x40,0xf0,0x90,0x9e,0x39,0xf0,0x90,0x00,0x51,0xe0,0x44,0xc0,0xfd,0x7f,0x51,0x21,
52389 +0x05,0xe4,0x90,0x9e,0x7d,0xf0,0x90,0x00,0x80,0xe0,0x44,0x80,0xfd,0x7f,0x80,0x21,
52390 +0x05,0x75,0x30,0x1f,0x75,0x31,0x01,0xe4,0xf5,0x32,0x90,0x01,0x38,0xe5,0x30,0xf0,
52391 +0xa3,0xe5,0x31,0xf0,0xa3,0xe5,0x32,0xf0,0x22,0xe4,0xf5,0x68,0x22,0x90,0x01,0x64,
52392 +0x74,0xa0,0xf0,0x22,0x90,0x9e,0x80,0xe0,0x90,0x9e,0x0f,0xf0,0x22,0x90,0x00,0xf3,
52393 +0xe0,0x7f,0x00,0x30,0xe3,0x02,0x7f,0x01,0x22,0x90,0x00,0x02,0xe0,0x54,0xe0,0x7f,
52394 +0x01,0x60,0x02,0x7f,0x00,0x22,0x90,0x9e,0x80,0xe0,0xb4,0x01,0x0c,0x90,0x00,0xf2,
52395 +0xe0,0x30,0xe7,0x05,0x7e,0xfd,0x7f,0x33,0x22,0x7e,0xfd,0x7f,0x2f,0x22,0x90,0x00,
52396 +0xf3,0xe0,0x30,0xe2,0x0d,0x90,0x05,0x41,0x74,0x10,0xf0,0x90,0x05,0x5a,0xf0,0xa3,
52397 +0xe4,0xf0,0x22,0x90,0x01,0x02,0xe0,0x54,0x03,0xff,0xe0,0x54,0x0c,0x13,0x13,0x54,
52398 +0x3f,0xfe,0xef,0x64,0x01,0x60,0x04,0xef,0xb4,0x03,0x10,0x90,0x9e,0x10,0x74,0x01,
52399 +0xf0,0xa3,0x74,0x37,0xf0,0xa3,0x74,0x01,0xf0,0x80,0x1a,0xee,0x64,0x01,0x60,0x07,
52400 +0xaf,0x06,0xee,0x64,0x03,0x70,0x49,0x90,0x9e,0x10,0x74,0x01,0xf0,0xa3,0x74,0x3d,
52401 +0xf0,0xa3,0x74,0x40,0xf0,0x90,0x9e,0x10,0xe0,0xfe,0xa3,0xe0,0xff,0xf5,0x82,0x8e,
52402 +0x83,0xe0,0xfd,0x90,0x9e,0x12,0xe0,0xfc,0xed,0x5c,0x60,0x0c,0x8f,0x82,0x8e,0x83,
52403 +0xec,0xf0,0xe4,0x90,0x9e,0x77,0xf0,0x22,0x90,0x9e,0x77,0xe0,0x04,0xf0,0xe0,0xc3,
52404 +0x94,0x0a,0x40,0x0c,0xe4,0xf0,0x90,0x04,0x19,0xe0,0x30,0xe0,0x03,0x12,0x44,0xea,
52405 +0x22,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,
52406 +0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x01,
52407 +0xc4,0x74,0xa1,0xf0,0x74,0x50,0xa3,0xf0,0x90,0x01,0x34,0xe0,0x55,0x28,0xf5,0x2c,
52408 +0xa3,0xe0,0x55,0x29,0xf5,0x2d,0xa3,0xe0,0x55,0x2a,0xf5,0x2e,0xa3,0xe0,0x55,0x2b,
52409 +0xf5,0x2f,0xe5,0x2c,0x20,0xe0,0x02,0x41,0x46,0x90,0x01,0x34,0x74,0x01,0xf0,0x85,
52410 +0xd1,0x4d,0x85,0xd2,0x4e,0x85,0xd3,0x4f,0x85,0xd4,0x50,0x85,0xd5,0x51,0x85,0xd6,
52411 +0x52,0x85,0xd7,0x53,0x85,0xd9,0x54,0xe5,0x54,0x54,0x40,0xc3,0x13,0xff,0xe5,0x53,
52412 +0x54,0x20,0x6f,0x70,0x02,0x21,0xf5,0xe5,0x54,0x30,0xe5,0x02,0x21,0xf5,0xe5,0x52,
52413 +0x54,0x3f,0xf5,0x08,0xe5,0x4d,0x54,0x3f,0xf5,0x09,0xe5,0x51,0x54,0x1f,0xff,0xe5,
52414 +0x08,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0x8f,0xf0,0x12,
52415 +0x42,0x81,0xe5,0x53,0x54,0x1f,0xff,0xe5,0x08,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,
52416 +0x34,0x93,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x09,0xd3,0x94,0x04,0x40,
52417 +0x03,0x75,0x09,0x04,0x75,0xf0,0x0a,0xe5,0x08,0x90,0x90,0x00,0x12,0x43,0x5f,0x75,
52418 +0xf0,0x02,0xe5,0x09,0x12,0x43,0x5f,0xe0,0xfe,0xa3,0xe0,0xff,0xe5,0x53,0x54,0x1f,
52419 +0x2f,0xff,0xe4,0x3e,0xfe,0x75,0xf0,0x0a,0xe5,0x08,0x90,0x90,0x00,0x12,0x43,0x5f,
52420 +0x75,0xf0,0x02,0xe5,0x09,0x12,0x43,0x5f,0xee,0xf0,0xa3,0xef,0xf0,0xe5,0x54,0x20,
52421 +0xe6,0x24,0xe5,0x53,0x54,0x1f,0xff,0xe5,0x08,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,
52422 +0x34,0x98,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x4f,0x30,0xe7,0x36,0xaf,
52423 +0x08,0x12,0x63,0x51,0x80,0x2f,0xe5,0x53,0x54,0x1f,0xff,0xe5,0x08,0x25,0xe0,0x24,
52424 +0x44,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x4f,
52425 +0x30,0xe7,0x12,0xe5,0x4f,0x54,0x7f,0xfd,0xe5,0x53,0x54,0x1f,0xf5,0x0d,0xab,0x09,
52426 +0xaf,0x08,0x12,0x62,0xee,0xe5,0x63,0x14,0x24,0xfd,0x50,0x02,0x80,0x48,0x90,0x9e,
52427 +0x66,0xe0,0x60,0x3a,0x90,0x01,0x5b,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x04,0xf0,0x71,
52428 +0xc3,0xef,0x64,0x01,0x70,0x30,0x90,0x9e,0x85,0xf0,0x90,0x9e,0x5b,0xe0,0x90,0x9e,
52429 +0x86,0xf0,0xe4,0xfb,0xfd,0x7f,0x58,0x7e,0x01,0x12,0x44,0x5e,0x90,0x01,0x5b,0x74,
52430 +0x05,0xf0,0x90,0x06,0x92,0x74,0x01,0xf0,0x90,0x9e,0x64,0xf0,0x80,0x08,0x71,0xc3,
52431 +0xbf,0x01,0x03,0x12,0x44,0xcb,0xe5,0x2c,0x30,0xe1,0x20,0x90,0x01,0x34,0x74,0x02,
52432 +0xf0,0x85,0xd1,0x58,0x85,0xd2,0x59,0x85,0xd3,0x5a,0x85,0xd4,0x5b,0x85,0xd5,0x5c,
52433 +0x85,0xd6,0x5d,0x85,0xd7,0x5e,0x85,0xd9,0x5f,0x71,0xd2,0xe5,0x2c,0x30,0xe3,0x06,
52434 +0x90,0x01,0x34,0x74,0x08,0xf0,0xe5,0x2c,0x30,0xe4,0x09,0x90,0x01,0x34,0x74,0x10,
52435 +0xf0,0x43,0x57,0x10,0xe5,0x2c,0x30,0xe5,0x26,0x90,0x01,0xcf,0xe0,0x30,0xe5,0x1f,
52436 +0xe0,0x54,0xdf,0xf0,0x90,0x01,0x34,0x74,0x20,0xf0,0x75,0xa8,0x00,0x75,0xe8,0x00,
52437 +0x12,0x4b,0xcf,0x90,0x00,0x03,0xe0,0x54,0xfb,0xf0,0x12,0x4d,0x45,0x80,0xfe,0xe5,
52438 +0x2c,0x30,0xe6,0x06,0x90,0x01,0x34,0x74,0x40,0xf0,0xe5,0x2e,0x30,0xe0,0x12,0x90,
52439 +0x9e,0x7f,0x74,0x01,0xf0,0x90,0x01,0x36,0xf0,0x12,0x61,0x4e,0x90,0x9e,0x7f,0xe4,
52440 +0xf0,0xe5,0x2e,0x30,0xe1,0x0b,0x90,0x01,0x36,0x74,0x02,0xf0,0x43,0x57,0x40,0x11,
52441 +0x23,0xe5,0x2e,0x30,0xe2,0x09,0x90,0x01,0x36,0x74,0x04,0xf0,0x12,0x60,0xdf,0xe5,
52442 +0x2e,0x30,0xe3,0x28,0x90,0x01,0x36,0x74,0x08,0xf0,0xe5,0x60,0x64,0x01,0x70,0x1c,
52443 +0xe5,0x63,0x60,0x18,0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,
52444 +0x9e,0x85,0xe4,0x12,0x44,0x4e,0x90,0x01,0x57,0x74,0x05,0xf0,0xe5,0x2e,0x30,0xe4,
52445 +0x2b,0x90,0x01,0x36,0x74,0x10,0xf0,0xe5,0x60,0xb4,0x01,0x20,0xe5,0x63,0x60,0x1c,
52446 +0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,0x9e,0x67,0xe4,0xf0,
52447 +0x53,0x64,0xfd,0xe5,0x64,0x54,0x07,0x70,0x03,0x12,0x44,0xcb,0xe5,0x2e,0x30,0xe5,
52448 +0x1f,0x90,0x01,0x36,0x74,0x20,0xf0,0xe5,0x60,0xb4,0x01,0x14,0xe5,0x63,0x60,0x10,
52449 +0x90,0x9e,0x66,0xe0,0x64,0x02,0x60,0x05,0x12,0x44,0xd2,0x80,0x03,0x12,0x44,0x79,
52450 +0xe5,0x2e,0x30,0xe6,0x1b,0x90,0x01,0x36,0x74,0x40,0xf0,0xe5,0x60,0xb4,0x01,0x10,
52451 +0xe5,0x63,0x60,0x0c,0x53,0x64,0xfe,0xe5,0x64,0x54,0x07,0x70,0x03,0x12,0x44,0xcb,
52452 +0xe5,0x2f,0x30,0xe1,0x08,0x90,0x01,0x37,0x74,0x02,0xf0,0x91,0x64,0x74,0xa1,0x04,
52453 +0x90,0x01,0xc4,0xf0,0x74,0x50,0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,
52454 +0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,
52455 +0xd0,0xe0,0x32,0x90,0x04,0x1b,0xe0,0x54,0x7f,0x64,0x7f,0x7f,0x01,0x60,0x02,0x7f,
52456 +0x00,0x22,0x90,0x9e,0x10,0xe0,0x54,0xf0,0x44,0x03,0xf0,0x54,0x0f,0x44,0x80,0xf0,
52457 +0x7b,0x00,0x7a,0x00,0x79,0x58,0x90,0x9e,0x90,0x12,0x43,0x8b,0x0b,0x7a,0x9e,0x79,
52458 +0x10,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x8d,0x12,0x43,0x8b,0x90,0x9e,
52459 +0xb0,0xe0,0xff,0x04,0xf0,0x90,0x00,0x01,0xef,0x12,0x42,0x5f,0x7f,0xaf,0x7e,0x01,
52460 +0x12,0x71,0x7a,0xef,0x60,0x49,0x90,0x9e,0x8d,0x12,0x43,0x6b,0x8b,0x23,0x8a,0x24,
52461 +0x89,0x25,0x75,0x26,0x02,0x7b,0x01,0x7a,0x01,0x79,0xa0,0x12,0x45,0x09,0x90,0x9e,
52462 +0x90,0x12,0x43,0x6b,0x8b,0x23,0x8a,0x24,0x89,0x25,0x90,0x9e,0x8d,0x12,0x43,0x6b,
52463 +0x12,0x29,0xd9,0xff,0xc4,0x54,0x0f,0xf5,0x26,0x7b,0x01,0x7a,0x01,0x79,0xa2,0x12,
52464 +0x45,0x09,0x90,0x01,0xaf,0x74,0xff,0xf0,0x90,0x01,0xcb,0xe0,0x64,0x80,0xf0,0xd0,
52465 +0xd0,0x92,0xaf,0x22,0x90,0x9e,0xa0,0x12,0x2a,0x8b,0x00,0x00,0x00,0x00,0xe5,0x63,
52466 +0x14,0x24,0xfd,0x50,0x02,0x80,0x1f,0x90,0x9e,0x66,0xe0,0x60,0x06,0x7d,0x01,0x7f,
52467 +0x0c,0x80,0x0d,0xe5,0x61,0x54,0x0f,0xc3,0x94,0x04,0x50,0x06,0x7d,0x01,0x7f,0x04,
52468 +0x91,0xe7,0xe4,0xff,0x91,0x97,0x22,0xef,0x60,0x0b,0x90,0x9e,0x80,0xe0,0xb4,0x01,
52469 +0x10,0xe4,0xff,0x80,0x09,0x90,0x9e,0x80,0xe0,0xb4,0x01,0x05,0x7f,0x01,0x12,0x75,
52470 +0xa5,0x22,0x90,0x01,0x37,0x74,0x02,0xf0,0x90,0x05,0x22,0x74,0xff,0xf0,0x12,0x74,
52471 +0x12,0xef,0x70,0x06,0x90,0x01,0xc8,0x74,0xfd,0xf0,0x7d,0x02,0x7f,0x03,0x12,0x36,
52472 +0xe6,0xe5,0x63,0x60,0x04,0x7f,0x01,0x91,0x97,0x12,0x74,0xd2,0x53,0x61,0xf0,0x43,
52473 +0x61,0x02,0x22,0x7d,0x01,0x7f,0x0c,0x8f,0x6a,0x8d,0x6b,0xe5,0x6a,0x54,0x0f,0xff,
52474 +0xe5,0x61,0x54,0x0f,0x6f,0x60,0x65,0xe5,0x6a,0x30,0xe2,0x28,0xe5,0x61,0x20,0xe2,
52475 +0x04,0x7f,0x01,0xd1,0xc2,0xe5,0x61,0x30,0xe3,0x0c,0xe5,0x6a,0x20,0xe3,0x07,0xb1,
52476 +0x5d,0xef,0x60,0x48,0xa1,0xa5,0xe5,0x61,0x20,0xe3,0x41,0xe5,0x6a,0x30,0xe3,0x3c,
52477 +0xaf,0x6b,0xc1,0xdc,0xe5,0x61,0x54,0x0f,0xff,0xbf,0x0c,0x0c,0xe5,0x6a,0x20,0xe3,
52478 +0x07,0xb1,0x5d,0xef,0x60,0x26,0xb1,0xa5,0xe5,0x61,0x54,0x0f,0xff,0xbf,0x04,0x0c,
52479 +0xe5,0x6a,0x20,0xe2,0x07,0xf1,0x21,0xef,0x60,0x12,0x91,0xb2,0xe5,0x61,0x54,0x0f,
52480 +0xff,0xbf,0x02,0x08,0x12,0x60,0xbd,0xef,0x60,0x02,0xd1,0xaf,0x22,0x71,0xc3,0xef,
52481 +0x64,0x01,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,0xf0,0x80,0x30,0x90,0x9e,0x64,0xe0,
52482 +0x60,0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x22,0x90,0x9e,0x63,0xe0,0x60,0x08,
52483 +0x90,0x01,0xb9,0x74,0x04,0xf0,0x80,0x14,0xe5,0x62,0x54,0x0f,0xd3,0x94,0x04,0x40,
52484 +0x08,0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,0x03,0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,
52485 +0x08,0xf0,0x7f,0x00,0x22,0x90,0x06,0x04,0xe0,0x44,0x40,0xf0,0xe5,0x60,0xb4,0x01,
52486 +0x04,0x7f,0x01,0xd1,0xf6,0x53,0x61,0xf0,0x43,0x61,0x04,0x22,0xef,0x64,0x01,0x70,
52487 +0x2e,0x7d,0x78,0x7f,0x02,0x12,0x36,0x75,0x7d,0x02,0x7f,0x03,0x12,0x36,0x75,0x90,
52488 +0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x91,0xe3,0xe4,0xff,0x91,0x97,
52489 +0x90,0x06,0x04,0xe0,0x54,0x7f,0xf0,0x90,0x06,0x0a,0xe0,0x54,0xf8,0xf0,0x22,0x90,
52490 +0x01,0x36,0x74,0x7b,0xf0,0xa3,0x74,0x02,0xf0,0x7d,0x7b,0xff,0x12,0x36,0xe6,0x7d,
52491 +0x02,0x7f,0x03,0x12,0x36,0xe6,0x90,0x06,0x04,0xe0,0x44,0x80,0xf0,0x90,0x06,0x0a,
52492 +0xe0,0x44,0x07,0xf0,0x12,0x62,0x4c,0xe5,0x60,0x20,0xe0,0x05,0xe4,0x90,0x9e,0x58,
52493 +0xf0,0x22,0x8b,0x14,0x8a,0x15,0x89,0x16,0x12,0x60,0xb1,0xab,0x14,0xaa,0x15,0xa9,
52494 +0x16,0x12,0x29,0xd9,0xf5,0x63,0x14,0x60,0x0e,0x14,0x60,0x1e,0x14,0x60,0x2f,0x24,
52495 +0x03,0x70,0x40,0x7f,0x01,0x80,0x3a,0xab,0x14,0xaa,0x15,0xa9,0x16,0x90,0x00,0x02,
52496 +0x12,0x42,0x20,0xfd,0xe4,0xff,0xd1,0x84,0x80,0x27,0xab,0x14,0xaa,0x15,0xa9,0x16,
52497 +0x90,0x00,0x02,0x12,0x42,0x20,0xfd,0x7f,0x01,0xd1,0x84,0x1f,0x80,0x13,0xab,0x14,
52498 +0xaa,0x15,0xa9,0x16,0x90,0x00,0x02,0x12,0x42,0x20,0xfd,0x7f,0x02,0xd1,0x84,0xe4,
52499 +0xff,0xb1,0xbc,0x22,0xef,0x24,0xfe,0x60,0x0b,0x04,0x70,0x22,0x90,0x9e,0x65,0x74,
52500 +0x01,0xf0,0x80,0x16,0xed,0x70,0x0a,0x90,0x9e,0x62,0xe0,0x90,0x9e,0x65,0xf0,0x80,
52501 +0x05,0x90,0x9e,0x65,0xed,0xf0,0x90,0x9e,0x65,0xe0,0x90,0x9e,0x56,0xf0,0x22,0x53,
52502 +0x61,0xf0,0x43,0x61,0x01,0x12,0x45,0x00,0x12,0x45,0x01,0x53,0x61,0xf0,0x43,0x61,
52503 +0x02,0x22,0x90,0x9e,0xaf,0xef,0xf0,0x12,0x74,0x53,0x90,0x9e,0xaf,0xe0,0x60,0x05,
52504 +0x90,0x05,0x22,0xe4,0xf0,0x53,0x61,0xf0,0x43,0x61,0x04,0x22,0x90,0x06,0x04,0xe0,
52505 +0x54,0xbf,0xf0,0xef,0x60,0x09,0xe5,0x60,0xb4,0x01,0x04,0xe4,0xff,0xd1,0xf6,0x53,
52506 +0x61,0xf0,0x43,0x61,0x0c,0x22,0x8f,0x27,0x12,0x45,0xb0,0xbf,0x01,0x22,0x90,0x9e,
52507 +0x7a,0xe0,0xff,0x7d,0x01,0x12,0x47,0x79,0xab,0x07,0xaa,0x06,0xad,0x03,0xac,0x02,
52508 +0xaf,0x27,0x12,0x60,0x2a,0xaf,0x03,0x12,0x5f,0xf7,0x90,0x04,0x1f,0x74,0x20,0xf0,
52509 +0x22,0x71,0xc3,0xef,0x64,0x01,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,0xf0,0x80,0x58,
52510 +0xe5,0x64,0x54,0x03,0x60,0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x4a,0xe5,0x62,
52511 +0x54,0x0f,0xd3,0x94,0x02,0x40,0x08,0x90,0x01,0xb9,0x74,0x04,0xf0,0x80,0x39,0xe5,
52512 +0x64,0x30,0xe2,0x08,0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,0x2c,0xe5,0x64,0x30,0xe4,
52513 +0x08,0x90,0x01,0xb9,0x74,0x10,0xf0,0x80,0x1f,0x90,0x9e,0x58,0xe0,0x60,0x08,0x90,
52514 +0x01,0xb9,0x74,0x20,0xf0,0x80,0x11,0x90,0x9e,0x5e,0xe0,0x60,0x08,0x90,0x01,0xb9,
52515 +0x74,0x80,0xf0,0x80,0x03,0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,0x04,0xf0,0x7f,0x00,
52516 +0x22,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,
52517 +0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x01,
52518 +0xc4,0x74,0x91,0xf0,0x74,0x57,0xa3,0xf0,0x53,0x91,0xef,0x90,0x00,0x51,0xe0,0xff,
52519 +0x90,0x00,0x55,0xe0,0x5f,0xf5,0x3d,0x90,0x00,0x52,0xe0,0xff,0x90,0x00,0x56,0xe0,
52520 +0x5f,0xf5,0x3e,0xe5,0x3d,0x30,0xe4,0x06,0x90,0x00,0x55,0x74,0x10,0xf0,0xe5,0x3d,
52521 +0x30,0xe5,0x06,0x90,0x00,0x55,0x74,0x20,0xf0,0xe5,0x3d,0x30,0xe6,0x1b,0x90,0x00,
52522 +0x55,0x74,0x40,0xf0,0x90,0x9e,0x42,0xe0,0x54,0x03,0xff,0xbf,0x03,0x0b,0x90,0x9e,
52523 +0x3f,0xe0,0x60,0x05,0x7f,0x01,0x12,0x49,0x1a,0xe5,0x3d,0x30,0xe7,0x15,0x90,0x00,
52524 +0x55,0x74,0x80,0xf0,0x90,0x9e,0x42,0xe0,0x54,0x03,0xff,0xbf,0x03,0x05,0x7f,0x02,
52525 +0x12,0x49,0x1a,0xe5,0x3e,0x30,0xe0,0x06,0x90,0x00,0x56,0x74,0x01,0xf0,0xe5,0x3e,
52526 +0x30,0xe1,0x06,0x90,0x00,0x56,0x74,0x02,0xf0,0xe5,0x3e,0x30,0xe2,0x06,0x90,0x00,
52527 +0x56,0x74,0x04,0xf0,0xe5,0x3e,0x30,0xe3,0x06,0x90,0x00,0x56,0x74,0x08,0xf0,0x90,
52528 +0x01,0xc4,0x74,0x91,0xf0,0x74,0x57,0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,
52529 +0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,
52530 +0xf0,0xd0,0xe0,0x32,0x90,0x01,0xcc,0xe0,0x54,0x0f,0x90,0x9e,0x19,0xf0,0x90,0x9e,
52531 +0x19,0xe0,0xfd,0x70,0x02,0x21,0xb5,0x90,0x9e,0xae,0xe0,0xff,0x74,0x01,0x7e,0x00,
52532 +0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xef,0x5d,0x70,
52533 +0x02,0x21,0xae,0x90,0x9e,0xae,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd0,0x12,0x43,0x5f,
52534 +0xe0,0x90,0x9e,0x1a,0xf0,0x75,0x23,0x01,0x75,0x24,0x9e,0x75,0x25,0x1a,0x75,0x26,
52535 +0x01,0x7b,0x01,0x7a,0x9e,0x79,0x1b,0x12,0x45,0x09,0x90,0x9e,0x1b,0xe0,0xff,0xc4,
52536 +0x13,0x13,0x13,0x54,0x01,0x90,0x9e,0xae,0x30,0xe0,0x59,0xe0,0x75,0xf0,0x02,0x90,
52537 +0x00,0x88,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x1c,0xf0,0x90,0x9e,0xae,0xe0,0x75,0xf0,
52538 +0x02,0x90,0x00,0x89,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x1d,0xf0,0x90,0x9e,0xae,0xe0,
52539 +0x75,0xf0,0x04,0x90,0x01,0xd1,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x1e,0xf0,0x90,0x9e,
52540 +0xae,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd2,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x1f,0xf0,
52541 +0x90,0x9e,0xae,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd3,0x12,0x43,0x5f,0xe0,0x90,0x9e,
52542 +0x20,0xf0,0x80,0x33,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd1,0x12,0x43,0x5f,0xe0,0x90,
52543 +0x9e,0x1c,0xf0,0x90,0x9e,0xae,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd2,0x12,0x43,0x5f,
52544 +0xe0,0x90,0x9e,0x1d,0xf0,0x90,0x9e,0xae,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd3,0x12,
52545 +0x43,0x5f,0xe0,0x90,0x9e,0x1e,0xf0,0xef,0x54,0x7f,0xff,0x7b,0x01,0x7a,0x9e,0x79,
52546 +0x1c,0x31,0xb6,0x90,0x9e,0x19,0xe0,0xff,0x90,0x9e,0xae,0xe0,0xfe,0x74,0x01,0xa8,
52547 +0x06,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0x5f,0x90,0x9e,0x19,0xf0,0x90,0x9e,
52548 +0xae,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0x90,0x01,
52549 +0xcc,0xf0,0x90,0x9e,0xae,0xe0,0x04,0xf0,0xe0,0x54,0x03,0xf0,0x01,0x7e,0x90,0x01,
52550 +0xc6,0xe0,0x44,0x02,0xf0,0x22,0x90,0x9e,0x21,0x12,0x43,0x8b,0xef,0x12,0x43,0x94,
52551 +0x59,0xfc,0x01,0x59,0xf4,0x02,0x5a,0x20,0x03,0x5a,0x29,0x05,0x5a,0x32,0x06,0x5a,
52552 +0x7e,0x07,0x5a,0x3a,0x09,0x5a,0x43,0x0b,0x5a,0x4c,0x0c,0x5a,0x55,0x0d,0x5a,0x5e,
52553 +0x0e,0x5a,0x67,0x1b,0x5a,0x6f,0x1c,0x5a,0x05,0x2d,0x5a,0x0e,0x2e,0x5a,0x17,0x3b,
52554 +0x00,0x00,0x5a,0x77,0x90,0x9e,0x21,0x12,0x43,0x6b,0xe1,0xe9,0x90,0x9e,0x21,0x12,
52555 +0x43,0x6b,0x02,0x71,0xd0,0x90,0x9e,0x21,0x12,0x43,0x6b,0x02,0x72,0x0b,0x90,0x9e,
52556 +0x21,0x12,0x43,0x6b,0x02,0x72,0x53,0x90,0x9e,0x21,0x12,0x43,0x6b,0x02,0x72,0x8c,
52557 +0x90,0x9e,0x21,0x12,0x43,0x6b,0x02,0x72,0xb6,0x90,0x9e,0x21,0x12,0x43,0x6b,0x02,
52558 +0x70,0x4a,0x90,0x9e,0x21,0x12,0x43,0x6b,0x80,0x45,0x90,0x9e,0x21,0x12,0x43,0x6b,
52559 +0x02,0x72,0xfe,0x90,0x9e,0x21,0x12,0x43,0x6b,0x02,0x70,0xa2,0x90,0x9e,0x21,0x12,
52560 +0x43,0x6b,0x02,0x49,0xc2,0x90,0x9e,0x21,0x12,0x43,0x6b,0x02,0x7b,0x29,0x90,0x9e,
52561 +0x21,0x12,0x43,0x6b,0x02,0x4a,0xfc,0x90,0x9e,0x21,0x12,0x43,0x6b,0xe1,0xef,0x90,
52562 +0x9e,0x21,0x12,0x43,0x6b,0xe1,0xd1,0x90,0x01,0xc6,0xe0,0x44,0x01,0xf0,0x22,0x90,
52563 +0x00,0x04,0x12,0x42,0x20,0xff,0x54,0x1f,0xfe,0xef,0x54,0x20,0xc4,0x13,0x54,0x07,
52564 +0xfd,0xaf,0x06,0x90,0x9e,0x24,0xef,0xf0,0xa3,0xed,0xf0,0xa3,0x12,0x43,0x8b,0x90,
52565 +0x9e,0x26,0x12,0x43,0x6b,0x90,0x00,0x03,0x12,0x42,0x20,0x54,0xf0,0xc4,0x54,0x0f,
52566 +0x90,0x9e,0x29,0xf0,0x90,0x00,0x04,0x12,0x42,0x20,0x54,0x40,0xc4,0x13,0x13,0x54,
52567 +0x03,0x90,0x9e,0x2a,0xf0,0x90,0x9e,0x24,0xe0,0xff,0x75,0xf0,0x09,0x90,0x96,0x46,
52568 +0x12,0x43,0x5f,0xad,0x82,0xac,0x83,0x90,0x9e,0x2b,0xec,0xf0,0xa3,0xed,0xf0,0xef,
52569 +0x75,0xf0,0x09,0xa4,0x24,0x44,0xf9,0x74,0x96,0x35,0xf0,0xfa,0x7b,0x01,0xa3,0x12,
52570 +0x43,0x8b,0x90,0x9e,0x26,0x12,0x43,0x6b,0x90,0x00,0x03,0x12,0x42,0x20,0x54,0x0f,
52571 +0xff,0x90,0x9e,0x2d,0x12,0x43,0x6b,0xef,0x12,0x42,0x4d,0x90,0x9e,0x26,0x12,0x43,
52572 +0x6b,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0x90,0x9e,0x2d,0x12,0x43,0x6b,0x90,0x00,
52573 +0x01,0xef,0x12,0x42,0x5f,0x90,0x9e,0x26,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,
52574 +0x20,0xff,0x90,0x9e,0x2b,0xe0,0xfc,0xa3,0xe0,0xfd,0xf5,0x82,0x8c,0x83,0xef,0xf0,
52575 +0x12,0x29,0xd9,0x8d,0x82,0x8c,0x83,0xa3,0xf0,0x90,0x9e,0x29,0xe0,0xfe,0x90,0x9e,
52576 +0x24,0xe0,0xff,0x24,0x82,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0x90,0x9e,
52577 +0x25,0xe0,0xfe,0x75,0xf0,0x09,0xef,0x90,0x96,0x4a,0x12,0x43,0x5f,0xee,0xf0,0x75,
52578 +0xf0,0x09,0xef,0x90,0x96,0x4b,0x12,0x43,0x5f,0x74,0x01,0xf0,0x90,0x9e,0x2a,0xe0,
52579 +0xfe,0x75,0xf0,0x09,0xef,0x90,0x96,0x4c,0x12,0x43,0x5f,0xee,0xf0,0x8f,0x14,0xef,
52580 +0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xaf,0x82,0xf5,0x16,0x8f,0x17,0xe5,
52581 +0x14,0x75,0xf0,0x02,0xa4,0x24,0x02,0xf9,0x74,0x95,0x35,0xf0,0x75,0x18,0x01,0xf5,
52582 +0x19,0x89,0x1a,0x75,0xf0,0x09,0xe5,0x14,0x90,0x96,0x46,0x12,0x43,0x5f,0xaf,0x82,
52583 +0x85,0x83,0x1b,0x8f,0x1c,0xe5,0x14,0x75,0xf0,0x09,0xa4,0x24,0x44,0xf9,0x74,0x96,
52584 +0x35,0xf0,0x75,0x1d,0x01,0xf5,0x1e,0x89,0x1f,0x74,0x82,0x25,0x14,0xf5,0x82,0xe4,
52585 +0x34,0x95,0xf5,0x83,0xe0,0x12,0x43,0x94,0x5c,0x0d,0x00,0x5c,0x22,0x01,0x5c,0x37,
52586 +0x02,0x5c,0x4c,0x03,0x5c,0x75,0x04,0x5c,0x8a,0x05,0x5c,0x9f,0x06,0x5c,0xc5,0x0c,
52587 +0x5c,0xf2,0x0d,0x5d,0x1f,0x0e,0x5d,0x4c,0x0f,0x00,0x00,0x5d,0x80,0xe5,0x14,0x25,
52588 +0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0x74,0x15,
52589 +0x80,0x3c,0xe5,0x14,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,
52590 +0xf0,0xf0,0xa3,0x74,0x10,0x80,0x27,0xe5,0x14,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,
52591 +0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0x74,0x05,0x80,0x12,0xe5,0x14,0x25,0xe0,
52592 +0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0xe4,0xf0,0xe5,
52593 +0x14,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0x74,0x0f,0xf0,0xa3,
52594 +0x74,0x8f,0xf0,0xa1,0x80,0xe5,0x14,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,
52595 +0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0xf5,0x80,0x27,0xe5,0x14,0x25,0xe0,0x24,0xc6,
52596 +0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0xf0,0x80,0x12,0xe5,
52597 +0x14,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe4,0xf0,0xa3,0x74,
52598 +0x0d,0xf0,0xe5,0x14,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe4,
52599 +0xf0,0xa3,0xf0,0xa1,0x80,0x90,0x04,0x47,0xe0,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x12,
52600 +0x42,0x4d,0x90,0x04,0x46,0xe0,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,0x01,0x12,
52601 +0x42,0x5f,0x90,0x04,0x45,0xe0,0x85,0x17,0x82,0x85,0x16,0x83,0xf0,0x90,0x04,0x44,
52602 +0xa1,0x77,0x90,0x04,0x4b,0xe0,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x12,0x42,0x4d,0x90,
52603 +0x04,0x4a,0xe0,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,
52604 +0x04,0x49,0xe0,0x85,0x17,0x82,0x85,0x16,0x83,0xf0,0x90,0x04,0x48,0x80,0x58,0x90,
52605 +0x04,0x4f,0xe0,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x12,0x42,0x4d,0x90,0x04,0x4e,0xe0,
52606 +0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,0x04,0x4d,0xe0,
52607 +0x85,0x17,0x82,0x85,0x16,0x83,0xf0,0x90,0x04,0x4c,0x80,0x2b,0x90,0x04,0x53,0xe0,
52608 +0xab,0x18,0xaa,0x19,0xa9,0x1a,0x12,0x42,0x4d,0x90,0x04,0x52,0xe0,0xab,0x18,0xaa,
52609 +0x19,0xa9,0x1a,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,0x04,0x51,0xe0,0x85,0x17,0x82,
52610 +0x85,0x16,0x83,0xf0,0x90,0x04,0x50,0xe0,0x85,0x17,0x82,0x85,0x16,0x83,0xa3,0xf0,
52611 +0xab,0x18,0xaa,0x19,0xa9,0x1a,0xc0,0x03,0xc0,0x02,0xc0,0x01,0x12,0x29,0xd9,0xff,
52612 +0xab,0x1d,0xaa,0x1e,0xa9,0x1f,0x12,0x29,0xd9,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,
52613 +0x12,0x42,0x4d,0xab,0x18,0xe5,0x1a,0x24,0x01,0xf9,0xe4,0x35,0x19,0xfa,0xc0,0x03,
52614 +0xc0,0x02,0xc0,0x01,0x12,0x29,0xd9,0xff,0xab,0x1d,0xaa,0x1e,0xa9,0x1f,0x90,0x00,
52615 +0x01,0x12,0x42,0x20,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,0x12,0x42,0x4d,0x85,0x17,
52616 +0x82,0x85,0x16,0x83,0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,0x1c,0x82,0x85,0x1b,0x83,
52617 +0xe0,0xfe,0xef,0x5e,0xd0,0x82,0xd0,0x83,0xf0,0x85,0x17,0x82,0x85,0x16,0x83,0xa3,
52618 +0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,0x1c,0x82,0x85,0x1b,0x83,0xa3,0xe0,0xfe,0xef,
52619 +0x5e,0xd0,0x82,0xd0,0x83,0xf0,0xe5,0x14,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,
52620 +0x95,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3b,0x75,0x15,0x0b,0x74,0x01,0x7e,
52621 +0x00,0xa8,0x15,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x14,
52622 +0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,
52623 +0x5f,0x4e,0x60,0x06,0xe5,0x15,0x24,0x10,0x80,0x5d,0x15,0x15,0xe5,0x15,0xc3,0x94,
52624 +0x00,0x50,0xca,0x80,0x56,0xe5,0x14,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,
52625 +0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3d,0x75,0x15,0x0f,0x74,0x01,0x7e,0x00,
52626 +0xa8,0x15,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x14,0x25,
52627 +0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,
52628 +0x4e,0x60,0x08,0x90,0x9e,0x30,0xe5,0x15,0xf0,0x80,0x10,0x15,0x15,0xe5,0x15,0xc3,
52629 +0x94,0x00,0x50,0xc8,0x80,0x05,0xe4,0x90,0x9e,0x30,0xf0,0xe5,0x14,0x25,0xe0,0x24,
52630 +0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3b,0xe4,
52631 +0xf5,0x15,0x74,0x01,0x7e,0x00,0xa8,0x15,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,
52632 +0xd8,0xf9,0xff,0xe5,0x14,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,
52633 +0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x08,0x90,0x9e,0x31,0xe5,0x15,0xf0,0x80,
52634 +0x5b,0x05,0x15,0xe5,0x15,0xb4,0x10,0xca,0x80,0x52,0xe5,0x14,0x25,0xe0,0x24,0x02,
52635 +0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x39,0xe4,0xf5,
52636 +0x15,0x74,0x01,0x7e,0x00,0xa8,0x15,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,
52637 +0xf9,0xff,0xe5,0x14,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,
52638 +0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x06,0xe5,0x15,0x24,0x10,0x80,0x0a,0x05,0x15,
52639 +0xe5,0x15,0xb4,0x0c,0xcc,0x80,0x05,0xe4,0x90,0x9e,0x31,0xf0,0x90,0x9e,0x30,0xe0,
52640 +0xff,0x75,0xf0,0x09,0xe5,0x14,0x90,0x96,0x48,0x12,0x43,0x5f,0xef,0xf0,0x90,0x9e,
52641 +0x31,0xe0,0xfe,0x75,0xf0,0x09,0xe5,0x14,0x90,0x96,0x49,0x12,0x43,0x5f,0xee,0xf0,
52642 +0x74,0x84,0x25,0x14,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0xd3,0x9f,0x40,0x06,
52643 +0x90,0x9e,0x30,0x12,0x62,0x94,0x74,0x84,0x25,0x14,0xf5,0x82,0xe4,0x34,0x04,0xf5,
52644 +0x83,0xe0,0xff,0x90,0x9e,0x31,0xe0,0xfe,0xef,0xc3,0x9e,0x50,0x03,0x12,0x62,0x94,
52645 +0x90,0x9e,0x30,0xe0,0xff,0xd3,0x94,0x13,0x40,0x07,0x90,0x96,0x43,0x74,0x03,0xf0,
52646 +0x22,0xef,0xd3,0x94,0x0b,0x40,0x07,0x90,0x96,0x43,0x74,0x02,0xf0,0x22,0xef,0xd3,
52647 +0x94,0x03,0x40,0x07,0x90,0x96,0x43,0x74,0x01,0xf0,0x22,0xe4,0x90,0x96,0x43,0xf0,
52648 +0x22,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0x54,0x3f,0xfe,0xef,0x54,0x80,0xc4,0x13,
52649 +0x13,0x13,0x54,0x01,0xfd,0xaf,0x06,0x41,0x93,0x12,0x29,0xd9,0xf5,0x60,0x22,0x12,
52650 +0x29,0xd9,0x90,0x95,0x01,0xf0,0x22,0xad,0x07,0x74,0x11,0x2d,0xf5,0x82,0xe4,0x34,
52651 +0xfc,0xf5,0x83,0xe0,0x44,0x01,0xf0,0x90,0x04,0x80,0xe0,0x54,0x0f,0xfc,0x74,0x14,
52652 +0x2d,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xc0,0x4c,0xfd,0x74,0x14,0x2f,
52653 +0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xed,0xf0,0x22,0xef,0x60,0x0f,0x74,0x21,0x2d,
52654 +0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x10,0xf0,0x22,0x74,0x21,0x2d,0xf5,
52655 +0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xef,0xf0,0x22,0xe4,0xf5,0x60,0xf5,0x64,
52656 +0xf5,0x63,0x75,0x62,0x0c,0x75,0x61,0x0c,0x90,0x9e,0x66,0xf0,0x90,0x9e,0x64,0xf0,
52657 +0x90,0x9e,0x63,0xf0,0x90,0x9e,0x65,0x04,0xf0,0x90,0x9e,0x56,0xf0,0xe4,0x90,0x9e,
52658 +0x67,0xf0,0x90,0x9e,0x58,0xf0,0x90,0x9e,0x61,0x74,0x07,0xf0,0xe4,0x90,0x9e,0x57,
52659 +0xf0,0x90,0x9e,0x5f,0xf0,0xa3,0x74,0x03,0xf0,0x90,0x9e,0x5c,0x74,0x0a,0xf0,0xa3,
52660 +0x74,0x05,0xf0,0x90,0x9e,0x5b,0x74,0x14,0xf0,0x90,0x9e,0x62,0x74,0x05,0xf0,0xe4,
52661 +0x90,0x9e,0x5a,0xf0,0x90,0x9e,0x55,0xf0,0x90,0x9e,0x7f,0xf0,0x90,0x9e,0x5e,0xf0,
52662 +0x22,0xe4,0x90,0x9e,0x67,0xf0,0x90,0x9e,0x57,0xf0,0xf5,0x64,0x22,0x7f,0x00,0x22,
52663 +0xe5,0x62,0x30,0xe6,0x19,0xe5,0x62,0x54,0x0f,0xff,0x90,0x9e,0x54,0xe0,0xfe,0x4f,
52664 +0x90,0x01,0x2f,0xf0,0xee,0x64,0x80,0x90,0x9e,0x54,0xf0,0x53,0x62,0xbf,0x22,0xe5,
52665 +0x60,0x64,0x01,0x70,0x68,0xe5,0x63,0x60,0x64,0xe5,0x63,0x64,0x02,0x60,0x06,0xe5,
52666 +0x63,0x64,0x05,0x70,0x27,0x90,0x06,0xab,0xe0,0x90,0x9e,0x56,0xf0,0x90,0x06,0xaa,
52667 +0xe0,0x90,0x9e,0x65,0xf0,0x90,0x9e,0x56,0xe0,0x70,0x07,0x90,0x9e,0x65,0xe0,0xff,
52668 +0x80,0x05,0x90,0x9e,0x56,0xe0,0xff,0x90,0x9e,0x56,0xef,0xf0,0x90,0x9e,0x58,0xe0,
52669 +0x60,0x03,0xe0,0x14,0xf0,0xe4,0x90,0x9e,0x57,0xf0,0x90,0x05,0x58,0x74,0x03,0xf0,
52670 +0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x53,0x64,0xfd,0x53,0x64,
52671 +0xef,0xe5,0x63,0x14,0x24,0xfd,0x50,0x02,0x80,0x03,0x12,0x45,0x53,0x22,0xe4,0xfb,
52672 +0x90,0x9e,0x9c,0x12,0x2a,0x8b,0x00,0x00,0x00,0x00,0xe5,0x63,0x60,0x6a,0xe5,0x60,
52673 +0x64,0x01,0x70,0x64,0xe5,0x63,0x14,0x60,0x2b,0x24,0xfd,0x60,0x27,0x24,0x02,0x24,
52674 +0xfb,0x50,0x02,0x80,0x21,0x90,0x9e,0x56,0xe0,0x14,0xf0,0xe0,0x60,0x04,0xa3,0xe0,
52675 +0x60,0x14,0x90,0x9e,0x56,0xe0,0x70,0x08,0x90,0x9e,0x65,0xe0,0x90,0x9e,0x56,0xf0,
52676 +0x7b,0x01,0x80,0x02,0x7b,0x01,0xeb,0x60,0x2f,0x43,0x64,0x10,0xe4,0x90,0x9e,0x85,
52677 +0xf0,0x90,0x9e,0x57,0xe0,0x75,0xf0,0x03,0xa4,0xff,0x90,0x9e,0x61,0xe0,0x2f,0x12,
52678 +0x44,0x53,0x90,0x01,0x57,0x74,0x05,0xf0,0xe5,0x61,0x54,0x0f,0xc3,0x94,0x04,0x50,
52679 +0x07,0x7d,0x01,0x7f,0x04,0x12,0x54,0xe7,0x22,0xe4,0x90,0x9e,0x15,0xf0,0xe5,0x63,
52680 +0x60,0x79,0x90,0x9e,0x67,0xe0,0x60,0x0d,0xe4,0xf0,0x53,0x64,0xfd,0xe5,0x64,0x54,
52681 +0x07,0x70,0x68,0x80,0x63,0x90,0x9e,0x57,0xe0,0x04,0xf0,0x53,0x64,0xef,0x90,0x9e,
52682 +0x15,0xe0,0xf9,0xff,0x7e,0x00,0x24,0x01,0xfd,0xee,0x33,0xfc,0x90,0x9e,0x57,0xe0,
52683 +0xb5,0x05,0x06,0xe4,0xb5,0x04,0x02,0x80,0x12,0xef,0x24,0x02,0xff,0xe4,0x3e,0xfe,
52684 +0x90,0x9e,0x57,0xe0,0xb5,0x07,0x0a,0xe4,0xb5,0x06,0x06,0x90,0x05,0x58,0xe0,0x04,
52685 +0xf0,0xe9,0xff,0x90,0x9e,0x5c,0xe0,0x2f,0xff,0xe4,0x33,0xfe,0x90,0x9e,0x57,0xe0,
52686 +0xd3,0x9f,0xee,0x64,0x80,0xf8,0x74,0x80,0x98,0x40,0x0d,0xe5,0x60,0xb4,0x01,0x0b,
52687 +0xa3,0xe0,0x70,0x07,0xe0,0x04,0xf0,0x22,0x12,0x44,0xcb,0x22,0x90,0x9e,0x5f,0xe0,
52688 +0xa3,0xe0,0x90,0x05,0x58,0xf0,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,
52689 +0x93,0x12,0x43,0x8b,0x90,0x9e,0x96,0xe0,0x54,0xf0,0x44,0x06,0xff,0xf0,0xed,0x54,
52690 +0x0f,0xc4,0x54,0xf0,0xfe,0xef,0x54,0x0f,0x4e,0xf0,0x90,0x9e,0x93,0x12,0x43,0x6b,
52691 +0x90,0x9e,0x90,0x12,0x43,0x8b,0x7b,0x01,0x7a,0x9e,0x79,0x96,0x12,0x53,0xf1,0xd0,
52692 +0xd0,0x92,0xaf,0x22,0xe0,0xfd,0x74,0x26,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9d,0xf5,
52693 +0x83,0xed,0xf0,0xaf,0x14,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xef,0xc3,0x94,0x20,
52694 +0x50,0x0e,0x74,0x84,0x2f,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xed,0xf0,0x80,0x29,
52695 +0x74,0xa6,0x2f,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xed,0xf0,0x90,0x9e,0x68,0xef,
52696 +0xf0,0x24,0xa6,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x90,0x9e,0x69,0xf0,0x7b,
52697 +0x01,0x7a,0x9e,0x79,0x68,0x7d,0x02,0x51,0x57,0xd0,0xd0,0x92,0xaf,0x22,0x8f,0x0a,
52698 +0x8d,0x0b,0xe5,0x0b,0x54,0x1f,0xf5,0x10,0x74,0x01,0x2f,0xf5,0x82,0xe4,0x34,0x94,
52699 +0xf5,0x83,0xe0,0xf5,0x0e,0x90,0x04,0xfd,0xe0,0xb4,0x01,0x05,0x75,0x11,0x03,0x80,
52700 +0x03,0x75,0x11,0x01,0xeb,0xc3,0x95,0x11,0x40,0x04,0xaf,0x0a,0x80,0x33,0xe5,0x0e,
52701 +0x25,0x0d,0xf5,0x0f,0xe5,0x10,0x90,0x41,0xd6,0x93,0xff,0xe5,0x0f,0xd3,0x9f,0x74,
52702 +0x01,0x40,0x11,0x25,0x0a,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,0xf0,0xad,0x0b,
52703 +0xaf,0x0a,0x41,0xa5,0x25,0x0a,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe5,0x0f,0xf0,
52704 +0x22,0xad,0x07,0x75,0xf0,0x09,0xed,0x90,0x96,0x48,0x12,0x43,0x5f,0xe0,0xff,0x74,
52705 +0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xe0,0x54,0x1f,0xf5,0x12,0xd3,0x9f,
52706 +0x40,0x02,0x8f,0x12,0xe5,0x12,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,
52707 +0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xe5,0x12,0x25,0xe0,0x24,0x66,0xf5,0x82,
52708 +0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,
52709 +0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,
52710 +0xf0,0xa3,0xef,0xf0,0xaf,0x05,0xad,0x12,0x51,0xa5,0xaf,0x12,0x22,0xac,0x07,0xec,
52711 +0xc3,0x94,0x20,0x50,0x0d,0x74,0x84,0x2c,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,
52712 +0x80,0x0b,0x74,0xa6,0x2c,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x54,0x7f,0xf5,
52713 +0x1f,0xe5,0x1f,0x54,0x1f,0xff,0x90,0x9e,0x25,0xf0,0x75,0xf0,0x09,0xec,0x90,0x96,
52714 +0x49,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x27,0xf0,0x75,0xf0,0x09,0xec,0x90,0x96,0x48,
52715 +0x12,0x43,0x5f,0xe0,0xfe,0x90,0x9e,0x28,0xf0,0xec,0x25,0xe0,0x24,0xc6,0xf5,0x82,
52716 +0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x29,0xcb,0xf0,0xa3,0xeb,
52717 +0xf0,0xec,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfb,0xa3,
52718 +0xe0,0x90,0x9e,0x2b,0xcb,0xf0,0xa3,0xeb,0xf0,0xef,0xd3,0x9e,0x40,0x0a,0x90,0x9e,
52719 +0x28,0xe0,0x90,0x9e,0x25,0xf0,0xf5,0x1f,0xed,0x70,0x02,0xa1,0x13,0x90,0x9e,0x26,
52720 +0xed,0xf0,0xe5,0x1f,0x30,0xe6,0x0a,0x90,0x9e,0x25,0xe0,0xf5,0x1f,0xa3,0xe0,0x14,
52721 +0xf0,0x90,0x9e,0x26,0xe0,0x70,0x02,0xa1,0x13,0x90,0x9e,0x25,0xe0,0xff,0xd3,0x94,
52722 +0x00,0x50,0x02,0xa1,0x13,0xe4,0x90,0x9e,0x24,0xf0,0xef,0x14,0x90,0x9e,0x23,0xf0,
52723 +0x90,0x9e,0x27,0xe0,0xfd,0x90,0x9e,0x23,0xe0,0xff,0xd3,0x9d,0x40,0x6b,0xef,0x94,
52724 +0x10,0x40,0x21,0xef,0x24,0xf0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,
52725 +0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x2b,0xe0,0x5e,0xfe,0xa3,0xe0,
52726 +0x5f,0x4e,0x70,0x27,0x90,0x9e,0x23,0xe0,0xff,0xc3,0x94,0x10,0x50,0x33,0x74,0x01,
52727 +0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,
52728 +0x9e,0x29,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x16,0x90,0x9e,0x23,0xe0,0xf5,
52729 +0x1f,0xa3,0xe0,0x04,0xf0,0x90,0x9e,0x26,0xe0,0xff,0x90,0x9e,0x24,0xe0,0x6f,0x60,
52730 +0x08,0x90,0x9e,0x23,0xe0,0x14,0xf0,0x80,0x87,0x90,0x9e,0x26,0xe0,0xff,0x90,0x9e,
52731 +0x24,0xe0,0xc3,0x9f,0x50,0x0d,0x90,0x9e,0x23,0xe0,0xb5,0x05,0x06,0x90,0x9e,0x27,
52732 +0xe0,0xf5,0x1f,0xe5,0x1f,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,
52733 +0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xe5,0x1f,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,
52734 +0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,
52735 +0x13,0xff,0xec,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,
52736 +0xa3,0xef,0xf0,0xaf,0x04,0xad,0x1f,0x51,0xa5,0xaf,0x1f,0x22,0xad,0x07,0xed,0xc3,
52737 +0x94,0x20,0x50,0x0d,0x74,0x84,0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x80,
52738 +0x0b,0x74,0xa6,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x54,0x7f,0xf5,0x1f,
52739 +0xe5,0x1f,0x54,0x1f,0xfc,0x75,0xf0,0x09,0xed,0x90,0x96,0x48,0x12,0x43,0x5f,0xe0,
52740 +0xff,0x90,0x9e,0x23,0xf0,0xed,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,
52741 +0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x24,0xcb,0xf0,0xa3,0xeb,0xf0,0xed,0x25,0xe0,
52742 +0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x26,
52743 +0xcb,0xf0,0xa3,0xeb,0xf0,0xec,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,
52744 +0x83,0xe4,0x93,0xfa,0x74,0x01,0x93,0xfb,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,
52745 +0x34,0x95,0xf5,0x83,0xea,0xf0,0xa3,0xeb,0xf0,0xec,0xc3,0x9f,0x40,0x02,0xc1,0x7a,
52746 +0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xec,0xf0,0x04,0xfb,0x90,0x9e,
52747 +0x23,0xe0,0xff,0xeb,0xd3,0x9f,0x40,0x02,0xc1,0xab,0xeb,0xc3,0x94,0x10,0x40,0x21,
52748 +0xeb,0x24,0xf0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,
52749 +0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x24,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x70,
52750 +0x23,0xeb,0xc3,0x94,0x10,0x50,0x40,0x74,0x01,0x7e,0x00,0xa8,0x03,0x08,0x80,0x05,
52751 +0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x26,0xe0,0x5e,0xfe,0xa3,0xe0,
52752 +0x5f,0x4e,0x60,0x23,0xbb,0x11,0x09,0x90,0x9e,0x25,0xe0,0x30,0xe7,0x02,0x7b,0x17,
52753 +0xeb,0x64,0x13,0x60,0x03,0xbb,0x12,0x09,0x90,0x9e,0x24,0xe0,0x30,0xe0,0x02,0x7b,
52754 +0x18,0xac,0x03,0x8c,0x1f,0x80,0x34,0x0b,0x80,0x84,0x90,0x9e,0x23,0xe0,0xfb,0x6c,
52755 +0x70,0x69,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xec,0xf0,0x75,0xf0,
52756 +0x09,0xed,0x90,0x96,0x4a,0x12,0x43,0x5f,0xe0,0xb4,0x01,0x0c,0xe5,0x1f,0x20,0xe6,
52757 +0x07,0xec,0x44,0x40,0xf5,0x1f,0x80,0x03,0xaf,0x1f,0x22,0xec,0x25,0xe0,0x24,0x9e,
52758 +0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xec,0x25,
52759 +0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,
52760 +0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,
52761 +0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0x80,0x5b,0xec,0xd3,0x9b,0x40,0x56,
52762 +0x90,0x9e,0x23,0xe0,0xff,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xef,
52763 +0xf0,0xac,0x07,0x8f,0x1f,0xec,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,
52764 +0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xec,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,
52765 +0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,
52766 +0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,
52767 +0xa3,0xef,0xf0,0xaf,0x1f,0x22,0x74,0x01,0x2d,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,
52768 +0xe4,0xf0,0xaf,0x05,0xe5,0x1f,0x44,0x80,0xfd,0x51,0xa5,0xe5,0x1f,0x44,0x80,0xff,
52769 +0x22,0xef,0xc3,0x94,0x20,0x50,0x39,0xef,0x30,0xe0,0x17,0xed,0xc4,0x54,0xf0,0xfd,
52770 +0xef,0xc3,0x13,0xfe,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,0x0f,
52771 +0x80,0x10,0xef,0xc3,0x13,0xfe,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,
52772 +0x54,0xf0,0xf0,0x74,0xa4,0x2e,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x4d,0xf0,
52773 +0x22,0xe4,0xf5,0x14,0xe5,0x14,0xb4,0x20,0x14,0x90,0x9a,0xc5,0xe0,0x04,0xf0,0x90,
52774 +0x95,0x01,0xe0,0xff,0x90,0x9a,0xc5,0xe0,0xb5,0x07,0x02,0xe4,0xf0,0x75,0xf0,0x09,
52775 +0xe5,0x14,0x90,0x96,0x4b,0x12,0x43,0x5f,0xe0,0x64,0x01,0x60,0x03,0x02,0x6e,0x6a,
52776 +0xe5,0x14,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe0,0xfe,0xa3,
52777 +0xe0,0xd3,0x94,0x00,0xee,0x94,0x00,0x50,0x03,0x02,0x6e,0x6a,0xe5,0x14,0x94,0x20,
52778 +0x40,0x09,0x90,0x9a,0xc5,0xe0,0x60,0x03,0x02,0x6e,0x76,0xe5,0x14,0x75,0xf0,0x0a,
52779 +0xa4,0x24,0x00,0xf9,0x74,0x90,0x35,0xf0,0x75,0x18,0x01,0xf5,0x19,0x89,0x1a,0xe5,
52780 +0x14,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe0,0xff,0xa3,0xe0,
52781 +0x90,0x9e,0x1b,0xcf,0xf0,0xa3,0xef,0xf0,0xe5,0x14,0x25,0xe0,0x24,0xc4,0xf5,0x82,
52782 +0xe4,0x34,0x98,0xf5,0x83,0xe0,0xff,0xa3,0xe0,0x90,0x9e,0x1d,0xcf,0xf0,0xa3,0xef,
52783 +0xf0,0xe5,0x14,0xc3,0x94,0x20,0x50,0x14,0x74,0x84,0x25,0x14,0xf5,0x82,0xe4,0x34,
52784 +0x04,0xf5,0x83,0xe0,0x54,0x3f,0x90,0x9e,0x19,0xf0,0x80,0x12,0x74,0xa6,0x25,0x14,
52785 +0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x54,0x3f,0x90,0x9e,0x19,0xf0,0x90,0x9e,
52786 +0x19,0xe0,0xfe,0x54,0x1f,0xa3,0xf0,0x75,0xf0,0x09,0xe5,0x14,0x90,0x96,0x48,0x12,
52787 +0x43,0x5f,0xe0,0x90,0x9e,0x20,0xf0,0x74,0xe6,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9c,
52788 +0xf5,0x83,0xe0,0xc3,0x94,0x05,0x40,0x02,0x41,0x9f,0x90,0x9e,0x20,0xe0,0xff,0x90,
52789 +0x9e,0x1a,0xe0,0x9f,0x40,0x13,0x90,0x9e,0x20,0xe0,0x90,0x9e,0x1a,0xf0,0xee,0x54,
52790 +0x40,0xfe,0x90,0x9e,0x19,0xf0,0xef,0x4e,0xf0,0x90,0x04,0xfd,0xe0,0x54,0x05,0x64,
52791 +0x01,0x70,0x29,0x90,0x9e,0x1a,0xe0,0xff,0x90,0x41,0x4a,0x93,0xfe,0x74,0x44,0x25,
52792 +0x14,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xc3,0x9e,0x40,0x06,0xef,0x90,0x40,
52793 +0xda,0x80,0x30,0x90,0x9e,0x1a,0xe0,0x90,0x40,0xf6,0x80,0x27,0x90,0x9e,0x1a,0xe0,
52794 +0xff,0x90,0x41,0x4a,0x93,0xfe,0x74,0x44,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9a,0xf5,
52795 +0x83,0xe0,0xc3,0x9e,0x40,0x06,0xef,0x90,0x41,0x12,0x80,0x07,0x90,0x9e,0x1a,0xe0,
52796 +0x90,0x41,0x2e,0x93,0x90,0x9e,0x1f,0xf0,0x90,0x9e,0x1f,0xe0,0x75,0xf0,0x06,0xa4,
52797 +0x24,0x50,0xf9,0x74,0x40,0x35,0xf0,0xfa,0x7b,0xff,0x8b,0x15,0xf5,0x16,0x89,0x17,
52798 +0xe5,0x14,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xf5,0x1b,
52799 +0xa3,0xe0,0xf5,0x1c,0x12,0x29,0xd9,0xff,0x7e,0x00,0xab,0x18,0xaa,0x19,0xa9,0x1a,
52800 +0x12,0x42,0x97,0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,
52801 +0x1b,0xf5,0x1b,0xab,0x15,0xaa,0x16,0xa9,0x17,0x90,0x00,0x01,0x12,0x42,0x20,0xff,
52802 +0x7e,0x00,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,0x02,0x12,0x42,0xc2,0xfd,0xac,
52803 +0xf0,0x12,0x29,0xf2,0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,0xf5,0x1b,0xab,0x15,
52804 +0xaa,0x16,0xa9,0x17,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0x7e,0x00,0xab,0x18,0xaa,
52805 +0x19,0xa9,0x1a,0x90,0x00,0x04,0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,
52806 +0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,0xf5,0x1b,0xab,0x15,0xaa,0x16,0xa9,0x17,0x90,
52807 +0x00,0x03,0x12,0x42,0x20,0xff,0x7e,0x00,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,
52808 +0x06,0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,0x25,0x1c,0xf5,0x1c,0xee,
52809 +0x35,0x1b,0xf5,0x1b,0xab,0x15,0xaa,0x16,0xa9,0x17,0x90,0x00,0x04,0x12,0x42,0x20,
52810 +0xff,0x7e,0x00,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,0x08,0x12,0x42,0xc2,0xfd,
52811 +0xac,0xf0,0x12,0x29,0xf2,0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,0xf5,0x1b,0xab,
52812 +0x15,0xaa,0x16,0xa9,0x17,0x90,0x00,0x05,0x12,0x42,0x20,0xff,0x7e,0x00,0x90,0x9e,
52813 +0x1b,0xe0,0xfc,0xa3,0xe0,0xfd,0x12,0x29,0xf2,0xd3,0xe5,0x1c,0x9f,0xe5,0x1b,0x9e,
52814 +0x40,0x0c,0xe5,0x1c,0x9f,0xf5,0x1c,0xe5,0x1b,0x9e,0xf5,0x1b,0x80,0x05,0xe4,0xf5,
52815 +0x1b,0xf5,0x1c,0xe5,0x14,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,
52816 +0xe5,0x1b,0xf0,0xa3,0xe5,0x1c,0xf0,0x90,0x9e,0x19,0xe0,0x25,0xe0,0x24,0x66,0xf5,
52817 +0x82,0xe4,0x34,0x41,0xf5,0x83,0xc3,0x74,0x01,0x93,0x95,0x1c,0xe4,0x93,0x95,0x1b,
52818 +0x50,0x07,0xaf,0x14,0x12,0x65,0x5c,0xa1,0x31,0x90,0x9e,0x19,0xe0,0x25,0xe0,0x24,
52819 +0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xd3,0x74,0x01,0x93,0x95,0x1c,0xe4,0x93,
52820 +0x95,0x1b,0x50,0x02,0xa1,0x31,0x7d,0x01,0xaf,0x14,0x12,0x63,0xbd,0xa1,0x31,0x74,
52821 +0xe6,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xfc,0x64,0x05,0x60,0x02,
52822 +0x81,0x3a,0x90,0x96,0x43,0xe0,0xff,0xb4,0x03,0x0b,0x90,0x9e,0x1a,0xe0,0xc3,0x94,
52823 +0x19,0x40,0x3d,0x80,0x2e,0xef,0xb4,0x02,0x0b,0x90,0x9e,0x1a,0xe0,0xc3,0x94,0x11,
52824 +0x40,0x2e,0x80,0x1f,0x90,0x96,0x43,0xe0,0xff,0xb4,0x01,0x0b,0x90,0x9e,0x1a,0xe0,
52825 +0xc3,0x94,0x0a,0x40,0x1b,0x80,0x0c,0xef,0x70,0x11,0x90,0x9e,0x1a,0xe0,0xc3,0x94,
52826 +0x03,0x40,0x0d,0x90,0x9a,0x84,0x74,0x01,0xf0,0x80,0x05,0xe4,0x90,0x9a,0x84,0xf0,
52827 +0x74,0x84,0x25,0x14,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x1e,0x74,0x44,
52828 +0x25,0x14,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xff,0xc3,0x94,0x30,0x50,0x02,
52829 +0x61,0xe7,0x90,0x9a,0x84,0xe0,0x64,0x01,0x60,0x02,0x61,0xe7,0x74,0x85,0x25,0x14,
52830 +0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0x64,0x0a,0x60,0x51,0xef,0x24,0x05,0xff,
52831 +0xe4,0x33,0xfe,0x74,0x41,0x25,0x14,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe0,0xfd,
52832 +0xd3,0x9f,0xee,0x64,0x80,0xf8,0x74,0x80,0x98,0x50,0x32,0xed,0x24,0x05,0xff,0xe4,
52833 +0x33,0xfe,0x74,0x44,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xd3,0x9f,
52834 +0xee,0x64,0x80,0xf8,0x74,0x80,0x98,0x50,0x14,0x74,0x26,0x25,0x14,0xf5,0x82,0xe4,
52835 +0x34,0x9d,0xf5,0x83,0xe0,0xff,0x90,0x9e,0x1a,0xe0,0x6f,0x60,0x3d,0x74,0x44,0x25,
52836 +0x14,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xff,0xd3,0x94,0x42,0x40,0x05,0x75,
52837 +0x1e,0x05,0x80,0x0e,0xef,0xd3,0x94,0x39,0x40,0x05,0x75,0x1e,0x03,0x80,0x03,0x75,
52838 +0x1e,0x01,0x74,0x41,0x25,0x14,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xef,0xf0,0x74,
52839 +0x85,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9a,0x80,0x29,0x74,0xe6,0x25,0x14,0xf5,0x82,
52840 +0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x74,0x85,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9a,
52841 +0xf5,0x83,0xe0,0x04,0xf0,0x80,0x10,0xe4,0xf5,0x1e,0x74,0xe6,0x25,0x14,0xf5,0x82,
52842 +0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x90,0x9e,0x1a,0xe0,0xff,0x74,0x26,0x25,0x14,
52843 +0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xef,0xf0,0x74,0x84,0x25,0x14,0xf5,0x82,0xe4,
52844 +0x34,0x98,0xf5,0x83,0xe5,0x1e,0xf0,0x75,0xf0,0x09,0xe5,0x14,0x90,0x96,0x4c,0x12,
52845 +0x43,0x5f,0xe0,0xb4,0x01,0x10,0xe4,0xf5,0x1e,0x74,0xe6,0x25,0x14,0xf5,0x82,0xe4,
52846 +0x34,0x9c,0xf5,0x83,0xe4,0xf0,0xad,0x1e,0xa1,0x2c,0xec,0x64,0x06,0x60,0x02,0xa1,
52847 +0x31,0xf5,0x1b,0xf5,0x1c,0x90,0x42,0x13,0x93,0xff,0x7e,0x00,0x90,0x9e,0x1b,0xe0,
52848 +0xfc,0xa3,0xe0,0xfd,0x12,0x29,0xf2,0x90,0x9e,0x21,0xee,0xf0,0xa3,0xef,0xf0,0x74,
52849 +0x84,0x25,0x14,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x1e,0xe4,0xf5,0x1d,
52850 +0xab,0x18,0xaa,0x19,0xa9,0x1a,0x75,0xf0,0x02,0xe5,0x1d,0xa4,0xf5,0x82,0x85,0xf0,
52851 +0x83,0x12,0x42,0xc2,0xfd,0xac,0xf0,0xe5,0x1d,0x90,0x42,0x0e,0x93,0xff,0x7e,0x00,
52852 +0x12,0x29,0xf2,0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,0xf5,0x1b,0xc3,0x90,0x9e,
52853 +0x22,0xe0,0x95,0x1c,0x90,0x9e,0x21,0xe0,0x95,0x1b,0x40,0x07,0x05,0x1d,0xe5,0x1d,
52854 +0xb4,0x05,0xbd,0xe5,0x1d,0xc3,0x13,0xf5,0x1d,0xe5,0x1e,0xb4,0x01,0x06,0xe5,0x1d,
52855 +0x70,0x46,0x80,0x13,0xe5,0x1e,0xb4,0x03,0x15,0xe5,0x1d,0x70,0x05,0x75,0x1e,0x03,
52856 +0x80,0x39,0xe5,0x1d,0xb4,0x01,0x05,0x75,0x1e,0x01,0x80,0x2f,0x80,0x2a,0xe5,0x1e,
52857 +0xb4,0x05,0x28,0xe5,0x1d,0x70,0x05,0x75,0x1e,0x05,0x80,0x0d,0xe5,0x1d,0xb4,0x01,
52858 +0x05,0x75,0x1e,0x03,0x80,0x03,0x75,0x1e,0x01,0xd3,0x90,0x9e,0x1e,0xe0,0x94,0x03,
52859 +0x90,0x9e,0x1d,0xe0,0x94,0x00,0x40,0x03,0xe4,0xf5,0x1e,0xd3,0x90,0x9e,0x1e,0xe0,
52860 +0x94,0x03,0x90,0x9e,0x1d,0xe0,0x94,0x00,0x40,0x03,0xe4,0xf5,0x1e,0x74,0x84,0x25,
52861 +0x14,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe5,0x1e,0xf0,0xfd,0xaf,0x14,0x12,0x67,
52862 +0x61,0x74,0xe6,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xd3,0x94,0x05,
52863 +0x74,0xe6,0x50,0x0e,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x04,0xf0,
52864 +0x80,0x0b,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x90,0x9e,0x1d,
52865 +0xe0,0xfe,0xa3,0xe0,0xff,0xc3,0x74,0xff,0x9f,0xfd,0x74,0xff,0x9e,0xfc,0xe5,0x14,
52866 +0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xfa,0xa3,0xe0,0xd3,
52867 +0x9d,0xea,0x9c,0xe5,0x14,0x50,0x13,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9a,
52868 +0xf5,0x83,0xee,0x8f,0xf0,0x12,0x42,0x81,0x80,0x10,0x25,0xe0,0x24,0xc6,0xf5,0x82,
52869 +0xe4,0x34,0x9a,0xf5,0x83,0x74,0xff,0xf0,0xa3,0xf0,0xe5,0x14,0x25,0xe0,0x24,0x44,
52870 +0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0xff,0xc3,0x74,0xff,0x9f,
52871 +0xfd,0x74,0xff,0x9e,0xfc,0xe5,0x14,0x25,0xe0,0x24,0x46,0xf5,0x82,0xe4,0x34,0x9b,
52872 +0xf5,0x83,0xe0,0xfa,0xa3,0xe0,0xd3,0x9d,0xea,0x9c,0xe5,0x14,0x50,0x13,0x25,0xe0,
52873 +0x24,0x46,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xee,0x8f,0xf0,0x12,0x42,0x81,0x80,
52874 +0x10,0x25,0xe0,0x24,0x46,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xff,0xf0,0xa3,
52875 +0xf0,0xab,0x18,0xaa,0x19,0xa9,0x1a,0xe4,0xf5,0xf0,0x12,0x42,0xfa,0xab,0x18,0xaa,
52876 +0x19,0xa9,0x1a,0x90,0x00,0x02,0xe4,0xf5,0xf0,0x12,0x43,0x19,0x90,0x00,0x04,0xe4,
52877 +0xf5,0xf0,0x12,0x43,0x19,0x90,0x00,0x06,0xe4,0xf5,0xf0,0x12,0x43,0x19,0x90,0x00,
52878 +0x08,0xe4,0xf5,0xf0,0x12,0x43,0x19,0xe5,0x14,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,
52879 +0x34,0x93,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xe5,0x14,0x25,0xe0,0x24,0xc4,0xf5,0x82,
52880 +0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xe5,0x14,0x25,0xe0,0x24,0x44,0xf5,
52881 +0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0x05,0x14,0xe5,0x14,0xc3,0x94,
52882 +0x40,0x50,0x03,0x02,0x67,0xa4,0x22,0x90,0x04,0x44,0x74,0x11,0xf0,0xa3,0x74,0xf0,
52883 +0xf0,0xa3,0x74,0x0f,0xf0,0xa3,0xe4,0xf0,0xfd,0x74,0xa4,0x2d,0xf5,0x82,0xe4,0x34,
52884 +0x04,0xf5,0x83,0xe4,0xf0,0x0d,0xbd,0x10,0xf0,0xe4,0x90,0x9a,0xc5,0xf0,0x90,0x95,
52885 +0x01,0x04,0xf0,0xe4,0xfd,0x75,0xf0,0x0a,0xed,0x90,0x90,0x00,0x12,0x43,0x5f,0xe4,
52886 +0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x02,0x12,0x43,0x5f,0xe4,0xf0,0xa3,
52887 +0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x04,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,
52888 +0xf0,0x0a,0xed,0x90,0x90,0x06,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,
52889 +0xed,0x90,0x90,0x08,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x74,0x26,0x2d,0xf5,0x82,
52890 +0xe4,0x34,0x9d,0xf5,0x83,0x74,0x13,0xf0,0x74,0x85,0x2d,0xf5,0x82,0xe4,0x34,0x9a,
52891 +0xf5,0x83,0xe4,0xf0,0x74,0x84,0x2d,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,
52892 +0xed,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,
52893 +0xed,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,
52894 +0xed,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,
52895 +0xed,0x25,0xe0,0x24,0x44,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,
52896 +0xed,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,
52897 +0xed,0x25,0xe0,0x24,0x46,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,
52898 +0x74,0x86,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x74,0x46,0x2d,0xf5,
52899 +0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x74,0xe6,0x2d,0xf5,0x82,0xe4,0x34,0x9c,
52900 +0xf5,0x83,0xe4,0xf0,0x90,0x41,0xc4,0x93,0xfe,0x74,0x01,0x93,0xff,0x90,0x41,0x8c,
52901 +0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,
52902 +0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0x75,
52903 +0xf0,0x09,0xed,0x90,0x96,0x4b,0x12,0x43,0x5f,0x74,0x01,0xf0,0x75,0xf0,0x09,0xed,
52904 +0x90,0x96,0x4a,0x12,0x43,0x5f,0x74,0x01,0xf0,0x74,0x82,0x2d,0xf5,0x82,0xe4,0x34,
52905 +0x95,0xf5,0x83,0x74,0x0c,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x46,0x12,0x43,0x5f,
52906 +0x74,0xff,0xf0,0xa3,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x44,0x12,0x43,0x5f,0xe4,
52907 +0xf0,0xa3,0x74,0x0f,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x48,0x12,0x43,0x5f,0x74,
52908 +0x13,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x49,0x12,0x43,0x5f,0xe4,0xf0,0xed,0xc3,
52909 +0x94,0x20,0x50,0x0f,0x74,0x84,0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0x74,0x13,
52910 +0xf0,0x80,0x0d,0x74,0xa6,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0x74,0x13,0xf0,
52911 +0x0d,0xed,0x64,0x40,0x60,0x03,0x02,0x6e,0xa5,0x22,0x12,0x29,0xd9,0xf5,0x14,0xc3,
52912 +0x94,0x40,0x50,0x15,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0x74,0x44,0x25,0x14,0xf5,
52913 +0x82,0xe4,0x34,0x9a,0xf5,0x83,0xef,0xf0,0x22,0xe5,0x14,0xb4,0x40,0x0a,0x90,0x00,
52914 +0x02,0x12,0x42,0x20,0x90,0x96,0x42,0xf0,0x22,0x90,0x9e,0x30,0x12,0x43,0x8b,0x90,
52915 +0x9e,0x33,0xe0,0x54,0xf0,0x44,0x02,0xf0,0x54,0x0f,0x44,0xc0,0xf0,0x90,0x9e,0x30,
52916 +0x12,0x43,0x6b,0x90,0x9e,0x90,0x12,0x43,0x8b,0x7b,0x01,0x7a,0x9e,0x79,0x33,0x02,
52917 +0x53,0xf1,0x90,0x00,0x02,0x12,0x42,0x20,0xfd,0x90,0x00,0x01,0x12,0x42,0x20,0xfc,
52918 +0xed,0xc3,0x94,0x40,0x40,0x02,0xe4,0xfd,0xec,0xc3,0x94,0x40,0x40,0x02,0xe4,0xfc,
52919 +0xed,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xfa,0xa3,0xe0,
52920 +0xfb,0xea,0x90,0x9e,0x24,0xf0,0xeb,0xa3,0xf0,0xed,0x25,0xe0,0x24,0x46,0xf5,0x82,
52921 +0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfa,0xa3,0xe0,0xfb,0xea,0x90,0x9e,0x26,0xf0,0xeb,
52922 +0xa3,0xf0,0xa3,0xed,0xf0,0xa3,0x74,0xff,0xf0,0xec,0x25,0xe0,0x24,0xc6,0xf5,0x82,
52923 +0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xfa,0xa3,0xe0,0xfb,0xea,0x90,0x9e,0x2a,0xf0,0xeb,
52924 +0xa3,0xf0,0xec,0x25,0xe0,0x24,0x46,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfa,
52925 +0xa3,0xe0,0xfb,0xea,0x90,0x9e,0x2c,0xf0,0xeb,0xa3,0xf0,0xa3,0xec,0xf0,0xa3,0x74,
52926 +0xff,0xf0,0xed,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe4,0xf0,
52927 +0xa3,0xf0,0xed,0x25,0xe0,0x24,0x46,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe4,0xf0,
52928 +0xa3,0xf0,0xec,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe4,0xf0,
52929 +0xa3,0xf0,0xec,0x25,0xe0,0x24,0x46,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe4,0xf0,
52930 +0xa3,0xf0,0x7b,0x01,0x7a,0x9e,0x79,0x24,0x01,0x79,0xd3,0x10,0xaf,0x01,0xc3,0xc0,
52931 +0xd0,0x90,0x9e,0xa4,0xee,0xf0,0xa3,0xef,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,
52932 +0xa4,0xe0,0xfe,0xa3,0xe0,0xf5,0x82,0x8e,0x83,0xe0,0x60,0x2d,0xc3,0x90,0x9e,0xa7,
52933 +0xe0,0x94,0xe8,0x90,0x9e,0xa6,0xe0,0x94,0x03,0x40,0x0b,0x90,0x01,0xc6,0xe0,0x44,
52934 +0x10,0xf0,0x7f,0x00,0x80,0x15,0x90,0x9e,0xa6,0xe4,0x75,0xf0,0x01,0x12,0x42,0x81,
52935 +0x7f,0x0a,0x7e,0x00,0x12,0x37,0x54,0x80,0xc5,0x7f,0x01,0xd0,0xd0,0x92,0xaf,0x22,
52936 +0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x24,0x12,0x2a,0x8b,0x00,0x00,0x00,
52937 +0x00,0x90,0x00,0x01,0x12,0x42,0x20,0x90,0x9e,0x66,0xf0,0x90,0x00,0x03,0x12,0x42,
52938 +0x20,0x90,0x9e,0x55,0xf0,0x12,0x56,0x22,0x90,0x01,0xe5,0xe5,0x63,0xf0,0x90,0x9e,
52939 +0x66,0xe0,0x90,0x01,0xe6,0xf0,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x00,0x02,0x12,0x42,
52940 +0x20,0xff,0x30,0xe0,0x25,0x12,0x29,0xd9,0x90,0x9e,0x5c,0xf0,0x90,0x00,0x01,0x12,
52941 +0x42,0x20,0x90,0x9e,0x5d,0xf0,0xef,0xc3,0x13,0x54,0x7f,0x90,0x9e,0x5b,0xf0,0x90,
52942 +0x00,0x03,0x12,0x42,0x20,0x90,0x9e,0x62,0xf0,0x22,0x90,0x9e,0x5c,0x74,0x0a,0xf0,
52943 +0x90,0x9e,0x5d,0x74,0x05,0xf0,0x90,0x9e,0x5b,0x74,0x14,0xf0,0x90,0x9e,0x62,0x74,
52944 +0x05,0xf0,0x22,0x12,0x29,0xd9,0x30,0xe0,0x19,0xc3,0x13,0x54,0x7f,0x90,0x9e,0x61,
52945 +0xf0,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0x90,0x9e,0x5f,0xe4,0xf0,0xa3,0xef,0xf0,
52946 +0x80,0x0f,0x90,0x9e,0x61,0x74,0x07,0xf0,0x90,0x9e,0x5f,0xe4,0xf0,0xa3,0x74,0x03,
52947 +0xf0,0x90,0x9e,0x5f,0xe0,0xa3,0xe0,0x90,0x05,0x58,0xf0,0x22,0x90,0x9e,0x24,0x12,
52948 +0x2a,0x8b,0x00,0x00,0x00,0x00,0x12,0x29,0xd9,0x60,0x0d,0x90,0x9e,0x5e,0xf0,0xe4,
52949 +0xfd,0x7f,0x04,0x12,0x54,0xe7,0x80,0x05,0xe4,0x90,0x9e,0x5e,0xf0,0x90,0x9e,0x5e,
52950 +0xe0,0x90,0x01,0xe7,0xf0,0x22,0x90,0x02,0x09,0xe0,0xfd,0x12,0x29,0xd9,0xfe,0xaf,
52951 +0x05,0xed,0x2e,0x90,0x9e,0x78,0xf0,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0xed,0x2f,
52952 +0x90,0x9e,0x79,0xf0,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0xed,0x2f,0x90,0x9e,0x7a,
52953 +0xf0,0x90,0x00,0x03,0x12,0x42,0x20,0xff,0xed,0x2f,0x90,0x9e,0x7b,0xf0,0x90,0x00,
52954 +0x04,0x12,0x42,0x20,0xff,0xae,0x05,0xed,0x2f,0x90,0x9e,0x7c,0xf0,0x22,0xd3,0x10,
52955 +0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x24,0x12,0x43,0x8b,0x90,0x9e,0x24,0x12,0x43,
52956 +0x6b,0x90,0x00,0x01,0x12,0x42,0xc2,0xfa,0xe5,0xf0,0x24,0x00,0xff,0xe4,0x3a,0xfe,
52957 +0x90,0x9e,0x24,0x12,0x43,0x6b,0x90,0x00,0x01,0xee,0x8f,0xf0,0x12,0x43,0x19,0x12,
52958 +0x29,0xd9,0xff,0x60,0x2d,0xb5,0x65,0x16,0x90,0x9e,0x24,0x12,0x43,0x6b,0x90,0x00,
52959 +0x01,0x12,0x42,0xc2,0x65,0x67,0x70,0x04,0xe5,0x66,0x65,0xf0,0x60,0x24,0x90,0x9e,
52960 +0x24,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,0xc2,0xff,0xae,0xf0,0x12,0x4e,0x37,
52961 +0x80,0x10,0x90,0x9e,0x24,0x12,0x43,0x6b,0x12,0x29,0xd9,0x65,0x65,0x60,0x03,0x12,
52962 +0x44,0xc2,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x06,0x34,0x74,0xff,0xf0,0xe4,0xa3,0xf0,
52963 +0xa3,0xf0,0xa3,0xf0,0x22,0x90,0x06,0x34,0xe0,0x60,0x24,0x14,0x70,0x1a,0x7b,0x01,
52964 +0x7a,0x06,0x79,0x35,0x7f,0xf9,0x7e,0x01,0x71,0xb0,0xbf,0x01,0x09,0x90,0x06,0x35,
52965 +0xe0,0x54,0x0f,0xf0,0x80,0x04,0x80,0x00,0x80,0xcd,0xe4,0x90,0x06,0x34,0xf0,0x22,
52966 +0x8e,0x14,0x8f,0x15,0x8b,0x16,0x8a,0x17,0x89,0x18,0xe4,0x90,0x9e,0x19,0xf0,0xef,
52967 +0x90,0x00,0x31,0xf0,0x12,0x4d,0x45,0xe5,0x14,0x54,0x03,0xff,0x90,0x00,0x32,0xe0,
52968 +0x54,0xfc,0x4f,0xf0,0x12,0x4d,0x45,0x90,0x00,0x33,0xe0,0x54,0x7f,0xf0,0x12,0x4d,
52969 +0x45,0x90,0x00,0x33,0xe0,0x20,0xe7,0x0e,0x90,0x9e,0x19,0xe0,0xc3,0x94,0x64,0x50,
52970 +0x05,0xe0,0x04,0xf0,0x80,0xeb,0x90,0x9e,0x19,0xe0,0xc3,0x94,0x64,0x50,0x10,0x90,
52971 +0x00,0x30,0xe0,0xab,0x16,0xaa,0x17,0xa9,0x18,0x12,0x42,0x4d,0x7f,0x01,0x22,0x7f,
52972 +0x00,0x22,0xe4,0x90,0x9e,0xac,0xf0,0xa3,0xf0,0x90,0x05,0xf8,0xe0,0x70,0x0f,0xa3,
52973 +0xe0,0x70,0x0b,0xa3,0xe0,0x70,0x07,0xa3,0xe0,0x70,0x03,0x7f,0x01,0x22,0xd3,0x90,
52974 +0x9e,0xad,0xe0,0x94,0xe8,0x90,0x9e,0xac,0xe0,0x94,0x03,0x40,0x03,0x7f,0x00,0x22,
52975 +0x7f,0x32,0x7e,0x00,0x12,0x37,0x54,0x90,0x9e,0xac,0xe4,0x75,0xf0,0x01,0x12,0x42,
52976 +0x81,0x80,0xc6,0x90,0x00,0x11,0xe0,0x44,0x09,0xf0,0x12,0x4d,0x45,0x90,0x9d,0xff,
52977 +0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x78,0x7e,0x08,0x12,0x2f,0xd9,
52978 +0x90,0x9e,0x03,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,
52979 +0x12,0x2f,0xd9,0x90,0x9e,0x07,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
52980 +0x00,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,0x0b,0x12,0x43,0x53,0x90,0x80,0x85,0x12,
52981 +0x2a,0x7f,0x7f,0x70,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x59,0x12,0x2a,0x8b,0x00,
52982 +0x03,0x2d,0x95,0xe4,0xfd,0xff,0x12,0x34,0x81,0x90,0x9e,0x80,0xe0,0xb4,0x01,0x11,
52983 +0x90,0x80,0x59,0x12,0x2a,0x8b,0x00,0x03,0x2d,0x95,0xe4,0xfd,0x7f,0x01,0x12,0x34,
52984 +0x81,0x22,0x7f,0x78,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xff,0x12,0x2a,0x7f,0x7f,
52985 +0x04,0x7e,0x0c,0x12,0x27,0xde,0x90,0x9e,0x03,0x12,0x2a,0x7f,0x7f,0x00,0x7e,0x08,
52986 +0x12,0x27,0xde,0x90,0x9e,0x07,0x12,0x2a,0x7f,0x90,0x9e,0x80,0xe0,0x90,0x9d,0xff,
52987 +0xb4,0x01,0x0d,0x12,0x43,0x53,0xef,0x54,0xc7,0xff,0xed,0x54,0xc7,0xfd,0x80,0x07,
52988 +0x12,0x43,0x53,0xef,0x54,0xc7,0xff,0xec,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x78,
52989 +0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,0x03,0x12,0x43,0x53,0xef,0x54,0x0f,0xff,0xec,
52990 +0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x2f,0xd9,0x90,0x9e,0x07,
52991 +0x12,0x43,0x53,0xef,0x44,0x02,0xff,0xec,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x00,
52992 +0x7e,0x08,0x12,0x2f,0xd9,0x7f,0x70,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9e,0x0b,0x12,
52993 +0x2a,0x7f,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x1b,0x25,0xa0,0x7f,0x70,0x7e,0x0e,
52994 +0x12,0x2f,0xd9,0x90,0x80,0x59,0x12,0x2a,0x8b,0x00,0x00,0x00,0x00,0xe4,0xfd,0xff,
52995 +0x12,0x34,0x81,0x90,0x9e,0x80,0xe0,0xb4,0x01,0x11,0x90,0x80,0x59,0x12,0x2a,0x8b,
52996 +0x00,0x00,0x00,0x00,0xe4,0xfd,0x7f,0x01,0x12,0x34,0x81,0x90,0x00,0x11,0xe0,0x54,
52997 +0xf6,0xf0,0x02,0x4d,0x45,0xef,0x70,0x02,0xe1,0x5c,0x90,0x9e,0x0f,0xe0,0x60,0x03,
52998 +0x02,0x7b,0x28,0x90,0x9d,0xfb,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
52999 +0x8c,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9d,0xa7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,
53000 +0x2a,0x7f,0x7f,0x44,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9d,0xab,0x12,0x43,0x53,0x90,
53001 +0x80,0x85,0x12,0x2a,0x7f,0x7f,0x5c,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9d,0xaf,0x12,
53002 +0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x6c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,
53003 +0x9d,0xb3,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x70,0x7e,0x0e,0x12,
53004 +0x2f,0xd9,0x90,0x9d,0xb7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x74,
53005 +0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xbb,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,
53006 +0x7f,0x7f,0x78,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xbf,0x12,0x43,0x53,0x90,0x80,
53007 +0x85,0x12,0x2a,0x7f,0x7f,0x7c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xc3,0x12,0x43,
53008 +0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,
53009 +0xc7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x84,0x7e,0x0e,0x12,0x2f,
53010 +0xd9,0x90,0x9d,0xcb,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x88,0x7e,
53011 +0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xcf,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,
53012 +0x7f,0x8c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xd3,0x12,0x43,0x53,0x90,0x80,0x85,
53013 +0x12,0x2a,0x7f,0x7f,0xd0,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xd7,0x12,0x43,0x53,
53014 +0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0xd4,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xdb,
53015 +0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0xd8,0x7e,0x0e,0x12,0x2f,0xd9,
53016 +0x90,0x9d,0xdf,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0xdc,0x7e,0x0e,
53017 +0x12,0x2f,0xd9,0x90,0x9d,0xe3,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
53018 +0xe0,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xe7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,
53019 +0x2a,0x7f,0x7f,0xec,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xeb,0x12,0x43,0x53,0x90,
53020 +0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x2f,0xd9,0x90,0x9d,0xef,0x12,
53021 +0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0d,0x12,0x2f,0xd9,0x90,
53022 +0x9d,0xf3,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,
53023 +0x2f,0xd9,0x90,0x9d,0xf7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,
53024 +0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,0x0f,0x74,0x01,0xf0,0x22,0x90,0x9e,0x0f,0xe0,
53025 +0x64,0x01,0x60,0x03,0x02,0x7b,0x28,0x7f,0x8c,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,
53026 +0xfb,0x12,0x2a,0x7f,0x7f,0x44,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xa7,0x12,0x2a,
53027 +0x7f,0x7f,0x5c,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xab,0x12,0x2a,0x7f,0x7f,0x6c,
53028 +0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xaf,0x12,0x2a,0x7f,0x7f,0x70,0x7e,0x0e,0x12,
53029 +0x27,0xde,0x90,0x9d,0xb3,0x12,0x2a,0x7f,0x7f,0x74,0x7e,0x0e,0x12,0x27,0xde,0x90,
53030 +0x9d,0xb7,0x12,0x2a,0x7f,0x7f,0x78,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xbb,0x12,
53031 +0x2a,0x7f,0x7f,0x7c,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xbf,0x12,0x2a,0x7f,0x7f,
53032 +0x80,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xc3,0x12,0x2a,0x7f,0x7f,0x84,0x7e,0x0e,
53033 +0x12,0x27,0xde,0x90,0x9d,0xc7,0x12,0x2a,0x7f,0x7f,0x88,0x7e,0x0e,0x12,0x27,0xde,
53034 +0x90,0x9d,0xcb,0x12,0x2a,0x7f,0x7f,0x8c,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xcf,
53035 +0x12,0x2a,0x7f,0x7f,0xd0,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xd3,0x12,0x2a,0x7f,
53036 +0x7f,0xd4,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xd7,0x12,0x2a,0x7f,0x7f,0xd8,0x7e,
53037 +0x0e,0x12,0x27,0xde,0x90,0x9d,0xdb,0x12,0x2a,0x7f,0x7f,0xdc,0x7e,0x0e,0x12,0x27,
53038 +0xde,0x90,0x9d,0xdf,0x12,0x2a,0x7f,0x7f,0xe0,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,
53039 +0xe3,0x12,0x2a,0x7f,0x7f,0xec,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xe7,0x12,0x2a,
53040 +0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x27,0xde,0x90,0x9d,0xeb,0x12,0x2a,0x7f,0x7f,0x04,
53041 +0x7e,0x0d,0x12,0x27,0xde,0x90,0x9d,0xef,0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,
53042 +0x27,0xde,0x90,0x9d,0xf3,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x08,0x12,0x27,0xde,0x90,
53043 +0x9d,0xf7,0x12,0x2a,0x7f,0x7f,0x8c,0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0xa8,0x12,
53044 +0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0xed,0x44,0xc0,0xfd,0xec,0x90,0x9e,0xa8,
53045 +0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
53046 +0x8c,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x01,0x00,0x00,
53047 +0x7f,0x44,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0xdb,0x25,
53048 +0xa4,0x7f,0x5c,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,
53049 +0x25,0xa4,0x7f,0x6c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,
53050 +0xdb,0x25,0xa4,0x7f,0x70,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,
53051 +0x04,0x1b,0x25,0xa4,0x7f,0x74,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,
53052 +0x8b,0x04,0x1b,0x25,0xa4,0x7f,0x78,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,
53053 +0x2a,0x8b,0x04,0x1b,0x25,0xa4,0x7f,0x7c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,
53054 +0x12,0x2a,0x8b,0x04,0x1b,0x25,0xa4,0x7f,0x80,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,
53055 +0x85,0x12,0x2a,0x8b,0x63,0xdb,0x25,0xa4,0x7f,0x84,0x7e,0x0e,0x12,0x2f,0xd9,0x90,
53056 +0x80,0x85,0x12,0x2a,0x8b,0x04,0x1b,0x25,0xa4,0x7f,0x88,0x7e,0x0e,0x12,0x2f,0xd9,
53057 +0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0x8c,0x7e,0x0e,0x12,0x2f,
53058 +0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0xd0,0x7e,0x0e,0x12,
53059 +0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0xd4,0x7e,0x0e,
53060 +0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0xd8,0x7e,
53061 +0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x1b,0x25,0xa4,0x7f,0xdc,
53062 +0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x1b,0x25,0xa4,0x7f,
53063 +0xe0,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x24,0xdb,0x25,0xa4,
53064 +0x7f,0xec,0x7e,0x0e,0x12,0x2f,0xd9,0x7f,0x04,0x7e,0x0c,0x12,0x27,0xde,0x90,0x9e,
53065 +0xa8,0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0xe4,0xff,0xec,0x90,0x9e,0xa8,
53066 +0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0xef,0x44,0x11,0xff,0xec,0x90,0x9e,
53067 +0xa8,0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,
53068 +0x7f,0x04,0x7e,0x0c,0x12,0x2f,0xd9,0x7f,0x04,0x7e,0x0d,0x12,0x27,0xde,0x90,0x9e,
53069 +0xa8,0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0xef,0x54,0xf0,0xff,0xec,0x90,
53070 +0x9e,0xa8,0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0xef,0x44,0x01,0xff,0xec,
53071 +0x90,0x9e,0xa8,0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0x90,0x80,0x85,0x12,
53072 +0x2a,0x7f,0x7f,0x04,0x7e,0x0d,0x12,0x2f,0xd9,0x7f,0x0c,0x7e,0x09,0x12,0x27,0xde,
53073 +0x90,0x9e,0xa8,0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0xe4,0xff,0xec,0x90,
53074 +0x9e,0xa8,0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0xef,0x44,0x11,0xff,0xec,
53075 +0x90,0x9e,0xa8,0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0x90,0x80,0x85,0x12,
53076 +0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,0x2f,0xd9,0x7f,0x0c,0x7e,0x09,0x12,0x27,0xde,
53077 +0x90,0x9e,0xa8,0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0xed,0x54,0x0f,0xfd,
53078 +0xec,0x54,0xf0,0xfc,0x90,0x9e,0xa8,0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,
53079 +0xed,0x44,0x10,0xfd,0xec,0x44,0x01,0xfc,0x90,0x9e,0xa8,0x12,0x2a,0x7f,0x90,0x9e,
53080 +0xa8,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,0x2f,
53081 +0xd9,0x7f,0x04,0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0xa8,0x12,0x2a,0x7f,0x90,0x9e,
53082 +0xa8,0x12,0x43,0x53,0xef,0x54,0xf0,0xff,0xec,0x90,0x9e,0xa8,0x12,0x2a,0x7f,0x90,
53083 +0x9e,0xa8,0x12,0x43,0x53,0xef,0x44,0x01,0xff,0xec,0x90,0x9e,0xa8,0x12,0x2a,0x7f,
53084 +0x90,0x9e,0xa8,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x08,
53085 +0x12,0x2f,0xd9,0xe4,0x90,0x9e,0x0f,0xf0,0x22,0x90,0x00,0x02,0x12,0x42,0x20,0x90,
53086 +0x9e,0x43,0xf0,0xe0,0x60,0x04,0xe0,0xf4,0x70,0x21,0xa2,0xaf,0xe4,0x33,0xf5,0x14,
53087 +0xc2,0xaf,0x90,0x00,0x47,0xe0,0x54,0xfb,0xfd,0x7f,0x47,0x12,0x49,0x05,0x7d,0x40,
53088 +0x7f,0x01,0x12,0x36,0xaf,0xe5,0x14,0x24,0xff,0x92,0xaf,0x22,0x90,0x9e,0x3a,0xe0,
53089 +0xc3,0x94,0x14,0x50,0x05,0xe0,0x04,0xf0,0x81,0x14,0x90,0x9e,0x3a,0xe0,0x64,0x14,
53090 +0x60,0x02,0x81,0x14,0x90,0x9e,0x49,0xe0,0x70,0x25,0x90,0x9e,0x4c,0xe0,0x70,0x1f,
53091 +0x90,0x9e,0x4a,0xe0,0x70,0x19,0x90,0x9e,0x4d,0xe0,0x70,0x13,0x90,0x9e,0x4b,0xe0,
53092 +0x70,0x0d,0x90,0x9e,0x4e,0xe0,0x70,0x07,0x90,0x04,0xfd,0xe0,0x54,0xfe,0xf0,0x90,
53093 +0x9e,0x49,0xe0,0x90,0x04,0x44,0xf0,0x90,0x9e,0x4a,0xe0,0x90,0x04,0x45,0xf0,0x90,
53094 +0x9e,0x4b,0xe0,0x90,0x04,0x46,0xf0,0xa3,0xe4,0xf0,0x90,0x9e,0x4c,0xe0,0x90,0x04,
53095 +0x48,0xf0,0x90,0x9e,0x4d,0xe0,0x90,0x04,0x49,0xf0,0x90,0x9e,0x4e,0xe0,0x90,0x04,
53096 +0x4a,0xf0,0xa3,0xe4,0xf0,0x90,0x9e,0x35,0xe0,0x90,0x04,0x4c,0xf0,0x90,0x9e,0x36,
53097 +0xe0,0x90,0x04,0x4d,0xf0,0x90,0x9e,0x37,0xe0,0x90,0x04,0x4e,0xf0,0x90,0x9e,0x38,
53098 +0xe0,0x90,0x04,0x4f,0xf0,0xe4,0x90,0x9e,0x3a,0xf0,0x90,0x9e,0x35,0x04,0xf0,0xe4,
53099 +0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,0x49,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,
53100 +0xa3,0xf0,0xa3,0xf0,0x90,0x05,0x60,0xe0,0x90,0x9e,0x19,0xf0,0x90,0x05,0x61,0xe0,
53101 +0x90,0x9e,0x1a,0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x1b,0xf0,0x90,0x05,0x63,0xe0,
53102 +0x90,0x9e,0x1c,0xf0,0x90,0x9e,0x52,0xe0,0xff,0x90,0x9e,0x1c,0xe0,0xfe,0xd3,0x9f,
53103 +0x50,0x0b,0x90,0x9e,0x52,0xe0,0xc3,0x9e,0xd3,0x94,0x01,0x40,0x11,0x90,0x9e,0x40,
53104 +0xe0,0xb4,0x01,0x02,0x80,0x03,0x90,0x9e,0x44,0xe0,0xff,0x12,0x4c,0xf0,0x22,0x90,
53105 +0x9e,0x53,0xe0,0x64,0x01,0x60,0x08,0x90,0x9e,0x41,0xe0,0x60,0x02,0xa1,0x36,0x90,
53106 +0x9e,0x35,0xe0,0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,0x3b,0x90,0x9e,0x36,
53107 +0xe0,0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x28,0x90,0x9e,0x37,0xe0,
53108 +0xc3,0x94,0xff,0x50,0x0a,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x36,0xf0,0x80,0x15,0x90,
53109 +0x9e,0x38,0xe0,0xc3,0x94,0xff,0x50,0x10,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x37,0xf0,
53110 +0x90,0x9e,0x36,0xf0,0x90,0x9e,0x35,0xf0,0x90,0x00,0x44,0xe0,0x54,0x0c,0x60,0x76,
53111 +0xe0,0x30,0xe2,0x32,0x90,0x9e,0x49,0xe0,0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,
53112 +0x80,0x24,0x90,0x9e,0x4a,0xe0,0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,
53113 +0x11,0x90,0x9e,0x4b,0xe0,0xc3,0x94,0xff,0x50,0x0c,0xe0,0x04,0xf0,0xe4,0x90,0x9e,
53114 +0x4a,0xf0,0x90,0x9e,0x49,0xf0,0x90,0x00,0x44,0xe0,0x30,0xe3,0x32,0x90,0x9e,0x4c,
53115 +0xe0,0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,0x24,0x90,0x9e,0x4d,0xe0,0xc3,
53116 +0x94,0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x11,0x90,0x9e,0x4e,0xe0,0xc3,0x94,
53117 +0xff,0x50,0x0c,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x4d,0xf0,0x90,0x9e,0x4c,0xf0,0x90,
53118 +0x04,0xfd,0xe0,0x44,0x01,0xf0,0x22,0x00,0x37,0xda,};
53119 +
53120 +// =================== v79 UMC A Cut COMMON 2011-10-06 =====================
53121 +u8 Rtl8192CUFwUMCACutImgArray[UMCACutImgArrayLength] = {
53122 +0xc1,0x88,0x02,0x00,0x4f,0x00,0x00,0x00,0x0a,0x06,0x18,0x09,0x58,0x3f,0x01,0x00,
53123 0x61,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
53124 0x02,0x43,0xba,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
53125 0x00,0x00,0x00,0x02,0x5a,0x45,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
53126 @@ -99,7 +1084,7 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayL
53127 0x00,0x41,0x9e,0xae,0x00,0x41,0x9e,0x4d,0x80,0x41,0x9e,0x4e,0x80,0x41,0x9e,0xb0,
53128 0x00,0x00,0xf0,0x90,0x9e,0x57,0xe0,0x90,0x9e,0x8a,0xf0,0xe4,0xfb,0xfd,0x7f,0x54,
53129 0x7e,0x01,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x88,0xeb,0xf0,0xa3,0xe0,
53130 -0xfb,0xa3,0xe0,0xf5,0x44,0xe4,0xf5,0x45,0x12,0x35,0xab,0xd0,0xd0,0x92,0xaf,0x22,
53131 +0xfb,0xa3,0xe0,0xf5,0x44,0xe4,0xf5,0x45,0x12,0x30,0x62,0xd0,0xd0,0x92,0xaf,0x22,
53132 0x90,0x01,0x5f,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x08,0xf0,0xe4,0x90,0x9e,0x89,0xf0,
53133 0x90,0x9e,0x55,0xe0,0x90,0x9e,0x8a,0xf0,0xe4,0xfb,0xfd,0x7f,0x5c,0x7e,0x01,0x91,
53134 0x62,0x90,0x01,0x5f,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x02,0xf0,0x90,0x9e,0x5c,
53135 @@ -111,7 +1096,7 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayL
53136 0x22,0x22,0x00,0x02,0x60,0x8d,0x02,0x60,0x94,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
53137 0x8b,0x1b,0x8a,0x1c,0x89,0x1d,0x90,0x9e,0x8b,0x71,0x8b,0xab,0x1e,0xaa,0x1f,0xa9,
53138 0x20,0x90,0x9e,0x8e,0x71,0x8b,0xaf,0x21,0x15,0x21,0xef,0x60,0x1b,0x90,0x9e,0x8e,
53139 -0xe4,0x75,0xf0,0x01,0x71,0x74,0x12,0x29,0xd9,0xff,0x90,0x9e,0x8b,0xe4,0x75,0xf0,
53140 +0xe4,0x75,0xf0,0x01,0x71,0x74,0x12,0x24,0x62,0xff,0x90,0x9e,0x8b,0xe4,0x75,0xf0,
53141 0x01,0x71,0x74,0xef,0x51,0x4d,0x80,0xde,0xab,0x1b,0xaa,0x1c,0xa9,0x1d,0xd0,0xd0,
53142 0x92,0xaf,0x22,0x90,0x06,0xa9,0xe0,0xf5,0x50,0x54,0xc0,0x70,0x0d,0x90,0x9e,0x63,
53143 0xe0,0x54,0xfe,0xf0,0xe0,0x54,0xfd,0xf0,0x91,0xd3,0xe5,0x50,0x30,0xe6,0x17,0x90,
53144 @@ -168,21 +1153,21 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayL
53145 0x60,0x0b,0x90,0x9e,0x77,0xe0,0xb4,0x01,0x10,0xe4,0xff,0x80,0x09,0x90,0x9e,0x77,
53146 0xe0,0xb4,0x01,0x05,0x7f,0x01,0x12,0x77,0x66,0x22,0x90,0x01,0x37,0x74,0x02,0xf0,
53147 0x90,0x05,0x22,0x74,0xff,0xf0,0x12,0x77,0x1c,0xef,0x70,0x06,0x90,0x01,0xc8,0x74,
53148 -0xfd,0xf0,0x7d,0x02,0x7f,0x03,0x12,0x36,0xe6,0xe5,0x74,0x60,0x04,0x7f,0x01,0x11,
53149 +0xfd,0xf0,0x7d,0x02,0x7f,0x03,0x12,0x31,0x9d,0xe5,0x74,0x60,0x04,0x7f,0x01,0x11,
53150 0x8f,0x11,0xdf,0x90,0x9e,0x5e,0xe0,0x54,0xf0,0xf0,0xe0,0x44,0x02,0xf0,0x22,0x7f,
53151 -0x78,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xff,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,
53152 -0x12,0x27,0xde,0x90,0x9e,0x03,0x12,0x2a,0x7f,0x7f,0x00,0x7e,0x08,0x12,0x27,0xde,
53153 -0x90,0x9e,0x07,0x12,0x2a,0x7f,0x90,0x9e,0x77,0xe0,0x90,0x9d,0xff,0xb4,0x01,0x0d,
53154 +0x78,0x7e,0x08,0x12,0x22,0x65,0x90,0x9d,0xff,0x12,0x25,0x08,0x7f,0x04,0x7e,0x0c,
53155 +0x12,0x22,0x65,0x90,0x9e,0x03,0x12,0x25,0x08,0x7f,0x00,0x7e,0x08,0x12,0x22,0x65,
53156 +0x90,0x9e,0x07,0x12,0x25,0x08,0x90,0x9e,0x77,0xe0,0x90,0x9d,0xff,0xb4,0x01,0x0d,
53157 0x12,0x43,0x53,0xef,0x54,0xc7,0xff,0xed,0x54,0xc7,0xfd,0x80,0x07,0x12,0x43,0x53,
53158 -0xef,0x54,0xc7,0xff,0xec,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x78,0x7e,0x08,0x12,
53159 -0x2f,0xd9,0x90,0x9e,0x03,0x12,0x43,0x53,0xef,0x54,0x0f,0xff,0xec,0x90,0x80,0x85,
53160 -0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x2f,0xd9,0x90,0x9e,0x07,0x12,0x43,0x53,
53161 -0xef,0x44,0x02,0xff,0xec,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x00,0x7e,0x08,0x12,
53162 -0x2f,0xd9,0x7f,0x70,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9e,0x0b,0x12,0x2a,0x7f,0x90,
53163 -0x80,0x85,0x12,0x2a,0x8b,0x00,0x1b,0x25,0xa0,0x7f,0x70,0x7e,0x0e,0x12,0x2f,0xd9,
53164 -0x90,0x80,0x59,0x12,0x2a,0x8b,0x00,0x00,0x00,0x00,0xe4,0xfd,0xff,0x12,0x34,0x81,
53165 -0x90,0x9e,0x77,0xe0,0xb4,0x01,0x11,0x90,0x80,0x59,0x12,0x2a,0x8b,0x00,0x00,0x00,
53166 -0x00,0xe4,0xfd,0x7f,0x01,0x12,0x34,0x81,0x90,0x00,0x11,0xe0,0x54,0xf6,0xf0,0x80,
53167 +0xef,0x54,0xc7,0xff,0xec,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x78,0x7e,0x08,0x12,
53168 +0x2b,0x08,0x90,0x9e,0x03,0x12,0x43,0x53,0xef,0x54,0x0f,0xff,0xec,0x90,0x80,0x96,
53169 +0x12,0x25,0x08,0x7f,0x04,0x7e,0x0c,0x12,0x2b,0x08,0x90,0x9e,0x07,0x12,0x43,0x53,
53170 +0xef,0x44,0x02,0xff,0xec,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x00,0x7e,0x08,0x12,
53171 +0x2b,0x08,0x7f,0x70,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9e,0x0b,0x12,0x25,0x08,0x90,
53172 +0x80,0x96,0x12,0x25,0x14,0x00,0x1b,0x25,0xa0,0x7f,0x70,0x7e,0x0e,0x12,0x2b,0x08,
53173 +0x90,0x80,0x68,0x12,0x25,0x14,0x00,0x00,0x00,0x00,0xe4,0xfd,0xff,0x12,0x30,0x2c,
53174 +0x90,0x9e,0x77,0xe0,0xb4,0x01,0x11,0x90,0x80,0x68,0x12,0x25,0x14,0x00,0x00,0x00,
53175 +0x00,0xe4,0xfd,0x7f,0x01,0x12,0x30,0x2c,0x90,0x00,0x11,0xe0,0x54,0xf6,0xf0,0x80,
53176 0x08,0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
53177 0x7f,0x10,0xdf,0xfe,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
53178 0x90,0x9e,0xad,0xed,0xf0,0x90,0x9e,0xac,0xef,0xf0,0xd3,0x94,0x07,0x50,0x63,0xe0,
53179 @@ -205,15 +1190,15 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayL
53180 0x02,0x61,0x7d,0x90,0x9e,0x1a,0x74,0x02,0xf0,0x90,0x00,0x48,0xe0,0x44,0x0c,0xfd,
53181 0x7f,0x48,0x51,0xc1,0x90,0x00,0x47,0xe0,0x44,0x08,0xfd,0x7f,0x47,0x51,0xc1,0x90,
53182 0x00,0x45,0xe0,0x44,0x10,0xfd,0x7f,0x45,0x80,0x71,0xe4,0x90,0x9e,0x1a,0xf0,0x90,
53183 -0x9e,0x16,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,
53184 -0x2f,0xd9,0x90,0x00,0x45,0xe0,0x44,0xef,0xfd,0x7f,0x45,0x51,0xc1,0x90,0x00,0x45,
53185 +0x9e,0x16,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x80,0x7e,0x08,0x12,
53186 +0x2b,0x08,0x90,0x00,0x45,0xe0,0x44,0xef,0xfd,0x7f,0x45,0x51,0xc1,0x90,0x00,0x45,
53187 0xe0,0x54,0xef,0xfd,0x7f,0x45,0x51,0xc1,0x90,0x00,0x46,0xe0,0x44,0x10,0xfd,0x7f,
53188 0x46,0x80,0x38,0x90,0x9e,0x1a,0x74,0x01,0xf0,0x90,0x9e,0x20,0x12,0x43,0x53,0x90,
53189 -0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x00,0x45,0xe0,
53190 +0x80,0x96,0x12,0x25,0x08,0x7f,0x80,0x7e,0x08,0x12,0x2b,0x08,0x90,0x00,0x45,0xe0,
53191 0x44,0x20,0xfd,0x7f,0x45,0x51,0xc1,0x90,0x00,0x45,0xe0,0x44,0x10,0xfd,0x7f,0x45,
53192 0x51,0xc1,0x90,0x00,0x46,0xe0,0x44,0x10,0xfd,0x7f,0x46,0x51,0xc1,0x22,0x90,0x00,
53193 0x02,0x12,0x42,0x20,0x90,0x9e,0x1c,0xf0,0x90,0x00,0x01,0x12,0x42,0x20,0x25,0xe0,
53194 -0x25,0xe0,0x90,0x9e,0x1b,0xf0,0x12,0x29,0xd9,0x25,0xe0,0x25,0xe0,0x90,0x9e,0x1f,
53195 +0x25,0xe0,0x90,0x9e,0x1b,0xf0,0x12,0x24,0x62,0x25,0xe0,0x25,0xe0,0x90,0x9e,0x1f,
53196 0xf0,0x90,0x05,0x60,0xe0,0x90,0x9e,0x2a,0xf0,0x90,0x05,0x61,0xe0,0x90,0x9e,0x2b,
53197 0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x2c,0xf0,0x90,0x05,0x63,0xe0,0x90,0x9e,0x2d,
53198 0xf0,0xa2,0xaf,0xe4,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x90,0x9e,0x1b,0xe0,0xff,
53199 @@ -222,25 +1207,25 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayL
53200 0x81,0x84,0xa2,0xaf,0xe4,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x90,0x9e,0x2e,0x74,
53201 0x01,0xf0,0x90,0x9e,0x3f,0xe0,0x24,0xff,0x92,0xaf,0x51,0xb8,0x90,0x00,0x46,0xe0,
53202 0x44,0x01,0xfd,0x7f,0x46,0x51,0xc1,0x90,0x9e,0x14,0xe0,0x60,0x15,0x90,0x9e,0x20,
53203 -0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,
53204 +0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x80,0x7e,0x08,0x12,0x2b,0x08,
53205 0x80,0x06,0x90,0x05,0x22,0x74,0x7f,0xf0,0x90,0x00,0x45,0xe0,0x54,0xef,0xfd,0x7f,
53206 0x45,0x51,0xc1,0x90,0x05,0x87,0xe0,0x64,0x80,0xf0,0x90,0x9e,0x2a,0xe0,0x90,0x05,
53207 0x84,0xf0,0x90,0x9e,0x2b,0xe0,0x90,0x05,0x85,0xf0,0x90,0x9e,0x2c,0xe0,0x90,0x05,
53208 0x86,0xf0,0x90,0x9e,0x2d,0xe0,0x90,0x05,0x87,0xf0,0xa2,0xaf,0xe4,0x33,0x90,0x9e,
53209 0x3f,0xf0,0xc2,0xaf,0x90,0x01,0x3c,0xe0,0x44,0x20,0xf0,0x7d,0x20,0xe4,0xff,0x12,
53210 -0x37,0x00,0x80,0x2b,0x90,0x9e,0x1c,0xe0,0x70,0x2d,0x90,0x9e,0x2e,0x51,0xb7,0x90,
53211 +0x31,0xb7,0x80,0x2b,0x90,0x9e,0x1c,0xe0,0x70,0x2d,0x90,0x9e,0x2e,0x51,0xb7,0x90,
53212 0x00,0x46,0xe0,0x54,0xfe,0xfd,0x7f,0x46,0x51,0xc1,0x90,0x05,0x22,0xe4,0xf0,0xa2,
53213 -0xaf,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x7d,0x20,0xe4,0xff,0x12,0x36,0x92,0x90,
53214 +0xaf,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x7d,0x20,0xe4,0xff,0x12,0x31,0x49,0x90,
53215 0x9e,0x3f,0xe0,0x24,0xff,0x92,0xaf,0x22,0x8b,0x59,0x8a,0x5a,0x89,0x5b,0x90,0x00,
53216 0x02,0x12,0x42,0x20,0x90,0x9e,0x1d,0xf0,0xe0,0x30,0xe0,0x4b,0x90,0x9e,0x14,0x74,
53217 -0x01,0xf0,0x7f,0x80,0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0x16,0x12,0x2a,0x7f,0xab,
53218 +0x01,0xf0,0x7f,0x80,0x7e,0x08,0x12,0x22,0x65,0x90,0x9e,0x16,0x12,0x25,0x08,0xab,
53219 0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0xe4,0xfc,0xfd,0xfe,
53220 -0x78,0x1a,0x12,0x2a,0x6c,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,0x07,0x90,0x9e,0x16,
53221 -0x12,0x43,0x53,0xec,0x54,0x03,0xfc,0x12,0x43,0x46,0x90,0x9e,0x20,0x12,0x2a,0x7f,
53222 +0x78,0x1a,0x12,0x24,0xf5,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,0x07,0x90,0x9e,0x16,
53223 +0x12,0x43,0x53,0xec,0x54,0x03,0xfc,0x12,0x43,0x46,0x90,0x9e,0x20,0x12,0x25,0x08,
53224 0x90,0x05,0x22,0xe4,0xf0,0x80,0x2d,0xe4,0x90,0x9e,0x14,0xf0,0x7f,0x80,0x7e,0x08,
53225 -0x12,0x27,0xde,0xec,0x54,0x03,0xfc,0xec,0x44,0xc0,0xfc,0x90,0x9e,0x16,0x12,0x2a,
53226 -0x7f,0x90,0x9e,0x16,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,
53227 -0x08,0x12,0x2f,0xd9,0x90,0x9e,0x1d,0xe0,0x30,0xe1,0x19,0x7d,0x0c,0x7f,0x47,0x51,
53228 +0x12,0x22,0x65,0xec,0x54,0x03,0xfc,0xec,0x44,0xc0,0xfc,0x90,0x9e,0x16,0x12,0x25,
53229 +0x08,0x90,0x9e,0x16,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x80,0x7e,
53230 +0x08,0x12,0x2b,0x08,0x90,0x9e,0x1d,0xe0,0x30,0xe1,0x19,0x7d,0x0c,0x7f,0x47,0x51,
53231 0xc1,0x90,0x00,0x48,0xe0,0x44,0x0c,0xfd,0x7f,0x48,0x51,0xc1,0x90,0x00,0x46,0xe0,
53232 0x44,0x10,0x80,0x1c,0x90,0x00,0x47,0xe0,0x54,0xf3,0xfd,0x7f,0x47,0x51,0xc1,0x90,
53233 0x00,0x48,0xe0,0x54,0xf3,0xfd,0x7f,0x48,0x51,0xc1,0x90,0x00,0x46,0xe0,0x54,0xef,
53234 @@ -256,13 +1241,13 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayL
53235 0x46,0x51,0xc1,0x7f,0x02,0xf1,0xea,0x8f,0x26,0x90,0x01,0xc9,0xe5,0x26,0xf0,0xb4,
53236 0x01,0x02,0xf1,0x2a,0x22,0x90,0x9e,0x1c,0xe0,0x64,0x01,0x60,0x02,0xc1,0xd7,0x90,
53237 0x00,0x46,0xe0,0x44,0x01,0xfd,0x7f,0x46,0x51,0xc1,0x90,0x9e,0x2e,0xe0,0x70,0x31,
53238 -0x90,0x9e,0x14,0xe0,0x60,0x15,0x90,0x9e,0x20,0x12,0x43,0x53,0x90,0x80,0x85,0x12,
53239 -0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,0x80,0x06,0x90,0x05,0x22,0x74,0x7f,
53240 +0x90,0x9e,0x14,0xe0,0x60,0x15,0x90,0x9e,0x20,0x12,0x43,0x53,0x90,0x80,0x96,0x12,
53241 +0x25,0x08,0x7f,0x80,0x7e,0x08,0x12,0x2b,0x08,0x80,0x06,0x90,0x05,0x22,0x74,0x7f,
53242 0xf0,0x90,0x9e,0x1b,0xe0,0xff,0xd1,0xd8,0x90,0x9e,0x2e,0x74,0x01,0x51,0xb7,0x80,
53243 0x3f,0x90,0x9e,0x2e,0xe0,0x64,0x01,0x70,0x37,0x90,0x9e,0x1f,0xe0,0xff,0xd1,0xd8,
53244 0xe4,0x90,0x9e,0x2e,0xf0,0x90,0x00,0x45,0xe0,0x44,0x01,0xfd,0x7f,0x45,0x51,0xc1,
53245 -0x90,0x9e,0x14,0xe0,0x60,0x15,0x90,0x9e,0x16,0x12,0x43,0x53,0x90,0x80,0x85,0x12,
53246 -0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,0x80,0x05,0x90,0x05,0x22,0xe4,0xf0,
53247 +0x90,0x9e,0x14,0xe0,0x60,0x15,0x90,0x9e,0x16,0x12,0x43,0x53,0x90,0x80,0x96,0x12,
53248 +0x25,0x08,0x7f,0x80,0x7e,0x08,0x12,0x2b,0x08,0x80,0x05,0x90,0x05,0x22,0xe4,0xf0,
53249 0x90,0x05,0x87,0xe0,0x64,0x80,0xf0,0x90,0x9e,0x2a,0xe0,0x90,0x05,0x84,0xf0,0x90,
53250 0x9e,0x2b,0xe0,0x90,0x05,0x85,0xf0,0x90,0x9e,0x2c,0xe0,0x90,0x05,0x86,0xf0,0x90,
53251 0x9e,0x2d,0xe0,0x90,0x05,0x87,0xf0,0x22,0x90,0x05,0x60,0xe0,0x90,0x9e,0x2a,0xf0,
53252 @@ -296,7 +1281,7 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayL
53253 0x29,0x75,0x2a,0x03,0xf5,0x2b,0x90,0x01,0x30,0xe5,0x28,0xf0,0xa3,0xe5,0x29,0xf0,
53254 0xa3,0xe5,0x2a,0xf0,0xa3,0xe5,0x2b,0xf0,0x22,0xe4,0x90,0x9e,0x31,0xf0,0xa3,0xf0,
53255 0x75,0x8e,0x02,0x12,0x4f,0xda,0x12,0x5f,0xa9,0x12,0x5f,0xbc,0xe4,0xf5,0x12,0x12,
53256 -0x6f,0xa1,0x12,0x77,0x5d,0x12,0x60,0x9b,0x12,0x32,0x3d,0x12,0x77,0x18,0x11,0x8b,
53257 +0x6f,0xa1,0x12,0x77,0x5d,0x12,0x60,0x9b,0x12,0x2e,0x01,0x12,0x77,0x18,0x11,0x8b,
53258 0x90,0x00,0xf3,0xe0,0x30,0xe2,0x0d,0x90,0x05,0x41,0x74,0x10,0xf0,0x90,0x05,0x5a,
53259 0xf0,0xa3,0xe4,0xf0,0x12,0x5f,0xf4,0x12,0x5f,0x91,0x12,0x44,0xfe,0x12,0x7d,0x1d,
53260 0x90,0x9e,0x33,0xe5,0xd9,0xf0,0x12,0x4d,0x8b,0xc2,0xaf,0x90,0x00,0x80,0xe0,0x44,
53261 @@ -353,7 +1338,7 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayL
53262 0x43,0x6b,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0x90,0x9e,0x48,0x12,0x43,0x6b,0x90,
53263 0x00,0x01,0xef,0x12,0x42,0x5f,0x90,0x9e,0x41,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,
53264 0x42,0x20,0xff,0x90,0x9e,0x46,0xe0,0xfc,0xa3,0xe0,0xfd,0xf5,0x82,0x8c,0x83,0xef,
53265 -0xf0,0x12,0x29,0xd9,0x8d,0x82,0x8c,0x83,0xa3,0xf0,0x90,0x9e,0x44,0xe0,0xfe,0x90,
53266 +0xf0,0x12,0x24,0x62,0x8d,0x82,0x8c,0x83,0xa3,0xf0,0x90,0x9e,0x44,0xe0,0xfe,0x90,
53267 0x9e,0x3f,0xe0,0xff,0x24,0x82,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0x90,
53268 0x9e,0x40,0xe0,0xfe,0x75,0xf0,0x09,0xef,0x90,0x96,0x4a,0x12,0x43,0x5f,0xee,0xf0,
53269 0x75,0xf0,0x09,0xef,0x90,0x96,0x4b,0x12,0x43,0x5f,0x74,0x01,0xf0,0x90,0x9e,0x45,
53270 @@ -389,10 +1374,10 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayL
53271 0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,0x4d,0x90,0x04,0x52,0xe0,0xab,0x5d,
53272 0xaa,0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,0x04,0x51,0xe0,0x85,0x5c,
53273 0x82,0x85,0x5b,0x83,0xf0,0x90,0x04,0x50,0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xa3,
53274 -0xf0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0xc0,0x03,0xc0,0x02,0xc0,0x01,0x12,0x29,0xd9,
53275 -0xff,0xab,0x62,0xaa,0x63,0xa9,0x64,0x12,0x29,0xd9,0x5f,0xd0,0x01,0xd0,0x02,0xd0,
53276 +0xf0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0xc0,0x03,0xc0,0x02,0xc0,0x01,0x12,0x24,0x62,
53277 +0xff,0xab,0x62,0xaa,0x63,0xa9,0x64,0x12,0x24,0x62,0x5f,0xd0,0x01,0xd0,0x02,0xd0,
53278 0x03,0x12,0x42,0x4d,0xab,0x5d,0xe5,0x5f,0x24,0x01,0xf9,0xe4,0x35,0x5e,0xfa,0xc0,
53279 -0x03,0xc0,0x02,0xc0,0x01,0x12,0x29,0xd9,0xff,0xab,0x62,0xaa,0x63,0xa9,0x64,0x90,
53280 +0x03,0xc0,0x02,0xc0,0x01,0x12,0x24,0x62,0xff,0xab,0x62,0xaa,0x63,0xa9,0x64,0x90,
53281 0x00,0x01,0x12,0x42,0x20,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,0x12,0x42,0x4d,0x85,
53282 0x5c,0x82,0x85,0x5b,0x83,0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,0x61,0x82,0x85,0x60,
53283 0x83,0xe0,0xfe,0xef,0x5e,0xd0,0x82,0xd0,0x83,0xf0,0x85,0x5c,0x82,0x85,0x5b,0x83,
53284 @@ -472,7 +1457,7 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayL
53285 0x4d,0x31,0x76,0xe5,0x74,0x14,0x24,0xfd,0x50,0x02,0x80,0x45,0x90,0x9e,0x61,0xe0,
53286 0x60,0x37,0x90,0x01,0x5b,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x04,0xf0,0xd1,0x05,0xef,
53287 0x64,0x01,0x70,0x2d,0x90,0x9e,0x55,0xe0,0xf5,0x44,0x75,0x45,0x00,0xe4,0xfb,0xfd,
53288 -0x7f,0x58,0x7e,0x01,0x12,0x35,0xab,0x90,0x01,0x5b,0x74,0x05,0xf0,0x90,0x06,0x92,
53289 +0x7f,0x58,0x7e,0x01,0x12,0x30,0x62,0x90,0x01,0x5b,0x74,0x05,0xf0,0x90,0x06,0x92,
53290 0x74,0x01,0xf0,0x90,0x9e,0x5d,0xf0,0x80,0x08,0xd1,0x05,0xbf,0x01,0x03,0x12,0x44,
53291 0xd3,0xe5,0x2c,0x30,0xe1,0x20,0x90,0x01,0x34,0x74,0x02,0xf0,0x85,0xd1,0x13,0x85,
53292 0xd2,0x14,0x85,0xd3,0x15,0x85,0xd4,0x16,0x85,0xd5,0x17,0x85,0xd6,0x18,0x85,0xd7,
53293 @@ -515,12 +1500,12 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayL
53294 0x01,0xef,0x12,0x42,0x5f,0x7f,0xaf,0x7e,0x01,0xf1,0x3b,0xef,0x60,0x49,0x90,0x9e,
53295 0x91,0x12,0x43,0x6b,0x8b,0x1e,0x8a,0x1f,0x89,0x20,0x75,0x21,0x02,0x7b,0x01,0x7a,
53296 0x01,0x79,0xa0,0x12,0x45,0x09,0x90,0x9e,0x94,0x12,0x43,0x6b,0x8b,0x1e,0x8a,0x1f,
53297 -0x89,0x20,0x90,0x9e,0x91,0x12,0x43,0x6b,0x12,0x29,0xd9,0xff,0xc4,0x54,0x0f,0xf5,
53298 +0x89,0x20,0x90,0x9e,0x91,0x12,0x43,0x6b,0x12,0x24,0x62,0xff,0xc4,0x54,0x0f,0xf5,
53299 0x21,0x7b,0x01,0x7a,0x01,0x79,0xa2,0x12,0x45,0x09,0x90,0x01,0xaf,0x74,0xff,0xf0,
53300 0x90,0x01,0xcb,0xe0,0x64,0x80,0xf0,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x9e,0x2f,0xe0,
53301 0x54,0xf0,0x44,0x03,0xf0,0x54,0x0f,0x44,0x80,0xf0,0x7b,0x00,0x7a,0x00,0x79,0x13,
53302 0x90,0x9e,0x94,0x12,0x43,0x8b,0x0b,0x7a,0x9e,0x79,0x2f,0xc1,0x14,0x7d,0x02,0x7f,
53303 -0x03,0x12,0x36,0x75,0xe5,0x74,0x14,0x24,0xfd,0x50,0x02,0x80,0x23,0x90,0x9e,0x61,
53304 +0x03,0x12,0x31,0x2c,0xe5,0x74,0x14,0x24,0xfd,0x50,0x02,0x80,0x23,0x90,0x9e,0x61,
53305 0xe0,0x60,0x06,0x7d,0x01,0x7f,0x0c,0x80,0x0f,0x90,0x9e,0x5e,0xe0,0x54,0x0f,0xc3,
53306 0x94,0x04,0x50,0x07,0x7d,0x01,0x7f,0x04,0x12,0x47,0x1a,0xe4,0xff,0x12,0x48,0x8f,
53307 0x22,0xd1,0x05,0xef,0x64,0x01,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,0xf0,0x80,0x32,
53308 @@ -532,7 +1517,7 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayL
53309 0x9e,0xa0,0xe0,0xfe,0xa3,0xe0,0xf5,0x82,0x8e,0x83,0xe0,0x60,0x2d,0xc3,0x90,0x9e,
53310 0xa3,0xe0,0x94,0xe8,0x90,0x9e,0xa2,0xe0,0x94,0x03,0x40,0x0b,0x90,0x01,0xc6,0xe0,
53311 0x44,0x10,0xf0,0x7f,0x00,0x80,0x15,0x90,0x9e,0xa2,0xe4,0x75,0xf0,0x01,0x12,0x42,
53312 -0x81,0x7f,0x0a,0x7e,0x00,0x12,0x37,0x54,0x80,0xc5,0x7f,0x01,0xd0,0xd0,0x92,0xaf,
53313 +0x81,0x7f,0x0a,0x7e,0x00,0x12,0x32,0x15,0x80,0xc5,0x7f,0x01,0xd0,0xd0,0x92,0xaf,
53314 0x22,0x75,0x30,0x1f,0x75,0x31,0x01,0xe4,0xf5,0x32,0x90,0x01,0x38,0xe5,0x30,0xf0,
53315 0xa3,0xe5,0x31,0xf0,0xa3,0xe5,0x32,0xf0,0x22,0x90,0x00,0x02,0xe0,0x54,0xe0,0x90,
53316 0x9e,0x75,0x60,0x04,0x74,0x01,0xf0,0x22,0x74,0x02,0xf0,0x22,0x90,0x00,0xf3,0xe0,
53317 @@ -558,7 +1543,7 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayL
53318 0x9e,0x5b,0x74,0x05,0xf0,0xe4,0x90,0x9e,0x54,0xf0,0x90,0x9e,0x4f,0xf0,0x90,0x9e,
53319 0x76,0xf0,0x22,0xe4,0x90,0x9e,0x62,0xf0,0x90,0x9e,0x51,0xf0,0x90,0x9e,0x63,0xf0,
53320 0x22,0x8b,0x59,0x8a,0x5a,0x89,0x5b,0x31,0x03,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x12,
53321 -0x29,0xd9,0xf5,0x74,0x14,0x60,0x0e,0x14,0x60,0x1e,0x14,0x60,0x2f,0x24,0x03,0x70,
53322 +0x24,0x62,0xf5,0x74,0x14,0x60,0x0e,0x14,0x60,0x1e,0x14,0x60,0x2f,0x24,0x03,0x70,
53323 0x40,0x7f,0x01,0x80,0x3a,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x02,0x12,0x42,
53324 0x20,0xfd,0xe4,0xff,0x31,0x72,0x80,0x27,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,
53325 0x02,0x12,0x42,0x20,0xfd,0x7f,0x01,0x31,0x72,0x1f,0x80,0x13,0xab,0x59,0xaa,0x5a,
53326 @@ -567,13 +1552,13 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayL
53327 0x80,0x16,0xed,0x70,0x0a,0x90,0x9e,0x5b,0xe0,0x90,0x9e,0x5f,0xf0,0x80,0x05,0x90,
53328 0x9e,0x5f,0xed,0xf0,0x90,0x9e,0x5f,0xe0,0x90,0x9e,0x50,0xf0,0x22,0xd3,0x10,0xaf,
53329 0x01,0xc3,0xc0,0xd0,0x90,0x00,0x01,0x12,0x42,0x20,0x90,0x9e,0x61,0xf0,0x90,0x00,
53330 -0x03,0x12,0x42,0x20,0x90,0x9e,0x4f,0xf0,0x12,0x29,0xd9,0x65,0x74,0x60,0x02,0x31,
53331 +0x03,0x12,0x42,0x20,0x90,0x9e,0x4f,0xf0,0x12,0x24,0x62,0x65,0x74,0x60,0x02,0x31,
53332 0x11,0xd0,0xd0,0x92,0xaf,0x22,0xef,0x64,0x01,0x70,0x30,0x7d,0x7c,0x7f,0x02,0x12,
53333 -0x36,0x75,0x7d,0x02,0x7f,0x03,0x12,0x36,0x75,0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,
53334 +0x31,0x2c,0x7d,0x02,0x7f,0x03,0x12,0x31,0x2c,0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,
53335 0x3c,0x74,0x02,0xf0,0x12,0x47,0x16,0xe4,0xff,0x12,0x48,0x8f,0x90,0x06,0x04,0xe0,
53336 0x54,0x7f,0xf0,0x90,0x06,0x0a,0xe0,0x54,0xf8,0xf0,0x22,0x90,0x01,0x36,0x74,0x7c,
53337 -0xf0,0xa3,0x74,0x02,0xf0,0x7d,0x7c,0xff,0x12,0x36,0xe6,0x7d,0x02,0x7f,0x03,0x12,
53338 -0x36,0xe6,0x90,0x06,0x04,0xe0,0x44,0x80,0xf0,0x90,0x06,0x0a,0xe0,0x44,0x07,0xf0,
53339 +0xf0,0xa3,0x74,0x02,0xf0,0x7d,0x7c,0xff,0x12,0x31,0x9d,0x7d,0x02,0x7f,0x03,0x12,
53340 +0x31,0x9d,0x90,0x06,0x04,0xe0,0x44,0x80,0xf0,0x90,0x06,0x0a,0xe0,0x44,0x07,0xf0,
53341 0x90,0x9e,0x58,0xe0,0xa3,0xe0,0x90,0x05,0x58,0xf0,0xe5,0x73,0x30,0xe0,0x1b,0x90,
53342 0x9e,0x52,0xe0,0x70,0x1a,0xe0,0x04,0xf0,0x90,0x9e,0x5e,0xe0,0x54,0x0f,0xc3,0x94,
53343 0x04,0x50,0x0c,0x7d,0x01,0x7f,0x04,0x02,0x47,0x1a,0xe4,0x90,0x9e,0x52,0xf0,0x22,
53344 @@ -600,17 +1585,17 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayL
53345 0xf0,0x22,0x90,0x9e,0xaf,0xef,0xf0,0x71,0xb0,0x90,0x9e,0xaf,0xe0,0x60,0x05,0x90,
53346 0x05,0x22,0xe4,0xf0,0x90,0x9e,0x5e,0xe0,0x54,0xf0,0xf0,0xe0,0x44,0x04,0xf0,0x22,
53347 0x90,0x00,0x11,0xe0,0x44,0x09,0xf0,0x12,0x49,0xb9,0x90,0x9d,0xff,0x12,0x43,0x53,
53348 -0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x78,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,0x03,
53349 -0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x2f,0xd9,
53350 -0x90,0x9e,0x07,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x00,0x7e,0x08,
53351 -0x12,0x2f,0xd9,0x90,0x9e,0x0b,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
53352 -0x70,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x59,0x12,0x2a,0x8b,0x00,0x03,0x2d,0x95,
53353 -0xe4,0xfd,0xff,0x12,0x34,0x81,0x90,0x9e,0x77,0xe0,0xb4,0x01,0x11,0x90,0x80,0x59,
53354 -0x12,0x2a,0x8b,0x00,0x03,0x2d,0x95,0xe4,0xfd,0x7f,0x01,0x12,0x34,0x81,0x22,0x8f,
53355 +0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x78,0x7e,0x08,0x12,0x2b,0x08,0x90,0x9e,0x03,
53356 +0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x04,0x7e,0x0c,0x12,0x2b,0x08,
53357 +0x90,0x9e,0x07,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x00,0x7e,0x08,
53358 +0x12,0x2b,0x08,0x90,0x9e,0x0b,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,
53359 +0x70,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x68,0x12,0x25,0x14,0x00,0x03,0x2d,0x95,
53360 +0xe4,0xfd,0xff,0x12,0x30,0x2c,0x90,0x9e,0x77,0xe0,0xb4,0x01,0x11,0x90,0x80,0x68,
53361 +0x12,0x25,0x14,0x00,0x03,0x2d,0x95,0xe4,0xfd,0x7f,0x01,0x12,0x30,0x2c,0x22,0x8f,
53362 0x27,0xe4,0x90,0x9e,0xa8,0xf0,0xa3,0xf0,0x90,0x01,0x09,0xe0,0x7f,0x00,0x30,0xe7,
53363 0x02,0x7f,0x01,0xef,0x65,0x27,0x60,0x3e,0xc3,0x90,0x9e,0xa9,0xe0,0x94,0x88,0x90,
53364 0x9e,0xa8,0xe0,0x94,0x13,0x40,0x08,0x90,0x01,0xc6,0xe0,0x44,0x80,0xf0,0x22,0x90,
53365 -0x9e,0xa8,0xe4,0x75,0xf0,0x01,0x12,0x42,0x81,0x7f,0x14,0x7e,0x00,0x12,0x37,0x54,
53366 +0x9e,0xa8,0xe4,0x75,0xf0,0x01,0x12,0x42,0x81,0x7f,0x14,0x7e,0x00,0x12,0x32,0x15,
53367 0xd3,0x90,0x9e,0xa9,0xe0,0x94,0x32,0x90,0x9e,0xa8,0xe0,0x94,0x00,0x40,0xb9,0x90,
53368 0x01,0xc7,0xe0,0x30,0xe0,0xb2,0x22,0x90,0x9e,0x5e,0xe0,0x54,0xf0,0xf0,0xe0,0x44,
53369 0x01,0xf0,0x12,0x44,0xff,0x12,0x45,0x00,0xe0,0x54,0xf0,0xf0,0xe0,0x44,0x02,0xf0,
53370 @@ -717,21 +1702,21 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayL
53371 0x93,0xff,0xd3,0x90,0x9e,0x3b,0xe0,0x9f,0x90,0x9e,0x3a,0xe0,0x94,0x00,0x40,0x09,
53372 0xe4,0xfd,0xaf,0x59,0x12,0x67,0xb1,0xe1,0x2c,0xe5,0x59,0x25,0xe0,0x24,0xc2,0xf5,
53373 0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xf5,0x61,0xa3,0xe0,0xf5,0x62,0xab,0x5b,0xaa,
53374 -0x5c,0xa9,0x5d,0x12,0x29,0xd9,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x12,
53375 -0x42,0x97,0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,
53376 +0x5c,0xa9,0x5d,0x12,0x24,0x62,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x12,
53377 +0x42,0x97,0xfd,0xac,0xf0,0x12,0x24,0x7b,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,
53378 0xf5,0x61,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0x7e,
53379 0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x02,0x12,0x42,0xc2,0xfd,0xac,0xf0,
53380 -0x12,0x29,0xf2,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,0xaa,
53381 +0x12,0x24,0x7b,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,0xaa,
53382 0x5c,0xa9,0x5d,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,
53383 -0xa9,0x60,0x90,0x00,0x04,0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,0x25,
53384 +0xa9,0x60,0x90,0x00,0x04,0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x24,0x7b,0xef,0x25,
53385 0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,0x00,
53386 0x03,0x12,0x42,0x20,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x06,
53387 -0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,
53388 +0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x24,0x7b,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,
53389 0x61,0xf5,0x61,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,0x00,0x04,0x12,0x42,0x20,0xff,
53390 0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x08,0x12,0x42,0xc2,0xfd,0xac,
53391 -0xf0,0x12,0x29,0xf2,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,
53392 +0xf0,0x12,0x24,0x7b,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,
53393 0xaa,0x5c,0xa9,0x5d,0x90,0x00,0x05,0x12,0x42,0x20,0xff,0x7e,0x00,0x90,0x9e,0x38,
53394 -0xe0,0xfc,0xa3,0xe0,0xfd,0x12,0x29,0xf2,0xd3,0xe5,0x62,0x9f,0xe5,0x61,0x9e,0x40,
53395 +0xe0,0xfc,0xa3,0xe0,0xfd,0x12,0x24,0x7b,0xd3,0xe5,0x62,0x9f,0xe5,0x61,0x9e,0x40,
53396 0x0c,0xe5,0x62,0x9f,0xf5,0x62,0xe5,0x61,0x9e,0xf5,0x61,0x80,0x05,0xe4,0xf5,0x61,
53397 0xf5,0x62,0xe5,0x59,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe5,
53398 0x61,0xf0,0xa3,0xe5,0x62,0xf0,0x90,0x9e,0x34,0xe0,0x25,0xe0,0x24,0x66,0xf5,0x82,
53399 @@ -766,11 +1751,11 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayL
53400 0x5f,0xe0,0xb4,0x01,0x10,0xe4,0xf5,0x63,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,
53401 0x9c,0xf5,0x83,0xe4,0xf0,0xad,0x63,0xc1,0xfb,0xec,0x64,0x06,0x60,0x02,0xe1,0x00,
53402 0xf5,0x61,0xf5,0x62,0x90,0x42,0x13,0x93,0xff,0x7e,0x00,0x90,0x9e,0x38,0xe0,0xfc,
53403 -0xa3,0xe0,0xfd,0x12,0x29,0xf2,0x90,0x9e,0x36,0xee,0xf0,0xa3,0xef,0xf0,0x74,0x84,
53404 +0xa3,0xe0,0xfd,0x12,0x24,0x7b,0x90,0x9e,0x36,0xee,0xf0,0xa3,0xef,0xf0,0x74,0x84,
53405 0x25,0x59,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x63,0xe4,0xf5,0x5a,0xab,
53406 0x5e,0xaa,0x5f,0xa9,0x60,0x75,0xf0,0x02,0xe5,0x5a,0xa4,0xf5,0x82,0x85,0xf0,0x83,
53407 0x12,0x42,0xc2,0xfd,0xac,0xf0,0xe5,0x5a,0x90,0x42,0x0e,0x93,0xff,0x7e,0x00,0x12,
53408 -0x29,0xf2,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xc3,0x90,0x9e,0x37,
53409 +0x24,0x7b,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xc3,0x90,0x9e,0x37,
53410 0xe0,0x95,0x62,0x90,0x9e,0x36,0xe0,0x95,0x61,0x40,0x07,0x05,0x5a,0xe5,0x5a,0xb4,
53411 0x05,0xbd,0xe5,0x5a,0xc3,0x13,0xf5,0x5a,0xe5,0x63,0xb4,0x01,0x06,0xe5,0x5a,0x70,
53412 0x46,0x80,0x13,0xe5,0x63,0xb4,0x03,0x15,0xe5,0x5a,0x70,0x05,0x75,0x63,0x03,0x80,
53413 @@ -819,36 +1804,36 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayL
53414 0x90,0x96,0x49,0x12,0x43,0x5f,0xe4,0xf0,0xed,0xc3,0x94,0x20,0x50,0x0f,0x74,0x84,
53415 0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0x74,0x13,0xf0,0x80,0x0d,0x74,0xa6,0x2d,
53416 0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0x74,0x13,0xf0,0x0d,0xed,0x64,0x40,0x60,0x03,
53417 -0x02,0x6f,0xcf,0x22,0x12,0x29,0xd9,0xf5,0x59,0xc3,0x94,0x40,0x50,0x15,0x90,0x00,
53418 +0x02,0x6f,0xcf,0x22,0x12,0x24,0x62,0xf5,0x59,0xc3,0x94,0x40,0x50,0x15,0x90,0x00,
53419 0x02,0x12,0x42,0x20,0xff,0x74,0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,
53420 0xef,0xf0,0x22,0xe5,0x59,0xb4,0x40,0x0a,0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x96,
53421 0x42,0xf0,0x22,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0x54,0x3f,0xfe,0xef,0x54,0x80,
53422 -0xc4,0x13,0x13,0x13,0x54,0x01,0xfd,0xaf,0x06,0x02,0x53,0xa4,0x12,0x29,0xd9,0x90,
53423 -0x95,0x01,0xf0,0x22,0x12,0x29,0xd9,0xf5,0x73,0x22,0x90,0x00,0x02,0x12,0x42,0x20,
53424 -0xff,0x30,0xe0,0x25,0x12,0x29,0xd9,0x90,0x9e,0x56,0xf0,0x90,0x00,0x01,0x12,0x42,
53425 +0xc4,0x13,0x13,0x13,0x54,0x01,0xfd,0xaf,0x06,0x02,0x53,0xa4,0x12,0x24,0x62,0x90,
53426 +0x95,0x01,0xf0,0x22,0x12,0x24,0x62,0xf5,0x73,0x22,0x90,0x00,0x02,0x12,0x42,0x20,
53427 +0xff,0x30,0xe0,0x25,0x12,0x24,0x62,0x90,0x9e,0x56,0xf0,0x90,0x00,0x01,0x12,0x42,
53428 0x20,0x90,0x9e,0x57,0xf0,0xef,0xc3,0x13,0x54,0x7f,0x90,0x9e,0x55,0xf0,0x90,0x00,
53429 0x03,0x12,0x42,0x20,0x90,0x9e,0x5b,0xf0,0x22,0x90,0x9e,0x56,0x74,0x01,0xf0,0x90,
53430 0x9e,0x57,0x74,0x03,0xf0,0x90,0x9e,0x55,0x74,0x14,0xf0,0x90,0x9e,0x5b,0x74,0x05,
53431 -0xf0,0x22,0x12,0x29,0xd9,0x30,0xe0,0x18,0xc3,0x13,0x54,0x7f,0x90,0x9e,0x5a,0xf0,
53432 +0xf0,0x22,0x12,0x24,0x62,0x30,0xe0,0x18,0xc3,0x13,0x54,0x7f,0x90,0x9e,0x5a,0xf0,
53433 0x90,0x00,0x01,0x12,0x42,0x20,0xff,0x90,0x9e,0x58,0xe4,0xf0,0xa3,0xef,0xf0,0x22,
53434 0x90,0x9e,0x5a,0x74,0x07,0xf0,0x90,0x9e,0x58,0xe4,0xf0,0xa3,0x74,0x02,0xf0,0x22,
53435 -0x90,0x02,0x09,0xe0,0xfd,0x12,0x29,0xd9,0xfe,0xaf,0x05,0xed,0x2e,0x90,0x9e,0x67,
53436 +0x90,0x02,0x09,0xe0,0xfd,0x12,0x24,0x62,0xfe,0xaf,0x05,0xed,0x2e,0x90,0x9e,0x67,
53437 0xf0,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0xed,0x2f,0x90,0x9e,0x68,0xf0,0x90,0x00,
53438 0x02,0x12,0x42,0x20,0xff,0xed,0x2f,0x90,0x9e,0x69,0xf0,0x90,0x00,0x03,0x12,0x42,
53439 0x20,0xff,0xed,0x2f,0x90,0x9e,0x6a,0xf0,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0xae,
53440 0x05,0xed,0x2f,0x90,0x9e,0x6b,0xf0,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,
53441 0x9e,0x3f,0x12,0x43,0x8b,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,
53442 0xc2,0xfa,0xe5,0xf0,0x24,0x00,0xff,0xe4,0x3a,0xfe,0x90,0x9e,0x3f,0x12,0x43,0x6b,
53443 -0x90,0x00,0x01,0xee,0x8f,0xf0,0x12,0x43,0x19,0x12,0x29,0xd9,0xff,0x60,0x2c,0xb5,
53444 +0x90,0x00,0x01,0xee,0x8f,0xf0,0x12,0x43,0x19,0x12,0x24,0x62,0xff,0x60,0x2c,0xb5,
53445 0x22,0x16,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,0xc2,0x65,0x24,
53446 0x70,0x04,0xe5,0x23,0x65,0xf0,0x60,0x23,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,
53447 0x01,0x12,0x42,0xc2,0xff,0xae,0xf0,0x71,0x00,0x80,0x10,0x90,0x9e,0x3f,0x12,0x43,
53448 -0x6b,0x12,0x29,0xd9,0x65,0x22,0x60,0x03,0x12,0x44,0xca,0xd0,0xd0,0x92,0xaf,0x22,
53449 +0x6b,0x12,0x24,0x62,0x65,0x22,0x60,0x03,0x12,0x44,0xca,0xd0,0xd0,0x92,0xaf,0x22,
53450 0x90,0x9e,0x42,0xee,0xf0,0xa3,0xef,0xf0,0x75,0x22,0x01,0x8e,0x23,0xf5,0x24,0xe4,
53451 0xfd,0x7f,0x0b,0x71,0x44,0xe4,0xfd,0x7f,0x02,0x71,0x44,0x12,0x4f,0xbe,0xe4,0xff,
53452 0x12,0x44,0xf1,0xe4,0xf5,0x26,0x90,0x01,0xc9,0xe5,0x26,0xf0,0x90,0x9e,0x42,0xe0,
53453 0xfc,0xa3,0xe0,0xfd,0xec,0xfb,0x8d,0x44,0xe4,0xf5,0x45,0x7d,0x01,0x7f,0x60,0x7e,
53454 -0x01,0x02,0x35,0xab,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x45,0xed,0xf0,
53455 +0x01,0x02,0x30,0x62,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x45,0xed,0xf0,
53456 0x90,0x9e,0x44,0xef,0xf0,0xd3,0x94,0x07,0x50,0x4f,0xa3,0xe0,0x70,0x1a,0x90,0x9e,
53457 0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,
53458 0x90,0x00,0x47,0xe0,0x5f,0xf0,0x80,0x17,0x90,0x9e,0x44,0xe0,0xff,0x74,0x01,0xa8,
53459 @@ -875,24 +1860,24 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayL
53460 0x80,0x1a,0xc3,0x74,0x03,0x95,0x61,0x24,0x66,0xf8,0xe6,0xff,0xe5,0x61,0x7c,0x00,
53461 0x25,0x65,0xfd,0xec,0x35,0x64,0x8d,0x82,0xf5,0x83,0xef,0xf0,0x05,0x61,0x80,0xba,
53462 0xc3,0xe5,0x64,0x94,0x10,0x40,0x02,0xa1,0x93,0x90,0x9e,0x40,0xe0,0x64,0x04,0x60,
53463 -0x02,0xa1,0x93,0xaf,0x67,0xfc,0xfd,0xfe,0x78,0x10,0x12,0x2a,0x6c,0xc0,0x04,0xc0,
53464 -0x05,0xc0,0x06,0xc0,0x07,0xaf,0x66,0xe4,0xfc,0xfd,0xfe,0x78,0x18,0x12,0x2a,0x6c,
53465 +0x02,0xa1,0x93,0xaf,0x67,0xfc,0xfd,0xfe,0x78,0x10,0x12,0x24,0xf5,0xc0,0x04,0xc0,
53466 +0x05,0xc0,0x06,0xc0,0x07,0xaf,0x66,0xe4,0xfc,0xfd,0xfe,0x78,0x18,0x12,0x24,0xf5,
53467 0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0x12,0x43,0x46,0xc0,0x04,0xc0,0x05,0xc0,
53468 -0x06,0xc0,0x07,0xaf,0x68,0xe4,0xfc,0xfd,0xfe,0x78,0x08,0x12,0x2a,0x6c,0xd0,0x03,
53469 +0x06,0xc0,0x07,0xaf,0x68,0xe4,0xfc,0xfd,0xfe,0x78,0x08,0x12,0x24,0xf5,0xd0,0x03,
53470 0xd0,0x02,0xd0,0x01,0xd0,0x00,0x12,0x43,0x46,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,
53471 -0x07,0xaf,0x69,0xe4,0xfc,0xfd,0xfe,0x12,0x43,0x46,0xa3,0x12,0x2a,0x7f,0x90,0x9e,
53472 -0x41,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0xaf,0x65,0xae,0x64,0x12,0x2f,
53473 -0xd9,0x80,0x30,0xe5,0x68,0x7f,0x00,0xfe,0xef,0x25,0x69,0xf5,0x63,0xe4,0x3e,0xf5,
53474 -0x62,0xaf,0x63,0xfe,0x12,0x37,0x54,0x80,0x1a,0xe5,0x68,0x7f,0x00,0xfe,0xef,0x25,
53475 -0x69,0xf5,0x63,0xe4,0x3e,0xf5,0x62,0xaf,0x63,0xfe,0x12,0x36,0xcb,0x80,0x04,0x7f,
53476 +0x07,0xaf,0x69,0xe4,0xfc,0xfd,0xfe,0x12,0x43,0x46,0xa3,0x12,0x25,0x08,0x90,0x9e,
53477 +0x41,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0xaf,0x65,0xae,0x64,0x12,0x2b,
53478 +0x08,0x80,0x30,0xe5,0x68,0x7f,0x00,0xfe,0xef,0x25,0x69,0xf5,0x63,0xe4,0x3e,0xf5,
53479 +0x62,0xaf,0x63,0xfe,0x12,0x32,0x15,0x80,0x1a,0xe5,0x68,0x7f,0x00,0xfe,0xef,0x25,
53480 +0x69,0xf5,0x63,0xe4,0x3e,0xf5,0x62,0xaf,0x63,0xfe,0x12,0x31,0x82,0x80,0x04,0x7f,
53481 0x00,0x80,0x02,0x7f,0x01,0xd0,0xd0,0x92,0xaf,0x22,0x8f,0x6a,0xe4,0x90,0x9e,0x45,
53482 0xf0,0xe5,0x6a,0x14,0xfe,0x90,0x9e,0x45,0xe0,0xff,0xc3,0x9e,0x50,0x0e,0xef,0x04,
53483 -0xfd,0x12,0x34,0xb7,0x90,0x9e,0x45,0xe0,0x04,0xf0,0x80,0xe5,0xe5,0x6a,0x14,0xff,
53484 -0x7d,0xff,0x12,0x34,0xb7,0x90,0x9e,0x45,0xe5,0x6a,0xf0,0x90,0x9e,0x45,0xe0,0xc3,
53485 -0x94,0xff,0x50,0x0f,0xe0,0xff,0x04,0xfd,0x12,0x34,0xb7,0x90,0x9e,0x45,0xe0,0x04,
53486 -0xf0,0x80,0xe8,0xad,0x6a,0x7f,0xff,0x02,0x34,0xb7,0xd3,0x10,0xaf,0x01,0xc3,0xc0,
53487 +0xfd,0x12,0x2d,0x4d,0x90,0x9e,0x45,0xe0,0x04,0xf0,0x80,0xe5,0xe5,0x6a,0x14,0xff,
53488 +0x7d,0xff,0x12,0x2d,0x4d,0x90,0x9e,0x45,0xe5,0x6a,0xf0,0x90,0x9e,0x45,0xe0,0xc3,
53489 +0x94,0xff,0x50,0x0f,0xe0,0xff,0x04,0xfd,0x12,0x2d,0x4d,0x90,0x9e,0x45,0xe0,0x04,
53490 +0xf0,0x80,0xe8,0xad,0x6a,0x7f,0xff,0x02,0x2d,0x4d,0xd3,0x10,0xaf,0x01,0xc3,0xc0,
53491 0xd0,0xe4,0xf5,0x5b,0x75,0x5c,0x04,0xf5,0x5d,0xf5,0x5f,0xf5,0x60,0x90,0x02,0x09,
53492 -0xe0,0xff,0x12,0x29,0xd9,0xfe,0xef,0x2e,0xf5,0x5e,0x30,0xe0,0x08,0x75,0x59,0x00,
53493 +0xe0,0xff,0x12,0x24,0x62,0xfe,0xef,0x2e,0xf5,0x5e,0x30,0xe0,0x08,0x75,0x59,0x00,
53494 0x75,0x5a,0x80,0x80,0x05,0xe4,0xf5,0x59,0xf5,0x5a,0xe5,0x5e,0xc3,0x13,0x90,0xfd,
53495 0x10,0xf0,0x74,0x20,0x25,0x5b,0xf5,0x5b,0xad,0x5a,0xe5,0x5b,0x2d,0xff,0x24,0x01,
53496 0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x90,0x9e,0x6d,0xf0,0x74,0x02,0x2f,0xf5,
53497 @@ -902,8 +1887,8 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayL
53498 0x83,0xe0,0xfe,0x74,0x6c,0x2f,0xf5,0x82,0xe4,0x34,0x9e,0xf5,0x83,0xee,0xf0,0x0f,
53499 0xbf,0x08,0xe0,0x91,0x0e,0xef,0x70,0x3f,0x90,0x01,0xc3,0xe0,0x60,0x25,0xc3,0xe5,
53500 0x60,0x94,0xe8,0xe5,0x5f,0x94,0x03,0x40,0x09,0x90,0x01,0xc6,0xe0,0x44,0x10,0xf0,
53501 -0x80,0x63,0x05,0x60,0xe5,0x60,0x70,0x02,0x05,0x5f,0x7f,0x0a,0x7e,0x00,0x12,0x37,
53502 -0x54,0x80,0xd5,0x90,0x01,0xc6,0xe0,0x90,0x01,0xc3,0x30,0xe2,0x05,0x74,0xfe,0xf0,
53503 +0x80,0x63,0x05,0x60,0xe5,0x60,0x70,0x02,0x05,0x5f,0x7f,0x0a,0x7e,0x00,0x12,0x32,
53504 +0x15,0x80,0xd5,0x90,0x01,0xc6,0xe0,0x90,0x01,0xc3,0x30,0xe2,0x05,0x74,0xfe,0xf0,
53505 0x80,0x43,0x74,0xff,0xf0,0x80,0x3e,0xe5,0x5b,0xb4,0x78,0x23,0xe4,0xf5,0x5b,0x05,
53506 0x5e,0xe5,0x5a,0x64,0x80,0x45,0x59,0x70,0x06,0xf5,0x59,0xf5,0x5a,0x80,0x06,0x75,
53507 0x59,0x00,0x75,0x5a,0x80,0xe5,0x5e,0xc3,0x13,0x90,0xfd,0x10,0xf0,0x80,0x06,0x74,
53508 @@ -912,4208 +1897,146 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayL
53509 0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x22,0xe4,0xf5,0x25,0x22,0xe4,0x90,0x9e,0xaa,
53510 0xf0,0xa3,0xf0,0x90,0x05,0xf8,0xe0,0x70,0x0f,0xa3,0xe0,0x70,0x0b,0xa3,0xe0,0x70,
53511 0x07,0xa3,0xe0,0x70,0x03,0x7f,0x01,0x22,0xd3,0x90,0x9e,0xab,0xe0,0x94,0xe8,0x90,
53512 -0x9e,0xaa,0xe0,0x94,0x03,0x40,0x03,0x7f,0x00,0x22,0x7f,0x32,0x7e,0x00,0x12,0x37,
53513 -0x54,0x90,0x9e,0xaa,0xe4,0x75,0xf0,0x01,0x12,0x42,0x81,0x80,0xc6,0x90,0x9e,0x77,
53514 +0x9e,0xaa,0xe0,0x94,0x03,0x40,0x03,0x7f,0x00,0x22,0x7f,0x32,0x7e,0x00,0x12,0x32,
53515 +0x15,0x90,0x9e,0xaa,0xe4,0x75,0xf0,0x01,0x12,0x42,0x81,0x80,0xc6,0x90,0x9e,0x77,
53516 0xe0,0x90,0x9e,0x0f,0xf0,0x22,0xef,0x70,0x03,0x02,0x79,0x1e,0x90,0x9e,0x0f,0xe0,
53517 -0x60,0x03,0x02,0x7c,0xe9,0x90,0x9d,0xfb,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,
53518 -0x7f,0x7f,0x8c,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9d,0xa7,0x12,0x43,0x53,0x90,0x80,
53519 -0x85,0x12,0x2a,0x7f,0x7f,0x44,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9d,0xab,0x12,0x43,
53520 -0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x5c,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9d,
53521 -0xaf,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x6c,0x7e,0x0e,0x12,0x2f,
53522 -0xd9,0x90,0x9d,0xb3,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x70,0x7e,
53523 -0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xb7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,
53524 -0x7f,0x74,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xbb,0x12,0x43,0x53,0x90,0x80,0x85,
53525 -0x12,0x2a,0x7f,0x7f,0x78,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xbf,0x12,0x43,0x53,
53526 -0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x7c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xc3,
53527 -0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x0e,0x12,0x2f,0xd9,
53528 -0x90,0x9d,0xc7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x84,0x7e,0x0e,
53529 -0x12,0x2f,0xd9,0x90,0x9d,0xcb,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
53530 -0x88,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xcf,0x12,0x43,0x53,0x90,0x80,0x85,0x12,
53531 -0x2a,0x7f,0x7f,0x8c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xd3,0x12,0x43,0x53,0x90,
53532 -0x80,0x85,0x12,0x2a,0x7f,0x7f,0xd0,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xd7,0x12,
53533 -0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0xd4,0x7e,0x0e,0x12,0x2f,0xd9,0x90,
53534 -0x9d,0xdb,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0xd8,0x7e,0x0e,0x12,
53535 -0x2f,0xd9,0x90,0x9d,0xdf,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0xdc,
53536 -0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xe3,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,
53537 -0x7f,0x7f,0xe0,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xe7,0x12,0x43,0x53,0x90,0x80,
53538 -0x85,0x12,0x2a,0x7f,0x7f,0xec,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xeb,0x12,0x43,
53539 -0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x2f,0xd9,0x90,0x9d,
53540 -0xef,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0d,0x12,0x2f,
53541 -0xd9,0x90,0x9d,0xf3,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x0c,0x7e,
53542 -0x09,0x12,0x2f,0xd9,0x90,0x9d,0xf7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,
53543 -0x7f,0x04,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,0x0f,0x74,0x01,0xf0,0x22,0x90,0x9e,
53544 -0x0f,0xe0,0x64,0x01,0x60,0x02,0x81,0xe9,0x7f,0x8c,0x7e,0x08,0x12,0x27,0xde,0x90,
53545 -0x9d,0xfb,0x12,0x2a,0x7f,0x7f,0x44,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xa7,0x12,
53546 -0x2a,0x7f,0x7f,0x5c,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xab,0x12,0x2a,0x7f,0x7f,
53547 -0x6c,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xaf,0x12,0x2a,0x7f,0x7f,0x70,0x7e,0x0e,
53548 -0x12,0x27,0xde,0x90,0x9d,0xb3,0x12,0x2a,0x7f,0x7f,0x74,0x7e,0x0e,0x12,0x27,0xde,
53549 -0x90,0x9d,0xb7,0x12,0x2a,0x7f,0x7f,0x78,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xbb,
53550 -0x12,0x2a,0x7f,0x7f,0x7c,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xbf,0x12,0x2a,0x7f,
53551 -0x7f,0x80,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xc3,0x12,0x2a,0x7f,0x7f,0x84,0x7e,
53552 -0x0e,0x12,0x27,0xde,0x90,0x9d,0xc7,0x12,0x2a,0x7f,0x7f,0x88,0x7e,0x0e,0x12,0x27,
53553 -0xde,0x90,0x9d,0xcb,0x12,0x2a,0x7f,0x7f,0x8c,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,
53554 -0xcf,0x12,0x2a,0x7f,0x7f,0xd0,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xd3,0x12,0x2a,
53555 -0x7f,0x7f,0xd4,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xd7,0x12,0x2a,0x7f,0x7f,0xd8,
53556 -0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xdb,0x12,0x2a,0x7f,0x7f,0xdc,0x7e,0x0e,0x12,
53557 -0x27,0xde,0x90,0x9d,0xdf,0x12,0x2a,0x7f,0x7f,0xe0,0x7e,0x0e,0x12,0x27,0xde,0x90,
53558 -0x9d,0xe3,0x12,0x2a,0x7f,0x7f,0xec,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xe7,0x12,
53559 -0x2a,0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x27,0xde,0x90,0x9d,0xeb,0x12,0x2a,0x7f,0x7f,
53560 -0x04,0x7e,0x0d,0x12,0x27,0xde,0x90,0x9d,0xef,0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,
53561 -0x12,0x27,0xde,0x90,0x9d,0xf3,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x08,0x12,0x27,0xde,
53562 -0x90,0x9d,0xf7,0x12,0x2a,0x7f,0x7f,0x8c,0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0xa4,
53563 -0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0xed,0x44,0xc0,0xfd,0xec,0x90,0x9e,
53564 -0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,
53565 -0x7f,0x8c,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x01,0x00,
53566 -0x00,0x7f,0x44,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0xdb,
53567 -0x25,0xa4,0x7f,0x5c,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,
53568 -0xdb,0x25,0xa4,0x7f,0x6c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,
53569 -0x20,0xdb,0x25,0xa4,0x7f,0x70,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,
53570 -0x8b,0x04,0x1b,0x25,0xa4,0x7f,0x74,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,
53571 -0x2a,0x8b,0x04,0x1b,0x25,0xa4,0x7f,0x78,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,
53572 -0x12,0x2a,0x8b,0x04,0x1b,0x25,0xa4,0x7f,0x7c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,
53573 -0x85,0x12,0x2a,0x8b,0x04,0x1b,0x25,0xa4,0x7f,0x80,0x7e,0x0e,0x12,0x2f,0xd9,0x90,
53574 -0x80,0x85,0x12,0x2a,0x8b,0x63,0xdb,0x25,0xa4,0x7f,0x84,0x7e,0x0e,0x12,0x2f,0xd9,
53575 -0x90,0x80,0x85,0x12,0x2a,0x8b,0x04,0x1b,0x25,0xa4,0x7f,0x88,0x7e,0x0e,0x12,0x2f,
53576 -0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0x8c,0x7e,0x0e,0x12,
53577 -0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0xd0,0x7e,0x0e,
53578 -0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0xd4,0x7e,
53579 -0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0xd8,
53580 -0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x1b,0x25,0xa4,0x7f,
53581 -0xdc,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x1b,0x25,0xa4,
53582 -0x7f,0xe0,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x24,0xdb,0x25,
53583 -0xa4,0x7f,0xec,0x7e,0x0e,0x12,0x2f,0xd9,0x7f,0x04,0x7e,0x0c,0x12,0x27,0xde,0x90,
53584 -0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0xe4,0xff,0xec,0x90,0x9e,
53585 -0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0xef,0x44,0x11,0xff,0xec,0x90,
53586 -0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,
53587 -0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x2f,0xd9,0x7f,0x04,0x7e,0x0d,0x12,0x27,0xde,0x90,
53588 -0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0xef,0x54,0xf0,0xff,0xec,
53589 -0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0xef,0x44,0x01,0xff,
53590 -0xec,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x85,
53591 -0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0d,0x12,0x2f,0xd9,0x7f,0x0c,0x7e,0x09,0x12,0x27,
53592 -0xde,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0xe4,0xff,0xec,
53593 -0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0xef,0x44,0x11,0xff,
53594 -0xec,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x85,
53595 -0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,0x2f,0xd9,0x7f,0x0c,0x7e,0x09,0x12,0x27,
53596 -0xde,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0xed,0x54,0x0f,
53597 -0xfd,0xec,0x54,0xf0,0xfc,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,
53598 -0x53,0xed,0x44,0x10,0xfd,0xec,0x44,0x01,0xfc,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,
53599 -0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,
53600 -0x2f,0xd9,0x7f,0x04,0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,
53601 -0x9e,0xa4,0x12,0x43,0x53,0xef,0x54,0xf0,0xff,0xec,0x90,0x9e,0xa4,0x12,0x2a,0x7f,
53602 -0x90,0x9e,0xa4,0x12,0x43,0x53,0xef,0x44,0x01,0xff,0xec,0x90,0x9e,0xa4,0x12,0x2a,
53603 -0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,
53604 -0x08,0x12,0x2f,0xd9,0xe4,0x90,0x9e,0x0f,0xf0,0x22,0x90,0x00,0x02,0x12,0x42,0x20,
53605 -0x90,0x9e,0x1e,0xf0,0xe0,0x60,0x04,0xe0,0xf4,0x70,0x21,0xa2,0xaf,0xe4,0x33,0xf5,
53606 -0x59,0xc2,0xaf,0x90,0x00,0x47,0xe0,0x54,0xfb,0xfd,0x7f,0x47,0x12,0x4a,0xc1,0x7d,
53607 -0x40,0x7f,0x01,0x12,0x36,0xaf,0xe5,0x59,0x24,0xff,0x92,0xaf,0x22,0xe4,0xfd,0x7f,
53608 -0x45,0x12,0x4a,0xc1,0x90,0x04,0xfd,0xe4,0xf0,0xa3,0xf0,0x90,0x9e,0x1e,0xf0,0x90,
53609 -0x9e,0x24,0xf0,0x90,0x9e,0x27,0xf0,0x90,0x9e,0x25,0xf0,0x90,0x9e,0x28,0xf0,0x90,
53610 -0x9e,0x26,0xf0,0x90,0x9e,0x29,0xf0,0x90,0x9e,0x10,0x04,0xf0,0xe4,0xa3,0xf0,0xa3,
53611 -0xf0,0xa3,0xf0,0x90,0x9e,0x15,0xf0,0x90,0x9e,0x1a,0xf0,0x90,0x9e,0x1c,0xf0,0x90,
53612 -0x9e,0x2e,0xf0,0x90,0x9e,0x1f,0xf0,0x90,0x9e,0x1b,0xf0,0x90,0x9e,0x14,0xf0,0x90,
53613 -0x00,0x51,0xe0,0x44,0xc0,0xfd,0x7f,0x51,0x02,0x4a,0xc1,0x90,0x9e,0x15,0xe0,0xc3,
53614 -0x94,0x14,0x50,0x05,0xe0,0x04,0xf0,0xc1,0x33,0x90,0x9e,0x15,0xe0,0x64,0x14,0x60,
53615 -0x02,0xc1,0x33,0x90,0x9e,0x24,0xe0,0x70,0x25,0x90,0x9e,0x27,0xe0,0x70,0x1f,0x90,
53616 -0x9e,0x25,0xe0,0x70,0x19,0x90,0x9e,0x28,0xe0,0x70,0x13,0x90,0x9e,0x26,0xe0,0x70,
53617 -0x0d,0x90,0x9e,0x29,0xe0,0x70,0x07,0x90,0x04,0xfd,0xe0,0x54,0xfe,0xf0,0x90,0x9e,
53618 -0x24,0xe0,0x90,0x04,0x44,0xf0,0x90,0x9e,0x25,0xe0,0x90,0x04,0x45,0xf0,0x90,0x9e,
53619 -0x26,0xe0,0x90,0x04,0x46,0xf0,0xa3,0xe4,0xf0,0x90,0x9e,0x27,0xe0,0x90,0x04,0x48,
53620 -0xf0,0x90,0x9e,0x28,0xe0,0x90,0x04,0x49,0xf0,0x90,0x9e,0x29,0xe0,0x90,0x04,0x4a,
53621 -0xf0,0xa3,0xe4,0xf0,0x90,0x9e,0x10,0xe0,0x90,0x04,0x4c,0xf0,0x90,0x9e,0x11,0xe0,
53622 -0x90,0x04,0x4d,0xf0,0x90,0x9e,0x12,0xe0,0x90,0x04,0x4e,0xf0,0x90,0x9e,0x13,0xe0,
53623 -0x90,0x04,0x4f,0xf0,0xe4,0x90,0x9e,0x15,0xf0,0x90,0x9e,0x10,0x04,0xf0,0xe4,0xa3,
53624 -0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,0x24,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,
53625 -0xf0,0xa3,0xf0,0x90,0x05,0x60,0xe0,0x90,0x9e,0x34,0xf0,0x90,0x05,0x61,0xe0,0x90,
53626 -0x9e,0x35,0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x36,0xf0,0x90,0x05,0x63,0xe0,0x90,
53627 -0x9e,0x37,0xf0,0x90,0x9e,0x2d,0xe0,0xff,0x90,0x9e,0x37,0xe0,0xfe,0xd3,0x9f,0x50,
53628 -0x0b,0x90,0x9e,0x2d,0xe0,0xc3,0x9e,0xd3,0x94,0x01,0x40,0x11,0x90,0x9e,0x1b,0xe0,
53629 -0xb4,0x01,0x02,0x80,0x03,0x90,0x9e,0x1f,0xe0,0xff,0x12,0x4e,0xd8,0x22,0x90,0x9e,
53630 -0x2e,0xe0,0x64,0x01,0x60,0x08,0x90,0x9e,0x1c,0xe0,0x60,0x02,0xe1,0x55,0x90,0x9e,
53631 -0x10,0xe0,0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,0x3b,0x90,0x9e,0x11,0xe0,
53632 -0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x28,0x90,0x9e,0x12,0xe0,0xc3,
53633 -0x94,0xff,0x50,0x0a,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x11,0xf0,0x80,0x15,0x90,0x9e,
53634 -0x13,0xe0,0xc3,0x94,0xff,0x50,0x10,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x12,0xf0,0x90,
53635 -0x9e,0x11,0xf0,0x90,0x9e,0x10,0xf0,0x90,0x00,0x44,0xe0,0x54,0x0c,0x60,0x76,0xe0,
53636 -0x30,0xe2,0x32,0x90,0x9e,0x24,0xe0,0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,
53637 -0x24,0x90,0x9e,0x25,0xe0,0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x11,
53638 -0x90,0x9e,0x26,0xe0,0xc3,0x94,0xff,0x50,0x0c,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x25,
53639 -0xf0,0x90,0x9e,0x24,0xf0,0x90,0x00,0x44,0xe0,0x30,0xe3,0x32,0x90,0x9e,0x27,0xe0,
53640 -0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,0x24,0x90,0x9e,0x28,0xe0,0xc3,0x94,
53641 -0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x11,0x90,0x9e,0x29,0xe0,0xc3,0x94,0xff,
53642 -0x50,0x0c,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x28,0xf0,0x90,0x9e,0x27,0xf0,0x90,0x04,
53643 -0xfd,0xe0,0x44,0x01,0xf0,0x22,0x3a,0x01,};
53644 -
53645 -// =================== v79 UMC A Cut COMMON 2011-10-06 =====================
53646 -u8 Rtl8192CUFwUMCACutImgArray[UMCACutImgArrayLength] = {
53647 -0xc1,0x88,0x02,0x00,0x4f,0x00,0x00,0x00,0x0a,0x06,0x18,0x09,0x58,0x3f,0x01,0x00,
53648 -0x61,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
53649 -0x02,0x43,0xba,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
53650 -0x00,0x00,0x00,0x02,0x5a,0x45,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
53651 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
53652 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
53653 -0x00,0x00,0x00,0x02,0x5f,0xfb,0x00,0x00,0x00,0x00,0x00,0xa1,0xdf,0x00,0x00,0x00,
53654 -0x05,0x04,0x03,0x02,0x00,0x03,0x06,0x05,0x04,0x03,0x00,0x04,0x06,0x05,0x04,0x02,
53655 -0x00,0x04,0x08,0x07,0x06,0x04,0x00,0x06,0x0a,0x09,0x08,0x06,0x00,0x08,0x0a,0x09,
53656 -0x08,0x04,0x00,0x08,0x0a,0x09,0x08,0x02,0x00,0x08,0x0a,0x09,0x08,0x00,0x00,0x08,
53657 -0x12,0x11,0x10,0x08,0x00,0x10,0x1a,0x19,0x18,0x10,0x00,0x18,0x22,0x21,0x20,0x18,
53658 -0x00,0x20,0x22,0x21,0x20,0x10,0x00,0x20,0x22,0x21,0x20,0x08,0x00,0x20,0x22,0x21,
53659 -0x1c,0x08,0x00,0x20,0x22,0x21,0x14,0x08,0x00,0x20,0x22,0x20,0x18,0x08,0x00,0x20,
53660 -0x31,0x30,0x20,0x10,0x00,0x30,0x31,0x30,0x18,0x00,0x00,0x30,0x31,0x2f,0x10,0x10,
53661 -0x00,0x30,0x31,0x2c,0x10,0x10,0x00,0x30,0x31,0x28,0x10,0x00,0x00,0x30,0x31,0x20,
53662 -0x10,0x00,0x00,0x30,0x31,0x10,0x10,0x00,0x00,0x30,0x04,0x04,0x04,0x05,0x04,0x04,
53663 -0x04,0x05,0x05,0x05,0x06,0x06,0x04,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x04,0x04,
53664 -0x05,0x05,0x05,0x05,0x06,0x06,0x04,0x04,0x05,0x05,0x05,0x05,0x06,0x07,0x0a,0x0b,
53665 -0x0d,0x10,0x04,0x05,0x05,0x06,0x06,0x09,0x0c,0x11,0x08,0x08,0x09,0x09,0x0a,0x0c,
53666 -0x10,0x11,0x04,0x04,0x04,0x05,0x04,0x04,0x05,0x07,0x07,0x07,0x08,0x0a,0x04,0x04,
53667 -0x04,0x04,0x06,0x0a,0x0b,0x0d,0x05,0x05,0x07,0x07,0x08,0x0b,0x0d,0x0f,0x04,0x04,
53668 -0x04,0x05,0x07,0x07,0x09,0x09,0x0c,0x0e,0x10,0x12,0x04,0x04,0x05,0x05,0x06,0x0a,
53669 -0x11,0x13,0x09,0x09,0x09,0x09,0x0c,0x0e,0x11,0x13,0x00,0x00,0x00,0x00,0x00,0x00,
53670 -0x00,0x00,0x00,0x24,0x26,0x2a,0x18,0x1a,0x1d,0x1f,0x21,0x27,0x29,0x2a,0x00,0x00,
53671 -0x00,0x1f,0x23,0x28,0x2a,0x2c,0x00,0x04,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x18,
53672 -0x00,0x24,0x00,0x30,0x00,0x48,0x00,0x60,0x00,0x90,0x00,0xc0,0x00,0xd8,0x00,0x50,
53673 -0x00,0x78,0x00,0xa0,0x00,0xc8,0x01,0x40,0x01,0x90,0x01,0xe0,0x02,0x30,0x01,0x2c,
53674 -0x01,0x40,0x01,0xe0,0x02,0xd0,0x03,0xe8,0x04,0xb0,0x06,0x40,0x07,0xd0,0x00,0x02,
53675 -0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x0c,0x00,0x12,0x00,0x18,0x00,0x24,0x00,0x30,
53676 -0x00,0x48,0x00,0x60,0x00,0x6c,0x00,0x28,0x00,0x3c,0x00,0x50,0x00,0x64,0x00,0xa0,
53677 -0x00,0xc8,0x00,0xf0,0x01,0x18,0x00,0x64,0x00,0xa0,0x00,0xf0,0x01,0x68,0x01,0xf4,
53678 -0x02,0x58,0x03,0x20,0x03,0xe8,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x04,0x04,
53679 -0x05,0x07,0x04,0x04,0x07,0x0a,0x0a,0x0c,0x0c,0x12,0x05,0x07,0x07,0x08,0x0b,0x12,
53680 -0x24,0x3c,0x01,0x01,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x01,0x02,
53681 -0x03,0x04,0x05,0x06,0x07,0x08,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x20,0x1e,
53682 -0x1c,0x18,0x10,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
53683 -0xbb,0x01,0x0c,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe0,0x22,0x50,
53684 -0x06,0xe9,0x25,0x82,0xf8,0xe6,0x22,0xbb,0xfe,0x06,0xe9,0x25,0x82,0xf8,0xe2,0x22,
53685 -0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe4,0x93,0x22,0xbb,0x01,0x06,
53686 -0x89,0x82,0x8a,0x83,0xf0,0x22,0x50,0x02,0xf7,0x22,0xbb,0xfe,0x01,0xf3,0x22,0xf8,
53687 -0xbb,0x01,0x0d,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe8,0xf0,0x22,
53688 -0x50,0x06,0xe9,0x25,0x82,0xc8,0xf6,0x22,0xbb,0xfe,0x05,0xe9,0x25,0x82,0xc8,0xf2,
53689 -0x22,0xc5,0xf0,0xf8,0xa3,0xe0,0x28,0xf0,0xc5,0xf0,0xf8,0xe5,0x82,0x15,0x82,0x70,
53690 -0x02,0x15,0x83,0xe0,0x38,0xf0,0x22,0xbb,0x01,0x0a,0x89,0x82,0x8a,0x83,0xe0,0xf5,
53691 -0xf0,0xa3,0xe0,0x22,0x50,0x06,0x87,0xf0,0x09,0xe7,0x19,0x22,0xbb,0xfe,0x07,0xe3,
53692 -0xf5,0xf0,0x09,0xe3,0x19,0x22,0x89,0x82,0x8a,0x83,0xe4,0x93,0xf5,0xf0,0x74,0x01,
53693 -0x93,0x22,0xbb,0x01,0x10,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe0,
53694 -0xf5,0xf0,0xa3,0xe0,0x22,0x50,0x09,0xe9,0x25,0x82,0xf8,0x86,0xf0,0x08,0xe6,0x22,
53695 -0xbb,0xfe,0x0a,0xe9,0x25,0x82,0xf8,0xe2,0xf5,0xf0,0x08,0xe2,0x22,0xe5,0x83,0x2a,
53696 -0xf5,0x83,0xe9,0x93,0xf5,0xf0,0xa3,0xe9,0x93,0x22,0xbb,0x01,0x0a,0x89,0x82,0x8a,
53697 -0x83,0xf0,0xe5,0xf0,0xa3,0xf0,0x22,0x50,0x06,0xf7,0x09,0xa7,0xf0,0x19,0x22,0xbb,
53698 -0xfe,0x06,0xf3,0xe5,0xf0,0x09,0xf3,0x19,0x22,0xf8,0xbb,0x01,0x11,0xe5,0x82,0x29,
53699 -0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe8,0xf0,0xe5,0xf0,0xa3,0xf0,0x22,0x50,0x09,
53700 -0xe9,0x25,0x82,0xc8,0xf6,0x08,0xa6,0xf0,0x22,0xbb,0xfe,0x09,0xe9,0x25,0x82,0xc8,
53701 -0xf2,0xe5,0xf0,0x08,0xf2,0x22,0xef,0x4b,0xff,0xee,0x4a,0xfe,0xed,0x49,0xfd,0xec,
53702 -0x48,0xfc,0x22,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x22,0xa4,
53703 -0x25,0x82,0xf5,0x82,0xe5,0xf0,0x35,0x83,0xf5,0x83,0x22,0xe0,0xfb,0xa3,0xe0,0xfa,
53704 -0xa3,0xe0,0xf9,0x22,0xf8,0xe0,0xfb,0xa3,0xa3,0xe0,0xf9,0x25,0xf0,0xf0,0xe5,0x82,
53705 -0x15,0x82,0x70,0x02,0x15,0x83,0xe0,0xfa,0x38,0xf0,0x22,0xeb,0xf0,0xa3,0xea,0xf0,
53706 -0xa3,0xe9,0xf0,0x22,0xd0,0x83,0xd0,0x82,0xf8,0xe4,0x93,0x70,0x12,0x74,0x01,0x93,
53707 -0x70,0x0d,0xa3,0xa3,0x93,0xf8,0x74,0x01,0x93,0xf5,0x82,0x88,0x83,0xe4,0x73,0x74,
53708 -0x02,0x93,0x68,0x60,0xef,0xa3,0xa3,0xa3,0x80,0xdf,0x02,0x43,0xf8,0x02,0x50,0xa9,
53709 -0xe4,0x93,0xa3,0xf8,0xe4,0x93,0xa3,0x40,0x03,0xf6,0x80,0x01,0xf2,0x08,0xdf,0xf4,
53710 -0x80,0x29,0xe4,0x93,0xa3,0xf8,0x54,0x07,0x24,0x0c,0xc8,0xc3,0x33,0xc4,0x54,0x0f,
53711 -0x44,0x20,0xc8,0x83,0x40,0x04,0xf4,0x56,0x80,0x01,0x46,0xf6,0xdf,0xe4,0x80,0x0b,
53712 -0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x90,0x44,0x3d,0xe4,0x7e,0x01,0x93,0x60,
53713 -0xbc,0xa3,0xff,0x54,0x3f,0x30,0xe5,0x09,0x54,0x1f,0xfe,0xe4,0x93,0xa3,0x60,0x01,
53714 -0x0e,0xcf,0x54,0xc0,0x25,0xe0,0x60,0xa8,0x40,0xb8,0xe4,0x93,0xa3,0xfa,0xe4,0x93,
53715 -0xa3,0xf8,0xe4,0x93,0xa3,0xc8,0xc5,0x82,0xc8,0xca,0xc5,0x83,0xca,0xf0,0xa3,0xc8,
53716 -0xc5,0x82,0xc8,0xca,0xc5,0x83,0xca,0xdf,0xe9,0xde,0xe7,0x80,0xbe,0x41,0x9e,0x66,
53717 -0x00,0x41,0x9e,0xae,0x00,0x41,0x9e,0x4d,0x80,0x41,0x9e,0x4e,0x80,0x41,0x9e,0xb0,
53718 -0x00,0x00,0xf0,0x90,0x9e,0x57,0xe0,0x90,0x9e,0x8a,0xf0,0xe4,0xfb,0xfd,0x7f,0x54,
53719 -0x7e,0x01,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x88,0xeb,0xf0,0xa3,0xe0,
53720 -0xfb,0xa3,0xe0,0xf5,0x44,0xe4,0xf5,0x45,0x12,0x30,0x62,0xd0,0xd0,0x92,0xaf,0x22,
53721 -0x90,0x01,0x5f,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x08,0xf0,0xe4,0x90,0x9e,0x89,0xf0,
53722 -0x90,0x9e,0x55,0xe0,0x90,0x9e,0x8a,0xf0,0xe4,0xfb,0xfd,0x7f,0x5c,0x7e,0x01,0x91,
53723 -0x62,0x90,0x01,0x5f,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x02,0xf0,0x90,0x9e,0x5c,
53724 -0x14,0xf0,0x90,0x9e,0x5e,0xe0,0x54,0x0f,0xc3,0x94,0x0c,0x50,0x02,0xf1,0x16,0x22,
53725 -0x8f,0x82,0x8e,0x83,0xa3,0xa3,0xa3,0xe4,0xf0,0x22,0xe4,0xf5,0x22,0x7f,0x60,0x7e,
53726 -0x01,0x80,0xed,0x90,0x9e,0x60,0xe0,0xff,0x7d,0x01,0xe1,0x1a,0xb1,0xb1,0xbf,0x01,
53727 -0x0f,0x90,0x9e,0x68,0xe0,0xff,0xe4,0xfd,0xf1,0xfe,0x90,0x04,0x1f,0x74,0x20,0xf0,
53728 -0x22,0x90,0x01,0xca,0xe5,0x25,0xf0,0xef,0x60,0x03,0x12,0x4f,0x2a,0x22,0x22,0x22,
53729 -0x22,0x22,0x00,0x02,0x60,0x8d,0x02,0x60,0x94,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
53730 -0x8b,0x1b,0x8a,0x1c,0x89,0x1d,0x90,0x9e,0x8b,0x71,0x8b,0xab,0x1e,0xaa,0x1f,0xa9,
53731 -0x20,0x90,0x9e,0x8e,0x71,0x8b,0xaf,0x21,0x15,0x21,0xef,0x60,0x1b,0x90,0x9e,0x8e,
53732 -0xe4,0x75,0xf0,0x01,0x71,0x74,0x12,0x24,0x62,0xff,0x90,0x9e,0x8b,0xe4,0x75,0xf0,
53733 -0x01,0x71,0x74,0xef,0x51,0x4d,0x80,0xde,0xab,0x1b,0xaa,0x1c,0xa9,0x1d,0xd0,0xd0,
53734 -0x92,0xaf,0x22,0x90,0x06,0xa9,0xe0,0xf5,0x50,0x54,0xc0,0x70,0x0d,0x90,0x9e,0x63,
53735 -0xe0,0x54,0xfe,0xf0,0xe0,0x54,0xfd,0xf0,0x91,0xd3,0xe5,0x50,0x30,0xe6,0x17,0x90,
53736 -0x9e,0x63,0xe0,0x44,0x01,0xf0,0x90,0x9e,0x61,0xe0,0x64,0x02,0x60,0x04,0x91,0xdc,
53737 -0x80,0x0b,0x91,0x80,0x80,0x07,0x90,0x9e,0x63,0xe0,0x54,0xfe,0xf0,0xe5,0x50,0x90,
53738 -0x9e,0x63,0x30,0xe7,0x17,0xe0,0x44,0x02,0xf0,0xe4,0x90,0x9e,0x89,0x91,0x52,0x90,
53739 -0x01,0x57,0x74,0x05,0xf0,0x90,0x9e,0x62,0x74,0x01,0xf0,0x22,0xe0,0x54,0xfd,0xf0,
53740 -0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x04,0x1d,0xe0,0x60,0x1a,0x90,0x05,
53741 -0x22,0xe0,0x54,0x90,0x60,0x07,0x90,0x01,0xc6,0xe0,0x44,0x40,0xf0,0x90,0x01,0xc7,
53742 -0xe0,0x30,0xe1,0xe4,0x7f,0x00,0x80,0x02,0x7f,0x01,0xd0,0xd0,0x92,0xaf,0x22,0xc0,
53743 -0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,
53744 -0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x01,0xc4,0x74,
53745 -0xdf,0xf0,0x74,0x45,0xa3,0xf0,0x53,0x91,0xdf,0x90,0x01,0x3c,0xe0,0x55,0x30,0xf5,
53746 -0x34,0xa3,0xe0,0x55,0x31,0xf5,0x35,0xa3,0xe0,0x55,0x32,0xf5,0x36,0xa3,0xe0,0x55,
53747 -0x33,0xf5,0x37,0xe5,0x34,0x30,0xe0,0x06,0x90,0x01,0x3c,0x74,0x01,0xf0,0xe5,0x34,
53748 -0x30,0xe1,0x08,0x90,0x01,0x3c,0x74,0x02,0xf0,0xf1,0xbc,0xe5,0x34,0x30,0xe2,0x38,
53749 -0x90,0x01,0x3c,0x74,0x04,0xf0,0x90,0x06,0x92,0xe0,0x30,0xe0,0x24,0x90,0x9e,0x89,
53750 -0xe4,0xf0,0x90,0x9e,0x55,0xe0,0x90,0x9e,0x8a,0xf0,0xe4,0xfb,0xfd,0x7f,0x58,0x7e,
53751 -0x01,0x91,0x62,0x90,0x01,0x5b,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x01,0xf0,0x80,
53752 -0x07,0x90,0x9e,0x5d,0xe4,0xf0,0x91,0xd3,0xe5,0x34,0x30,0xe3,0x38,0x90,0x01,0x3c,
53753 -0x74,0x08,0xf0,0x90,0x06,0x92,0xe0,0x30,0xe1,0x24,0x90,0x9e,0x89,0xe4,0xf0,0x90,
53754 -0x9e,0x55,0xe0,0x90,0x9e,0x8a,0xf0,0xe4,0xfb,0xfd,0x7f,0x5c,0x7e,0x01,0x91,0x62,
53755 -0x90,0x01,0x5f,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x02,0xf0,0x80,0x07,0x90,0x9e,
53756 -0x5c,0xe4,0xf0,0x91,0xd3,0xe5,0x34,0x30,0xe4,0x09,0x90,0x01,0x3c,0x74,0x10,0xf0,
53757 -0x12,0x4d,0xe2,0xe5,0x34,0x30,0xe5,0x09,0x90,0x01,0x3c,0x74,0x20,0xf0,0x12,0x4e,
53758 -0x25,0xe5,0x35,0x30,0xe0,0x1a,0x90,0x01,0x3d,0x74,0x01,0xf0,0x90,0x01,0x2f,0xe0,
53759 -0x44,0x7f,0xf0,0x90,0x00,0x83,0xe0,0x90,0x9e,0x60,0xf0,0x12,0x64,0xa1,0x91,0xd3,
53760 -0x74,0xdf,0x04,0x90,0x01,0xc4,0xf0,0x74,0x45,0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,
53761 -0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,
53762 -0x83,0xd0,0xf0,0xd0,0xe0,0x32,0x7d,0x01,0x7f,0x0c,0x8f,0x71,0x8d,0x72,0xe5,0x71,
53763 -0x54,0x0f,0xff,0x90,0x9e,0x5e,0xe0,0x54,0x0f,0x6f,0x60,0x72,0xe5,0x71,0x30,0xe2,
53764 -0x2b,0x90,0x9e,0x5e,0xe0,0x20,0xe2,0x05,0x7f,0x01,0x12,0x63,0x92,0x90,0x9e,0x5e,
53765 -0xe0,0x30,0xe3,0x07,0xe5,0x71,0x20,0xe3,0x02,0x80,0x54,0x90,0x9e,0x5e,0xe0,0x20,
53766 -0xe3,0x4c,0xe5,0x71,0x30,0xe3,0x47,0xaf,0x72,0x02,0x63,0x2e,0x90,0x9e,0x5e,0xe0,
53767 -0x54,0x0f,0xff,0xbf,0x0c,0x0d,0xe5,0x71,0x20,0xe3,0x08,0x12,0x5e,0xf1,0xef,0x60,
53768 -0x2d,0xf1,0x9f,0x90,0x9e,0x5e,0xe0,0x54,0x0f,0xff,0xbf,0x04,0x0e,0xe5,0x71,0x20,
53769 -0xe2,0x09,0x12,0x62,0x50,0xef,0x60,0x16,0x12,0x48,0xaa,0x90,0x9e,0x5e,0xe0,0x54,
53770 -0x0f,0xff,0xbf,0x02,0x09,0x12,0x62,0xbb,0xef,0x60,0x03,0x12,0x64,0x87,0x22,0x90,
53771 -0x06,0x04,0xe0,0x44,0x40,0xf0,0xe5,0x73,0xb4,0x01,0x05,0x7f,0x01,0x12,0x63,0x4d,
53772 -0x90,0x9e,0x5e,0xe0,0x54,0xf0,0xf0,0xe0,0x44,0x04,0xf0,0x22,0x90,0x9e,0x62,0xe0,
53773 -0x60,0x0e,0xe4,0xf0,0xa3,0xe0,0x54,0xfd,0xf0,0xe0,0x54,0x07,0x70,0x2b,0x80,0x27,
53774 -0x90,0x9e,0x51,0xe0,0x04,0xf0,0x90,0x9e,0x63,0xe0,0x54,0xef,0xf0,0x90,0x9e,0x56,
53775 -0xe0,0xff,0x90,0x9e,0x51,0xe0,0xd3,0x9f,0x40,0x0d,0xe5,0x73,0xb4,0x01,0x0a,0xa3,
53776 -0xe0,0x70,0x06,0xe0,0x04,0xf0,0x22,0x91,0xd3,0x22,0xe0,0xff,0x7d,0x01,0x90,0x9e,
53777 -0x9c,0xef,0xf0,0xa3,0xed,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xe5,0x74,0x60,0x04,0xe4,
53778 -0xff,0x11,0x8f,0x90,0x9e,0x9c,0xe0,0x30,0xe0,0x09,0x90,0x9e,0x9e,0xe4,0xf0,0xa3,
53779 -0x74,0x80,0xf0,0x90,0x9e,0x9c,0xe0,0xff,0xc3,0x13,0x90,0xfd,0x10,0xf0,0x90,0x04,
53780 -0x25,0xef,0xf0,0x90,0x9e,0x9d,0xe0,0x60,0x1f,0xa3,0xa3,0xe0,0xff,0x24,0x0f,0xf5,
53781 -0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x80,0xf0,0x74,0x10,0x2f,0xf5,0x82,0xe4,
53782 -0x34,0xfc,0xf5,0x83,0xe0,0x44,0x80,0xf0,0x90,0x9e,0x9e,0xa3,0xe0,0xff,0xfd,0x24,
53783 -0x08,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe4,0xf0,0x74,0x09,0x2d,0xf5,0x82,0xe4,
53784 -0x34,0xfc,0xf5,0x83,0xe0,0x54,0xf0,0xf0,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,
53785 -0xf5,0x83,0xe0,0x54,0xf7,0xf0,0x90,0x9e,0x9e,0xe0,0xfe,0xa3,0xe0,0xff,0x22,0xef,
53786 -0x60,0x0b,0x90,0x9e,0x77,0xe0,0xb4,0x01,0x10,0xe4,0xff,0x80,0x09,0x90,0x9e,0x77,
53787 -0xe0,0xb4,0x01,0x05,0x7f,0x01,0x12,0x77,0x66,0x22,0x90,0x01,0x37,0x74,0x02,0xf0,
53788 -0x90,0x05,0x22,0x74,0xff,0xf0,0x12,0x77,0x1c,0xef,0x70,0x06,0x90,0x01,0xc8,0x74,
53789 -0xfd,0xf0,0x7d,0x02,0x7f,0x03,0x12,0x31,0x9d,0xe5,0x74,0x60,0x04,0x7f,0x01,0x11,
53790 -0x8f,0x11,0xdf,0x90,0x9e,0x5e,0xe0,0x54,0xf0,0xf0,0xe0,0x44,0x02,0xf0,0x22,0x7f,
53791 -0x78,0x7e,0x08,0x12,0x22,0x65,0x90,0x9d,0xff,0x12,0x25,0x08,0x7f,0x04,0x7e,0x0c,
53792 -0x12,0x22,0x65,0x90,0x9e,0x03,0x12,0x25,0x08,0x7f,0x00,0x7e,0x08,0x12,0x22,0x65,
53793 -0x90,0x9e,0x07,0x12,0x25,0x08,0x90,0x9e,0x77,0xe0,0x90,0x9d,0xff,0xb4,0x01,0x0d,
53794 -0x12,0x43,0x53,0xef,0x54,0xc7,0xff,0xed,0x54,0xc7,0xfd,0x80,0x07,0x12,0x43,0x53,
53795 -0xef,0x54,0xc7,0xff,0xec,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x78,0x7e,0x08,0x12,
53796 -0x2b,0x08,0x90,0x9e,0x03,0x12,0x43,0x53,0xef,0x54,0x0f,0xff,0xec,0x90,0x80,0x96,
53797 -0x12,0x25,0x08,0x7f,0x04,0x7e,0x0c,0x12,0x2b,0x08,0x90,0x9e,0x07,0x12,0x43,0x53,
53798 -0xef,0x44,0x02,0xff,0xec,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x00,0x7e,0x08,0x12,
53799 -0x2b,0x08,0x7f,0x70,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9e,0x0b,0x12,0x25,0x08,0x90,
53800 -0x80,0x96,0x12,0x25,0x14,0x00,0x1b,0x25,0xa0,0x7f,0x70,0x7e,0x0e,0x12,0x2b,0x08,
53801 -0x90,0x80,0x68,0x12,0x25,0x14,0x00,0x00,0x00,0x00,0xe4,0xfd,0xff,0x12,0x30,0x2c,
53802 -0x90,0x9e,0x77,0xe0,0xb4,0x01,0x11,0x90,0x80,0x68,0x12,0x25,0x14,0x00,0x00,0x00,
53803 -0x00,0xe4,0xfd,0x7f,0x01,0x12,0x30,0x2c,0x90,0x00,0x11,0xe0,0x54,0xf6,0xf0,0x80,
53804 -0x08,0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
53805 -0x7f,0x10,0xdf,0xfe,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
53806 -0x90,0x9e,0xad,0xed,0xf0,0x90,0x9e,0xac,0xef,0xf0,0xd3,0x94,0x07,0x50,0x63,0xe0,
53807 -0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,
53808 -0x47,0xe0,0x5f,0xf0,0x31,0xb9,0x90,0x9e,0xac,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,
53809 -0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x46,0xe0,0x4f,0xf0,0x31,0xb9,0x90,
53810 -0x9e,0xad,0xe0,0x60,0x16,0x90,0x9e,0xac,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,
53811 -0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x45,0x80,0x66,0x90,0x9e,0xac,0xe0,0xff,
53812 -0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x45,
53813 -0x80,0x6b,0x90,0x9e,0xac,0xe0,0x24,0xf8,0xf0,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,
53814 -0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0x31,0xb1,0x90,0x9e,0xac,0xe0,0xff,
53815 -0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x43,0xe0,
53816 -0x4f,0xf0,0x31,0xb9,0x90,0x9e,0xad,0xe0,0x60,0x1b,0x90,0x9e,0xac,0xe0,0xff,0x74,
53817 -0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0xff,0x90,0x00,
53818 -0x42,0xe0,0x4f,0x80,0x1a,0x90,0x9e,0xac,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,
53819 -0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0xf4,0xff,0x90,0x00,0x42,0xe0,0x5f,0xf0,
53820 -0x31,0xb9,0xd0,0xd0,0x92,0xaf,0x22,0xf0,0x90,0x00,0x45,0xe0,0x54,0xfe,0xfd,0x7f,
53821 -0x45,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x8f,0x82,0x75,0x83,0x00,0xed,0xf0,0x31,
53822 -0xb9,0xd0,0xd0,0x92,0xaf,0x22,0xef,0x14,0x60,0x30,0x14,0x60,0x66,0x24,0x02,0x60,
53823 -0x02,0x61,0x7d,0x90,0x9e,0x1a,0x74,0x02,0xf0,0x90,0x00,0x48,0xe0,0x44,0x0c,0xfd,
53824 -0x7f,0x48,0x51,0xc1,0x90,0x00,0x47,0xe0,0x44,0x08,0xfd,0x7f,0x47,0x51,0xc1,0x90,
53825 -0x00,0x45,0xe0,0x44,0x10,0xfd,0x7f,0x45,0x80,0x71,0xe4,0x90,0x9e,0x1a,0xf0,0x90,
53826 -0x9e,0x16,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x80,0x7e,0x08,0x12,
53827 -0x2b,0x08,0x90,0x00,0x45,0xe0,0x44,0xef,0xfd,0x7f,0x45,0x51,0xc1,0x90,0x00,0x45,
53828 -0xe0,0x54,0xef,0xfd,0x7f,0x45,0x51,0xc1,0x90,0x00,0x46,0xe0,0x44,0x10,0xfd,0x7f,
53829 -0x46,0x80,0x38,0x90,0x9e,0x1a,0x74,0x01,0xf0,0x90,0x9e,0x20,0x12,0x43,0x53,0x90,
53830 -0x80,0x96,0x12,0x25,0x08,0x7f,0x80,0x7e,0x08,0x12,0x2b,0x08,0x90,0x00,0x45,0xe0,
53831 -0x44,0x20,0xfd,0x7f,0x45,0x51,0xc1,0x90,0x00,0x45,0xe0,0x44,0x10,0xfd,0x7f,0x45,
53832 -0x51,0xc1,0x90,0x00,0x46,0xe0,0x44,0x10,0xfd,0x7f,0x46,0x51,0xc1,0x22,0x90,0x00,
53833 -0x02,0x12,0x42,0x20,0x90,0x9e,0x1c,0xf0,0x90,0x00,0x01,0x12,0x42,0x20,0x25,0xe0,
53834 -0x25,0xe0,0x90,0x9e,0x1b,0xf0,0x12,0x24,0x62,0x25,0xe0,0x25,0xe0,0x90,0x9e,0x1f,
53835 -0xf0,0x90,0x05,0x60,0xe0,0x90,0x9e,0x2a,0xf0,0x90,0x05,0x61,0xe0,0x90,0x9e,0x2b,
53836 -0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x2c,0xf0,0x90,0x05,0x63,0xe0,0x90,0x9e,0x2d,
53837 -0xf0,0xa2,0xaf,0xe4,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x90,0x9e,0x1b,0xe0,0xff,
53838 -0xd1,0xd8,0x90,0x9e,0x3f,0xe0,0x24,0xff,0x92,0xaf,0x90,0x9e,0x1c,0xe0,0x70,0x02,
53839 -0x81,0x84,0x90,0x9e,0x1b,0xe0,0x70,0x02,0x81,0x84,0x90,0x9e,0x1f,0xe0,0x70,0x02,
53840 -0x81,0x84,0xa2,0xaf,0xe4,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x90,0x9e,0x2e,0x74,
53841 -0x01,0xf0,0x90,0x9e,0x3f,0xe0,0x24,0xff,0x92,0xaf,0x51,0xb8,0x90,0x00,0x46,0xe0,
53842 -0x44,0x01,0xfd,0x7f,0x46,0x51,0xc1,0x90,0x9e,0x14,0xe0,0x60,0x15,0x90,0x9e,0x20,
53843 -0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x80,0x7e,0x08,0x12,0x2b,0x08,
53844 -0x80,0x06,0x90,0x05,0x22,0x74,0x7f,0xf0,0x90,0x00,0x45,0xe0,0x54,0xef,0xfd,0x7f,
53845 -0x45,0x51,0xc1,0x90,0x05,0x87,0xe0,0x64,0x80,0xf0,0x90,0x9e,0x2a,0xe0,0x90,0x05,
53846 -0x84,0xf0,0x90,0x9e,0x2b,0xe0,0x90,0x05,0x85,0xf0,0x90,0x9e,0x2c,0xe0,0x90,0x05,
53847 -0x86,0xf0,0x90,0x9e,0x2d,0xe0,0x90,0x05,0x87,0xf0,0xa2,0xaf,0xe4,0x33,0x90,0x9e,
53848 -0x3f,0xf0,0xc2,0xaf,0x90,0x01,0x3c,0xe0,0x44,0x20,0xf0,0x7d,0x20,0xe4,0xff,0x12,
53849 -0x31,0xb7,0x80,0x2b,0x90,0x9e,0x1c,0xe0,0x70,0x2d,0x90,0x9e,0x2e,0x51,0xb7,0x90,
53850 -0x00,0x46,0xe0,0x54,0xfe,0xfd,0x7f,0x46,0x51,0xc1,0x90,0x05,0x22,0xe4,0xf0,0xa2,
53851 -0xaf,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x7d,0x20,0xe4,0xff,0x12,0x31,0x49,0x90,
53852 -0x9e,0x3f,0xe0,0x24,0xff,0x92,0xaf,0x22,0x8b,0x59,0x8a,0x5a,0x89,0x5b,0x90,0x00,
53853 -0x02,0x12,0x42,0x20,0x90,0x9e,0x1d,0xf0,0xe0,0x30,0xe0,0x4b,0x90,0x9e,0x14,0x74,
53854 -0x01,0xf0,0x7f,0x80,0x7e,0x08,0x12,0x22,0x65,0x90,0x9e,0x16,0x12,0x25,0x08,0xab,
53855 -0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0xe4,0xfc,0xfd,0xfe,
53856 -0x78,0x1a,0x12,0x24,0xf5,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,0x07,0x90,0x9e,0x16,
53857 -0x12,0x43,0x53,0xec,0x54,0x03,0xfc,0x12,0x43,0x46,0x90,0x9e,0x20,0x12,0x25,0x08,
53858 -0x90,0x05,0x22,0xe4,0xf0,0x80,0x2d,0xe4,0x90,0x9e,0x14,0xf0,0x7f,0x80,0x7e,0x08,
53859 -0x12,0x22,0x65,0xec,0x54,0x03,0xfc,0xec,0x44,0xc0,0xfc,0x90,0x9e,0x16,0x12,0x25,
53860 -0x08,0x90,0x9e,0x16,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x80,0x7e,
53861 -0x08,0x12,0x2b,0x08,0x90,0x9e,0x1d,0xe0,0x30,0xe1,0x19,0x7d,0x0c,0x7f,0x47,0x51,
53862 -0xc1,0x90,0x00,0x48,0xe0,0x44,0x0c,0xfd,0x7f,0x48,0x51,0xc1,0x90,0x00,0x46,0xe0,
53863 -0x44,0x10,0x80,0x1c,0x90,0x00,0x47,0xe0,0x54,0xf3,0xfd,0x7f,0x47,0x51,0xc1,0x90,
53864 -0x00,0x48,0xe0,0x54,0xf3,0xfd,0x7f,0x48,0x51,0xc1,0x90,0x00,0x46,0xe0,0x54,0xef,
53865 -0xfd,0x7f,0x46,0x51,0xc1,0xe4,0x90,0x9e,0x1a,0xf0,0x22,0x90,0x01,0x3c,0x74,0xff,
53866 -0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x01,0x34,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xfd,
53867 -0x7f,0x54,0x51,0xc1,0x7d,0xff,0x7f,0x55,0x51,0xc1,0x7d,0xff,0x7f,0x56,0x51,0xc1,
53868 -0x7d,0xff,0x7f,0x57,0x41,0xc1,0x90,0x01,0x30,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,
53869 -0xf0,0x90,0x01,0x38,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xfd,0x7f,0x50,0x51,0xc1,
53870 -0xe4,0xfd,0x7f,0x51,0x51,0xc1,0xe4,0xfd,0x7f,0x52,0x51,0xc1,0xe4,0xfd,0x7f,0x53,
53871 -0x41,0xc1,0xe5,0x22,0x64,0x01,0x70,0x3c,0xf1,0xbe,0xbf,0x01,0x05,0x7f,0x01,0x12,
53872 -0x44,0xf1,0x90,0x00,0x46,0xe0,0x44,0x04,0xfd,0x7f,0x46,0x51,0xc1,0x90,0x00,0x44,
53873 -0xe0,0x54,0xfb,0xfd,0x7f,0x44,0x51,0xc1,0x90,0x00,0x46,0xe0,0x54,0xfb,0xfd,0x7f,
53874 -0x46,0x51,0xc1,0x7f,0x02,0xf1,0xea,0x8f,0x26,0x90,0x01,0xc9,0xe5,0x26,0xf0,0xb4,
53875 -0x01,0x02,0xf1,0x2a,0x22,0x90,0x9e,0x1c,0xe0,0x64,0x01,0x60,0x02,0xc1,0xd7,0x90,
53876 -0x00,0x46,0xe0,0x44,0x01,0xfd,0x7f,0x46,0x51,0xc1,0x90,0x9e,0x2e,0xe0,0x70,0x31,
53877 -0x90,0x9e,0x14,0xe0,0x60,0x15,0x90,0x9e,0x20,0x12,0x43,0x53,0x90,0x80,0x96,0x12,
53878 -0x25,0x08,0x7f,0x80,0x7e,0x08,0x12,0x2b,0x08,0x80,0x06,0x90,0x05,0x22,0x74,0x7f,
53879 -0xf0,0x90,0x9e,0x1b,0xe0,0xff,0xd1,0xd8,0x90,0x9e,0x2e,0x74,0x01,0x51,0xb7,0x80,
53880 -0x3f,0x90,0x9e,0x2e,0xe0,0x64,0x01,0x70,0x37,0x90,0x9e,0x1f,0xe0,0xff,0xd1,0xd8,
53881 -0xe4,0x90,0x9e,0x2e,0xf0,0x90,0x00,0x45,0xe0,0x44,0x01,0xfd,0x7f,0x45,0x51,0xc1,
53882 -0x90,0x9e,0x14,0xe0,0x60,0x15,0x90,0x9e,0x16,0x12,0x43,0x53,0x90,0x80,0x96,0x12,
53883 -0x25,0x08,0x7f,0x80,0x7e,0x08,0x12,0x2b,0x08,0x80,0x05,0x90,0x05,0x22,0xe4,0xf0,
53884 -0x90,0x05,0x87,0xe0,0x64,0x80,0xf0,0x90,0x9e,0x2a,0xe0,0x90,0x05,0x84,0xf0,0x90,
53885 -0x9e,0x2b,0xe0,0x90,0x05,0x85,0xf0,0x90,0x9e,0x2c,0xe0,0x90,0x05,0x86,0xf0,0x90,
53886 -0x9e,0x2d,0xe0,0x90,0x05,0x87,0xf0,0x22,0x90,0x05,0x60,0xe0,0x90,0x9e,0x2a,0xf0,
53887 -0x90,0x05,0x61,0xe0,0x90,0x9e,0x2b,0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x2c,0xf0,
53888 -0x90,0x05,0x63,0xe0,0x90,0x9e,0x2d,0xf0,0xc3,0x74,0xff,0x9f,0xfe,0x90,0x9e,0x2b,
53889 -0xe0,0xd3,0x9e,0x40,0x1e,0xe0,0x2f,0xf0,0xa3,0xe0,0xb4,0xff,0x0f,0xe4,0xf0,0xa3,
53890 -0xe0,0xb4,0xff,0x03,0xe4,0xf0,0x22,0x90,0x9e,0x2d,0x80,0x03,0x90,0x9e,0x2c,0xe0,
53891 -0x04,0xf0,0x22,0x90,0x9e,0x2b,0xe0,0x2f,0xf0,0x22,0x90,0x00,0x49,0xe0,0x90,0x9e,
53892 -0xb1,0xf0,0xe0,0x54,0x0f,0xf0,0x44,0xf0,0xfd,0x7f,0x49,0x51,0xc1,0x90,0x9e,0xb1,
53893 -0xe0,0x44,0xb0,0xfd,0x7f,0x49,0x41,0xc1,0x8e,0x59,0x8f,0x5a,0x8b,0x5b,0x8a,0x5c,
53894 -0x89,0x5d,0xe4,0x90,0x9e,0x34,0xf0,0xef,0x90,0x00,0x31,0xf0,0x31,0xb9,0xe5,0x59,
53895 -0x54,0x03,0xff,0x90,0x00,0x32,0xe0,0x54,0xfc,0x4f,0xf0,0x31,0xb9,0x90,0x00,0x33,
53896 -0xe0,0x54,0x7f,0xf0,0x31,0xb9,0x90,0x00,0x33,0xe0,0x20,0xe7,0x0e,0x90,0x9e,0x34,
53897 -0xe0,0xc3,0x94,0x64,0x50,0x05,0xe0,0x04,0xf0,0x80,0xeb,0x90,0x9e,0x34,0xe0,0xc3,
53898 -0x94,0x64,0x50,0x10,0x90,0x00,0x30,0xe0,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x12,0x42,
53899 -0x4d,0x7f,0x01,0x22,0x7f,0x00,0x22,0x12,0x45,0xb1,0xbf,0x01,0x10,0x90,0x02,0x09,
53900 -0xe0,0xff,0x7d,0x01,0x12,0x47,0xfe,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0x7f,0x0b,
53901 -0xf1,0xea,0xef,0x65,0x25,0x60,0x10,0xe5,0x25,0xb4,0x01,0x05,0xe4,0xf5,0x25,0x80,
53902 -0x03,0x75,0x25,0x01,0x7f,0x01,0x22,0x7f,0x00,0x22,0xe4,0x90,0x9e,0x74,0xf0,0x90,
53903 -0x00,0x80,0xe0,0x44,0x80,0xfd,0x7f,0x80,0x41,0xc1,0xd3,0x10,0xaf,0x01,0xc3,0xc0,
53904 -0xd0,0x90,0x9e,0xb2,0xef,0xf0,0xd3,0x94,0x07,0x50,0x47,0xe0,0xff,0x74,0x01,0xa8,
53905 -0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x46,0xe0,0x5f,0xf0,
53906 -0x12,0x49,0xb9,0x90,0x9e,0xb2,0xe0,0xfd,0x74,0x01,0x7e,0x00,0xa8,0x05,0x08,0x80,
53907 -0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,0x44,0xe0,0xfb,0xe4,0xfe,
53908 -0xef,0x5b,0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,0xd8,0xf8,0xff,
53909 -0x80,0x44,0x90,0x9e,0xb2,0xe0,0x24,0xf8,0xf0,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,
53910 -0x80,0x02,0xc3,0x33,0xd8,0xfc,0x12,0x49,0xb1,0x90,0x9e,0xb2,0xe0,0xfd,0x74,0x01,
53911 -0x7e,0x00,0xa8,0x05,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,
53912 -0x00,0x42,0xe0,0xfb,0xe4,0xfe,0xef,0x5b,0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,
53913 -0x13,0xce,0x13,0xd8,0xf8,0xff,0xd0,0xd0,0x92,0xaf,0x22,0x75,0x28,0x33,0xe4,0xf5,
53914 -0x29,0x75,0x2a,0x03,0xf5,0x2b,0x90,0x01,0x30,0xe5,0x28,0xf0,0xa3,0xe5,0x29,0xf0,
53915 -0xa3,0xe5,0x2a,0xf0,0xa3,0xe5,0x2b,0xf0,0x22,0xe4,0x90,0x9e,0x31,0xf0,0xa3,0xf0,
53916 -0x75,0x8e,0x02,0x12,0x4f,0xda,0x12,0x5f,0xa9,0x12,0x5f,0xbc,0xe4,0xf5,0x12,0x12,
53917 -0x6f,0xa1,0x12,0x77,0x5d,0x12,0x60,0x9b,0x12,0x2e,0x01,0x12,0x77,0x18,0x11,0x8b,
53918 -0x90,0x00,0xf3,0xe0,0x30,0xe2,0x0d,0x90,0x05,0x41,0x74,0x10,0xf0,0x90,0x05,0x5a,
53919 -0xf0,0xa3,0xe4,0xf0,0x12,0x5f,0xf4,0x12,0x5f,0x91,0x12,0x44,0xfe,0x12,0x7d,0x1d,
53920 -0x90,0x9e,0x33,0xe5,0xd9,0xf0,0x12,0x4d,0x8b,0xc2,0xaf,0x90,0x00,0x80,0xe0,0x44,
53921 -0x40,0xf0,0x12,0x49,0xb9,0x75,0xe8,0x03,0x43,0xa8,0x85,0xd2,0xaf,0x90,0x01,0xbe,
53922 -0xe0,0x04,0xf0,0x90,0x01,0xc0,0xe0,0x04,0xf0,0x90,0x9e,0x31,0xe0,0x64,0x01,0xf0,
53923 -0x24,0xa9,0x90,0x01,0xc4,0xf0,0x74,0x50,0xa3,0xf0,0xe5,0x12,0x30,0xe4,0x09,0xc2,
53924 -0xaf,0x53,0x12,0xef,0xd2,0xaf,0x31,0x8e,0xe5,0x12,0x30,0xe6,0x17,0xc2,0xaf,0x53,
53925 -0x12,0xbf,0xd2,0xaf,0x12,0x69,0x51,0x90,0x9e,0x1e,0xe0,0xff,0x60,0x03,0xb4,0x01,
53926 -0x03,0x12,0x7d,0x7b,0x90,0x9e,0x1e,0xe0,0x70,0x03,0x12,0x7e,0x7e,0x31,0x61,0x80,
53927 -0xb8,0x90,0x06,0x34,0xe0,0x60,0x26,0x14,0x70,0x1b,0x7b,0x01,0x7a,0x06,0x79,0x35,
53928 -0x7f,0xf9,0x7e,0x01,0x12,0x4f,0x48,0xbf,0x01,0x09,0x90,0x06,0x35,0xe0,0x54,0x0f,
53929 -0xf0,0x80,0x05,0x80,0x00,0x02,0x77,0x0a,0xe4,0x90,0x06,0x34,0xf0,0x22,0x90,0x01,
53930 -0xcc,0xe0,0x54,0x0f,0x90,0x9e,0x34,0xf0,0x90,0x9e,0x34,0xe0,0xfd,0x70,0x02,0x41,
53931 -0xcf,0x90,0x9e,0xae,0xe0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,
53932 -0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xef,0x5d,0x70,0x02,0x41,0xc8,0x90,0x9e,0xae,
53933 -0xe0,0x75,0xf0,0x04,0x90,0x01,0xd0,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x35,0xf0,0x75,
53934 -0x1e,0x01,0x75,0x1f,0x9e,0x75,0x20,0x35,0x75,0x21,0x01,0x7b,0x01,0x7a,0x9e,0x79,
53935 -0x36,0x12,0x45,0x09,0x90,0x9e,0x36,0xe0,0xff,0xc4,0x13,0x13,0x13,0x54,0x01,0x90,
53936 -0x9e,0xae,0x30,0xe0,0x59,0xe0,0x75,0xf0,0x02,0x90,0x00,0x88,0x12,0x43,0x5f,0xe0,
53937 -0x90,0x9e,0x37,0xf0,0x90,0x9e,0xae,0xe0,0x75,0xf0,0x02,0x90,0x00,0x89,0x12,0x43,
53938 -0x5f,0xe0,0x90,0x9e,0x38,0xf0,0x90,0x9e,0xae,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd1,
53939 -0x12,0x43,0x5f,0xe0,0x90,0x9e,0x39,0xf0,0x90,0x9e,0xae,0xe0,0x75,0xf0,0x04,0x90,
53940 -0x01,0xd2,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x3a,0xf0,0x90,0x9e,0xae,0xe0,0x75,0xf0,
53941 -0x04,0x90,0x01,0xd3,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x3b,0xf0,0x80,0x33,0xe0,0x75,
53942 -0xf0,0x04,0x90,0x01,0xd1,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x37,0xf0,0x90,0x9e,0xae,
53943 -0xe0,0x75,0xf0,0x04,0x90,0x01,0xd2,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x38,0xf0,0x90,
53944 -0x9e,0xae,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd3,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x39,
53945 -0xf0,0xef,0x54,0x7f,0xff,0x7b,0x01,0x7a,0x9e,0x79,0x37,0x51,0xd0,0x90,0x9e,0x34,
53946 -0xe0,0xff,0x90,0x9e,0xae,0xe0,0xfe,0x74,0x01,0xa8,0x06,0x08,0x80,0x02,0xc3,0x33,
53947 -0xd8,0xfc,0xf4,0x5f,0x90,0x9e,0x34,0xf0,0x90,0x9e,0xae,0xe0,0xff,0x74,0x01,0xa8,
53948 -0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0x90,0x01,0xcc,0xf0,0x90,0x9e,0xae,0xe0,
53949 -0x04,0xf0,0xe0,0x54,0x03,0xf0,0x21,0x98,0x90,0x01,0xc6,0xe0,0x44,0x02,0xf0,0x22,
53950 -0x90,0x9e,0x3c,0x12,0x43,0x8b,0xef,0x12,0x43,0x94,0x53,0x0b,0x01,0x53,0x14,0x02,
53951 -0x53,0x2f,0x03,0x53,0x38,0x05,0x53,0x41,0x06,0x53,0x8f,0x07,0x53,0x49,0x09,0x53,
53952 -0x52,0x0c,0x53,0x5b,0x0d,0x53,0x64,0x0e,0x53,0x6d,0x1b,0x53,0x76,0x1c,0x53,0x7f,
53953 -0x2c,0x53,0x1d,0x2d,0x53,0x26,0x2e,0x00,0x00,0x53,0x88,0x90,0x9e,0x3c,0x12,0x43,
53954 -0x6b,0x02,0x61,0x9d,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x71,0xc4,0x90,0x9e,0x3c,
53955 -0x12,0x43,0x6b,0x02,0x71,0xca,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x72,0x12,0x90,
53956 -0x9e,0x3c,0x12,0x43,0x6b,0x02,0x72,0x40,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x71,
53957 -0x74,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x80,0x47,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,
53958 -0x72,0x88,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x4b,0x7e,0x90,0x9e,0x3c,0x12,0x43,
53959 -0x6b,0x02,0x7c,0xea,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x4c,0xb8,0x90,0x9e,0x3c,
53960 -0x12,0x43,0x6b,0x02,0x71,0xbc,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x71,0xa3,0x90,
53961 -0x9e,0x3c,0x12,0x43,0x6b,0x02,0x75,0xea,0x90,0x01,0xc6,0xe0,0x44,0x01,0xf0,0x22,
53962 -0x90,0x00,0x04,0x12,0x42,0x20,0xff,0x54,0x1f,0xfe,0xef,0x54,0x20,0xc4,0x13,0x54,
53963 -0x07,0xfd,0xaf,0x06,0x90,0x9e,0x3f,0xef,0xf0,0xa3,0xed,0xf0,0xa3,0x12,0x43,0x8b,
53964 -0x90,0x9e,0x41,0x12,0x43,0x6b,0x90,0x00,0x03,0x12,0x42,0x20,0x54,0xf0,0xc4,0x54,
53965 -0x0f,0x90,0x9e,0x44,0xf0,0x90,0x00,0x04,0x12,0x42,0x20,0x54,0x40,0xc4,0x13,0x13,
53966 -0x54,0x03,0x90,0x9e,0x45,0xf0,0x90,0x9e,0x3f,0xe0,0xff,0x75,0xf0,0x09,0x90,0x96,
53967 -0x46,0x12,0x43,0x5f,0xad,0x82,0xac,0x83,0x90,0x9e,0x46,0xec,0xf0,0xa3,0xed,0xf0,
53968 -0xef,0x75,0xf0,0x09,0xa4,0x24,0x44,0xf9,0x74,0x96,0x35,0xf0,0xfa,0x7b,0x01,0xa3,
53969 -0x12,0x43,0x8b,0x90,0x9e,0x41,0x12,0x43,0x6b,0x90,0x00,0x03,0x12,0x42,0x20,0x54,
53970 -0x0f,0xff,0x90,0x9e,0x48,0x12,0x43,0x6b,0xef,0x12,0x42,0x4d,0x90,0x9e,0x41,0x12,
53971 -0x43,0x6b,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0x90,0x9e,0x48,0x12,0x43,0x6b,0x90,
53972 -0x00,0x01,0xef,0x12,0x42,0x5f,0x90,0x9e,0x41,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,
53973 -0x42,0x20,0xff,0x90,0x9e,0x46,0xe0,0xfc,0xa3,0xe0,0xfd,0xf5,0x82,0x8c,0x83,0xef,
53974 -0xf0,0x12,0x24,0x62,0x8d,0x82,0x8c,0x83,0xa3,0xf0,0x90,0x9e,0x44,0xe0,0xfe,0x90,
53975 -0x9e,0x3f,0xe0,0xff,0x24,0x82,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0x90,
53976 -0x9e,0x40,0xe0,0xfe,0x75,0xf0,0x09,0xef,0x90,0x96,0x4a,0x12,0x43,0x5f,0xee,0xf0,
53977 -0x75,0xf0,0x09,0xef,0x90,0x96,0x4b,0x12,0x43,0x5f,0x74,0x01,0xf0,0x90,0x9e,0x45,
53978 -0xe0,0xfe,0x75,0xf0,0x09,0xef,0x90,0x96,0x4c,0x12,0x43,0x5f,0xee,0xf0,0x8f,0x59,
53979 -0xef,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xaf,0x82,0xf5,0x5b,0x8f,0x5c,
53980 -0xe5,0x59,0x75,0xf0,0x02,0xa4,0x24,0x02,0xf9,0x74,0x95,0x35,0xf0,0x75,0x5d,0x01,
53981 -0xf5,0x5e,0x89,0x5f,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x46,0x12,0x43,0x5f,0xaf,
53982 -0x82,0x85,0x83,0x60,0x8f,0x61,0xe5,0x59,0x75,0xf0,0x09,0xa4,0x24,0x44,0xf9,0x74,
53983 -0x96,0x35,0xf0,0x75,0x62,0x01,0xf5,0x63,0x89,0x64,0x74,0x82,0x25,0x59,0xf5,0x82,
53984 -0xe4,0x34,0x95,0xf5,0x83,0xe0,0x12,0x43,0x94,0x55,0x1e,0x00,0x55,0x33,0x01,0x55,
53985 -0x48,0x02,0x55,0x5d,0x03,0x55,0x86,0x04,0x55,0x9b,0x05,0x55,0xb0,0x06,0x55,0xd6,
53986 -0x0c,0x56,0x03,0x0d,0x56,0x30,0x0e,0x56,0x5d,0x0f,0x00,0x00,0x56,0x91,0xe5,0x59,
53987 -0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0x74,
53988 -0x15,0x80,0x3c,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,
53989 -0x74,0xf0,0xf0,0xa3,0x74,0x10,0x80,0x27,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,
53990 -0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0x74,0x05,0x80,0x12,0xe5,0x59,0x25,
53991 -0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0xe4,0xf0,
53992 -0xe5,0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0x74,0x0f,0xf0,
53993 -0xa3,0x74,0x8f,0xf0,0xc1,0x91,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,
53994 -0x9b,0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0xf5,0x80,0x27,0xe5,0x59,0x25,0xe0,0x24,
53995 -0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0xf0,0x80,0x12,
53996 -0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe4,0xf0,0xa3,
53997 -0x74,0x0d,0xf0,0xe5,0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,
53998 -0xe4,0xf0,0xa3,0xf0,0xc1,0x91,0x90,0x04,0x47,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,
53999 -0x12,0x42,0x4d,0x90,0x04,0x46,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x90,0x00,0x01,
54000 -0x12,0x42,0x5f,0x90,0x04,0x45,0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xf0,0x90,0x04,
54001 -0x44,0xc1,0x88,0x90,0x04,0x4b,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,0x4d,
54002 -0x90,0x04,0x4a,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,0x5f,
54003 -0x90,0x04,0x49,0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xf0,0x90,0x04,0x48,0x80,0x58,
54004 -0x90,0x04,0x4f,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,0x4d,0x90,0x04,0x4e,
54005 -0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,0x04,0x4d,
54006 -0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xf0,0x90,0x04,0x4c,0x80,0x2b,0x90,0x04,0x53,
54007 -0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,0x4d,0x90,0x04,0x52,0xe0,0xab,0x5d,
54008 -0xaa,0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,0x04,0x51,0xe0,0x85,0x5c,
54009 -0x82,0x85,0x5b,0x83,0xf0,0x90,0x04,0x50,0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xa3,
54010 -0xf0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0xc0,0x03,0xc0,0x02,0xc0,0x01,0x12,0x24,0x62,
54011 -0xff,0xab,0x62,0xaa,0x63,0xa9,0x64,0x12,0x24,0x62,0x5f,0xd0,0x01,0xd0,0x02,0xd0,
54012 -0x03,0x12,0x42,0x4d,0xab,0x5d,0xe5,0x5f,0x24,0x01,0xf9,0xe4,0x35,0x5e,0xfa,0xc0,
54013 -0x03,0xc0,0x02,0xc0,0x01,0x12,0x24,0x62,0xff,0xab,0x62,0xaa,0x63,0xa9,0x64,0x90,
54014 -0x00,0x01,0x12,0x42,0x20,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,0x12,0x42,0x4d,0x85,
54015 -0x5c,0x82,0x85,0x5b,0x83,0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,0x61,0x82,0x85,0x60,
54016 -0x83,0xe0,0xfe,0xef,0x5e,0xd0,0x82,0xd0,0x83,0xf0,0x85,0x5c,0x82,0x85,0x5b,0x83,
54017 -0xa3,0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,0x61,0x82,0x85,0x60,0x83,0xa3,0xe0,0xfe,
54018 -0xef,0x5e,0xd0,0x82,0xd0,0x83,0xf0,0xe5,0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,
54019 -0x34,0x95,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3b,0x75,0x5a,0x0b,0x74,0x01,
54020 -0x7e,0x00,0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,
54021 -0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,
54022 -0xe0,0x5f,0x4e,0x60,0x06,0xe5,0x5a,0x24,0x10,0x80,0x5d,0x15,0x5a,0xe5,0x5a,0xc3,
54023 -0x94,0x00,0x50,0xca,0x80,0x56,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,
54024 -0x9b,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3d,0x75,0x5a,0x0f,0x74,0x01,0x7e,
54025 -0x00,0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x59,
54026 -0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,
54027 -0x5f,0x4e,0x60,0x08,0x90,0x9e,0x4b,0xe5,0x5a,0xf0,0x80,0x10,0x15,0x5a,0xe5,0x5a,
54028 -0xc3,0x94,0x00,0x50,0xc8,0x80,0x05,0xe4,0x90,0x9e,0x4b,0xf0,0xe5,0x59,0x25,0xe0,
54029 -0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3b,
54030 -0xe4,0xf5,0x5a,0x74,0x01,0x7e,0x00,0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,
54031 -0xce,0xd8,0xf9,0xff,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,
54032 -0x83,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x08,0x90,0x9e,0x4c,0xe5,0x5a,0xf0,
54033 -0x80,0x5b,0x05,0x5a,0xe5,0x5a,0xb4,0x10,0xca,0x80,0x52,0xe5,0x59,0x25,0xe0,0x24,
54034 -0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x39,0xe4,
54035 -0xf5,0x5a,0x74,0x01,0x7e,0x00,0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,
54036 -0xd8,0xf9,0xff,0xe5,0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,
54037 -0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x06,0xe5,0x5a,0x24,0x10,0x80,0x0a,0x05,
54038 -0x5a,0xe5,0x5a,0xb4,0x0c,0xcc,0x80,0x05,0xe4,0x90,0x9e,0x4c,0xf0,0x90,0x9e,0x4b,
54039 -0xe0,0xff,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x48,0x12,0x43,0x5f,0xef,0xf0,0x90,
54040 -0x9e,0x4c,0xe0,0xfe,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x49,0x12,0x43,0x5f,0xee,
54041 -0xf0,0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0xd3,0x9f,0x40,
54042 -0x05,0x90,0x9e,0x4b,0x11,0xe0,0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x04,0xf5,
54043 -0x83,0xe0,0xff,0x90,0x9e,0x4c,0xe0,0xfe,0xef,0xc3,0x9e,0x50,0x02,0x11,0xe0,0x90,
54044 -0x9e,0x4b,0xe0,0xff,0xd3,0x94,0x13,0x40,0x07,0x90,0x96,0x43,0x74,0x03,0xf0,0x22,
54045 -0xef,0xd3,0x94,0x0b,0x40,0x07,0x90,0x96,0x43,0x74,0x02,0xf0,0x22,0xef,0xd3,0x94,
54046 -0x03,0x40,0x07,0x90,0x96,0x43,0x74,0x01,0xf0,0x22,0xe4,0x90,0x96,0x43,0xf0,0x22,
54047 -0xe0,0xfd,0x74,0x26,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xed,0xf0,0xaf,
54048 -0x59,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xef,0xc3,0x94,0x20,0x50,0x0e,0x74,0x84,
54049 -0x2f,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xed,0xf0,0x80,0x29,0x74,0xa6,0x2f,0xf5,
54050 -0x82,0xe4,0x34,0x9c,0xf5,0x83,0xed,0xf0,0x90,0x9e,0x78,0xef,0xf0,0x24,0xa6,0xf5,
54051 -0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x90,0x9e,0x79,0xf0,0x7b,0x01,0x7a,0x9e,0x79,
54052 -0x78,0x7d,0x02,0x31,0x3a,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,
54053 -0xd0,0x90,0x9e,0x97,0x12,0x43,0x8b,0x90,0x9e,0x9a,0xe0,0x54,0xf0,0x44,0x06,0xff,
54054 -0xf0,0xed,0x54,0x0f,0xc4,0x54,0xf0,0xfe,0xef,0x54,0x0f,0x4e,0xf0,0x90,0x9e,0x97,
54055 -0x12,0x43,0x6b,0x90,0x9e,0x94,0x12,0x43,0x8b,0x7b,0x01,0x7a,0x9e,0x79,0x9a,0xd1,
54056 -0x14,0xd0,0xd0,0x92,0xaf,0x22,0x8f,0x50,0x8d,0x51,0xe5,0x51,0x54,0x1f,0xf5,0x56,
54057 -0x74,0x01,0x2f,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe0,0xf5,0x54,0x90,0x04,0xfd,
54058 -0xe0,0xb4,0x01,0x05,0x75,0x57,0x03,0x80,0x03,0x75,0x57,0x01,0xeb,0xc3,0x95,0x57,
54059 -0x40,0x04,0xaf,0x50,0x80,0x33,0xe5,0x54,0x25,0x53,0xf5,0x55,0xe5,0x56,0x90,0x41,
54060 -0xd6,0x93,0xff,0xe5,0x55,0xd3,0x9f,0x74,0x01,0x40,0x11,0x25,0x50,0xf5,0x82,0xe4,
54061 -0x34,0x94,0xf5,0x83,0xe4,0xf0,0xad,0x51,0xaf,0x50,0x01,0xf1,0x25,0x50,0xf5,0x82,
54062 -0xe4,0x34,0x94,0xf5,0x83,0xe5,0x55,0xf0,0x22,0xad,0x07,0x75,0xf0,0x09,0xed,0x90,
54063 -0x96,0x48,0x12,0x43,0x5f,0xe0,0xff,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,
54064 -0x83,0xe0,0x54,0x1f,0xf5,0x58,0xd3,0x9f,0x40,0x02,0x8f,0x58,0xe5,0x58,0x25,0xe0,
54065 -0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,
54066 -0xe5,0x58,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,
54067 -0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,
54068 -0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0xaf,0x05,0xad,0x58,
54069 -0x11,0xf1,0xaf,0x58,0x22,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,
54070 -0xd0,0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,
54071 -0xc0,0x07,0x90,0x01,0xc4,0x74,0x45,0xf0,0x74,0x5a,0xa3,0xf0,0x90,0x01,0x34,0xe0,
54072 -0x55,0x28,0xf5,0x2c,0x90,0x01,0x36,0xe0,0x55,0x2a,0xf5,0x2e,0xa3,0xe0,0x55,0x2b,
54073 -0xf5,0x2f,0xe5,0x2c,0x20,0xe0,0x02,0x61,0xe1,0x90,0x01,0x34,0x74,0x01,0xf0,0x85,
54074 -0xd1,0x08,0x85,0xd2,0x09,0x85,0xd3,0x0a,0x85,0xd4,0x0b,0x85,0xd5,0x0c,0x85,0xd6,
54075 -0x0d,0x85,0xd7,0x0e,0x85,0xd9,0x0f,0xe5,0x0f,0x54,0x40,0xc3,0x13,0xff,0xe5,0x0e,
54076 -0x54,0x20,0x6f,0x70,0x02,0x61,0x93,0xe5,0x0f,0x30,0xe5,0x02,0x61,0x93,0xe5,0x0d,
54077 -0x54,0x3f,0xf5,0x4d,0xe5,0x08,0x54,0x3f,0xf5,0x4e,0xe5,0x0c,0x54,0x1f,0xff,0xe5,
54078 -0x4d,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0x8f,0xf0,0x12,
54079 -0x42,0x81,0xe5,0x0e,0x54,0x1f,0xff,0xe5,0x4d,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,
54080 -0x34,0x93,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x4e,0xd3,0x94,0x04,0x40,
54081 -0x03,0x75,0x4e,0x04,0x75,0xf0,0x0a,0xe5,0x4d,0x90,0x90,0x00,0x12,0x43,0x5f,0x75,
54082 -0xf0,0x02,0xe5,0x4e,0x12,0x43,0x5f,0xe0,0xfe,0xa3,0xe0,0xff,0xe5,0x0e,0x54,0x1f,
54083 -0x2f,0xff,0xe4,0x3e,0xfe,0x75,0xf0,0x0a,0xe5,0x4d,0x90,0x90,0x00,0x12,0x43,0x5f,
54084 -0x75,0xf0,0x02,0xe5,0x4e,0x12,0x43,0x5f,0xee,0xf0,0xa3,0xef,0xf0,0xe5,0x0f,0x20,
54085 -0xe6,0x23,0xe5,0x0e,0x54,0x1f,0xff,0xe5,0x4d,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,
54086 -0x34,0x98,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x0a,0x30,0xe7,0x34,0xaf,
54087 -0x4d,0x31,0xd9,0x80,0x2e,0xe5,0x0e,0x54,0x1f,0xff,0xe5,0x4d,0x25,0xe0,0x24,0x44,
54088 -0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x0a,0x30,
54089 -0xe7,0x11,0xe5,0x0a,0x54,0x7f,0xfd,0xe5,0x0e,0x54,0x1f,0xf5,0x53,0xab,0x4e,0xaf,
54090 -0x4d,0x31,0x76,0xe5,0x74,0x14,0x24,0xfd,0x50,0x02,0x80,0x45,0x90,0x9e,0x61,0xe0,
54091 -0x60,0x37,0x90,0x01,0x5b,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x04,0xf0,0xd1,0x05,0xef,
54092 -0x64,0x01,0x70,0x2d,0x90,0x9e,0x55,0xe0,0xf5,0x44,0x75,0x45,0x00,0xe4,0xfb,0xfd,
54093 -0x7f,0x58,0x7e,0x01,0x12,0x30,0x62,0x90,0x01,0x5b,0x74,0x05,0xf0,0x90,0x06,0x92,
54094 -0x74,0x01,0xf0,0x90,0x9e,0x5d,0xf0,0x80,0x08,0xd1,0x05,0xbf,0x01,0x03,0x12,0x44,
54095 -0xd3,0xe5,0x2c,0x30,0xe1,0x20,0x90,0x01,0x34,0x74,0x02,0xf0,0x85,0xd1,0x13,0x85,
54096 -0xd2,0x14,0x85,0xd3,0x15,0x85,0xd4,0x16,0x85,0xd5,0x17,0x85,0xd6,0x18,0x85,0xd7,
54097 -0x19,0x85,0xd9,0x1a,0xd1,0x9c,0xe5,0x2c,0x30,0xe3,0x06,0x90,0x01,0x34,0x74,0x08,
54098 -0xf0,0xe5,0x2c,0x30,0xe4,0x09,0x90,0x01,0x34,0x74,0x10,0xf0,0x43,0x12,0x10,0xe5,
54099 -0x2c,0x30,0xe5,0x26,0x90,0x01,0xcf,0xe0,0x30,0xe5,0x1f,0xe0,0x54,0xdf,0xf0,0x90,
54100 -0x01,0x34,0x74,0x20,0xf0,0x75,0xa8,0x00,0x75,0xe8,0x00,0x12,0x4d,0xb6,0x90,0x00,
54101 -0x03,0xe0,0x54,0xfb,0xf0,0x12,0x49,0xb9,0x80,0xfe,0xe5,0x2c,0x30,0xe6,0x06,0x90,
54102 -0x01,0x34,0x74,0x40,0xf0,0xe5,0x2e,0x30,0xe1,0x3c,0x90,0x01,0x36,0x74,0x02,0xf0,
54103 -0x43,0x12,0x40,0x90,0x01,0x02,0xe0,0x54,0x03,0x64,0x01,0x70,0x29,0x90,0x01,0x37,
54104 -0xe0,0x30,0xe0,0x0a,0x74,0x01,0xf0,0x90,0x9e,0x66,0xe4,0xf0,0x80,0x18,0x90,0x9e,
54105 -0x66,0xe0,0x04,0xf0,0xe0,0xc3,0x94,0x0a,0x40,0x0c,0xe4,0xf0,0x90,0x04,0x19,0xe0,
54106 -0x30,0xe0,0x03,0x12,0x4f,0xa7,0xe5,0x2e,0x30,0xe0,0x12,0x90,0x9e,0x76,0x74,0x01,
54107 -0xf0,0x90,0x01,0x36,0xf0,0x12,0x64,0xfe,0x90,0x9e,0x76,0xe4,0xf0,0xe5,0x2e,0x30,
54108 -0xe2,0x78,0x90,0x01,0x36,0x74,0x04,0xf0,0x90,0x01,0xbd,0xe0,0x04,0xf0,0xe5,0x73,
54109 -0x64,0x01,0x70,0x66,0xe5,0x74,0x60,0x62,0xe5,0x74,0x64,0x02,0x60,0x06,0xe5,0x74,
54110 -0x64,0x05,0x70,0x27,0x90,0x06,0xab,0xe0,0x90,0x9e,0x50,0xf0,0x90,0x06,0xaa,0xe0,
54111 -0x90,0x9e,0x5f,0xf0,0x90,0x9e,0x50,0xe0,0x70,0x07,0x90,0x9e,0x5f,0xe0,0xff,0x80,
54112 -0x05,0x90,0x9e,0x50,0xe0,0xff,0x90,0x9e,0x50,0xef,0xf0,0x90,0x9e,0x52,0xe0,0x60,
54113 -0x03,0xe0,0x14,0xf0,0x90,0x9e,0x51,0xe4,0xf0,0x90,0x01,0x57,0xf0,0x90,0x01,0x3c,
54114 -0x74,0x02,0xf0,0x90,0x9e,0x63,0xe0,0x54,0xfd,0xf0,0xe0,0x54,0xef,0xf0,0xe5,0x74,
54115 -0x14,0x24,0xfd,0x50,0x02,0x80,0x03,0x12,0x45,0x53,0xe5,0x2e,0x30,0xe3,0x28,0x90,
54116 -0x01,0x36,0x74,0x08,0xf0,0xe5,0x73,0x64,0x01,0x70,0x1c,0xe5,0x74,0x60,0x18,0x90,
54117 -0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,0x9e,0x89,0xe4,0x12,0x44,
54118 -0x52,0x90,0x01,0x57,0x74,0x05,0xf0,0xe5,0x2e,0x30,0xe4,0x2f,0x90,0x01,0x36,0x74,
54119 -0x10,0xf0,0xe5,0x73,0x64,0x01,0x70,0x23,0xe5,0x74,0x60,0x1f,0x90,0x01,0x57,0xe4,
54120 -0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,0x9e,0x62,0xe4,0xf0,0x90,0x9e,0x63,0xe0,
54121 -0x54,0xfd,0xf0,0xe0,0x54,0x07,0x70,0x03,0x12,0x44,0xd3,0xe5,0x2e,0x30,0xe5,0x1f,
54122 -0x90,0x01,0x36,0x74,0x20,0xf0,0xe5,0x73,0xb4,0x01,0x14,0xe5,0x74,0x60,0x10,0x90,
54123 -0x9e,0x61,0xe0,0x64,0x02,0x60,0x05,0x12,0x44,0xdc,0x80,0x03,0x12,0x44,0x80,0xe5,
54124 -0x2e,0x30,0xe6,0x1e,0x90,0x01,0x36,0x74,0x40,0xf0,0xe5,0x73,0xb4,0x01,0x13,0xe5,
54125 -0x74,0x60,0x0f,0x90,0x9e,0x63,0xe0,0x54,0xfe,0xf0,0xe0,0x54,0x07,0x70,0x03,0x12,
54126 -0x44,0xd3,0xe5,0x2f,0x30,0xe1,0x08,0x90,0x01,0x37,0x74,0x02,0xf0,0xd1,0xbd,0x74,
54127 -0x45,0x04,0x90,0x01,0xc4,0xf0,0x74,0x5a,0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,
54128 -0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,
54129 -0xd0,0xf0,0xd0,0xe0,0x32,0x90,0x04,0x1b,0xe0,0x54,0x7f,0x64,0x7f,0x7f,0x01,0x60,
54130 -0x02,0x7f,0x00,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x91,0x12,0x43,
54131 -0x8b,0x90,0x9e,0x75,0xe0,0x64,0x02,0x60,0x6e,0x90,0x9e,0x75,0xe0,0x64,0x01,0x70,
54132 -0x66,0x90,0x9e,0xb0,0xe0,0xff,0x04,0xf0,0x90,0x9e,0x91,0x12,0x43,0x6b,0x90,0x00,
54133 -0x01,0xef,0x12,0x42,0x5f,0x7f,0xaf,0x7e,0x01,0xf1,0x3b,0xef,0x60,0x49,0x90,0x9e,
54134 -0x91,0x12,0x43,0x6b,0x8b,0x1e,0x8a,0x1f,0x89,0x20,0x75,0x21,0x02,0x7b,0x01,0x7a,
54135 -0x01,0x79,0xa0,0x12,0x45,0x09,0x90,0x9e,0x94,0x12,0x43,0x6b,0x8b,0x1e,0x8a,0x1f,
54136 -0x89,0x20,0x90,0x9e,0x91,0x12,0x43,0x6b,0x12,0x24,0x62,0xff,0xc4,0x54,0x0f,0xf5,
54137 -0x21,0x7b,0x01,0x7a,0x01,0x79,0xa2,0x12,0x45,0x09,0x90,0x01,0xaf,0x74,0xff,0xf0,
54138 -0x90,0x01,0xcb,0xe0,0x64,0x80,0xf0,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x9e,0x2f,0xe0,
54139 -0x54,0xf0,0x44,0x03,0xf0,0x54,0x0f,0x44,0x80,0xf0,0x7b,0x00,0x7a,0x00,0x79,0x13,
54140 -0x90,0x9e,0x94,0x12,0x43,0x8b,0x0b,0x7a,0x9e,0x79,0x2f,0xc1,0x14,0x7d,0x02,0x7f,
54141 -0x03,0x12,0x31,0x2c,0xe5,0x74,0x14,0x24,0xfd,0x50,0x02,0x80,0x23,0x90,0x9e,0x61,
54142 -0xe0,0x60,0x06,0x7d,0x01,0x7f,0x0c,0x80,0x0f,0x90,0x9e,0x5e,0xe0,0x54,0x0f,0xc3,
54143 -0x94,0x04,0x50,0x07,0x7d,0x01,0x7f,0x04,0x12,0x47,0x1a,0xe4,0xff,0x12,0x48,0x8f,
54144 -0x22,0xd1,0x05,0xef,0x64,0x01,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,0xf0,0x80,0x32,
54145 -0x90,0x9e,0x5d,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x24,0x90,0x9e,
54146 -0x5c,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x04,0xf0,0x80,0x16,0x90,0x9e,0x60,0xe0,
54147 -0x54,0x0f,0xd3,0x94,0x04,0x40,0x08,0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,0x03,0x7f,
54148 -0x01,0x22,0x90,0x01,0xb8,0x74,0x08,0xf0,0x7f,0x00,0x22,0xd3,0x10,0xaf,0x01,0xc3,
54149 -0xc0,0xd0,0x90,0x9e,0xa0,0xee,0xf0,0xa3,0xef,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0x90,
54150 -0x9e,0xa0,0xe0,0xfe,0xa3,0xe0,0xf5,0x82,0x8e,0x83,0xe0,0x60,0x2d,0xc3,0x90,0x9e,
54151 -0xa3,0xe0,0x94,0xe8,0x90,0x9e,0xa2,0xe0,0x94,0x03,0x40,0x0b,0x90,0x01,0xc6,0xe0,
54152 -0x44,0x10,0xf0,0x7f,0x00,0x80,0x15,0x90,0x9e,0xa2,0xe4,0x75,0xf0,0x01,0x12,0x42,
54153 -0x81,0x7f,0x0a,0x7e,0x00,0x12,0x32,0x15,0x80,0xc5,0x7f,0x01,0xd0,0xd0,0x92,0xaf,
54154 -0x22,0x75,0x30,0x1f,0x75,0x31,0x01,0xe4,0xf5,0x32,0x90,0x01,0x38,0xe5,0x30,0xf0,
54155 -0xa3,0xe5,0x31,0xf0,0xa3,0xe5,0x32,0xf0,0x22,0x90,0x00,0x02,0xe0,0x54,0xe0,0x90,
54156 -0x9e,0x75,0x60,0x04,0x74,0x01,0xf0,0x22,0x74,0x02,0xf0,0x22,0x90,0x00,0xf3,0xe0,
54157 -0x30,0xe3,0x08,0x90,0x9e,0x77,0x74,0x01,0xf0,0x80,0x05,0xe4,0x90,0x9e,0x77,0xf0,
54158 -0x90,0x9e,0x77,0xe0,0xb4,0x01,0x12,0x90,0x00,0xf2,0xe0,0x30,0xe7,0x0b,0x90,0x9e,
54159 -0x64,0x74,0xfd,0xf0,0xa3,0x74,0x33,0xf0,0x22,0x90,0x9e,0x64,0x74,0xfd,0xf0,0xa3,
54160 -0x74,0x2f,0xf0,0x22,0x90,0x01,0x64,0x74,0xa0,0xf0,0x22,0xc0,0xe0,0xc0,0xf0,0xc0,
54161 -0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,
54162 -0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x01,0xc4,0x74,0xfb,0xf0,0x74,0x5f,
54163 -0xa3,0xf0,0x53,0x91,0xef,0x90,0x00,0x51,0xe0,0xff,0x90,0x00,0x55,0xe0,0x5f,0xf5,
54164 -0x3d,0xe5,0x3d,0x30,0xe6,0x18,0x74,0x40,0xf0,0x90,0x9e,0x1d,0xe0,0x54,0x03,0xff,
54165 -0xbf,0x03,0x0b,0x90,0x9e,0x1a,0xe0,0x60,0x05,0x7f,0x01,0x12,0x4a,0xd6,0xe5,0x3d,
54166 -0x30,0xe7,0x15,0x90,0x00,0x55,0x74,0x80,0xf0,0x90,0x9e,0x1d,0xe0,0x54,0x03,0xff,
54167 -0xbf,0x03,0x05,0x7f,0x02,0x12,0x4a,0xd6,0x90,0x01,0xc4,0x74,0xfb,0xf0,0x74,0x5f,
54168 -0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,
54169 -0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,0x32,0x8f,0x6b,0x8c,
54170 -0x6c,0x8d,0x6d,0x22,0x8f,0x6e,0x8c,0x6f,0x8d,0x70,0x22,0xe4,0xf5,0x73,0x90,0x9e,
54171 -0x63,0xf0,0xf5,0x74,0x90,0x9e,0x60,0x74,0x0c,0xf0,0x90,0x9e,0x5e,0xf0,0xe4,0x90,
54172 -0x9e,0x61,0xf0,0x90,0x9e,0x5d,0xf0,0x90,0x9e,0x5c,0xf0,0x90,0x9e,0x5f,0x04,0xf0,
54173 -0x90,0x9e,0x50,0xf0,0xe4,0x90,0x9e,0x62,0xf0,0x90,0x9e,0x52,0xf0,0x90,0x9e,0x5a,
54174 -0x74,0x07,0xf0,0xe4,0x90,0x9e,0x51,0xf0,0x90,0x9e,0x58,0xf0,0xa3,0x74,0x02,0xf0,
54175 -0x90,0x9e,0x56,0x14,0xf0,0xa3,0x74,0x03,0xf0,0x90,0x9e,0x55,0x74,0x14,0xf0,0x90,
54176 -0x9e,0x5b,0x74,0x05,0xf0,0xe4,0x90,0x9e,0x54,0xf0,0x90,0x9e,0x4f,0xf0,0x90,0x9e,
54177 -0x76,0xf0,0x22,0xe4,0x90,0x9e,0x62,0xf0,0x90,0x9e,0x51,0xf0,0x90,0x9e,0x63,0xf0,
54178 -0x22,0x8b,0x59,0x8a,0x5a,0x89,0x5b,0x31,0x03,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x12,
54179 -0x24,0x62,0xf5,0x74,0x14,0x60,0x0e,0x14,0x60,0x1e,0x14,0x60,0x2f,0x24,0x03,0x70,
54180 -0x40,0x7f,0x01,0x80,0x3a,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x02,0x12,0x42,
54181 -0x20,0xfd,0xe4,0xff,0x31,0x72,0x80,0x27,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,
54182 -0x02,0x12,0x42,0x20,0xfd,0x7f,0x01,0x31,0x72,0x1f,0x80,0x13,0xab,0x59,0xaa,0x5a,
54183 -0xa9,0x5b,0x90,0x00,0x02,0x12,0x42,0x20,0xfd,0x7f,0x02,0x31,0x72,0xe4,0xff,0x31,
54184 -0xc6,0x22,0xef,0x24,0xfe,0x60,0x0b,0x04,0x70,0x22,0x90,0x9e,0x5f,0x74,0x01,0xf0,
54185 -0x80,0x16,0xed,0x70,0x0a,0x90,0x9e,0x5b,0xe0,0x90,0x9e,0x5f,0xf0,0x80,0x05,0x90,
54186 -0x9e,0x5f,0xed,0xf0,0x90,0x9e,0x5f,0xe0,0x90,0x9e,0x50,0xf0,0x22,0xd3,0x10,0xaf,
54187 -0x01,0xc3,0xc0,0xd0,0x90,0x00,0x01,0x12,0x42,0x20,0x90,0x9e,0x61,0xf0,0x90,0x00,
54188 -0x03,0x12,0x42,0x20,0x90,0x9e,0x4f,0xf0,0x12,0x24,0x62,0x65,0x74,0x60,0x02,0x31,
54189 -0x11,0xd0,0xd0,0x92,0xaf,0x22,0xef,0x64,0x01,0x70,0x30,0x7d,0x7c,0x7f,0x02,0x12,
54190 -0x31,0x2c,0x7d,0x02,0x7f,0x03,0x12,0x31,0x2c,0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,
54191 -0x3c,0x74,0x02,0xf0,0x12,0x47,0x16,0xe4,0xff,0x12,0x48,0x8f,0x90,0x06,0x04,0xe0,
54192 -0x54,0x7f,0xf0,0x90,0x06,0x0a,0xe0,0x54,0xf8,0xf0,0x22,0x90,0x01,0x36,0x74,0x7c,
54193 -0xf0,0xa3,0x74,0x02,0xf0,0x7d,0x7c,0xff,0x12,0x31,0x9d,0x7d,0x02,0x7f,0x03,0x12,
54194 -0x31,0x9d,0x90,0x06,0x04,0xe0,0x44,0x80,0xf0,0x90,0x06,0x0a,0xe0,0x44,0x07,0xf0,
54195 -0x90,0x9e,0x58,0xe0,0xa3,0xe0,0x90,0x05,0x58,0xf0,0xe5,0x73,0x30,0xe0,0x1b,0x90,
54196 -0x9e,0x52,0xe0,0x70,0x1a,0xe0,0x04,0xf0,0x90,0x9e,0x5e,0xe0,0x54,0x0f,0xc3,0x94,
54197 -0x04,0x50,0x0c,0x7d,0x01,0x7f,0x04,0x02,0x47,0x1a,0xe4,0x90,0x9e,0x52,0xf0,0x22,
54198 -0x12,0x5e,0x05,0xef,0x64,0x01,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,0xf0,0x80,0x52,
54199 -0x90,0x9e,0x63,0xe0,0x54,0x03,0x60,0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x42,
54200 -0x90,0x9e,0x60,0xe0,0x54,0x0f,0xd3,0x94,0x02,0x40,0x08,0x90,0x01,0xb9,0x74,0x04,
54201 -0xf0,0x80,0x2f,0x90,0x9e,0x63,0xe0,0x30,0xe2,0x08,0x90,0x01,0xb9,0x74,0x08,0xf0,
54202 -0x80,0x20,0x90,0x9e,0x63,0xe0,0x30,0xe4,0x08,0x90,0x01,0xb9,0x74,0x10,0xf0,0x80,
54203 -0x11,0x90,0x9e,0x52,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x20,0xf0,0x80,0x03,0x7f,
54204 -0x01,0x22,0x90,0x01,0xb8,0x74,0x04,0xf0,0x7f,0x00,0x22,0xe5,0x12,0x60,0x08,0x90,
54205 -0x01,0xb9,0x74,0x01,0xf0,0x80,0x5e,0x90,0x9e,0x60,0xe0,0x54,0x0f,0xd3,0x94,0x01,
54206 -0x40,0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x4b,0x90,0x02,0x87,0xe0,0x60,0x08,
54207 -0x90,0x01,0xb9,0x74,0x04,0xf0,0x80,0x3d,0x90,0x9e,0x75,0xe0,0xb4,0x02,0x10,0x90,
54208 -0x9e,0x64,0xe0,0xfe,0xa3,0xe0,0xf5,0x82,0x8e,0x83,0xe0,0x60,0x17,0x80,0x26,0x90,
54209 -0x9e,0x75,0xe0,0xb4,0x01,0x0e,0x90,0x01,0xaf,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,
54210 -0x08,0xf0,0x80,0x11,0x90,0x9e,0x54,0xe0,0x70,0x08,0x90,0x01,0xb9,0x74,0x10,0xf0,
54211 -0x80,0x03,0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,0x02,0xf0,0x7f,0x00,0x22,0x90,0x06,
54212 -0x04,0xe0,0x54,0xbf,0xf0,0xef,0x60,0x09,0xe5,0x73,0xb4,0x01,0x04,0xe4,0xff,0x71,
54213 -0x4d,0x90,0x9e,0x5e,0xe0,0x54,0xf0,0xf0,0xe0,0x44,0x0c,0xf0,0x22,0x8f,0x76,0x90,
54214 -0x9e,0x5e,0xe0,0x90,0x01,0xc1,0xf0,0xa3,0xe5,0x12,0xf0,0x12,0x45,0xb1,0xef,0x64,
54215 -0x01,0x70,0x2e,0x90,0x9e,0x69,0x12,0x47,0xfa,0xe5,0x76,0x60,0x10,0x74,0x21,0x2f,
54216 -0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x10,0xf0,0x80,0x0e,0x74,0x21,0x2f,
54217 -0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xef,0xf0,0x90,0x04,0x1f,0x74,0x20,
54218 -0xf0,0x22,0x90,0x9e,0xaf,0xef,0xf0,0x71,0xb0,0x90,0x9e,0xaf,0xe0,0x60,0x05,0x90,
54219 -0x05,0x22,0xe4,0xf0,0x90,0x9e,0x5e,0xe0,0x54,0xf0,0xf0,0xe0,0x44,0x04,0xf0,0x22,
54220 -0x90,0x00,0x11,0xe0,0x44,0x09,0xf0,0x12,0x49,0xb9,0x90,0x9d,0xff,0x12,0x43,0x53,
54221 -0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x78,0x7e,0x08,0x12,0x2b,0x08,0x90,0x9e,0x03,
54222 -0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x04,0x7e,0x0c,0x12,0x2b,0x08,
54223 -0x90,0x9e,0x07,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x00,0x7e,0x08,
54224 -0x12,0x2b,0x08,0x90,0x9e,0x0b,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,
54225 -0x70,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x68,0x12,0x25,0x14,0x00,0x03,0x2d,0x95,
54226 -0xe4,0xfd,0xff,0x12,0x30,0x2c,0x90,0x9e,0x77,0xe0,0xb4,0x01,0x11,0x90,0x80,0x68,
54227 -0x12,0x25,0x14,0x00,0x03,0x2d,0x95,0xe4,0xfd,0x7f,0x01,0x12,0x30,0x2c,0x22,0x8f,
54228 -0x27,0xe4,0x90,0x9e,0xa8,0xf0,0xa3,0xf0,0x90,0x01,0x09,0xe0,0x7f,0x00,0x30,0xe7,
54229 -0x02,0x7f,0x01,0xef,0x65,0x27,0x60,0x3e,0xc3,0x90,0x9e,0xa9,0xe0,0x94,0x88,0x90,
54230 -0x9e,0xa8,0xe0,0x94,0x13,0x40,0x08,0x90,0x01,0xc6,0xe0,0x44,0x80,0xf0,0x22,0x90,
54231 -0x9e,0xa8,0xe4,0x75,0xf0,0x01,0x12,0x42,0x81,0x7f,0x14,0x7e,0x00,0x12,0x32,0x15,
54232 -0xd3,0x90,0x9e,0xa9,0xe0,0x94,0x32,0x90,0x9e,0xa8,0xe0,0x94,0x00,0x40,0xb9,0x90,
54233 -0x01,0xc7,0xe0,0x30,0xe0,0xb2,0x22,0x90,0x9e,0x5e,0xe0,0x54,0xf0,0xf0,0xe0,0x44,
54234 -0x01,0xf0,0x12,0x44,0xff,0x12,0x45,0x00,0xe0,0x54,0xf0,0xf0,0xe0,0x44,0x02,0xf0,
54235 -0x22,0x90,0x9e,0x60,0xe0,0x30,0xe6,0x1c,0xe0,0x54,0x0f,0xff,0x90,0x9e,0x4e,0xe0,
54236 -0xfe,0x4f,0x90,0x01,0x2f,0xf0,0xee,0x64,0x80,0x90,0x9e,0x4e,0xf0,0x90,0x9e,0x60,
54237 -0xe0,0x54,0xbf,0xf0,0x22,0x8f,0x75,0x12,0x45,0xb1,0xef,0x64,0x01,0x70,0x2e,0x90,
54238 -0x9e,0x6a,0x12,0x47,0xfa,0xe5,0x75,0x60,0x10,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,
54239 -0xfc,0xf5,0x83,0xe0,0x44,0x10,0xf0,0x80,0x0e,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,
54240 -0xfc,0xf5,0x83,0xe0,0x54,0xef,0xf0,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0xe4,0x90,
54241 -0x9e,0x2f,0xf0,0xe5,0x74,0x60,0x6a,0xe5,0x73,0x64,0x01,0x70,0x64,0xe5,0x74,0x14,
54242 -0x60,0x29,0x24,0xfd,0x60,0x25,0x24,0x02,0x24,0xfb,0x50,0x02,0x80,0x23,0x90,0x9e,
54243 -0x50,0xe0,0x14,0xf0,0xe0,0x60,0x04,0xa3,0xe0,0x60,0x16,0x90,0x9e,0x50,0xe0,0x70,
54244 -0x0a,0x90,0x9e,0x5f,0xe0,0x90,0x9e,0x50,0xf0,0x80,0x00,0x90,0x9e,0x2f,0x74,0x01,
54245 -0xf0,0x90,0x9e,0x2f,0xe0,0x60,0x2a,0x90,0x9e,0x63,0xe0,0x44,0x10,0xf0,0xe4,0x90,
54246 -0x9e,0x89,0xf0,0x90,0x9e,0x5a,0x12,0x44,0x56,0x90,0x01,0x57,0x74,0x05,0xf0,0x90,
54247 -0x9e,0x5e,0xe0,0x54,0x0f,0xc3,0x94,0x04,0x50,0x07,0x7d,0x01,0x7f,0x04,0x12,0x47,
54248 -0x1a,0x22,0xef,0xc3,0x94,0x20,0x50,0x39,0xef,0x30,0xe0,0x17,0xed,0xc4,0x54,0xf0,
54249 -0xfd,0xef,0xc3,0x13,0xfe,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,
54250 -0x0f,0x80,0x10,0xef,0xc3,0x13,0xfe,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,
54251 -0xe0,0x54,0xf0,0xf0,0x74,0xa4,0x2e,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x4d,
54252 -0xf0,0x22,0xad,0x07,0xed,0xc3,0x94,0x20,0x50,0x0d,0x74,0x84,0x2d,0xf5,0x82,0xe4,
54253 -0x34,0x04,0xf5,0x83,0xe0,0x80,0x0b,0x74,0xa6,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,
54254 -0x83,0xe0,0x54,0x7f,0xf5,0x64,0xe5,0x64,0x54,0x1f,0xfc,0x75,0xf0,0x09,0xed,0x90,
54255 -0x96,0x48,0x12,0x43,0x5f,0xe0,0xff,0x90,0x9e,0x3e,0xf0,0xed,0x25,0xe0,0x24,0x02,
54256 -0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x3f,0xcb,0xf0,
54257 -0xa3,0xeb,0xf0,0xed,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,
54258 -0xfb,0xa3,0xe0,0x90,0x9e,0x41,0xcb,0xf0,0xa3,0xeb,0xf0,0xec,0x25,0xe0,0x24,0x66,
54259 -0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfa,0x74,0x01,0x93,0xfb,0xed,0x25,
54260 -0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xea,0xf0,0xa3,0xeb,0xf0,0xec,
54261 -0xc3,0x9f,0x40,0x02,0xc1,0xc9,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,
54262 -0xec,0xf0,0x04,0xfb,0x90,0x9e,0x3e,0xe0,0xff,0xeb,0xd3,0x9f,0x40,0x02,0xc1,0xfa,
54263 -0xeb,0xc3,0x94,0x10,0x40,0x21,0xeb,0x24,0xf0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,
54264 -0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x3f,0xe0,0x5e,
54265 -0xfe,0xa3,0xe0,0x5f,0x4e,0x70,0x23,0xeb,0xc3,0x94,0x10,0x50,0x39,0x74,0x01,0x7e,
54266 -0x00,0xa8,0x03,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,
54267 -0x41,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x1c,0xeb,0x64,0x13,0x60,0x08,0xeb,
54268 -0x64,0x12,0x60,0x03,0xbb,0x11,0x09,0x90,0x9e,0x3f,0xe0,0x30,0xe0,0x02,0x7b,0x18,
54269 -0xac,0x03,0x8c,0x64,0x80,0x34,0x0b,0x80,0x8b,0x90,0x9e,0x3e,0xe0,0xfb,0x6c,0x70,
54270 -0x69,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xec,0xf0,0x75,0xf0,0x09,
54271 -0xed,0x90,0x96,0x4a,0x12,0x43,0x5f,0xe0,0xb4,0x01,0x0c,0xe5,0x64,0x20,0xe6,0x07,
54272 -0xec,0x44,0x40,0xf5,0x64,0x80,0x03,0xaf,0x64,0x22,0xec,0x25,0xe0,0x24,0x9e,0xf5,
54273 -0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xec,0x25,0xe0,
54274 -0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,
54275 -0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,
54276 -0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0x80,0x5b,0xec,0xd3,0x9b,0x40,0x56,0x90,
54277 -0x9e,0x3e,0xe0,0xff,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xef,0xf0,
54278 -0xac,0x07,0x8f,0x64,0xec,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,
54279 -0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xec,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,
54280 -0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,
54281 -0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,
54282 -0xef,0xf0,0xaf,0x64,0x22,0x74,0x01,0x2d,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,
54283 -0xf0,0xaf,0x05,0xe5,0x64,0x44,0x80,0xfd,0x12,0x58,0xf1,0xe5,0x64,0x44,0x80,0xff,
54284 -0x22,0xac,0x07,0xec,0xc3,0x94,0x20,0x50,0x0d,0x74,0x84,0x2c,0xf5,0x82,0xe4,0x34,
54285 -0x04,0xf5,0x83,0xe0,0x80,0x0b,0x74,0xa6,0x2c,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,
54286 -0xe0,0x54,0x7f,0xf5,0x64,0xe5,0x64,0x54,0x1f,0xff,0x90,0x9e,0x40,0xf0,0x75,0xf0,
54287 -0x09,0xec,0x90,0x96,0x49,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x42,0xf0,0x75,0xf0,0x09,
54288 -0xec,0x90,0x96,0x48,0x12,0x43,0x5f,0xe0,0xfe,0x90,0x9e,0x43,0xf0,0xec,0x25,0xe0,
54289 -0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x44,
54290 -0xcb,0xf0,0xa3,0xeb,0xf0,0xec,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,
54291 -0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x46,0xcb,0xf0,0xa3,0xeb,0xf0,0xef,0xd3,0x9e,
54292 -0x40,0x0a,0x90,0x9e,0x43,0xe0,0x90,0x9e,0x40,0xf0,0xf5,0x64,0xed,0x70,0x02,0x21,
54293 -0x07,0x90,0x9e,0x41,0xed,0xf0,0xe5,0x64,0x30,0xe6,0x0a,0x90,0x9e,0x40,0xe0,0xf5,
54294 -0x64,0xa3,0xe0,0x14,0xf0,0x90,0x9e,0x41,0xe0,0x70,0x02,0x21,0x07,0x90,0x9e,0x40,
54295 -0xe0,0xff,0xd3,0x94,0x00,0x50,0x02,0x21,0x07,0xe4,0x90,0x9e,0x3f,0xf0,0xef,0x14,
54296 -0x90,0x9e,0x3e,0xf0,0x90,0x9e,0x42,0xe0,0xfd,0x90,0x9e,0x3e,0xe0,0xff,0xd3,0x9d,
54297 -0x40,0x6b,0xef,0x94,0x10,0x40,0x21,0xef,0x24,0xf0,0xff,0x74,0x01,0x7e,0x00,0xa8,
54298 -0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x46,0xe0,
54299 -0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x70,0x27,0x90,0x9e,0x3e,0xe0,0xff,0xc3,0x94,0x10,
54300 -0x50,0x33,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,
54301 -0xd8,0xf9,0xff,0x90,0x9e,0x44,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x16,0x90,
54302 -0x9e,0x3e,0xe0,0xf5,0x64,0xa3,0xe0,0x04,0xf0,0x90,0x9e,0x41,0xe0,0xff,0x90,0x9e,
54303 -0x3f,0xe0,0x6f,0x60,0x08,0x90,0x9e,0x3e,0xe0,0x14,0xf0,0x80,0x87,0x90,0x9e,0x41,
54304 -0xe0,0xff,0x90,0x9e,0x3f,0xe0,0xc3,0x9f,0x50,0x0d,0x90,0x9e,0x3e,0xe0,0xb5,0x05,
54305 -0x06,0x90,0x9e,0x42,0xe0,0xf5,0x64,0xe5,0x64,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,
54306 -0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xe5,0x64,0x25,0xe0,0x24,
54307 -0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,
54308 -0xc3,0x13,0xfe,0xef,0x13,0xff,0xec,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,
54309 -0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0xaf,0x04,0xad,0x64,0x12,0x58,0xf1,0xaf,0x64,
54310 -0x22,0xe4,0xf5,0x59,0xe5,0x59,0xb4,0x20,0x14,0x90,0x9a,0xc5,0xe0,0x04,0xf0,0x90,
54311 -0x95,0x01,0xe0,0xff,0x90,0x9a,0xc5,0xe0,0xb5,0x07,0x02,0xe4,0xf0,0x75,0xf0,0x09,
54312 -0xe5,0x59,0x90,0x96,0x4b,0x12,0x43,0x5f,0xe0,0x64,0x01,0x60,0x02,0xe1,0x95,0xe5,
54313 -0x59,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,
54314 -0xd3,0x94,0x00,0xee,0x94,0x00,0x50,0x02,0xe1,0x95,0xe5,0x59,0x94,0x20,0x40,0x08,
54315 -0x90,0x9a,0xc5,0xe0,0x60,0x02,0xe1,0xa0,0xe5,0x59,0x75,0xf0,0x0a,0xa4,0x24,0x00,
54316 -0xf9,0x74,0x90,0x35,0xf0,0x75,0x5e,0x01,0xf5,0x5f,0x89,0x60,0xe5,0x59,0x25,0xe0,
54317 -0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe0,0xff,0xa3,0xe0,0x90,0x9e,0x38,
54318 -0xcf,0xf0,0xa3,0xef,0xf0,0xe5,0x59,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,
54319 -0xf5,0x83,0xe0,0xff,0xa3,0xe0,0x90,0x9e,0x3a,0xcf,0xf0,0xa3,0xef,0xf0,0xe5,0x59,
54320 -0xc3,0x94,0x20,0x50,0x14,0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,
54321 -0xe0,0x54,0x3f,0x90,0x9e,0x34,0xf0,0x80,0x12,0x74,0xa6,0x25,0x59,0xf5,0x82,0xe4,
54322 -0x34,0x9c,0xf5,0x83,0xe0,0x54,0x3f,0x90,0x9e,0x34,0xf0,0x90,0x9e,0x34,0xe0,0xfe,
54323 -0x54,0x1f,0xa3,0xf0,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x48,0x12,0x43,0x5f,0xe0,
54324 -0x90,0x9e,0x3d,0xf0,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,
54325 -0xc3,0x94,0x05,0x40,0x02,0x81,0x6e,0x90,0x9e,0x3d,0xe0,0xff,0x90,0x9e,0x35,0xe0,
54326 -0x9f,0x40,0x13,0x90,0x9e,0x3d,0xe0,0x90,0x9e,0x35,0xf0,0xee,0x54,0x40,0xfe,0x90,
54327 -0x9e,0x34,0xf0,0xef,0x4e,0xf0,0x90,0x04,0xfd,0xe0,0x64,0x01,0x70,0x29,0x90,0x9e,
54328 -0x35,0xe0,0xff,0x90,0x41,0x4a,0x93,0xfe,0x74,0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,
54329 -0x9a,0xf5,0x83,0xe0,0xc3,0x9e,0x40,0x06,0xef,0x90,0x40,0xda,0x80,0x30,0x90,0x9e,
54330 -0x35,0xe0,0x90,0x40,0xf6,0x80,0x27,0x90,0x9e,0x35,0xe0,0xff,0x90,0x41,0x4a,0x93,
54331 -0xfe,0x74,0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xc3,0x9e,0x40,
54332 -0x06,0xef,0x90,0x41,0x12,0x80,0x07,0x90,0x9e,0x35,0xe0,0x90,0x41,0x2e,0x93,0x90,
54333 -0x9e,0x3c,0xf0,0x90,0x9e,0x3c,0xe0,0x75,0xf0,0x06,0xa4,0x24,0x50,0xf9,0x74,0x40,
54334 -0x35,0xf0,0x75,0x5b,0xff,0xf5,0x5c,0x89,0x5d,0x90,0x9e,0x34,0xe0,0x90,0x41,0xf2,
54335 -0x93,0xff,0xd3,0x90,0x9e,0x3b,0xe0,0x9f,0x90,0x9e,0x3a,0xe0,0x94,0x00,0x40,0x09,
54336 -0xe4,0xfd,0xaf,0x59,0x12,0x67,0xb1,0xe1,0x2c,0xe5,0x59,0x25,0xe0,0x24,0xc2,0xf5,
54337 -0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xf5,0x61,0xa3,0xe0,0xf5,0x62,0xab,0x5b,0xaa,
54338 -0x5c,0xa9,0x5d,0x12,0x24,0x62,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x12,
54339 -0x42,0x97,0xfd,0xac,0xf0,0x12,0x24,0x7b,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,
54340 -0xf5,0x61,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0x7e,
54341 -0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x02,0x12,0x42,0xc2,0xfd,0xac,0xf0,
54342 -0x12,0x24,0x7b,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,0xaa,
54343 -0x5c,0xa9,0x5d,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,
54344 -0xa9,0x60,0x90,0x00,0x04,0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x24,0x7b,0xef,0x25,
54345 -0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,0x00,
54346 -0x03,0x12,0x42,0x20,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x06,
54347 -0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x24,0x7b,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,
54348 -0x61,0xf5,0x61,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,0x00,0x04,0x12,0x42,0x20,0xff,
54349 -0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x08,0x12,0x42,0xc2,0xfd,0xac,
54350 -0xf0,0x12,0x24,0x7b,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,
54351 -0xaa,0x5c,0xa9,0x5d,0x90,0x00,0x05,0x12,0x42,0x20,0xff,0x7e,0x00,0x90,0x9e,0x38,
54352 -0xe0,0xfc,0xa3,0xe0,0xfd,0x12,0x24,0x7b,0xd3,0xe5,0x62,0x9f,0xe5,0x61,0x9e,0x40,
54353 -0x0c,0xe5,0x62,0x9f,0xf5,0x62,0xe5,0x61,0x9e,0xf5,0x61,0x80,0x05,0xe4,0xf5,0x61,
54354 -0xf5,0x62,0xe5,0x59,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe5,
54355 -0x61,0xf0,0xa3,0xe5,0x62,0xf0,0x90,0x9e,0x34,0xe0,0x25,0xe0,0x24,0x66,0xf5,0x82,
54356 -0xe4,0x34,0x41,0xf5,0x83,0xc3,0x74,0x01,0x93,0x95,0x62,0xe4,0x93,0x95,0x61,0x50,
54357 -0x07,0xaf,0x59,0x12,0x65,0xb2,0xe1,0x00,0x90,0x9e,0x34,0xe0,0x25,0xe0,0x24,0x9e,
54358 -0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xd3,0x74,0x01,0x93,0x95,0x62,0xe4,0x93,0x95,
54359 -0x61,0x50,0x02,0xe1,0x00,0x7d,0x01,0xaf,0x59,0x12,0x67,0xb1,0xe1,0x00,0x74,0xe6,
54360 -0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xfc,0x64,0x05,0x60,0x02,0xc1,
54361 -0x09,0x90,0x96,0x43,0xe0,0xff,0xb4,0x03,0x0b,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x19,
54362 -0x40,0x3d,0x80,0x2e,0xef,0xb4,0x02,0x0b,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x11,0x40,
54363 -0x2e,0x80,0x1f,0x90,0x96,0x43,0xe0,0xff,0xb4,0x01,0x0b,0x90,0x9e,0x35,0xe0,0xc3,
54364 -0x94,0x0a,0x40,0x1b,0x80,0x0c,0xef,0x70,0x11,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x03,
54365 -0x40,0x0d,0x90,0x9a,0x84,0x74,0x01,0xf0,0x80,0x05,0xe4,0x90,0x9a,0x84,0xf0,0x74,
54366 -0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x63,0x74,0x44,0x25,
54367 -0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xff,0xc3,0x94,0x30,0x50,0x02,0xa1,
54368 -0xb6,0x90,0x9a,0x84,0xe0,0x64,0x01,0x60,0x02,0xa1,0xb6,0x74,0x85,0x25,0x59,0xf5,
54369 -0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0x64,0x0a,0x60,0x51,0xef,0x24,0x05,0xff,0xe4,
54370 -0x33,0xfe,0x74,0x41,0x25,0x59,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe0,0xfd,0xd3,
54371 -0x9f,0xee,0x64,0x80,0xf8,0x74,0x80,0x98,0x50,0x32,0xed,0x24,0x05,0xff,0xe4,0x33,
54372 -0xfe,0x74,0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xd3,0x9f,0xee,
54373 -0x64,0x80,0xf8,0x74,0x80,0x98,0x50,0x14,0x74,0x26,0x25,0x59,0xf5,0x82,0xe4,0x34,
54374 -0x9d,0xf5,0x83,0xe0,0xff,0x90,0x9e,0x35,0xe0,0x6f,0x60,0x3d,0x74,0x44,0x25,0x59,
54375 -0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xff,0xd3,0x94,0x42,0x40,0x05,0x75,0x63,
54376 -0x05,0x80,0x0e,0xef,0xd3,0x94,0x39,0x40,0x05,0x75,0x63,0x03,0x80,0x03,0x75,0x63,
54377 -0x01,0x74,0x41,0x25,0x59,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xef,0xf0,0x74,0x85,
54378 -0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0x80,0x29,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,
54379 -0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x74,0x85,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,
54380 -0x83,0xe0,0x04,0xf0,0x80,0x10,0xe4,0xf5,0x63,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,
54381 -0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x90,0x9e,0x35,0xe0,0xff,0x74,0x26,0x25,0x59,0xf5,
54382 -0x82,0xe4,0x34,0x9d,0xf5,0x83,0xef,0xf0,0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,
54383 -0x98,0xf5,0x83,0xe5,0x63,0xf0,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x4c,0x12,0x43,
54384 -0x5f,0xe0,0xb4,0x01,0x10,0xe4,0xf5,0x63,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,
54385 -0x9c,0xf5,0x83,0xe4,0xf0,0xad,0x63,0xc1,0xfb,0xec,0x64,0x06,0x60,0x02,0xe1,0x00,
54386 -0xf5,0x61,0xf5,0x62,0x90,0x42,0x13,0x93,0xff,0x7e,0x00,0x90,0x9e,0x38,0xe0,0xfc,
54387 -0xa3,0xe0,0xfd,0x12,0x24,0x7b,0x90,0x9e,0x36,0xee,0xf0,0xa3,0xef,0xf0,0x74,0x84,
54388 -0x25,0x59,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x63,0xe4,0xf5,0x5a,0xab,
54389 -0x5e,0xaa,0x5f,0xa9,0x60,0x75,0xf0,0x02,0xe5,0x5a,0xa4,0xf5,0x82,0x85,0xf0,0x83,
54390 -0x12,0x42,0xc2,0xfd,0xac,0xf0,0xe5,0x5a,0x90,0x42,0x0e,0x93,0xff,0x7e,0x00,0x12,
54391 -0x24,0x7b,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xc3,0x90,0x9e,0x37,
54392 -0xe0,0x95,0x62,0x90,0x9e,0x36,0xe0,0x95,0x61,0x40,0x07,0x05,0x5a,0xe5,0x5a,0xb4,
54393 -0x05,0xbd,0xe5,0x5a,0xc3,0x13,0xf5,0x5a,0xe5,0x63,0xb4,0x01,0x06,0xe5,0x5a,0x70,
54394 -0x46,0x80,0x13,0xe5,0x63,0xb4,0x03,0x15,0xe5,0x5a,0x70,0x05,0x75,0x63,0x03,0x80,
54395 -0x39,0xe5,0x5a,0xb4,0x01,0x05,0x75,0x63,0x01,0x80,0x2f,0x80,0x2a,0xe5,0x63,0xb4,
54396 -0x05,0x28,0xe5,0x5a,0x70,0x05,0x75,0x63,0x05,0x80,0x0d,0xe5,0x5a,0xb4,0x01,0x05,
54397 -0x75,0x63,0x03,0x80,0x03,0x75,0x63,0x01,0xd3,0x90,0x9e,0x3b,0xe0,0x94,0x03,0x90,
54398 -0x9e,0x3a,0xe0,0x94,0x00,0x40,0x03,0xe4,0xf5,0x63,0xd3,0x90,0x9e,0x3b,0xe0,0x94,
54399 -0x03,0x90,0x9e,0x3a,0xe0,0x94,0x00,0x40,0x03,0xe4,0xf5,0x63,0x74,0x84,0x25,0x59,
54400 -0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe5,0x63,0xf0,0xfd,0xaf,0x59,0x12,0x65,0x72,
54401 -0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xd3,0x94,0x05,0x74,
54402 -0xe6,0x50,0x0e,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x04,0xf0,0x80,
54403 -0x0b,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0xab,0x5e,0xaa,0x5f,
54404 -0xa9,0x60,0xe4,0xf5,0xf0,0x12,0x42,0xfa,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,
54405 -0x02,0xe4,0xf5,0xf0,0x12,0x43,0x19,0x90,0x00,0x04,0xe4,0xf5,0xf0,0x12,0x43,0x19,
54406 -0x90,0x00,0x06,0xe4,0xf5,0xf0,0x12,0x43,0x19,0x90,0x00,0x08,0xe4,0xf5,0xf0,0x12,
54407 -0x43,0x19,0xe5,0x59,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe4,
54408 -0xf0,0xa3,0xf0,0xe5,0x59,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,
54409 -0xe4,0xf0,0xa3,0xf0,0xe5,0x59,0x25,0xe0,0x24,0x44,0xf5,0x82,0xe4,0x34,0x99,0xf5,
54410 -0x83,0xe4,0xf0,0xa3,0xf0,0x05,0x59,0xe5,0x59,0xc3,0x94,0x40,0x50,0x02,0x21,0x54,
54411 -0x22,0x90,0x04,0x44,0x74,0x11,0xf0,0xa3,0x74,0xf0,0xf0,0xa3,0x74,0x0f,0xf0,0xa3,
54412 -0xe4,0xf0,0xfd,0x74,0xa4,0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe4,0xf0,0x0d,
54413 -0xbd,0x10,0xf0,0xe4,0x90,0x9a,0xc5,0xf0,0x90,0x95,0x01,0x04,0xf0,0xe4,0xfd,0x75,
54414 -0xf0,0x0a,0xed,0x90,0x90,0x00,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,
54415 -0xed,0x90,0x90,0x02,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,
54416 -0x90,0x04,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x06,
54417 -0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x08,0x12,0x43,
54418 -0x5f,0xe4,0xf0,0xa3,0xf0,0x74,0x26,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0x74,
54419 -0x13,0xf0,0x74,0x85,0x2d,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe4,0xf0,0x74,0x84,
54420 -0x2d,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,0xed,0x25,0xe0,0x24,0x80,0xf5,
54421 -0x82,0xe4,0x34,0x93,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc4,0xf5,
54422 -0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc4,0xf5,
54423 -0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0x44,0xf5,
54424 -0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc6,0xf5,
54425 -0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0x46,0xf5,
54426 -0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0x74,0x86,0x2d,0xf5,0x82,0xe4,
54427 -0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x74,0x46,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,
54428 -0xe4,0xf0,0x74,0xe6,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x90,0x41,
54429 -0xc4,0x93,0xfe,0x74,0x01,0x93,0xff,0x90,0x41,0x8c,0x74,0x01,0x93,0x2f,0xff,0xe4,
54430 -0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,
54431 -0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4b,
54432 -0x12,0x43,0x5f,0x74,0x01,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4a,0x12,0x43,0x5f,
54433 -0x74,0x01,0xf0,0x74,0x82,0x2d,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0x74,0x0c,0xf0,
54434 -0x75,0xf0,0x09,0xed,0x90,0x96,0x46,0x12,0x43,0x5f,0x74,0xff,0xf0,0xa3,0xf0,0x75,
54435 -0xf0,0x09,0xed,0x90,0x96,0x44,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0x74,0x0f,0xf0,0x75,
54436 -0xf0,0x09,0xed,0x90,0x96,0x48,0x12,0x43,0x5f,0x74,0x13,0xf0,0x75,0xf0,0x09,0xed,
54437 -0x90,0x96,0x49,0x12,0x43,0x5f,0xe4,0xf0,0xed,0xc3,0x94,0x20,0x50,0x0f,0x74,0x84,
54438 -0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0x74,0x13,0xf0,0x80,0x0d,0x74,0xa6,0x2d,
54439 -0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0x74,0x13,0xf0,0x0d,0xed,0x64,0x40,0x60,0x03,
54440 -0x02,0x6f,0xcf,0x22,0x12,0x24,0x62,0xf5,0x59,0xc3,0x94,0x40,0x50,0x15,0x90,0x00,
54441 -0x02,0x12,0x42,0x20,0xff,0x74,0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,
54442 -0xef,0xf0,0x22,0xe5,0x59,0xb4,0x40,0x0a,0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x96,
54443 -0x42,0xf0,0x22,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0x54,0x3f,0xfe,0xef,0x54,0x80,
54444 -0xc4,0x13,0x13,0x13,0x54,0x01,0xfd,0xaf,0x06,0x02,0x53,0xa4,0x12,0x24,0x62,0x90,
54445 -0x95,0x01,0xf0,0x22,0x12,0x24,0x62,0xf5,0x73,0x22,0x90,0x00,0x02,0x12,0x42,0x20,
54446 -0xff,0x30,0xe0,0x25,0x12,0x24,0x62,0x90,0x9e,0x56,0xf0,0x90,0x00,0x01,0x12,0x42,
54447 -0x20,0x90,0x9e,0x57,0xf0,0xef,0xc3,0x13,0x54,0x7f,0x90,0x9e,0x55,0xf0,0x90,0x00,
54448 -0x03,0x12,0x42,0x20,0x90,0x9e,0x5b,0xf0,0x22,0x90,0x9e,0x56,0x74,0x01,0xf0,0x90,
54449 -0x9e,0x57,0x74,0x03,0xf0,0x90,0x9e,0x55,0x74,0x14,0xf0,0x90,0x9e,0x5b,0x74,0x05,
54450 -0xf0,0x22,0x12,0x24,0x62,0x30,0xe0,0x18,0xc3,0x13,0x54,0x7f,0x90,0x9e,0x5a,0xf0,
54451 -0x90,0x00,0x01,0x12,0x42,0x20,0xff,0x90,0x9e,0x58,0xe4,0xf0,0xa3,0xef,0xf0,0x22,
54452 -0x90,0x9e,0x5a,0x74,0x07,0xf0,0x90,0x9e,0x58,0xe4,0xf0,0xa3,0x74,0x02,0xf0,0x22,
54453 -0x90,0x02,0x09,0xe0,0xfd,0x12,0x24,0x62,0xfe,0xaf,0x05,0xed,0x2e,0x90,0x9e,0x67,
54454 -0xf0,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0xed,0x2f,0x90,0x9e,0x68,0xf0,0x90,0x00,
54455 -0x02,0x12,0x42,0x20,0xff,0xed,0x2f,0x90,0x9e,0x69,0xf0,0x90,0x00,0x03,0x12,0x42,
54456 -0x20,0xff,0xed,0x2f,0x90,0x9e,0x6a,0xf0,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0xae,
54457 -0x05,0xed,0x2f,0x90,0x9e,0x6b,0xf0,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,
54458 -0x9e,0x3f,0x12,0x43,0x8b,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,
54459 -0xc2,0xfa,0xe5,0xf0,0x24,0x00,0xff,0xe4,0x3a,0xfe,0x90,0x9e,0x3f,0x12,0x43,0x6b,
54460 -0x90,0x00,0x01,0xee,0x8f,0xf0,0x12,0x43,0x19,0x12,0x24,0x62,0xff,0x60,0x2c,0xb5,
54461 -0x22,0x16,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,0xc2,0x65,0x24,
54462 -0x70,0x04,0xe5,0x23,0x65,0xf0,0x60,0x23,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,
54463 -0x01,0x12,0x42,0xc2,0xff,0xae,0xf0,0x71,0x00,0x80,0x10,0x90,0x9e,0x3f,0x12,0x43,
54464 -0x6b,0x12,0x24,0x62,0x65,0x22,0x60,0x03,0x12,0x44,0xca,0xd0,0xd0,0x92,0xaf,0x22,
54465 -0x90,0x9e,0x42,0xee,0xf0,0xa3,0xef,0xf0,0x75,0x22,0x01,0x8e,0x23,0xf5,0x24,0xe4,
54466 -0xfd,0x7f,0x0b,0x71,0x44,0xe4,0xfd,0x7f,0x02,0x71,0x44,0x12,0x4f,0xbe,0xe4,0xff,
54467 -0x12,0x44,0xf1,0xe4,0xf5,0x26,0x90,0x01,0xc9,0xe5,0x26,0xf0,0x90,0x9e,0x42,0xe0,
54468 -0xfc,0xa3,0xe0,0xfd,0xec,0xfb,0x8d,0x44,0xe4,0xf5,0x45,0x7d,0x01,0x7f,0x60,0x7e,
54469 -0x01,0x02,0x30,0x62,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x45,0xed,0xf0,
54470 -0x90,0x9e,0x44,0xef,0xf0,0xd3,0x94,0x07,0x50,0x4f,0xa3,0xe0,0x70,0x1a,0x90,0x9e,
54471 -0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,
54472 -0x90,0x00,0x47,0xe0,0x5f,0xf0,0x80,0x17,0x90,0x9e,0x44,0xe0,0xff,0x74,0x01,0xa8,
54473 -0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x47,0xe0,0x4f,0xf0,0x12,
54474 -0x49,0xb9,0x90,0x9e,0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,
54475 -0xd8,0xfc,0xf4,0xff,0x90,0x00,0x46,0x80,0x5a,0x90,0x9e,0x44,0xe0,0x24,0xf8,0xf0,
54476 -0xa3,0xe0,0x70,0x1d,0x90,0x9e,0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,
54477 -0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0x80,
54478 -0x1a,0x90,0x9e,0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,
54479 -0xfc,0xc4,0x54,0xf0,0xff,0x90,0x00,0x43,0xe0,0x4f,0xf0,0x12,0x49,0xb9,0x90,0x9e,
54480 -0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,
54481 -0x90,0x00,0x43,0xe0,0x5f,0xf0,0x12,0x49,0xb9,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,
54482 -0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x6d,0xe0,0x90,0x9e,0x40,0xf0,0x90,0x9e,0x6e,
54483 -0xe0,0xf5,0x64,0xa3,0xe0,0xf5,0x65,0xe4,0xf5,0x61,0x74,0x70,0x25,0x61,0xf5,0x82,
54484 -0xe4,0x34,0x9e,0xf5,0x83,0xe0,0xff,0x74,0x66,0x25,0x61,0xf8,0xa6,0x07,0x05,0x61,
54485 -0xe5,0x61,0xb4,0x04,0xe5,0x90,0x9e,0x40,0xe0,0x12,0x43,0x94,0x74,0x6b,0x00,0x75,
54486 -0x93,0x01,0x74,0x71,0x02,0x74,0x71,0x03,0x74,0x71,0x04,0x75,0x93,0x05,0x75,0x63,
54487 -0x80,0x75,0x79,0x81,0x75,0x93,0x82,0x00,0x00,0x75,0x8f,0xaf,0x69,0xb1,0x9a,0xa1,
54488 -0x93,0x90,0x9e,0x40,0xe0,0xff,0xb4,0x02,0x08,0x90,0x9e,0x3f,0x74,0x01,0xf0,0x80,
54489 -0x0f,0xef,0x90,0x9e,0x3f,0xb4,0x03,0x05,0x74,0x02,0xf0,0x80,0x03,0x74,0x04,0xf0,
54490 -0xc3,0xe5,0x64,0x94,0x08,0x50,0x49,0xe4,0xf5,0x61,0x90,0x9e,0x3f,0xe0,0xff,0xe5,
54491 -0x61,0xc3,0x9f,0x40,0x02,0xa1,0x93,0xc3,0xe5,0x64,0x94,0x01,0x50,0x14,0xe5,0x61,
54492 -0x25,0x65,0xff,0xc3,0x74,0x03,0x95,0x61,0x24,0x66,0xf8,0xe6,0xfd,0x12,0x4a,0xc1,
54493 -0x80,0x1a,0xc3,0x74,0x03,0x95,0x61,0x24,0x66,0xf8,0xe6,0xff,0xe5,0x61,0x7c,0x00,
54494 -0x25,0x65,0xfd,0xec,0x35,0x64,0x8d,0x82,0xf5,0x83,0xef,0xf0,0x05,0x61,0x80,0xba,
54495 -0xc3,0xe5,0x64,0x94,0x10,0x40,0x02,0xa1,0x93,0x90,0x9e,0x40,0xe0,0x64,0x04,0x60,
54496 -0x02,0xa1,0x93,0xaf,0x67,0xfc,0xfd,0xfe,0x78,0x10,0x12,0x24,0xf5,0xc0,0x04,0xc0,
54497 -0x05,0xc0,0x06,0xc0,0x07,0xaf,0x66,0xe4,0xfc,0xfd,0xfe,0x78,0x18,0x12,0x24,0xf5,
54498 -0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0x12,0x43,0x46,0xc0,0x04,0xc0,0x05,0xc0,
54499 -0x06,0xc0,0x07,0xaf,0x68,0xe4,0xfc,0xfd,0xfe,0x78,0x08,0x12,0x24,0xf5,0xd0,0x03,
54500 -0xd0,0x02,0xd0,0x01,0xd0,0x00,0x12,0x43,0x46,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,
54501 -0x07,0xaf,0x69,0xe4,0xfc,0xfd,0xfe,0x12,0x43,0x46,0xa3,0x12,0x25,0x08,0x90,0x9e,
54502 -0x41,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0xaf,0x65,0xae,0x64,0x12,0x2b,
54503 -0x08,0x80,0x30,0xe5,0x68,0x7f,0x00,0xfe,0xef,0x25,0x69,0xf5,0x63,0xe4,0x3e,0xf5,
54504 -0x62,0xaf,0x63,0xfe,0x12,0x32,0x15,0x80,0x1a,0xe5,0x68,0x7f,0x00,0xfe,0xef,0x25,
54505 -0x69,0xf5,0x63,0xe4,0x3e,0xf5,0x62,0xaf,0x63,0xfe,0x12,0x31,0x82,0x80,0x04,0x7f,
54506 -0x00,0x80,0x02,0x7f,0x01,0xd0,0xd0,0x92,0xaf,0x22,0x8f,0x6a,0xe4,0x90,0x9e,0x45,
54507 -0xf0,0xe5,0x6a,0x14,0xfe,0x90,0x9e,0x45,0xe0,0xff,0xc3,0x9e,0x50,0x0e,0xef,0x04,
54508 -0xfd,0x12,0x2d,0x4d,0x90,0x9e,0x45,0xe0,0x04,0xf0,0x80,0xe5,0xe5,0x6a,0x14,0xff,
54509 -0x7d,0xff,0x12,0x2d,0x4d,0x90,0x9e,0x45,0xe5,0x6a,0xf0,0x90,0x9e,0x45,0xe0,0xc3,
54510 -0x94,0xff,0x50,0x0f,0xe0,0xff,0x04,0xfd,0x12,0x2d,0x4d,0x90,0x9e,0x45,0xe0,0x04,
54511 -0xf0,0x80,0xe8,0xad,0x6a,0x7f,0xff,0x02,0x2d,0x4d,0xd3,0x10,0xaf,0x01,0xc3,0xc0,
54512 -0xd0,0xe4,0xf5,0x5b,0x75,0x5c,0x04,0xf5,0x5d,0xf5,0x5f,0xf5,0x60,0x90,0x02,0x09,
54513 -0xe0,0xff,0x12,0x24,0x62,0xfe,0xef,0x2e,0xf5,0x5e,0x30,0xe0,0x08,0x75,0x59,0x00,
54514 -0x75,0x5a,0x80,0x80,0x05,0xe4,0xf5,0x59,0xf5,0x5a,0xe5,0x5e,0xc3,0x13,0x90,0xfd,
54515 -0x10,0xf0,0x74,0x20,0x25,0x5b,0xf5,0x5b,0xad,0x5a,0xe5,0x5b,0x2d,0xff,0x24,0x01,
54516 -0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x90,0x9e,0x6d,0xf0,0x74,0x02,0x2f,0xf5,
54517 -0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0xfe,0xe5,0x5b,0x2d,0x24,0x03,0xf5,0x82,0xe4,
54518 -0x34,0xfc,0xf5,0x83,0xe0,0x24,0x00,0xff,0xe4,0x3e,0x90,0x9e,0x6e,0xf0,0xa3,0xef,
54519 -0xf0,0x7f,0x04,0xe5,0x5b,0x25,0x5a,0x2f,0x24,0x00,0xf5,0x82,0xe4,0x34,0xfc,0xf5,
54520 -0x83,0xe0,0xfe,0x74,0x6c,0x2f,0xf5,0x82,0xe4,0x34,0x9e,0xf5,0x83,0xee,0xf0,0x0f,
54521 -0xbf,0x08,0xe0,0x91,0x0e,0xef,0x70,0x3f,0x90,0x01,0xc3,0xe0,0x60,0x25,0xc3,0xe5,
54522 -0x60,0x94,0xe8,0xe5,0x5f,0x94,0x03,0x40,0x09,0x90,0x01,0xc6,0xe0,0x44,0x10,0xf0,
54523 -0x80,0x63,0x05,0x60,0xe5,0x60,0x70,0x02,0x05,0x5f,0x7f,0x0a,0x7e,0x00,0x12,0x32,
54524 -0x15,0x80,0xd5,0x90,0x01,0xc6,0xe0,0x90,0x01,0xc3,0x30,0xe2,0x05,0x74,0xfe,0xf0,
54525 -0x80,0x43,0x74,0xff,0xf0,0x80,0x3e,0xe5,0x5b,0xb4,0x78,0x23,0xe4,0xf5,0x5b,0x05,
54526 -0x5e,0xe5,0x5a,0x64,0x80,0x45,0x59,0x70,0x06,0xf5,0x59,0xf5,0x5a,0x80,0x06,0x75,
54527 -0x59,0x00,0x75,0x5a,0x80,0xe5,0x5e,0xc3,0x13,0x90,0xfd,0x10,0xf0,0x80,0x06,0x74,
54528 -0x08,0x25,0x5b,0xf5,0x5b,0xe5,0x5d,0x15,0x5d,0x70,0x02,0x15,0x5c,0xe5,0x5d,0x45,
54529 -0x5c,0x60,0x02,0xc1,0x28,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x06,0x34,0x74,0xff,0xf0,
54530 -0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x22,0xe4,0xf5,0x25,0x22,0xe4,0x90,0x9e,0xaa,
54531 -0xf0,0xa3,0xf0,0x90,0x05,0xf8,0xe0,0x70,0x0f,0xa3,0xe0,0x70,0x0b,0xa3,0xe0,0x70,
54532 -0x07,0xa3,0xe0,0x70,0x03,0x7f,0x01,0x22,0xd3,0x90,0x9e,0xab,0xe0,0x94,0xe8,0x90,
54533 -0x9e,0xaa,0xe0,0x94,0x03,0x40,0x03,0x7f,0x00,0x22,0x7f,0x32,0x7e,0x00,0x12,0x32,
54534 -0x15,0x90,0x9e,0xaa,0xe4,0x75,0xf0,0x01,0x12,0x42,0x81,0x80,0xc6,0x90,0x9e,0x77,
54535 -0xe0,0x90,0x9e,0x0f,0xf0,0x22,0xef,0x70,0x03,0x02,0x79,0x1e,0x90,0x9e,0x0f,0xe0,
54536 -0x60,0x03,0x02,0x7c,0xe9,0x90,0x9d,0xfb,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,
54537 -0x08,0x7f,0x8c,0x7e,0x08,0x12,0x2b,0x08,0x90,0x9d,0xa7,0x12,0x43,0x53,0x90,0x80,
54538 -0x96,0x12,0x25,0x08,0x7f,0x44,0x7e,0x08,0x12,0x2b,0x08,0x90,0x9d,0xab,0x12,0x43,
54539 -0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x5c,0x7e,0x08,0x12,0x2b,0x08,0x90,0x9d,
54540 -0xaf,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x6c,0x7e,0x0e,0x12,0x2b,
54541 -0x08,0x90,0x9d,0xb3,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x70,0x7e,
54542 -0x0e,0x12,0x2b,0x08,0x90,0x9d,0xb7,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,
54543 -0x7f,0x74,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xbb,0x12,0x43,0x53,0x90,0x80,0x96,
54544 -0x12,0x25,0x08,0x7f,0x78,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xbf,0x12,0x43,0x53,
54545 -0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x7c,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xc3,
54546 -0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x80,0x7e,0x0e,0x12,0x2b,0x08,
54547 -0x90,0x9d,0xc7,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x84,0x7e,0x0e,
54548 -0x12,0x2b,0x08,0x90,0x9d,0xcb,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,
54549 -0x88,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xcf,0x12,0x43,0x53,0x90,0x80,0x96,0x12,
54550 -0x25,0x08,0x7f,0x8c,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xd3,0x12,0x43,0x53,0x90,
54551 -0x80,0x96,0x12,0x25,0x08,0x7f,0xd0,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xd7,0x12,
54552 -0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0xd4,0x7e,0x0e,0x12,0x2b,0x08,0x90,
54553 -0x9d,0xdb,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0xd8,0x7e,0x0e,0x12,
54554 -0x2b,0x08,0x90,0x9d,0xdf,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0xdc,
54555 -0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xe3,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,
54556 -0x08,0x7f,0xe0,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xe7,0x12,0x43,0x53,0x90,0x80,
54557 -0x96,0x12,0x25,0x08,0x7f,0xec,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xeb,0x12,0x43,
54558 -0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x04,0x7e,0x0c,0x12,0x2b,0x08,0x90,0x9d,
54559 -0xef,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x04,0x7e,0x0d,0x12,0x2b,
54560 -0x08,0x90,0x9d,0xf3,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x0c,0x7e,
54561 -0x09,0x12,0x2b,0x08,0x90,0x9d,0xf7,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,
54562 -0x7f,0x04,0x7e,0x08,0x12,0x2b,0x08,0x90,0x9e,0x0f,0x74,0x01,0xf0,0x22,0x90,0x9e,
54563 -0x0f,0xe0,0x64,0x01,0x60,0x02,0x81,0xe9,0x7f,0x8c,0x7e,0x08,0x12,0x22,0x65,0x90,
54564 -0x9d,0xfb,0x12,0x25,0x08,0x7f,0x44,0x7e,0x08,0x12,0x22,0x65,0x90,0x9d,0xa7,0x12,
54565 -0x25,0x08,0x7f,0x5c,0x7e,0x08,0x12,0x22,0x65,0x90,0x9d,0xab,0x12,0x25,0x08,0x7f,
54566 -0x6c,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xaf,0x12,0x25,0x08,0x7f,0x70,0x7e,0x0e,
54567 -0x12,0x22,0x65,0x90,0x9d,0xb3,0x12,0x25,0x08,0x7f,0x74,0x7e,0x0e,0x12,0x22,0x65,
54568 -0x90,0x9d,0xb7,0x12,0x25,0x08,0x7f,0x78,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xbb,
54569 -0x12,0x25,0x08,0x7f,0x7c,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xbf,0x12,0x25,0x08,
54570 -0x7f,0x80,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xc3,0x12,0x25,0x08,0x7f,0x84,0x7e,
54571 -0x0e,0x12,0x22,0x65,0x90,0x9d,0xc7,0x12,0x25,0x08,0x7f,0x88,0x7e,0x0e,0x12,0x22,
54572 -0x65,0x90,0x9d,0xcb,0x12,0x25,0x08,0x7f,0x8c,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,
54573 -0xcf,0x12,0x25,0x08,0x7f,0xd0,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xd3,0x12,0x25,
54574 -0x08,0x7f,0xd4,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xd7,0x12,0x25,0x08,0x7f,0xd8,
54575 -0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xdb,0x12,0x25,0x08,0x7f,0xdc,0x7e,0x0e,0x12,
54576 -0x22,0x65,0x90,0x9d,0xdf,0x12,0x25,0x08,0x7f,0xe0,0x7e,0x0e,0x12,0x22,0x65,0x90,
54577 -0x9d,0xe3,0x12,0x25,0x08,0x7f,0xec,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xe7,0x12,
54578 -0x25,0x08,0x7f,0x04,0x7e,0x0c,0x12,0x22,0x65,0x90,0x9d,0xeb,0x12,0x25,0x08,0x7f,
54579 -0x04,0x7e,0x0d,0x12,0x22,0x65,0x90,0x9d,0xef,0x12,0x25,0x08,0x7f,0x0c,0x7e,0x09,
54580 -0x12,0x22,0x65,0x90,0x9d,0xf3,0x12,0x25,0x08,0x7f,0x04,0x7e,0x08,0x12,0x22,0x65,
54581 -0x90,0x9d,0xf7,0x12,0x25,0x08,0x7f,0x8c,0x7e,0x08,0x12,0x22,0x65,0x90,0x9e,0xa4,
54582 -0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0xed,0x44,0xc0,0xfd,0xec,0x90,0x9e,
54583 -0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,
54584 -0x7f,0x8c,0x7e,0x08,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x00,0x01,0x00,
54585 -0x00,0x7f,0x44,0x7e,0x08,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x00,0xdb,
54586 -0x25,0xa4,0x7f,0x5c,0x7e,0x08,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x20,
54587 -0xdb,0x25,0xa4,0x7f,0x6c,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,
54588 -0x20,0xdb,0x25,0xa4,0x7f,0x70,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,
54589 -0x14,0x04,0x1b,0x25,0xa4,0x7f,0x74,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,
54590 -0x25,0x14,0x04,0x1b,0x25,0xa4,0x7f,0x78,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,
54591 -0x12,0x25,0x14,0x04,0x1b,0x25,0xa4,0x7f,0x7c,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,
54592 -0x96,0x12,0x25,0x14,0x04,0x1b,0x25,0xa4,0x7f,0x80,0x7e,0x0e,0x12,0x2b,0x08,0x90,
54593 -0x80,0x96,0x12,0x25,0x14,0x63,0xdb,0x25,0xa4,0x7f,0x84,0x7e,0x0e,0x12,0x2b,0x08,
54594 -0x90,0x80,0x96,0x12,0x25,0x14,0x04,0x1b,0x25,0xa4,0x7f,0x88,0x7e,0x0e,0x12,0x2b,
54595 -0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x20,0xdb,0x25,0xa4,0x7f,0x8c,0x7e,0x0e,0x12,
54596 -0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x20,0xdb,0x25,0xa4,0x7f,0xd0,0x7e,0x0e,
54597 -0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x20,0xdb,0x25,0xa4,0x7f,0xd4,0x7e,
54598 -0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x20,0xdb,0x25,0xa4,0x7f,0xd8,
54599 -0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x00,0x1b,0x25,0xa4,0x7f,
54600 -0xdc,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x00,0x1b,0x25,0xa4,
54601 -0x7f,0xe0,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x24,0xdb,0x25,
54602 -0xa4,0x7f,0xec,0x7e,0x0e,0x12,0x2b,0x08,0x7f,0x04,0x7e,0x0c,0x12,0x22,0x65,0x90,
54603 -0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0xe4,0xff,0xec,0x90,0x9e,
54604 -0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0xef,0x44,0x11,0xff,0xec,0x90,
54605 -0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,
54606 -0x08,0x7f,0x04,0x7e,0x0c,0x12,0x2b,0x08,0x7f,0x04,0x7e,0x0d,0x12,0x22,0x65,0x90,
54607 -0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0xef,0x54,0xf0,0xff,0xec,
54608 -0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0xef,0x44,0x01,0xff,
54609 -0xec,0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x96,
54610 -0x12,0x25,0x08,0x7f,0x04,0x7e,0x0d,0x12,0x2b,0x08,0x7f,0x0c,0x7e,0x09,0x12,0x22,
54611 -0x65,0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0xe4,0xff,0xec,
54612 -0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0xef,0x44,0x11,0xff,
54613 -0xec,0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x96,
54614 -0x12,0x25,0x08,0x7f,0x0c,0x7e,0x09,0x12,0x2b,0x08,0x7f,0x0c,0x7e,0x09,0x12,0x22,
54615 -0x65,0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0xed,0x54,0x0f,
54616 -0xfd,0xec,0x54,0xf0,0xfc,0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,
54617 -0x53,0xed,0x44,0x10,0xfd,0xec,0x44,0x01,0xfc,0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,
54618 -0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x0c,0x7e,0x09,0x12,
54619 -0x2b,0x08,0x7f,0x04,0x7e,0x08,0x12,0x22,0x65,0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,
54620 -0x9e,0xa4,0x12,0x43,0x53,0xef,0x54,0xf0,0xff,0xec,0x90,0x9e,0xa4,0x12,0x25,0x08,
54621 -0x90,0x9e,0xa4,0x12,0x43,0x53,0xef,0x44,0x01,0xff,0xec,0x90,0x9e,0xa4,0x12,0x25,
54622 -0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x04,0x7e,
54623 -0x08,0x12,0x2b,0x08,0xe4,0x90,0x9e,0x0f,0xf0,0x22,0x90,0x00,0x02,0x12,0x42,0x20,
54624 -0x90,0x9e,0x1e,0xf0,0xe0,0x60,0x04,0xe0,0xf4,0x70,0x21,0xa2,0xaf,0xe4,0x33,0xf5,
54625 -0x59,0xc2,0xaf,0x90,0x00,0x47,0xe0,0x54,0xfb,0xfd,0x7f,0x47,0x12,0x4a,0xc1,0x7d,
54626 -0x40,0x7f,0x01,0x12,0x31,0x66,0xe5,0x59,0x24,0xff,0x92,0xaf,0x22,0xe4,0xfd,0x7f,
54627 -0x45,0x12,0x4a,0xc1,0x90,0x04,0xfd,0xe4,0xf0,0xa3,0xf0,0x90,0x9e,0x1e,0xf0,0x90,
54628 -0x9e,0x24,0xf0,0x90,0x9e,0x27,0xf0,0x90,0x9e,0x25,0xf0,0x90,0x9e,0x28,0xf0,0x90,
54629 -0x9e,0x26,0xf0,0x90,0x9e,0x29,0xf0,0x90,0x9e,0x10,0x04,0xf0,0xe4,0xa3,0xf0,0xa3,
54630 -0xf0,0xa3,0xf0,0x90,0x9e,0x15,0xf0,0x90,0x9e,0x1a,0xf0,0x90,0x9e,0x1c,0xf0,0x90,
54631 -0x9e,0x2e,0xf0,0x90,0x9e,0x1f,0xf0,0x90,0x9e,0x1b,0xf0,0x90,0x9e,0x14,0xf0,0x90,
54632 -0x00,0x51,0xe0,0x44,0xc0,0xfd,0x7f,0x51,0x02,0x4a,0xc1,0x90,0x9e,0x15,0xe0,0xc3,
54633 -0x94,0x14,0x50,0x05,0xe0,0x04,0xf0,0xc1,0x33,0x90,0x9e,0x15,0xe0,0x64,0x14,0x60,
54634 -0x02,0xc1,0x33,0x90,0x9e,0x24,0xe0,0x70,0x25,0x90,0x9e,0x27,0xe0,0x70,0x1f,0x90,
54635 -0x9e,0x25,0xe0,0x70,0x19,0x90,0x9e,0x28,0xe0,0x70,0x13,0x90,0x9e,0x26,0xe0,0x70,
54636 -0x0d,0x90,0x9e,0x29,0xe0,0x70,0x07,0x90,0x04,0xfd,0xe0,0x54,0xfe,0xf0,0x90,0x9e,
54637 -0x24,0xe0,0x90,0x04,0x44,0xf0,0x90,0x9e,0x25,0xe0,0x90,0x04,0x45,0xf0,0x90,0x9e,
54638 -0x26,0xe0,0x90,0x04,0x46,0xf0,0xa3,0xe4,0xf0,0x90,0x9e,0x27,0xe0,0x90,0x04,0x48,
54639 -0xf0,0x90,0x9e,0x28,0xe0,0x90,0x04,0x49,0xf0,0x90,0x9e,0x29,0xe0,0x90,0x04,0x4a,
54640 -0xf0,0xa3,0xe4,0xf0,0x90,0x9e,0x10,0xe0,0x90,0x04,0x4c,0xf0,0x90,0x9e,0x11,0xe0,
54641 -0x90,0x04,0x4d,0xf0,0x90,0x9e,0x12,0xe0,0x90,0x04,0x4e,0xf0,0x90,0x9e,0x13,0xe0,
54642 -0x90,0x04,0x4f,0xf0,0xe4,0x90,0x9e,0x15,0xf0,0x90,0x9e,0x10,0x04,0xf0,0xe4,0xa3,
54643 -0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,0x24,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,
54644 -0xf0,0xa3,0xf0,0x90,0x05,0x60,0xe0,0x90,0x9e,0x34,0xf0,0x90,0x05,0x61,0xe0,0x90,
54645 -0x9e,0x35,0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x36,0xf0,0x90,0x05,0x63,0xe0,0x90,
54646 -0x9e,0x37,0xf0,0x90,0x9e,0x2d,0xe0,0xff,0x90,0x9e,0x37,0xe0,0xfe,0xd3,0x9f,0x50,
54647 -0x0b,0x90,0x9e,0x2d,0xe0,0xc3,0x9e,0xd3,0x94,0x01,0x40,0x11,0x90,0x9e,0x1b,0xe0,
54648 -0xb4,0x01,0x02,0x80,0x03,0x90,0x9e,0x1f,0xe0,0xff,0x12,0x4e,0xd8,0x22,0x90,0x9e,
54649 -0x2e,0xe0,0x64,0x01,0x60,0x08,0x90,0x9e,0x1c,0xe0,0x60,0x02,0xe1,0x55,0x90,0x9e,
54650 -0x10,0xe0,0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,0x3b,0x90,0x9e,0x11,0xe0,
54651 -0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x28,0x90,0x9e,0x12,0xe0,0xc3,
54652 -0x94,0xff,0x50,0x0a,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x11,0xf0,0x80,0x15,0x90,0x9e,
54653 -0x13,0xe0,0xc3,0x94,0xff,0x50,0x10,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x12,0xf0,0x90,
54654 -0x9e,0x11,0xf0,0x90,0x9e,0x10,0xf0,0x90,0x00,0x44,0xe0,0x54,0x0c,0x60,0x76,0xe0,
54655 -0x30,0xe2,0x32,0x90,0x9e,0x24,0xe0,0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,
54656 -0x24,0x90,0x9e,0x25,0xe0,0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x11,
54657 -0x90,0x9e,0x26,0xe0,0xc3,0x94,0xff,0x50,0x0c,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x25,
54658 -0xf0,0x90,0x9e,0x24,0xf0,0x90,0x00,0x44,0xe0,0x30,0xe3,0x32,0x90,0x9e,0x27,0xe0,
54659 -0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,0x24,0x90,0x9e,0x28,0xe0,0xc3,0x94,
54660 -0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x11,0x90,0x9e,0x29,0xe0,0xc3,0x94,0xff,
54661 -0x50,0x0c,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x28,0xf0,0x90,0x9e,0x27,0xf0,0x90,0x04,
54662 -0xfd,0xe0,0x44,0x01,0xf0,0x22,0xf5,0x67,};
54663 -
54664 -// =================== v79 UMC B Cut COMMON 2011-10-06 =====================
54665 -u8 Rtl8192CUFwUMCBCutImgArray[UMCBCutImgArrayLength] = {
54666 -0xc2,0x88,0x02,0x00,0x4f,0x00,0x00,0x00,0x0a,0x06,0x18,0x11,0x5e,0x3f,0x01,0x00,
54667 -0x61,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
54668 -0x02,0x43,0xba,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
54669 -0x00,0x00,0x00,0x02,0x49,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
54670 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
54671 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
54672 -0x00,0x00,0x00,0x02,0x5f,0x7b,0x00,0x00,0x00,0x00,0x00,0xa1,0xdf,0x00,0x00,0x00,
54673 -0x05,0x04,0x03,0x02,0x00,0x03,0x06,0x05,0x04,0x03,0x00,0x04,0x06,0x05,0x04,0x02,
54674 -0x00,0x04,0x08,0x07,0x06,0x04,0x00,0x06,0x0a,0x09,0x08,0x06,0x00,0x08,0x0a,0x09,
54675 -0x08,0x04,0x00,0x08,0x0a,0x09,0x08,0x02,0x00,0x08,0x0a,0x09,0x08,0x00,0x00,0x08,
54676 -0x12,0x11,0x10,0x08,0x00,0x10,0x1a,0x19,0x18,0x10,0x00,0x18,0x22,0x21,0x20,0x18,
54677 -0x00,0x20,0x22,0x21,0x20,0x10,0x00,0x20,0x22,0x21,0x20,0x08,0x00,0x20,0x22,0x21,
54678 -0x1c,0x08,0x00,0x20,0x22,0x21,0x14,0x08,0x00,0x20,0x22,0x20,0x18,0x08,0x00,0x20,
54679 -0x31,0x30,0x20,0x10,0x00,0x30,0x31,0x30,0x18,0x00,0x00,0x30,0x31,0x2f,0x10,0x10,
54680 -0x00,0x30,0x31,0x2c,0x10,0x10,0x00,0x30,0x31,0x28,0x10,0x00,0x00,0x30,0x31,0x20,
54681 -0x10,0x00,0x00,0x30,0x31,0x10,0x10,0x00,0x00,0x30,0x04,0x04,0x04,0x05,0x04,0x04,
54682 -0x04,0x05,0x05,0x05,0x06,0x06,0x04,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x04,0x04,
54683 -0x05,0x05,0x05,0x05,0x06,0x06,0x04,0x04,0x05,0x05,0x05,0x05,0x06,0x07,0x0a,0x0b,
54684 -0x0d,0x10,0x04,0x05,0x05,0x06,0x06,0x09,0x0c,0x11,0x08,0x08,0x09,0x09,0x0a,0x0c,
54685 -0x10,0x11,0x04,0x04,0x04,0x05,0x04,0x04,0x05,0x07,0x07,0x07,0x08,0x0a,0x04,0x04,
54686 -0x04,0x04,0x06,0x0a,0x0b,0x0d,0x05,0x05,0x07,0x07,0x08,0x0b,0x0d,0x0f,0x04,0x04,
54687 -0x04,0x05,0x07,0x07,0x09,0x09,0x0c,0x0e,0x10,0x12,0x04,0x04,0x05,0x05,0x06,0x0a,
54688 -0x11,0x13,0x09,0x09,0x09,0x09,0x0c,0x0e,0x11,0x13,0x00,0x00,0x00,0x00,0x00,0x00,
54689 -0x00,0x00,0x00,0x24,0x26,0x2a,0x18,0x1a,0x1d,0x1f,0x21,0x27,0x29,0x2a,0x00,0x00,
54690 -0x00,0x1f,0x23,0x28,0x2a,0x2c,0x00,0x04,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x18,
54691 -0x00,0x24,0x00,0x30,0x00,0x48,0x00,0x60,0x00,0x90,0x00,0xc0,0x00,0xd8,0x00,0x50,
54692 -0x00,0x78,0x00,0xa0,0x00,0xc8,0x01,0x40,0x01,0x90,0x01,0xe0,0x02,0x30,0x01,0x2c,
54693 -0x01,0x40,0x01,0xe0,0x02,0xd0,0x03,0xe8,0x04,0xb0,0x06,0x40,0x07,0xd0,0x00,0x02,
54694 -0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x0c,0x00,0x12,0x00,0x18,0x00,0x24,0x00,0x30,
54695 -0x00,0x48,0x00,0x60,0x00,0x6c,0x00,0x28,0x00,0x3c,0x00,0x50,0x00,0x64,0x00,0xa0,
54696 -0x00,0xc8,0x00,0xf0,0x01,0x18,0x00,0x64,0x00,0xa0,0x00,0xf0,0x01,0x68,0x01,0xf4,
54697 -0x02,0x58,0x03,0x20,0x03,0xe8,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x04,0x04,
54698 -0x05,0x07,0x04,0x04,0x07,0x0a,0x0a,0x0c,0x0c,0x12,0x05,0x07,0x07,0x08,0x0b,0x12,
54699 -0x24,0x3c,0x01,0x01,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x01,0x02,
54700 -0x03,0x04,0x05,0x06,0x07,0x08,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x20,0x1e,
54701 -0x1c,0x18,0x10,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
54702 -0xbb,0x01,0x0c,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe0,0x22,0x50,
54703 -0x06,0xe9,0x25,0x82,0xf8,0xe6,0x22,0xbb,0xfe,0x06,0xe9,0x25,0x82,0xf8,0xe2,0x22,
54704 -0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe4,0x93,0x22,0xbb,0x01,0x06,
54705 -0x89,0x82,0x8a,0x83,0xf0,0x22,0x50,0x02,0xf7,0x22,0xbb,0xfe,0x01,0xf3,0x22,0xf8,
54706 -0xbb,0x01,0x0d,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe8,0xf0,0x22,
54707 -0x50,0x06,0xe9,0x25,0x82,0xc8,0xf6,0x22,0xbb,0xfe,0x05,0xe9,0x25,0x82,0xc8,0xf2,
54708 -0x22,0xc5,0xf0,0xf8,0xa3,0xe0,0x28,0xf0,0xc5,0xf0,0xf8,0xe5,0x82,0x15,0x82,0x70,
54709 -0x02,0x15,0x83,0xe0,0x38,0xf0,0x22,0xbb,0x01,0x0a,0x89,0x82,0x8a,0x83,0xe0,0xf5,
54710 -0xf0,0xa3,0xe0,0x22,0x50,0x06,0x87,0xf0,0x09,0xe7,0x19,0x22,0xbb,0xfe,0x07,0xe3,
54711 -0xf5,0xf0,0x09,0xe3,0x19,0x22,0x89,0x82,0x8a,0x83,0xe4,0x93,0xf5,0xf0,0x74,0x01,
54712 -0x93,0x22,0xbb,0x01,0x10,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe0,
54713 -0xf5,0xf0,0xa3,0xe0,0x22,0x50,0x09,0xe9,0x25,0x82,0xf8,0x86,0xf0,0x08,0xe6,0x22,
54714 -0xbb,0xfe,0x0a,0xe9,0x25,0x82,0xf8,0xe2,0xf5,0xf0,0x08,0xe2,0x22,0xe5,0x83,0x2a,
54715 -0xf5,0x83,0xe9,0x93,0xf5,0xf0,0xa3,0xe9,0x93,0x22,0xbb,0x01,0x0a,0x89,0x82,0x8a,
54716 -0x83,0xf0,0xe5,0xf0,0xa3,0xf0,0x22,0x50,0x06,0xf7,0x09,0xa7,0xf0,0x19,0x22,0xbb,
54717 -0xfe,0x06,0xf3,0xe5,0xf0,0x09,0xf3,0x19,0x22,0xf8,0xbb,0x01,0x11,0xe5,0x82,0x29,
54718 -0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe8,0xf0,0xe5,0xf0,0xa3,0xf0,0x22,0x50,0x09,
54719 -0xe9,0x25,0x82,0xc8,0xf6,0x08,0xa6,0xf0,0x22,0xbb,0xfe,0x09,0xe9,0x25,0x82,0xc8,
54720 -0xf2,0xe5,0xf0,0x08,0xf2,0x22,0xef,0x4b,0xff,0xee,0x4a,0xfe,0xed,0x49,0xfd,0xec,
54721 -0x48,0xfc,0x22,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x22,0xa4,
54722 -0x25,0x82,0xf5,0x82,0xe5,0xf0,0x35,0x83,0xf5,0x83,0x22,0xe0,0xfb,0xa3,0xe0,0xfa,
54723 -0xa3,0xe0,0xf9,0x22,0xf8,0xe0,0xfb,0xa3,0xa3,0xe0,0xf9,0x25,0xf0,0xf0,0xe5,0x82,
54724 -0x15,0x82,0x70,0x02,0x15,0x83,0xe0,0xfa,0x38,0xf0,0x22,0xeb,0xf0,0xa3,0xea,0xf0,
54725 -0xa3,0xe9,0xf0,0x22,0xd0,0x83,0xd0,0x82,0xf8,0xe4,0x93,0x70,0x12,0x74,0x01,0x93,
54726 -0x70,0x0d,0xa3,0xa3,0x93,0xf8,0x74,0x01,0x93,0xf5,0x82,0x88,0x83,0xe4,0x73,0x74,
54727 -0x02,0x93,0x68,0x60,0xef,0xa3,0xa3,0xa3,0x80,0xdf,0x02,0x43,0xf8,0x02,0x50,0x31,
54728 -0xe4,0x93,0xa3,0xf8,0xe4,0x93,0xa3,0x40,0x03,0xf6,0x80,0x01,0xf2,0x08,0xdf,0xf4,
54729 -0x80,0x29,0xe4,0x93,0xa3,0xf8,0x54,0x07,0x24,0x0c,0xc8,0xc3,0x33,0xc4,0x54,0x0f,
54730 -0x44,0x20,0xc8,0x83,0x40,0x04,0xf4,0x56,0x80,0x01,0x46,0xf6,0xdf,0xe4,0x80,0x0b,
54731 -0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x90,0x44,0x3d,0xe4,0x7e,0x01,0x93,0x60,
54732 -0xbc,0xa3,0xff,0x54,0x3f,0x30,0xe5,0x09,0x54,0x1f,0xfe,0xe4,0x93,0xa3,0x60,0x01,
54733 -0x0e,0xcf,0x54,0xc0,0x25,0xe0,0x60,0xa8,0x40,0xb8,0xe4,0x93,0xa3,0xfa,0xe4,0x93,
54734 -0xa3,0xf8,0xe4,0x93,0xa3,0xc8,0xc5,0x82,0xc8,0xca,0xc5,0x83,0xca,0xf0,0xa3,0xc8,
54735 -0xc5,0x82,0xc8,0xca,0xc5,0x83,0xca,0xdf,0xe9,0xde,0xe7,0x80,0xbe,0x41,0x9e,0x66,
54736 -0x00,0x41,0x9e,0xae,0x00,0x41,0x9e,0x4d,0x80,0x41,0x9e,0x4e,0x80,0x41,0x9e,0xb0,
54737 -0x00,0x00,0xf0,0x90,0x9e,0x57,0xe0,0x90,0x9e,0x8a,0xf0,0xe4,0xfb,0xfd,0x7f,0x54,
54738 -0x7e,0x01,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x88,0xeb,0xf0,0xa3,0xe0,
54739 -0xfb,0xa3,0xe0,0xf5,0x44,0xe4,0xf5,0x45,0x12,0x35,0xab,0xd0,0xd0,0x92,0xaf,0x22,
54740 -0x90,0x01,0x5f,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x08,0xf0,0xe4,0x90,0x9e,0x89,0xf0,
54741 -0x90,0x9e,0x55,0xe0,0x90,0x9e,0x8a,0xf0,0xe4,0xfb,0xfd,0x7f,0x5c,0x7e,0x01,0x91,
54742 -0x62,0x90,0x01,0x5f,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x02,0xf0,0x90,0x9e,0x5c,
54743 -0x14,0xf0,0x90,0x9e,0x5e,0xe0,0x54,0x0f,0xc3,0x94,0x0c,0x50,0x02,0xf1,0x16,0x22,
54744 -0x8f,0x82,0x8e,0x83,0xa3,0xa3,0xa3,0xe4,0xf0,0x22,0xe4,0xf5,0x22,0x7f,0x60,0x7e,
54745 -0x01,0x80,0xed,0x90,0x9e,0x60,0xe0,0xff,0x7d,0x01,0xe1,0x1a,0xb1,0xb1,0xbf,0x01,
54746 -0x0f,0x90,0x9e,0x68,0xe0,0xff,0xe4,0xfd,0xf1,0xfe,0x90,0x04,0x1f,0x74,0x20,0xf0,
54747 -0x22,0x90,0x04,0x1b,0xe0,0x54,0x7f,0x64,0x7f,0x7f,0x01,0x60,0x02,0x7f,0x00,0x22,
54748 -0x22,0x22,0x22,0x02,0x60,0x0d,0x02,0x60,0x14,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
54749 -0x8b,0x1b,0x8a,0x1c,0x89,0x1d,0x90,0x9e,0x8b,0x71,0x8b,0xab,0x1e,0xaa,0x1f,0xa9,
54750 -0x20,0x90,0x9e,0x8e,0x71,0x8b,0xaf,0x21,0x15,0x21,0xef,0x60,0x1b,0x90,0x9e,0x8e,
54751 -0xe4,0x75,0xf0,0x01,0x71,0x74,0x12,0x29,0xd9,0xff,0x90,0x9e,0x8b,0xe4,0x75,0xf0,
54752 -0x01,0x71,0x74,0xef,0x51,0x4d,0x80,0xde,0xab,0x1b,0xaa,0x1c,0xa9,0x1d,0xd0,0xd0,
54753 -0x92,0xaf,0x22,0x90,0x06,0xa9,0xe0,0xf5,0x50,0x54,0xc0,0x70,0x0d,0x90,0x9e,0x63,
54754 -0xe0,0x54,0xfe,0xf0,0xe0,0x54,0xfd,0xf0,0x91,0xd3,0xe5,0x50,0x30,0xe6,0x17,0x90,
54755 -0x9e,0x63,0xe0,0x44,0x01,0xf0,0x90,0x9e,0x61,0xe0,0x64,0x02,0x60,0x04,0x91,0xdc,
54756 -0x80,0x0b,0x91,0x80,0x80,0x07,0x90,0x9e,0x63,0xe0,0x54,0xfe,0xf0,0xe5,0x50,0x90,
54757 -0x9e,0x63,0x30,0xe7,0x17,0xe0,0x44,0x02,0xf0,0xe4,0x90,0x9e,0x89,0x91,0x52,0x90,
54758 -0x01,0x57,0x74,0x05,0xf0,0x90,0x9e,0x62,0x74,0x01,0xf0,0x22,0xe0,0x54,0xfd,0xf0,
54759 -0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x04,0x1d,0xe0,0x60,0x1a,0x90,0x05,
54760 -0x22,0xe0,0x54,0x90,0x60,0x07,0x90,0x01,0xc6,0xe0,0x44,0x40,0xf0,0x90,0x01,0xc7,
54761 -0xe0,0x30,0xe1,0xe4,0x7f,0x00,0x80,0x02,0x7f,0x01,0xd0,0xd0,0x92,0xaf,0x22,0xc0,
54762 -0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,
54763 -0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x01,0xc4,0x74,
54764 -0xdf,0xf0,0x74,0x45,0xa3,0xf0,0x53,0x91,0xdf,0x90,0x01,0x3c,0xe0,0x55,0x30,0xf5,
54765 -0x34,0xa3,0xe0,0x55,0x31,0xf5,0x35,0xa3,0xe0,0x55,0x32,0xf5,0x36,0xa3,0xe0,0x55,
54766 -0x33,0xf5,0x37,0xe5,0x34,0x30,0xe0,0x06,0x90,0x01,0x3c,0x74,0x01,0xf0,0xe5,0x34,
54767 -0x30,0xe1,0x08,0x90,0x01,0x3c,0x74,0x02,0xf0,0xf1,0xbc,0xe5,0x34,0x30,0xe2,0x38,
54768 -0x90,0x01,0x3c,0x74,0x04,0xf0,0x90,0x06,0x92,0xe0,0x30,0xe0,0x24,0x90,0x9e,0x89,
54769 -0xe4,0xf0,0x90,0x9e,0x55,0xe0,0x90,0x9e,0x8a,0xf0,0xe4,0xfb,0xfd,0x7f,0x58,0x7e,
54770 -0x01,0x91,0x62,0x90,0x01,0x5b,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x01,0xf0,0x80,
54771 -0x07,0x90,0x9e,0x5d,0xe4,0xf0,0x91,0xd3,0xe5,0x34,0x30,0xe3,0x38,0x90,0x01,0x3c,
54772 -0x74,0x08,0xf0,0x90,0x06,0x92,0xe0,0x30,0xe1,0x24,0x90,0x9e,0x89,0xe4,0xf0,0x90,
54773 -0x9e,0x55,0xe0,0x90,0x9e,0x8a,0xf0,0xe4,0xfb,0xfd,0x7f,0x5c,0x7e,0x01,0x91,0x62,
54774 -0x90,0x01,0x5f,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x02,0xf0,0x80,0x07,0x90,0x9e,
54775 -0x5c,0xe4,0xf0,0x91,0xd3,0xe5,0x34,0x30,0xe4,0x09,0x90,0x01,0x3c,0x74,0x10,0xf0,
54776 -0x12,0x71,0xa3,0xe5,0x34,0x30,0xe5,0x09,0x90,0x01,0x3c,0x74,0x20,0xf0,0x12,0x52,
54777 -0x69,0xe5,0x35,0x30,0xe0,0x1a,0x90,0x01,0x3d,0x74,0x01,0xf0,0x90,0x01,0x2f,0xe0,
54778 -0x44,0x7f,0xf0,0x90,0x00,0x83,0xe0,0x90,0x9e,0x60,0xf0,0x12,0x63,0xac,0x91,0xd3,
54779 -0x74,0xdf,0x04,0x90,0x01,0xc4,0xf0,0x74,0x45,0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,
54780 -0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,
54781 -0x83,0xd0,0xf0,0xd0,0xe0,0x32,0x7d,0x01,0x7f,0x0c,0x8f,0x71,0x8d,0x72,0xe5,0x71,
54782 -0x54,0x0f,0xff,0x90,0x9e,0x5e,0xe0,0x54,0x0f,0x6f,0x60,0x72,0xe5,0x71,0x30,0xe2,
54783 -0x2b,0x90,0x9e,0x5e,0xe0,0x20,0xe2,0x05,0x7f,0x01,0x12,0x62,0xa7,0x90,0x9e,0x5e,
54784 -0xe0,0x30,0xe3,0x07,0xe5,0x71,0x20,0xe3,0x02,0x80,0x54,0x90,0x9e,0x5e,0xe0,0x20,
54785 -0xe3,0x4c,0xe5,0x71,0x30,0xe3,0x47,0xaf,0x72,0x02,0x62,0x43,0x90,0x9e,0x5e,0xe0,
54786 -0x54,0x0f,0xff,0xbf,0x0c,0x0d,0xe5,0x71,0x20,0xe3,0x08,0x12,0x4c,0xd5,0xef,0x60,
54787 -0x2d,0xf1,0x9f,0x90,0x9e,0x5e,0xe0,0x54,0x0f,0xff,0xbf,0x04,0x0e,0xe5,0x71,0x20,
54788 -0xe2,0x09,0x12,0x5e,0x8f,0xef,0x60,0x16,0x12,0x48,0xaa,0x90,0x9e,0x5e,0xe0,0x54,
54789 -0x0f,0xff,0xbf,0x02,0x09,0x12,0x61,0xd0,0xef,0x60,0x03,0x12,0x63,0x92,0x22,0x90,
54790 -0x06,0x04,0xe0,0x44,0x40,0xf0,0xe5,0x73,0xb4,0x01,0x05,0x7f,0x01,0x12,0x62,0x62,
54791 -0x90,0x9e,0x5e,0xe0,0x54,0xf0,0xf0,0xe0,0x44,0x04,0xf0,0x22,0x90,0x9e,0x62,0xe0,
54792 -0x60,0x0e,0xe4,0xf0,0xa3,0xe0,0x54,0xfd,0xf0,0xe0,0x54,0x07,0x70,0x2b,0x80,0x27,
54793 -0x90,0x9e,0x51,0xe0,0x04,0xf0,0x90,0x9e,0x63,0xe0,0x54,0xef,0xf0,0x90,0x9e,0x56,
54794 -0xe0,0xff,0x90,0x9e,0x51,0xe0,0xd3,0x9f,0x40,0x0d,0xe5,0x73,0xb4,0x01,0x0a,0xa3,
54795 -0xe0,0x70,0x06,0xe0,0x04,0xf0,0x22,0x91,0xd3,0x22,0xe0,0xff,0x7d,0x01,0x90,0x9e,
54796 -0x9c,0xef,0xf0,0xa3,0xed,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xe5,0x74,0x60,0x04,0xe4,
54797 -0xff,0x11,0x8f,0x90,0x9e,0x9c,0xe0,0x30,0xe0,0x09,0x90,0x9e,0x9e,0xe4,0xf0,0xa3,
54798 -0x74,0x80,0xf0,0x90,0x9e,0x9c,0xe0,0xff,0xc3,0x13,0x90,0xfd,0x10,0xf0,0x90,0x04,
54799 -0x25,0xef,0xf0,0x90,0x9e,0x9d,0xe0,0x60,0x1f,0xa3,0xa3,0xe0,0xff,0x24,0x0f,0xf5,
54800 -0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x80,0xf0,0x74,0x10,0x2f,0xf5,0x82,0xe4,
54801 -0x34,0xfc,0xf5,0x83,0xe0,0x44,0x80,0xf0,0x90,0x9e,0x9e,0xa3,0xe0,0xff,0xfd,0x24,
54802 -0x08,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe4,0xf0,0x74,0x09,0x2d,0xf5,0x82,0xe4,
54803 -0x34,0xfc,0xf5,0x83,0xe0,0x54,0xf0,0xf0,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,
54804 -0xf5,0x83,0xe0,0x54,0xf7,0xf0,0x90,0x9e,0x9e,0xe0,0xfe,0xa3,0xe0,0xff,0x22,0xef,
54805 -0x60,0x0b,0x90,0x9e,0x77,0xe0,0xb4,0x01,0x10,0xe4,0xff,0x80,0x09,0x90,0x9e,0x77,
54806 -0xe0,0xb4,0x01,0x05,0x7f,0x01,0x12,0x77,0x2e,0x22,0x90,0x01,0x37,0x74,0x02,0xf0,
54807 -0x90,0x05,0x22,0x74,0xff,0xf0,0x12,0x76,0x1a,0xef,0x70,0x06,0x90,0x01,0xc8,0x74,
54808 -0xfd,0xf0,0x7d,0x02,0x7f,0x03,0x12,0x36,0xe6,0xe5,0x74,0x60,0x04,0x7f,0x01,0x11,
54809 -0x8f,0x12,0x76,0x5b,0x90,0x9e,0x5e,0xe0,0x54,0xf0,0xf0,0xe0,0x44,0x02,0xf0,0x22,
54810 -0x7d,0x02,0x7f,0x03,0x12,0x36,0x75,0xe5,0x74,0x14,0x24,0xfd,0x50,0x02,0x80,0x22,
54811 -0x90,0x9e,0x61,0xe0,0x60,0x06,0x7d,0x01,0x7f,0x0c,0x80,0x0f,0x90,0x9e,0x5e,0xe0,
54812 -0x54,0x0f,0xc3,0x94,0x04,0x50,0x07,0x7d,0x01,0x7f,0x04,0x12,0x47,0x1a,0xe4,0xff,
54813 -0x11,0x8f,0x22,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,
54814 -0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,
54815 -0x90,0x01,0xc4,0x74,0x13,0xf0,0x74,0x49,0xa3,0xf0,0x90,0x01,0x34,0xe0,0x55,0x28,
54816 -0xf5,0x2c,0x90,0x01,0x36,0xe0,0x55,0x2a,0xf5,0x2e,0xa3,0xe0,0x55,0x2b,0xf5,0x2f,
54817 -0xe5,0x2c,0x20,0xe0,0x02,0x41,0xb3,0x90,0x01,0x34,0x74,0x01,0xf0,0x85,0xd1,0x08,
54818 -0x85,0xd2,0x09,0x85,0xd3,0x0a,0x85,0xd4,0x0b,0x85,0xd5,0x0c,0x85,0xd6,0x0d,0x85,
54819 -0xd7,0x0e,0x85,0xd9,0x0f,0xe5,0x0f,0x54,0x40,0xc3,0x13,0xff,0xe5,0x0e,0x54,0x20,
54820 -0x6f,0x70,0x02,0x41,0x63,0xe5,0x0f,0x30,0xe5,0x02,0x41,0x63,0xe5,0x0d,0x54,0x3f,
54821 -0xf5,0x4d,0xe5,0x08,0x54,0x3f,0xf5,0x4e,0xe5,0x0c,0x54,0x1f,0xff,0xe5,0x4d,0x25,
54822 -0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,
54823 -0xe5,0x0e,0x54,0x1f,0xff,0xe5,0x4d,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,
54824 -0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x4e,0xd3,0x94,0x04,0x40,0x03,0x75,
54825 -0x4e,0x04,0x75,0xf0,0x0a,0xe5,0x4d,0x90,0x90,0x00,0x12,0x43,0x5f,0x75,0xf0,0x02,
54826 -0xe5,0x4e,0x12,0x43,0x5f,0xe0,0xfe,0xa3,0xe0,0xff,0xe5,0x0e,0x54,0x1f,0x2f,0xff,
54827 -0xe4,0x3e,0xfe,0x75,0xf0,0x0a,0xe5,0x4d,0x90,0x90,0x00,0x12,0x43,0x5f,0x75,0xf0,
54828 -0x02,0xe5,0x4e,0x12,0x43,0x5f,0xee,0xf0,0xa3,0xef,0xf0,0xe5,0x0f,0x20,0xe6,0x24,
54829 -0xe5,0x0e,0x54,0x1f,0xff,0xe5,0x4d,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,
54830 -0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x0a,0x30,0xe7,0x36,0xaf,0x4d,0x12,
54831 -0x5b,0x6d,0x80,0x2f,0xe5,0x0e,0x54,0x1f,0xff,0xe5,0x4d,0x25,0xe0,0x24,0x44,0xf5,
54832 -0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x0a,0x30,0xe7,
54833 -0x12,0xe5,0x0a,0x54,0x7f,0xfd,0xe5,0x0e,0x54,0x1f,0xf5,0x53,0xab,0x4e,0xaf,0x4d,
54834 -0x12,0x5b,0x0a,0xe5,0x74,0x14,0x24,0xfd,0x50,0x02,0x80,0x47,0x90,0x9e,0x61,0xe0,
54835 -0x60,0x38,0x90,0x01,0x5b,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x04,0xf0,0x12,0x44,0xf1,
54836 -0xef,0x64,0x01,0x70,0x2e,0x90,0x9e,0x55,0xe0,0xf5,0x44,0x75,0x45,0x00,0xe4,0xfb,
54837 -0xfd,0x7f,0x58,0x7e,0x01,0x12,0x35,0xab,0x90,0x01,0x5b,0x74,0x05,0xf0,0x90,0x06,
54838 -0x92,0x74,0x01,0xf0,0x90,0x9e,0x5d,0xf0,0x80,0x09,0x12,0x44,0xf1,0xbf,0x01,0x03,
54839 -0x12,0x44,0xd3,0xe5,0x2c,0x30,0xe1,0x21,0x90,0x01,0x34,0x74,0x02,0xf0,0x85,0xd1,
54840 -0x13,0x85,0xd2,0x14,0x85,0xd3,0x15,0x85,0xd4,0x16,0x85,0xd5,0x17,0x85,0xd6,0x18,
54841 -0x85,0xd7,0x19,0x85,0xd9,0x1a,0x12,0x5c,0x61,0xe5,0x2c,0x30,0xe3,0x06,0x90,0x01,
54842 -0x34,0x74,0x08,0xf0,0xe5,0x2c,0x30,0xe4,0x09,0x90,0x01,0x34,0x74,0x10,0xf0,0x43,
54843 -0x12,0x10,0xe5,0x2c,0x30,0xe5,0x24,0x90,0x01,0xcf,0xe0,0x30,0xe5,0x1d,0xe0,0x54,
54844 -0xdf,0xf0,0x90,0x01,0x34,0x74,0x20,0xf0,0x75,0xa8,0x00,0x75,0xe8,0x00,0xd1,0xed,
54845 -0x90,0x00,0x03,0xe0,0x54,0xfb,0xf0,0xb1,0x28,0x80,0xfe,0xe5,0x2c,0x30,0xe6,0x06,
54846 -0x90,0x01,0x34,0x74,0x40,0xf0,0xe5,0x2e,0x30,0xe1,0x3b,0x90,0x01,0x36,0x74,0x02,
54847 -0xf0,0x43,0x12,0x40,0x90,0x01,0x02,0xe0,0x54,0x03,0x64,0x01,0x70,0x28,0x90,0x01,
54848 -0x37,0xe0,0x30,0xe0,0x0a,0x74,0x01,0xf0,0x90,0x9e,0x66,0xe4,0xf0,0x80,0x17,0x90,
54849 -0x9e,0x66,0xe0,0x04,0xf0,0xe0,0xc3,0x94,0x0a,0x40,0x0b,0xe4,0xf0,0x90,0x04,0x19,
54850 -0xe0,0x30,0xe0,0x02,0xf1,0xfc,0xe5,0x2e,0x30,0xe0,0x12,0x90,0x9e,0x76,0x74,0x01,
54851 -0xf0,0x90,0x01,0x36,0xf0,0x12,0x64,0x09,0x90,0x9e,0x76,0xe4,0xf0,0xe5,0x2e,0x30,
54852 -0xe2,0x78,0x90,0x01,0x36,0x74,0x04,0xf0,0x90,0x01,0xbd,0xe0,0x04,0xf0,0xe5,0x73,
54853 -0x64,0x01,0x70,0x66,0xe5,0x74,0x60,0x62,0xe5,0x74,0x64,0x02,0x60,0x06,0xe5,0x74,
54854 -0x64,0x05,0x70,0x27,0x90,0x06,0xab,0xe0,0x90,0x9e,0x50,0xf0,0x90,0x06,0xaa,0xe0,
54855 -0x90,0x9e,0x5f,0xf0,0x90,0x9e,0x50,0xe0,0x70,0x07,0x90,0x9e,0x5f,0xe0,0xff,0x80,
54856 -0x05,0x90,0x9e,0x50,0xe0,0xff,0x90,0x9e,0x50,0xef,0xf0,0x90,0x9e,0x52,0xe0,0x60,
54857 -0x03,0xe0,0x14,0xf0,0x90,0x9e,0x51,0xe4,0xf0,0x90,0x01,0x57,0xf0,0x90,0x01,0x3c,
54858 -0x74,0x02,0xf0,0x90,0x9e,0x63,0xe0,0x54,0xfd,0xf0,0xe0,0x54,0xef,0xf0,0xe5,0x74,
54859 -0x14,0x24,0xfd,0x50,0x02,0x80,0x03,0x12,0x45,0x53,0xe5,0x2e,0x30,0xe3,0x28,0x90,
54860 -0x01,0x36,0x74,0x08,0xf0,0xe5,0x73,0x64,0x01,0x70,0x1c,0xe5,0x74,0x60,0x18,0x90,
54861 -0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,0x9e,0x89,0xe4,0x12,0x44,
54862 -0x52,0x90,0x01,0x57,0x74,0x05,0xf0,0xe5,0x2e,0x30,0xe4,0x2f,0x90,0x01,0x36,0x74,
54863 -0x10,0xf0,0xe5,0x73,0x64,0x01,0x70,0x23,0xe5,0x74,0x60,0x1f,0x90,0x01,0x57,0xe4,
54864 -0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,0x9e,0x62,0xe4,0xf0,0x90,0x9e,0x63,0xe0,
54865 -0x54,0xfd,0xf0,0xe0,0x54,0x07,0x70,0x03,0x12,0x44,0xd3,0xe5,0x2e,0x30,0xe5,0x1f,
54866 -0x90,0x01,0x36,0x74,0x20,0xf0,0xe5,0x73,0xb4,0x01,0x14,0xe5,0x74,0x60,0x10,0x90,
54867 -0x9e,0x61,0xe0,0x64,0x02,0x60,0x05,0x12,0x44,0xdc,0x80,0x03,0x12,0x44,0x80,0xe5,
54868 -0x2e,0x30,0xe6,0x1e,0x90,0x01,0x36,0x74,0x40,0xf0,0xe5,0x73,0xb4,0x01,0x13,0xe5,
54869 -0x74,0x60,0x0f,0x90,0x9e,0x63,0xe0,0x54,0xfe,0xf0,0xe0,0x54,0x07,0x70,0x03,0x12,
54870 -0x44,0xd3,0xe5,0x2f,0x30,0xe1,0x08,0x90,0x01,0x37,0x74,0x02,0xf0,0x11,0xe0,0x74,
54871 -0x13,0x04,0x90,0x01,0xc4,0xf0,0x74,0x49,0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,
54872 -0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,
54873 -0xd0,0xf0,0xd0,0xe0,0x32,0x12,0x44,0xf1,0xef,0x64,0x01,0x60,0x08,0x90,0x01,0xb9,
54874 -0x74,0x01,0xf0,0x80,0x32,0x90,0x9e,0x5d,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x02,
54875 -0xf0,0x80,0x24,0x90,0x9e,0x5c,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x04,0xf0,0x80,
54876 -0x16,0x90,0x9e,0x60,0xe0,0x54,0x0f,0xd3,0x94,0x04,0x40,0x08,0x90,0x01,0xb9,0x74,
54877 -0x08,0xf0,0x80,0x03,0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,0x08,0xf0,0x7f,0x00,0x22,
54878 -0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x7f,
54879 -0x10,0xdf,0xfe,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,
54880 -0x9e,0xad,0xed,0xf0,0x90,0x9e,0xac,0xef,0xf0,0xd3,0x94,0x07,0x50,0x63,0xe0,0xff,
54881 -0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x47,
54882 -0xe0,0x5f,0xf0,0xb1,0x28,0x90,0x9e,0xac,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,
54883 -0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x46,0xe0,0x4f,0xf0,0xb1,0x28,0x90,0x9e,
54884 -0xad,0xe0,0x60,0x16,0x90,0x9e,0xac,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,
54885 -0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x45,0x80,0x66,0x90,0x9e,0xac,0xe0,0xff,0x74,
54886 -0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x45,0x80,
54887 -0x6b,0x90,0x9e,0xac,0xe0,0x24,0xf8,0xf0,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,
54888 -0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0xb1,0x20,0x90,0x9e,0xac,0xe0,0xff,0x74,
54889 -0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x43,0xe0,0x4f,
54890 -0xf0,0xb1,0x28,0x90,0x9e,0xad,0xe0,0x60,0x1b,0x90,0x9e,0xac,0xe0,0xff,0x74,0x01,
54891 -0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0xff,0x90,0x00,0x42,
54892 -0xe0,0x4f,0x80,0x1a,0x90,0x9e,0xac,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,
54893 -0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0xf4,0xff,0x90,0x00,0x42,0xe0,0x5f,0xf0,0xb1,
54894 -0x28,0xd0,0xd0,0x92,0xaf,0x22,0xf0,0x90,0x00,0x45,0xe0,0x54,0xfe,0xfd,0x7f,0x45,
54895 -0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x8f,0x82,0x75,0x83,0x00,0xed,0xf0,0xb1,0x28,
54896 -0xd0,0xd0,0x92,0xaf,0x22,0xef,0x14,0x60,0x30,0x14,0x60,0x66,0x24,0x02,0x60,0x02,
54897 -0xc1,0xec,0x90,0x9e,0x1a,0x74,0x02,0xf0,0x90,0x00,0x48,0xe0,0x44,0x0c,0xfd,0x7f,
54898 -0x48,0xd1,0x30,0x90,0x00,0x47,0xe0,0x44,0x08,0xfd,0x7f,0x47,0xd1,0x30,0x90,0x00,
54899 -0x45,0xe0,0x44,0x10,0xfd,0x7f,0x45,0x80,0x71,0xe4,0x90,0x9e,0x1a,0xf0,0x90,0x9e,
54900 -0x16,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,
54901 -0xd9,0x90,0x00,0x45,0xe0,0x44,0xef,0xfd,0x7f,0x45,0xd1,0x30,0x90,0x00,0x45,0xe0,
54902 -0x54,0xef,0xfd,0x7f,0x45,0xd1,0x30,0x90,0x00,0x46,0xe0,0x44,0x10,0xfd,0x7f,0x46,
54903 -0x80,0x38,0x90,0x9e,0x1a,0x74,0x01,0xf0,0x90,0x9e,0x20,0x12,0x43,0x53,0x90,0x80,
54904 -0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x00,0x45,0xe0,0x44,
54905 -0x20,0xfd,0x7f,0x45,0xd1,0x30,0x90,0x00,0x45,0xe0,0x44,0x10,0xfd,0x7f,0x45,0xd1,
54906 -0x30,0x90,0x00,0x46,0xe0,0x44,0x10,0xfd,0x7f,0x46,0xd1,0x30,0x22,0x90,0x01,0x30,
54907 -0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x01,0x38,0xf0,0xa3,0xf0,0xa3,0xf0,
54908 -0xa3,0xf0,0xfd,0x7f,0x50,0xd1,0x30,0xe4,0xfd,0x7f,0x51,0xd1,0x30,0xe4,0xfd,0x7f,
54909 -0x52,0xd1,0x30,0xe4,0xfd,0x7f,0x53,0xc1,0x30,0x8b,0x59,0x8a,0x5a,0x89,0x5b,0x90,
54910 -0x00,0x02,0x12,0x42,0x20,0x90,0x9e,0x1d,0xf0,0xe0,0x30,0xe0,0x4b,0x90,0x9e,0x14,
54911 -0x74,0x01,0xf0,0x7f,0x80,0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0x16,0x12,0x2a,0x7f,
54912 -0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0xe4,0xfc,0xfd,
54913 -0xfe,0x78,0x1a,0x12,0x2a,0x6c,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,0x07,0x90,0x9e,
54914 -0x16,0x12,0x43,0x53,0xec,0x54,0x03,0xfc,0x12,0x43,0x46,0x90,0x9e,0x20,0x12,0x2a,
54915 -0x7f,0x90,0x05,0x22,0xe4,0xf0,0x80,0x2d,0xe4,0x90,0x9e,0x14,0xf0,0x7f,0x80,0x7e,
54916 -0x08,0x12,0x27,0xde,0xec,0x54,0x03,0xfc,0xec,0x44,0xc0,0xfc,0x90,0x9e,0x16,0x12,
54917 -0x2a,0x7f,0x90,0x9e,0x16,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,
54918 -0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,0x1d,0xe0,0x30,0xe1,0x19,0x7d,0x0c,0x7f,0x47,
54919 -0xd1,0x30,0x90,0x00,0x48,0xe0,0x44,0x0c,0xfd,0x7f,0x48,0xd1,0x30,0x90,0x00,0x46,
54920 -0xe0,0x44,0x10,0x80,0x1c,0x90,0x00,0x47,0xe0,0x54,0xf3,0xfd,0x7f,0x47,0xd1,0x30,
54921 -0x90,0x00,0x48,0xe0,0x54,0xf3,0xfd,0x7f,0x48,0xd1,0x30,0x90,0x00,0x46,0xe0,0x54,
54922 -0xef,0xfd,0x7f,0x46,0xd1,0x30,0xe4,0x90,0x9e,0x1a,0xf0,0x22,0xe4,0x90,0x9e,0x74,
54923 -0xf0,0x90,0x00,0x80,0xe0,0x44,0x80,0xfd,0x7f,0x80,0xc1,0x30,0x12,0x45,0xb1,0xbf,
54924 -0x01,0x10,0x90,0x02,0x09,0xe0,0xff,0x7d,0x01,0x12,0x47,0xfe,0x90,0x04,0x1f,0x74,
54925 -0x20,0xf0,0x22,0x75,0x28,0x33,0xe4,0xf5,0x29,0x75,0x2a,0x03,0xf5,0x2b,0x90,0x01,
54926 -0x30,0xe5,0x28,0xf0,0xa3,0xe5,0x29,0xf0,0xa3,0xe5,0x2a,0xf0,0xa3,0xe5,0x2b,0xf0,
54927 -0x22,0xe4,0x90,0x9e,0x31,0xf0,0xa3,0xf0,0x75,0x8e,0x02,0x12,0x4f,0xec,0x12,0x5f,
54928 -0x29,0x12,0x5f,0x3c,0xe4,0xf5,0x12,0x12,0x6d,0x11,0x12,0x77,0x25,0x12,0x60,0x1b,
54929 -0x12,0x32,0x3d,0x12,0x76,0x16,0x11,0x13,0x90,0x00,0xf3,0xe0,0x30,0xe2,0x0d,0x90,
54930 -0x05,0x41,0x74,0x10,0xf0,0x90,0x05,0x5a,0xf0,0xa3,0xe4,0xf0,0x12,0x5f,0x74,0x12,
54931 -0x5e,0x77,0x12,0x45,0x00,0x12,0x7c,0xe5,0x90,0x9e,0x33,0xe5,0xd9,0xf0,0x12,0x5e,
54932 -0xfa,0xc2,0xaf,0x90,0x00,0x80,0xe0,0x44,0x40,0xf0,0x12,0x4d,0x28,0x75,0xe8,0x03,
54933 -0x43,0xa8,0x85,0xd2,0xaf,0x90,0x01,0xbe,0xe0,0x04,0xf0,0x90,0x01,0xc0,0xe0,0x04,
54934 -0xf0,0x90,0x9e,0x31,0xe0,0x64,0x01,0xf0,0x24,0x31,0x90,0x01,0xc4,0xf0,0x74,0x50,
54935 -0xa3,0xf0,0xe5,0x12,0x30,0xe4,0x09,0xc2,0xaf,0x53,0x12,0xef,0xd2,0xaf,0x71,0x1f,
54936 -0xe5,0x12,0x30,0xe6,0x16,0xc2,0xaf,0x53,0x12,0xbf,0xd2,0xaf,0x12,0x66,0xbc,0x90,
54937 -0x9e,0x1e,0xe0,0xff,0x60,0x03,0xb4,0x01,0x02,0x31,0x15,0x90,0x9e,0x1e,0xe0,0x70,
54938 -0x03,0x12,0x7d,0x43,0x11,0xe8,0x80,0xb9,0x90,0x06,0x34,0xe0,0x60,0x26,0x14,0x70,
54939 -0x1b,0x7b,0x01,0x7a,0x06,0x79,0x35,0x7f,0xf9,0x7e,0x01,0x12,0x75,0xb4,0xbf,0x01,
54940 -0x09,0x90,0x06,0x35,0xe0,0x54,0x0f,0xf0,0x80,0x05,0x80,0x00,0x02,0x75,0xa5,0xe4,
54941 -0x90,0x06,0x34,0xf0,0x22,0x90,0x9e,0x15,0xe0,0xc3,0x94,0x14,0x50,0x05,0xe0,0x04,
54942 -0xf0,0x21,0xcd,0x90,0x9e,0x15,0xe0,0x64,0x14,0x60,0x02,0x21,0xcd,0x90,0x9e,0x24,
54943 -0xe0,0x70,0x25,0x90,0x9e,0x27,0xe0,0x70,0x1f,0x90,0x9e,0x25,0xe0,0x70,0x19,0x90,
54944 -0x9e,0x28,0xe0,0x70,0x13,0x90,0x9e,0x26,0xe0,0x70,0x0d,0x90,0x9e,0x29,0xe0,0x70,
54945 -0x07,0x90,0x04,0xfd,0xe0,0x54,0xfe,0xf0,0x90,0x9e,0x24,0xe0,0x90,0x04,0x44,0xf0,
54946 -0x90,0x9e,0x25,0xe0,0x90,0x04,0x45,0xf0,0x90,0x9e,0x26,0xe0,0x90,0x04,0x46,0xf0,
54947 -0xa3,0xe4,0xf0,0x90,0x9e,0x27,0xe0,0x90,0x04,0x48,0xf0,0x90,0x9e,0x28,0xe0,0x90,
54948 -0x04,0x49,0xf0,0x90,0x9e,0x29,0xe0,0x90,0x04,0x4a,0xf0,0xa3,0xe4,0xf0,0x90,0x9e,
54949 -0x10,0xe0,0x90,0x04,0x4c,0xf0,0x90,0x9e,0x11,0xe0,0x90,0x04,0x4d,0xf0,0x90,0x9e,
54950 -0x12,0xe0,0x90,0x04,0x4e,0xf0,0x90,0x9e,0x13,0xe0,0x90,0x04,0x4f,0xf0,0xe4,0x90,
54951 -0x9e,0x15,0xf0,0x90,0x9e,0x10,0x04,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,
54952 -0x9e,0x24,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x05,0x60,
54953 -0xe0,0x90,0x9e,0x34,0xf0,0x90,0x05,0x61,0xe0,0x90,0x9e,0x35,0xf0,0x90,0x05,0x62,
54954 -0xe0,0x90,0x9e,0x36,0xf0,0x90,0x05,0x63,0xe0,0x90,0x9e,0x37,0xf0,0x90,0x9e,0x2d,
54955 -0xe0,0xff,0x90,0x9e,0x37,0xe0,0xfe,0xd3,0x9f,0x50,0x0b,0x90,0x9e,0x2d,0xe0,0xc3,
54956 -0x9e,0xd3,0x94,0x01,0x40,0x10,0x90,0x9e,0x1b,0xe0,0xb4,0x01,0x02,0x80,0x03,0x90,
54957 -0x9e,0x1f,0xe0,0xff,0x51,0x17,0x22,0x90,0x05,0x60,0xe0,0x90,0x9e,0x2a,0xf0,0x90,
54958 -0x05,0x61,0xe0,0x90,0x9e,0x2b,0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x2c,0xf0,0x90,
54959 -0x05,0x63,0xe0,0x90,0x9e,0x2d,0xf0,0xc3,0x74,0xff,0x9f,0xfe,0x90,0x9e,0x2b,0xe0,
54960 -0xd3,0x9e,0x40,0x1e,0xe0,0x2f,0xf0,0xa3,0xe0,0xb4,0xff,0x0f,0xe4,0xf0,0xa3,0xe0,
54961 -0xb4,0xff,0x03,0xe4,0xf0,0x22,0x90,0x9e,0x2d,0x80,0x03,0x90,0x9e,0x2c,0xe0,0x04,
54962 -0xf0,0x22,0x90,0x9e,0x2b,0xe0,0x2f,0xf0,0x22,0x90,0x9e,0x1c,0xe0,0x64,0x01,0x60,
54963 -0x02,0x61,0x1e,0x90,0x00,0x46,0xe0,0x44,0x01,0xfd,0x7f,0x46,0x12,0x4e,0x30,0x90,
54964 -0x9e,0x2e,0xe0,0x70,0x32,0x90,0x9e,0x14,0xe0,0x60,0x15,0x90,0x9e,0x20,0x12,0x43,
54965 -0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,0x80,0x06,
54966 -0x90,0x05,0x22,0x74,0x7f,0xf0,0x90,0x9e,0x1b,0xe0,0xff,0x51,0x17,0x90,0x9e,0x2e,
54967 -0x74,0x01,0x12,0x4e,0x26,0x80,0x40,0x90,0x9e,0x2e,0xe0,0x64,0x01,0x70,0x38,0x90,
54968 -0x9e,0x1f,0xe0,0xff,0x51,0x17,0xe4,0x90,0x9e,0x2e,0xf0,0x90,0x00,0x45,0xe0,0x44,
54969 -0x01,0xfd,0x7f,0x45,0x12,0x4e,0x30,0x90,0x9e,0x14,0xe0,0x60,0x15,0x90,0x9e,0x16,
54970 -0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,
54971 -0x80,0x05,0x90,0x05,0x22,0xe4,0xf0,0x90,0x05,0x87,0xe0,0x64,0x80,0xf0,0x90,0x9e,
54972 -0x2a,0xe0,0x90,0x05,0x84,0xf0,0x90,0x9e,0x2b,0xe0,0x90,0x05,0x85,0xf0,0x90,0x9e,
54973 -0x2c,0xe0,0x90,0x05,0x86,0xf0,0x90,0x9e,0x2d,0xe0,0x90,0x05,0x87,0xf0,0x22,0x90,
54974 -0x01,0xcc,0xe0,0x54,0x0f,0x90,0x9e,0x34,0xf0,0x90,0x9e,0x34,0xe0,0xfd,0x70,0x02,
54975 -0x81,0x60,0x90,0x9e,0xae,0xe0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,
54976 -0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xef,0x5d,0x70,0x02,0x81,0x59,0x90,0x9e,
54977 -0xae,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd0,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x35,0xf0,
54978 -0x75,0x1e,0x01,0x75,0x1f,0x9e,0x75,0x20,0x35,0x75,0x21,0x01,0x7b,0x01,0x7a,0x9e,
54979 -0x79,0x36,0x12,0x45,0x09,0x90,0x9e,0x36,0xe0,0xff,0xc4,0x13,0x13,0x13,0x54,0x01,
54980 -0x90,0x9e,0xae,0x30,0xe0,0x59,0xe0,0x75,0xf0,0x02,0x90,0x00,0x88,0x12,0x43,0x5f,
54981 -0xe0,0x90,0x9e,0x37,0xf0,0x90,0x9e,0xae,0xe0,0x75,0xf0,0x02,0x90,0x00,0x89,0x12,
54982 -0x43,0x5f,0xe0,0x90,0x9e,0x38,0xf0,0x90,0x9e,0xae,0xe0,0x75,0xf0,0x04,0x90,0x01,
54983 -0xd1,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x39,0xf0,0x90,0x9e,0xae,0xe0,0x75,0xf0,0x04,
54984 -0x90,0x01,0xd2,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x3a,0xf0,0x90,0x9e,0xae,0xe0,0x75,
54985 -0xf0,0x04,0x90,0x01,0xd3,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x3b,0xf0,0x80,0x33,0xe0,
54986 -0x75,0xf0,0x04,0x90,0x01,0xd1,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x37,0xf0,0x90,0x9e,
54987 -0xae,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd2,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x38,0xf0,
54988 -0x90,0x9e,0xae,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd3,0x12,0x43,0x5f,0xe0,0x90,0x9e,
54989 -0x39,0xf0,0xef,0x54,0x7f,0xff,0x7b,0x01,0x7a,0x9e,0x79,0x37,0x91,0x61,0x90,0x9e,
54990 -0x34,0xe0,0xff,0x90,0x9e,0xae,0xe0,0xfe,0x74,0x01,0xa8,0x06,0x08,0x80,0x02,0xc3,
54991 -0x33,0xd8,0xfc,0xf4,0x5f,0x90,0x9e,0x34,0xf0,0x90,0x9e,0xae,0xe0,0xff,0x74,0x01,
54992 -0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0x90,0x01,0xcc,0xf0,0x90,0x9e,0xae,
54993 -0xe0,0x04,0xf0,0xe0,0x54,0x03,0xf0,0x61,0x29,0x90,0x01,0xc6,0xe0,0x44,0x02,0xf0,
54994 -0x22,0x90,0x9e,0x3c,0x12,0x43,0x8b,0xef,0x12,0x43,0x94,0x54,0x9c,0x01,0x54,0xa5,
54995 -0x02,0x54,0xc0,0x03,0x54,0xc9,0x05,0x54,0xd2,0x06,0x55,0x20,0x07,0x54,0xda,0x09,
54996 -0x54,0xe3,0x0c,0x54,0xec,0x0d,0x54,0xf5,0x0e,0x54,0xfe,0x1b,0x55,0x07,0x1c,0x55,
54997 -0x10,0x2c,0x54,0xae,0x2d,0x54,0xb7,0x2e,0x00,0x00,0x55,0x19,0x90,0x9e,0x3c,0x12,
54998 -0x43,0x6b,0x02,0x61,0x1d,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x6f,0x33,0x90,0x9e,
54999 -0x3c,0x12,0x43,0x6b,0x02,0x6f,0x39,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x6f,0x81,
55000 -0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x6f,0xaf,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,
55001 -0x6e,0xe3,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x80,0x47,0x90,0x9e,0x3c,0x12,0x43,0x6b,
55002 -0x02,0x6f,0xf7,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x7e,0x1b,0x90,0x9e,0x3c,0x12,
55003 -0x43,0x6b,0x02,0x7c,0xb2,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x4f,0x19,0x90,0x9e,
55004 -0x3c,0x12,0x43,0x6b,0x02,0x6f,0x2b,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x6f,0x12,
55005 -0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x74,0x85,0x90,0x01,0xc6,0xe0,0x44,0x01,0xf0,
55006 -0x22,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0x54,0x1f,0xfe,0xef,0x54,0x20,0xc4,0x13,
55007 -0x54,0x07,0xfd,0xaf,0x06,0x90,0x9e,0x3f,0xef,0xf0,0xa3,0xed,0xf0,0xa3,0x12,0x43,
55008 -0x8b,0x90,0x9e,0x41,0x12,0x43,0x6b,0x90,0x00,0x03,0x12,0x42,0x20,0x54,0xf0,0xc4,
55009 -0x54,0x0f,0x90,0x9e,0x44,0xf0,0x90,0x00,0x04,0x12,0x42,0x20,0x54,0x40,0xc4,0x13,
55010 -0x13,0x54,0x03,0x90,0x9e,0x45,0xf0,0x90,0x9e,0x3f,0xe0,0xff,0x75,0xf0,0x09,0x90,
55011 -0x96,0x46,0x12,0x43,0x5f,0xad,0x82,0xac,0x83,0x90,0x9e,0x46,0xec,0xf0,0xa3,0xed,
55012 -0xf0,0xef,0x75,0xf0,0x09,0xa4,0x24,0x44,0xf9,0x74,0x96,0x35,0xf0,0xfa,0x7b,0x01,
55013 -0xa3,0x12,0x43,0x8b,0x90,0x9e,0x41,0x12,0x43,0x6b,0x90,0x00,0x03,0x12,0x42,0x20,
55014 -0x54,0x0f,0xff,0x90,0x9e,0x48,0x12,0x43,0x6b,0xef,0x12,0x42,0x4d,0x90,0x9e,0x41,
55015 -0x12,0x43,0x6b,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0x90,0x9e,0x48,0x12,0x43,0x6b,
55016 -0x90,0x00,0x01,0xef,0x12,0x42,0x5f,0x90,0x9e,0x41,0x12,0x43,0x6b,0x90,0x00,0x01,
55017 -0x12,0x42,0x20,0xff,0x90,0x9e,0x46,0xe0,0xfc,0xa3,0xe0,0xfd,0xf5,0x82,0x8c,0x83,
55018 -0xef,0xf0,0x12,0x29,0xd9,0x8d,0x82,0x8c,0x83,0xa3,0xf0,0x90,0x9e,0x44,0xe0,0xfe,
55019 -0x90,0x9e,0x3f,0xe0,0xff,0x24,0x82,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,
55020 -0x90,0x9e,0x40,0xe0,0xfe,0x75,0xf0,0x09,0xef,0x90,0x96,0x4a,0x12,0x43,0x5f,0xee,
55021 -0xf0,0x75,0xf0,0x09,0xef,0x90,0x96,0x4b,0x12,0x43,0x5f,0x74,0x01,0xf0,0x90,0x9e,
55022 -0x45,0xe0,0xfe,0x75,0xf0,0x09,0xef,0x90,0x96,0x4c,0x12,0x43,0x5f,0xee,0xf0,0x8f,
55023 -0x59,0xef,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xaf,0x82,0xf5,0x5b,0x8f,
55024 -0x5c,0xe5,0x59,0x75,0xf0,0x02,0xa4,0x24,0x02,0xf9,0x74,0x95,0x35,0xf0,0x75,0x5d,
55025 -0x01,0xf5,0x5e,0x89,0x5f,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x46,0x12,0x43,0x5f,
55026 -0xaf,0x82,0x85,0x83,0x60,0x8f,0x61,0xe5,0x59,0x75,0xf0,0x09,0xa4,0x24,0x44,0xf9,
55027 -0x74,0x96,0x35,0xf0,0x75,0x62,0x01,0xf5,0x63,0x89,0x64,0x74,0x82,0x25,0x59,0xf5,
55028 -0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0x12,0x43,0x94,0x56,0xaf,0x00,0x56,0xc4,0x01,
55029 -0x56,0xd9,0x02,0x56,0xee,0x03,0x57,0x18,0x04,0x57,0x2d,0x05,0x57,0x42,0x06,0x57,
55030 -0x69,0x0c,0x57,0x97,0x0d,0x57,0xc4,0x0e,0x57,0xf1,0x0f,0x00,0x00,0x58,0x25,0xe5,
55031 -0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,
55032 -0x74,0x15,0x80,0x3c,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,
55033 -0x83,0x74,0xf0,0xf0,0xa3,0x74,0x10,0x80,0x27,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,
55034 -0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0x74,0x05,0x80,0x12,0xe5,0x59,
55035 -0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0xe4,
55036 -0xf0,0xe5,0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0x74,0x0f,
55037 -0xf0,0xa3,0x74,0x8f,0xf0,0x02,0x58,0x25,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,
55038 -0xe4,0x34,0x9b,0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0xf5,0x80,0x27,0xe5,0x59,0x25,
55039 -0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0xf0,
55040 -0x80,0x12,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe4,
55041 -0xf0,0xa3,0x74,0x0d,0xf0,0xe5,0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,
55042 -0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0x02,0x58,0x25,0x90,0x04,0x47,0xe0,0xab,0x5d,0xaa,
55043 -0x5e,0xa9,0x5f,0x12,0x42,0x4d,0x90,0x04,0x46,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,
55044 -0x90,0x00,0x01,0x12,0x42,0x5f,0x90,0x04,0x45,0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,
55045 -0xf0,0x90,0x04,0x44,0x02,0x58,0x1c,0x90,0x04,0x4b,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,
55046 -0x5f,0x12,0x42,0x4d,0x90,0x04,0x4a,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x90,0x00,
55047 -0x01,0x12,0x42,0x5f,0x90,0x04,0x49,0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xf0,0x90,
55048 -0x04,0x48,0x80,0x58,0x90,0x04,0x4f,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,
55049 -0x4d,0x90,0x04,0x4e,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,
55050 -0x5f,0x90,0x04,0x4d,0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xf0,0x90,0x04,0x4c,0x80,
55051 -0x2b,0x90,0x04,0x53,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,0x4d,0x90,0x04,
55052 -0x52,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,0x04,
55053 -0x51,0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xf0,0x90,0x04,0x50,0xe0,0x85,0x5c,0x82,
55054 -0x85,0x5b,0x83,0xa3,0xf0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0xc0,0x03,0xc0,0x02,0xc0,
55055 -0x01,0x12,0x29,0xd9,0xff,0xab,0x62,0xaa,0x63,0xa9,0x64,0x12,0x29,0xd9,0x5f,0xd0,
55056 -0x01,0xd0,0x02,0xd0,0x03,0x12,0x42,0x4d,0xab,0x5d,0xe5,0x5f,0x24,0x01,0xf9,0xe4,
55057 -0x35,0x5e,0xfa,0xc0,0x03,0xc0,0x02,0xc0,0x01,0x12,0x29,0xd9,0xff,0xab,0x62,0xaa,
55058 -0x63,0xa9,0x64,0x90,0x00,0x01,0x12,0x42,0x20,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,
55059 -0x12,0x42,0x4d,0x85,0x5c,0x82,0x85,0x5b,0x83,0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,
55060 -0x61,0x82,0x85,0x60,0x83,0xe0,0xfe,0xef,0x5e,0xd0,0x82,0xd0,0x83,0xf0,0x85,0x5c,
55061 -0x82,0x85,0x5b,0x83,0xa3,0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,0x61,0x82,0x85,0x60,
55062 -0x83,0xa3,0xe0,0xfe,0xef,0x5e,0xd0,0x82,0xd0,0x83,0xf0,0xe5,0x59,0x25,0xe0,0x24,
55063 -0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3b,0x75,
55064 -0x5a,0x0b,0x74,0x01,0x7e,0x00,0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,
55065 -0xd8,0xf9,0xff,0xe5,0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,
55066 -0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x06,0xe5,0x5a,0x24,0x10,0x80,0x5d,0x15,
55067 -0x5a,0xe5,0x5a,0xc3,0x94,0x00,0x50,0xca,0x80,0x56,0xe5,0x59,0x25,0xe0,0x24,0xc6,
55068 -0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3d,0x75,0x5a,
55069 -0x0f,0x74,0x01,0x7e,0x00,0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,
55070 -0xf9,0xff,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,
55071 -0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x08,0x90,0x9e,0x4b,0xe5,0x5a,0xf0,0x80,0x10,
55072 -0x15,0x5a,0xe5,0x5a,0xc3,0x94,0x00,0x50,0xc8,0x80,0x05,0xe4,0x90,0x9e,0x4b,0xf0,
55073 -0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfe,0xa3,
55074 -0xe0,0x4e,0x60,0x3b,0xe4,0xf5,0x5a,0x74,0x01,0x7e,0x00,0xa8,0x5a,0x08,0x80,0x05,
55075 -0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,
55076 -0xe4,0x34,0x9b,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x08,0x90,0x9e,
55077 -0x4c,0xe5,0x5a,0xf0,0x80,0x5b,0x05,0x5a,0xe5,0x5a,0xb4,0x10,0xca,0x80,0x52,0xe5,
55078 -0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,
55079 -0x4e,0x60,0x39,0xe4,0xf5,0x5a,0x74,0x01,0x7e,0x00,0xa8,0x5a,0x08,0x80,0x05,0xc3,
55080 -0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,
55081 -0x34,0x95,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x06,0xe5,0x5a,0x24,
55082 -0x10,0x80,0x0a,0x05,0x5a,0xe5,0x5a,0xb4,0x0c,0xcc,0x80,0x05,0xe4,0x90,0x9e,0x4c,
55083 -0xf0,0x90,0x9e,0x4b,0xe0,0xff,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x48,0x12,0x43,
55084 -0x5f,0xef,0xf0,0x90,0x9e,0x4c,0xe0,0xfe,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x49,
55085 -0x12,0x43,0x5f,0xee,0xf0,0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,
55086 -0xe0,0xd3,0x9f,0x40,0x05,0x90,0x9e,0x4b,0x51,0x74,0x74,0x84,0x25,0x59,0xf5,0x82,
55087 -0xe4,0x34,0x04,0xf5,0x83,0xe0,0xff,0x90,0x9e,0x4c,0xe0,0xfe,0xef,0xc3,0x9e,0x50,
55088 -0x02,0x51,0x74,0x90,0x9e,0x4b,0xe0,0xff,0xd3,0x94,0x13,0x40,0x07,0x90,0x96,0x43,
55089 -0x74,0x03,0xf0,0x22,0xef,0xd3,0x94,0x0b,0x40,0x07,0x90,0x96,0x43,0x74,0x02,0xf0,
55090 -0x22,0xef,0xd3,0x94,0x03,0x40,0x07,0x90,0x96,0x43,0x74,0x01,0xf0,0x22,0xe4,0x90,
55091 -0x96,0x43,0xf0,0x22,0xe0,0xfd,0x74,0x26,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9d,0xf5,
55092 -0x83,0xed,0xf0,0xaf,0x59,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xef,0xc3,0x94,0x20,
55093 -0x50,0x0e,0x74,0x84,0x2f,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xed,0xf0,0x80,0x29,
55094 -0x74,0xa6,0x2f,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xed,0xf0,0x90,0x9e,0x78,0xef,
55095 -0xf0,0x24,0xa6,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x90,0x9e,0x79,0xf0,0x7b,
55096 -0x01,0x7a,0x9e,0x79,0x78,0x7d,0x02,0x51,0xce,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,
55097 -0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x97,0x12,0x43,0x8b,0x90,0x9e,0x9a,0xe0,0x54,
55098 -0xf0,0x44,0x06,0xff,0xf0,0xed,0x54,0x0f,0xc4,0x54,0xf0,0xfe,0xef,0x54,0x0f,0x4e,
55099 -0xf0,0x90,0x9e,0x97,0x12,0x43,0x6b,0x90,0x9e,0x94,0x12,0x43,0x8b,0x7b,0x01,0x7a,
55100 -0x9e,0x79,0x9a,0x71,0xd9,0xd0,0xd0,0x92,0xaf,0x22,0x8f,0x50,0x8d,0x51,0xe5,0x51,
55101 -0x54,0x1f,0xf5,0x56,0x74,0x01,0x2f,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe0,0xf5,
55102 -0x54,0x90,0x04,0xfd,0xe0,0xb4,0x01,0x05,0x75,0x57,0x03,0x80,0x03,0x75,0x57,0x01,
55103 -0xeb,0xc3,0x95,0x57,0x40,0x04,0xaf,0x50,0x80,0x33,0xe5,0x54,0x25,0x53,0xf5,0x55,
55104 -0xe5,0x56,0x90,0x41,0xd6,0x93,0xff,0xe5,0x55,0xd3,0x9f,0x74,0x01,0x40,0x11,0x25,
55105 -0x50,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,0xf0,0xad,0x51,0xaf,0x50,0x41,0x85,
55106 -0x25,0x50,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe5,0x55,0xf0,0x22,0xad,0x07,0x75,
55107 -0xf0,0x09,0xed,0x90,0x96,0x48,0x12,0x43,0x5f,0xe0,0xff,0x74,0x67,0x2d,0xf5,0x82,
55108 -0xe4,0x34,0x9d,0xf5,0x83,0xe0,0x54,0x1f,0xf5,0x58,0xd3,0x9f,0x40,0x02,0x8f,0x58,
55109 -0xe5,0x58,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,
55110 -0x74,0x01,0x93,0xff,0xe5,0x58,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,
55111 -0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,
55112 -0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,
55113 -0xaf,0x05,0xad,0x58,0x51,0x85,0xaf,0x58,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
55114 -0x90,0x9e,0x91,0x12,0x43,0x8b,0x90,0x9e,0x75,0xe0,0x64,0x02,0x60,0x6e,0x90,0x9e,
55115 -0x75,0xe0,0x64,0x01,0x70,0x66,0x90,0x9e,0xb0,0xe0,0xff,0x04,0xf0,0x90,0x9e,0x91,
55116 -0x12,0x43,0x6b,0x90,0x00,0x01,0xef,0x12,0x42,0x5f,0x7f,0xaf,0x7e,0x01,0x91,0x82,
55117 -0xef,0x60,0x49,0x90,0x9e,0x91,0x12,0x43,0x6b,0x8b,0x1e,0x8a,0x1f,0x89,0x20,0x75,
55118 -0x21,0x02,0x7b,0x01,0x7a,0x01,0x79,0xa0,0x12,0x45,0x09,0x90,0x9e,0x94,0x12,0x43,
55119 -0x6b,0x8b,0x1e,0x8a,0x1f,0x89,0x20,0x90,0x9e,0x91,0x12,0x43,0x6b,0x12,0x29,0xd9,
55120 -0xff,0xc4,0x54,0x0f,0xf5,0x21,0x7b,0x01,0x7a,0x01,0x79,0xa2,0x12,0x45,0x09,0x90,
55121 -0x01,0xaf,0x74,0xff,0xf0,0x90,0x01,0xcb,0xe0,0x64,0x80,0xf0,0xd0,0xd0,0x92,0xaf,
55122 -0x22,0x90,0x9e,0x2f,0xe0,0x54,0xf0,0x44,0x03,0xf0,0x54,0x0f,0x44,0x80,0xf0,0x7b,
55123 -0x00,0x7a,0x00,0x79,0x13,0x90,0x9e,0x94,0x12,0x43,0x8b,0x0b,0x7a,0x9e,0x79,0x2f,
55124 -0x61,0xd9,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0xa0,0xee,0xf0,0xa3,0xef,
55125 -0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,0xa0,0xe0,0xfe,0xa3,0xe0,0xf5,0x82,0x8e,
55126 -0x83,0xe0,0x60,0x2d,0xc3,0x90,0x9e,0xa3,0xe0,0x94,0xe8,0x90,0x9e,0xa2,0xe0,0x94,
55127 -0x03,0x40,0x0b,0x90,0x01,0xc6,0xe0,0x44,0x10,0xf0,0x7f,0x00,0x80,0x15,0x90,0x9e,
55128 -0xa2,0xe4,0x75,0xf0,0x01,0x12,0x42,0x81,0x7f,0x0a,0x7e,0x00,0x12,0x37,0x54,0x80,
55129 -0xc5,0x7f,0x01,0xd0,0xd0,0x92,0xaf,0x22,0xac,0x07,0xec,0xc3,0x94,0x20,0x50,0x0d,
55130 -0x74,0x84,0x2c,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x80,0x0b,0x74,0xa6,0x2c,
55131 -0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x54,0x7f,0xf5,0x64,0xe5,0x64,0x54,0x1f,
55132 -0xff,0x90,0x9e,0x40,0xf0,0x75,0xf0,0x09,0xec,0x90,0x96,0x49,0x12,0x43,0x5f,0xe0,
55133 -0x90,0x9e,0x42,0xf0,0x75,0xf0,0x09,0xec,0x90,0x96,0x48,0x12,0x43,0x5f,0xe0,0xfe,
55134 -0x90,0x9e,0x43,0xf0,0xec,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,
55135 -0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x44,0xcb,0xf0,0xa3,0xeb,0xf0,0xec,0x25,0xe0,0x24,
55136 -0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x46,0xcb,
55137 -0xf0,0xa3,0xeb,0xf0,0xef,0xd3,0x9e,0x40,0x0a,0x90,0x9e,0x43,0xe0,0x90,0x9e,0x40,
55138 -0xf0,0xf5,0x64,0xed,0x70,0x02,0xc1,0x2e,0x90,0x9e,0x41,0xed,0xf0,0xe5,0x64,0x30,
55139 -0xe6,0x0a,0x90,0x9e,0x40,0xe0,0xf5,0x64,0xa3,0xe0,0x14,0xf0,0x90,0x9e,0x41,0xe0,
55140 -0x70,0x02,0xc1,0x2e,0x90,0x9e,0x40,0xe0,0xff,0xd3,0x94,0x00,0x50,0x02,0xc1,0x2e,
55141 -0xe4,0x90,0x9e,0x3f,0xf0,0xef,0x14,0x90,0x9e,0x3e,0xf0,0x90,0x9e,0x42,0xe0,0xfd,
55142 -0x90,0x9e,0x3e,0xe0,0xff,0xd3,0x9d,0x40,0x6b,0xef,0x94,0x10,0x40,0x21,0xef,0x24,
55143 -0xf0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,
55144 -0xd8,0xf9,0xff,0x90,0x9e,0x46,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x70,0x27,0x90,
55145 -0x9e,0x3e,0xe0,0xff,0xc3,0x94,0x10,0x50,0x33,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,
55146 -0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x44,0xe0,0x5e,0xfe,
55147 -0xa3,0xe0,0x5f,0x4e,0x60,0x16,0x90,0x9e,0x3e,0xe0,0xf5,0x64,0xa3,0xe0,0x04,0xf0,
55148 -0x90,0x9e,0x41,0xe0,0xff,0x90,0x9e,0x3f,0xe0,0x6f,0x60,0x08,0x90,0x9e,0x3e,0xe0,
55149 -0x14,0xf0,0x80,0x87,0x90,0x9e,0x41,0xe0,0xff,0x90,0x9e,0x3f,0xe0,0xc3,0x9f,0x50,
55150 -0x0d,0x90,0x9e,0x3e,0xe0,0xb5,0x05,0x06,0x90,0x9e,0x42,0xe0,0xf5,0x64,0xe5,0x64,
55151 -0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,
55152 -0x93,0xff,0xe5,0x64,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,
55153 -0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xec,0x25,0xe0,
55154 -0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0xaf,0x04,
55155 -0xad,0x64,0x51,0x85,0xaf,0x64,0x22,0x75,0x30,0x1f,0x75,0x31,0x01,0xe4,0xf5,0x32,
55156 -0x90,0x01,0x38,0xe5,0x30,0xf0,0xa3,0xe5,0x31,0xf0,0xa3,0xe5,0x32,0xf0,0x22,0x12,
55157 -0x44,0xf1,0xef,0x64,0x01,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,0xf0,0x80,0x52,0x90,
55158 -0x9e,0x63,0xe0,0x54,0x03,0x60,0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x42,0x90,
55159 -0x9e,0x60,0xe0,0x54,0x0f,0xd3,0x94,0x02,0x40,0x08,0x90,0x01,0xb9,0x74,0x04,0xf0,
55160 -0x80,0x2f,0x90,0x9e,0x63,0xe0,0x30,0xe2,0x08,0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,
55161 -0x20,0x90,0x9e,0x63,0xe0,0x30,0xe4,0x08,0x90,0x01,0xb9,0x74,0x10,0xf0,0x80,0x11,
55162 -0x90,0x9e,0x52,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x20,0xf0,0x80,0x03,0x7f,0x01,
55163 -0x22,0x90,0x01,0xb8,0x74,0x04,0xf0,0x7f,0x00,0x22,0x90,0x01,0x3c,0x74,0xff,0xf0,
55164 -0xa3,0xf0,0xa3,0xf0,0x90,0x01,0x34,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xfd,0x7f,
55165 -0x54,0x12,0x4e,0x30,0x7d,0xff,0x7f,0x55,0x12,0x4e,0x30,0x7d,0xff,0x7f,0x56,0x12,
55166 -0x4e,0x30,0x7d,0xff,0x7f,0x57,0x02,0x4e,0x30,0x90,0x00,0x02,0xe0,0x54,0xe0,0x90,
55167 -0x9e,0x75,0x60,0x04,0x74,0x01,0xf0,0x22,0x74,0x02,0xf0,0x22,0x90,0x00,0xf3,0xe0,
55168 -0x30,0xe3,0x08,0x90,0x9e,0x77,0x74,0x01,0xf0,0x80,0x05,0xe4,0x90,0x9e,0x77,0xf0,
55169 -0x90,0x9e,0x77,0xe0,0xb4,0x01,0x12,0x90,0x00,0xf2,0xe0,0x30,0xe7,0x0b,0x90,0x9e,
55170 -0x64,0x74,0xfd,0xf0,0xa3,0x74,0x33,0xf0,0x22,0x90,0x9e,0x64,0x74,0xfd,0xf0,0xa3,
55171 -0x74,0x2f,0xf0,0x22,0x90,0x01,0x64,0x74,0xa0,0xf0,0x22,0xc0,0xe0,0xc0,0xf0,0xc0,
55172 -0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,
55173 -0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x01,0xc4,0x74,0x7b,0xf0,0x74,0x5f,
55174 -0xa3,0xf0,0x53,0x91,0xef,0x90,0x00,0x51,0xe0,0xff,0x90,0x00,0x55,0xe0,0x5f,0xf5,
55175 -0x3d,0xe5,0x3d,0x30,0xe6,0x18,0x74,0x40,0xf0,0x90,0x9e,0x1d,0xe0,0x54,0x03,0xff,
55176 -0xbf,0x03,0x0b,0x90,0x9e,0x1a,0xe0,0x60,0x05,0x7f,0x01,0x12,0x4e,0x45,0xe5,0x3d,
55177 -0x30,0xe7,0x15,0x90,0x00,0x55,0x74,0x80,0xf0,0x90,0x9e,0x1d,0xe0,0x54,0x03,0xff,
55178 -0xbf,0x03,0x05,0x7f,0x02,0x12,0x4e,0x45,0x90,0x01,0xc4,0x74,0x7b,0xf0,0x74,0x5f,
55179 -0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,
55180 -0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,0x32,0x8f,0x6b,0x8c,
55181 -0x6c,0x8d,0x6d,0x22,0x8f,0x6e,0x8c,0x6f,0x8d,0x70,0x22,0xe4,0xf5,0x73,0x90,0x9e,
55182 -0x63,0xf0,0xf5,0x74,0x90,0x9e,0x60,0x74,0x0c,0xf0,0x90,0x9e,0x5e,0xf0,0xe4,0x90,
55183 -0x9e,0x61,0xf0,0x90,0x9e,0x5d,0xf0,0x90,0x9e,0x5c,0xf0,0x90,0x9e,0x5f,0x04,0xf0,
55184 -0x90,0x9e,0x50,0xf0,0xe4,0x90,0x9e,0x62,0xf0,0x90,0x9e,0x52,0xf0,0x90,0x9e,0x5a,
55185 -0x74,0x07,0xf0,0xe4,0x90,0x9e,0x51,0xf0,0x90,0x9e,0x58,0xf0,0xa3,0x74,0x02,0xf0,
55186 -0x90,0x9e,0x56,0x14,0xf0,0xa3,0x74,0x03,0xf0,0x90,0x9e,0x55,0x74,0x14,0xf0,0x90,
55187 -0x9e,0x5b,0x74,0x05,0xf0,0xe4,0x90,0x9e,0x54,0xf0,0x90,0x9e,0x4f,0xf0,0x90,0x9e,
55188 -0x76,0xf0,0x22,0xe4,0x90,0x9e,0x62,0xf0,0x90,0x9e,0x51,0xf0,0x90,0x9e,0x63,0xf0,
55189 -0x22,0x8b,0x59,0x8a,0x5a,0x89,0x5b,0x11,0x83,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x12,
55190 -0x29,0xd9,0xf5,0x74,0x14,0x60,0x0e,0x14,0x60,0x1e,0x14,0x60,0x2f,0x24,0x03,0x70,
55191 -0x40,0x7f,0x01,0x80,0x3a,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x02,0x12,0x42,
55192 -0x20,0xfd,0xe4,0xff,0x11,0xf2,0x80,0x27,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,
55193 -0x02,0x12,0x42,0x20,0xfd,0x7f,0x01,0x11,0xf2,0x1f,0x80,0x13,0xab,0x59,0xaa,0x5a,
55194 -0xa9,0x5b,0x90,0x00,0x02,0x12,0x42,0x20,0xfd,0x7f,0x02,0x11,0xf2,0xe4,0xff,0x31,
55195 -0x46,0x22,0xef,0x24,0xfe,0x60,0x0b,0x04,0x70,0x22,0x90,0x9e,0x5f,0x74,0x01,0xf0,
55196 -0x80,0x16,0xed,0x70,0x0a,0x90,0x9e,0x5b,0xe0,0x90,0x9e,0x5f,0xf0,0x80,0x05,0x90,
55197 -0x9e,0x5f,0xed,0xf0,0x90,0x9e,0x5f,0xe0,0x90,0x9e,0x50,0xf0,0x22,0xd3,0x10,0xaf,
55198 -0x01,0xc3,0xc0,0xd0,0x90,0x00,0x01,0x12,0x42,0x20,0x90,0x9e,0x61,0xf0,0x90,0x00,
55199 -0x03,0x12,0x42,0x20,0x90,0x9e,0x4f,0xf0,0x12,0x29,0xd9,0x65,0x74,0x60,0x02,0x11,
55200 -0x91,0xd0,0xd0,0x92,0xaf,0x22,0xef,0x64,0x01,0x70,0x30,0x7d,0x7c,0x7f,0x02,0x12,
55201 -0x36,0x75,0x7d,0x02,0x7f,0x03,0x12,0x36,0x75,0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,
55202 -0x3c,0x74,0x02,0xf0,0x12,0x47,0x16,0xe4,0xff,0x12,0x48,0x8f,0x90,0x06,0x04,0xe0,
55203 -0x54,0x7f,0xf0,0x90,0x06,0x0a,0xe0,0x54,0xf8,0xf0,0x22,0x90,0x01,0x36,0x74,0x7c,
55204 -0xf0,0xa3,0x74,0x02,0xf0,0x7d,0x7c,0xff,0x12,0x36,0xe6,0x7d,0x02,0x7f,0x03,0x12,
55205 -0x36,0xe6,0x90,0x06,0x04,0xe0,0x44,0x80,0xf0,0x90,0x06,0x0a,0xe0,0x44,0x07,0xf0,
55206 -0x90,0x9e,0x58,0xe0,0xa3,0xe0,0x90,0x05,0x58,0xf0,0xe5,0x73,0x30,0xe0,0x1b,0x90,
55207 -0x9e,0x52,0xe0,0x70,0x1a,0xe0,0x04,0xf0,0x90,0x9e,0x5e,0xe0,0x54,0x0f,0xc3,0x94,
55208 -0x04,0x50,0x0c,0x7d,0x01,0x7f,0x04,0x02,0x47,0x1a,0xe4,0x90,0x9e,0x52,0xf0,0x22,
55209 -0xe5,0x12,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,0xf0,0x80,0x5e,0x90,0x9e,0x60,0xe0,
55210 -0x54,0x0f,0xd3,0x94,0x01,0x40,0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x4b,0x90,
55211 -0x02,0x87,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x04,0xf0,0x80,0x3d,0x90,0x9e,0x75,
55212 -0xe0,0xb4,0x02,0x10,0x90,0x9e,0x64,0xe0,0xfe,0xa3,0xe0,0xf5,0x82,0x8e,0x83,0xe0,
55213 -0x60,0x17,0x80,0x26,0x90,0x9e,0x75,0xe0,0xb4,0x01,0x0e,0x90,0x01,0xaf,0xe0,0x60,
55214 -0x08,0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,0x11,0x90,0x9e,0x54,0xe0,0x70,0x08,0x90,
55215 -0x01,0xb9,0x74,0x10,0xf0,0x80,0x03,0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,0x02,0xf0,
55216 -0x7f,0x00,0x22,0x90,0x06,0x04,0xe0,0x54,0xbf,0xf0,0xef,0x60,0x09,0xe5,0x73,0xb4,
55217 -0x01,0x04,0xe4,0xff,0x51,0x62,0x90,0x9e,0x5e,0xe0,0x54,0xf0,0xf0,0xe0,0x44,0x0c,
55218 -0xf0,0x22,0x8f,0x76,0x90,0x9e,0x5e,0xe0,0x90,0x01,0xc1,0xf0,0xa3,0xe5,0x12,0xf0,
55219 -0x12,0x45,0xb1,0xef,0x64,0x01,0x70,0x2e,0x90,0x9e,0x69,0x12,0x47,0xfa,0xe5,0x76,
55220 -0x60,0x10,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x10,0xf0,
55221 -0x80,0x0e,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xef,0xf0,
55222 -0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0x90,0x9e,0xaf,0xef,0xf0,0x51,0xc5,0x90,0x9e,
55223 -0xaf,0xe0,0x60,0x05,0x90,0x05,0x22,0xe4,0xf0,0x90,0x9e,0x5e,0xe0,0x54,0xf0,0xf0,
55224 -0xe0,0x44,0x04,0xf0,0x22,0x90,0x9d,0xff,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,
55225 -0x7f,0x7f,0x78,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,0x03,0x12,0x43,0x53,0x90,0x80,
55226 -0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x2f,0xd9,0x90,0x9e,0x07,0x12,0x43,
55227 -0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x00,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,
55228 -0x0b,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x70,0x7e,0x0e,0x12,0x2f,
55229 -0xd9,0x90,0x80,0x59,0x12,0x2a,0x8b,0x00,0x03,0x2d,0x95,0xe4,0xfd,0xff,0x12,0x34,
55230 -0x81,0x90,0x9e,0x77,0xe0,0xb4,0x01,0x11,0x90,0x80,0x59,0x12,0x2a,0x8b,0x00,0x03,
55231 -0x2d,0x95,0xe4,0xfd,0x7f,0x01,0x12,0x34,0x81,0x22,0x8f,0x27,0xe4,0x90,0x9e,0xa8,
55232 -0xf0,0xa3,0xf0,0x90,0x01,0x09,0xe0,0x7f,0x00,0x30,0xe7,0x02,0x7f,0x01,0xef,0x65,
55233 -0x27,0x60,0x3e,0xc3,0x90,0x9e,0xa9,0xe0,0x94,0x88,0x90,0x9e,0xa8,0xe0,0x94,0x13,
55234 -0x40,0x08,0x90,0x01,0xc6,0xe0,0x44,0x80,0xf0,0x22,0x90,0x9e,0xa8,0xe4,0x75,0xf0,
55235 -0x01,0x12,0x42,0x81,0x7f,0x14,0x7e,0x00,0x12,0x37,0x54,0xd3,0x90,0x9e,0xa9,0xe0,
55236 -0x94,0x32,0x90,0x9e,0xa8,0xe0,0x94,0x00,0x40,0xb9,0x90,0x01,0xc7,0xe0,0x30,0xe0,
55237 -0xb2,0x22,0x90,0x9e,0x5e,0xe0,0x54,0xf0,0xf0,0xe0,0x44,0x01,0xf0,0x12,0x45,0x01,
55238 -0x12,0x45,0x02,0xe0,0x54,0xf0,0xf0,0xe0,0x44,0x02,0xf0,0x22,0x90,0x9e,0x60,0xe0,
55239 -0x30,0xe6,0x1c,0xe0,0x54,0x0f,0xff,0x90,0x9e,0x4e,0xe0,0xfe,0x4f,0x90,0x01,0x2f,
55240 -0xf0,0xee,0x64,0x80,0x90,0x9e,0x4e,0xf0,0x90,0x9e,0x60,0xe0,0x54,0xbf,0xf0,0x22,
55241 -0x8f,0x75,0x12,0x45,0xb1,0xef,0x64,0x01,0x70,0x2e,0x90,0x9e,0x6a,0x12,0x47,0xfa,
55242 -0xe5,0x75,0x60,0x10,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,
55243 -0x10,0xf0,0x80,0x0e,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,
55244 -0xef,0xf0,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0xe4,0x90,0x9e,0x2f,0xf0,0xe5,0x74,
55245 -0x60,0x6a,0xe5,0x73,0x64,0x01,0x70,0x64,0xe5,0x74,0x14,0x60,0x29,0x24,0xfd,0x60,
55246 -0x25,0x24,0x02,0x24,0xfb,0x50,0x02,0x80,0x23,0x90,0x9e,0x50,0xe0,0x14,0xf0,0xe0,
55247 -0x60,0x04,0xa3,0xe0,0x60,0x16,0x90,0x9e,0x50,0xe0,0x70,0x0a,0x90,0x9e,0x5f,0xe0,
55248 -0x90,0x9e,0x50,0xf0,0x80,0x00,0x90,0x9e,0x2f,0x74,0x01,0xf0,0x90,0x9e,0x2f,0xe0,
55249 -0x60,0x2a,0x90,0x9e,0x63,0xe0,0x44,0x10,0xf0,0xe4,0x90,0x9e,0x89,0xf0,0x90,0x9e,
55250 -0x5a,0x12,0x44,0x56,0x90,0x01,0x57,0x74,0x05,0xf0,0x90,0x9e,0x5e,0xe0,0x54,0x0f,
55251 -0xc3,0x94,0x04,0x50,0x07,0x7d,0x01,0x7f,0x04,0x12,0x47,0x1a,0x22,0xef,0xc3,0x94,
55252 -0x20,0x50,0x39,0xef,0x30,0xe0,0x17,0xed,0xc4,0x54,0xf0,0xfd,0xef,0xc3,0x13,0xfe,
55253 -0x24,0xa4,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,0x0f,0x80,0x10,0xef,0xc3,
55254 -0x13,0xfe,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,0xf0,0xf0,0x74,
55255 -0xa4,0x2e,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x4d,0xf0,0x22,0xad,0x07,0xed,
55256 -0xc3,0x94,0x20,0x50,0x0d,0x74,0x84,0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,
55257 -0x80,0x0b,0x74,0xa6,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x54,0x7f,0xf5,
55258 -0x64,0xe5,0x64,0x54,0x1f,0xfc,0x75,0xf0,0x09,0xed,0x90,0x96,0x48,0x12,0x43,0x5f,
55259 -0xe0,0xff,0x90,0x9e,0x3e,0xf0,0xed,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,
55260 -0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x3f,0xcb,0xf0,0xa3,0xeb,0xf0,0xed,0x25,
55261 -0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,
55262 -0x41,0xcb,0xf0,0xa3,0xeb,0xf0,0xec,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,
55263 -0xf5,0x83,0xe4,0x93,0xfa,0x74,0x01,0x93,0xfb,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,
55264 -0xe4,0x34,0x95,0xf5,0x83,0xea,0xf0,0xa3,0xeb,0xf0,0xec,0xc3,0x9f,0x40,0x02,0xa1,
55265 -0xd4,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xec,0xf0,0x04,0xfb,0x90,
55266 -0x9e,0x3e,0xe0,0xff,0xeb,0xd3,0x9f,0x40,0x02,0xc1,0x05,0xeb,0xc3,0x94,0x10,0x40,
55267 -0x21,0xeb,0x24,0xf0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,
55268 -0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x3f,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,
55269 -0x70,0x23,0xeb,0xc3,0x94,0x10,0x50,0x39,0x74,0x01,0x7e,0x00,0xa8,0x03,0x08,0x80,
55270 -0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x41,0xe0,0x5e,0xfe,0xa3,
55271 -0xe0,0x5f,0x4e,0x60,0x1c,0xeb,0x64,0x13,0x60,0x08,0xeb,0x64,0x12,0x60,0x03,0xbb,
55272 -0x11,0x09,0x90,0x9e,0x3f,0xe0,0x30,0xe0,0x02,0x7b,0x18,0xac,0x03,0x8c,0x64,0x80,
55273 -0x34,0x0b,0x80,0x8b,0x90,0x9e,0x3e,0xe0,0xfb,0x6c,0x70,0x69,0x74,0x67,0x2d,0xf5,
55274 -0x82,0xe4,0x34,0x9d,0xf5,0x83,0xec,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4a,0x12,
55275 -0x43,0x5f,0xe0,0xb4,0x01,0x0c,0xe5,0x64,0x20,0xe6,0x07,0xec,0x44,0x40,0xf5,0x64,
55276 -0x80,0x03,0xaf,0x64,0x22,0xec,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,
55277 -0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xec,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,
55278 -0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,
55279 -0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,
55280 -0xa3,0xef,0xf0,0x80,0x5b,0xec,0xd3,0x9b,0x40,0x56,0x90,0x9e,0x3e,0xe0,0xff,0x74,
55281 -0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xef,0xf0,0xac,0x07,0x8f,0x64,0xec,
55282 -0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,
55283 -0x93,0xff,0xec,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,
55284 -0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,
55285 -0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0xaf,0x64,0x22,
55286 -0x74,0x01,0x2d,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,0xf0,0xaf,0x05,0xe5,0x64,
55287 -0x44,0x80,0xfd,0x12,0x5a,0x85,0xe5,0x64,0x44,0x80,0xff,0x22,0xe4,0xf5,0x59,0xe5,
55288 -0x59,0xb4,0x20,0x14,0x90,0x9a,0xc5,0xe0,0x04,0xf0,0x90,0x95,0x01,0xe0,0xff,0x90,
55289 -0x9a,0xc5,0xe0,0xb5,0x07,0x02,0xe4,0xf0,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x4b,
55290 -0x12,0x43,0x5f,0xe0,0x64,0x01,0x60,0x03,0x02,0x6d,0x04,0xe5,0x59,0x25,0xe0,0x24,
55291 -0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0xd3,0x94,0x00,0xee,
55292 -0x94,0x00,0x50,0x03,0x02,0x6d,0x04,0xe5,0x59,0x94,0x20,0x40,0x09,0x90,0x9a,0xc5,
55293 -0xe0,0x60,0x03,0x02,0x6d,0x10,0xe5,0x59,0x75,0xf0,0x0a,0xa4,0x24,0x00,0xf9,0x74,
55294 -0x90,0x35,0xf0,0x75,0x5e,0x01,0xf5,0x5f,0x89,0x60,0xe5,0x59,0x25,0xe0,0x24,0x80,
55295 -0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe0,0xff,0xa3,0xe0,0x90,0x9e,0x38,0xcf,0xf0,
55296 -0xa3,0xef,0xf0,0xe5,0x59,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,
55297 -0xe0,0xff,0xa3,0xe0,0x90,0x9e,0x3a,0xcf,0xf0,0xa3,0xef,0xf0,0xe5,0x59,0xc3,0x94,
55298 -0x20,0x50,0x14,0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,
55299 -0x3f,0x90,0x9e,0x34,0xf0,0x80,0x12,0x74,0xa6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,
55300 -0xf5,0x83,0xe0,0x54,0x3f,0x90,0x9e,0x34,0xf0,0x90,0x9e,0x34,0xe0,0xfe,0x54,0x1f,
55301 -0xa3,0xf0,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x48,0x12,0x43,0x5f,0xe0,0x90,0x9e,
55302 -0x3d,0xf0,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xc3,0x94,
55303 -0x05,0x40,0x03,0x02,0x69,0xdd,0x90,0x9e,0x3d,0xe0,0xff,0x90,0x9e,0x35,0xe0,0x9f,
55304 -0x40,0x13,0x90,0x9e,0x3d,0xe0,0x90,0x9e,0x35,0xf0,0xee,0x54,0x40,0xfe,0x90,0x9e,
55305 -0x34,0xf0,0xef,0x4e,0xf0,0x90,0x04,0xfd,0xe0,0x64,0x01,0x70,0x29,0x90,0x9e,0x35,
55306 -0xe0,0xff,0x90,0x41,0x4a,0x93,0xfe,0x74,0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,
55307 -0xf5,0x83,0xe0,0xc3,0x9e,0x40,0x06,0xef,0x90,0x40,0xda,0x80,0x30,0x90,0x9e,0x35,
55308 -0xe0,0x90,0x40,0xf6,0x80,0x27,0x90,0x9e,0x35,0xe0,0xff,0x90,0x41,0x4a,0x93,0xfe,
55309 -0x74,0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xc3,0x9e,0x40,0x06,
55310 -0xef,0x90,0x41,0x12,0x80,0x07,0x90,0x9e,0x35,0xe0,0x90,0x41,0x2e,0x93,0x90,0x9e,
55311 -0x3c,0xf0,0x90,0x9e,0x3c,0xe0,0x75,0xf0,0x06,0xa4,0x24,0x50,0xf9,0x74,0x40,0x35,
55312 -0xf0,0x75,0x5b,0xff,0xf5,0x5c,0x89,0x5d,0x90,0x9e,0x34,0xe0,0x90,0x41,0xf2,0x93,
55313 -0xff,0xd3,0x90,0x9e,0x3b,0xe0,0x9f,0x90,0x9e,0x3a,0xe0,0x94,0x00,0x40,0x09,0xe4,
55314 -0xfd,0xaf,0x59,0x12,0x5c,0xd8,0x81,0x9b,0xe5,0x59,0x25,0xe0,0x24,0xc2,0xf5,0x82,
55315 -0xe4,0x34,0x95,0xf5,0x83,0xe0,0xf5,0x61,0xa3,0xe0,0xf5,0x62,0xab,0x5b,0xaa,0x5c,
55316 -0xa9,0x5d,0x12,0x29,0xd9,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x12,0x42,
55317 -0x97,0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,
55318 -0x61,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0x7e,0x00,
55319 -0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x02,0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,
55320 -0x29,0xf2,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,0xaa,0x5c,
55321 -0xa9,0x5d,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,
55322 -0x60,0x90,0x00,0x04,0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,0x25,0x62,
55323 -0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,0x00,0x03,
55324 -0x12,0x42,0x20,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x06,0x12,
55325 -0x42,0xc2,0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,
55326 -0xf5,0x61,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0x7e,
55327 -0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x08,0x12,0x42,0xc2,0xfd,0xac,0xf0,
55328 -0x12,0x29,0xf2,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,0xaa,
55329 -0x5c,0xa9,0x5d,0x90,0x00,0x05,0x12,0x42,0x20,0xff,0x7e,0x00,0x90,0x9e,0x38,0xe0,
55330 -0xfc,0xa3,0xe0,0xfd,0x12,0x29,0xf2,0xd3,0xe5,0x62,0x9f,0xe5,0x61,0x9e,0x40,0x0c,
55331 -0xe5,0x62,0x9f,0xf5,0x62,0xe5,0x61,0x9e,0xf5,0x61,0x80,0x05,0xe4,0xf5,0x61,0xf5,
55332 -0x62,0xe5,0x59,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe5,0x61,
55333 -0xf0,0xa3,0xe5,0x62,0xf0,0x90,0x9e,0x34,0xe0,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,
55334 -0x34,0x41,0xf5,0x83,0xc3,0x74,0x01,0x93,0x95,0x62,0xe4,0x93,0x95,0x61,0x50,0x07,
55335 -0xaf,0x59,0x12,0x64,0xbd,0x81,0x6f,0x90,0x9e,0x34,0xe0,0x25,0xe0,0x24,0x9e,0xf5,
55336 -0x82,0xe4,0x34,0x41,0xf5,0x83,0xd3,0x74,0x01,0x93,0x95,0x62,0xe4,0x93,0x95,0x61,
55337 -0x50,0x02,0x81,0x6f,0x7d,0x01,0xaf,0x59,0x12,0x5c,0xd8,0x81,0x6f,0x74,0xe6,0x25,
55338 -0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xfc,0x64,0x05,0x60,0x02,0x61,0x78,
55339 -0x90,0x96,0x43,0xe0,0xff,0xb4,0x03,0x0b,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x19,0x40,
55340 -0x3d,0x80,0x2e,0xef,0xb4,0x02,0x0b,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x11,0x40,0x2e,
55341 -0x80,0x1f,0x90,0x96,0x43,0xe0,0xff,0xb4,0x01,0x0b,0x90,0x9e,0x35,0xe0,0xc3,0x94,
55342 -0x0a,0x40,0x1b,0x80,0x0c,0xef,0x70,0x11,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x03,0x40,
55343 -0x0d,0x90,0x9a,0x84,0x74,0x01,0xf0,0x80,0x05,0xe4,0x90,0x9a,0x84,0xf0,0x74,0x84,
55344 -0x25,0x59,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x63,0x74,0x44,0x25,0x59,
55345 -0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xff,0xc3,0x94,0x30,0x50,0x02,0x61,0x25,
55346 -0x90,0x9a,0x84,0xe0,0x64,0x01,0x60,0x02,0x61,0x25,0x74,0x85,0x25,0x59,0xf5,0x82,
55347 -0xe4,0x34,0x9a,0xf5,0x83,0xe0,0x64,0x0a,0x60,0x51,0xef,0x24,0x05,0xff,0xe4,0x33,
55348 -0xfe,0x74,0x41,0x25,0x59,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe0,0xfd,0xd3,0x9f,
55349 -0xee,0x64,0x80,0xf8,0x74,0x80,0x98,0x50,0x32,0xed,0x24,0x05,0xff,0xe4,0x33,0xfe,
55350 -0x74,0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xd3,0x9f,0xee,0x64,
55351 -0x80,0xf8,0x74,0x80,0x98,0x50,0x14,0x74,0x26,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9d,
55352 -0xf5,0x83,0xe0,0xff,0x90,0x9e,0x35,0xe0,0x6f,0x60,0x3d,0x74,0x44,0x25,0x59,0xf5,
55353 -0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xff,0xd3,0x94,0x42,0x40,0x05,0x75,0x63,0x05,
55354 -0x80,0x0e,0xef,0xd3,0x94,0x39,0x40,0x05,0x75,0x63,0x03,0x80,0x03,0x75,0x63,0x01,
55355 -0x74,0x41,0x25,0x59,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xef,0xf0,0x74,0x85,0x25,
55356 -0x59,0xf5,0x82,0xe4,0x34,0x9a,0x80,0x29,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,
55357 -0x9c,0xf5,0x83,0xe4,0xf0,0x74,0x85,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,
55358 -0xe0,0x04,0xf0,0x80,0x10,0xe4,0xf5,0x63,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,
55359 -0x9c,0xf5,0x83,0xe4,0xf0,0x90,0x9e,0x35,0xe0,0xff,0x74,0x26,0x25,0x59,0xf5,0x82,
55360 -0xe4,0x34,0x9d,0xf5,0x83,0xef,0xf0,0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x98,
55361 -0xf5,0x83,0xe5,0x63,0xf0,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x4c,0x12,0x43,0x5f,
55362 -0xe0,0xb4,0x01,0x10,0xe4,0xf5,0x63,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,
55363 -0xf5,0x83,0xe4,0xf0,0xad,0x63,0x81,0x6a,0xec,0x64,0x06,0x60,0x02,0x81,0x6f,0xf5,
55364 -0x61,0xf5,0x62,0x90,0x42,0x13,0x93,0xff,0x7e,0x00,0x90,0x9e,0x38,0xe0,0xfc,0xa3,
55365 -0xe0,0xfd,0x12,0x29,0xf2,0x90,0x9e,0x36,0xee,0xf0,0xa3,0xef,0xf0,0x74,0x84,0x25,
55366 -0x59,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x63,0xe4,0xf5,0x5a,0xab,0x5e,
55367 -0xaa,0x5f,0xa9,0x60,0x75,0xf0,0x02,0xe5,0x5a,0xa4,0xf5,0x82,0x85,0xf0,0x83,0x12,
55368 -0x42,0xc2,0xfd,0xac,0xf0,0xe5,0x5a,0x90,0x42,0x0e,0x93,0xff,0x7e,0x00,0x12,0x29,
55369 -0xf2,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xc3,0x90,0x9e,0x37,0xe0,
55370 -0x95,0x62,0x90,0x9e,0x36,0xe0,0x95,0x61,0x40,0x07,0x05,0x5a,0xe5,0x5a,0xb4,0x05,
55371 -0xbd,0xe5,0x5a,0xc3,0x13,0xf5,0x5a,0xe5,0x63,0xb4,0x01,0x06,0xe5,0x5a,0x70,0x46,
55372 -0x80,0x13,0xe5,0x63,0xb4,0x03,0x15,0xe5,0x5a,0x70,0x05,0x75,0x63,0x03,0x80,0x39,
55373 -0xe5,0x5a,0xb4,0x01,0x05,0x75,0x63,0x01,0x80,0x2f,0x80,0x2a,0xe5,0x63,0xb4,0x05,
55374 -0x28,0xe5,0x5a,0x70,0x05,0x75,0x63,0x05,0x80,0x0d,0xe5,0x5a,0xb4,0x01,0x05,0x75,
55375 -0x63,0x03,0x80,0x03,0x75,0x63,0x01,0xd3,0x90,0x9e,0x3b,0xe0,0x94,0x03,0x90,0x9e,
55376 -0x3a,0xe0,0x94,0x00,0x40,0x03,0xe4,0xf5,0x63,0xd3,0x90,0x9e,0x3b,0xe0,0x94,0x03,
55377 -0x90,0x9e,0x3a,0xe0,0x94,0x00,0x40,0x03,0xe4,0xf5,0x63,0x74,0x84,0x25,0x59,0xf5,
55378 -0x82,0xe4,0x34,0x98,0xf5,0x83,0xe5,0x63,0xf0,0xfd,0xaf,0x59,0x12,0x64,0x7d,0x74,
55379 -0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xd3,0x94,0x05,0x74,0xe6,
55380 -0x50,0x0e,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x04,0xf0,0x80,0x0b,
55381 -0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0xab,0x5e,0xaa,0x5f,0xa9,
55382 -0x60,0xe4,0xf5,0xf0,0x12,0x42,0xfa,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x02,
55383 -0xe4,0xf5,0xf0,0x12,0x43,0x19,0x90,0x00,0x04,0xe4,0xf5,0xf0,0x12,0x43,0x19,0x90,
55384 -0x00,0x06,0xe4,0xf5,0xf0,0x12,0x43,0x19,0x90,0x00,0x08,0xe4,0xf5,0xf0,0x12,0x43,
55385 -0x19,0xe5,0x59,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe4,0xf0,
55386 -0xa3,0xf0,0xe5,0x59,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,
55387 -0xf0,0xa3,0xf0,0xe5,0x59,0x25,0xe0,0x24,0x44,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,
55388 -0xe4,0xf0,0xa3,0xf0,0x05,0x59,0xe5,0x59,0xc3,0x94,0x40,0x50,0x03,0x02,0x66,0xbf,
55389 -0x22,0x90,0x04,0x44,0x74,0x11,0xf0,0xa3,0x74,0xf0,0xf0,0xa3,0x74,0x0f,0xf0,0xa3,
55390 -0xe4,0xf0,0xfd,0x74,0xa4,0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe4,0xf0,0x0d,
55391 -0xbd,0x10,0xf0,0xe4,0x90,0x9a,0xc5,0xf0,0x90,0x95,0x01,0x04,0xf0,0xe4,0xfd,0x75,
55392 -0xf0,0x0a,0xed,0x90,0x90,0x00,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,
55393 -0xed,0x90,0x90,0x02,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,
55394 -0x90,0x04,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x06,
55395 -0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x08,0x12,0x43,
55396 -0x5f,0xe4,0xf0,0xa3,0xf0,0x74,0x26,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0x74,
55397 -0x13,0xf0,0x74,0x85,0x2d,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe4,0xf0,0x74,0x84,
55398 -0x2d,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,0xed,0x25,0xe0,0x24,0x80,0xf5,
55399 -0x82,0xe4,0x34,0x93,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc4,0xf5,
55400 -0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc4,0xf5,
55401 -0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0x44,0xf5,
55402 -0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc6,0xf5,
55403 -0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0x46,0xf5,
55404 -0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0x74,0x86,0x2d,0xf5,0x82,0xe4,
55405 -0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x74,0x46,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,
55406 -0xe4,0xf0,0x74,0xe6,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x90,0x41,
55407 -0xc4,0x93,0xfe,0x74,0x01,0x93,0xff,0x90,0x41,0x8c,0x74,0x01,0x93,0x2f,0xff,0xe4,
55408 -0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,
55409 -0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4b,
55410 -0x12,0x43,0x5f,0x74,0x01,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4a,0x12,0x43,0x5f,
55411 -0x74,0x01,0xf0,0x74,0x82,0x2d,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0x74,0x0c,0xf0,
55412 -0x75,0xf0,0x09,0xed,0x90,0x96,0x46,0x12,0x43,0x5f,0x74,0xff,0xf0,0xa3,0xf0,0x75,
55413 -0xf0,0x09,0xed,0x90,0x96,0x44,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0x74,0x0f,0xf0,0x75,
55414 -0xf0,0x09,0xed,0x90,0x96,0x48,0x12,0x43,0x5f,0x74,0x13,0xf0,0x75,0xf0,0x09,0xed,
55415 -0x90,0x96,0x49,0x12,0x43,0x5f,0xe4,0xf0,0xed,0xc3,0x94,0x20,0x50,0x0f,0x74,0x84,
55416 -0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0x74,0x13,0xf0,0x80,0x0d,0x74,0xa6,0x2d,
55417 -0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0x74,0x13,0xf0,0x0d,0xed,0x64,0x40,0x60,0x02,
55418 -0xa1,0x3f,0x22,0x12,0x29,0xd9,0xf5,0x59,0xc3,0x94,0x40,0x50,0x15,0x90,0x00,0x02,
55419 -0x12,0x42,0x20,0xff,0x74,0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xef,
55420 -0xf0,0x22,0xe5,0x59,0xb4,0x40,0x0a,0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x96,0x42,
55421 -0xf0,0x22,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0x54,0x3f,0xfe,0xef,0x54,0x80,0xc4,
55422 -0x13,0x13,0x13,0x54,0x01,0xfd,0xaf,0x06,0x02,0x55,0x35,0x12,0x29,0xd9,0x90,0x95,
55423 -0x01,0xf0,0x22,0x12,0x29,0xd9,0xf5,0x73,0x22,0x90,0x00,0x02,0x12,0x42,0x20,0xff,
55424 -0x30,0xe0,0x25,0x12,0x29,0xd9,0x90,0x9e,0x56,0xf0,0x90,0x00,0x01,0x12,0x42,0x20,
55425 -0x90,0x9e,0x57,0xf0,0xef,0xc3,0x13,0x54,0x7f,0x90,0x9e,0x55,0xf0,0x90,0x00,0x03,
55426 -0x12,0x42,0x20,0x90,0x9e,0x5b,0xf0,0x22,0x90,0x9e,0x56,0x74,0x01,0xf0,0x90,0x9e,
55427 -0x57,0x74,0x03,0xf0,0x90,0x9e,0x55,0x74,0x14,0xf0,0x90,0x9e,0x5b,0x74,0x05,0xf0,
55428 -0x22,0x12,0x29,0xd9,0x30,0xe0,0x18,0xc3,0x13,0x54,0x7f,0x90,0x9e,0x5a,0xf0,0x90,
55429 -0x00,0x01,0x12,0x42,0x20,0xff,0x90,0x9e,0x58,0xe4,0xf0,0xa3,0xef,0xf0,0x22,0x90,
55430 -0x9e,0x5a,0x74,0x07,0xf0,0x90,0x9e,0x58,0xe4,0xf0,0xa3,0x74,0x02,0xf0,0x22,0x90,
55431 -0x02,0x09,0xe0,0xfd,0x12,0x29,0xd9,0xfe,0xaf,0x05,0xed,0x2e,0x90,0x9e,0x67,0xf0,
55432 -0x90,0x00,0x01,0x12,0x42,0x20,0xff,0xed,0x2f,0x90,0x9e,0x68,0xf0,0x90,0x00,0x02,
55433 -0x12,0x42,0x20,0xff,0xed,0x2f,0x90,0x9e,0x69,0xf0,0x90,0x00,0x03,0x12,0x42,0x20,
55434 -0xff,0xed,0x2f,0x90,0x9e,0x6a,0xf0,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0xae,0x05,
55435 -0xed,0x2f,0x90,0x9e,0x6b,0xf0,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,
55436 -0x3f,0x12,0x43,0x8b,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,0xc2,
55437 -0xfa,0xe5,0xf0,0x24,0x00,0xff,0xe4,0x3a,0xfe,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,
55438 -0x00,0x01,0xee,0x8f,0xf0,0x12,0x43,0x19,0x12,0x29,0xd9,0xff,0x60,0x2c,0xb5,0x22,
55439 -0x16,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,0xc2,0x65,0x24,0x70,
55440 -0x04,0xe5,0x23,0x65,0xf0,0x60,0x23,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,0x01,
55441 -0x12,0x42,0xc2,0xff,0xae,0xf0,0x11,0x6f,0x80,0x10,0x90,0x9e,0x3f,0x12,0x43,0x6b,
55442 -0x12,0x29,0xd9,0x65,0x22,0x60,0x03,0x12,0x44,0xca,0xd0,0xd0,0x92,0xaf,0x22,0x90,
55443 -0x9e,0x42,0xee,0xf0,0xa3,0xef,0xf0,0x75,0x22,0x01,0x8e,0x23,0xf5,0x24,0xe4,0xfd,
55444 -0x7f,0x0b,0x11,0xb1,0xe4,0xfd,0x7f,0x02,0x11,0xb1,0x31,0x87,0xe4,0xff,0x31,0x7b,
55445 -0xe4,0xf5,0x26,0x90,0x01,0xc9,0xe5,0x26,0xf0,0x90,0x9e,0x42,0xe0,0xfc,0xa3,0xe0,
55446 -0xfd,0xec,0xfb,0x8d,0x44,0xe4,0xf5,0x45,0x7d,0x01,0x7f,0x60,0x7e,0x01,0x02,0x35,
55447 -0xab,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x45,0xed,0xf0,0x90,0x9e,0x44,
55448 -0xef,0xf0,0xd3,0x94,0x07,0x50,0x4f,0xa3,0xe0,0x70,0x1a,0x90,0x9e,0x44,0xe0,0xff,
55449 -0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x47,
55450 -0xe0,0x5f,0xf0,0x80,0x17,0x90,0x9e,0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,
55451 -0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x47,0xe0,0x4f,0xf0,0x12,0x4d,0x28,0x90,
55452 -0x9e,0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,
55453 -0xff,0x90,0x00,0x46,0x80,0x5a,0x90,0x9e,0x44,0xe0,0x24,0xf8,0xf0,0xa3,0xe0,0x70,
55454 -0x1d,0x90,0x9e,0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,
55455 -0xfc,0xc4,0x54,0xf0,0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0x80,0x1a,0x90,0x9e,
55456 -0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,
55457 -0xf0,0xff,0x90,0x00,0x43,0xe0,0x4f,0xf0,0x12,0x4d,0x28,0x90,0x9e,0x44,0xe0,0xff,
55458 -0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x43,
55459 -0xe0,0x5f,0xf0,0x12,0x4d,0x28,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x01,0xca,0xe5,0x25,
55460 -0xf0,0xef,0x60,0x02,0x31,0xe8,0x22,0x7f,0x0b,0x51,0x08,0xef,0x65,0x25,0x60,0x10,
55461 -0xe5,0x25,0xb4,0x01,0x05,0xe4,0xf5,0x25,0x80,0x03,0x75,0x25,0x01,0x7f,0x01,0x22,
55462 -0x7f,0x00,0x22,0xe5,0x22,0x64,0x01,0x70,0x3e,0x31,0x87,0xbf,0x01,0x04,0x7f,0x01,
55463 -0x31,0x7b,0x90,0x00,0x46,0xe0,0x44,0x04,0xfd,0x7f,0x46,0x12,0x4e,0x30,0x90,0x00,
55464 -0x44,0xe0,0x54,0xfb,0xfd,0x7f,0x44,0x12,0x4e,0x30,0x90,0x00,0x46,0xe0,0x54,0xfb,
55465 -0xfd,0x7f,0x46,0x12,0x4e,0x30,0x7f,0x02,0x51,0x08,0x8f,0x26,0x90,0x01,0xc9,0xe5,
55466 -0x26,0xf0,0xb4,0x01,0x02,0x31,0xe8,0x22,0x90,0x00,0x49,0xe0,0x90,0x9e,0xb1,0xf0,
55467 -0xe0,0x54,0x0f,0xf0,0x44,0xf0,0xfd,0x7f,0x49,0x12,0x4e,0x30,0x90,0x9e,0xb1,0xe0,
55468 -0x44,0xb0,0xfd,0x7f,0x49,0x02,0x4e,0x30,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,
55469 -0x9e,0xb2,0xef,0xf0,0xd3,0x94,0x07,0x50,0x47,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,
55470 -0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x46,0xe0,0x5f,0xf0,0x12,0x4d,
55471 -0x28,0x90,0x9e,0xb2,0xe0,0xfd,0x74,0x01,0x7e,0x00,0xa8,0x05,0x08,0x80,0x05,0xc3,
55472 -0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,0x44,0xe0,0xfb,0xe4,0xfe,0xef,0x5b,
55473 -0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,0xd8,0xf8,0xff,0x80,0x44,
55474 -0x90,0x9e,0xb2,0xe0,0x24,0xf8,0xf0,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,
55475 -0xc3,0x33,0xd8,0xfc,0x12,0x4d,0x20,0x90,0x9e,0xb2,0xe0,0xfd,0x74,0x01,0x7e,0x00,
55476 -0xa8,0x05,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,0x42,
55477 -0xe0,0xfb,0xe4,0xfe,0xef,0x5b,0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,0xce,
55478 -0x13,0xd8,0xf8,0xff,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
55479 -0x90,0x9e,0x6d,0xe0,0x90,0x9e,0x40,0xf0,0x90,0x9e,0x6e,0xe0,0xf5,0x64,0xa3,0xe0,
55480 -0xf5,0x65,0xe4,0xf5,0x61,0x74,0x70,0x25,0x61,0xf5,0x82,0xe4,0x34,0x9e,0xf5,0x83,
55481 -0xe0,0xff,0x74,0x66,0x25,0x61,0xf8,0xa6,0x07,0x05,0x61,0xe5,0x61,0xb4,0x04,0xe5,
55482 -0x90,0x9e,0x40,0xe0,0x12,0x43,0x94,0x73,0x06,0x00,0x74,0x2e,0x01,0x73,0x0c,0x02,
55483 -0x73,0x0c,0x03,0x73,0x0c,0x04,0x74,0x2e,0x05,0x73,0xfe,0x80,0x74,0x14,0x81,0x74,
55484 -0x2e,0x82,0x00,0x00,0x74,0x2a,0xaf,0x69,0x91,0x35,0x81,0x2e,0x90,0x9e,0x40,0xe0,
55485 -0xff,0xb4,0x02,0x08,0x90,0x9e,0x3f,0x74,0x01,0xf0,0x80,0x0f,0xef,0x90,0x9e,0x3f,
55486 -0xb4,0x03,0x05,0x74,0x02,0xf0,0x80,0x03,0x74,0x04,0xf0,0xc3,0xe5,0x64,0x94,0x08,
55487 -0x50,0x49,0xe4,0xf5,0x61,0x90,0x9e,0x3f,0xe0,0xff,0xe5,0x61,0xc3,0x9f,0x40,0x02,
55488 -0x81,0x2e,0xc3,0xe5,0x64,0x94,0x01,0x50,0x14,0xe5,0x61,0x25,0x65,0xff,0xc3,0x74,
55489 -0x03,0x95,0x61,0x24,0x66,0xf8,0xe6,0xfd,0x12,0x4e,0x30,0x80,0x1a,0xc3,0x74,0x03,
55490 -0x95,0x61,0x24,0x66,0xf8,0xe6,0xff,0xe5,0x61,0x7c,0x00,0x25,0x65,0xfd,0xec,0x35,
55491 -0x64,0x8d,0x82,0xf5,0x83,0xef,0xf0,0x05,0x61,0x80,0xba,0xc3,0xe5,0x64,0x94,0x10,
55492 -0x40,0x02,0x81,0x2e,0x90,0x9e,0x40,0xe0,0x64,0x04,0x60,0x02,0x81,0x2e,0xaf,0x67,
55493 -0xfc,0xfd,0xfe,0x78,0x10,0x12,0x2a,0x6c,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,
55494 -0xaf,0x66,0xe4,0xfc,0xfd,0xfe,0x78,0x18,0x12,0x2a,0x6c,0xd0,0x03,0xd0,0x02,0xd0,
55495 -0x01,0xd0,0x00,0x12,0x43,0x46,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0xaf,0x68,
55496 -0xe4,0xfc,0xfd,0xfe,0x78,0x08,0x12,0x2a,0x6c,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,
55497 -0x00,0x12,0x43,0x46,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,0x07,0xaf,0x69,0xe4,0xfc,
55498 -0xfd,0xfe,0x12,0x43,0x46,0xa3,0x12,0x2a,0x7f,0x90,0x9e,0x41,0x12,0x43,0x53,0x90,
55499 -0x80,0x85,0x12,0x2a,0x7f,0xaf,0x65,0xae,0x64,0x12,0x2f,0xd9,0x80,0x30,0xe5,0x68,
55500 -0x7f,0x00,0xfe,0xef,0x25,0x69,0xf5,0x63,0xe4,0x3e,0xf5,0x62,0xaf,0x63,0xfe,0x12,
55501 -0x37,0x54,0x80,0x1a,0xe5,0x68,0x7f,0x00,0xfe,0xef,0x25,0x69,0xf5,0x63,0xe4,0x3e,
55502 -0xf5,0x62,0xaf,0x63,0xfe,0x12,0x36,0xcb,0x80,0x04,0x7f,0x00,0x80,0x02,0x7f,0x01,
55503 -0xd0,0xd0,0x92,0xaf,0x22,0x8f,0x6a,0xe4,0x90,0x9e,0x45,0xf0,0xe5,0x6a,0x14,0xfe,
55504 -0x90,0x9e,0x45,0xe0,0xff,0xc3,0x9e,0x50,0x0e,0xef,0x04,0xfd,0x12,0x34,0xb7,0x90,
55505 -0x9e,0x45,0xe0,0x04,0xf0,0x80,0xe5,0xe5,0x6a,0x14,0xff,0x7d,0xff,0x12,0x34,0xb7,
55506 -0x90,0x9e,0x45,0xe5,0x6a,0xf0,0x90,0x9e,0x45,0xe0,0xc3,0x94,0xff,0x50,0x0f,0xe0,
55507 -0xff,0x04,0xfd,0x12,0x34,0xb7,0x90,0x9e,0x45,0xe0,0x04,0xf0,0x80,0xe8,0xad,0x6a,
55508 -0x7f,0xff,0x02,0x34,0xb7,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xe4,0xf5,0x5b,0x75,
55509 -0x5c,0x04,0xf5,0x5d,0xf5,0x5f,0xf5,0x60,0x90,0x02,0x09,0xe0,0xff,0x12,0x29,0xd9,
55510 -0xfe,0xef,0x2e,0xf5,0x5e,0x30,0xe0,0x08,0x75,0x59,0x00,0x75,0x5a,0x80,0x80,0x05,
55511 -0xe4,0xf5,0x59,0xf5,0x5a,0xe5,0x5e,0xc3,0x13,0x90,0xfd,0x10,0xf0,0x74,0x20,0x25,
55512 -0x5b,0xf5,0x5b,0xad,0x5a,0xe5,0x5b,0x2d,0xff,0x24,0x01,0xf5,0x82,0xe4,0x34,0xfc,
55513 -0xf5,0x83,0xe0,0x90,0x9e,0x6d,0xf0,0x74,0x02,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,
55514 -0x83,0xe0,0xfe,0xe5,0x5b,0x2d,0x24,0x03,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,
55515 -0x24,0x00,0xff,0xe4,0x3e,0x90,0x9e,0x6e,0xf0,0xa3,0xef,0xf0,0x7f,0x04,0xe5,0x5b,
55516 -0x25,0x5a,0x2f,0x24,0x00,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0xfe,0x74,0x6c,
55517 -0x2f,0xf5,0x82,0xe4,0x34,0x9e,0xf5,0x83,0xee,0xf0,0x0f,0xbf,0x08,0xe0,0x51,0xa9,
55518 -0xef,0x70,0x3f,0x90,0x01,0xc3,0xe0,0x60,0x25,0xc3,0xe5,0x60,0x94,0xe8,0xe5,0x5f,
55519 -0x94,0x03,0x40,0x09,0x90,0x01,0xc6,0xe0,0x44,0x10,0xf0,0x80,0x63,0x05,0x60,0xe5,
55520 -0x60,0x70,0x02,0x05,0x5f,0x7f,0x0a,0x7e,0x00,0x12,0x37,0x54,0x80,0xd5,0x90,0x01,
55521 -0xc6,0xe0,0x90,0x01,0xc3,0x30,0xe2,0x05,0x74,0xfe,0xf0,0x80,0x43,0x74,0xff,0xf0,
55522 -0x80,0x3e,0xe5,0x5b,0xb4,0x78,0x23,0xe4,0xf5,0x5b,0x05,0x5e,0xe5,0x5a,0x64,0x80,
55523 -0x45,0x59,0x70,0x06,0xf5,0x59,0xf5,0x5a,0x80,0x06,0x75,0x59,0x00,0x75,0x5a,0x80,
55524 -0xe5,0x5e,0xc3,0x13,0x90,0xfd,0x10,0xf0,0x80,0x06,0x74,0x08,0x25,0x5b,0xf5,0x5b,
55525 -0xe5,0x5d,0x15,0x5d,0x70,0x02,0x15,0x5c,0xe5,0x5d,0x45,0x5c,0x60,0x02,0x81,0xc3,
55526 -0xd0,0xd0,0x92,0xaf,0x22,0x90,0x06,0x34,0x74,0xff,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,
55527 -0xa3,0xf0,0x22,0x22,0x8e,0x59,0x8f,0x5a,0x8b,0x5b,0x8a,0x5c,0x89,0x5d,0xe4,0x90,
55528 -0x9e,0x34,0xf0,0xef,0x90,0x00,0x31,0xf0,0x12,0x4d,0x28,0xe5,0x59,0x54,0x03,0xff,
55529 -0x90,0x00,0x32,0xe0,0x54,0xfc,0x4f,0xf0,0x12,0x4d,0x28,0x90,0x00,0x33,0xe0,0x54,
55530 -0x7f,0xf0,0x12,0x4d,0x28,0x90,0x00,0x33,0xe0,0x20,0xe7,0x0e,0x90,0x9e,0x34,0xe0,
55531 -0xc3,0x94,0x64,0x50,0x05,0xe0,0x04,0xf0,0x80,0xeb,0x90,0x9e,0x34,0xe0,0xc3,0x94,
55532 -0x64,0x50,0x10,0x90,0x00,0x30,0xe0,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x12,0x42,0x4d,
55533 -0x7f,0x01,0x22,0x7f,0x00,0x22,0xe4,0xf5,0x25,0x22,0xe4,0x90,0x9e,0xaa,0xf0,0xa3,
55534 -0xf0,0x90,0x05,0xf8,0xe0,0x70,0x0f,0xa3,0xe0,0x70,0x0b,0xa3,0xe0,0x70,0x07,0xa3,
55535 -0xe0,0x70,0x03,0x7f,0x01,0x22,0xd3,0x90,0x9e,0xab,0xe0,0x94,0xe8,0x90,0x9e,0xaa,
55536 -0xe0,0x94,0x03,0x40,0x03,0x7f,0x00,0x22,0x7f,0x32,0x7e,0x00,0x12,0x37,0x54,0x90,
55537 -0x9e,0xaa,0xe4,0x75,0xf0,0x01,0x12,0x42,0x81,0x80,0xc6,0x7f,0x78,0x7e,0x08,0x12,
55538 -0x27,0xde,0x90,0x9d,0xff,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x27,0xde,0x90,
55539 -0x9e,0x03,0x12,0x2a,0x7f,0x7f,0x00,0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0x07,0x12,
55540 -0x2a,0x7f,0x90,0x9e,0x77,0xe0,0x90,0x9d,0xff,0xb4,0x01,0x0d,0x12,0x43,0x53,0xef,
55541 -0x54,0xc7,0xff,0xed,0x54,0xc7,0xfd,0x80,0x07,0x12,0x43,0x53,0xef,0x54,0xc7,0xff,
55542 -0xec,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x78,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,
55543 -0x03,0x12,0x43,0x53,0xef,0x54,0x0f,0xff,0xec,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
55544 -0x04,0x7e,0x0c,0x12,0x2f,0xd9,0x90,0x9e,0x07,0x12,0x43,0x53,0xef,0x44,0x02,0xff,
55545 -0xec,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x00,0x7e,0x08,0x12,0x2f,0xd9,0x7f,0x70,
55546 -0x7e,0x0e,0x12,0x27,0xde,0x90,0x9e,0x0b,0x12,0x2a,0x7f,0x90,0x80,0x85,0x12,0x2a,
55547 -0x8b,0x00,0x1b,0x25,0xa0,0x7f,0x70,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x59,0x12,
55548 -0x2a,0x8b,0x00,0x00,0x00,0x00,0xe4,0xfd,0xff,0x12,0x34,0x81,0x90,0x9e,0x77,0xe0,
55549 -0xb4,0x01,0x11,0x90,0x80,0x59,0x12,0x2a,0x8b,0x00,0x00,0x00,0x00,0xe4,0xfd,0x7f,
55550 -0x01,0x12,0x34,0x81,0x22,0x90,0x9e,0x77,0xe0,0x90,0x9e,0x0f,0xf0,0x22,0xef,0x70,
55551 -0x03,0x02,0x78,0xe6,0x90,0x9e,0x0f,0xe0,0x60,0x03,0x02,0x7c,0xb1,0x90,0x9d,0xfb,
55552 -0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x8c,0x7e,0x08,0x12,0x2f,0xd9,
55553 -0x90,0x9d,0xa7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x44,0x7e,0x08,
55554 -0x12,0x2f,0xd9,0x90,0x9d,0xab,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
55555 -0x5c,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9d,0xaf,0x12,0x43,0x53,0x90,0x80,0x85,0x12,
55556 -0x2a,0x7f,0x7f,0x6c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xb3,0x12,0x43,0x53,0x90,
55557 -0x80,0x85,0x12,0x2a,0x7f,0x7f,0x70,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xb7,0x12,
55558 -0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x74,0x7e,0x0e,0x12,0x2f,0xd9,0x90,
55559 -0x9d,0xbb,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x78,0x7e,0x0e,0x12,
55560 -0x2f,0xd9,0x90,0x9d,0xbf,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x7c,
55561 -0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xc3,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,
55562 -0x7f,0x7f,0x80,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xc7,0x12,0x43,0x53,0x90,0x80,
55563 -0x85,0x12,0x2a,0x7f,0x7f,0x84,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xcb,0x12,0x43,
55564 -0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x88,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,
55565 -0xcf,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x8c,0x7e,0x0e,0x12,0x2f,
55566 -0xd9,0x90,0x9d,0xd3,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0xd0,0x7e,
55567 -0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xd7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,
55568 -0x7f,0xd4,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xdb,0x12,0x43,0x53,0x90,0x80,0x85,
55569 -0x12,0x2a,0x7f,0x7f,0xd8,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xdf,0x12,0x43,0x53,
55570 -0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0xdc,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xe3,
55571 -0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0xe0,0x7e,0x0e,0x12,0x2f,0xd9,
55572 -0x90,0x9d,0xe7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0xec,0x7e,0x0e,
55573 -0x12,0x2f,0xd9,0x90,0x9d,0xeb,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
55574 -0x04,0x7e,0x0c,0x12,0x2f,0xd9,0x90,0x9d,0xef,0x12,0x43,0x53,0x90,0x80,0x85,0x12,
55575 -0x2a,0x7f,0x7f,0x04,0x7e,0x0d,0x12,0x2f,0xd9,0x90,0x9d,0xf3,0x12,0x43,0x53,0x90,
55576 -0x80,0x85,0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,0x2f,0xd9,0x90,0x9d,0xf7,0x12,
55577 -0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x08,0x12,0x2f,0xd9,0x90,
55578 -0x9e,0x0f,0x74,0x01,0xf0,0x22,0x90,0x9e,0x0f,0xe0,0x64,0x01,0x60,0x02,0x81,0xb1,
55579 -0x7f,0x8c,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xfb,0x12,0x2a,0x7f,0x7f,0x44,0x7e,
55580 -0x08,0x12,0x27,0xde,0x90,0x9d,0xa7,0x12,0x2a,0x7f,0x7f,0x5c,0x7e,0x08,0x12,0x27,
55581 -0xde,0x90,0x9d,0xab,0x12,0x2a,0x7f,0x7f,0x6c,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,
55582 -0xaf,0x12,0x2a,0x7f,0x7f,0x70,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xb3,0x12,0x2a,
55583 -0x7f,0x7f,0x74,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xb7,0x12,0x2a,0x7f,0x7f,0x78,
55584 -0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xbb,0x12,0x2a,0x7f,0x7f,0x7c,0x7e,0x0e,0x12,
55585 -0x27,0xde,0x90,0x9d,0xbf,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x0e,0x12,0x27,0xde,0x90,
55586 -0x9d,0xc3,0x12,0x2a,0x7f,0x7f,0x84,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xc7,0x12,
55587 -0x2a,0x7f,0x7f,0x88,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xcb,0x12,0x2a,0x7f,0x7f,
55588 -0x8c,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xcf,0x12,0x2a,0x7f,0x7f,0xd0,0x7e,0x0e,
55589 -0x12,0x27,0xde,0x90,0x9d,0xd3,0x12,0x2a,0x7f,0x7f,0xd4,0x7e,0x0e,0x12,0x27,0xde,
55590 -0x90,0x9d,0xd7,0x12,0x2a,0x7f,0x7f,0xd8,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xdb,
55591 -0x12,0x2a,0x7f,0x7f,0xdc,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xdf,0x12,0x2a,0x7f,
55592 -0x7f,0xe0,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xe3,0x12,0x2a,0x7f,0x7f,0xec,0x7e,
55593 -0x0e,0x12,0x27,0xde,0x90,0x9d,0xe7,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x27,
55594 -0xde,0x90,0x9d,0xeb,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0d,0x12,0x27,0xde,0x90,0x9d,
55595 -0xef,0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,0x27,0xde,0x90,0x9d,0xf3,0x12,0x2a,
55596 -0x7f,0x7f,0x04,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xf7,0x12,0x2a,0x7f,0x7f,0x8c,
55597 -0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,
55598 -0x53,0xed,0x44,0xc0,0xfd,0xec,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,
55599 -0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x8c,0x7e,0x08,0x12,0x2f,0xd9,0x90,
55600 -0x80,0x85,0x12,0x2a,0x8b,0x00,0x01,0x00,0x00,0x7f,0x44,0x7e,0x08,0x12,0x2f,0xd9,
55601 -0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0xdb,0x25,0xa4,0x7f,0x5c,0x7e,0x08,0x12,0x2f,
55602 -0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0x6c,0x7e,0x0e,0x12,
55603 -0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0x70,0x7e,0x0e,
55604 -0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x04,0x1b,0x25,0xa4,0x7f,0x74,0x7e,
55605 -0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x04,0x1b,0x25,0xa4,0x7f,0x78,
55606 -0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x04,0x1b,0x25,0xa4,0x7f,
55607 -0x7c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x04,0x1b,0x25,0xa4,
55608 -0x7f,0x80,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x63,0xdb,0x25,
55609 -0xa4,0x7f,0x84,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x04,0x1b,
55610 -0x25,0xa4,0x7f,0x88,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,
55611 -0xdb,0x25,0xa4,0x7f,0x8c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,
55612 -0x20,0xdb,0x25,0xa4,0x7f,0xd0,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,
55613 -0x8b,0x20,0xdb,0x25,0xa4,0x7f,0xd4,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,
55614 -0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0xd8,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,
55615 -0x12,0x2a,0x8b,0x00,0x1b,0x25,0xa4,0x7f,0xdc,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,
55616 -0x85,0x12,0x2a,0x8b,0x00,0x1b,0x25,0xa4,0x7f,0xe0,0x7e,0x0e,0x12,0x2f,0xd9,0x90,
55617 -0x80,0x85,0x12,0x2a,0x8b,0x24,0xdb,0x25,0xa4,0x7f,0xec,0x7e,0x0e,0x12,0x2f,0xd9,
55618 -0x7f,0x04,0x7e,0x0c,0x12,0x27,0xde,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,
55619 -0x12,0x43,0x53,0xe4,0xff,0xec,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,
55620 -0x43,0x53,0xef,0x44,0x11,0xff,0xec,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,
55621 -0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x2f,0xd9,
55622 -0x7f,0x04,0x7e,0x0d,0x12,0x27,0xde,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,
55623 -0x12,0x43,0x53,0xef,0x54,0xf0,0xff,0xec,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,
55624 -0xa4,0x12,0x43,0x53,0xef,0x44,0x01,0xff,0xec,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,
55625 -0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0d,0x12,
55626 -0x2f,0xd9,0x7f,0x0c,0x7e,0x09,0x12,0x27,0xde,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,
55627 -0x9e,0xa4,0x12,0x43,0x53,0xe4,0xff,0xec,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,
55628 -0xa4,0x12,0x43,0x53,0xef,0x44,0x11,0xff,0xec,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,
55629 -0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,
55630 -0x2f,0xd9,0x7f,0x0c,0x7e,0x09,0x12,0x27,0xde,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,
55631 -0x9e,0xa4,0x12,0x43,0x53,0xed,0x54,0x0f,0xfd,0xec,0x54,0xf0,0xfc,0x90,0x9e,0xa4,
55632 -0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0xed,0x44,0x10,0xfd,0xec,0x44,0x01,
55633 -0xfc,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x85,
55634 -0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,0x2f,0xd9,0x7f,0x04,0x7e,0x08,0x12,0x27,
55635 -0xde,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0xef,0x54,0xf0,
55636 -0xff,0xec,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0xef,0x44,
55637 -0x01,0xff,0xec,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0x90,
55638 -0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x08,0x12,0x2f,0xd9,0xe4,0x90,0x9e,0x0f,
55639 -0xf0,0x22,0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x9e,0x1e,0xf0,0xe0,0x60,0x04,0xe0,
55640 -0xf4,0x70,0x21,0xa2,0xaf,0xe4,0x33,0xf5,0x59,0xc2,0xaf,0x90,0x00,0x47,0xe0,0x54,
55641 -0xfb,0xfd,0x7f,0x47,0x12,0x4e,0x30,0x7d,0x40,0x7f,0x01,0x12,0x36,0xaf,0xe5,0x59,
55642 -0x24,0xff,0x92,0xaf,0x22,0xe4,0xfd,0x7f,0x45,0x12,0x4e,0x30,0x90,0x04,0xfd,0xe4,
55643 -0xf0,0xa3,0xf0,0x90,0x9e,0x1e,0xf0,0x90,0x9e,0x24,0xf0,0x90,0x9e,0x27,0xf0,0x90,
55644 -0x9e,0x25,0xf0,0x90,0x9e,0x28,0xf0,0x90,0x9e,0x26,0xf0,0x90,0x9e,0x29,0xf0,0x90,
55645 -0x9e,0x10,0x04,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,0x15,0xf0,0x90,
55646 -0x9e,0x1a,0xf0,0x90,0x9e,0x1c,0xf0,0x90,0x9e,0x2e,0xf0,0x90,0x9e,0x1f,0xf0,0x90,
55647 -0x9e,0x1b,0xf0,0x90,0x9e,0x14,0xf0,0x90,0x00,0x51,0xe0,0x44,0xc0,0xfd,0x7f,0x51,
55648 -0x02,0x4e,0x30,0x90,0x9e,0x2e,0xe0,0x64,0x01,0x60,0x08,0x90,0x9e,0x1c,0xe0,0x60,
55649 -0x02,0xc1,0x1a,0x90,0x9e,0x10,0xe0,0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,
55650 -0x3b,0x90,0x9e,0x11,0xe0,0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x28,
55651 -0x90,0x9e,0x12,0xe0,0xc3,0x94,0xff,0x50,0x0a,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x11,
55652 -0xf0,0x80,0x15,0x90,0x9e,0x13,0xe0,0xc3,0x94,0xff,0x50,0x10,0xe0,0x04,0xf0,0xe4,
55653 -0x90,0x9e,0x12,0xf0,0x90,0x9e,0x11,0xf0,0x90,0x9e,0x10,0xf0,0x90,0x00,0x44,0xe0,
55654 -0x54,0x0c,0x60,0x76,0xe0,0x30,0xe2,0x32,0x90,0x9e,0x24,0xe0,0xc3,0x94,0xff,0x50,
55655 -0x05,0xe0,0x04,0xf0,0x80,0x24,0x90,0x9e,0x25,0xe0,0xc3,0x94,0xff,0x50,0x06,0xe0,
55656 -0x04,0xf0,0xe4,0x80,0x11,0x90,0x9e,0x26,0xe0,0xc3,0x94,0xff,0x50,0x0c,0xe0,0x04,
55657 -0xf0,0xe4,0x90,0x9e,0x25,0xf0,0x90,0x9e,0x24,0xf0,0x90,0x00,0x44,0xe0,0x30,0xe3,
55658 -0x32,0x90,0x9e,0x27,0xe0,0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,0x24,0x90,
55659 -0x9e,0x28,0xe0,0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x11,0x90,0x9e,
55660 -0x29,0xe0,0xc3,0x94,0xff,0x50,0x0c,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x28,0xf0,0x90,
55661 -0x9e,0x27,0xf0,0x90,0x04,0xfd,0xe0,0x44,0x01,0xf0,0x22,0x90,0x00,0x02,0x12,0x42,
55662 -0x20,0x90,0x9e,0x1c,0xf0,0x90,0x00,0x01,0x12,0x42,0x20,0x25,0xe0,0x25,0xe0,0x90,
55663 -0x9e,0x1b,0xf0,0x12,0x29,0xd9,0x25,0xe0,0x25,0xe0,0x90,0x9e,0x1f,0xf0,0x90,0x05,
55664 -0x60,0xe0,0x90,0x9e,0x2a,0xf0,0x90,0x05,0x61,0xe0,0x90,0x9e,0x2b,0xf0,0x90,0x05,
55665 -0x62,0xe0,0x90,0x9e,0x2c,0xf0,0x90,0x05,0x63,0xe0,0x90,0x9e,0x2d,0xf0,0xa2,0xaf,
55666 -0xe4,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x90,0x9e,0x1b,0xe0,0xff,0x12,0x52,0x17,
55667 -0x90,0x9e,0x3f,0xe0,0x24,0xff,0x92,0xaf,0x90,0x9e,0x1c,0xe0,0x70,0x02,0xe1,0x25,
55668 -0x90,0x9e,0x1b,0xe0,0x70,0x02,0xe1,0x25,0x90,0x9e,0x1f,0xe0,0x70,0x02,0xe1,0x25,
55669 -0xa2,0xaf,0xe4,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x90,0x9e,0x2e,0x74,0x01,0xf0,
55670 -0x90,0x9e,0x3f,0xe0,0x24,0xff,0x92,0xaf,0x12,0x4e,0x27,0x90,0x00,0x46,0xe0,0x44,
55671 -0x01,0xfd,0x7f,0x46,0x12,0x4e,0x30,0x90,0x9e,0x14,0xe0,0x60,0x15,0x90,0x9e,0x20,
55672 -0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,
55673 -0x80,0x06,0x90,0x05,0x22,0x74,0x7f,0xf0,0x90,0x00,0x45,0xe0,0x54,0xef,0xfd,0x7f,
55674 -0x45,0x12,0x4e,0x30,0x90,0x05,0x87,0xe0,0x64,0x80,0xf0,0x90,0x9e,0x2a,0xe0,0x90,
55675 -0x05,0x84,0xf0,0x90,0x9e,0x2b,0xe0,0x90,0x05,0x85,0xf0,0x90,0x9e,0x2c,0xe0,0x90,
55676 -0x05,0x86,0xf0,0x90,0x9e,0x2d,0xe0,0x90,0x05,0x87,0xf0,0xa2,0xaf,0xe4,0x33,0x90,
55677 -0x9e,0x3f,0xf0,0xc2,0xaf,0x90,0x01,0x3c,0xe0,0x44,0x20,0xf0,0x7d,0x20,0xe4,0xff,
55678 -0x12,0x37,0x00,0x80,0x2d,0x90,0x9e,0x1c,0xe0,0x70,0x2f,0x90,0x9e,0x2e,0x12,0x4e,
55679 -0x26,0x90,0x00,0x46,0xe0,0x54,0xfe,0xfd,0x7f,0x46,0x12,0x4e,0x30,0x90,0x05,0x22,
55680 -0xe4,0xf0,0xa2,0xaf,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x7d,0x20,0xe4,0xff,0x12,
55681 -0x36,0x92,0x90,0x9e,0x3f,0xe0,0x24,0xff,0x92,0xaf,0x22,0x00,0x0e,0x56,};
55682 -#else
55683 -
55684 -
55685 -// =================== v80 TSMC COMMON 2011-12-14 =======================
55686 -u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayLength] = {
55687 -0xc1,0x88,0x02,0x00,0x50,0x00,0x00,0x00,0x12,0x14,0x15,0x52,0xd4,0x3e,0x00,0x00,
55688 -0x25,0x86,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
55689 -0x02,0x43,0xba,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
55690 -0x00,0x00,0x00,0x02,0x48,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
55691 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
55692 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
55693 -0x00,0x00,0x00,0x02,0x5e,0xff,0x00,0x00,0x00,0x00,0x00,0xa1,0xd4,0x00,0x00,0x00,
55694 -0x05,0x04,0x03,0x02,0x00,0x03,0x06,0x05,0x04,0x03,0x00,0x04,0x06,0x05,0x04,0x02,
55695 -0x00,0x04,0x08,0x07,0x06,0x04,0x00,0x06,0x0a,0x09,0x08,0x06,0x00,0x08,0x0a,0x09,
55696 -0x08,0x04,0x00,0x08,0x0a,0x09,0x08,0x02,0x00,0x08,0x0a,0x09,0x08,0x00,0x00,0x08,
55697 -0x12,0x11,0x10,0x08,0x00,0x10,0x1a,0x19,0x18,0x10,0x00,0x18,0x22,0x21,0x20,0x18,
55698 -0x00,0x20,0x22,0x21,0x20,0x10,0x00,0x20,0x22,0x21,0x20,0x08,0x00,0x20,0x22,0x21,
55699 -0x1c,0x08,0x00,0x20,0x22,0x21,0x14,0x08,0x00,0x20,0x22,0x20,0x18,0x08,0x00,0x20,
55700 -0x31,0x30,0x20,0x10,0x00,0x30,0x31,0x30,0x18,0x00,0x00,0x30,0x31,0x2f,0x10,0x10,
55701 -0x00,0x30,0x31,0x2c,0x10,0x10,0x00,0x30,0x31,0x28,0x10,0x00,0x00,0x30,0x31,0x20,
55702 -0x10,0x00,0x00,0x30,0x31,0x10,0x10,0x00,0x00,0x30,0x04,0x04,0x04,0x05,0x04,0x04,
55703 -0x04,0x05,0x05,0x05,0x06,0x06,0x04,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x04,0x04,
55704 -0x05,0x05,0x05,0x05,0x06,0x06,0x04,0x04,0x05,0x05,0x05,0x05,0x06,0x07,0x0a,0x0b,
55705 -0x0d,0x10,0x04,0x05,0x05,0x06,0x06,0x09,0x0c,0x11,0x08,0x08,0x09,0x09,0x0a,0x0c,
55706 -0x10,0x11,0x04,0x04,0x04,0x05,0x04,0x04,0x05,0x07,0x07,0x07,0x08,0x0a,0x04,0x04,
55707 -0x04,0x04,0x06,0x0a,0x0b,0x0d,0x05,0x05,0x07,0x07,0x08,0x0b,0x0d,0x0f,0x04,0x04,
55708 -0x04,0x05,0x07,0x07,0x09,0x09,0x0c,0x0e,0x10,0x12,0x04,0x04,0x05,0x05,0x06,0x0a,
55709 -0x11,0x13,0x09,0x09,0x09,0x09,0x0c,0x0e,0x11,0x13,0x00,0x00,0x00,0x00,0x00,0x00,
55710 -0x00,0x00,0x00,0x24,0x26,0x2a,0x18,0x1a,0x1d,0x1f,0x21,0x27,0x29,0x2a,0x00,0x00,
55711 -0x00,0x1f,0x23,0x28,0x2a,0x2c,0x00,0x04,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x18,
55712 -0x00,0x24,0x00,0x30,0x00,0x48,0x00,0x60,0x00,0x90,0x00,0xc0,0x00,0xd8,0x00,0x50,
55713 -0x00,0x78,0x00,0xa0,0x00,0xc8,0x01,0x40,0x01,0x90,0x01,0xe0,0x02,0x30,0x01,0x2c,
55714 -0x01,0x40,0x01,0xe0,0x02,0xd0,0x03,0xe8,0x04,0xb0,0x06,0x40,0x07,0xd0,0x00,0x02,
55715 -0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x0c,0x00,0x12,0x00,0x18,0x00,0x24,0x00,0x30,
55716 -0x00,0x48,0x00,0x60,0x00,0x6c,0x00,0x28,0x00,0x3c,0x00,0x50,0x00,0x64,0x00,0xa0,
55717 -0x00,0xc8,0x00,0xf0,0x01,0x18,0x00,0x64,0x00,0xa0,0x00,0xf0,0x01,0x68,0x01,0xf4,
55718 -0x02,0x58,0x03,0x20,0x03,0xe8,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x04,0x04,
55719 -0x05,0x07,0x04,0x04,0x07,0x0a,0x0a,0x0c,0x0c,0x12,0x05,0x07,0x07,0x08,0x0b,0x12,
55720 -0x24,0x3c,0x01,0x01,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x01,0x02,
55721 -0x03,0x04,0x05,0x06,0x07,0x08,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x20,0x1e,
55722 -0x1c,0x18,0x10,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
55723 -0xbb,0x01,0x0c,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe0,0x22,0x50,
55724 -0x06,0xe9,0x25,0x82,0xf8,0xe6,0x22,0xbb,0xfe,0x06,0xe9,0x25,0x82,0xf8,0xe2,0x22,
55725 -0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe4,0x93,0x22,0xbb,0x01,0x06,
55726 -0x89,0x82,0x8a,0x83,0xf0,0x22,0x50,0x02,0xf7,0x22,0xbb,0xfe,0x01,0xf3,0x22,0xf8,
55727 -0xbb,0x01,0x0d,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe8,0xf0,0x22,
55728 -0x50,0x06,0xe9,0x25,0x82,0xc8,0xf6,0x22,0xbb,0xfe,0x05,0xe9,0x25,0x82,0xc8,0xf2,
55729 -0x22,0xc5,0xf0,0xf8,0xa3,0xe0,0x28,0xf0,0xc5,0xf0,0xf8,0xe5,0x82,0x15,0x82,0x70,
55730 -0x02,0x15,0x83,0xe0,0x38,0xf0,0x22,0xbb,0x01,0x0a,0x89,0x82,0x8a,0x83,0xe0,0xf5,
55731 -0xf0,0xa3,0xe0,0x22,0x50,0x06,0x87,0xf0,0x09,0xe7,0x19,0x22,0xbb,0xfe,0x07,0xe3,
55732 -0xf5,0xf0,0x09,0xe3,0x19,0x22,0x89,0x82,0x8a,0x83,0xe4,0x93,0xf5,0xf0,0x74,0x01,
55733 -0x93,0x22,0xbb,0x01,0x10,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe0,
55734 -0xf5,0xf0,0xa3,0xe0,0x22,0x50,0x09,0xe9,0x25,0x82,0xf8,0x86,0xf0,0x08,0xe6,0x22,
55735 -0xbb,0xfe,0x0a,0xe9,0x25,0x82,0xf8,0xe2,0xf5,0xf0,0x08,0xe2,0x22,0xe5,0x83,0x2a,
55736 -0xf5,0x83,0xe9,0x93,0xf5,0xf0,0xa3,0xe9,0x93,0x22,0xbb,0x01,0x0a,0x89,0x82,0x8a,
55737 -0x83,0xf0,0xe5,0xf0,0xa3,0xf0,0x22,0x50,0x06,0xf7,0x09,0xa7,0xf0,0x19,0x22,0xbb,
55738 -0xfe,0x06,0xf3,0xe5,0xf0,0x09,0xf3,0x19,0x22,0xf8,0xbb,0x01,0x11,0xe5,0x82,0x29,
55739 -0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe8,0xf0,0xe5,0xf0,0xa3,0xf0,0x22,0x50,0x09,
55740 -0xe9,0x25,0x82,0xc8,0xf6,0x08,0xa6,0xf0,0x22,0xbb,0xfe,0x09,0xe9,0x25,0x82,0xc8,
55741 -0xf2,0xe5,0xf0,0x08,0xf2,0x22,0xef,0x4b,0xff,0xee,0x4a,0xfe,0xed,0x49,0xfd,0xec,
55742 -0x48,0xfc,0x22,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x22,0xa4,
55743 -0x25,0x82,0xf5,0x82,0xe5,0xf0,0x35,0x83,0xf5,0x83,0x22,0xe0,0xfb,0xa3,0xe0,0xfa,
55744 -0xa3,0xe0,0xf9,0x22,0xf8,0xe0,0xfb,0xa3,0xa3,0xe0,0xf9,0x25,0xf0,0xf0,0xe5,0x82,
55745 -0x15,0x82,0x70,0x02,0x15,0x83,0xe0,0xfa,0x38,0xf0,0x22,0xeb,0xf0,0xa3,0xea,0xf0,
55746 -0xa3,0xe9,0xf0,0x22,0xd0,0x83,0xd0,0x82,0xf8,0xe4,0x93,0x70,0x12,0x74,0x01,0x93,
55747 -0x70,0x0d,0xa3,0xa3,0x93,0xf8,0x74,0x01,0x93,0xf5,0x82,0x88,0x83,0xe4,0x73,0x74,
55748 -0x02,0x93,0x68,0x60,0xef,0xa3,0xa3,0xa3,0x80,0xdf,0x02,0x43,0xf8,0x02,0x50,0x2e,
55749 -0xe4,0x93,0xa3,0xf8,0xe4,0x93,0xa3,0x40,0x03,0xf6,0x80,0x01,0xf2,0x08,0xdf,0xf4,
55750 -0x80,0x29,0xe4,0x93,0xa3,0xf8,0x54,0x07,0x24,0x0c,0xc8,0xc3,0x33,0xc4,0x54,0x0f,
55751 -0x44,0x20,0xc8,0x83,0x40,0x04,0xf4,0x56,0x80,0x01,0x46,0xf6,0xdf,0xe4,0x80,0x0b,
55752 -0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x90,0x44,0x3d,0xe4,0x7e,0x01,0x93,0x60,
55753 -0xbc,0xa3,0xff,0x54,0x3f,0x30,0xe5,0x09,0x54,0x1f,0xfe,0xe4,0x93,0xa3,0x60,0x01,
55754 -0x0e,0xcf,0x54,0xc0,0x25,0xe0,0x60,0xa8,0x40,0xb8,0xe4,0x93,0xa3,0xfa,0xe4,0x93,
55755 -0xa3,0xf8,0xe4,0x93,0xa3,0xc8,0xc5,0x82,0xc8,0xca,0xc5,0x83,0xca,0xf0,0xa3,0xc8,
55756 -0xc5,0x82,0xc8,0xca,0xc5,0x83,0xca,0xdf,0xe9,0xde,0xe7,0x80,0xbe,0x41,0x9e,0x4f,
55757 -0x00,0x41,0x9e,0xad,0x00,0x41,0x9e,0x61,0x80,0x41,0x9e,0x62,0x80,0x41,0x9e,0xaf,
55758 -0x00,0x00,0xf0,0x90,0x9e,0x6b,0xe0,0x90,0x9e,0x87,0xf0,0xe4,0xfb,0xfd,0x7f,0x54,
55759 -0x7e,0x01,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x85,0xeb,0xf0,0xa3,0xe0,
55760 -0xfb,0xa3,0xe0,0xf5,0x44,0xe4,0xf5,0x45,0x12,0x35,0xab,0xd0,0xd0,0x92,0xaf,0x22,
55761 -0x90,0x01,0x5f,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x08,0xf0,0xe4,0x90,0x9e,0x86,0xf0,
55762 -0x90,0x9e,0x69,0xe0,0x90,0x9e,0x87,0xf0,0xe4,0xfb,0xfd,0x7f,0x5c,0x7e,0x01,0x91,
55763 -0x62,0x90,0x01,0x5f,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x02,0xf0,0x90,0x9e,0x70,
55764 -0x14,0xf0,0xe5,0x23,0x54,0x0f,0xc3,0x94,0x0c,0x50,0x02,0xf1,0x2b,0x22,0x8f,0x82,
55765 -0x8e,0x83,0xa3,0xa3,0xa3,0xe4,0xf0,0x22,0xe4,0xf5,0x71,0x7f,0x60,0x7e,0x01,0x80,
55766 -0xed,0x7d,0x01,0xaf,0x24,0xe1,0x2f,0xb1,0xa6,0xbf,0x01,0x0f,0x90,0x9e,0x51,0xe0,
55767 -0xff,0xe4,0xfd,0xf1,0xd0,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0x53,0x23,0xf0,0x43,
55768 -0x23,0x01,0x91,0xfd,0x91,0xfe,0x53,0x23,0xf0,0x43,0x23,0x02,0x22,0x22,0x22,0x22,
55769 -0x22,0x00,0x00,0x02,0x5f,0x91,0x02,0x5f,0x98,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
55770 -0x8b,0x1b,0x8a,0x1c,0x89,0x1d,0x90,0x9e,0x88,0x71,0x8b,0xab,0x1e,0xaa,0x1f,0xa9,
55771 -0x20,0x90,0x9e,0x8b,0x71,0x8b,0xaf,0x21,0x15,0x21,0xef,0x60,0x1b,0x90,0x9e,0x8b,
55772 -0xe4,0x75,0xf0,0x01,0x71,0x74,0x12,0x29,0xd9,0xff,0x90,0x9e,0x88,0xe4,0x75,0xf0,
55773 -0x01,0x71,0x74,0xef,0x51,0x4d,0x80,0xde,0xab,0x1b,0xaa,0x1c,0xa9,0x1d,0xd0,0xd0,
55774 -0x92,0xaf,0x22,0x90,0x06,0xa9,0xe0,0x90,0x9e,0x2f,0xf0,0xe0,0x54,0xc0,0x70,0x08,
55775 -0x53,0x26,0xfe,0x53,0x26,0xfd,0x91,0xd1,0x90,0x9e,0x2f,0xe0,0x30,0xe6,0x13,0x43,
55776 -0x26,0x01,0x90,0x9e,0x73,0xe0,0x64,0x02,0x60,0x04,0x91,0xd7,0x80,0x07,0x91,0x80,
55777 -0x80,0x03,0x53,0x26,0xfe,0x90,0x9e,0x2f,0xe0,0x30,0xe7,0x16,0x43,0x26,0x02,0xe4,
55778 -0x90,0x9e,0x86,0x91,0x52,0x90,0x01,0x57,0x74,0x05,0xf0,0x90,0x9e,0x74,0x74,0x01,
55779 -0xf0,0x22,0x53,0x26,0xfd,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x04,0x1d,
55780 -0xe0,0x60,0x1a,0x90,0x05,0x22,0xe0,0x54,0x90,0x60,0x07,0x90,0x01,0xc6,0xe0,0x44,
55781 -0x40,0xf0,0x90,0x01,0xc7,0xe0,0x30,0xe1,0xe4,0x7f,0x00,0x80,0x02,0x7f,0x01,0xd0,
55782 -0xd0,0x92,0xaf,0x22,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,
55783 -0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,
55784 -0x07,0x90,0x01,0xc4,0x74,0xd4,0xf0,0x74,0x45,0xa3,0xf0,0x53,0x91,0xdf,0x90,0x01,
55785 -0x3c,0xe0,0x55,0x30,0xf5,0x34,0xa3,0xe0,0x55,0x31,0xf5,0x35,0xa3,0xe0,0x55,0x32,
55786 -0xf5,0x36,0xa3,0xe0,0x55,0x33,0xf5,0x37,0xe5,0x34,0x30,0xe0,0x06,0x90,0x01,0x3c,
55787 -0x74,0x01,0xf0,0xe5,0x34,0x30,0xe1,0x09,0x90,0x01,0x3c,0x74,0x02,0xf0,0x12,0x66,
55788 -0x09,0xe5,0x34,0x30,0xe2,0x38,0x90,0x01,0x3c,0x74,0x04,0xf0,0x90,0x06,0x92,0xe0,
55789 -0x30,0xe0,0x24,0x90,0x9e,0x86,0xe4,0xf0,0x90,0x9e,0x69,0xe0,0x90,0x9e,0x87,0xf0,
55790 -0xe4,0xfb,0xfd,0x7f,0x58,0x7e,0x01,0x91,0x62,0x90,0x01,0x5b,0x74,0x05,0xf0,0x90,
55791 -0x06,0x92,0x74,0x01,0xf0,0x80,0x07,0x90,0x9e,0x71,0xe4,0xf0,0x91,0xd1,0xe5,0x34,
55792 -0x30,0xe3,0x38,0x90,0x01,0x3c,0x74,0x08,0xf0,0x90,0x06,0x92,0xe0,0x30,0xe1,0x24,
55793 -0x90,0x9e,0x86,0xe4,0xf0,0x90,0x9e,0x69,0xe0,0x90,0x9e,0x87,0xf0,0xe4,0xfb,0xfd,
55794 -0x7f,0x5c,0x7e,0x01,0x91,0x62,0x90,0x01,0x5f,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,
55795 -0x02,0xf0,0x80,0x07,0x90,0x9e,0x70,0xe4,0xf0,0x91,0xd1,0xe5,0x34,0x30,0xe4,0x09,
55796 -0x90,0x01,0x3c,0x74,0x10,0xf0,0x12,0x73,0x66,0xe5,0x34,0x30,0xe5,0x09,0x90,0x01,
55797 -0x3c,0x74,0x20,0xf0,0x12,0x52,0x64,0xe5,0x35,0x30,0xe0,0x18,0x90,0x01,0x3d,0x74,
55798 -0x01,0xf0,0x90,0x01,0x2f,0xe0,0x44,0x7f,0xf0,0x90,0x00,0x83,0xe0,0xf5,0x24,0x12,
55799 -0x64,0xe3,0x91,0xd1,0xe5,0x35,0x30,0xe2,0x06,0x90,0x01,0x3d,0x74,0x04,0xf0,0xe5,
55800 -0x36,0x30,0xe0,0x06,0x90,0x01,0x3e,0x74,0x01,0xf0,0xe5,0x36,0x30,0xe1,0x06,0x90,
55801 -0x01,0x3e,0x74,0x02,0xf0,0x74,0xd4,0x04,0x90,0x01,0xc4,0xf0,0x74,0x45,0xa3,0xf0,
55802 -0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,
55803 -0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,0x32,0x7d,0x01,0x7f,0x0c,0x90,
55804 -0x9e,0xa6,0xed,0xf0,0x90,0x9e,0xa5,0xef,0xf0,0x54,0x0f,0xff,0xe5,0x23,0x54,0x0f,
55805 -0x6f,0x60,0x70,0x90,0x9e,0xa5,0xe0,0x30,0xe2,0x2a,0xe5,0x23,0x20,0xe2,0x05,0x7f,
55806 -0x01,0x12,0x63,0xf3,0xe5,0x23,0x30,0xe3,0x09,0x90,0x9e,0xa5,0xe0,0x20,0xe3,0x02,
55807 -0x80,0x52,0xe5,0x23,0x20,0xe3,0x4c,0x90,0x9e,0xa5,0xe0,0x30,0xe3,0x45,0xa3,0xe0,
55808 -0xff,0x02,0x5e,0x95,0xe5,0x23,0x54,0x0f,0xff,0xbf,0x0c,0x0f,0x90,0x9e,0xa5,0xe0,
55809 -0x20,0xe3,0x08,0x12,0x62,0xd7,0xef,0x60,0x2a,0xf1,0xb4,0xe5,0x23,0x54,0x0f,0xff,
55810 -0xbf,0x04,0x10,0x90,0x9e,0xa5,0xe0,0x20,0xe2,0x09,0x12,0x63,0x20,0xef,0x60,0x13,
55811 -0x12,0x61,0x3a,0xe5,0x23,0x54,0x0f,0xff,0xbf,0x02,0x08,0x12,0x63,0x83,0xef,0x60,
55812 -0x02,0x91,0xec,0x22,0x90,0x06,0x04,0xe0,0x44,0x40,0xf0,0xe5,0x22,0xb4,0x01,0x05,
55813 -0x7f,0x01,0x12,0x5e,0x5c,0x53,0x23,0xf0,0x43,0x23,0x04,0x22,0xe0,0xff,0x7d,0x01,
55814 -0x90,0x9e,0x99,0xef,0xf0,0xa3,0xed,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xe5,0x25,0x60,
55815 -0x05,0xe4,0xff,0x12,0x61,0x1f,0x90,0x9e,0x99,0xe0,0x30,0xe0,0x09,0x90,0x9e,0x9b,
55816 -0xe4,0xf0,0xa3,0x74,0x80,0xf0,0x90,0x9e,0x99,0xe0,0xff,0xc3,0x13,0x90,0xfd,0x10,
55817 -0xf0,0x90,0x04,0x25,0xef,0xf0,0x90,0x9e,0x9a,0xe0,0x60,0x1f,0xa3,0xa3,0xe0,0xff,
55818 -0x24,0x0f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x80,0xf0,0x74,0x10,0x2f,
55819 -0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x80,0xf0,0x90,0x9e,0x9b,0xa3,0xe0,
55820 -0xff,0xfd,0x24,0x08,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe4,0xf0,0x74,0x09,0x2d,
55821 -0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xf0,0xf0,0x74,0x21,0x2f,0xf5,0x82,
55822 -0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xf7,0xf0,0x90,0x9e,0x9b,0xe0,0xfe,0xa3,0xe0,
55823 -0xff,0x22,0x12,0x45,0xa6,0xbf,0x01,0x10,0x90,0x02,0x09,0xe0,0xff,0x7d,0x01,0x12,
55824 -0x47,0xd0,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,
55825 -0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,
55826 -0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x01,0xc4,0x74,0x79,0xf0,0x74,0x48,0xa3,0xf0,
55827 -0x90,0x01,0x34,0xe0,0x55,0x28,0xf5,0x2c,0x90,0x01,0x36,0xe0,0x55,0x2a,0xf5,0x2e,
55828 -0xa3,0xe0,0x55,0x2b,0xf5,0x2f,0xe5,0x2c,0x20,0xe0,0x02,0x41,0x17,0x90,0x01,0x34,
55829 -0x74,0x01,0xf0,0x85,0xd1,0x08,0x85,0xd2,0x09,0x85,0xd3,0x0a,0x85,0xd4,0x0b,0x85,
55830 -0xd5,0x0c,0x85,0xd6,0x0d,0x85,0xd7,0x0e,0x85,0xd9,0x0f,0xe5,0x0f,0x54,0x40,0xc3,
55831 -0x13,0xff,0xe5,0x0e,0x54,0x20,0x6f,0x70,0x02,0x21,0xc9,0xe5,0x0f,0x30,0xe5,0x02,
55832 -0x21,0xc9,0xe5,0x0d,0x54,0x3f,0xf5,0x4d,0xe5,0x08,0x54,0x3f,0xf5,0x4e,0xe5,0x0c,
55833 -0x54,0x1f,0xff,0xe5,0x4d,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,
55834 -0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x0e,0x54,0x1f,0xff,0xe5,0x4d,0x25,0xe0,0x24,
55835 -0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x4e,
55836 -0xd3,0x94,0x04,0x40,0x03,0x75,0x4e,0x04,0x75,0xf0,0x0a,0xe5,0x4d,0x90,0x90,0x00,
55837 -0x12,0x43,0x5f,0x75,0xf0,0x02,0xe5,0x4e,0x12,0x43,0x5f,0xe0,0xfe,0xa3,0xe0,0xff,
55838 -0xe5,0x0e,0x54,0x1f,0x2f,0xff,0xe4,0x3e,0xfe,0x75,0xf0,0x0a,0xe5,0x4d,0x90,0x90,
55839 -0x00,0x12,0x43,0x5f,0x75,0xf0,0x02,0xe5,0x4e,0x12,0x43,0x5f,0xee,0xf0,0xa3,0xef,
55840 -0xf0,0xe5,0x0f,0x20,0xe6,0x24,0xe5,0x0e,0x54,0x1f,0xff,0xe5,0x4d,0x25,0xe0,0x24,
55841 -0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x0a,
55842 -0x30,0xe7,0x36,0xaf,0x4d,0x12,0x5b,0x68,0x80,0x2f,0xe5,0x0e,0x54,0x1f,0xff,0xe5,
55843 -0x4d,0x25,0xe0,0x24,0x44,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0x8f,0xf0,0x12,
55844 -0x42,0x81,0xe5,0x0a,0x30,0xe7,0x12,0xe5,0x0a,0x54,0x7f,0xfd,0xe5,0x0e,0x54,0x1f,
55845 -0xf5,0x53,0xab,0x4e,0xaf,0x4d,0x12,0x5b,0x05,0xe5,0x25,0x14,0x24,0xfd,0x50,0x02,
55846 -0x80,0x45,0x90,0x9e,0x73,0xe0,0x60,0x37,0x90,0x01,0x5b,0xe4,0xf0,0x90,0x01,0x3c,
55847 -0x74,0x04,0xf0,0x71,0xc4,0xef,0x64,0x01,0x70,0x2d,0x90,0x9e,0x69,0xe0,0xf5,0x44,
55848 -0x75,0x45,0x00,0xe4,0xfb,0xfd,0x7f,0x58,0x7e,0x01,0x12,0x35,0xab,0x90,0x01,0x5b,
55849 -0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x01,0xf0,0x90,0x9e,0x71,0xf0,0x80,0x08,0x71,
55850 -0xc4,0xbf,0x01,0x03,0x12,0x44,0xd1,0xe5,0x2c,0x30,0xe1,0x21,0x90,0x01,0x34,0x74,
55851 -0x02,0xf0,0x85,0xd1,0x13,0x85,0xd2,0x14,0x85,0xd3,0x15,0x85,0xd4,0x16,0x85,0xd5,
55852 -0x17,0x85,0xd6,0x18,0x85,0xd7,0x19,0x85,0xd9,0x1a,0x12,0x5c,0x46,0xe5,0x2c,0x30,
55853 -0xe3,0x06,0x90,0x01,0x34,0x74,0x08,0xf0,0xe5,0x2c,0x30,0xe4,0x09,0x90,0x01,0x34,
55854 -0x74,0x10,0xf0,0x43,0x12,0x10,0xe5,0x2c,0x30,0xe5,0x24,0x90,0x01,0xcf,0xe0,0x30,
55855 -0xe5,0x1d,0xe0,0x54,0xdf,0xf0,0x90,0x01,0x34,0x74,0x20,0xf0,0x75,0xa8,0x00,0x75,
55856 -0xe8,0x00,0xd1,0xdb,0x90,0x00,0x03,0xe0,0x54,0xfb,0xf0,0x71,0xdb,0x80,0xfe,0xe5,
55857 -0x2c,0x30,0xe6,0x06,0x90,0x01,0x34,0x74,0x40,0xf0,0xe5,0x2e,0x30,0xe0,0x12,0x90,
55858 -0x9e,0x5f,0x74,0x01,0xf0,0x90,0x01,0x36,0xf0,0x12,0x65,0xa3,0x90,0x9e,0x5f,0xe4,
55859 -0xf0,0xe5,0x2e,0x30,0xe1,0x3b,0x90,0x01,0x36,0x74,0x02,0xf0,0x43,0x12,0x40,0x90,
55860 -0x01,0x02,0xe0,0x54,0x03,0x64,0x01,0x70,0x28,0x90,0x01,0x37,0xe0,0x30,0xe0,0x0a,
55861 -0x74,0x01,0xf0,0x90,0x9e,0x4f,0xe4,0xf0,0x80,0x17,0x90,0x9e,0x4f,0xe0,0x04,0xf0,
55862 -0xe0,0xc3,0x94,0x0a,0x40,0x0b,0xe4,0xf0,0x90,0x04,0x19,0xe0,0x30,0xe0,0x02,0x11,
55863 -0x62,0xe5,0x2e,0x30,0xe2,0x09,0x90,0x01,0x36,0x74,0x04,0xf0,0x12,0x65,0x3b,0xe5,
55864 -0x2e,0x30,0xe3,0x28,0x90,0x01,0x36,0x74,0x08,0xf0,0xe5,0x22,0x64,0x01,0x70,0x1c,
55865 -0xe5,0x25,0x60,0x18,0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,
55866 -0x9e,0x86,0xe4,0x12,0x44,0x52,0x90,0x01,0x57,0x74,0x05,0xf0,0xe5,0x2e,0x30,0xe4,
55867 -0x2b,0x90,0x01,0x36,0x74,0x10,0xf0,0xe5,0x22,0xb4,0x01,0x20,0xe5,0x25,0x60,0x1c,
55868 -0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,0x9e,0x74,0xe4,0xf0,
55869 -0x53,0x26,0xfd,0xe5,0x26,0x54,0x07,0x70,0x03,0x12,0x44,0xd1,0xe5,0x2e,0x30,0xe5,
55870 -0x1f,0x90,0x01,0x36,0x74,0x20,0xf0,0xe5,0x22,0xb4,0x01,0x14,0xe5,0x25,0x60,0x10,
55871 -0x90,0x9e,0x73,0xe0,0x64,0x02,0x60,0x05,0x12,0x44,0xd7,0x80,0x03,0x12,0x44,0x80,
55872 -0xe5,0x2e,0x30,0xe6,0x1b,0x90,0x01,0x36,0x74,0x40,0xf0,0xe5,0x22,0xb4,0x01,0x10,
55873 -0xe5,0x25,0x60,0x0c,0x53,0x26,0xfe,0xe5,0x26,0x54,0x07,0x70,0x03,0x12,0x44,0xd1,
55874 -0xe5,0x2f,0x30,0xe1,0x09,0x90,0x01,0x37,0x74,0x02,0xf0,0x12,0x61,0x92,0x74,0x79,
55875 -0x04,0x90,0x01,0xc4,0xf0,0x74,0x48,0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,
55876 -0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,
55877 -0xf0,0xd0,0xe0,0x32,0x90,0x04,0x1b,0xe0,0x54,0x7f,0x64,0x7f,0x7f,0x01,0x60,0x02,
55878 -0x7f,0x00,0x22,0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0xd3,0x10,0xaf,0x01,0xc3,
55879 -0xc0,0xd0,0x7f,0x10,0xdf,0xfe,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,
55880 -0xc0,0xd0,0x90,0x9e,0xac,0xed,0xf0,0x90,0x9e,0xab,0xef,0xf0,0xd3,0x94,0x07,0x50,
55881 -0x63,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,
55882 -0x90,0x00,0x47,0xe0,0x5f,0xf0,0x71,0xdb,0x90,0x9e,0xab,0xe0,0xff,0x74,0x01,0xa8,
55883 -0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x46,0xe0,0x4f,0xf0,0x71,
55884 -0xdb,0x90,0x9e,0xac,0xe0,0x60,0x16,0x90,0x9e,0xab,0xe0,0xff,0x74,0x01,0xa8,0x07,
55885 -0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x45,0x80,0x66,0x90,0x9e,0xab,
55886 -0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,
55887 -0x00,0x45,0x80,0x6b,0x90,0x9e,0xab,0xe0,0x24,0xf8,0xf0,0xe0,0xff,0x74,0x01,0xa8,
55888 -0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0x71,0xd3,0x90,0x9e,0xab,
55889 -0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,
55890 -0x43,0xe0,0x4f,0xf0,0x71,0xdb,0x90,0x9e,0xac,0xe0,0x60,0x1b,0x90,0x9e,0xab,0xe0,
55891 -0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0xff,
55892 -0x90,0x00,0x42,0xe0,0x4f,0x80,0x1a,0x90,0x9e,0xab,0xe0,0xff,0x74,0x01,0xa8,0x07,
55893 -0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0xf4,0xff,0x90,0x00,0x42,0xe0,
55894 -0x5f,0xf0,0x71,0xdb,0xd0,0xd0,0x92,0xaf,0x22,0xf0,0x90,0x00,0x45,0xe0,0x54,0xfe,
55895 -0xfd,0x7f,0x45,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x8f,0x82,0x75,0x83,0x00,0xed,
55896 -0xf0,0x71,0xdb,0xd0,0xd0,0x92,0xaf,0x22,0xef,0x14,0x60,0x30,0x14,0x60,0x66,0x24,
55897 -0x02,0x60,0x02,0xa1,0x9f,0x90,0x9e,0x1a,0x74,0x02,0xf0,0x90,0x00,0x48,0xe0,0x44,
55898 -0x0c,0xfd,0x7f,0x48,0x91,0xe3,0x90,0x00,0x47,0xe0,0x44,0x08,0xfd,0x7f,0x47,0x91,
55899 -0xe3,0x90,0x00,0x45,0xe0,0x44,0x10,0xfd,0x7f,0x45,0x80,0x71,0xe4,0x90,0x9e,0x1a,
55900 -0xf0,0x90,0x9e,0x16,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,
55901 -0x08,0x12,0x2f,0xd9,0x90,0x00,0x45,0xe0,0x44,0xef,0xfd,0x7f,0x45,0x91,0xe3,0x90,
55902 -0x00,0x45,0xe0,0x54,0xef,0xfd,0x7f,0x45,0x91,0xe3,0x90,0x00,0x46,0xe0,0x44,0x10,
55903 -0xfd,0x7f,0x46,0x80,0x38,0x90,0x9e,0x1a,0x74,0x01,0xf0,0x90,0x9e,0x20,0x12,0x43,
55904 -0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x00,
55905 -0x45,0xe0,0x44,0x20,0xfd,0x7f,0x45,0x91,0xe3,0x90,0x00,0x45,0xe0,0x44,0x10,0xfd,
55906 -0x7f,0x45,0x91,0xe3,0x90,0x00,0x46,0xe0,0x44,0x10,0xfd,0x7f,0x46,0x91,0xe3,0x22,
55907 -0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x9e,0x1c,0xf0,0x90,0x00,0x01,0x12,0x42,0x20,
55908 -0x25,0xe0,0x25,0xe0,0x90,0x9e,0x1b,0xf0,0x12,0x29,0xd9,0x25,0xe0,0x25,0xe0,0x90,
55909 -0x9e,0x1f,0xf0,0x90,0x05,0x60,0xe0,0x90,0x9e,0x2a,0xf0,0x90,0x05,0x61,0xe0,0x90,
55910 -0x9e,0x2b,0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x2c,0xf0,0x90,0x05,0x63,0xe0,0x90,
55911 -0x9e,0x2d,0xf0,0xa2,0xaf,0xe4,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x90,0x9e,0x1b,
55912 -0xe0,0xff,0x12,0x52,0x12,0x90,0x9e,0x3f,0xe0,0x24,0xff,0x92,0xaf,0x90,0x9e,0x1c,
55913 -0xe0,0x70,0x02,0xc1,0xa7,0x90,0x9e,0x1b,0xe0,0x70,0x02,0xc1,0xa7,0x90,0x9e,0x1f,
55914 -0xe0,0x70,0x02,0xc1,0xa7,0xa2,0xaf,0xe4,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x90,
55915 -0x9e,0x2e,0x74,0x01,0xf0,0x90,0x9e,0x3f,0xe0,0x24,0xff,0x92,0xaf,0x91,0xda,0x90,
55916 -0x00,0x46,0xe0,0x44,0x01,0xfd,0x7f,0x46,0x91,0xe3,0x90,0x9e,0x14,0xe0,0x60,0x15,
55917 -0x90,0x9e,0x20,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,
55918 -0x12,0x2f,0xd9,0x80,0x06,0x90,0x05,0x22,0x74,0x7f,0xf0,0x90,0x00,0x45,0xe0,0x54,
55919 -0xef,0xfd,0x7f,0x45,0x91,0xe3,0x90,0x05,0x87,0xe0,0x64,0x80,0xf0,0x90,0x9e,0x2a,
55920 -0xe0,0x90,0x05,0x84,0xf0,0x90,0x9e,0x2b,0xe0,0x90,0x05,0x85,0xf0,0x90,0x9e,0x2c,
55921 -0xe0,0x90,0x05,0x86,0xf0,0x90,0x9e,0x2d,0xe0,0x90,0x05,0x87,0xf0,0xa2,0xaf,0xe4,
55922 -0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x90,0x01,0x3c,0xe0,0x44,0x20,0xf0,0x7d,0x20,
55923 -0xe4,0xff,0x12,0x37,0x00,0x80,0x2b,0x90,0x9e,0x1c,0xe0,0x70,0x2d,0x90,0x9e,0x2e,
55924 -0x91,0xd9,0x90,0x00,0x46,0xe0,0x54,0xfe,0xfd,0x7f,0x46,0x91,0xe3,0x90,0x05,0x22,
55925 -0xe4,0xf0,0xa2,0xaf,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x7d,0x20,0xe4,0xff,0x12,
55926 -0x36,0x92,0x90,0x9e,0x3f,0xe0,0x24,0xff,0x92,0xaf,0x22,0x90,0x01,0x30,0xe4,0xf0,
55927 -0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x01,0x38,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,
55928 -0xfd,0x7f,0x50,0x91,0xe3,0xe4,0xfd,0x7f,0x51,0x91,0xe3,0xe4,0xfd,0x7f,0x52,0x91,
55929 -0xe3,0xe4,0xfd,0x7f,0x53,0x81,0xe3,0x8b,0x59,0x8a,0x5a,0x89,0x5b,0x90,0x00,0x02,
55930 -0x12,0x42,0x20,0x90,0x9e,0x1d,0xf0,0xe0,0x30,0xe0,0x4b,0x90,0x9e,0x14,0x74,0x01,
55931 -0xf0,0x7f,0x80,0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0x16,0x12,0x2a,0x7f,0xab,0x59,
55932 -0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0xe4,0xfc,0xfd,0xfe,0x78,
55933 -0x1a,0x12,0x2a,0x6c,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,0x07,0x90,0x9e,0x16,0x12,
55934 -0x43,0x53,0xec,0x54,0x03,0xfc,0x12,0x43,0x46,0x90,0x9e,0x20,0x12,0x2a,0x7f,0x90,
55935 -0x05,0x22,0xe4,0xf0,0x80,0x2d,0xe4,0x90,0x9e,0x14,0xf0,0x7f,0x80,0x7e,0x08,0x12,
55936 -0x27,0xde,0xec,0x54,0x03,0xfc,0xec,0x44,0xc0,0xfc,0x90,0x9e,0x16,0x12,0x2a,0x7f,
55937 -0x90,0x9e,0x16,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,
55938 -0x12,0x2f,0xd9,0x90,0x9e,0x1d,0xe0,0x30,0xe1,0x19,0x7d,0x0c,0x7f,0x47,0x91,0xe3,
55939 -0x90,0x00,0x48,0xe0,0x44,0x0c,0xfd,0x7f,0x48,0x91,0xe3,0x90,0x00,0x46,0xe0,0x44,
55940 -0x10,0x80,0x1c,0x90,0x00,0x47,0xe0,0x54,0xf3,0xfd,0x7f,0x47,0x91,0xe3,0x90,0x00,
55941 -0x48,0xe0,0x54,0xf3,0xfd,0x7f,0x48,0x91,0xe3,0x90,0x00,0x46,0xe0,0x54,0xef,0xfd,
55942 -0x7f,0x46,0x91,0xe3,0xe4,0x90,0x9e,0x1a,0xf0,0x22,0x90,0x00,0x49,0xe0,0x90,0x9e,
55943 -0xb0,0xf0,0xe0,0x54,0x0f,0xf0,0x44,0xf0,0xfd,0x7f,0x49,0x91,0xe3,0x90,0x9e,0xb0,
55944 -0xe0,0x44,0xb0,0xfd,0x7f,0x49,0x81,0xe3,0x75,0x28,0x33,0xe4,0xf5,0x29,0x75,0x2a,
55945 -0x07,0xf5,0x2b,0x90,0x01,0x30,0xe5,0x28,0xf0,0xa3,0xe5,0x29,0xf0,0xa3,0xe5,0x2a,
55946 -0xf0,0xa3,0xe5,0x2b,0xf0,0x22,0x75,0x30,0x1f,0x75,0x31,0x01,0xe4,0xf5,0x32,0x90,
55947 -0x01,0x38,0xe5,0x30,0xf0,0xa3,0xe5,0x31,0xf0,0xa3,0xe5,0x32,0xf0,0x22,0xe4,0x90,
55948 -0x9e,0x31,0xf0,0xa3,0xf0,0x75,0x8e,0x02,0x12,0x77,0x64,0x12,0x5e,0xde,0x90,0x9e,
55949 -0x5e,0xef,0xf0,0x12,0x5e,0xeb,0x90,0x9e,0x60,0xef,0xf0,0xe4,0xf5,0x12,0x12,0x6e,
55950 -0xdf,0x12,0x77,0xdb,0x12,0x5f,0x9f,0x12,0x32,0x3d,0x12,0x77,0xd7,0x12,0x4f,0xf8,
55951 -0x90,0x00,0xf3,0xe0,0x30,0xe2,0x0d,0x90,0x05,0x41,0x74,0x10,0xf0,0x90,0x05,0x5a,
55952 -0xf0,0xa3,0xe4,0xf0,0x12,0x5e,0xf8,0x11,0x16,0x12,0x44,0xff,0x12,0x7d,0x9b,0x90,
55953 -0x9e,0x33,0xe5,0xd9,0xf0,0x12,0x5e,0xaf,0xc2,0xaf,0x90,0x00,0x80,0xe0,0x44,0x40,
55954 -0xf0,0x12,0x4b,0xdb,0x75,0xe8,0x03,0x43,0xa8,0x85,0xd2,0xaf,0x90,0x9e,0x31,0xe0,
55955 -0x64,0x01,0xf0,0x24,0x2e,0x90,0x01,0xc4,0xf0,0x74,0x50,0xa3,0xf0,0xe5,0x12,0x30,
55956 -0xe4,0x09,0xc2,0xaf,0x53,0x12,0xef,0xd2,0xaf,0x71,0x1a,0xe5,0x12,0x30,0xe6,0x16,
55957 -0xc2,0xaf,0x53,0x12,0xbf,0xd2,0xaf,0x12,0x68,0x8d,0x90,0x9e,0x1e,0xe0,0xff,0x60,
55958 -0x03,0xb4,0x01,0x02,0x31,0x10,0x90,0x9e,0x1e,0xe0,0x70,0x03,0x12,0x7d,0xf9,0x11,
55959 -0xe3,0x80,0xb9,0x90,0x06,0x34,0xe0,0x60,0x26,0x14,0x70,0x1b,0x7b,0x01,0x7a,0x06,
55960 -0x79,0x35,0x7f,0xf9,0x7e,0x01,0x12,0x77,0x75,0xbf,0x01,0x09,0x90,0x06,0x35,0xe0,
55961 -0x54,0x0f,0xf0,0x80,0x05,0x80,0x00,0x02,0x77,0x56,0xe4,0x90,0x06,0x34,0xf0,0x22,
55962 -0x90,0x9e,0x15,0xe0,0xc3,0x94,0x14,0x50,0x05,0xe0,0x04,0xf0,0x21,0xc8,0x90,0x9e,
55963 -0x15,0xe0,0x64,0x14,0x60,0x02,0x21,0xc8,0x90,0x9e,0x24,0xe0,0x70,0x25,0x90,0x9e,
55964 -0x27,0xe0,0x70,0x1f,0x90,0x9e,0x25,0xe0,0x70,0x19,0x90,0x9e,0x28,0xe0,0x70,0x13,
55965 -0x90,0x9e,0x26,0xe0,0x70,0x0d,0x90,0x9e,0x29,0xe0,0x70,0x07,0x90,0x04,0xfd,0xe0,
55966 -0x54,0xfe,0xf0,0x90,0x9e,0x24,0xe0,0x90,0x04,0x44,0xf0,0x90,0x9e,0x25,0xe0,0x90,
55967 -0x04,0x45,0xf0,0x90,0x9e,0x26,0xe0,0x90,0x04,0x46,0xf0,0xa3,0xe4,0xf0,0x90,0x9e,
55968 -0x27,0xe0,0x90,0x04,0x48,0xf0,0x90,0x9e,0x28,0xe0,0x90,0x04,0x49,0xf0,0x90,0x9e,
55969 -0x29,0xe0,0x90,0x04,0x4a,0xf0,0xa3,0xe4,0xf0,0x90,0x9e,0x10,0xe0,0x90,0x04,0x4c,
55970 -0xf0,0x90,0x9e,0x11,0xe0,0x90,0x04,0x4d,0xf0,0x90,0x9e,0x12,0xe0,0x90,0x04,0x4e,
55971 -0xf0,0x90,0x9e,0x13,0xe0,0x90,0x04,0x4f,0xf0,0xe4,0x90,0x9e,0x15,0xf0,0x90,0x9e,
55972 -0x10,0x04,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,0x24,0xf0,0xa3,0xf0,
55973 -0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x05,0x60,0xe0,0x90,0x9e,0x34,0xf0,
55974 -0x90,0x05,0x61,0xe0,0x90,0x9e,0x35,0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x36,0xf0,
55975 -0x90,0x05,0x63,0xe0,0x90,0x9e,0x37,0xf0,0x90,0x9e,0x2d,0xe0,0xff,0x90,0x9e,0x37,
55976 -0xe0,0xfe,0xd3,0x9f,0x50,0x0b,0x90,0x9e,0x2d,0xe0,0xc3,0x9e,0xd3,0x94,0x01,0x40,
55977 -0x10,0x90,0x9e,0x1b,0xe0,0xb4,0x01,0x02,0x80,0x03,0x90,0x9e,0x1f,0xe0,0xff,0x51,
55978 -0x12,0x22,0x90,0x05,0x60,0xe0,0x90,0x9e,0x2a,0xf0,0x90,0x05,0x61,0xe0,0x90,0x9e,
55979 -0x2b,0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x2c,0xf0,0x90,0x05,0x63,0xe0,0x90,0x9e,
55980 -0x2d,0xf0,0xc3,0x74,0xff,0x9f,0xfe,0x90,0x9e,0x2b,0xe0,0xd3,0x9e,0x40,0x1e,0xe0,
55981 -0x2f,0xf0,0xa3,0xe0,0xb4,0xff,0x0f,0xe4,0xf0,0xa3,0xe0,0xb4,0xff,0x03,0xe4,0xf0,
55982 -0x22,0x90,0x9e,0x2d,0x80,0x03,0x90,0x9e,0x2c,0xe0,0x04,0xf0,0x22,0x90,0x9e,0x2b,
55983 -0xe0,0x2f,0xf0,0x22,0x90,0x9e,0x1c,0xe0,0x64,0x01,0x60,0x02,0x61,0x19,0x90,0x00,
55984 -0x46,0xe0,0x44,0x01,0xfd,0x7f,0x46,0x12,0x4c,0xe3,0x90,0x9e,0x2e,0xe0,0x70,0x32,
55985 -0x90,0x9e,0x14,0xe0,0x60,0x15,0x90,0x9e,0x20,0x12,0x43,0x53,0x90,0x80,0x85,0x12,
55986 -0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,0x80,0x06,0x90,0x05,0x22,0x74,0x7f,
55987 -0xf0,0x90,0x9e,0x1b,0xe0,0xff,0x51,0x12,0x90,0x9e,0x2e,0x74,0x01,0x12,0x4c,0xd9,
55988 -0x80,0x40,0x90,0x9e,0x2e,0xe0,0x64,0x01,0x70,0x38,0x90,0x9e,0x1f,0xe0,0xff,0x51,
55989 -0x12,0xe4,0x90,0x9e,0x2e,0xf0,0x90,0x00,0x45,0xe0,0x44,0x01,0xfd,0x7f,0x45,0x12,
55990 -0x4c,0xe3,0x90,0x9e,0x14,0xe0,0x60,0x15,0x90,0x9e,0x16,0x12,0x43,0x53,0x90,0x80,
55991 -0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,0x80,0x05,0x90,0x05,0x22,
55992 -0xe4,0xf0,0x90,0x05,0x87,0xe0,0x64,0x80,0xf0,0x90,0x9e,0x2a,0xe0,0x90,0x05,0x84,
55993 -0xf0,0x90,0x9e,0x2b,0xe0,0x90,0x05,0x85,0xf0,0x90,0x9e,0x2c,0xe0,0x90,0x05,0x86,
55994 -0xf0,0x90,0x9e,0x2d,0xe0,0x90,0x05,0x87,0xf0,0x22,0x90,0x01,0xcc,0xe0,0x54,0x0f,
55995 -0x90,0x9e,0x34,0xf0,0x90,0x9e,0x34,0xe0,0xfd,0x70,0x02,0x81,0x5b,0x90,0x9e,0xad,
55996 -0xe0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,
55997 -0xd8,0xf9,0xff,0xef,0x5d,0x70,0x02,0x81,0x54,0x90,0x9e,0xad,0xe0,0x75,0xf0,0x04,
55998 -0x90,0x01,0xd0,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x35,0xf0,0x75,0x1e,0x01,0x75,0x1f,
55999 -0x9e,0x75,0x20,0x35,0x75,0x21,0x01,0x7b,0x01,0x7a,0x9e,0x79,0x36,0x12,0x45,0x09,
56000 -0x90,0x9e,0x36,0xe0,0xff,0xc4,0x13,0x13,0x13,0x54,0x01,0x90,0x9e,0xad,0x30,0xe0,
56001 -0x59,0xe0,0x75,0xf0,0x02,0x90,0x00,0x88,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x37,0xf0,
56002 -0x90,0x9e,0xad,0xe0,0x75,0xf0,0x02,0x90,0x00,0x89,0x12,0x43,0x5f,0xe0,0x90,0x9e,
56003 -0x38,0xf0,0x90,0x9e,0xad,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd1,0x12,0x43,0x5f,0xe0,
56004 -0x90,0x9e,0x39,0xf0,0x90,0x9e,0xad,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd2,0x12,0x43,
56005 -0x5f,0xe0,0x90,0x9e,0x3a,0xf0,0x90,0x9e,0xad,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd3,
56006 -0x12,0x43,0x5f,0xe0,0x90,0x9e,0x3b,0xf0,0x80,0x33,0xe0,0x75,0xf0,0x04,0x90,0x01,
56007 -0xd1,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x37,0xf0,0x90,0x9e,0xad,0xe0,0x75,0xf0,0x04,
56008 -0x90,0x01,0xd2,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x38,0xf0,0x90,0x9e,0xad,0xe0,0x75,
56009 -0xf0,0x04,0x90,0x01,0xd3,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x39,0xf0,0xef,0x54,0x7f,
56010 -0xff,0x7b,0x01,0x7a,0x9e,0x79,0x37,0x91,0x5c,0x90,0x9e,0x34,0xe0,0xff,0x90,0x9e,
56011 -0xad,0xe0,0xfe,0x74,0x01,0xa8,0x06,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0x5f,
56012 -0x90,0x9e,0x34,0xf0,0x90,0x9e,0xad,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,
56013 -0xc3,0x33,0xd8,0xfc,0x90,0x01,0xcc,0xf0,0x90,0x9e,0xad,0xe0,0x04,0xf0,0xe0,0x54,
56014 -0x03,0xf0,0x61,0x24,0x90,0x01,0xc6,0xe0,0x44,0x02,0xf0,0x22,0x90,0x9e,0x3c,0x12,
56015 -0x43,0x8b,0xef,0x12,0x43,0x94,0x54,0x97,0x01,0x54,0xa0,0x02,0x54,0xbb,0x03,0x54,
56016 -0xc4,0x05,0x54,0xcd,0x06,0x55,0x1b,0x07,0x54,0xd5,0x09,0x54,0xde,0x0c,0x54,0xe7,
56017 -0x0d,0x54,0xf0,0x0e,0x54,0xf9,0x1b,0x55,0x02,0x1c,0x55,0x0b,0x2c,0x54,0xa9,0x2d,
56018 -0x54,0xb2,0x2e,0x00,0x00,0x55,0x14,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x61,0x69,
56019 -0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x71,0x02,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,
56020 -0x71,0x08,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x71,0x50,0x90,0x9e,0x3c,0x12,0x43,
56021 -0x6b,0x02,0x71,0x7e,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x70,0xb2,0x90,0x9e,0x3c,
56022 -0x12,0x43,0x6b,0x80,0x47,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x71,0xc6,0x90,0x9e,
56023 -0x3c,0x12,0x43,0x6b,0x02,0x4d,0xa0,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x7d,0x68,
56024 -0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x4f,0x07,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,
56025 -0x70,0xfa,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x70,0xe1,0x90,0x9e,0x3c,0x12,0x43,
56026 -0x6b,0x02,0x76,0x36,0x90,0x01,0xc6,0xe0,0x44,0x01,0xf0,0x22,0x90,0x00,0x04,0x12,
56027 -0x42,0x20,0xff,0x54,0x1f,0xfe,0xef,0x54,0x20,0xc4,0x13,0x54,0x07,0xfd,0xaf,0x06,
56028 -0x90,0x9e,0x3f,0xef,0xf0,0xa3,0xed,0xf0,0xa3,0x12,0x43,0x8b,0x90,0x9e,0x41,0x12,
56029 -0x43,0x6b,0x90,0x00,0x03,0x12,0x42,0x20,0x54,0xf0,0xc4,0x54,0x0f,0x90,0x9e,0x44,
56030 -0xf0,0x90,0x00,0x04,0x12,0x42,0x20,0x54,0x40,0xc4,0x13,0x13,0x54,0x03,0x90,0x9e,
56031 -0x45,0xf0,0x90,0x9e,0x3f,0xe0,0xff,0x75,0xf0,0x09,0x90,0x96,0x46,0x12,0x43,0x5f,
56032 -0xad,0x82,0xac,0x83,0x90,0x9e,0x46,0xec,0xf0,0xa3,0xed,0xf0,0xef,0x75,0xf0,0x09,
56033 -0xa4,0x24,0x44,0xf9,0x74,0x96,0x35,0xf0,0xfa,0x7b,0x01,0xa3,0x12,0x43,0x8b,0x90,
56034 -0x9e,0x41,0x12,0x43,0x6b,0x90,0x00,0x03,0x12,0x42,0x20,0x54,0x0f,0xff,0x90,0x9e,
56035 -0x48,0x12,0x43,0x6b,0xef,0x12,0x42,0x4d,0x90,0x9e,0x41,0x12,0x43,0x6b,0x90,0x00,
56036 -0x02,0x12,0x42,0x20,0xff,0x90,0x9e,0x48,0x12,0x43,0x6b,0x90,0x00,0x01,0xef,0x12,
56037 -0x42,0x5f,0x90,0x9e,0x41,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0x90,
56038 -0x9e,0x46,0xe0,0xfc,0xa3,0xe0,0xfd,0xf5,0x82,0x8c,0x83,0xef,0xf0,0x12,0x29,0xd9,
56039 -0x8d,0x82,0x8c,0x83,0xa3,0xf0,0x90,0x9e,0x44,0xe0,0xfe,0x90,0x9e,0x3f,0xe0,0xff,
56040 -0x24,0x82,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0x90,0x9e,0x40,0xe0,0xfe,
56041 -0x75,0xf0,0x09,0xef,0x90,0x96,0x4a,0x12,0x43,0x5f,0xee,0xf0,0x75,0xf0,0x09,0xef,
56042 -0x90,0x96,0x4b,0x12,0x43,0x5f,0x74,0x01,0xf0,0x90,0x9e,0x45,0xe0,0xfe,0x75,0xf0,
56043 -0x09,0xef,0x90,0x96,0x4c,0x12,0x43,0x5f,0xee,0xf0,0x8f,0x59,0xef,0x25,0xe0,0x24,
56044 -0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xaf,0x82,0xf5,0x5b,0x8f,0x5c,0xe5,0x59,0x75,0xf0,
56045 -0x02,0xa4,0x24,0x02,0xf9,0x74,0x95,0x35,0xf0,0x75,0x5d,0x01,0xf5,0x5e,0x89,0x5f,
56046 -0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x46,0x12,0x43,0x5f,0xaf,0x82,0x85,0x83,0x60,
56047 -0x8f,0x61,0xe5,0x59,0x75,0xf0,0x09,0xa4,0x24,0x44,0xf9,0x74,0x96,0x35,0xf0,0x75,
56048 -0x62,0x01,0xf5,0x63,0x89,0x64,0x74,0x82,0x25,0x59,0xf5,0x82,0xe4,0x34,0x95,0xf5,
56049 -0x83,0xe0,0x12,0x43,0x94,0x56,0xaa,0x00,0x56,0xbf,0x01,0x56,0xd4,0x02,0x56,0xe9,
56050 -0x03,0x57,0x13,0x04,0x57,0x28,0x05,0x57,0x3d,0x06,0x57,0x64,0x0c,0x57,0x92,0x0d,
56051 -0x57,0xbf,0x0e,0x57,0xec,0x0f,0x00,0x00,0x58,0x20,0xe5,0x59,0x25,0xe0,0x24,0xc6,
56052 -0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0x74,0x15,0x80,0x3c,0xe5,
56053 -0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,
56054 -0x74,0x10,0x80,0x27,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,
56055 -0x83,0x74,0xf0,0xf0,0xa3,0x74,0x05,0x80,0x12,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,
56056 -0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0xe4,0xf0,0xe5,0x59,0x25,0xe0,
56057 -0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0x8f,0xf0,
56058 -0x02,0x58,0x20,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,
56059 -0x74,0x0f,0xf0,0xa3,0x74,0xf5,0x80,0x27,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,
56060 -0xe4,0x34,0x9b,0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0xf0,0x80,0x12,0xe5,0x59,0x25,
56061 -0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe4,0xf0,0xa3,0x74,0x0d,0xf0,
56062 -0xe5,0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe4,0xf0,0xa3,
56063 -0xf0,0x02,0x58,0x20,0x90,0x04,0x47,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,
56064 -0x4d,0x90,0x04,0x46,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,
56065 -0x5f,0x90,0x04,0x45,0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xf0,0x90,0x04,0x44,0x02,
56066 -0x58,0x17,0x90,0x04,0x4b,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,0x4d,0x90,
56067 -0x04,0x4a,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,
56068 -0x04,0x49,0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xf0,0x90,0x04,0x48,0x80,0x58,0x90,
56069 -0x04,0x4f,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,0x4d,0x90,0x04,0x4e,0xe0,
56070 -0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,0x04,0x4d,0xe0,
56071 -0x85,0x5c,0x82,0x85,0x5b,0x83,0xf0,0x90,0x04,0x4c,0x80,0x2b,0x90,0x04,0x53,0xe0,
56072 -0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,0x4d,0x90,0x04,0x52,0xe0,0xab,0x5d,0xaa,
56073 -0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,0x04,0x51,0xe0,0x85,0x5c,0x82,
56074 -0x85,0x5b,0x83,0xf0,0x90,0x04,0x50,0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xa3,0xf0,
56075 -0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0xc0,0x03,0xc0,0x02,0xc0,0x01,0x12,0x29,0xd9,0xff,
56076 -0xab,0x62,0xaa,0x63,0xa9,0x64,0x12,0x29,0xd9,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,
56077 -0x12,0x42,0x4d,0xab,0x5d,0xe5,0x5f,0x24,0x01,0xf9,0xe4,0x35,0x5e,0xfa,0xc0,0x03,
56078 -0xc0,0x02,0xc0,0x01,0x12,0x29,0xd9,0xff,0xab,0x62,0xaa,0x63,0xa9,0x64,0x90,0x00,
56079 -0x01,0x12,0x42,0x20,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,0x12,0x42,0x4d,0x85,0x5c,
56080 -0x82,0x85,0x5b,0x83,0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,0x61,0x82,0x85,0x60,0x83,
56081 -0xe0,0xfe,0xef,0x5e,0xd0,0x82,0xd0,0x83,0xf0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xa3,
56082 -0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,0x61,0x82,0x85,0x60,0x83,0xa3,0xe0,0xfe,0xef,
56083 -0x5e,0xd0,0x82,0xd0,0x83,0xf0,0xe5,0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,
56084 -0x95,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3b,0x75,0x5a,0x0b,0x74,0x01,0x7e,
56085 -0x00,0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x59,
56086 -0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,
56087 -0x5f,0x4e,0x60,0x06,0xe5,0x5a,0x24,0x10,0x80,0x5d,0x15,0x5a,0xe5,0x5a,0xc3,0x94,
56088 -0x00,0x50,0xca,0x80,0x56,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,
56089 -0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3d,0x75,0x5a,0x0f,0x74,0x01,0x7e,0x00,
56090 -0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x59,0x25,
56091 -0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,
56092 -0x4e,0x60,0x08,0x90,0x9e,0x4b,0xe5,0x5a,0xf0,0x80,0x10,0x15,0x5a,0xe5,0x5a,0xc3,
56093 -0x94,0x00,0x50,0xc8,0x80,0x05,0xe4,0x90,0x9e,0x4b,0xf0,0xe5,0x59,0x25,0xe0,0x24,
56094 -0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3b,0xe4,
56095 -0xf5,0x5a,0x74,0x01,0x7e,0x00,0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,
56096 -0xd8,0xf9,0xff,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,
56097 -0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x08,0x90,0x9e,0x4c,0xe5,0x5a,0xf0,0x80,
56098 -0x5b,0x05,0x5a,0xe5,0x5a,0xb4,0x10,0xca,0x80,0x52,0xe5,0x59,0x25,0xe0,0x24,0x02,
56099 -0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x39,0xe4,0xf5,
56100 -0x5a,0x74,0x01,0x7e,0x00,0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,
56101 -0xf9,0xff,0xe5,0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,
56102 -0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x06,0xe5,0x5a,0x24,0x10,0x80,0x0a,0x05,0x5a,
56103 -0xe5,0x5a,0xb4,0x0c,0xcc,0x80,0x05,0xe4,0x90,0x9e,0x4c,0xf0,0x90,0x9e,0x4b,0xe0,
56104 -0xff,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x48,0x12,0x43,0x5f,0xef,0xf0,0x90,0x9e,
56105 -0x4c,0xe0,0xfe,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x49,0x12,0x43,0x5f,0xee,0xf0,
56106 -0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0xd3,0x9f,0x40,0x05,
56107 -0x90,0x9e,0x4b,0x51,0x6f,0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,
56108 -0xe0,0xff,0x90,0x9e,0x4c,0xe0,0xfe,0xef,0xc3,0x9e,0x50,0x02,0x51,0x6f,0x90,0x9e,
56109 -0x4b,0xe0,0xff,0xd3,0x94,0x13,0x40,0x07,0x90,0x96,0x43,0x74,0x03,0xf0,0x22,0xef,
56110 -0xd3,0x94,0x0b,0x40,0x07,0x90,0x96,0x43,0x74,0x02,0xf0,0x22,0xef,0xd3,0x94,0x03,
56111 -0x40,0x07,0x90,0x96,0x43,0x74,0x01,0xf0,0x22,0xe4,0x90,0x96,0x43,0xf0,0x22,0xe0,
56112 -0xfd,0x74,0x26,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xed,0xf0,0xaf,0x59,
56113 -0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xef,0xc3,0x94,0x20,0x50,0x0e,0x74,0x84,0x2f,
56114 -0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xed,0xf0,0x80,0x29,0x74,0xa6,0x2f,0xf5,0x82,
56115 -0xe4,0x34,0x9c,0xf5,0x83,0xed,0xf0,0x90,0x9e,0x75,0xef,0xf0,0x24,0xa6,0xf5,0x82,
56116 -0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x90,0x9e,0x76,0xf0,0x7b,0x01,0x7a,0x9e,0x79,0x75,
56117 -0x7d,0x02,0x51,0xc9,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
56118 -0x90,0x9e,0x94,0x12,0x43,0x8b,0x90,0x9e,0x97,0xe0,0x54,0xf0,0x44,0x06,0xff,0xf0,
56119 -0xed,0x54,0x0f,0xc4,0x54,0xf0,0xfe,0xef,0x54,0x0f,0x4e,0xf0,0x90,0x9e,0x94,0x12,
56120 -0x43,0x6b,0x90,0x9e,0x91,0x12,0x43,0x8b,0x7b,0x01,0x7a,0x9e,0x79,0x97,0x71,0xd4,
56121 -0xd0,0xd0,0x92,0xaf,0x22,0x8f,0x50,0x8d,0x51,0xe5,0x51,0x54,0x1f,0xf5,0x56,0x74,
56122 -0x01,0x2f,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe0,0xf5,0x54,0x90,0x04,0xfd,0xe0,
56123 -0xb4,0x01,0x05,0x75,0x57,0x03,0x80,0x03,0x75,0x57,0x01,0xeb,0xc3,0x95,0x57,0x40,
56124 -0x04,0xaf,0x50,0x80,0x33,0xe5,0x54,0x25,0x53,0xf5,0x55,0xe5,0x56,0x90,0x41,0xd6,
56125 -0x93,0xff,0xe5,0x55,0xd3,0x9f,0x74,0x01,0x40,0x11,0x25,0x50,0xf5,0x82,0xe4,0x34,
56126 -0x94,0xf5,0x83,0xe4,0xf0,0xad,0x51,0xaf,0x50,0x41,0x80,0x25,0x50,0xf5,0x82,0xe4,
56127 -0x34,0x94,0xf5,0x83,0xe5,0x55,0xf0,0x22,0xad,0x07,0x75,0xf0,0x09,0xed,0x90,0x96,
56128 -0x48,0x12,0x43,0x5f,0xe0,0xff,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,
56129 -0xe0,0x54,0x1f,0xf5,0x58,0xd3,0x9f,0x40,0x02,0x8f,0x58,0xe5,0x58,0x25,0xe0,0x24,
56130 -0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xe5,
56131 -0x58,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,
56132 -0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,
56133 -0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0xaf,0x05,0xad,0x58,0x51,
56134 -0x80,0xaf,0x58,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x8e,0x12,0x43,
56135 -0x8b,0x90,0x9e,0xaf,0xe0,0xff,0x04,0xf0,0x90,0x00,0x01,0xef,0x12,0x42,0x5f,0x7f,
56136 -0xaf,0x7e,0x01,0x91,0x67,0xef,0x60,0x49,0x90,0x9e,0x8e,0x12,0x43,0x6b,0x8b,0x1e,
56137 -0x8a,0x1f,0x89,0x20,0x75,0x21,0x02,0x7b,0x01,0x7a,0x01,0x79,0xa0,0x12,0x45,0x09,
56138 -0x90,0x9e,0x91,0x12,0x43,0x6b,0x8b,0x1e,0x8a,0x1f,0x89,0x20,0x90,0x9e,0x8e,0x12,
56139 -0x43,0x6b,0x12,0x29,0xd9,0xff,0xc4,0x54,0x0f,0xf5,0x21,0x7b,0x01,0x7a,0x01,0x79,
56140 -0xa2,0x12,0x45,0x09,0x90,0x01,0xaf,0x74,0xff,0xf0,0x90,0x01,0xcb,0xe0,0x64,0x80,
56141 -0xf0,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x9e,0x2f,0xe0,0x54,0xf0,0x44,0x03,0xf0,0x54,
56142 -0x0f,0x44,0x80,0xf0,0x7b,0x00,0x7a,0x00,0x79,0x13,0x90,0x9e,0x91,0x12,0x43,0x8b,
56143 -0x0b,0x7a,0x9e,0x79,0x2f,0x61,0xd4,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,
56144 -0x9d,0xee,0xf0,0xa3,0xef,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,0x9d,0xe0,0xfe,
56145 -0xa3,0xe0,0xf5,0x82,0x8e,0x83,0xe0,0x60,0x2d,0xc3,0x90,0x9e,0xa0,0xe0,0x94,0xe8,
56146 -0x90,0x9e,0x9f,0xe0,0x94,0x03,0x40,0x0b,0x90,0x01,0xc6,0xe0,0x44,0x10,0xf0,0x7f,
56147 -0x00,0x80,0x15,0x90,0x9e,0x9f,0xe4,0x75,0xf0,0x01,0x12,0x42,0x81,0x7f,0x0a,0x7e,
56148 -0x00,0x12,0x37,0x54,0x80,0xc5,0x7f,0x01,0xd0,0xd0,0x92,0xaf,0x22,0xac,0x07,0xec,
56149 -0xc3,0x94,0x20,0x50,0x0d,0x74,0x84,0x2c,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,
56150 -0x80,0x0b,0x74,0xa6,0x2c,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x54,0x7f,0xf5,
56151 -0x64,0xe5,0x64,0x54,0x1f,0xff,0x90,0x9e,0x40,0xf0,0x75,0xf0,0x09,0xec,0x90,0x96,
56152 -0x49,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x42,0xf0,0x75,0xf0,0x09,0xec,0x90,0x96,0x48,
56153 -0x12,0x43,0x5f,0xe0,0xfe,0x90,0x9e,0x43,0xf0,0xec,0x25,0xe0,0x24,0xc6,0xf5,0x82,
56154 -0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x44,0xcb,0xf0,0xa3,0xeb,
56155 -0xf0,0xec,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfb,0xa3,
56156 -0xe0,0x90,0x9e,0x46,0xcb,0xf0,0xa3,0xeb,0xf0,0xef,0xd3,0x9e,0x40,0x0a,0x90,0x9e,
56157 -0x43,0xe0,0x90,0x9e,0x40,0xf0,0xf5,0x64,0xed,0x70,0x02,0xc1,0x13,0x90,0x9e,0x41,
56158 -0xed,0xf0,0xe5,0x64,0x30,0xe6,0x0a,0x90,0x9e,0x40,0xe0,0xf5,0x64,0xa3,0xe0,0x14,
56159 -0xf0,0x90,0x9e,0x41,0xe0,0x70,0x02,0xc1,0x13,0x90,0x9e,0x40,0xe0,0xff,0xd3,0x94,
56160 -0x00,0x50,0x02,0xc1,0x13,0xe4,0x90,0x9e,0x3f,0xf0,0xef,0x14,0x90,0x9e,0x3e,0xf0,
56161 -0x90,0x9e,0x42,0xe0,0xfd,0x90,0x9e,0x3e,0xe0,0xff,0xd3,0x9d,0x40,0x6b,0xef,0x94,
56162 -0x10,0x40,0x21,0xef,0x24,0xf0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,
56163 -0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x46,0xe0,0x5e,0xfe,0xa3,0xe0,
56164 -0x5f,0x4e,0x70,0x27,0x90,0x9e,0x3e,0xe0,0xff,0xc3,0x94,0x10,0x50,0x33,0x74,0x01,
56165 -0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,
56166 -0x9e,0x44,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x16,0x90,0x9e,0x3e,0xe0,0xf5,
56167 -0x64,0xa3,0xe0,0x04,0xf0,0x90,0x9e,0x41,0xe0,0xff,0x90,0x9e,0x3f,0xe0,0x6f,0x60,
56168 -0x08,0x90,0x9e,0x3e,0xe0,0x14,0xf0,0x80,0x87,0x90,0x9e,0x41,0xe0,0xff,0x90,0x9e,
56169 -0x3f,0xe0,0xc3,0x9f,0x50,0x0d,0x90,0x9e,0x3e,0xe0,0xb5,0x05,0x06,0x90,0x9e,0x42,
56170 -0xe0,0xf5,0x64,0xe5,0x64,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,
56171 -0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xe5,0x64,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,
56172 -0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,
56173 -0x13,0xff,0xec,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,
56174 -0xa3,0xef,0xf0,0xaf,0x04,0xad,0x64,0x51,0x80,0xaf,0x64,0x22,0x8f,0x77,0x12,0x45,
56175 -0xa6,0xef,0x64,0x01,0x70,0x2e,0x90,0x9e,0x52,0x12,0x47,0xcc,0xe5,0x77,0x60,0x10,
56176 -0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x10,0xf0,0x80,0x0e,
56177 -0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xef,0xf0,0x90,0x04,
56178 -0x1f,0x74,0x20,0xf0,0x22,0x90,0x06,0x04,0xe0,0x54,0xbf,0xf0,0xef,0x60,0x09,0xe5,
56179 -0x22,0xb4,0x01,0x04,0xe4,0xff,0xd1,0x5c,0x53,0x23,0xf0,0x43,0x23,0x0c,0x22,0x90,
56180 -0x01,0x3c,0x74,0xff,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x01,0x34,0xf0,0xa3,0xf0,0xa3,
56181 -0xf0,0xa3,0xf0,0xfd,0x7f,0x54,0x12,0x4c,0xe3,0x7d,0xff,0x7f,0x55,0x12,0x4c,0xe3,
56182 -0x7d,0xff,0x7f,0x56,0x12,0x4c,0xe3,0x7d,0xff,0x7f,0x57,0x02,0x4c,0xe3,0x90,0x00,
56183 -0x02,0xe0,0x54,0xe0,0x7f,0x01,0x60,0x02,0x7f,0x00,0x22,0x90,0x00,0xf3,0xe0,0x7f,
56184 -0x00,0x30,0xe3,0x03,0x7f,0x01,0x22,0x22,0x90,0x01,0x64,0x74,0xa0,0xf0,0x22,0xc0,
56185 -0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,
56186 -0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x01,0xc4,0x74,
56187 -0xff,0xf0,0x74,0x5e,0xa3,0xf0,0x53,0x91,0xef,0x90,0x00,0x51,0xe0,0xff,0x90,0x00,
56188 -0x55,0xe0,0x5f,0xf5,0x3d,0xe5,0x3d,0x30,0xe6,0x18,0x74,0x40,0xf0,0x90,0x9e,0x1d,
56189 -0xe0,0x54,0x03,0xff,0xbf,0x03,0x0b,0x90,0x9e,0x1a,0xe0,0x60,0x05,0x7f,0x01,0x12,
56190 -0x4c,0xf8,0xe5,0x3d,0x30,0xe7,0x15,0x90,0x00,0x55,0x74,0x80,0xf0,0x90,0x9e,0x1d,
56191 -0xe0,0x54,0x03,0xff,0xbf,0x03,0x05,0x7f,0x02,0x12,0x4c,0xf8,0x90,0x01,0xc4,0x74,
56192 -0xff,0xf0,0x74,0x5e,0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,
56193 -0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,
56194 -0x32,0x8f,0x6b,0x8c,0x6c,0x8d,0x6d,0x22,0x8f,0x6e,0x8c,0x6f,0x8d,0x70,0x22,0xe4,
56195 -0xf5,0x22,0xf5,0x26,0xf5,0x25,0x75,0x24,0x0c,0x75,0x23,0x0c,0x90,0x9e,0x73,0xf0,
56196 -0x90,0x9e,0x71,0xf0,0x90,0x9e,0x70,0xf0,0x90,0x9e,0x72,0x04,0xf0,0x90,0x9e,0x64,
56197 -0xf0,0xe4,0x90,0x9e,0x74,0xf0,0x90,0x9e,0x66,0xf0,0x90,0x9e,0x6e,0x74,0x07,0xf0,
56198 -0xe4,0x90,0x9e,0x65,0xf0,0x90,0x9e,0x6c,0xf0,0xa3,0x74,0x02,0xf0,0x90,0x9e,0x6a,
56199 -0x14,0xf0,0xa3,0x74,0x03,0xf0,0x90,0x9e,0x69,0x74,0x14,0xf0,0x90,0x9e,0x6f,0x74,
56200 -0x05,0xf0,0xe4,0x90,0x9e,0x68,0xf0,0x90,0x9e,0x63,0xf0,0x90,0x9e,0x5f,0xf0,0x22,
56201 -0xe4,0x90,0x9e,0x74,0xf0,0x90,0x9e,0x65,0xf0,0xf5,0x26,0x22,0x8b,0x59,0x8a,0x5a,
56202 -0x89,0x5b,0x11,0x00,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x12,0x29,0xd9,0xf5,0x25,0x14,
56203 -0x60,0x0e,0x14,0x60,0x1e,0x14,0x60,0x2f,0x24,0x03,0x70,0x40,0x7f,0x01,0x80,0x3a,
56204 -0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x02,0x12,0x42,0x20,0xfd,0xe4,0xff,0x11,
56205 -0x6d,0x80,0x27,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x02,0x12,0x42,0x20,0xfd,
56206 -0x7f,0x01,0x11,0x6d,0x1f,0x80,0x13,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x02,
56207 -0x12,0x42,0x20,0xfd,0x7f,0x02,0x11,0x6d,0xe4,0xff,0x11,0x98,0x22,0xef,0x24,0xfe,
56208 -0x60,0x0b,0x04,0x70,0x22,0x90,0x9e,0x72,0x74,0x01,0xf0,0x80,0x16,0xed,0x70,0x0a,
56209 -0x90,0x9e,0x6f,0xe0,0x90,0x9e,0x72,0xf0,0x80,0x05,0x90,0x9e,0x72,0xed,0xf0,0x90,
56210 -0x9e,0x72,0xe0,0x90,0x9e,0x64,0xf0,0x22,0xef,0x64,0x01,0x70,0x2f,0x7d,0x7c,0x7f,
56211 -0x02,0x12,0x36,0x75,0x7d,0x02,0x7f,0x03,0x12,0x36,0x75,0x90,0x01,0x57,0xe4,0xf0,
56212 -0x90,0x01,0x3c,0x74,0x02,0xf0,0x12,0x47,0x2b,0xe4,0xff,0x31,0x1f,0x90,0x06,0x04,
56213 -0xe0,0x54,0x7f,0xf0,0x90,0x06,0x0a,0xe0,0x54,0xf8,0xf0,0x22,0x90,0x01,0x36,0x74,
56214 -0x7c,0xf0,0xa3,0x74,0x02,0xf0,0x7d,0x7c,0xff,0x12,0x36,0xe6,0x7d,0x02,0x7f,0x03,
56215 -0x12,0x36,0xe6,0x90,0x06,0x04,0xe0,0x44,0x80,0xf0,0x90,0x06,0x0a,0xe0,0x44,0x07,
56216 -0xf0,0x90,0x9e,0x6c,0xe0,0xa3,0xe0,0x90,0x05,0x58,0xf0,0xe5,0x22,0x30,0xe0,0x19,
56217 -0x90,0x9e,0x66,0xe0,0x70,0x18,0xe0,0x04,0xf0,0xe5,0x23,0x54,0x0f,0xc3,0x94,0x04,
56218 -0x50,0x0c,0x7d,0x01,0x7f,0x04,0x02,0x47,0x2f,0xe4,0x90,0x9e,0x66,0xf0,0x22,0xef,
56219 -0x60,0x0b,0x90,0x9e,0x60,0xe0,0xb4,0x01,0x10,0xe4,0xff,0x80,0x09,0x90,0x9e,0x60,
56220 -0xe0,0xb4,0x01,0x05,0x7f,0x01,0x12,0x77,0xe4,0x22,0x90,0x01,0x37,0x74,0x02,0xf0,
56221 -0x90,0x05,0x22,0x74,0xff,0xf0,0x31,0xc3,0xef,0x70,0x06,0x90,0x01,0xc8,0x74,0xfd,
56222 -0xf0,0x7d,0x02,0x7f,0x03,0x12,0x36,0xe6,0xe5,0x25,0x60,0x04,0x7f,0x01,0x31,0x1f,
56223 -0x51,0x04,0x53,0x23,0xf0,0x43,0x23,0x02,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
56224 -0x90,0x00,0x01,0x12,0x42,0x20,0x90,0x9e,0x73,0xf0,0x90,0x00,0x03,0x12,0x42,0x20,
56225 -0x90,0x9e,0x63,0xf0,0x12,0x29,0xd9,0x65,0x25,0x60,0x02,0x11,0x0c,0xd0,0xd0,0x92,
56226 -0xaf,0x22,0x7d,0x02,0x7f,0x03,0x12,0x36,0x75,0xe5,0x25,0x14,0x24,0xfd,0x50,0x02,
56227 -0x80,0x20,0x90,0x9e,0x73,0xe0,0x60,0x06,0x7d,0x01,0x7f,0x0c,0x80,0x0d,0xe5,0x23,
56228 -0x54,0x0f,0xc3,0x94,0x04,0x50,0x07,0x7d,0x01,0x7f,0x04,0x12,0x47,0x2f,0xe4,0xff,
56229 -0x31,0x1f,0x22,0xe4,0x90,0x9e,0xa9,0xf0,0xa3,0xf0,0x90,0x05,0xf8,0xe0,0x70,0x0f,
56230 -0xa3,0xe0,0x70,0x0b,0xa3,0xe0,0x70,0x07,0xa3,0xe0,0x70,0x03,0x7f,0x01,0x22,0xd3,
56231 -0x90,0x9e,0xaa,0xe0,0x94,0xe8,0x90,0x9e,0xa9,0xe0,0x94,0x03,0x40,0x03,0x7f,0x00,
56232 -0x22,0x7f,0x32,0x7e,0x00,0x12,0x37,0x54,0x90,0x9e,0xa9,0xe4,0x75,0xf0,0x01,0x12,
56233 -0x42,0x81,0x80,0xc6,0x7f,0x78,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xff,0x12,0x2a,
56234 -0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x27,0xde,0x90,0x9e,0x03,0x12,0x2a,0x7f,0x7f,0x00,
56235 -0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0x07,0x12,0x2a,0x7f,0x90,0x9e,0x60,0xe0,0x90,
56236 -0x9d,0xff,0xb4,0x01,0x0d,0x12,0x43,0x53,0xef,0x54,0xc7,0xff,0xed,0x54,0xc7,0xfd,
56237 -0x80,0x07,0x12,0x43,0x53,0xef,0x54,0xc7,0xff,0xec,0x90,0x80,0x85,0x12,0x2a,0x7f,
56238 -0x7f,0x78,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,0x03,0x12,0x43,0x53,0xef,0x54,0x0f,
56239 -0xff,0xec,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x2f,0xd9,0x90,
56240 -0x9e,0x07,0x12,0x43,0x53,0xef,0x44,0x02,0xff,0xec,0x90,0x80,0x85,0x12,0x2a,0x7f,
56241 -0x7f,0x00,0x7e,0x08,0x12,0x2f,0xd9,0x7f,0x70,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9e,
56242 -0x0b,0x12,0x2a,0x7f,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x1b,0x25,0xa0,0x7f,0x70,
56243 -0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x59,0x12,0x2a,0x8b,0x00,0x00,0x00,0x00,0xe4,
56244 -0xfd,0xff,0x12,0x34,0x81,0x90,0x9e,0x60,0xe0,0xb4,0x01,0x11,0x90,0x80,0x59,0x12,
56245 -0x2a,0x8b,0x00,0x00,0x00,0x00,0xe4,0xfd,0x7f,0x01,0x12,0x34,0x81,0x90,0x00,0x11,
56246 -0xe0,0x54,0xf6,0xf0,0x02,0x4b,0xdb,0x12,0x4b,0xc4,0xef,0x64,0x01,0x60,0x08,0x90,
56247 -0x01,0xb9,0x74,0x01,0xf0,0x80,0x30,0x90,0x9e,0x71,0xe0,0x60,0x08,0x90,0x01,0xb9,
56248 -0x74,0x02,0xf0,0x80,0x22,0x90,0x9e,0x70,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x04,
56249 -0xf0,0x80,0x14,0xe5,0x24,0x54,0x0f,0xd3,0x94,0x04,0x40,0x08,0x90,0x01,0xb9,0x74,
56250 -0x08,0xf0,0x80,0x03,0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,0x08,0xf0,0x7f,0x00,0x22,
56251 -0x12,0x4b,0xc4,0xef,0x64,0x01,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,0xf0,0x80,0x4a,
56252 -0xe5,0x26,0x54,0x03,0x60,0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x3c,0xe5,0x24,
56253 -0x54,0x0f,0xd3,0x94,0x02,0x40,0x08,0x90,0x01,0xb9,0x74,0x04,0xf0,0x80,0x2b,0xe5,
56254 -0x26,0x30,0xe2,0x08,0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,0x1e,0xe5,0x26,0x30,0xe4,
56255 -0x08,0x90,0x01,0xb9,0x74,0x10,0xf0,0x80,0x11,0x90,0x9e,0x66,0xe0,0x60,0x08,0x90,
56256 -0x01,0xb9,0x74,0x20,0xf0,0x80,0x03,0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,0x04,0xf0,
56257 -0x7f,0x00,0x22,0xe5,0x12,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,0xf0,0x80,0x5b,0xe5,
56258 -0x24,0x54,0x0f,0xd3,0x94,0x01,0x40,0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x4a,
56259 -0x90,0x02,0x87,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x04,0xf0,0x80,0x3c,0x90,0x9e,
56260 -0x5e,0xe0,0xb4,0x01,0x10,0x90,0x9e,0x4d,0xe0,0xfe,0xa3,0xe0,0xf5,0x82,0x8e,0x83,
56261 -0xe0,0x60,0x16,0x80,0x25,0x90,0x9e,0x5e,0xe0,0x70,0x0e,0x90,0x01,0xaf,0xe0,0x60,
56262 -0x08,0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,0x11,0x90,0x9e,0x68,0xe0,0x70,0x08,0x90,
56263 -0x01,0xb9,0x74,0x10,0xf0,0x80,0x03,0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,0x02,0xf0,
56264 -0x7f,0x00,0x22,0x90,0x9e,0xae,0xef,0xf0,0x91,0x0c,0x90,0x9e,0xae,0xe0,0x60,0x05,
56265 -0x90,0x05,0x22,0xe4,0xf0,0x53,0x23,0xf0,0x43,0x23,0x04,0x22,0x90,0x00,0x11,0xe0,
56266 -0x44,0x09,0xf0,0x12,0x4b,0xdb,0x90,0x9d,0xff,0x12,0x43,0x53,0x90,0x80,0x85,0x12,
56267 -0x2a,0x7f,0x7f,0x78,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,0x03,0x12,0x43,0x53,0x90,
56268 -0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x2f,0xd9,0x90,0x9e,0x07,0x12,
56269 -0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x00,0x7e,0x08,0x12,0x2f,0xd9,0x90,
56270 -0x9e,0x0b,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x70,0x7e,0x0e,0x12,
56271 -0x2f,0xd9,0x90,0x80,0x59,0x12,0x2a,0x8b,0x00,0x03,0x2d,0x95,0xe4,0xfd,0xff,0x12,
56272 -0x34,0x81,0x90,0x9e,0x60,0xe0,0xb4,0x01,0x11,0x90,0x80,0x59,0x12,0x2a,0x8b,0x00,
56273 -0x03,0x2d,0x95,0xe4,0xfd,0x7f,0x01,0x12,0x34,0x81,0x22,0x8f,0x27,0xe4,0x90,0x9e,
56274 -0xa7,0xf0,0xa3,0xf0,0x90,0x01,0x09,0xe0,0x7f,0x00,0x30,0xe7,0x02,0x7f,0x01,0xef,
56275 -0x65,0x27,0x60,0x3e,0xc3,0x90,0x9e,0xa8,0xe0,0x94,0x88,0x90,0x9e,0xa7,0xe0,0x94,
56276 -0x13,0x40,0x08,0x90,0x01,0xc6,0xe0,0x44,0x80,0xf0,0x22,0x90,0x9e,0xa7,0xe4,0x75,
56277 -0xf0,0x01,0x12,0x42,0x81,0x7f,0x14,0x7e,0x00,0x12,0x37,0x54,0xd3,0x90,0x9e,0xa8,
56278 -0xe0,0x94,0x32,0x90,0x9e,0xa7,0xe0,0x94,0x00,0x40,0xb9,0x90,0x01,0xc7,0xe0,0x30,
56279 -0xe0,0xb2,0x22,0xe5,0x24,0x30,0xe6,0x19,0xe5,0x24,0x54,0x0f,0xff,0x90,0x9e,0x62,
56280 -0xe0,0xfe,0x4f,0x90,0x01,0x2f,0xf0,0xee,0x64,0x80,0x90,0x9e,0x62,0xf0,0x53,0x24,
56281 -0xbf,0x22,0x8f,0x76,0x12,0x45,0xa6,0xef,0x64,0x01,0x70,0x2e,0x90,0x9e,0x53,0x12,
56282 -0x47,0xcc,0xe5,0x76,0x60,0x10,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,
56283 -0xe0,0x44,0x10,0xf0,0x80,0x0e,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,
56284 -0xe0,0x54,0xef,0xf0,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0xe5,0x22,0x64,0x01,0x70,
56285 -0x61,0xe5,0x25,0x60,0x5d,0xe5,0x25,0x64,0x02,0x60,0x06,0xe5,0x25,0x64,0x05,0x70,
56286 -0x27,0x90,0x06,0xab,0xe0,0x90,0x9e,0x64,0xf0,0x90,0x06,0xaa,0xe0,0x90,0x9e,0x72,
56287 -0xf0,0x90,0x9e,0x64,0xe0,0x70,0x07,0x90,0x9e,0x72,0xe0,0xff,0x80,0x05,0x90,0x9e,
56288 -0x64,0xe0,0xff,0x90,0x9e,0x64,0xef,0xf0,0x90,0x9e,0x66,0xe0,0x60,0x03,0xe0,0x14,
56289 -0xf0,0xe4,0x90,0x9e,0x65,0xf0,0x90,0x01,0x57,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,
56290 -0x53,0x26,0xfd,0x53,0x26,0xef,0xe5,0x25,0x14,0x24,0xfd,0x50,0x02,0x80,0x03,0x12,
56291 -0x45,0x53,0x22,0xe4,0xff,0xe5,0x25,0x60,0x5f,0xe5,0x22,0x64,0x01,0x70,0x59,0xe5,
56292 -0x25,0x14,0x60,0x2b,0x24,0xfd,0x60,0x27,0x24,0x02,0x24,0xfb,0x50,0x02,0x80,0x21,
56293 -0x90,0x9e,0x64,0xe0,0x14,0xf0,0xe0,0x60,0x04,0xa3,0xe0,0x60,0x14,0x90,0x9e,0x64,
56294 -0xe0,0x70,0x08,0x90,0x9e,0x72,0xe0,0x90,0x9e,0x64,0xf0,0x7f,0x01,0x80,0x02,0x7f,
56295 -0x01,0xef,0x60,0x24,0x43,0x26,0x10,0xe4,0x90,0x9e,0x86,0xf0,0x90,0x9e,0x6e,0x12,
56296 -0x44,0x56,0x90,0x01,0x57,0x74,0x05,0xf0,0xe5,0x23,0x54,0x0f,0xc3,0x94,0x04,0x50,
56297 -0x07,0x7d,0x01,0x7f,0x04,0x12,0x47,0x2f,0x22,0xe5,0x25,0x60,0x39,0x90,0x9e,0x74,
56298 -0xe0,0x60,0x0d,0xe4,0xf0,0x53,0x26,0xfd,0xe5,0x26,0x54,0x07,0x70,0x28,0x80,0x23,
56299 -0x90,0x9e,0x65,0xe0,0x04,0xf0,0x53,0x26,0xef,0x90,0x9e,0x6a,0xe0,0xff,0x90,0x9e,
56300 -0x65,0xe0,0xd3,0x9f,0x40,0x0d,0xe5,0x22,0xb4,0x01,0x0b,0xa3,0xe0,0x70,0x07,0xe0,
56301 -0x04,0xf0,0x22,0x12,0x44,0xd1,0x22,0xef,0xc3,0x94,0x20,0x50,0x39,0xef,0x30,0xe0,
56302 -0x17,0xed,0xc4,0x54,0xf0,0xfd,0xef,0xc3,0x13,0xfe,0x24,0xa4,0xf5,0x82,0xe4,0x34,
56303 -0x04,0xf5,0x83,0xe0,0x54,0x0f,0x80,0x10,0xef,0xc3,0x13,0xfe,0x24,0xa4,0xf5,0x82,
56304 -0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,0xf0,0xf0,0x74,0xa4,0x2e,0xf5,0x82,0xe4,0x34,
56305 -0x04,0xf5,0x83,0xe0,0x4d,0xf0,0x22,0xad,0x07,0xed,0xc3,0x94,0x20,0x50,0x0d,0x74,
56306 -0x84,0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x80,0x0b,0x74,0xa6,0x2d,0xf5,
56307 -0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x54,0x7f,0xf5,0x64,0xe5,0x64,0x54,0x1f,0xfc,
56308 -0x75,0xf0,0x09,0xed,0x90,0x96,0x48,0x12,0x43,0x5f,0xe0,0xff,0x90,0x9e,0x3e,0xf0,
56309 -0xed,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,
56310 -0x90,0x9e,0x3f,0xcb,0xf0,0xa3,0xeb,0xf0,0xed,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,
56311 -0x34,0x9b,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x41,0xcb,0xf0,0xa3,0xeb,0xf0,
56312 -0xec,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfa,0x74,
56313 -0x01,0x93,0xfb,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xea,
56314 -0xf0,0xa3,0xeb,0xf0,0xec,0xc3,0x9f,0x40,0x02,0xe1,0xa5,0x74,0x67,0x2d,0xf5,0x82,
56315 -0xe4,0x34,0x9d,0xf5,0x83,0xec,0xf0,0x04,0xfb,0x90,0x9e,0x3e,0xe0,0xff,0xeb,0xd3,
56316 -0x9f,0x40,0x02,0xe1,0xd6,0xeb,0xc3,0x94,0x10,0x40,0x21,0xeb,0x24,0xf0,0xff,0x74,
56317 -0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,
56318 -0x90,0x9e,0x3f,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x70,0x23,0xeb,0xc3,0x94,0x10,
56319 -0x50,0x40,0x74,0x01,0x7e,0x00,0xa8,0x03,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,
56320 -0xd8,0xf9,0xff,0x90,0x9e,0x41,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x23,0xbb,
56321 -0x11,0x09,0x90,0x9e,0x40,0xe0,0x30,0xe7,0x02,0x7b,0x17,0xeb,0x64,0x13,0x60,0x03,
56322 -0xbb,0x12,0x09,0x90,0x9e,0x3f,0xe0,0x30,0xe0,0x02,0x7b,0x18,0xac,0x03,0x8c,0x64,
56323 -0x80,0x34,0x0b,0x80,0x84,0x90,0x9e,0x3e,0xe0,0xfb,0x6c,0x70,0x69,0x74,0x67,0x2d,
56324 -0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xec,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4a,
56325 -0x12,0x43,0x5f,0xe0,0xb4,0x01,0x0c,0xe5,0x64,0x20,0xe6,0x07,0xec,0x44,0x40,0xf5,
56326 -0x64,0x80,0x03,0xaf,0x64,0x22,0xec,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,
56327 -0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xec,0x25,0xe0,0x24,0x66,0xf5,0x82,
56328 -0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,
56329 -0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,
56330 -0xf0,0xa3,0xef,0xf0,0x80,0x5b,0xec,0xd3,0x9b,0x40,0x56,0x90,0x9e,0x3e,0xe0,0xff,
56331 -0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xef,0xf0,0xac,0x07,0x8f,0x64,
56332 -0xec,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,
56333 -0x01,0x93,0xff,0xec,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,
56334 -0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,
56335 -0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0xaf,0x64,
56336 -0x22,0x74,0x01,0x2d,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,0xf0,0xaf,0x05,0xe5,
56337 -0x64,0x44,0x80,0xfd,0x12,0x5a,0x80,0xe5,0x64,0x44,0x80,0xff,0x22,0xe4,0xf5,0x59,
56338 -0xe5,0x59,0xb4,0x20,0x14,0x90,0x9a,0xc5,0xe0,0x04,0xf0,0x90,0x95,0x01,0xe0,0xff,
56339 -0x90,0x9a,0xc5,0xe0,0xb5,0x07,0x02,0xe4,0xf0,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,
56340 -0x4b,0x12,0x43,0x5f,0xe0,0x64,0x01,0x60,0x02,0xc1,0xd3,0xe5,0x59,0x25,0xe0,0x24,
56341 -0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0xd3,0x94,0x00,0xee,
56342 -0x94,0x00,0x50,0x02,0xc1,0xd3,0xe5,0x59,0x94,0x20,0x40,0x08,0x90,0x9a,0xc5,0xe0,
56343 -0x60,0x02,0xc1,0xde,0xe5,0x59,0x75,0xf0,0x0a,0xa4,0x24,0x00,0xf9,0x74,0x90,0x35,
56344 -0xf0,0x75,0x5e,0x01,0xf5,0x5f,0x89,0x60,0xe5,0x59,0x25,0xe0,0x24,0x80,0xf5,0x82,
56345 -0xe4,0x34,0x93,0xf5,0x83,0xe0,0xff,0xa3,0xe0,0x90,0x9e,0x38,0xcf,0xf0,0xa3,0xef,
56346 -0xf0,0xe5,0x59,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xff,
56347 -0xa3,0xe0,0x90,0x9e,0x3a,0xcf,0xf0,0xa3,0xef,0xf0,0xe5,0x59,0xc3,0x94,0x20,0x50,
56348 -0x14,0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,0x3f,0x90,
56349 -0x9e,0x34,0xf0,0x80,0x12,0x74,0xa6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,
56350 -0xe0,0x54,0x3f,0x90,0x9e,0x34,0xf0,0x90,0x9e,0x34,0xe0,0xfe,0x54,0x1f,0xa3,0xf0,
56351 -0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x48,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x3d,0xf0,
56352 -0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xc3,0x94,0x05,0x40,
56353 -0x02,0x61,0xac,0x90,0x9e,0x3d,0xe0,0xff,0x90,0x9e,0x35,0xe0,0x9f,0x40,0x13,0x90,
56354 -0x9e,0x3d,0xe0,0x90,0x9e,0x35,0xf0,0xee,0x54,0x40,0xfe,0x90,0x9e,0x34,0xf0,0xef,
56355 -0x4e,0xf0,0x90,0x04,0xfd,0xe0,0x54,0x05,0x64,0x01,0x70,0x29,0x90,0x9e,0x35,0xe0,
56356 -0xff,0x90,0x41,0x4a,0x93,0xfe,0x74,0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,
56357 -0x83,0xe0,0xc3,0x9e,0x40,0x06,0xef,0x90,0x40,0xda,0x80,0x30,0x90,0x9e,0x35,0xe0,
56358 -0x90,0x40,0xf6,0x80,0x27,0x90,0x9e,0x35,0xe0,0xff,0x90,0x41,0x4a,0x93,0xfe,0x74,
56359 -0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xc3,0x9e,0x40,0x06,0xef,
56360 -0x90,0x41,0x12,0x80,0x07,0x90,0x9e,0x35,0xe0,0x90,0x41,0x2e,0x93,0x90,0x9e,0x3c,
56361 -0xf0,0x90,0x9e,0x3c,0xe0,0x75,0xf0,0x06,0xa4,0x24,0x50,0xf9,0x74,0x40,0x35,0xf0,
56362 -0x75,0x5b,0xff,0xf5,0x5c,0x89,0x5d,0x90,0x9e,0x34,0xe0,0x90,0x41,0xf2,0x93,0xff,
56363 -0xd3,0x90,0x9e,0x3b,0xe0,0x9f,0x90,0x9e,0x3a,0xe0,0x94,0x00,0x40,0x09,0xe4,0xfd,
56364 -0xaf,0x59,0x12,0x5c,0xbd,0xc1,0x6a,0xe5,0x59,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,
56365 -0x34,0x95,0xf5,0x83,0xe0,0xf5,0x61,0xa3,0xe0,0xf5,0x62,0xab,0x5b,0xaa,0x5c,0xa9,
56366 -0x5d,0x12,0x29,0xd9,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x12,0x42,0x97,
56367 -0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,
56368 -0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0x7e,0x00,0xab,
56369 -0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x02,0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x29,
56370 -0xf2,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,0xaa,0x5c,0xa9,
56371 -0x5d,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,
56372 -0x90,0x00,0x04,0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,0x25,0x62,0xf5,
56373 -0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,0x00,0x03,0x12,
56374 -0x42,0x20,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x06,0x12,0x42,
56375 -0xc2,0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,
56376 -0x61,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0x7e,0x00,
56377 -0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x08,0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,
56378 -0x29,0xf2,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,0xaa,0x5c,
56379 -0xa9,0x5d,0x90,0x00,0x05,0x12,0x42,0x20,0xff,0x7e,0x00,0x90,0x9e,0x38,0xe0,0xfc,
56380 -0xa3,0xe0,0xfd,0x12,0x29,0xf2,0xd3,0xe5,0x62,0x9f,0xe5,0x61,0x9e,0x40,0x0c,0xe5,
56381 -0x62,0x9f,0xf5,0x62,0xe5,0x61,0x9e,0xf5,0x61,0x80,0x05,0xe4,0xf5,0x61,0xf5,0x62,
56382 -0xe5,0x59,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe5,0x61,0xf0,
56383 -0xa3,0xe5,0x62,0xf0,0x90,0x9e,0x34,0xe0,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,
56384 -0x41,0xf5,0x83,0xc3,0x74,0x01,0x93,0x95,0x62,0xe4,0x93,0x95,0x61,0x50,0x07,0xaf,
56385 -0x59,0x12,0x66,0x87,0xc1,0x3e,0x90,0x9e,0x34,0xe0,0x25,0xe0,0x24,0x9e,0xf5,0x82,
56386 -0xe4,0x34,0x41,0xf5,0x83,0xd3,0x74,0x01,0x93,0x95,0x62,0xe4,0x93,0x95,0x61,0x50,
56387 -0x02,0xc1,0x3e,0x7d,0x01,0xaf,0x59,0x12,0x5c,0xbd,0xc1,0x3e,0x74,0xe6,0x25,0x59,
56388 -0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xfc,0x64,0x05,0x60,0x02,0xa1,0x47,0x90,
56389 -0x96,0x43,0xe0,0xff,0xb4,0x03,0x0b,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x19,0x40,0x3d,
56390 -0x80,0x2e,0xef,0xb4,0x02,0x0b,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x11,0x40,0x2e,0x80,
56391 -0x1f,0x90,0x96,0x43,0xe0,0xff,0xb4,0x01,0x0b,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x0a,
56392 -0x40,0x1b,0x80,0x0c,0xef,0x70,0x11,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x03,0x40,0x0d,
56393 -0x90,0x9a,0x84,0x74,0x01,0xf0,0x80,0x05,0xe4,0x90,0x9a,0x84,0xf0,0x74,0x84,0x25,
56394 -0x59,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x63,0x74,0x44,0x25,0x59,0xf5,
56395 -0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xff,0xc3,0x94,0x30,0x50,0x02,0x81,0xf4,0x90,
56396 -0x9a,0x84,0xe0,0x64,0x01,0x60,0x02,0x81,0xf4,0x74,0x85,0x25,0x59,0xf5,0x82,0xe4,
56397 -0x34,0x9a,0xf5,0x83,0xe0,0x64,0x0a,0x60,0x51,0xef,0x24,0x05,0xff,0xe4,0x33,0xfe,
56398 -0x74,0x41,0x25,0x59,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe0,0xfd,0xd3,0x9f,0xee,
56399 -0x64,0x80,0xf8,0x74,0x80,0x98,0x50,0x32,0xed,0x24,0x05,0xff,0xe4,0x33,0xfe,0x74,
56400 -0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xd3,0x9f,0xee,0x64,0x80,
56401 -0xf8,0x74,0x80,0x98,0x50,0x14,0x74,0x26,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9d,0xf5,
56402 -0x83,0xe0,0xff,0x90,0x9e,0x35,0xe0,0x6f,0x60,0x3d,0x74,0x44,0x25,0x59,0xf5,0x82,
56403 -0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xff,0xd3,0x94,0x42,0x40,0x05,0x75,0x63,0x05,0x80,
56404 -0x0e,0xef,0xd3,0x94,0x39,0x40,0x05,0x75,0x63,0x03,0x80,0x03,0x75,0x63,0x01,0x74,
56405 -0x41,0x25,0x59,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xef,0xf0,0x74,0x85,0x25,0x59,
56406 -0xf5,0x82,0xe4,0x34,0x9a,0x80,0x29,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,
56407 -0xf5,0x83,0xe4,0xf0,0x74,0x85,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,
56408 -0x04,0xf0,0x80,0x10,0xe4,0xf5,0x63,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,
56409 -0xf5,0x83,0xe4,0xf0,0x90,0x9e,0x35,0xe0,0xff,0x74,0x26,0x25,0x59,0xf5,0x82,0xe4,
56410 -0x34,0x9d,0xf5,0x83,0xef,0xf0,0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x98,0xf5,
56411 -0x83,0xe5,0x63,0xf0,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x4c,0x12,0x43,0x5f,0xe0,
56412 -0xb4,0x01,0x10,0xe4,0xf5,0x63,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,
56413 -0x83,0xe4,0xf0,0xad,0x63,0xc1,0x39,0xec,0x64,0x06,0x60,0x02,0xc1,0x3e,0xf5,0x61,
56414 -0xf5,0x62,0x90,0x42,0x13,0x93,0xff,0x7e,0x00,0x90,0x9e,0x38,0xe0,0xfc,0xa3,0xe0,
56415 -0xfd,0x12,0x29,0xf2,0x90,0x9e,0x36,0xee,0xf0,0xa3,0xef,0xf0,0x74,0x84,0x25,0x59,
56416 -0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x63,0xe4,0xf5,0x5a,0xab,0x5e,0xaa,
56417 -0x5f,0xa9,0x60,0x75,0xf0,0x02,0xe5,0x5a,0xa4,0xf5,0x82,0x85,0xf0,0x83,0x12,0x42,
56418 -0xc2,0xfd,0xac,0xf0,0xe5,0x5a,0x90,0x42,0x0e,0x93,0xff,0x7e,0x00,0x12,0x29,0xf2,
56419 -0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xc3,0x90,0x9e,0x37,0xe0,0x95,
56420 -0x62,0x90,0x9e,0x36,0xe0,0x95,0x61,0x40,0x07,0x05,0x5a,0xe5,0x5a,0xb4,0x05,0xbd,
56421 -0xe5,0x5a,0xc3,0x13,0xf5,0x5a,0xe5,0x63,0xb4,0x01,0x06,0xe5,0x5a,0x70,0x46,0x80,
56422 -0x13,0xe5,0x63,0xb4,0x03,0x15,0xe5,0x5a,0x70,0x05,0x75,0x63,0x03,0x80,0x39,0xe5,
56423 -0x5a,0xb4,0x01,0x05,0x75,0x63,0x01,0x80,0x2f,0x80,0x2a,0xe5,0x63,0xb4,0x05,0x28,
56424 -0xe5,0x5a,0x70,0x05,0x75,0x63,0x05,0x80,0x0d,0xe5,0x5a,0xb4,0x01,0x05,0x75,0x63,
56425 -0x03,0x80,0x03,0x75,0x63,0x01,0xd3,0x90,0x9e,0x3b,0xe0,0x94,0x03,0x90,0x9e,0x3a,
56426 -0xe0,0x94,0x00,0x40,0x03,0xe4,0xf5,0x63,0xd3,0x90,0x9e,0x3b,0xe0,0x94,0x03,0x90,
56427 -0x9e,0x3a,0xe0,0x94,0x00,0x40,0x03,0xe4,0xf5,0x63,0x74,0x84,0x25,0x59,0xf5,0x82,
56428 -0xe4,0x34,0x98,0xf5,0x83,0xe5,0x63,0xf0,0xfd,0xaf,0x59,0x12,0x66,0x47,0x74,0xe6,
56429 -0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xd3,0x94,0x05,0x74,0xe6,0x50,
56430 -0x0e,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x04,0xf0,0x80,0x0b,0x25,
56431 -0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0xab,0x5e,0xaa,0x5f,0xa9,0x60,
56432 -0xe4,0xf5,0xf0,0x12,0x42,0xfa,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x02,0xe4,
56433 -0xf5,0xf0,0x12,0x43,0x19,0x90,0x00,0x04,0xe4,0xf5,0xf0,0x12,0x43,0x19,0x90,0x00,
56434 -0x06,0xe4,0xf5,0xf0,0x12,0x43,0x19,0x90,0x00,0x08,0xe4,0xf5,0xf0,0x12,0x43,0x19,
56435 -0xe5,0x59,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe4,0xf0,0xa3,
56436 -0xf0,0xe5,0x59,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,
56437 -0xa3,0xf0,0xe5,0x59,0x25,0xe0,0x24,0x44,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,
56438 -0xf0,0xa3,0xf0,0x05,0x59,0xe5,0x59,0xc3,0x94,0x40,0x50,0x02,0x01,0x90,0x22,0x90,
56439 -0x04,0x44,0x74,0x11,0xf0,0xa3,0x74,0xf0,0xf0,0xa3,0x74,0x0f,0xf0,0xa3,0xe4,0xf0,
56440 -0xfd,0x74,0xa4,0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe4,0xf0,0x0d,0xbd,0x10,
56441 -0xf0,0xe4,0x90,0x9a,0xc5,0xf0,0x90,0x95,0x01,0x04,0xf0,0xe4,0xfd,0x75,0xf0,0x0a,
56442 -0xed,0x90,0x90,0x00,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,
56443 -0x90,0x02,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x04,
56444 -0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x06,0x12,0x43,
56445 -0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x08,0x12,0x43,0x5f,0xe4,
56446 -0xf0,0xa3,0xf0,0x74,0x26,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0x74,0x13,0xf0,
56447 -0x74,0x85,0x2d,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe4,0xf0,0x74,0x84,0x2d,0xf5,
56448 -0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,0xed,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,
56449 -0x34,0x93,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,
56450 -0x34,0x98,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,
56451 -0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0x44,0xf5,0x82,0xe4,
56452 -0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,
56453 -0x34,0x9a,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0x46,0xf5,0x82,0xe4,
56454 -0x34,0x9b,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0x74,0x86,0x2d,0xf5,0x82,0xe4,0x34,0x9c,
56455 -0xf5,0x83,0xe4,0xf0,0x74,0x46,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,
56456 -0x74,0xe6,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x90,0x41,0xc4,0x93,
56457 -0xfe,0x74,0x01,0x93,0xff,0x90,0x41,0x8c,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,
56458 -0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,
56459 -0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4b,0x12,0x43,
56460 -0x5f,0x74,0x01,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4a,0x12,0x43,0x5f,0x74,0x01,
56461 -0xf0,0x74,0x82,0x2d,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0x74,0x0c,0xf0,0x75,0xf0,
56462 -0x09,0xed,0x90,0x96,0x46,0x12,0x43,0x5f,0x74,0xff,0xf0,0xa3,0xf0,0x75,0xf0,0x09,
56463 -0xed,0x90,0x96,0x44,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0x74,0x0f,0xf0,0x75,0xf0,0x09,
56464 -0xed,0x90,0x96,0x48,0x12,0x43,0x5f,0x74,0x13,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,
56465 -0x49,0x12,0x43,0x5f,0xe4,0xf0,0xed,0xc3,0x94,0x20,0x50,0x0f,0x74,0x84,0x2d,0xf5,
56466 -0x82,0xe4,0x34,0x04,0xf5,0x83,0x74,0x13,0xf0,0x80,0x0d,0x74,0xa6,0x2d,0xf5,0x82,
56467 -0xe4,0x34,0x9c,0xf5,0x83,0x74,0x13,0xf0,0x0d,0xed,0x64,0x40,0x60,0x03,0x02,0x6f,
56468 -0x0d,0x22,0x12,0x29,0xd9,0xf5,0x59,0xc3,0x94,0x40,0x50,0x15,0x90,0x00,0x02,0x12,
56469 -0x42,0x20,0xff,0x74,0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xef,0xf0,
56470 -0x22,0xe5,0x59,0xb4,0x40,0x0a,0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x96,0x42,0xf0,
56471 -0x22,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0x54,0x3f,0xfe,0xef,0x54,0x80,0xc4,0x13,
56472 -0x13,0x13,0x54,0x01,0xfd,0xaf,0x06,0x02,0x55,0x30,0x12,0x29,0xd9,0x90,0x95,0x01,
56473 -0xf0,0x22,0x12,0x29,0xd9,0xf5,0x22,0x22,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0x30,
56474 -0xe0,0x25,0x12,0x29,0xd9,0x90,0x9e,0x6a,0xf0,0x90,0x00,0x01,0x12,0x42,0x20,0x90,
56475 -0x9e,0x6b,0xf0,0xef,0xc3,0x13,0x54,0x7f,0x90,0x9e,0x69,0xf0,0x90,0x00,0x03,0x12,
56476 -0x42,0x20,0x90,0x9e,0x6f,0xf0,0x22,0x90,0x9e,0x6a,0x74,0x01,0xf0,0x90,0x9e,0x6b,
56477 -0x74,0x03,0xf0,0x90,0x9e,0x69,0x74,0x14,0xf0,0x90,0x9e,0x6f,0x74,0x05,0xf0,0x22,
56478 -0x12,0x29,0xd9,0x30,0xe0,0x18,0xc3,0x13,0x54,0x7f,0x90,0x9e,0x6e,0xf0,0x90,0x00,
56479 -0x01,0x12,0x42,0x20,0xff,0x90,0x9e,0x6c,0xe4,0xf0,0xa3,0xef,0xf0,0x22,0x90,0x9e,
56480 -0x6e,0x74,0x07,0xf0,0x90,0x9e,0x6c,0xe4,0xf0,0xa3,0x74,0x02,0xf0,0x22,0x90,0x02,
56481 -0x09,0xe0,0xfd,0x12,0x29,0xd9,0xfe,0xaf,0x05,0xed,0x2e,0x90,0x9e,0x50,0xf0,0x90,
56482 -0x00,0x01,0x12,0x42,0x20,0xff,0xed,0x2f,0x90,0x9e,0x51,0xf0,0x90,0x00,0x02,0x12,
56483 -0x42,0x20,0xff,0xed,0x2f,0x90,0x9e,0x52,0xf0,0x90,0x00,0x03,0x12,0x42,0x20,0xff,
56484 -0xed,0x2f,0x90,0x9e,0x53,0xf0,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0xae,0x05,0xed,
56485 -0x2f,0x90,0x9e,0x54,0xf0,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x3f,
56486 -0x12,0x43,0x8b,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,0xc2,0xfa,
56487 -0xe5,0xf0,0x24,0x00,0xff,0xe4,0x3a,0xfe,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,
56488 -0x01,0xee,0x8f,0xf0,0x12,0x43,0x19,0x12,0x29,0xd9,0xff,0x60,0x2c,0xb5,0x71,0x16,
56489 -0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,0xc2,0x65,0x73,0x70,0x04,
56490 -0xe5,0x72,0x65,0xf0,0x60,0x23,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,
56491 -0x42,0xc2,0xff,0xae,0xf0,0x51,0x3e,0x80,0x10,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x12,
56492 -0x29,0xd9,0x65,0x71,0x60,0x03,0x12,0x44,0xc8,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x9e,
56493 -0x42,0xee,0xf0,0xa3,0xef,0xf0,0x75,0x71,0x01,0x8e,0x72,0xf5,0x73,0xe4,0xfd,0x7f,
56494 -0x0b,0x51,0x80,0xe4,0xfd,0x7f,0x02,0x51,0x80,0x71,0x4a,0xe4,0xff,0x71,0xac,0xe4,
56495 -0xf5,0x75,0x90,0x01,0xc9,0xe5,0x75,0xf0,0x90,0x9e,0x42,0xe0,0xfc,0xa3,0xe0,0xfd,
56496 -0xec,0xfb,0x8d,0x44,0xe4,0xf5,0x45,0x7d,0x01,0x7f,0x60,0x7e,0x01,0x02,0x35,0xab,
56497 -0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x45,0xed,0xf0,0x90,0x9e,0x44,0xef,
56498 -0xf0,0xd3,0x94,0x07,0x50,0x4f,0xa3,0xe0,0x70,0x1a,0x90,0x9e,0x44,0xe0,0xff,0x74,
56499 -0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x47,0xe0,
56500 -0x5f,0xf0,0x80,0x17,0x90,0x9e,0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,
56501 -0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x47,0xe0,0x4f,0xf0,0x12,0x4b,0xdb,0x90,0x9e,
56502 -0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,
56503 -0x90,0x00,0x46,0x80,0x5a,0x90,0x9e,0x44,0xe0,0x24,0xf8,0xf0,0xa3,0xe0,0x70,0x1d,
56504 -0x90,0x9e,0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,
56505 -0xc4,0x54,0xf0,0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0x80,0x1a,0x90,0x9e,0x44,
56506 -0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,
56507 -0xff,0x90,0x00,0x43,0xe0,0x4f,0xf0,0x12,0x4b,0xdb,0x90,0x9e,0x44,0xe0,0xff,0x74,
56508 -0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x43,0xe0,
56509 -0x5f,0xf0,0x12,0x4b,0xdb,0xd0,0xd0,0x92,0xaf,0x22,0x7f,0x0b,0x71,0xb9,0xef,0x65,
56510 -0x74,0x60,0x10,0xe5,0x74,0xb4,0x01,0x05,0xe4,0xf5,0x74,0x80,0x03,0x75,0x74,0x01,
56511 -0x7f,0x01,0x22,0x7f,0x00,0x22,0xe5,0x71,0x64,0x01,0x70,0x3f,0x71,0x4a,0xbf,0x01,
56512 -0x04,0x7f,0x01,0x71,0xac,0x90,0x00,0x46,0xe0,0x44,0x04,0xfd,0x7f,0x46,0x12,0x4c,
56513 -0xe3,0x90,0x00,0x44,0xe0,0x54,0xfb,0xfd,0x7f,0x44,0x12,0x4c,0xe3,0x90,0x00,0x46,
56514 -0xe0,0x54,0xfb,0xfd,0x7f,0x46,0x12,0x4c,0xe3,0x7f,0x02,0x71,0xb9,0x8f,0x75,0x90,
56515 -0x01,0xc9,0xe5,0x75,0xf0,0xb4,0x01,0x03,0x12,0x4f,0xda,0x22,0x90,0x01,0xca,0xe5,
56516 -0x74,0xf0,0xef,0x60,0x03,0x12,0x4f,0xda,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
56517 -0x90,0x9e,0xb1,0xef,0xf0,0xd3,0x94,0x07,0x50,0x47,0xe0,0xff,0x74,0x01,0xa8,0x07,
56518 -0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x46,0xe0,0x5f,0xf0,0x12,
56519 -0x4b,0xdb,0x90,0x9e,0xb1,0xe0,0xfd,0x74,0x01,0x7e,0x00,0xa8,0x05,0x08,0x80,0x05,
56520 -0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,0x44,0xe0,0xfb,0xe4,0xfe,0xef,
56521 -0x5b,0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,0xd8,0xf8,0xff,0x80,
56522 -0x44,0x90,0x9e,0xb1,0xe0,0x24,0xf8,0xf0,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,
56523 -0x02,0xc3,0x33,0xd8,0xfc,0x12,0x4b,0xd3,0x90,0x9e,0xb1,0xe0,0xfd,0x74,0x01,0x7e,
56524 -0x00,0xa8,0x05,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,
56525 -0x42,0xe0,0xfb,0xe4,0xfe,0xef,0x5b,0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,
56526 -0xce,0x13,0xd8,0xf8,0xff,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,
56527 -0xd0,0x90,0x9e,0x56,0xe0,0x90,0x9e,0x40,0xf0,0x90,0x9e,0x57,0xe0,0xf5,0x64,0xa3,
56528 -0xe0,0xf5,0x65,0xe4,0xf5,0x61,0x74,0x59,0x25,0x61,0xf5,0x82,0xe4,0x34,0x9e,0xf5,
56529 -0x83,0xe0,0xff,0x74,0x66,0x25,0x61,0xf8,0xa6,0x07,0x05,0x61,0xe5,0x61,0xb4,0x04,
56530 -0xe5,0x90,0x9e,0x40,0xe0,0x12,0x43,0x94,0x74,0xb7,0x00,0x75,0xdf,0x01,0x74,0xbd,
56531 -0x02,0x74,0xbd,0x03,0x74,0xbd,0x04,0x75,0xdf,0x05,0x75,0xaf,0x80,0x75,0xc5,0x81,
56532 -0x75,0xdf,0x82,0x00,0x00,0x75,0xdb,0xaf,0x69,0xb1,0xe6,0xa1,0xdf,0x90,0x9e,0x40,
56533 -0xe0,0xff,0xb4,0x02,0x08,0x90,0x9e,0x3f,0x74,0x01,0xf0,0x80,0x0f,0xef,0x90,0x9e,
56534 -0x3f,0xb4,0x03,0x05,0x74,0x02,0xf0,0x80,0x03,0x74,0x04,0xf0,0xc3,0xe5,0x64,0x94,
56535 -0x08,0x50,0x49,0xe4,0xf5,0x61,0x90,0x9e,0x3f,0xe0,0xff,0xe5,0x61,0xc3,0x9f,0x40,
56536 -0x02,0xa1,0xdf,0xc3,0xe5,0x64,0x94,0x01,0x50,0x14,0xe5,0x61,0x25,0x65,0xff,0xc3,
56537 -0x74,0x03,0x95,0x61,0x24,0x66,0xf8,0xe6,0xfd,0x12,0x4c,0xe3,0x80,0x1a,0xc3,0x74,
56538 -0x03,0x95,0x61,0x24,0x66,0xf8,0xe6,0xff,0xe5,0x61,0x7c,0x00,0x25,0x65,0xfd,0xec,
56539 -0x35,0x64,0x8d,0x82,0xf5,0x83,0xef,0xf0,0x05,0x61,0x80,0xba,0xc3,0xe5,0x64,0x94,
56540 -0x10,0x40,0x02,0xa1,0xdf,0x90,0x9e,0x40,0xe0,0x64,0x04,0x60,0x02,0xa1,0xdf,0xaf,
56541 -0x67,0xfc,0xfd,0xfe,0x78,0x10,0x12,0x2a,0x6c,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,
56542 -0x07,0xaf,0x66,0xe4,0xfc,0xfd,0xfe,0x78,0x18,0x12,0x2a,0x6c,0xd0,0x03,0xd0,0x02,
56543 -0xd0,0x01,0xd0,0x00,0x12,0x43,0x46,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0xaf,
56544 -0x68,0xe4,0xfc,0xfd,0xfe,0x78,0x08,0x12,0x2a,0x6c,0xd0,0x03,0xd0,0x02,0xd0,0x01,
56545 -0xd0,0x00,0x12,0x43,0x46,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,0x07,0xaf,0x69,0xe4,
56546 -0xfc,0xfd,0xfe,0x12,0x43,0x46,0xa3,0x12,0x2a,0x7f,0x90,0x9e,0x41,0x12,0x43,0x53,
56547 -0x90,0x80,0x85,0x12,0x2a,0x7f,0xaf,0x65,0xae,0x64,0x12,0x2f,0xd9,0x80,0x30,0xe5,
56548 -0x68,0x7f,0x00,0xfe,0xef,0x25,0x69,0xf5,0x63,0xe4,0x3e,0xf5,0x62,0xaf,0x63,0xfe,
56549 -0x12,0x37,0x54,0x80,0x1a,0xe5,0x68,0x7f,0x00,0xfe,0xef,0x25,0x69,0xf5,0x63,0xe4,
56550 -0x3e,0xf5,0x62,0xaf,0x63,0xfe,0x12,0x36,0xcb,0x80,0x04,0x7f,0x00,0x80,0x02,0x7f,
56551 -0x01,0xd0,0xd0,0x92,0xaf,0x22,0x8f,0x6a,0xe4,0x90,0x9e,0x45,0xf0,0xe5,0x6a,0x14,
56552 -0xfe,0x90,0x9e,0x45,0xe0,0xff,0xc3,0x9e,0x50,0x0e,0xef,0x04,0xfd,0x12,0x34,0xb7,
56553 -0x90,0x9e,0x45,0xe0,0x04,0xf0,0x80,0xe5,0xe5,0x6a,0x14,0xff,0x7d,0xff,0x12,0x34,
56554 -0xb7,0x90,0x9e,0x45,0xe5,0x6a,0xf0,0x90,0x9e,0x45,0xe0,0xc3,0x94,0xff,0x50,0x0f,
56555 -0xe0,0xff,0x04,0xfd,0x12,0x34,0xb7,0x90,0x9e,0x45,0xe0,0x04,0xf0,0x80,0xe8,0xad,
56556 -0x6a,0x7f,0xff,0x02,0x34,0xb7,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xe4,0xf5,0x5b,
56557 -0x75,0x5c,0x04,0xf5,0x5d,0xf5,0x5f,0xf5,0x60,0x90,0x02,0x09,0xe0,0xff,0x12,0x29,
56558 -0xd9,0xfe,0xef,0x2e,0xf5,0x5e,0x30,0xe0,0x08,0x75,0x59,0x00,0x75,0x5a,0x80,0x80,
56559 -0x05,0xe4,0xf5,0x59,0xf5,0x5a,0xe5,0x5e,0xc3,0x13,0x90,0xfd,0x10,0xf0,0x74,0x20,
56560 -0x25,0x5b,0xf5,0x5b,0xad,0x5a,0xe5,0x5b,0x2d,0xff,0x24,0x01,0xf5,0x82,0xe4,0x34,
56561 -0xfc,0xf5,0x83,0xe0,0x90,0x9e,0x56,0xf0,0x74,0x02,0x2f,0xf5,0x82,0xe4,0x34,0xfc,
56562 -0xf5,0x83,0xe0,0xfe,0xe5,0x5b,0x2d,0x24,0x03,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,
56563 -0xe0,0x24,0x00,0xff,0xe4,0x3e,0x90,0x9e,0x57,0xf0,0xa3,0xef,0xf0,0x7f,0x04,0xe5,
56564 -0x5b,0x25,0x5a,0x2f,0x24,0x00,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0xfe,0x74,
56565 -0x55,0x2f,0xf5,0x82,0xe4,0x34,0x9e,0xf5,0x83,0xee,0xf0,0x0f,0xbf,0x08,0xe0,0x91,
56566 -0x5a,0xef,0x70,0x3f,0x90,0x01,0xc3,0xe0,0x60,0x25,0xc3,0xe5,0x60,0x94,0xe8,0xe5,
56567 -0x5f,0x94,0x03,0x40,0x09,0x90,0x01,0xc6,0xe0,0x44,0x10,0xf0,0x80,0x63,0x05,0x60,
56568 -0xe5,0x60,0x70,0x02,0x05,0x5f,0x7f,0x0a,0x7e,0x00,0x12,0x37,0x54,0x80,0xd5,0x90,
56569 -0x01,0xc6,0xe0,0x90,0x01,0xc3,0x30,0xe2,0x05,0x74,0xfe,0xf0,0x80,0x43,0x74,0xff,
56570 -0xf0,0x80,0x3e,0xe5,0x5b,0xb4,0x78,0x23,0xe4,0xf5,0x5b,0x05,0x5e,0xe5,0x5a,0x64,
56571 -0x80,0x45,0x59,0x70,0x06,0xf5,0x59,0xf5,0x5a,0x80,0x06,0x75,0x59,0x00,0x75,0x5a,
56572 -0x80,0xe5,0x5e,0xc3,0x13,0x90,0xfd,0x10,0xf0,0x80,0x06,0x74,0x08,0x25,0x5b,0xf5,
56573 -0x5b,0xe5,0x5d,0x15,0x5d,0x70,0x02,0x15,0x5c,0xe5,0x5d,0x45,0x5c,0x60,0x02,0xc1,
56574 -0x74,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x06,0x34,0x74,0xff,0xf0,0xe4,0xa3,0xf0,0xa3,
56575 -0xf0,0xa3,0xf0,0x22,0xe4,0x90,0x9e,0x5d,0xf0,0x90,0x00,0x80,0xe0,0x44,0x80,0xfd,
56576 -0x7f,0x80,0x02,0x4c,0xe3,0x8e,0x59,0x8f,0x5a,0x8b,0x5b,0x8a,0x5c,0x89,0x5d,0xe4,
56577 -0x90,0x9e,0x34,0xf0,0xef,0x90,0x00,0x31,0xf0,0x12,0x4b,0xdb,0xe5,0x59,0x54,0x03,
56578 -0xff,0x90,0x00,0x32,0xe0,0x54,0xfc,0x4f,0xf0,0x12,0x4b,0xdb,0x90,0x00,0x33,0xe0,
56579 -0x54,0x7f,0xf0,0x12,0x4b,0xdb,0x90,0x00,0x33,0xe0,0x20,0xe7,0x0e,0x90,0x9e,0x34,
56580 -0xe0,0xc3,0x94,0x64,0x50,0x05,0xe0,0x04,0xf0,0x80,0xeb,0x90,0x9e,0x34,0xe0,0xc3,
56581 -0x94,0x64,0x50,0x10,0x90,0x00,0x30,0xe0,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x12,0x42,
56582 -0x4d,0x7f,0x01,0x22,0x7f,0x00,0x22,0xe4,0xf5,0x74,0x22,0x90,0x9e,0x60,0xe0,0x90,
56583 -0x9e,0x0f,0xf0,0x22,0xef,0x70,0x03,0x02,0x79,0x9c,0x90,0x9e,0x0f,0xe0,0x60,0x03,
56584 -0x02,0x7d,0x67,0x90,0x9d,0xfb,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
56585 -0x8c,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9d,0xa7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,
56586 -0x2a,0x7f,0x7f,0x44,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9d,0xab,0x12,0x43,0x53,0x90,
56587 -0x80,0x85,0x12,0x2a,0x7f,0x7f,0x5c,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9d,0xaf,0x12,
56588 -0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x6c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,
56589 -0x9d,0xb3,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x70,0x7e,0x0e,0x12,
56590 -0x2f,0xd9,0x90,0x9d,0xb7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x74,
56591 -0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xbb,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,
56592 -0x7f,0x7f,0x78,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xbf,0x12,0x43,0x53,0x90,0x80,
56593 -0x85,0x12,0x2a,0x7f,0x7f,0x7c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xc3,0x12,0x43,
56594 -0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,
56595 -0xc7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x84,0x7e,0x0e,0x12,0x2f,
56596 -0xd9,0x90,0x9d,0xcb,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x88,0x7e,
56597 -0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xcf,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,
56598 -0x7f,0x8c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xd3,0x12,0x43,0x53,0x90,0x80,0x85,
56599 -0x12,0x2a,0x7f,0x7f,0xd0,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xd7,0x12,0x43,0x53,
56600 -0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0xd4,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xdb,
56601 -0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0xd8,0x7e,0x0e,0x12,0x2f,0xd9,
56602 -0x90,0x9d,0xdf,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0xdc,0x7e,0x0e,
56603 -0x12,0x2f,0xd9,0x90,0x9d,0xe3,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
56604 -0xe0,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xe7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,
56605 -0x2a,0x7f,0x7f,0xec,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xeb,0x12,0x43,0x53,0x90,
56606 -0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x2f,0xd9,0x90,0x9d,0xef,0x12,
56607 -0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0d,0x12,0x2f,0xd9,0x90,
56608 -0x9d,0xf3,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,
56609 -0x2f,0xd9,0x90,0x9d,0xf7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,
56610 -0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,0x0f,0x74,0x01,0xf0,0x22,0x90,0x9e,0x0f,0xe0,
56611 -0x64,0x01,0x60,0x02,0xa1,0x67,0x7f,0x8c,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xfb,
56612 -0x12,0x2a,0x7f,0x7f,0x44,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xa7,0x12,0x2a,0x7f,
56613 -0x7f,0x5c,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xab,0x12,0x2a,0x7f,0x7f,0x6c,0x7e,
56614 -0x0e,0x12,0x27,0xde,0x90,0x9d,0xaf,0x12,0x2a,0x7f,0x7f,0x70,0x7e,0x0e,0x12,0x27,
56615 -0xde,0x90,0x9d,0xb3,0x12,0x2a,0x7f,0x7f,0x74,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,
56616 -0xb7,0x12,0x2a,0x7f,0x7f,0x78,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xbb,0x12,0x2a,
56617 -0x7f,0x7f,0x7c,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xbf,0x12,0x2a,0x7f,0x7f,0x80,
56618 -0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xc3,0x12,0x2a,0x7f,0x7f,0x84,0x7e,0x0e,0x12,
56619 -0x27,0xde,0x90,0x9d,0xc7,0x12,0x2a,0x7f,0x7f,0x88,0x7e,0x0e,0x12,0x27,0xde,0x90,
56620 -0x9d,0xcb,0x12,0x2a,0x7f,0x7f,0x8c,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xcf,0x12,
56621 -0x2a,0x7f,0x7f,0xd0,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xd3,0x12,0x2a,0x7f,0x7f,
56622 -0xd4,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xd7,0x12,0x2a,0x7f,0x7f,0xd8,0x7e,0x0e,
56623 -0x12,0x27,0xde,0x90,0x9d,0xdb,0x12,0x2a,0x7f,0x7f,0xdc,0x7e,0x0e,0x12,0x27,0xde,
56624 -0x90,0x9d,0xdf,0x12,0x2a,0x7f,0x7f,0xe0,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xe3,
56625 -0x12,0x2a,0x7f,0x7f,0xec,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xe7,0x12,0x2a,0x7f,
56626 -0x7f,0x04,0x7e,0x0c,0x12,0x27,0xde,0x90,0x9d,0xeb,0x12,0x2a,0x7f,0x7f,0x04,0x7e,
56627 -0x0d,0x12,0x27,0xde,0x90,0x9d,0xef,0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,0x27,
56628 -0xde,0x90,0x9d,0xf3,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,
56629 -0xf7,0x12,0x2a,0x7f,0x7f,0x8c,0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0xa1,0x12,0x2a,
56630 -0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0xed,0x44,0xc0,0xfd,0xec,0x90,0x9e,0xa1,0x12,
56631 -0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x8c,
56632 -0x7e,0x08,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x01,0x00,0x00,0x7f,
56633 -0x44,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0xdb,0x25,0xa4,
56634 -0x7f,0x5c,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,
56635 -0xa4,0x7f,0x6c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,
56636 -0x25,0xa4,0x7f,0x70,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x04,
56637 -0x1b,0x25,0xa4,0x7f,0x74,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,
56638 -0x04,0x1b,0x25,0xa4,0x7f,0x78,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,
56639 -0x8b,0x04,0x1b,0x25,0xa4,0x7f,0x7c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,
56640 -0x2a,0x8b,0x04,0x1b,0x25,0xa4,0x7f,0x80,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,
56641 -0x12,0x2a,0x8b,0x63,0xdb,0x25,0xa4,0x7f,0x84,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,
56642 -0x85,0x12,0x2a,0x8b,0x04,0x1b,0x25,0xa4,0x7f,0x88,0x7e,0x0e,0x12,0x2f,0xd9,0x90,
56643 -0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0x8c,0x7e,0x0e,0x12,0x2f,0xd9,
56644 -0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0xd0,0x7e,0x0e,0x12,0x2f,
56645 -0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0xd4,0x7e,0x0e,0x12,
56646 -0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0xd8,0x7e,0x0e,
56647 -0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x1b,0x25,0xa4,0x7f,0xdc,0x7e,
56648 -0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x1b,0x25,0xa4,0x7f,0xe0,
56649 -0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x24,0xdb,0x25,0xa4,0x7f,
56650 -0xec,0x7e,0x0e,0x12,0x2f,0xd9,0x7f,0x04,0x7e,0x0c,0x12,0x27,0xde,0x90,0x9e,0xa1,
56651 -0x12,0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0xe4,0xff,0xec,0x90,0x9e,0xa1,0x12,
56652 -0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0xef,0x44,0x11,0xff,0xec,0x90,0x9e,0xa1,
56653 -0x12,0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
56654 -0x04,0x7e,0x0c,0x12,0x2f,0xd9,0x7f,0x04,0x7e,0x0d,0x12,0x27,0xde,0x90,0x9e,0xa1,
56655 -0x12,0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0xef,0x54,0xf0,0xff,0xec,0x90,0x9e,
56656 -0xa1,0x12,0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0xef,0x44,0x01,0xff,0xec,0x90,
56657 -0x9e,0xa1,0x12,0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,
56658 -0x7f,0x7f,0x04,0x7e,0x0d,0x12,0x2f,0xd9,0x7f,0x0c,0x7e,0x09,0x12,0x27,0xde,0x90,
56659 -0x9e,0xa1,0x12,0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0xe4,0xff,0xec,0x90,0x9e,
56660 -0xa1,0x12,0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0xef,0x44,0x11,0xff,0xec,0x90,
56661 -0x9e,0xa1,0x12,0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,
56662 -0x7f,0x7f,0x0c,0x7e,0x09,0x12,0x2f,0xd9,0x7f,0x0c,0x7e,0x09,0x12,0x27,0xde,0x90,
56663 -0x9e,0xa1,0x12,0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0xed,0x54,0x0f,0xfd,0xec,
56664 -0x54,0xf0,0xfc,0x90,0x9e,0xa1,0x12,0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0xed,
56665 -0x44,0x10,0xfd,0xec,0x44,0x01,0xfc,0x90,0x9e,0xa1,0x12,0x2a,0x7f,0x90,0x9e,0xa1,
56666 -0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,0x2f,0xd9,
56667 -0x7f,0x04,0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0xa1,0x12,0x2a,0x7f,0x90,0x9e,0xa1,
56668 -0x12,0x43,0x53,0xef,0x54,0xf0,0xff,0xec,0x90,0x9e,0xa1,0x12,0x2a,0x7f,0x90,0x9e,
56669 -0xa1,0x12,0x43,0x53,0xef,0x44,0x01,0xff,0xec,0x90,0x9e,0xa1,0x12,0x2a,0x7f,0x90,
56670 -0x9e,0xa1,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x08,0x12,
56671 -0x2f,0xd9,0xe4,0x90,0x9e,0x0f,0xf0,0x22,0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x9e,
56672 -0x1e,0xf0,0xe0,0x60,0x04,0xe0,0xf4,0x70,0x21,0xa2,0xaf,0xe4,0x33,0xf5,0x59,0xc2,
56673 -0xaf,0x90,0x00,0x47,0xe0,0x54,0xfb,0xfd,0x7f,0x47,0x12,0x4c,0xe3,0x7d,0x40,0x7f,
56674 -0x01,0x12,0x36,0xaf,0xe5,0x59,0x24,0xff,0x92,0xaf,0x22,0xe4,0xfd,0x7f,0x45,0x12,
56675 -0x4c,0xe3,0x90,0x04,0xfd,0xe4,0xf0,0xa3,0xf0,0x90,0x9e,0x1e,0xf0,0x90,0x9e,0x24,
56676 -0xf0,0x90,0x9e,0x27,0xf0,0x90,0x9e,0x25,0xf0,0x90,0x9e,0x28,0xf0,0x90,0x9e,0x26,
56677 -0xf0,0x90,0x9e,0x29,0xf0,0x90,0x9e,0x10,0x04,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,
56678 -0xf0,0x90,0x9e,0x15,0xf0,0x90,0x9e,0x1a,0xf0,0x90,0x9e,0x1c,0xf0,0x90,0x9e,0x2e,
56679 -0xf0,0x90,0x9e,0x1f,0xf0,0x90,0x9e,0x1b,0xf0,0x90,0x9e,0x14,0xf0,0x90,0x00,0x51,
56680 -0xe0,0x44,0xc0,0xfd,0x7f,0x51,0x02,0x4c,0xe3,0x90,0x9e,0x2e,0xe0,0x64,0x01,0x60,
56681 -0x08,0x90,0x9e,0x1c,0xe0,0x60,0x02,0xc1,0xd0,0x90,0x9e,0x10,0xe0,0xc3,0x94,0xff,
56682 -0x50,0x05,0xe0,0x04,0xf0,0x80,0x3b,0x90,0x9e,0x11,0xe0,0xc3,0x94,0xff,0x50,0x06,
56683 -0xe0,0x04,0xf0,0xe4,0x80,0x28,0x90,0x9e,0x12,0xe0,0xc3,0x94,0xff,0x50,0x0a,0xe0,
56684 -0x04,0xf0,0xe4,0x90,0x9e,0x11,0xf0,0x80,0x15,0x90,0x9e,0x13,0xe0,0xc3,0x94,0xff,
56685 -0x50,0x10,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x12,0xf0,0x90,0x9e,0x11,0xf0,0x90,0x9e,
56686 -0x10,0xf0,0x90,0x00,0x44,0xe0,0x54,0x0c,0x60,0x76,0xe0,0x30,0xe2,0x32,0x90,0x9e,
56687 -0x24,0xe0,0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,0x24,0x90,0x9e,0x25,0xe0,
56688 -0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x11,0x90,0x9e,0x26,0xe0,0xc3,
56689 -0x94,0xff,0x50,0x0c,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x25,0xf0,0x90,0x9e,0x24,0xf0,
56690 -0x90,0x00,0x44,0xe0,0x30,0xe3,0x32,0x90,0x9e,0x27,0xe0,0xc3,0x94,0xff,0x50,0x05,
56691 -0xe0,0x04,0xf0,0x80,0x24,0x90,0x9e,0x28,0xe0,0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,
56692 -0xf0,0xe4,0x80,0x11,0x90,0x9e,0x29,0xe0,0xc3,0x94,0xff,0x50,0x0c,0xe0,0x04,0xf0,
56693 -0xe4,0x90,0x9e,0x28,0xf0,0x90,0x9e,0x27,0xf0,0x90,0x04,0xfd,0xe0,0x44,0x01,0xf0,
56694 -0x22,0x00,0x89,0xad,};
56695 -
56696 -// =================== v80 UMC A Cut COMMON 2011-12-14 =====================
56697 -u8 Rtl8192CUFwUMCACutImgArray[UMCACutImgArrayLength] = {
56698 -0xc1,0x88,0x02,0x00,0x50,0x00,0x00,0x00,0x12,0x14,0x16,0x08,0xd4,0x3e,0x01,0x00,
56699 -0x25,0x86,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
56700 -0x02,0x43,0xba,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
56701 -0x00,0x00,0x00,0x02,0x48,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
56702 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
56703 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
56704 -0x00,0x00,0x00,0x02,0x5e,0xff,0x00,0x00,0x00,0x00,0x00,0xa1,0xd4,0x00,0x00,0x00,
56705 -0x05,0x04,0x03,0x02,0x00,0x03,0x06,0x05,0x04,0x03,0x00,0x04,0x06,0x05,0x04,0x02,
56706 -0x00,0x04,0x08,0x07,0x06,0x04,0x00,0x06,0x0a,0x09,0x08,0x06,0x00,0x08,0x0a,0x09,
56707 -0x08,0x04,0x00,0x08,0x0a,0x09,0x08,0x02,0x00,0x08,0x0a,0x09,0x08,0x00,0x00,0x08,
56708 -0x12,0x11,0x10,0x08,0x00,0x10,0x1a,0x19,0x18,0x10,0x00,0x18,0x22,0x21,0x20,0x18,
56709 -0x00,0x20,0x22,0x21,0x20,0x10,0x00,0x20,0x22,0x21,0x20,0x08,0x00,0x20,0x22,0x21,
56710 -0x1c,0x08,0x00,0x20,0x22,0x21,0x14,0x08,0x00,0x20,0x22,0x20,0x18,0x08,0x00,0x20,
56711 -0x31,0x30,0x20,0x10,0x00,0x30,0x31,0x30,0x18,0x00,0x00,0x30,0x31,0x2f,0x10,0x10,
56712 -0x00,0x30,0x31,0x2c,0x10,0x10,0x00,0x30,0x31,0x28,0x10,0x00,0x00,0x30,0x31,0x20,
56713 -0x10,0x00,0x00,0x30,0x31,0x10,0x10,0x00,0x00,0x30,0x04,0x04,0x04,0x05,0x04,0x04,
56714 -0x04,0x05,0x05,0x05,0x06,0x06,0x04,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x04,0x04,
56715 -0x05,0x05,0x05,0x05,0x06,0x06,0x04,0x04,0x05,0x05,0x05,0x05,0x06,0x07,0x0a,0x0b,
56716 -0x0d,0x10,0x04,0x05,0x05,0x06,0x06,0x09,0x0c,0x11,0x08,0x08,0x09,0x09,0x0a,0x0c,
56717 -0x10,0x11,0x04,0x04,0x04,0x05,0x04,0x04,0x05,0x07,0x07,0x07,0x08,0x0a,0x04,0x04,
56718 -0x04,0x04,0x06,0x0a,0x0b,0x0d,0x05,0x05,0x07,0x07,0x08,0x0b,0x0d,0x0f,0x04,0x04,
56719 -0x04,0x05,0x07,0x07,0x09,0x09,0x0c,0x0e,0x10,0x12,0x04,0x04,0x05,0x05,0x06,0x0a,
56720 -0x11,0x13,0x09,0x09,0x09,0x09,0x0c,0x0e,0x11,0x13,0x00,0x00,0x00,0x00,0x00,0x00,
56721 -0x00,0x00,0x00,0x24,0x26,0x2a,0x18,0x1a,0x1d,0x1f,0x21,0x27,0x29,0x2a,0x00,0x00,
56722 -0x00,0x1f,0x23,0x28,0x2a,0x2c,0x00,0x04,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x18,
56723 -0x00,0x24,0x00,0x30,0x00,0x48,0x00,0x60,0x00,0x90,0x00,0xc0,0x00,0xd8,0x00,0x50,
56724 -0x00,0x78,0x00,0xa0,0x00,0xc8,0x01,0x40,0x01,0x90,0x01,0xe0,0x02,0x30,0x01,0x2c,
56725 -0x01,0x40,0x01,0xe0,0x02,0xd0,0x03,0xe8,0x04,0xb0,0x06,0x40,0x07,0xd0,0x00,0x02,
56726 -0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x0c,0x00,0x12,0x00,0x18,0x00,0x24,0x00,0x30,
56727 -0x00,0x48,0x00,0x60,0x00,0x6c,0x00,0x28,0x00,0x3c,0x00,0x50,0x00,0x64,0x00,0xa0,
56728 -0x00,0xc8,0x00,0xf0,0x01,0x18,0x00,0x64,0x00,0xa0,0x00,0xf0,0x01,0x68,0x01,0xf4,
56729 -0x02,0x58,0x03,0x20,0x03,0xe8,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x04,0x04,
56730 -0x05,0x07,0x04,0x04,0x07,0x0a,0x0a,0x0c,0x0c,0x12,0x05,0x07,0x07,0x08,0x0b,0x12,
56731 -0x24,0x3c,0x01,0x01,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x01,0x02,
56732 -0x03,0x04,0x05,0x06,0x07,0x08,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x20,0x1e,
56733 -0x1c,0x18,0x10,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
56734 -0xbb,0x01,0x0c,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe0,0x22,0x50,
56735 -0x06,0xe9,0x25,0x82,0xf8,0xe6,0x22,0xbb,0xfe,0x06,0xe9,0x25,0x82,0xf8,0xe2,0x22,
56736 -0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe4,0x93,0x22,0xbb,0x01,0x06,
56737 -0x89,0x82,0x8a,0x83,0xf0,0x22,0x50,0x02,0xf7,0x22,0xbb,0xfe,0x01,0xf3,0x22,0xf8,
56738 -0xbb,0x01,0x0d,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe8,0xf0,0x22,
56739 -0x50,0x06,0xe9,0x25,0x82,0xc8,0xf6,0x22,0xbb,0xfe,0x05,0xe9,0x25,0x82,0xc8,0xf2,
56740 -0x22,0xc5,0xf0,0xf8,0xa3,0xe0,0x28,0xf0,0xc5,0xf0,0xf8,0xe5,0x82,0x15,0x82,0x70,
56741 -0x02,0x15,0x83,0xe0,0x38,0xf0,0x22,0xbb,0x01,0x0a,0x89,0x82,0x8a,0x83,0xe0,0xf5,
56742 -0xf0,0xa3,0xe0,0x22,0x50,0x06,0x87,0xf0,0x09,0xe7,0x19,0x22,0xbb,0xfe,0x07,0xe3,
56743 -0xf5,0xf0,0x09,0xe3,0x19,0x22,0x89,0x82,0x8a,0x83,0xe4,0x93,0xf5,0xf0,0x74,0x01,
56744 -0x93,0x22,0xbb,0x01,0x10,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe0,
56745 -0xf5,0xf0,0xa3,0xe0,0x22,0x50,0x09,0xe9,0x25,0x82,0xf8,0x86,0xf0,0x08,0xe6,0x22,
56746 -0xbb,0xfe,0x0a,0xe9,0x25,0x82,0xf8,0xe2,0xf5,0xf0,0x08,0xe2,0x22,0xe5,0x83,0x2a,
56747 -0xf5,0x83,0xe9,0x93,0xf5,0xf0,0xa3,0xe9,0x93,0x22,0xbb,0x01,0x0a,0x89,0x82,0x8a,
56748 -0x83,0xf0,0xe5,0xf0,0xa3,0xf0,0x22,0x50,0x06,0xf7,0x09,0xa7,0xf0,0x19,0x22,0xbb,
56749 -0xfe,0x06,0xf3,0xe5,0xf0,0x09,0xf3,0x19,0x22,0xf8,0xbb,0x01,0x11,0xe5,0x82,0x29,
56750 -0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe8,0xf0,0xe5,0xf0,0xa3,0xf0,0x22,0x50,0x09,
56751 -0xe9,0x25,0x82,0xc8,0xf6,0x08,0xa6,0xf0,0x22,0xbb,0xfe,0x09,0xe9,0x25,0x82,0xc8,
56752 -0xf2,0xe5,0xf0,0x08,0xf2,0x22,0xef,0x4b,0xff,0xee,0x4a,0xfe,0xed,0x49,0xfd,0xec,
56753 -0x48,0xfc,0x22,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x22,0xa4,
56754 -0x25,0x82,0xf5,0x82,0xe5,0xf0,0x35,0x83,0xf5,0x83,0x22,0xe0,0xfb,0xa3,0xe0,0xfa,
56755 -0xa3,0xe0,0xf9,0x22,0xf8,0xe0,0xfb,0xa3,0xa3,0xe0,0xf9,0x25,0xf0,0xf0,0xe5,0x82,
56756 -0x15,0x82,0x70,0x02,0x15,0x83,0xe0,0xfa,0x38,0xf0,0x22,0xeb,0xf0,0xa3,0xea,0xf0,
56757 -0xa3,0xe9,0xf0,0x22,0xd0,0x83,0xd0,0x82,0xf8,0xe4,0x93,0x70,0x12,0x74,0x01,0x93,
56758 -0x70,0x0d,0xa3,0xa3,0x93,0xf8,0x74,0x01,0x93,0xf5,0x82,0x88,0x83,0xe4,0x73,0x74,
56759 -0x02,0x93,0x68,0x60,0xef,0xa3,0xa3,0xa3,0x80,0xdf,0x02,0x43,0xf8,0x02,0x50,0x2e,
56760 -0xe4,0x93,0xa3,0xf8,0xe4,0x93,0xa3,0x40,0x03,0xf6,0x80,0x01,0xf2,0x08,0xdf,0xf4,
56761 -0x80,0x29,0xe4,0x93,0xa3,0xf8,0x54,0x07,0x24,0x0c,0xc8,0xc3,0x33,0xc4,0x54,0x0f,
56762 -0x44,0x20,0xc8,0x83,0x40,0x04,0xf4,0x56,0x80,0x01,0x46,0xf6,0xdf,0xe4,0x80,0x0b,
56763 -0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x90,0x44,0x3d,0xe4,0x7e,0x01,0x93,0x60,
56764 -0xbc,0xa3,0xff,0x54,0x3f,0x30,0xe5,0x09,0x54,0x1f,0xfe,0xe4,0x93,0xa3,0x60,0x01,
56765 -0x0e,0xcf,0x54,0xc0,0x25,0xe0,0x60,0xa8,0x40,0xb8,0xe4,0x93,0xa3,0xfa,0xe4,0x93,
56766 -0xa3,0xf8,0xe4,0x93,0xa3,0xc8,0xc5,0x82,0xc8,0xca,0xc5,0x83,0xca,0xf0,0xa3,0xc8,
56767 -0xc5,0x82,0xc8,0xca,0xc5,0x83,0xca,0xdf,0xe9,0xde,0xe7,0x80,0xbe,0x41,0x9e,0x4f,
56768 -0x00,0x41,0x9e,0xad,0x00,0x41,0x9e,0x61,0x80,0x41,0x9e,0x62,0x80,0x41,0x9e,0xaf,
56769 -0x00,0x00,0xf0,0x90,0x9e,0x6b,0xe0,0x90,0x9e,0x87,0xf0,0xe4,0xfb,0xfd,0x7f,0x54,
56770 -0x7e,0x01,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x85,0xeb,0xf0,0xa3,0xe0,
56771 -0xfb,0xa3,0xe0,0xf5,0x44,0xe4,0xf5,0x45,0x12,0x30,0x62,0xd0,0xd0,0x92,0xaf,0x22,
56772 -0x90,0x01,0x5f,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x08,0xf0,0xe4,0x90,0x9e,0x86,0xf0,
56773 -0x90,0x9e,0x69,0xe0,0x90,0x9e,0x87,0xf0,0xe4,0xfb,0xfd,0x7f,0x5c,0x7e,0x01,0x91,
56774 -0x62,0x90,0x01,0x5f,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x02,0xf0,0x90,0x9e,0x70,
56775 -0x14,0xf0,0xe5,0x23,0x54,0x0f,0xc3,0x94,0x0c,0x50,0x02,0xf1,0x2b,0x22,0x8f,0x82,
56776 -0x8e,0x83,0xa3,0xa3,0xa3,0xe4,0xf0,0x22,0xe4,0xf5,0x71,0x7f,0x60,0x7e,0x01,0x80,
56777 -0xed,0x7d,0x01,0xaf,0x24,0xe1,0x2f,0xb1,0xa6,0xbf,0x01,0x0f,0x90,0x9e,0x51,0xe0,
56778 -0xff,0xe4,0xfd,0xf1,0xd0,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0x53,0x23,0xf0,0x43,
56779 -0x23,0x01,0x91,0xfd,0x91,0xfe,0x53,0x23,0xf0,0x43,0x23,0x02,0x22,0x22,0x22,0x22,
56780 -0x22,0x00,0x00,0x02,0x5f,0x91,0x02,0x5f,0x98,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
56781 -0x8b,0x1b,0x8a,0x1c,0x89,0x1d,0x90,0x9e,0x88,0x71,0x8b,0xab,0x1e,0xaa,0x1f,0xa9,
56782 -0x20,0x90,0x9e,0x8b,0x71,0x8b,0xaf,0x21,0x15,0x21,0xef,0x60,0x1b,0x90,0x9e,0x8b,
56783 -0xe4,0x75,0xf0,0x01,0x71,0x74,0x12,0x24,0x62,0xff,0x90,0x9e,0x88,0xe4,0x75,0xf0,
56784 -0x01,0x71,0x74,0xef,0x51,0x4d,0x80,0xde,0xab,0x1b,0xaa,0x1c,0xa9,0x1d,0xd0,0xd0,
56785 -0x92,0xaf,0x22,0x90,0x06,0xa9,0xe0,0x90,0x9e,0x2f,0xf0,0xe0,0x54,0xc0,0x70,0x08,
56786 -0x53,0x26,0xfe,0x53,0x26,0xfd,0x91,0xd1,0x90,0x9e,0x2f,0xe0,0x30,0xe6,0x13,0x43,
56787 -0x26,0x01,0x90,0x9e,0x73,0xe0,0x64,0x02,0x60,0x04,0x91,0xd7,0x80,0x07,0x91,0x80,
56788 -0x80,0x03,0x53,0x26,0xfe,0x90,0x9e,0x2f,0xe0,0x30,0xe7,0x16,0x43,0x26,0x02,0xe4,
56789 -0x90,0x9e,0x86,0x91,0x52,0x90,0x01,0x57,0x74,0x05,0xf0,0x90,0x9e,0x74,0x74,0x01,
56790 -0xf0,0x22,0x53,0x26,0xfd,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x04,0x1d,
56791 -0xe0,0x60,0x1a,0x90,0x05,0x22,0xe0,0x54,0x90,0x60,0x07,0x90,0x01,0xc6,0xe0,0x44,
56792 -0x40,0xf0,0x90,0x01,0xc7,0xe0,0x30,0xe1,0xe4,0x7f,0x00,0x80,0x02,0x7f,0x01,0xd0,
56793 -0xd0,0x92,0xaf,0x22,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,
56794 -0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,
56795 -0x07,0x90,0x01,0xc4,0x74,0xd4,0xf0,0x74,0x45,0xa3,0xf0,0x53,0x91,0xdf,0x90,0x01,
56796 -0x3c,0xe0,0x55,0x30,0xf5,0x34,0xa3,0xe0,0x55,0x31,0xf5,0x35,0xa3,0xe0,0x55,0x32,
56797 -0xf5,0x36,0xa3,0xe0,0x55,0x33,0xf5,0x37,0xe5,0x34,0x30,0xe0,0x06,0x90,0x01,0x3c,
56798 -0x74,0x01,0xf0,0xe5,0x34,0x30,0xe1,0x09,0x90,0x01,0x3c,0x74,0x02,0xf0,0x12,0x66,
56799 -0x09,0xe5,0x34,0x30,0xe2,0x38,0x90,0x01,0x3c,0x74,0x04,0xf0,0x90,0x06,0x92,0xe0,
56800 -0x30,0xe0,0x24,0x90,0x9e,0x86,0xe4,0xf0,0x90,0x9e,0x69,0xe0,0x90,0x9e,0x87,0xf0,
56801 -0xe4,0xfb,0xfd,0x7f,0x58,0x7e,0x01,0x91,0x62,0x90,0x01,0x5b,0x74,0x05,0xf0,0x90,
56802 -0x06,0x92,0x74,0x01,0xf0,0x80,0x07,0x90,0x9e,0x71,0xe4,0xf0,0x91,0xd1,0xe5,0x34,
56803 -0x30,0xe3,0x38,0x90,0x01,0x3c,0x74,0x08,0xf0,0x90,0x06,0x92,0xe0,0x30,0xe1,0x24,
56804 -0x90,0x9e,0x86,0xe4,0xf0,0x90,0x9e,0x69,0xe0,0x90,0x9e,0x87,0xf0,0xe4,0xfb,0xfd,
56805 -0x7f,0x5c,0x7e,0x01,0x91,0x62,0x90,0x01,0x5f,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,
56806 -0x02,0xf0,0x80,0x07,0x90,0x9e,0x70,0xe4,0xf0,0x91,0xd1,0xe5,0x34,0x30,0xe4,0x09,
56807 -0x90,0x01,0x3c,0x74,0x10,0xf0,0x12,0x73,0x66,0xe5,0x34,0x30,0xe5,0x09,0x90,0x01,
56808 -0x3c,0x74,0x20,0xf0,0x12,0x52,0x64,0xe5,0x35,0x30,0xe0,0x18,0x90,0x01,0x3d,0x74,
56809 -0x01,0xf0,0x90,0x01,0x2f,0xe0,0x44,0x7f,0xf0,0x90,0x00,0x83,0xe0,0xf5,0x24,0x12,
56810 -0x64,0xe3,0x91,0xd1,0xe5,0x35,0x30,0xe2,0x06,0x90,0x01,0x3d,0x74,0x04,0xf0,0xe5,
56811 -0x36,0x30,0xe0,0x06,0x90,0x01,0x3e,0x74,0x01,0xf0,0xe5,0x36,0x30,0xe1,0x06,0x90,
56812 -0x01,0x3e,0x74,0x02,0xf0,0x74,0xd4,0x04,0x90,0x01,0xc4,0xf0,0x74,0x45,0xa3,0xf0,
56813 -0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,
56814 -0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,0x32,0x7d,0x01,0x7f,0x0c,0x90,
56815 -0x9e,0xa6,0xed,0xf0,0x90,0x9e,0xa5,0xef,0xf0,0x54,0x0f,0xff,0xe5,0x23,0x54,0x0f,
56816 -0x6f,0x60,0x70,0x90,0x9e,0xa5,0xe0,0x30,0xe2,0x2a,0xe5,0x23,0x20,0xe2,0x05,0x7f,
56817 -0x01,0x12,0x63,0xf3,0xe5,0x23,0x30,0xe3,0x09,0x90,0x9e,0xa5,0xe0,0x20,0xe3,0x02,
56818 -0x80,0x52,0xe5,0x23,0x20,0xe3,0x4c,0x90,0x9e,0xa5,0xe0,0x30,0xe3,0x45,0xa3,0xe0,
56819 -0xff,0x02,0x5e,0x95,0xe5,0x23,0x54,0x0f,0xff,0xbf,0x0c,0x0f,0x90,0x9e,0xa5,0xe0,
56820 -0x20,0xe3,0x08,0x12,0x62,0xd7,0xef,0x60,0x2a,0xf1,0xb4,0xe5,0x23,0x54,0x0f,0xff,
56821 -0xbf,0x04,0x10,0x90,0x9e,0xa5,0xe0,0x20,0xe2,0x09,0x12,0x63,0x20,0xef,0x60,0x13,
56822 -0x12,0x61,0x3a,0xe5,0x23,0x54,0x0f,0xff,0xbf,0x02,0x08,0x12,0x63,0x83,0xef,0x60,
56823 -0x02,0x91,0xec,0x22,0x90,0x06,0x04,0xe0,0x44,0x40,0xf0,0xe5,0x22,0xb4,0x01,0x05,
56824 -0x7f,0x01,0x12,0x5e,0x5c,0x53,0x23,0xf0,0x43,0x23,0x04,0x22,0xe0,0xff,0x7d,0x01,
56825 -0x90,0x9e,0x99,0xef,0xf0,0xa3,0xed,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xe5,0x25,0x60,
56826 -0x05,0xe4,0xff,0x12,0x61,0x1f,0x90,0x9e,0x99,0xe0,0x30,0xe0,0x09,0x90,0x9e,0x9b,
56827 -0xe4,0xf0,0xa3,0x74,0x80,0xf0,0x90,0x9e,0x99,0xe0,0xff,0xc3,0x13,0x90,0xfd,0x10,
56828 -0xf0,0x90,0x04,0x25,0xef,0xf0,0x90,0x9e,0x9a,0xe0,0x60,0x1f,0xa3,0xa3,0xe0,0xff,
56829 -0x24,0x0f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x80,0xf0,0x74,0x10,0x2f,
56830 -0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x80,0xf0,0x90,0x9e,0x9b,0xa3,0xe0,
56831 -0xff,0xfd,0x24,0x08,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe4,0xf0,0x74,0x09,0x2d,
56832 -0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xf0,0xf0,0x74,0x21,0x2f,0xf5,0x82,
56833 -0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xf7,0xf0,0x90,0x9e,0x9b,0xe0,0xfe,0xa3,0xe0,
56834 -0xff,0x22,0x12,0x45,0xa6,0xbf,0x01,0x10,0x90,0x02,0x09,0xe0,0xff,0x7d,0x01,0x12,
56835 -0x47,0xd0,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,
56836 -0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,
56837 -0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x01,0xc4,0x74,0x79,0xf0,0x74,0x48,0xa3,0xf0,
56838 -0x90,0x01,0x34,0xe0,0x55,0x28,0xf5,0x2c,0x90,0x01,0x36,0xe0,0x55,0x2a,0xf5,0x2e,
56839 -0xa3,0xe0,0x55,0x2b,0xf5,0x2f,0xe5,0x2c,0x20,0xe0,0x02,0x41,0x17,0x90,0x01,0x34,
56840 -0x74,0x01,0xf0,0x85,0xd1,0x08,0x85,0xd2,0x09,0x85,0xd3,0x0a,0x85,0xd4,0x0b,0x85,
56841 -0xd5,0x0c,0x85,0xd6,0x0d,0x85,0xd7,0x0e,0x85,0xd9,0x0f,0xe5,0x0f,0x54,0x40,0xc3,
56842 -0x13,0xff,0xe5,0x0e,0x54,0x20,0x6f,0x70,0x02,0x21,0xc9,0xe5,0x0f,0x30,0xe5,0x02,
56843 -0x21,0xc9,0xe5,0x0d,0x54,0x3f,0xf5,0x4d,0xe5,0x08,0x54,0x3f,0xf5,0x4e,0xe5,0x0c,
56844 -0x54,0x1f,0xff,0xe5,0x4d,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,
56845 -0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x0e,0x54,0x1f,0xff,0xe5,0x4d,0x25,0xe0,0x24,
56846 -0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x4e,
56847 -0xd3,0x94,0x04,0x40,0x03,0x75,0x4e,0x04,0x75,0xf0,0x0a,0xe5,0x4d,0x90,0x90,0x00,
56848 -0x12,0x43,0x5f,0x75,0xf0,0x02,0xe5,0x4e,0x12,0x43,0x5f,0xe0,0xfe,0xa3,0xe0,0xff,
56849 -0xe5,0x0e,0x54,0x1f,0x2f,0xff,0xe4,0x3e,0xfe,0x75,0xf0,0x0a,0xe5,0x4d,0x90,0x90,
56850 -0x00,0x12,0x43,0x5f,0x75,0xf0,0x02,0xe5,0x4e,0x12,0x43,0x5f,0xee,0xf0,0xa3,0xef,
56851 -0xf0,0xe5,0x0f,0x20,0xe6,0x24,0xe5,0x0e,0x54,0x1f,0xff,0xe5,0x4d,0x25,0xe0,0x24,
56852 -0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x0a,
56853 -0x30,0xe7,0x36,0xaf,0x4d,0x12,0x5b,0x68,0x80,0x2f,0xe5,0x0e,0x54,0x1f,0xff,0xe5,
56854 -0x4d,0x25,0xe0,0x24,0x44,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0x8f,0xf0,0x12,
56855 -0x42,0x81,0xe5,0x0a,0x30,0xe7,0x12,0xe5,0x0a,0x54,0x7f,0xfd,0xe5,0x0e,0x54,0x1f,
56856 -0xf5,0x53,0xab,0x4e,0xaf,0x4d,0x12,0x5b,0x05,0xe5,0x25,0x14,0x24,0xfd,0x50,0x02,
56857 -0x80,0x45,0x90,0x9e,0x73,0xe0,0x60,0x37,0x90,0x01,0x5b,0xe4,0xf0,0x90,0x01,0x3c,
56858 -0x74,0x04,0xf0,0x71,0xc4,0xef,0x64,0x01,0x70,0x2d,0x90,0x9e,0x69,0xe0,0xf5,0x44,
56859 -0x75,0x45,0x00,0xe4,0xfb,0xfd,0x7f,0x58,0x7e,0x01,0x12,0x30,0x62,0x90,0x01,0x5b,
56860 -0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x01,0xf0,0x90,0x9e,0x71,0xf0,0x80,0x08,0x71,
56861 -0xc4,0xbf,0x01,0x03,0x12,0x44,0xd1,0xe5,0x2c,0x30,0xe1,0x21,0x90,0x01,0x34,0x74,
56862 -0x02,0xf0,0x85,0xd1,0x13,0x85,0xd2,0x14,0x85,0xd3,0x15,0x85,0xd4,0x16,0x85,0xd5,
56863 -0x17,0x85,0xd6,0x18,0x85,0xd7,0x19,0x85,0xd9,0x1a,0x12,0x5c,0x46,0xe5,0x2c,0x30,
56864 -0xe3,0x06,0x90,0x01,0x34,0x74,0x08,0xf0,0xe5,0x2c,0x30,0xe4,0x09,0x90,0x01,0x34,
56865 -0x74,0x10,0xf0,0x43,0x12,0x10,0xe5,0x2c,0x30,0xe5,0x24,0x90,0x01,0xcf,0xe0,0x30,
56866 -0xe5,0x1d,0xe0,0x54,0xdf,0xf0,0x90,0x01,0x34,0x74,0x20,0xf0,0x75,0xa8,0x00,0x75,
56867 -0xe8,0x00,0xd1,0xdb,0x90,0x00,0x03,0xe0,0x54,0xfb,0xf0,0x71,0xdb,0x80,0xfe,0xe5,
56868 -0x2c,0x30,0xe6,0x06,0x90,0x01,0x34,0x74,0x40,0xf0,0xe5,0x2e,0x30,0xe0,0x12,0x90,
56869 -0x9e,0x5f,0x74,0x01,0xf0,0x90,0x01,0x36,0xf0,0x12,0x65,0xa3,0x90,0x9e,0x5f,0xe4,
56870 -0xf0,0xe5,0x2e,0x30,0xe1,0x3b,0x90,0x01,0x36,0x74,0x02,0xf0,0x43,0x12,0x40,0x90,
56871 -0x01,0x02,0xe0,0x54,0x03,0x64,0x01,0x70,0x28,0x90,0x01,0x37,0xe0,0x30,0xe0,0x0a,
56872 -0x74,0x01,0xf0,0x90,0x9e,0x4f,0xe4,0xf0,0x80,0x17,0x90,0x9e,0x4f,0xe0,0x04,0xf0,
56873 -0xe0,0xc3,0x94,0x0a,0x40,0x0b,0xe4,0xf0,0x90,0x04,0x19,0xe0,0x30,0xe0,0x02,0x11,
56874 -0x62,0xe5,0x2e,0x30,0xe2,0x09,0x90,0x01,0x36,0x74,0x04,0xf0,0x12,0x65,0x3b,0xe5,
56875 -0x2e,0x30,0xe3,0x28,0x90,0x01,0x36,0x74,0x08,0xf0,0xe5,0x22,0x64,0x01,0x70,0x1c,
56876 -0xe5,0x25,0x60,0x18,0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,
56877 -0x9e,0x86,0xe4,0x12,0x44,0x52,0x90,0x01,0x57,0x74,0x05,0xf0,0xe5,0x2e,0x30,0xe4,
56878 -0x2b,0x90,0x01,0x36,0x74,0x10,0xf0,0xe5,0x22,0xb4,0x01,0x20,0xe5,0x25,0x60,0x1c,
56879 -0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,0x9e,0x74,0xe4,0xf0,
56880 -0x53,0x26,0xfd,0xe5,0x26,0x54,0x07,0x70,0x03,0x12,0x44,0xd1,0xe5,0x2e,0x30,0xe5,
56881 -0x1f,0x90,0x01,0x36,0x74,0x20,0xf0,0xe5,0x22,0xb4,0x01,0x14,0xe5,0x25,0x60,0x10,
56882 -0x90,0x9e,0x73,0xe0,0x64,0x02,0x60,0x05,0x12,0x44,0xd7,0x80,0x03,0x12,0x44,0x80,
56883 -0xe5,0x2e,0x30,0xe6,0x1b,0x90,0x01,0x36,0x74,0x40,0xf0,0xe5,0x22,0xb4,0x01,0x10,
56884 -0xe5,0x25,0x60,0x0c,0x53,0x26,0xfe,0xe5,0x26,0x54,0x07,0x70,0x03,0x12,0x44,0xd1,
56885 -0xe5,0x2f,0x30,0xe1,0x09,0x90,0x01,0x37,0x74,0x02,0xf0,0x12,0x61,0x92,0x74,0x79,
56886 -0x04,0x90,0x01,0xc4,0xf0,0x74,0x48,0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,
56887 -0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,
56888 -0xf0,0xd0,0xe0,0x32,0x90,0x04,0x1b,0xe0,0x54,0x7f,0x64,0x7f,0x7f,0x01,0x60,0x02,
56889 -0x7f,0x00,0x22,0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0xd3,0x10,0xaf,0x01,0xc3,
56890 -0xc0,0xd0,0x7f,0x10,0xdf,0xfe,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,
56891 -0xc0,0xd0,0x90,0x9e,0xac,0xed,0xf0,0x90,0x9e,0xab,0xef,0xf0,0xd3,0x94,0x07,0x50,
56892 -0x63,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,
56893 -0x90,0x00,0x47,0xe0,0x5f,0xf0,0x71,0xdb,0x90,0x9e,0xab,0xe0,0xff,0x74,0x01,0xa8,
56894 -0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x46,0xe0,0x4f,0xf0,0x71,
56895 -0xdb,0x90,0x9e,0xac,0xe0,0x60,0x16,0x90,0x9e,0xab,0xe0,0xff,0x74,0x01,0xa8,0x07,
56896 -0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x45,0x80,0x66,0x90,0x9e,0xab,
56897 -0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,
56898 -0x00,0x45,0x80,0x6b,0x90,0x9e,0xab,0xe0,0x24,0xf8,0xf0,0xe0,0xff,0x74,0x01,0xa8,
56899 -0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0x71,0xd3,0x90,0x9e,0xab,
56900 -0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,
56901 -0x43,0xe0,0x4f,0xf0,0x71,0xdb,0x90,0x9e,0xac,0xe0,0x60,0x1b,0x90,0x9e,0xab,0xe0,
56902 -0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0xff,
56903 -0x90,0x00,0x42,0xe0,0x4f,0x80,0x1a,0x90,0x9e,0xab,0xe0,0xff,0x74,0x01,0xa8,0x07,
56904 -0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0xf4,0xff,0x90,0x00,0x42,0xe0,
56905 -0x5f,0xf0,0x71,0xdb,0xd0,0xd0,0x92,0xaf,0x22,0xf0,0x90,0x00,0x45,0xe0,0x54,0xfe,
56906 -0xfd,0x7f,0x45,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x8f,0x82,0x75,0x83,0x00,0xed,
56907 -0xf0,0x71,0xdb,0xd0,0xd0,0x92,0xaf,0x22,0xef,0x14,0x60,0x30,0x14,0x60,0x66,0x24,
56908 -0x02,0x60,0x02,0xa1,0x9f,0x90,0x9e,0x1a,0x74,0x02,0xf0,0x90,0x00,0x48,0xe0,0x44,
56909 -0x0c,0xfd,0x7f,0x48,0x91,0xe3,0x90,0x00,0x47,0xe0,0x44,0x08,0xfd,0x7f,0x47,0x91,
56910 -0xe3,0x90,0x00,0x45,0xe0,0x44,0x10,0xfd,0x7f,0x45,0x80,0x71,0xe4,0x90,0x9e,0x1a,
56911 -0xf0,0x90,0x9e,0x16,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x80,0x7e,
56912 -0x08,0x12,0x2b,0x08,0x90,0x00,0x45,0xe0,0x44,0xef,0xfd,0x7f,0x45,0x91,0xe3,0x90,
56913 -0x00,0x45,0xe0,0x54,0xef,0xfd,0x7f,0x45,0x91,0xe3,0x90,0x00,0x46,0xe0,0x44,0x10,
56914 -0xfd,0x7f,0x46,0x80,0x38,0x90,0x9e,0x1a,0x74,0x01,0xf0,0x90,0x9e,0x20,0x12,0x43,
56915 -0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x80,0x7e,0x08,0x12,0x2b,0x08,0x90,0x00,
56916 -0x45,0xe0,0x44,0x20,0xfd,0x7f,0x45,0x91,0xe3,0x90,0x00,0x45,0xe0,0x44,0x10,0xfd,
56917 -0x7f,0x45,0x91,0xe3,0x90,0x00,0x46,0xe0,0x44,0x10,0xfd,0x7f,0x46,0x91,0xe3,0x22,
56918 -0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x9e,0x1c,0xf0,0x90,0x00,0x01,0x12,0x42,0x20,
56919 -0x25,0xe0,0x25,0xe0,0x90,0x9e,0x1b,0xf0,0x12,0x24,0x62,0x25,0xe0,0x25,0xe0,0x90,
56920 -0x9e,0x1f,0xf0,0x90,0x05,0x60,0xe0,0x90,0x9e,0x2a,0xf0,0x90,0x05,0x61,0xe0,0x90,
56921 -0x9e,0x2b,0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x2c,0xf0,0x90,0x05,0x63,0xe0,0x90,
56922 -0x9e,0x2d,0xf0,0xa2,0xaf,0xe4,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x90,0x9e,0x1b,
56923 -0xe0,0xff,0x12,0x52,0x12,0x90,0x9e,0x3f,0xe0,0x24,0xff,0x92,0xaf,0x90,0x9e,0x1c,
56924 -0xe0,0x70,0x02,0xc1,0xa7,0x90,0x9e,0x1b,0xe0,0x70,0x02,0xc1,0xa7,0x90,0x9e,0x1f,
56925 -0xe0,0x70,0x02,0xc1,0xa7,0xa2,0xaf,0xe4,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x90,
56926 -0x9e,0x2e,0x74,0x01,0xf0,0x90,0x9e,0x3f,0xe0,0x24,0xff,0x92,0xaf,0x91,0xda,0x90,
56927 -0x00,0x46,0xe0,0x44,0x01,0xfd,0x7f,0x46,0x91,0xe3,0x90,0x9e,0x14,0xe0,0x60,0x15,
56928 -0x90,0x9e,0x20,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x80,0x7e,0x08,
56929 -0x12,0x2b,0x08,0x80,0x06,0x90,0x05,0x22,0x74,0x7f,0xf0,0x90,0x00,0x45,0xe0,0x54,
56930 -0xef,0xfd,0x7f,0x45,0x91,0xe3,0x90,0x05,0x87,0xe0,0x64,0x80,0xf0,0x90,0x9e,0x2a,
56931 -0xe0,0x90,0x05,0x84,0xf0,0x90,0x9e,0x2b,0xe0,0x90,0x05,0x85,0xf0,0x90,0x9e,0x2c,
56932 -0xe0,0x90,0x05,0x86,0xf0,0x90,0x9e,0x2d,0xe0,0x90,0x05,0x87,0xf0,0xa2,0xaf,0xe4,
56933 -0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x90,0x01,0x3c,0xe0,0x44,0x20,0xf0,0x7d,0x20,
56934 -0xe4,0xff,0x12,0x31,0xb7,0x80,0x2b,0x90,0x9e,0x1c,0xe0,0x70,0x2d,0x90,0x9e,0x2e,
56935 -0x91,0xd9,0x90,0x00,0x46,0xe0,0x54,0xfe,0xfd,0x7f,0x46,0x91,0xe3,0x90,0x05,0x22,
56936 -0xe4,0xf0,0xa2,0xaf,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x7d,0x20,0xe4,0xff,0x12,
56937 -0x31,0x49,0x90,0x9e,0x3f,0xe0,0x24,0xff,0x92,0xaf,0x22,0x90,0x01,0x30,0xe4,0xf0,
56938 -0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x01,0x38,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,
56939 -0xfd,0x7f,0x50,0x91,0xe3,0xe4,0xfd,0x7f,0x51,0x91,0xe3,0xe4,0xfd,0x7f,0x52,0x91,
56940 -0xe3,0xe4,0xfd,0x7f,0x53,0x81,0xe3,0x8b,0x59,0x8a,0x5a,0x89,0x5b,0x90,0x00,0x02,
56941 -0x12,0x42,0x20,0x90,0x9e,0x1d,0xf0,0xe0,0x30,0xe0,0x4b,0x90,0x9e,0x14,0x74,0x01,
56942 -0xf0,0x7f,0x80,0x7e,0x08,0x12,0x22,0x65,0x90,0x9e,0x16,0x12,0x25,0x08,0xab,0x59,
56943 -0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0xe4,0xfc,0xfd,0xfe,0x78,
56944 -0x1a,0x12,0x24,0xf5,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,0x07,0x90,0x9e,0x16,0x12,
56945 -0x43,0x53,0xec,0x54,0x03,0xfc,0x12,0x43,0x46,0x90,0x9e,0x20,0x12,0x25,0x08,0x90,
56946 -0x05,0x22,0xe4,0xf0,0x80,0x2d,0xe4,0x90,0x9e,0x14,0xf0,0x7f,0x80,0x7e,0x08,0x12,
56947 -0x22,0x65,0xec,0x54,0x03,0xfc,0xec,0x44,0xc0,0xfc,0x90,0x9e,0x16,0x12,0x25,0x08,
56948 -0x90,0x9e,0x16,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x80,0x7e,0x08,
56949 -0x12,0x2b,0x08,0x90,0x9e,0x1d,0xe0,0x30,0xe1,0x19,0x7d,0x0c,0x7f,0x47,0x91,0xe3,
56950 -0x90,0x00,0x48,0xe0,0x44,0x0c,0xfd,0x7f,0x48,0x91,0xe3,0x90,0x00,0x46,0xe0,0x44,
56951 -0x10,0x80,0x1c,0x90,0x00,0x47,0xe0,0x54,0xf3,0xfd,0x7f,0x47,0x91,0xe3,0x90,0x00,
56952 -0x48,0xe0,0x54,0xf3,0xfd,0x7f,0x48,0x91,0xe3,0x90,0x00,0x46,0xe0,0x54,0xef,0xfd,
56953 -0x7f,0x46,0x91,0xe3,0xe4,0x90,0x9e,0x1a,0xf0,0x22,0x90,0x00,0x49,0xe0,0x90,0x9e,
56954 -0xb0,0xf0,0xe0,0x54,0x0f,0xf0,0x44,0xf0,0xfd,0x7f,0x49,0x91,0xe3,0x90,0x9e,0xb0,
56955 -0xe0,0x44,0xb0,0xfd,0x7f,0x49,0x81,0xe3,0x75,0x28,0x33,0xe4,0xf5,0x29,0x75,0x2a,
56956 -0x07,0xf5,0x2b,0x90,0x01,0x30,0xe5,0x28,0xf0,0xa3,0xe5,0x29,0xf0,0xa3,0xe5,0x2a,
56957 -0xf0,0xa3,0xe5,0x2b,0xf0,0x22,0x75,0x30,0x1f,0x75,0x31,0x01,0xe4,0xf5,0x32,0x90,
56958 -0x01,0x38,0xe5,0x30,0xf0,0xa3,0xe5,0x31,0xf0,0xa3,0xe5,0x32,0xf0,0x22,0xe4,0x90,
56959 -0x9e,0x31,0xf0,0xa3,0xf0,0x75,0x8e,0x02,0x12,0x77,0x64,0x12,0x5e,0xde,0x90,0x9e,
56960 -0x5e,0xef,0xf0,0x12,0x5e,0xeb,0x90,0x9e,0x60,0xef,0xf0,0xe4,0xf5,0x12,0x12,0x6e,
56961 -0xdf,0x12,0x77,0xdb,0x12,0x5f,0x9f,0x12,0x2e,0x01,0x12,0x77,0xd7,0x12,0x4f,0xf8,
56962 -0x90,0x00,0xf3,0xe0,0x30,0xe2,0x0d,0x90,0x05,0x41,0x74,0x10,0xf0,0x90,0x05,0x5a,
56963 -0xf0,0xa3,0xe4,0xf0,0x12,0x5e,0xf8,0x11,0x16,0x12,0x44,0xff,0x12,0x7d,0x9b,0x90,
56964 -0x9e,0x33,0xe5,0xd9,0xf0,0x12,0x5e,0xaf,0xc2,0xaf,0x90,0x00,0x80,0xe0,0x44,0x40,
56965 -0xf0,0x12,0x4b,0xdb,0x75,0xe8,0x03,0x43,0xa8,0x85,0xd2,0xaf,0x90,0x9e,0x31,0xe0,
56966 -0x64,0x01,0xf0,0x24,0x2e,0x90,0x01,0xc4,0xf0,0x74,0x50,0xa3,0xf0,0xe5,0x12,0x30,
56967 -0xe4,0x09,0xc2,0xaf,0x53,0x12,0xef,0xd2,0xaf,0x71,0x1a,0xe5,0x12,0x30,0xe6,0x16,
56968 -0xc2,0xaf,0x53,0x12,0xbf,0xd2,0xaf,0x12,0x68,0x8d,0x90,0x9e,0x1e,0xe0,0xff,0x60,
56969 -0x03,0xb4,0x01,0x02,0x31,0x10,0x90,0x9e,0x1e,0xe0,0x70,0x03,0x12,0x7d,0xf9,0x11,
56970 -0xe3,0x80,0xb9,0x90,0x06,0x34,0xe0,0x60,0x26,0x14,0x70,0x1b,0x7b,0x01,0x7a,0x06,
56971 -0x79,0x35,0x7f,0xf9,0x7e,0x01,0x12,0x77,0x75,0xbf,0x01,0x09,0x90,0x06,0x35,0xe0,
56972 -0x54,0x0f,0xf0,0x80,0x05,0x80,0x00,0x02,0x77,0x56,0xe4,0x90,0x06,0x34,0xf0,0x22,
56973 -0x90,0x9e,0x15,0xe0,0xc3,0x94,0x14,0x50,0x05,0xe0,0x04,0xf0,0x21,0xc8,0x90,0x9e,
56974 -0x15,0xe0,0x64,0x14,0x60,0x02,0x21,0xc8,0x90,0x9e,0x24,0xe0,0x70,0x25,0x90,0x9e,
56975 -0x27,0xe0,0x70,0x1f,0x90,0x9e,0x25,0xe0,0x70,0x19,0x90,0x9e,0x28,0xe0,0x70,0x13,
56976 -0x90,0x9e,0x26,0xe0,0x70,0x0d,0x90,0x9e,0x29,0xe0,0x70,0x07,0x90,0x04,0xfd,0xe0,
56977 -0x54,0xfe,0xf0,0x90,0x9e,0x24,0xe0,0x90,0x04,0x44,0xf0,0x90,0x9e,0x25,0xe0,0x90,
56978 -0x04,0x45,0xf0,0x90,0x9e,0x26,0xe0,0x90,0x04,0x46,0xf0,0xa3,0xe4,0xf0,0x90,0x9e,
56979 -0x27,0xe0,0x90,0x04,0x48,0xf0,0x90,0x9e,0x28,0xe0,0x90,0x04,0x49,0xf0,0x90,0x9e,
56980 -0x29,0xe0,0x90,0x04,0x4a,0xf0,0xa3,0xe4,0xf0,0x90,0x9e,0x10,0xe0,0x90,0x04,0x4c,
56981 -0xf0,0x90,0x9e,0x11,0xe0,0x90,0x04,0x4d,0xf0,0x90,0x9e,0x12,0xe0,0x90,0x04,0x4e,
56982 -0xf0,0x90,0x9e,0x13,0xe0,0x90,0x04,0x4f,0xf0,0xe4,0x90,0x9e,0x15,0xf0,0x90,0x9e,
56983 -0x10,0x04,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,0x24,0xf0,0xa3,0xf0,
56984 -0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x05,0x60,0xe0,0x90,0x9e,0x34,0xf0,
56985 -0x90,0x05,0x61,0xe0,0x90,0x9e,0x35,0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x36,0xf0,
56986 -0x90,0x05,0x63,0xe0,0x90,0x9e,0x37,0xf0,0x90,0x9e,0x2d,0xe0,0xff,0x90,0x9e,0x37,
56987 -0xe0,0xfe,0xd3,0x9f,0x50,0x0b,0x90,0x9e,0x2d,0xe0,0xc3,0x9e,0xd3,0x94,0x01,0x40,
56988 -0x10,0x90,0x9e,0x1b,0xe0,0xb4,0x01,0x02,0x80,0x03,0x90,0x9e,0x1f,0xe0,0xff,0x51,
56989 -0x12,0x22,0x90,0x05,0x60,0xe0,0x90,0x9e,0x2a,0xf0,0x90,0x05,0x61,0xe0,0x90,0x9e,
56990 -0x2b,0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x2c,0xf0,0x90,0x05,0x63,0xe0,0x90,0x9e,
56991 -0x2d,0xf0,0xc3,0x74,0xff,0x9f,0xfe,0x90,0x9e,0x2b,0xe0,0xd3,0x9e,0x40,0x1e,0xe0,
56992 -0x2f,0xf0,0xa3,0xe0,0xb4,0xff,0x0f,0xe4,0xf0,0xa3,0xe0,0xb4,0xff,0x03,0xe4,0xf0,
56993 -0x22,0x90,0x9e,0x2d,0x80,0x03,0x90,0x9e,0x2c,0xe0,0x04,0xf0,0x22,0x90,0x9e,0x2b,
56994 -0xe0,0x2f,0xf0,0x22,0x90,0x9e,0x1c,0xe0,0x64,0x01,0x60,0x02,0x61,0x19,0x90,0x00,
56995 -0x46,0xe0,0x44,0x01,0xfd,0x7f,0x46,0x12,0x4c,0xe3,0x90,0x9e,0x2e,0xe0,0x70,0x32,
56996 -0x90,0x9e,0x14,0xe0,0x60,0x15,0x90,0x9e,0x20,0x12,0x43,0x53,0x90,0x80,0x96,0x12,
56997 -0x25,0x08,0x7f,0x80,0x7e,0x08,0x12,0x2b,0x08,0x80,0x06,0x90,0x05,0x22,0x74,0x7f,
56998 -0xf0,0x90,0x9e,0x1b,0xe0,0xff,0x51,0x12,0x90,0x9e,0x2e,0x74,0x01,0x12,0x4c,0xd9,
56999 -0x80,0x40,0x90,0x9e,0x2e,0xe0,0x64,0x01,0x70,0x38,0x90,0x9e,0x1f,0xe0,0xff,0x51,
57000 -0x12,0xe4,0x90,0x9e,0x2e,0xf0,0x90,0x00,0x45,0xe0,0x44,0x01,0xfd,0x7f,0x45,0x12,
57001 -0x4c,0xe3,0x90,0x9e,0x14,0xe0,0x60,0x15,0x90,0x9e,0x16,0x12,0x43,0x53,0x90,0x80,
57002 -0x96,0x12,0x25,0x08,0x7f,0x80,0x7e,0x08,0x12,0x2b,0x08,0x80,0x05,0x90,0x05,0x22,
57003 -0xe4,0xf0,0x90,0x05,0x87,0xe0,0x64,0x80,0xf0,0x90,0x9e,0x2a,0xe0,0x90,0x05,0x84,
57004 -0xf0,0x90,0x9e,0x2b,0xe0,0x90,0x05,0x85,0xf0,0x90,0x9e,0x2c,0xe0,0x90,0x05,0x86,
57005 -0xf0,0x90,0x9e,0x2d,0xe0,0x90,0x05,0x87,0xf0,0x22,0x90,0x01,0xcc,0xe0,0x54,0x0f,
57006 -0x90,0x9e,0x34,0xf0,0x90,0x9e,0x34,0xe0,0xfd,0x70,0x02,0x81,0x5b,0x90,0x9e,0xad,
57007 -0xe0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,
57008 -0xd8,0xf9,0xff,0xef,0x5d,0x70,0x02,0x81,0x54,0x90,0x9e,0xad,0xe0,0x75,0xf0,0x04,
57009 -0x90,0x01,0xd0,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x35,0xf0,0x75,0x1e,0x01,0x75,0x1f,
57010 -0x9e,0x75,0x20,0x35,0x75,0x21,0x01,0x7b,0x01,0x7a,0x9e,0x79,0x36,0x12,0x45,0x09,
57011 -0x90,0x9e,0x36,0xe0,0xff,0xc4,0x13,0x13,0x13,0x54,0x01,0x90,0x9e,0xad,0x30,0xe0,
57012 -0x59,0xe0,0x75,0xf0,0x02,0x90,0x00,0x88,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x37,0xf0,
57013 -0x90,0x9e,0xad,0xe0,0x75,0xf0,0x02,0x90,0x00,0x89,0x12,0x43,0x5f,0xe0,0x90,0x9e,
57014 -0x38,0xf0,0x90,0x9e,0xad,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd1,0x12,0x43,0x5f,0xe0,
57015 -0x90,0x9e,0x39,0xf0,0x90,0x9e,0xad,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd2,0x12,0x43,
57016 -0x5f,0xe0,0x90,0x9e,0x3a,0xf0,0x90,0x9e,0xad,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd3,
57017 -0x12,0x43,0x5f,0xe0,0x90,0x9e,0x3b,0xf0,0x80,0x33,0xe0,0x75,0xf0,0x04,0x90,0x01,
57018 -0xd1,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x37,0xf0,0x90,0x9e,0xad,0xe0,0x75,0xf0,0x04,
57019 -0x90,0x01,0xd2,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x38,0xf0,0x90,0x9e,0xad,0xe0,0x75,
57020 -0xf0,0x04,0x90,0x01,0xd3,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x39,0xf0,0xef,0x54,0x7f,
57021 -0xff,0x7b,0x01,0x7a,0x9e,0x79,0x37,0x91,0x5c,0x90,0x9e,0x34,0xe0,0xff,0x90,0x9e,
57022 -0xad,0xe0,0xfe,0x74,0x01,0xa8,0x06,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0x5f,
57023 -0x90,0x9e,0x34,0xf0,0x90,0x9e,0xad,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,
57024 -0xc3,0x33,0xd8,0xfc,0x90,0x01,0xcc,0xf0,0x90,0x9e,0xad,0xe0,0x04,0xf0,0xe0,0x54,
57025 -0x03,0xf0,0x61,0x24,0x90,0x01,0xc6,0xe0,0x44,0x02,0xf0,0x22,0x90,0x9e,0x3c,0x12,
57026 -0x43,0x8b,0xef,0x12,0x43,0x94,0x54,0x97,0x01,0x54,0xa0,0x02,0x54,0xbb,0x03,0x54,
57027 -0xc4,0x05,0x54,0xcd,0x06,0x55,0x1b,0x07,0x54,0xd5,0x09,0x54,0xde,0x0c,0x54,0xe7,
57028 -0x0d,0x54,0xf0,0x0e,0x54,0xf9,0x1b,0x55,0x02,0x1c,0x55,0x0b,0x2c,0x54,0xa9,0x2d,
57029 -0x54,0xb2,0x2e,0x00,0x00,0x55,0x14,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x61,0x69,
57030 -0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x71,0x02,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,
57031 -0x71,0x08,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x71,0x50,0x90,0x9e,0x3c,0x12,0x43,
57032 -0x6b,0x02,0x71,0x7e,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x70,0xb2,0x90,0x9e,0x3c,
57033 -0x12,0x43,0x6b,0x80,0x47,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x71,0xc6,0x90,0x9e,
57034 -0x3c,0x12,0x43,0x6b,0x02,0x4d,0xa0,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x7d,0x68,
57035 -0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x4f,0x07,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,
57036 -0x70,0xfa,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x70,0xe1,0x90,0x9e,0x3c,0x12,0x43,
57037 -0x6b,0x02,0x76,0x36,0x90,0x01,0xc6,0xe0,0x44,0x01,0xf0,0x22,0x90,0x00,0x04,0x12,
57038 -0x42,0x20,0xff,0x54,0x1f,0xfe,0xef,0x54,0x20,0xc4,0x13,0x54,0x07,0xfd,0xaf,0x06,
57039 -0x90,0x9e,0x3f,0xef,0xf0,0xa3,0xed,0xf0,0xa3,0x12,0x43,0x8b,0x90,0x9e,0x41,0x12,
57040 -0x43,0x6b,0x90,0x00,0x03,0x12,0x42,0x20,0x54,0xf0,0xc4,0x54,0x0f,0x90,0x9e,0x44,
57041 -0xf0,0x90,0x00,0x04,0x12,0x42,0x20,0x54,0x40,0xc4,0x13,0x13,0x54,0x03,0x90,0x9e,
57042 -0x45,0xf0,0x90,0x9e,0x3f,0xe0,0xff,0x75,0xf0,0x09,0x90,0x96,0x46,0x12,0x43,0x5f,
57043 -0xad,0x82,0xac,0x83,0x90,0x9e,0x46,0xec,0xf0,0xa3,0xed,0xf0,0xef,0x75,0xf0,0x09,
57044 -0xa4,0x24,0x44,0xf9,0x74,0x96,0x35,0xf0,0xfa,0x7b,0x01,0xa3,0x12,0x43,0x8b,0x90,
57045 -0x9e,0x41,0x12,0x43,0x6b,0x90,0x00,0x03,0x12,0x42,0x20,0x54,0x0f,0xff,0x90,0x9e,
57046 -0x48,0x12,0x43,0x6b,0xef,0x12,0x42,0x4d,0x90,0x9e,0x41,0x12,0x43,0x6b,0x90,0x00,
57047 -0x02,0x12,0x42,0x20,0xff,0x90,0x9e,0x48,0x12,0x43,0x6b,0x90,0x00,0x01,0xef,0x12,
57048 -0x42,0x5f,0x90,0x9e,0x41,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0x90,
57049 -0x9e,0x46,0xe0,0xfc,0xa3,0xe0,0xfd,0xf5,0x82,0x8c,0x83,0xef,0xf0,0x12,0x24,0x62,
57050 -0x8d,0x82,0x8c,0x83,0xa3,0xf0,0x90,0x9e,0x44,0xe0,0xfe,0x90,0x9e,0x3f,0xe0,0xff,
57051 -0x24,0x82,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0x90,0x9e,0x40,0xe0,0xfe,
57052 -0x75,0xf0,0x09,0xef,0x90,0x96,0x4a,0x12,0x43,0x5f,0xee,0xf0,0x75,0xf0,0x09,0xef,
57053 -0x90,0x96,0x4b,0x12,0x43,0x5f,0x74,0x01,0xf0,0x90,0x9e,0x45,0xe0,0xfe,0x75,0xf0,
57054 -0x09,0xef,0x90,0x96,0x4c,0x12,0x43,0x5f,0xee,0xf0,0x8f,0x59,0xef,0x25,0xe0,0x24,
57055 -0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xaf,0x82,0xf5,0x5b,0x8f,0x5c,0xe5,0x59,0x75,0xf0,
57056 -0x02,0xa4,0x24,0x02,0xf9,0x74,0x95,0x35,0xf0,0x75,0x5d,0x01,0xf5,0x5e,0x89,0x5f,
57057 -0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x46,0x12,0x43,0x5f,0xaf,0x82,0x85,0x83,0x60,
57058 -0x8f,0x61,0xe5,0x59,0x75,0xf0,0x09,0xa4,0x24,0x44,0xf9,0x74,0x96,0x35,0xf0,0x75,
57059 -0x62,0x01,0xf5,0x63,0x89,0x64,0x74,0x82,0x25,0x59,0xf5,0x82,0xe4,0x34,0x95,0xf5,
57060 -0x83,0xe0,0x12,0x43,0x94,0x56,0xaa,0x00,0x56,0xbf,0x01,0x56,0xd4,0x02,0x56,0xe9,
57061 -0x03,0x57,0x13,0x04,0x57,0x28,0x05,0x57,0x3d,0x06,0x57,0x64,0x0c,0x57,0x92,0x0d,
57062 -0x57,0xbf,0x0e,0x57,0xec,0x0f,0x00,0x00,0x58,0x20,0xe5,0x59,0x25,0xe0,0x24,0xc6,
57063 -0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0x74,0x15,0x80,0x3c,0xe5,
57064 -0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,
57065 -0x74,0x10,0x80,0x27,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,
57066 -0x83,0x74,0xf0,0xf0,0xa3,0x74,0x05,0x80,0x12,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,
57067 -0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0xe4,0xf0,0xe5,0x59,0x25,0xe0,
57068 -0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0x8f,0xf0,
57069 -0x02,0x58,0x20,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,
57070 -0x74,0x0f,0xf0,0xa3,0x74,0xf5,0x80,0x27,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,
57071 -0xe4,0x34,0x9b,0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0xf0,0x80,0x12,0xe5,0x59,0x25,
57072 -0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe4,0xf0,0xa3,0x74,0x0d,0xf0,
57073 -0xe5,0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe4,0xf0,0xa3,
57074 -0xf0,0x02,0x58,0x20,0x90,0x04,0x47,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,
57075 -0x4d,0x90,0x04,0x46,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,
57076 -0x5f,0x90,0x04,0x45,0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xf0,0x90,0x04,0x44,0x02,
57077 -0x58,0x17,0x90,0x04,0x4b,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,0x4d,0x90,
57078 -0x04,0x4a,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,
57079 -0x04,0x49,0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xf0,0x90,0x04,0x48,0x80,0x58,0x90,
57080 -0x04,0x4f,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,0x4d,0x90,0x04,0x4e,0xe0,
57081 -0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,0x04,0x4d,0xe0,
57082 -0x85,0x5c,0x82,0x85,0x5b,0x83,0xf0,0x90,0x04,0x4c,0x80,0x2b,0x90,0x04,0x53,0xe0,
57083 -0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,0x4d,0x90,0x04,0x52,0xe0,0xab,0x5d,0xaa,
57084 -0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,0x04,0x51,0xe0,0x85,0x5c,0x82,
57085 -0x85,0x5b,0x83,0xf0,0x90,0x04,0x50,0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xa3,0xf0,
57086 -0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0xc0,0x03,0xc0,0x02,0xc0,0x01,0x12,0x24,0x62,0xff,
57087 -0xab,0x62,0xaa,0x63,0xa9,0x64,0x12,0x24,0x62,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,
57088 -0x12,0x42,0x4d,0xab,0x5d,0xe5,0x5f,0x24,0x01,0xf9,0xe4,0x35,0x5e,0xfa,0xc0,0x03,
57089 -0xc0,0x02,0xc0,0x01,0x12,0x24,0x62,0xff,0xab,0x62,0xaa,0x63,0xa9,0x64,0x90,0x00,
57090 -0x01,0x12,0x42,0x20,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,0x12,0x42,0x4d,0x85,0x5c,
57091 -0x82,0x85,0x5b,0x83,0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,0x61,0x82,0x85,0x60,0x83,
57092 -0xe0,0xfe,0xef,0x5e,0xd0,0x82,0xd0,0x83,0xf0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xa3,
57093 -0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,0x61,0x82,0x85,0x60,0x83,0xa3,0xe0,0xfe,0xef,
57094 -0x5e,0xd0,0x82,0xd0,0x83,0xf0,0xe5,0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,
57095 -0x95,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3b,0x75,0x5a,0x0b,0x74,0x01,0x7e,
57096 -0x00,0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x59,
57097 -0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,
57098 -0x5f,0x4e,0x60,0x06,0xe5,0x5a,0x24,0x10,0x80,0x5d,0x15,0x5a,0xe5,0x5a,0xc3,0x94,
57099 -0x00,0x50,0xca,0x80,0x56,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,
57100 -0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3d,0x75,0x5a,0x0f,0x74,0x01,0x7e,0x00,
57101 -0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x59,0x25,
57102 -0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,
57103 -0x4e,0x60,0x08,0x90,0x9e,0x4b,0xe5,0x5a,0xf0,0x80,0x10,0x15,0x5a,0xe5,0x5a,0xc3,
57104 -0x94,0x00,0x50,0xc8,0x80,0x05,0xe4,0x90,0x9e,0x4b,0xf0,0xe5,0x59,0x25,0xe0,0x24,
57105 -0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3b,0xe4,
57106 -0xf5,0x5a,0x74,0x01,0x7e,0x00,0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,
57107 -0xd8,0xf9,0xff,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,
57108 -0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x08,0x90,0x9e,0x4c,0xe5,0x5a,0xf0,0x80,
57109 -0x5b,0x05,0x5a,0xe5,0x5a,0xb4,0x10,0xca,0x80,0x52,0xe5,0x59,0x25,0xe0,0x24,0x02,
57110 -0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x39,0xe4,0xf5,
57111 -0x5a,0x74,0x01,0x7e,0x00,0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,
57112 -0xf9,0xff,0xe5,0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,
57113 -0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x06,0xe5,0x5a,0x24,0x10,0x80,0x0a,0x05,0x5a,
57114 -0xe5,0x5a,0xb4,0x0c,0xcc,0x80,0x05,0xe4,0x90,0x9e,0x4c,0xf0,0x90,0x9e,0x4b,0xe0,
57115 -0xff,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x48,0x12,0x43,0x5f,0xef,0xf0,0x90,0x9e,
57116 -0x4c,0xe0,0xfe,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x49,0x12,0x43,0x5f,0xee,0xf0,
57117 -0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0xd3,0x9f,0x40,0x05,
57118 -0x90,0x9e,0x4b,0x51,0x6f,0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,
57119 -0xe0,0xff,0x90,0x9e,0x4c,0xe0,0xfe,0xef,0xc3,0x9e,0x50,0x02,0x51,0x6f,0x90,0x9e,
57120 -0x4b,0xe0,0xff,0xd3,0x94,0x13,0x40,0x07,0x90,0x96,0x43,0x74,0x03,0xf0,0x22,0xef,
57121 -0xd3,0x94,0x0b,0x40,0x07,0x90,0x96,0x43,0x74,0x02,0xf0,0x22,0xef,0xd3,0x94,0x03,
57122 -0x40,0x07,0x90,0x96,0x43,0x74,0x01,0xf0,0x22,0xe4,0x90,0x96,0x43,0xf0,0x22,0xe0,
57123 -0xfd,0x74,0x26,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xed,0xf0,0xaf,0x59,
57124 -0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xef,0xc3,0x94,0x20,0x50,0x0e,0x74,0x84,0x2f,
57125 -0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xed,0xf0,0x80,0x29,0x74,0xa6,0x2f,0xf5,0x82,
57126 -0xe4,0x34,0x9c,0xf5,0x83,0xed,0xf0,0x90,0x9e,0x75,0xef,0xf0,0x24,0xa6,0xf5,0x82,
57127 -0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x90,0x9e,0x76,0xf0,0x7b,0x01,0x7a,0x9e,0x79,0x75,
57128 -0x7d,0x02,0x51,0xc9,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
57129 -0x90,0x9e,0x94,0x12,0x43,0x8b,0x90,0x9e,0x97,0xe0,0x54,0xf0,0x44,0x06,0xff,0xf0,
57130 -0xed,0x54,0x0f,0xc4,0x54,0xf0,0xfe,0xef,0x54,0x0f,0x4e,0xf0,0x90,0x9e,0x94,0x12,
57131 -0x43,0x6b,0x90,0x9e,0x91,0x12,0x43,0x8b,0x7b,0x01,0x7a,0x9e,0x79,0x97,0x71,0xd4,
57132 -0xd0,0xd0,0x92,0xaf,0x22,0x8f,0x50,0x8d,0x51,0xe5,0x51,0x54,0x1f,0xf5,0x56,0x74,
57133 -0x01,0x2f,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe0,0xf5,0x54,0x90,0x04,0xfd,0xe0,
57134 -0xb4,0x01,0x05,0x75,0x57,0x03,0x80,0x03,0x75,0x57,0x01,0xeb,0xc3,0x95,0x57,0x40,
57135 -0x04,0xaf,0x50,0x80,0x33,0xe5,0x54,0x25,0x53,0xf5,0x55,0xe5,0x56,0x90,0x41,0xd6,
57136 -0x93,0xff,0xe5,0x55,0xd3,0x9f,0x74,0x01,0x40,0x11,0x25,0x50,0xf5,0x82,0xe4,0x34,
57137 -0x94,0xf5,0x83,0xe4,0xf0,0xad,0x51,0xaf,0x50,0x41,0x80,0x25,0x50,0xf5,0x82,0xe4,
57138 -0x34,0x94,0xf5,0x83,0xe5,0x55,0xf0,0x22,0xad,0x07,0x75,0xf0,0x09,0xed,0x90,0x96,
57139 -0x48,0x12,0x43,0x5f,0xe0,0xff,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,
57140 -0xe0,0x54,0x1f,0xf5,0x58,0xd3,0x9f,0x40,0x02,0x8f,0x58,0xe5,0x58,0x25,0xe0,0x24,
57141 -0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xe5,
57142 -0x58,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,
57143 -0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,
57144 -0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0xaf,0x05,0xad,0x58,0x51,
57145 -0x80,0xaf,0x58,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x8e,0x12,0x43,
57146 -0x8b,0x90,0x9e,0xaf,0xe0,0xff,0x04,0xf0,0x90,0x00,0x01,0xef,0x12,0x42,0x5f,0x7f,
57147 -0xaf,0x7e,0x01,0x91,0x67,0xef,0x60,0x49,0x90,0x9e,0x8e,0x12,0x43,0x6b,0x8b,0x1e,
57148 -0x8a,0x1f,0x89,0x20,0x75,0x21,0x02,0x7b,0x01,0x7a,0x01,0x79,0xa0,0x12,0x45,0x09,
57149 -0x90,0x9e,0x91,0x12,0x43,0x6b,0x8b,0x1e,0x8a,0x1f,0x89,0x20,0x90,0x9e,0x8e,0x12,
57150 -0x43,0x6b,0x12,0x24,0x62,0xff,0xc4,0x54,0x0f,0xf5,0x21,0x7b,0x01,0x7a,0x01,0x79,
57151 -0xa2,0x12,0x45,0x09,0x90,0x01,0xaf,0x74,0xff,0xf0,0x90,0x01,0xcb,0xe0,0x64,0x80,
57152 -0xf0,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x9e,0x2f,0xe0,0x54,0xf0,0x44,0x03,0xf0,0x54,
57153 -0x0f,0x44,0x80,0xf0,0x7b,0x00,0x7a,0x00,0x79,0x13,0x90,0x9e,0x91,0x12,0x43,0x8b,
57154 -0x0b,0x7a,0x9e,0x79,0x2f,0x61,0xd4,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,
57155 -0x9d,0xee,0xf0,0xa3,0xef,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,0x9d,0xe0,0xfe,
57156 -0xa3,0xe0,0xf5,0x82,0x8e,0x83,0xe0,0x60,0x2d,0xc3,0x90,0x9e,0xa0,0xe0,0x94,0xe8,
57157 -0x90,0x9e,0x9f,0xe0,0x94,0x03,0x40,0x0b,0x90,0x01,0xc6,0xe0,0x44,0x10,0xf0,0x7f,
57158 -0x00,0x80,0x15,0x90,0x9e,0x9f,0xe4,0x75,0xf0,0x01,0x12,0x42,0x81,0x7f,0x0a,0x7e,
57159 -0x00,0x12,0x32,0x15,0x80,0xc5,0x7f,0x01,0xd0,0xd0,0x92,0xaf,0x22,0xac,0x07,0xec,
57160 -0xc3,0x94,0x20,0x50,0x0d,0x74,0x84,0x2c,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,
57161 -0x80,0x0b,0x74,0xa6,0x2c,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x54,0x7f,0xf5,
57162 -0x64,0xe5,0x64,0x54,0x1f,0xff,0x90,0x9e,0x40,0xf0,0x75,0xf0,0x09,0xec,0x90,0x96,
57163 -0x49,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x42,0xf0,0x75,0xf0,0x09,0xec,0x90,0x96,0x48,
57164 -0x12,0x43,0x5f,0xe0,0xfe,0x90,0x9e,0x43,0xf0,0xec,0x25,0xe0,0x24,0xc6,0xf5,0x82,
57165 -0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x44,0xcb,0xf0,0xa3,0xeb,
57166 -0xf0,0xec,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfb,0xa3,
57167 -0xe0,0x90,0x9e,0x46,0xcb,0xf0,0xa3,0xeb,0xf0,0xef,0xd3,0x9e,0x40,0x0a,0x90,0x9e,
57168 -0x43,0xe0,0x90,0x9e,0x40,0xf0,0xf5,0x64,0xed,0x70,0x02,0xc1,0x13,0x90,0x9e,0x41,
57169 -0xed,0xf0,0xe5,0x64,0x30,0xe6,0x0a,0x90,0x9e,0x40,0xe0,0xf5,0x64,0xa3,0xe0,0x14,
57170 -0xf0,0x90,0x9e,0x41,0xe0,0x70,0x02,0xc1,0x13,0x90,0x9e,0x40,0xe0,0xff,0xd3,0x94,
57171 -0x00,0x50,0x02,0xc1,0x13,0xe4,0x90,0x9e,0x3f,0xf0,0xef,0x14,0x90,0x9e,0x3e,0xf0,
57172 -0x90,0x9e,0x42,0xe0,0xfd,0x90,0x9e,0x3e,0xe0,0xff,0xd3,0x9d,0x40,0x6b,0xef,0x94,
57173 -0x10,0x40,0x21,0xef,0x24,0xf0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,
57174 -0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x46,0xe0,0x5e,0xfe,0xa3,0xe0,
57175 -0x5f,0x4e,0x70,0x27,0x90,0x9e,0x3e,0xe0,0xff,0xc3,0x94,0x10,0x50,0x33,0x74,0x01,
57176 -0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,
57177 -0x9e,0x44,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x16,0x90,0x9e,0x3e,0xe0,0xf5,
57178 -0x64,0xa3,0xe0,0x04,0xf0,0x90,0x9e,0x41,0xe0,0xff,0x90,0x9e,0x3f,0xe0,0x6f,0x60,
57179 -0x08,0x90,0x9e,0x3e,0xe0,0x14,0xf0,0x80,0x87,0x90,0x9e,0x41,0xe0,0xff,0x90,0x9e,
57180 -0x3f,0xe0,0xc3,0x9f,0x50,0x0d,0x90,0x9e,0x3e,0xe0,0xb5,0x05,0x06,0x90,0x9e,0x42,
57181 -0xe0,0xf5,0x64,0xe5,0x64,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,
57182 -0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xe5,0x64,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,
57183 -0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,
57184 -0x13,0xff,0xec,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,
57185 -0xa3,0xef,0xf0,0xaf,0x04,0xad,0x64,0x51,0x80,0xaf,0x64,0x22,0x8f,0x77,0x12,0x45,
57186 -0xa6,0xef,0x64,0x01,0x70,0x2e,0x90,0x9e,0x52,0x12,0x47,0xcc,0xe5,0x77,0x60,0x10,
57187 -0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x10,0xf0,0x80,0x0e,
57188 -0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xef,0xf0,0x90,0x04,
57189 -0x1f,0x74,0x20,0xf0,0x22,0x90,0x06,0x04,0xe0,0x54,0xbf,0xf0,0xef,0x60,0x09,0xe5,
57190 -0x22,0xb4,0x01,0x04,0xe4,0xff,0xd1,0x5c,0x53,0x23,0xf0,0x43,0x23,0x0c,0x22,0x90,
57191 -0x01,0x3c,0x74,0xff,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x01,0x34,0xf0,0xa3,0xf0,0xa3,
57192 -0xf0,0xa3,0xf0,0xfd,0x7f,0x54,0x12,0x4c,0xe3,0x7d,0xff,0x7f,0x55,0x12,0x4c,0xe3,
57193 -0x7d,0xff,0x7f,0x56,0x12,0x4c,0xe3,0x7d,0xff,0x7f,0x57,0x02,0x4c,0xe3,0x90,0x00,
57194 -0x02,0xe0,0x54,0xe0,0x7f,0x01,0x60,0x02,0x7f,0x00,0x22,0x90,0x00,0xf3,0xe0,0x7f,
57195 -0x00,0x30,0xe3,0x03,0x7f,0x01,0x22,0x22,0x90,0x01,0x64,0x74,0xa0,0xf0,0x22,0xc0,
57196 -0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,
57197 -0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x01,0xc4,0x74,
57198 -0xff,0xf0,0x74,0x5e,0xa3,0xf0,0x53,0x91,0xef,0x90,0x00,0x51,0xe0,0xff,0x90,0x00,
57199 -0x55,0xe0,0x5f,0xf5,0x3d,0xe5,0x3d,0x30,0xe6,0x18,0x74,0x40,0xf0,0x90,0x9e,0x1d,
57200 -0xe0,0x54,0x03,0xff,0xbf,0x03,0x0b,0x90,0x9e,0x1a,0xe0,0x60,0x05,0x7f,0x01,0x12,
57201 -0x4c,0xf8,0xe5,0x3d,0x30,0xe7,0x15,0x90,0x00,0x55,0x74,0x80,0xf0,0x90,0x9e,0x1d,
57202 -0xe0,0x54,0x03,0xff,0xbf,0x03,0x05,0x7f,0x02,0x12,0x4c,0xf8,0x90,0x01,0xc4,0x74,
57203 -0xff,0xf0,0x74,0x5e,0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,
57204 -0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,
57205 -0x32,0x8f,0x6b,0x8c,0x6c,0x8d,0x6d,0x22,0x8f,0x6e,0x8c,0x6f,0x8d,0x70,0x22,0xe4,
57206 -0xf5,0x22,0xf5,0x26,0xf5,0x25,0x75,0x24,0x0c,0x75,0x23,0x0c,0x90,0x9e,0x73,0xf0,
57207 -0x90,0x9e,0x71,0xf0,0x90,0x9e,0x70,0xf0,0x90,0x9e,0x72,0x04,0xf0,0x90,0x9e,0x64,
57208 -0xf0,0xe4,0x90,0x9e,0x74,0xf0,0x90,0x9e,0x66,0xf0,0x90,0x9e,0x6e,0x74,0x07,0xf0,
57209 -0xe4,0x90,0x9e,0x65,0xf0,0x90,0x9e,0x6c,0xf0,0xa3,0x74,0x02,0xf0,0x90,0x9e,0x6a,
57210 -0x14,0xf0,0xa3,0x74,0x03,0xf0,0x90,0x9e,0x69,0x74,0x14,0xf0,0x90,0x9e,0x6f,0x74,
57211 -0x05,0xf0,0xe4,0x90,0x9e,0x68,0xf0,0x90,0x9e,0x63,0xf0,0x90,0x9e,0x5f,0xf0,0x22,
57212 -0xe4,0x90,0x9e,0x74,0xf0,0x90,0x9e,0x65,0xf0,0xf5,0x26,0x22,0x8b,0x59,0x8a,0x5a,
57213 -0x89,0x5b,0x11,0x00,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x12,0x24,0x62,0xf5,0x25,0x14,
57214 -0x60,0x0e,0x14,0x60,0x1e,0x14,0x60,0x2f,0x24,0x03,0x70,0x40,0x7f,0x01,0x80,0x3a,
57215 -0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x02,0x12,0x42,0x20,0xfd,0xe4,0xff,0x11,
57216 -0x6d,0x80,0x27,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x02,0x12,0x42,0x20,0xfd,
57217 -0x7f,0x01,0x11,0x6d,0x1f,0x80,0x13,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x02,
57218 -0x12,0x42,0x20,0xfd,0x7f,0x02,0x11,0x6d,0xe4,0xff,0x11,0x98,0x22,0xef,0x24,0xfe,
57219 -0x60,0x0b,0x04,0x70,0x22,0x90,0x9e,0x72,0x74,0x01,0xf0,0x80,0x16,0xed,0x70,0x0a,
57220 -0x90,0x9e,0x6f,0xe0,0x90,0x9e,0x72,0xf0,0x80,0x05,0x90,0x9e,0x72,0xed,0xf0,0x90,
57221 -0x9e,0x72,0xe0,0x90,0x9e,0x64,0xf0,0x22,0xef,0x64,0x01,0x70,0x2f,0x7d,0x7c,0x7f,
57222 -0x02,0x12,0x31,0x2c,0x7d,0x02,0x7f,0x03,0x12,0x31,0x2c,0x90,0x01,0x57,0xe4,0xf0,
57223 -0x90,0x01,0x3c,0x74,0x02,0xf0,0x12,0x47,0x2b,0xe4,0xff,0x31,0x1f,0x90,0x06,0x04,
57224 -0xe0,0x54,0x7f,0xf0,0x90,0x06,0x0a,0xe0,0x54,0xf8,0xf0,0x22,0x90,0x01,0x36,0x74,
57225 -0x7c,0xf0,0xa3,0x74,0x02,0xf0,0x7d,0x7c,0xff,0x12,0x31,0x9d,0x7d,0x02,0x7f,0x03,
57226 -0x12,0x31,0x9d,0x90,0x06,0x04,0xe0,0x44,0x80,0xf0,0x90,0x06,0x0a,0xe0,0x44,0x07,
57227 -0xf0,0x90,0x9e,0x6c,0xe0,0xa3,0xe0,0x90,0x05,0x58,0xf0,0xe5,0x22,0x30,0xe0,0x19,
57228 -0x90,0x9e,0x66,0xe0,0x70,0x18,0xe0,0x04,0xf0,0xe5,0x23,0x54,0x0f,0xc3,0x94,0x04,
57229 -0x50,0x0c,0x7d,0x01,0x7f,0x04,0x02,0x47,0x2f,0xe4,0x90,0x9e,0x66,0xf0,0x22,0xef,
57230 -0x60,0x0b,0x90,0x9e,0x60,0xe0,0xb4,0x01,0x10,0xe4,0xff,0x80,0x09,0x90,0x9e,0x60,
57231 -0xe0,0xb4,0x01,0x05,0x7f,0x01,0x12,0x77,0xe4,0x22,0x90,0x01,0x37,0x74,0x02,0xf0,
57232 -0x90,0x05,0x22,0x74,0xff,0xf0,0x31,0xc3,0xef,0x70,0x06,0x90,0x01,0xc8,0x74,0xfd,
57233 -0xf0,0x7d,0x02,0x7f,0x03,0x12,0x31,0x9d,0xe5,0x25,0x60,0x04,0x7f,0x01,0x31,0x1f,
57234 -0x51,0x04,0x53,0x23,0xf0,0x43,0x23,0x02,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
57235 -0x90,0x00,0x01,0x12,0x42,0x20,0x90,0x9e,0x73,0xf0,0x90,0x00,0x03,0x12,0x42,0x20,
57236 -0x90,0x9e,0x63,0xf0,0x12,0x24,0x62,0x65,0x25,0x60,0x02,0x11,0x0c,0xd0,0xd0,0x92,
57237 -0xaf,0x22,0x7d,0x02,0x7f,0x03,0x12,0x31,0x2c,0xe5,0x25,0x14,0x24,0xfd,0x50,0x02,
57238 -0x80,0x20,0x90,0x9e,0x73,0xe0,0x60,0x06,0x7d,0x01,0x7f,0x0c,0x80,0x0d,0xe5,0x23,
57239 -0x54,0x0f,0xc3,0x94,0x04,0x50,0x07,0x7d,0x01,0x7f,0x04,0x12,0x47,0x2f,0xe4,0xff,
57240 -0x31,0x1f,0x22,0xe4,0x90,0x9e,0xa9,0xf0,0xa3,0xf0,0x90,0x05,0xf8,0xe0,0x70,0x0f,
57241 -0xa3,0xe0,0x70,0x0b,0xa3,0xe0,0x70,0x07,0xa3,0xe0,0x70,0x03,0x7f,0x01,0x22,0xd3,
57242 -0x90,0x9e,0xaa,0xe0,0x94,0xe8,0x90,0x9e,0xa9,0xe0,0x94,0x03,0x40,0x03,0x7f,0x00,
57243 -0x22,0x7f,0x32,0x7e,0x00,0x12,0x32,0x15,0x90,0x9e,0xa9,0xe4,0x75,0xf0,0x01,0x12,
57244 -0x42,0x81,0x80,0xc6,0x7f,0x78,0x7e,0x08,0x12,0x22,0x65,0x90,0x9d,0xff,0x12,0x25,
57245 -0x08,0x7f,0x04,0x7e,0x0c,0x12,0x22,0x65,0x90,0x9e,0x03,0x12,0x25,0x08,0x7f,0x00,
57246 -0x7e,0x08,0x12,0x22,0x65,0x90,0x9e,0x07,0x12,0x25,0x08,0x90,0x9e,0x60,0xe0,0x90,
57247 -0x9d,0xff,0xb4,0x01,0x0d,0x12,0x43,0x53,0xef,0x54,0xc7,0xff,0xed,0x54,0xc7,0xfd,
57248 -0x80,0x07,0x12,0x43,0x53,0xef,0x54,0xc7,0xff,0xec,0x90,0x80,0x96,0x12,0x25,0x08,
57249 -0x7f,0x78,0x7e,0x08,0x12,0x2b,0x08,0x90,0x9e,0x03,0x12,0x43,0x53,0xef,0x54,0x0f,
57250 -0xff,0xec,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x04,0x7e,0x0c,0x12,0x2b,0x08,0x90,
57251 -0x9e,0x07,0x12,0x43,0x53,0xef,0x44,0x02,0xff,0xec,0x90,0x80,0x96,0x12,0x25,0x08,
57252 -0x7f,0x00,0x7e,0x08,0x12,0x2b,0x08,0x7f,0x70,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9e,
57253 -0x0b,0x12,0x25,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x00,0x1b,0x25,0xa0,0x7f,0x70,
57254 -0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x68,0x12,0x25,0x14,0x00,0x00,0x00,0x00,0xe4,
57255 -0xfd,0xff,0x12,0x30,0x2c,0x90,0x9e,0x60,0xe0,0xb4,0x01,0x11,0x90,0x80,0x68,0x12,
57256 -0x25,0x14,0x00,0x00,0x00,0x00,0xe4,0xfd,0x7f,0x01,0x12,0x30,0x2c,0x90,0x00,0x11,
57257 -0xe0,0x54,0xf6,0xf0,0x02,0x4b,0xdb,0x12,0x4b,0xc4,0xef,0x64,0x01,0x60,0x08,0x90,
57258 -0x01,0xb9,0x74,0x01,0xf0,0x80,0x30,0x90,0x9e,0x71,0xe0,0x60,0x08,0x90,0x01,0xb9,
57259 -0x74,0x02,0xf0,0x80,0x22,0x90,0x9e,0x70,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x04,
57260 -0xf0,0x80,0x14,0xe5,0x24,0x54,0x0f,0xd3,0x94,0x04,0x40,0x08,0x90,0x01,0xb9,0x74,
57261 -0x08,0xf0,0x80,0x03,0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,0x08,0xf0,0x7f,0x00,0x22,
57262 -0x12,0x4b,0xc4,0xef,0x64,0x01,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,0xf0,0x80,0x4a,
57263 -0xe5,0x26,0x54,0x03,0x60,0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x3c,0xe5,0x24,
57264 -0x54,0x0f,0xd3,0x94,0x02,0x40,0x08,0x90,0x01,0xb9,0x74,0x04,0xf0,0x80,0x2b,0xe5,
57265 -0x26,0x30,0xe2,0x08,0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,0x1e,0xe5,0x26,0x30,0xe4,
57266 -0x08,0x90,0x01,0xb9,0x74,0x10,0xf0,0x80,0x11,0x90,0x9e,0x66,0xe0,0x60,0x08,0x90,
57267 -0x01,0xb9,0x74,0x20,0xf0,0x80,0x03,0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,0x04,0xf0,
57268 -0x7f,0x00,0x22,0xe5,0x12,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,0xf0,0x80,0x5b,0xe5,
57269 -0x24,0x54,0x0f,0xd3,0x94,0x01,0x40,0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x4a,
57270 -0x90,0x02,0x87,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x04,0xf0,0x80,0x3c,0x90,0x9e,
57271 -0x5e,0xe0,0xb4,0x01,0x10,0x90,0x9e,0x4d,0xe0,0xfe,0xa3,0xe0,0xf5,0x82,0x8e,0x83,
57272 -0xe0,0x60,0x16,0x80,0x25,0x90,0x9e,0x5e,0xe0,0x70,0x0e,0x90,0x01,0xaf,0xe0,0x60,
57273 -0x08,0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,0x11,0x90,0x9e,0x68,0xe0,0x70,0x08,0x90,
57274 -0x01,0xb9,0x74,0x10,0xf0,0x80,0x03,0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,0x02,0xf0,
57275 -0x7f,0x00,0x22,0x90,0x9e,0xae,0xef,0xf0,0x91,0x0c,0x90,0x9e,0xae,0xe0,0x60,0x05,
57276 -0x90,0x05,0x22,0xe4,0xf0,0x53,0x23,0xf0,0x43,0x23,0x04,0x22,0x90,0x00,0x11,0xe0,
57277 -0x44,0x09,0xf0,0x12,0x4b,0xdb,0x90,0x9d,0xff,0x12,0x43,0x53,0x90,0x80,0x96,0x12,
57278 -0x25,0x08,0x7f,0x78,0x7e,0x08,0x12,0x2b,0x08,0x90,0x9e,0x03,0x12,0x43,0x53,0x90,
57279 -0x80,0x96,0x12,0x25,0x08,0x7f,0x04,0x7e,0x0c,0x12,0x2b,0x08,0x90,0x9e,0x07,0x12,
57280 -0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x00,0x7e,0x08,0x12,0x2b,0x08,0x90,
57281 -0x9e,0x0b,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x70,0x7e,0x0e,0x12,
57282 -0x2b,0x08,0x90,0x80,0x68,0x12,0x25,0x14,0x00,0x03,0x2d,0x95,0xe4,0xfd,0xff,0x12,
57283 -0x30,0x2c,0x90,0x9e,0x60,0xe0,0xb4,0x01,0x11,0x90,0x80,0x68,0x12,0x25,0x14,0x00,
57284 -0x03,0x2d,0x95,0xe4,0xfd,0x7f,0x01,0x12,0x30,0x2c,0x22,0x8f,0x27,0xe4,0x90,0x9e,
57285 -0xa7,0xf0,0xa3,0xf0,0x90,0x01,0x09,0xe0,0x7f,0x00,0x30,0xe7,0x02,0x7f,0x01,0xef,
57286 -0x65,0x27,0x60,0x3e,0xc3,0x90,0x9e,0xa8,0xe0,0x94,0x88,0x90,0x9e,0xa7,0xe0,0x94,
57287 -0x13,0x40,0x08,0x90,0x01,0xc6,0xe0,0x44,0x80,0xf0,0x22,0x90,0x9e,0xa7,0xe4,0x75,
57288 -0xf0,0x01,0x12,0x42,0x81,0x7f,0x14,0x7e,0x00,0x12,0x32,0x15,0xd3,0x90,0x9e,0xa8,
57289 -0xe0,0x94,0x32,0x90,0x9e,0xa7,0xe0,0x94,0x00,0x40,0xb9,0x90,0x01,0xc7,0xe0,0x30,
57290 -0xe0,0xb2,0x22,0xe5,0x24,0x30,0xe6,0x19,0xe5,0x24,0x54,0x0f,0xff,0x90,0x9e,0x62,
57291 -0xe0,0xfe,0x4f,0x90,0x01,0x2f,0xf0,0xee,0x64,0x80,0x90,0x9e,0x62,0xf0,0x53,0x24,
57292 -0xbf,0x22,0x8f,0x76,0x12,0x45,0xa6,0xef,0x64,0x01,0x70,0x2e,0x90,0x9e,0x53,0x12,
57293 -0x47,0xcc,0xe5,0x76,0x60,0x10,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,
57294 -0xe0,0x44,0x10,0xf0,0x80,0x0e,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,
57295 -0xe0,0x54,0xef,0xf0,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0xe5,0x22,0x64,0x01,0x70,
57296 -0x61,0xe5,0x25,0x60,0x5d,0xe5,0x25,0x64,0x02,0x60,0x06,0xe5,0x25,0x64,0x05,0x70,
57297 -0x27,0x90,0x06,0xab,0xe0,0x90,0x9e,0x64,0xf0,0x90,0x06,0xaa,0xe0,0x90,0x9e,0x72,
57298 -0xf0,0x90,0x9e,0x64,0xe0,0x70,0x07,0x90,0x9e,0x72,0xe0,0xff,0x80,0x05,0x90,0x9e,
57299 -0x64,0xe0,0xff,0x90,0x9e,0x64,0xef,0xf0,0x90,0x9e,0x66,0xe0,0x60,0x03,0xe0,0x14,
57300 -0xf0,0xe4,0x90,0x9e,0x65,0xf0,0x90,0x01,0x57,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,
57301 -0x53,0x26,0xfd,0x53,0x26,0xef,0xe5,0x25,0x14,0x24,0xfd,0x50,0x02,0x80,0x03,0x12,
57302 -0x45,0x53,0x22,0xe4,0xff,0xe5,0x25,0x60,0x5f,0xe5,0x22,0x64,0x01,0x70,0x59,0xe5,
57303 -0x25,0x14,0x60,0x2b,0x24,0xfd,0x60,0x27,0x24,0x02,0x24,0xfb,0x50,0x02,0x80,0x21,
57304 -0x90,0x9e,0x64,0xe0,0x14,0xf0,0xe0,0x60,0x04,0xa3,0xe0,0x60,0x14,0x90,0x9e,0x64,
57305 -0xe0,0x70,0x08,0x90,0x9e,0x72,0xe0,0x90,0x9e,0x64,0xf0,0x7f,0x01,0x80,0x02,0x7f,
57306 -0x01,0xef,0x60,0x24,0x43,0x26,0x10,0xe4,0x90,0x9e,0x86,0xf0,0x90,0x9e,0x6e,0x12,
57307 -0x44,0x56,0x90,0x01,0x57,0x74,0x05,0xf0,0xe5,0x23,0x54,0x0f,0xc3,0x94,0x04,0x50,
57308 -0x07,0x7d,0x01,0x7f,0x04,0x12,0x47,0x2f,0x22,0xe5,0x25,0x60,0x39,0x90,0x9e,0x74,
57309 -0xe0,0x60,0x0d,0xe4,0xf0,0x53,0x26,0xfd,0xe5,0x26,0x54,0x07,0x70,0x28,0x80,0x23,
57310 -0x90,0x9e,0x65,0xe0,0x04,0xf0,0x53,0x26,0xef,0x90,0x9e,0x6a,0xe0,0xff,0x90,0x9e,
57311 -0x65,0xe0,0xd3,0x9f,0x40,0x0d,0xe5,0x22,0xb4,0x01,0x0b,0xa3,0xe0,0x70,0x07,0xe0,
57312 -0x04,0xf0,0x22,0x12,0x44,0xd1,0x22,0xef,0xc3,0x94,0x20,0x50,0x39,0xef,0x30,0xe0,
57313 -0x17,0xed,0xc4,0x54,0xf0,0xfd,0xef,0xc3,0x13,0xfe,0x24,0xa4,0xf5,0x82,0xe4,0x34,
57314 -0x04,0xf5,0x83,0xe0,0x54,0x0f,0x80,0x10,0xef,0xc3,0x13,0xfe,0x24,0xa4,0xf5,0x82,
57315 -0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,0xf0,0xf0,0x74,0xa4,0x2e,0xf5,0x82,0xe4,0x34,
57316 -0x04,0xf5,0x83,0xe0,0x4d,0xf0,0x22,0xad,0x07,0xed,0xc3,0x94,0x20,0x50,0x0d,0x74,
57317 -0x84,0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x80,0x0b,0x74,0xa6,0x2d,0xf5,
57318 -0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x54,0x7f,0xf5,0x64,0xe5,0x64,0x54,0x1f,0xfc,
57319 -0x75,0xf0,0x09,0xed,0x90,0x96,0x48,0x12,0x43,0x5f,0xe0,0xff,0x90,0x9e,0x3e,0xf0,
57320 -0xed,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,
57321 -0x90,0x9e,0x3f,0xcb,0xf0,0xa3,0xeb,0xf0,0xed,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,
57322 -0x34,0x9b,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x41,0xcb,0xf0,0xa3,0xeb,0xf0,
57323 -0xec,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfa,0x74,
57324 -0x01,0x93,0xfb,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xea,
57325 -0xf0,0xa3,0xeb,0xf0,0xec,0xc3,0x9f,0x40,0x02,0xe1,0xa5,0x74,0x67,0x2d,0xf5,0x82,
57326 -0xe4,0x34,0x9d,0xf5,0x83,0xec,0xf0,0x04,0xfb,0x90,0x9e,0x3e,0xe0,0xff,0xeb,0xd3,
57327 -0x9f,0x40,0x02,0xe1,0xd6,0xeb,0xc3,0x94,0x10,0x40,0x21,0xeb,0x24,0xf0,0xff,0x74,
57328 -0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,
57329 -0x90,0x9e,0x3f,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x70,0x23,0xeb,0xc3,0x94,0x10,
57330 -0x50,0x40,0x74,0x01,0x7e,0x00,0xa8,0x03,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,
57331 -0xd8,0xf9,0xff,0x90,0x9e,0x41,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x23,0xbb,
57332 -0x11,0x09,0x90,0x9e,0x40,0xe0,0x30,0xe7,0x02,0x7b,0x17,0xeb,0x64,0x13,0x60,0x03,
57333 -0xbb,0x12,0x09,0x90,0x9e,0x3f,0xe0,0x30,0xe0,0x02,0x7b,0x18,0xac,0x03,0x8c,0x64,
57334 -0x80,0x34,0x0b,0x80,0x84,0x90,0x9e,0x3e,0xe0,0xfb,0x6c,0x70,0x69,0x74,0x67,0x2d,
57335 -0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xec,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4a,
57336 -0x12,0x43,0x5f,0xe0,0xb4,0x01,0x0c,0xe5,0x64,0x20,0xe6,0x07,0xec,0x44,0x40,0xf5,
57337 -0x64,0x80,0x03,0xaf,0x64,0x22,0xec,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,
57338 -0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xec,0x25,0xe0,0x24,0x66,0xf5,0x82,
57339 -0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,
57340 -0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,
57341 -0xf0,0xa3,0xef,0xf0,0x80,0x5b,0xec,0xd3,0x9b,0x40,0x56,0x90,0x9e,0x3e,0xe0,0xff,
57342 -0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xef,0xf0,0xac,0x07,0x8f,0x64,
57343 -0xec,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,
57344 -0x01,0x93,0xff,0xec,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,
57345 -0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,
57346 -0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0xaf,0x64,
57347 -0x22,0x74,0x01,0x2d,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,0xf0,0xaf,0x05,0xe5,
57348 -0x64,0x44,0x80,0xfd,0x12,0x5a,0x80,0xe5,0x64,0x44,0x80,0xff,0x22,0xe4,0xf5,0x59,
57349 -0xe5,0x59,0xb4,0x20,0x14,0x90,0x9a,0xc5,0xe0,0x04,0xf0,0x90,0x95,0x01,0xe0,0xff,
57350 -0x90,0x9a,0xc5,0xe0,0xb5,0x07,0x02,0xe4,0xf0,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,
57351 -0x4b,0x12,0x43,0x5f,0xe0,0x64,0x01,0x60,0x02,0xc1,0xd3,0xe5,0x59,0x25,0xe0,0x24,
57352 -0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0xd3,0x94,0x00,0xee,
57353 -0x94,0x00,0x50,0x02,0xc1,0xd3,0xe5,0x59,0x94,0x20,0x40,0x08,0x90,0x9a,0xc5,0xe0,
57354 -0x60,0x02,0xc1,0xde,0xe5,0x59,0x75,0xf0,0x0a,0xa4,0x24,0x00,0xf9,0x74,0x90,0x35,
57355 -0xf0,0x75,0x5e,0x01,0xf5,0x5f,0x89,0x60,0xe5,0x59,0x25,0xe0,0x24,0x80,0xf5,0x82,
57356 -0xe4,0x34,0x93,0xf5,0x83,0xe0,0xff,0xa3,0xe0,0x90,0x9e,0x38,0xcf,0xf0,0xa3,0xef,
57357 -0xf0,0xe5,0x59,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xff,
57358 -0xa3,0xe0,0x90,0x9e,0x3a,0xcf,0xf0,0xa3,0xef,0xf0,0xe5,0x59,0xc3,0x94,0x20,0x50,
57359 -0x14,0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,0x3f,0x90,
57360 -0x9e,0x34,0xf0,0x80,0x12,0x74,0xa6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,
57361 -0xe0,0x54,0x3f,0x90,0x9e,0x34,0xf0,0x90,0x9e,0x34,0xe0,0xfe,0x54,0x1f,0xa3,0xf0,
57362 -0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x48,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x3d,0xf0,
57363 -0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xc3,0x94,0x05,0x40,
57364 -0x02,0x61,0xac,0x90,0x9e,0x3d,0xe0,0xff,0x90,0x9e,0x35,0xe0,0x9f,0x40,0x13,0x90,
57365 -0x9e,0x3d,0xe0,0x90,0x9e,0x35,0xf0,0xee,0x54,0x40,0xfe,0x90,0x9e,0x34,0xf0,0xef,
57366 -0x4e,0xf0,0x90,0x04,0xfd,0xe0,0x54,0x05,0x64,0x01,0x70,0x29,0x90,0x9e,0x35,0xe0,
57367 -0xff,0x90,0x41,0x4a,0x93,0xfe,0x74,0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,
57368 -0x83,0xe0,0xc3,0x9e,0x40,0x06,0xef,0x90,0x40,0xda,0x80,0x30,0x90,0x9e,0x35,0xe0,
57369 -0x90,0x40,0xf6,0x80,0x27,0x90,0x9e,0x35,0xe0,0xff,0x90,0x41,0x4a,0x93,0xfe,0x74,
57370 -0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xc3,0x9e,0x40,0x06,0xef,
57371 -0x90,0x41,0x12,0x80,0x07,0x90,0x9e,0x35,0xe0,0x90,0x41,0x2e,0x93,0x90,0x9e,0x3c,
57372 -0xf0,0x90,0x9e,0x3c,0xe0,0x75,0xf0,0x06,0xa4,0x24,0x50,0xf9,0x74,0x40,0x35,0xf0,
57373 -0x75,0x5b,0xff,0xf5,0x5c,0x89,0x5d,0x90,0x9e,0x34,0xe0,0x90,0x41,0xf2,0x93,0xff,
57374 -0xd3,0x90,0x9e,0x3b,0xe0,0x9f,0x90,0x9e,0x3a,0xe0,0x94,0x00,0x40,0x09,0xe4,0xfd,
57375 -0xaf,0x59,0x12,0x5c,0xbd,0xc1,0x6a,0xe5,0x59,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,
57376 -0x34,0x95,0xf5,0x83,0xe0,0xf5,0x61,0xa3,0xe0,0xf5,0x62,0xab,0x5b,0xaa,0x5c,0xa9,
57377 -0x5d,0x12,0x24,0x62,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x12,0x42,0x97,
57378 -0xfd,0xac,0xf0,0x12,0x24,0x7b,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,
57379 -0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0x7e,0x00,0xab,
57380 -0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x02,0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x24,
57381 -0x7b,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,0xaa,0x5c,0xa9,
57382 -0x5d,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,
57383 -0x90,0x00,0x04,0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x24,0x7b,0xef,0x25,0x62,0xf5,
57384 -0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,0x00,0x03,0x12,
57385 -0x42,0x20,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x06,0x12,0x42,
57386 -0xc2,0xfd,0xac,0xf0,0x12,0x24,0x7b,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,
57387 -0x61,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0x7e,0x00,
57388 -0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x08,0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,
57389 -0x24,0x7b,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,0xaa,0x5c,
57390 -0xa9,0x5d,0x90,0x00,0x05,0x12,0x42,0x20,0xff,0x7e,0x00,0x90,0x9e,0x38,0xe0,0xfc,
57391 -0xa3,0xe0,0xfd,0x12,0x24,0x7b,0xd3,0xe5,0x62,0x9f,0xe5,0x61,0x9e,0x40,0x0c,0xe5,
57392 -0x62,0x9f,0xf5,0x62,0xe5,0x61,0x9e,0xf5,0x61,0x80,0x05,0xe4,0xf5,0x61,0xf5,0x62,
57393 -0xe5,0x59,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe5,0x61,0xf0,
57394 -0xa3,0xe5,0x62,0xf0,0x90,0x9e,0x34,0xe0,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,
57395 -0x41,0xf5,0x83,0xc3,0x74,0x01,0x93,0x95,0x62,0xe4,0x93,0x95,0x61,0x50,0x07,0xaf,
57396 -0x59,0x12,0x66,0x87,0xc1,0x3e,0x90,0x9e,0x34,0xe0,0x25,0xe0,0x24,0x9e,0xf5,0x82,
57397 -0xe4,0x34,0x41,0xf5,0x83,0xd3,0x74,0x01,0x93,0x95,0x62,0xe4,0x93,0x95,0x61,0x50,
57398 -0x02,0xc1,0x3e,0x7d,0x01,0xaf,0x59,0x12,0x5c,0xbd,0xc1,0x3e,0x74,0xe6,0x25,0x59,
57399 -0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xfc,0x64,0x05,0x60,0x02,0xa1,0x47,0x90,
57400 -0x96,0x43,0xe0,0xff,0xb4,0x03,0x0b,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x19,0x40,0x3d,
57401 -0x80,0x2e,0xef,0xb4,0x02,0x0b,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x11,0x40,0x2e,0x80,
57402 -0x1f,0x90,0x96,0x43,0xe0,0xff,0xb4,0x01,0x0b,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x0a,
57403 -0x40,0x1b,0x80,0x0c,0xef,0x70,0x11,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x03,0x40,0x0d,
57404 -0x90,0x9a,0x84,0x74,0x01,0xf0,0x80,0x05,0xe4,0x90,0x9a,0x84,0xf0,0x74,0x84,0x25,
57405 -0x59,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x63,0x74,0x44,0x25,0x59,0xf5,
57406 -0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xff,0xc3,0x94,0x30,0x50,0x02,0x81,0xf4,0x90,
57407 -0x9a,0x84,0xe0,0x64,0x01,0x60,0x02,0x81,0xf4,0x74,0x85,0x25,0x59,0xf5,0x82,0xe4,
57408 -0x34,0x9a,0xf5,0x83,0xe0,0x64,0x0a,0x60,0x51,0xef,0x24,0x05,0xff,0xe4,0x33,0xfe,
57409 -0x74,0x41,0x25,0x59,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe0,0xfd,0xd3,0x9f,0xee,
57410 -0x64,0x80,0xf8,0x74,0x80,0x98,0x50,0x32,0xed,0x24,0x05,0xff,0xe4,0x33,0xfe,0x74,
57411 -0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xd3,0x9f,0xee,0x64,0x80,
57412 -0xf8,0x74,0x80,0x98,0x50,0x14,0x74,0x26,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9d,0xf5,
57413 -0x83,0xe0,0xff,0x90,0x9e,0x35,0xe0,0x6f,0x60,0x3d,0x74,0x44,0x25,0x59,0xf5,0x82,
57414 -0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xff,0xd3,0x94,0x42,0x40,0x05,0x75,0x63,0x05,0x80,
57415 -0x0e,0xef,0xd3,0x94,0x39,0x40,0x05,0x75,0x63,0x03,0x80,0x03,0x75,0x63,0x01,0x74,
57416 -0x41,0x25,0x59,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xef,0xf0,0x74,0x85,0x25,0x59,
57417 -0xf5,0x82,0xe4,0x34,0x9a,0x80,0x29,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,
57418 -0xf5,0x83,0xe4,0xf0,0x74,0x85,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,
57419 -0x04,0xf0,0x80,0x10,0xe4,0xf5,0x63,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,
57420 -0xf5,0x83,0xe4,0xf0,0x90,0x9e,0x35,0xe0,0xff,0x74,0x26,0x25,0x59,0xf5,0x82,0xe4,
57421 -0x34,0x9d,0xf5,0x83,0xef,0xf0,0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x98,0xf5,
57422 -0x83,0xe5,0x63,0xf0,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x4c,0x12,0x43,0x5f,0xe0,
57423 -0xb4,0x01,0x10,0xe4,0xf5,0x63,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,
57424 -0x83,0xe4,0xf0,0xad,0x63,0xc1,0x39,0xec,0x64,0x06,0x60,0x02,0xc1,0x3e,0xf5,0x61,
57425 -0xf5,0x62,0x90,0x42,0x13,0x93,0xff,0x7e,0x00,0x90,0x9e,0x38,0xe0,0xfc,0xa3,0xe0,
57426 -0xfd,0x12,0x24,0x7b,0x90,0x9e,0x36,0xee,0xf0,0xa3,0xef,0xf0,0x74,0x84,0x25,0x59,
57427 -0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x63,0xe4,0xf5,0x5a,0xab,0x5e,0xaa,
57428 -0x5f,0xa9,0x60,0x75,0xf0,0x02,0xe5,0x5a,0xa4,0xf5,0x82,0x85,0xf0,0x83,0x12,0x42,
57429 -0xc2,0xfd,0xac,0xf0,0xe5,0x5a,0x90,0x42,0x0e,0x93,0xff,0x7e,0x00,0x12,0x24,0x7b,
57430 -0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xc3,0x90,0x9e,0x37,0xe0,0x95,
57431 -0x62,0x90,0x9e,0x36,0xe0,0x95,0x61,0x40,0x07,0x05,0x5a,0xe5,0x5a,0xb4,0x05,0xbd,
57432 -0xe5,0x5a,0xc3,0x13,0xf5,0x5a,0xe5,0x63,0xb4,0x01,0x06,0xe5,0x5a,0x70,0x46,0x80,
57433 -0x13,0xe5,0x63,0xb4,0x03,0x15,0xe5,0x5a,0x70,0x05,0x75,0x63,0x03,0x80,0x39,0xe5,
57434 -0x5a,0xb4,0x01,0x05,0x75,0x63,0x01,0x80,0x2f,0x80,0x2a,0xe5,0x63,0xb4,0x05,0x28,
57435 -0xe5,0x5a,0x70,0x05,0x75,0x63,0x05,0x80,0x0d,0xe5,0x5a,0xb4,0x01,0x05,0x75,0x63,
57436 -0x03,0x80,0x03,0x75,0x63,0x01,0xd3,0x90,0x9e,0x3b,0xe0,0x94,0x03,0x90,0x9e,0x3a,
57437 -0xe0,0x94,0x00,0x40,0x03,0xe4,0xf5,0x63,0xd3,0x90,0x9e,0x3b,0xe0,0x94,0x03,0x90,
57438 -0x9e,0x3a,0xe0,0x94,0x00,0x40,0x03,0xe4,0xf5,0x63,0x74,0x84,0x25,0x59,0xf5,0x82,
57439 -0xe4,0x34,0x98,0xf5,0x83,0xe5,0x63,0xf0,0xfd,0xaf,0x59,0x12,0x66,0x47,0x74,0xe6,
57440 -0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xd3,0x94,0x05,0x74,0xe6,0x50,
57441 -0x0e,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x04,0xf0,0x80,0x0b,0x25,
57442 -0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0xab,0x5e,0xaa,0x5f,0xa9,0x60,
57443 -0xe4,0xf5,0xf0,0x12,0x42,0xfa,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x02,0xe4,
57444 -0xf5,0xf0,0x12,0x43,0x19,0x90,0x00,0x04,0xe4,0xf5,0xf0,0x12,0x43,0x19,0x90,0x00,
57445 -0x06,0xe4,0xf5,0xf0,0x12,0x43,0x19,0x90,0x00,0x08,0xe4,0xf5,0xf0,0x12,0x43,0x19,
57446 -0xe5,0x59,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe4,0xf0,0xa3,
57447 -0xf0,0xe5,0x59,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,
57448 -0xa3,0xf0,0xe5,0x59,0x25,0xe0,0x24,0x44,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,
57449 -0xf0,0xa3,0xf0,0x05,0x59,0xe5,0x59,0xc3,0x94,0x40,0x50,0x02,0x01,0x90,0x22,0x90,
57450 -0x04,0x44,0x74,0x11,0xf0,0xa3,0x74,0xf0,0xf0,0xa3,0x74,0x0f,0xf0,0xa3,0xe4,0xf0,
57451 -0xfd,0x74,0xa4,0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe4,0xf0,0x0d,0xbd,0x10,
57452 -0xf0,0xe4,0x90,0x9a,0xc5,0xf0,0x90,0x95,0x01,0x04,0xf0,0xe4,0xfd,0x75,0xf0,0x0a,
57453 -0xed,0x90,0x90,0x00,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,
57454 -0x90,0x02,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x04,
57455 -0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x06,0x12,0x43,
57456 -0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x08,0x12,0x43,0x5f,0xe4,
57457 -0xf0,0xa3,0xf0,0x74,0x26,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0x74,0x13,0xf0,
57458 -0x74,0x85,0x2d,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe4,0xf0,0x74,0x84,0x2d,0xf5,
57459 -0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,0xed,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,
57460 -0x34,0x93,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,
57461 -0x34,0x98,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,
57462 -0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0x44,0xf5,0x82,0xe4,
57463 -0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,
57464 -0x34,0x9a,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0x46,0xf5,0x82,0xe4,
57465 -0x34,0x9b,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0x74,0x86,0x2d,0xf5,0x82,0xe4,0x34,0x9c,
57466 -0xf5,0x83,0xe4,0xf0,0x74,0x46,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,
57467 -0x74,0xe6,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x90,0x41,0xc4,0x93,
57468 -0xfe,0x74,0x01,0x93,0xff,0x90,0x41,0x8c,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,
57469 -0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,
57470 -0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4b,0x12,0x43,
57471 -0x5f,0x74,0x01,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4a,0x12,0x43,0x5f,0x74,0x01,
57472 -0xf0,0x74,0x82,0x2d,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0x74,0x0c,0xf0,0x75,0xf0,
57473 -0x09,0xed,0x90,0x96,0x46,0x12,0x43,0x5f,0x74,0xff,0xf0,0xa3,0xf0,0x75,0xf0,0x09,
57474 -0xed,0x90,0x96,0x44,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0x74,0x0f,0xf0,0x75,0xf0,0x09,
57475 -0xed,0x90,0x96,0x48,0x12,0x43,0x5f,0x74,0x13,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,
57476 -0x49,0x12,0x43,0x5f,0xe4,0xf0,0xed,0xc3,0x94,0x20,0x50,0x0f,0x74,0x84,0x2d,0xf5,
57477 -0x82,0xe4,0x34,0x04,0xf5,0x83,0x74,0x13,0xf0,0x80,0x0d,0x74,0xa6,0x2d,0xf5,0x82,
57478 -0xe4,0x34,0x9c,0xf5,0x83,0x74,0x13,0xf0,0x0d,0xed,0x64,0x40,0x60,0x03,0x02,0x6f,
57479 -0x0d,0x22,0x12,0x24,0x62,0xf5,0x59,0xc3,0x94,0x40,0x50,0x15,0x90,0x00,0x02,0x12,
57480 -0x42,0x20,0xff,0x74,0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xef,0xf0,
57481 -0x22,0xe5,0x59,0xb4,0x40,0x0a,0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x96,0x42,0xf0,
57482 -0x22,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0x54,0x3f,0xfe,0xef,0x54,0x80,0xc4,0x13,
57483 -0x13,0x13,0x54,0x01,0xfd,0xaf,0x06,0x02,0x55,0x30,0x12,0x24,0x62,0x90,0x95,0x01,
57484 -0xf0,0x22,0x12,0x24,0x62,0xf5,0x22,0x22,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0x30,
57485 -0xe0,0x25,0x12,0x24,0x62,0x90,0x9e,0x6a,0xf0,0x90,0x00,0x01,0x12,0x42,0x20,0x90,
57486 -0x9e,0x6b,0xf0,0xef,0xc3,0x13,0x54,0x7f,0x90,0x9e,0x69,0xf0,0x90,0x00,0x03,0x12,
57487 -0x42,0x20,0x90,0x9e,0x6f,0xf0,0x22,0x90,0x9e,0x6a,0x74,0x01,0xf0,0x90,0x9e,0x6b,
57488 -0x74,0x03,0xf0,0x90,0x9e,0x69,0x74,0x14,0xf0,0x90,0x9e,0x6f,0x74,0x05,0xf0,0x22,
57489 -0x12,0x24,0x62,0x30,0xe0,0x18,0xc3,0x13,0x54,0x7f,0x90,0x9e,0x6e,0xf0,0x90,0x00,
57490 -0x01,0x12,0x42,0x20,0xff,0x90,0x9e,0x6c,0xe4,0xf0,0xa3,0xef,0xf0,0x22,0x90,0x9e,
57491 -0x6e,0x74,0x07,0xf0,0x90,0x9e,0x6c,0xe4,0xf0,0xa3,0x74,0x02,0xf0,0x22,0x90,0x02,
57492 -0x09,0xe0,0xfd,0x12,0x24,0x62,0xfe,0xaf,0x05,0xed,0x2e,0x90,0x9e,0x50,0xf0,0x90,
57493 -0x00,0x01,0x12,0x42,0x20,0xff,0xed,0x2f,0x90,0x9e,0x51,0xf0,0x90,0x00,0x02,0x12,
57494 -0x42,0x20,0xff,0xed,0x2f,0x90,0x9e,0x52,0xf0,0x90,0x00,0x03,0x12,0x42,0x20,0xff,
57495 -0xed,0x2f,0x90,0x9e,0x53,0xf0,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0xae,0x05,0xed,
57496 -0x2f,0x90,0x9e,0x54,0xf0,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x3f,
57497 -0x12,0x43,0x8b,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,0xc2,0xfa,
57498 -0xe5,0xf0,0x24,0x00,0xff,0xe4,0x3a,0xfe,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,
57499 -0x01,0xee,0x8f,0xf0,0x12,0x43,0x19,0x12,0x24,0x62,0xff,0x60,0x2c,0xb5,0x71,0x16,
57500 -0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,0xc2,0x65,0x73,0x70,0x04,
57501 -0xe5,0x72,0x65,0xf0,0x60,0x23,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,
57502 -0x42,0xc2,0xff,0xae,0xf0,0x51,0x3e,0x80,0x10,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x12,
57503 -0x24,0x62,0x65,0x71,0x60,0x03,0x12,0x44,0xc8,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x9e,
57504 -0x42,0xee,0xf0,0xa3,0xef,0xf0,0x75,0x71,0x01,0x8e,0x72,0xf5,0x73,0xe4,0xfd,0x7f,
57505 -0x0b,0x51,0x80,0xe4,0xfd,0x7f,0x02,0x51,0x80,0x71,0x4a,0xe4,0xff,0x71,0xac,0xe4,
57506 -0xf5,0x75,0x90,0x01,0xc9,0xe5,0x75,0xf0,0x90,0x9e,0x42,0xe0,0xfc,0xa3,0xe0,0xfd,
57507 -0xec,0xfb,0x8d,0x44,0xe4,0xf5,0x45,0x7d,0x01,0x7f,0x60,0x7e,0x01,0x02,0x30,0x62,
57508 -0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x45,0xed,0xf0,0x90,0x9e,0x44,0xef,
57509 -0xf0,0xd3,0x94,0x07,0x50,0x4f,0xa3,0xe0,0x70,0x1a,0x90,0x9e,0x44,0xe0,0xff,0x74,
57510 -0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x47,0xe0,
57511 -0x5f,0xf0,0x80,0x17,0x90,0x9e,0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,
57512 -0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x47,0xe0,0x4f,0xf0,0x12,0x4b,0xdb,0x90,0x9e,
57513 -0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,
57514 -0x90,0x00,0x46,0x80,0x5a,0x90,0x9e,0x44,0xe0,0x24,0xf8,0xf0,0xa3,0xe0,0x70,0x1d,
57515 -0x90,0x9e,0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,
57516 -0xc4,0x54,0xf0,0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0x80,0x1a,0x90,0x9e,0x44,
57517 -0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,
57518 -0xff,0x90,0x00,0x43,0xe0,0x4f,0xf0,0x12,0x4b,0xdb,0x90,0x9e,0x44,0xe0,0xff,0x74,
57519 -0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x43,0xe0,
57520 -0x5f,0xf0,0x12,0x4b,0xdb,0xd0,0xd0,0x92,0xaf,0x22,0x7f,0x0b,0x71,0xb9,0xef,0x65,
57521 -0x74,0x60,0x10,0xe5,0x74,0xb4,0x01,0x05,0xe4,0xf5,0x74,0x80,0x03,0x75,0x74,0x01,
57522 -0x7f,0x01,0x22,0x7f,0x00,0x22,0xe5,0x71,0x64,0x01,0x70,0x3f,0x71,0x4a,0xbf,0x01,
57523 -0x04,0x7f,0x01,0x71,0xac,0x90,0x00,0x46,0xe0,0x44,0x04,0xfd,0x7f,0x46,0x12,0x4c,
57524 -0xe3,0x90,0x00,0x44,0xe0,0x54,0xfb,0xfd,0x7f,0x44,0x12,0x4c,0xe3,0x90,0x00,0x46,
57525 -0xe0,0x54,0xfb,0xfd,0x7f,0x46,0x12,0x4c,0xe3,0x7f,0x02,0x71,0xb9,0x8f,0x75,0x90,
57526 -0x01,0xc9,0xe5,0x75,0xf0,0xb4,0x01,0x03,0x12,0x4f,0xda,0x22,0x90,0x01,0xca,0xe5,
57527 -0x74,0xf0,0xef,0x60,0x03,0x12,0x4f,0xda,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
57528 -0x90,0x9e,0xb1,0xef,0xf0,0xd3,0x94,0x07,0x50,0x47,0xe0,0xff,0x74,0x01,0xa8,0x07,
57529 -0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x46,0xe0,0x5f,0xf0,0x12,
57530 -0x4b,0xdb,0x90,0x9e,0xb1,0xe0,0xfd,0x74,0x01,0x7e,0x00,0xa8,0x05,0x08,0x80,0x05,
57531 -0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,0x44,0xe0,0xfb,0xe4,0xfe,0xef,
57532 -0x5b,0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,0xd8,0xf8,0xff,0x80,
57533 -0x44,0x90,0x9e,0xb1,0xe0,0x24,0xf8,0xf0,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,
57534 -0x02,0xc3,0x33,0xd8,0xfc,0x12,0x4b,0xd3,0x90,0x9e,0xb1,0xe0,0xfd,0x74,0x01,0x7e,
57535 -0x00,0xa8,0x05,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,
57536 -0x42,0xe0,0xfb,0xe4,0xfe,0xef,0x5b,0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,
57537 -0xce,0x13,0xd8,0xf8,0xff,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,
57538 -0xd0,0x90,0x9e,0x56,0xe0,0x90,0x9e,0x40,0xf0,0x90,0x9e,0x57,0xe0,0xf5,0x64,0xa3,
57539 -0xe0,0xf5,0x65,0xe4,0xf5,0x61,0x74,0x59,0x25,0x61,0xf5,0x82,0xe4,0x34,0x9e,0xf5,
57540 -0x83,0xe0,0xff,0x74,0x66,0x25,0x61,0xf8,0xa6,0x07,0x05,0x61,0xe5,0x61,0xb4,0x04,
57541 -0xe5,0x90,0x9e,0x40,0xe0,0x12,0x43,0x94,0x74,0xb7,0x00,0x75,0xdf,0x01,0x74,0xbd,
57542 -0x02,0x74,0xbd,0x03,0x74,0xbd,0x04,0x75,0xdf,0x05,0x75,0xaf,0x80,0x75,0xc5,0x81,
57543 -0x75,0xdf,0x82,0x00,0x00,0x75,0xdb,0xaf,0x69,0xb1,0xe6,0xa1,0xdf,0x90,0x9e,0x40,
57544 -0xe0,0xff,0xb4,0x02,0x08,0x90,0x9e,0x3f,0x74,0x01,0xf0,0x80,0x0f,0xef,0x90,0x9e,
57545 -0x3f,0xb4,0x03,0x05,0x74,0x02,0xf0,0x80,0x03,0x74,0x04,0xf0,0xc3,0xe5,0x64,0x94,
57546 -0x08,0x50,0x49,0xe4,0xf5,0x61,0x90,0x9e,0x3f,0xe0,0xff,0xe5,0x61,0xc3,0x9f,0x40,
57547 -0x02,0xa1,0xdf,0xc3,0xe5,0x64,0x94,0x01,0x50,0x14,0xe5,0x61,0x25,0x65,0xff,0xc3,
57548 -0x74,0x03,0x95,0x61,0x24,0x66,0xf8,0xe6,0xfd,0x12,0x4c,0xe3,0x80,0x1a,0xc3,0x74,
57549 -0x03,0x95,0x61,0x24,0x66,0xf8,0xe6,0xff,0xe5,0x61,0x7c,0x00,0x25,0x65,0xfd,0xec,
57550 -0x35,0x64,0x8d,0x82,0xf5,0x83,0xef,0xf0,0x05,0x61,0x80,0xba,0xc3,0xe5,0x64,0x94,
57551 -0x10,0x40,0x02,0xa1,0xdf,0x90,0x9e,0x40,0xe0,0x64,0x04,0x60,0x02,0xa1,0xdf,0xaf,
57552 -0x67,0xfc,0xfd,0xfe,0x78,0x10,0x12,0x24,0xf5,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,
57553 -0x07,0xaf,0x66,0xe4,0xfc,0xfd,0xfe,0x78,0x18,0x12,0x24,0xf5,0xd0,0x03,0xd0,0x02,
57554 -0xd0,0x01,0xd0,0x00,0x12,0x43,0x46,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0xaf,
57555 -0x68,0xe4,0xfc,0xfd,0xfe,0x78,0x08,0x12,0x24,0xf5,0xd0,0x03,0xd0,0x02,0xd0,0x01,
57556 -0xd0,0x00,0x12,0x43,0x46,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,0x07,0xaf,0x69,0xe4,
57557 -0xfc,0xfd,0xfe,0x12,0x43,0x46,0xa3,0x12,0x25,0x08,0x90,0x9e,0x41,0x12,0x43,0x53,
57558 -0x90,0x80,0x96,0x12,0x25,0x08,0xaf,0x65,0xae,0x64,0x12,0x2b,0x08,0x80,0x30,0xe5,
57559 -0x68,0x7f,0x00,0xfe,0xef,0x25,0x69,0xf5,0x63,0xe4,0x3e,0xf5,0x62,0xaf,0x63,0xfe,
57560 -0x12,0x32,0x15,0x80,0x1a,0xe5,0x68,0x7f,0x00,0xfe,0xef,0x25,0x69,0xf5,0x63,0xe4,
57561 -0x3e,0xf5,0x62,0xaf,0x63,0xfe,0x12,0x31,0x82,0x80,0x04,0x7f,0x00,0x80,0x02,0x7f,
57562 -0x01,0xd0,0xd0,0x92,0xaf,0x22,0x8f,0x6a,0xe4,0x90,0x9e,0x45,0xf0,0xe5,0x6a,0x14,
57563 -0xfe,0x90,0x9e,0x45,0xe0,0xff,0xc3,0x9e,0x50,0x0e,0xef,0x04,0xfd,0x12,0x2d,0x4d,
57564 -0x90,0x9e,0x45,0xe0,0x04,0xf0,0x80,0xe5,0xe5,0x6a,0x14,0xff,0x7d,0xff,0x12,0x2d,
57565 -0x4d,0x90,0x9e,0x45,0xe5,0x6a,0xf0,0x90,0x9e,0x45,0xe0,0xc3,0x94,0xff,0x50,0x0f,
57566 -0xe0,0xff,0x04,0xfd,0x12,0x2d,0x4d,0x90,0x9e,0x45,0xe0,0x04,0xf0,0x80,0xe8,0xad,
57567 -0x6a,0x7f,0xff,0x02,0x2d,0x4d,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xe4,0xf5,0x5b,
57568 -0x75,0x5c,0x04,0xf5,0x5d,0xf5,0x5f,0xf5,0x60,0x90,0x02,0x09,0xe0,0xff,0x12,0x24,
57569 -0x62,0xfe,0xef,0x2e,0xf5,0x5e,0x30,0xe0,0x08,0x75,0x59,0x00,0x75,0x5a,0x80,0x80,
57570 -0x05,0xe4,0xf5,0x59,0xf5,0x5a,0xe5,0x5e,0xc3,0x13,0x90,0xfd,0x10,0xf0,0x74,0x20,
57571 -0x25,0x5b,0xf5,0x5b,0xad,0x5a,0xe5,0x5b,0x2d,0xff,0x24,0x01,0xf5,0x82,0xe4,0x34,
57572 -0xfc,0xf5,0x83,0xe0,0x90,0x9e,0x56,0xf0,0x74,0x02,0x2f,0xf5,0x82,0xe4,0x34,0xfc,
57573 -0xf5,0x83,0xe0,0xfe,0xe5,0x5b,0x2d,0x24,0x03,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,
57574 -0xe0,0x24,0x00,0xff,0xe4,0x3e,0x90,0x9e,0x57,0xf0,0xa3,0xef,0xf0,0x7f,0x04,0xe5,
57575 -0x5b,0x25,0x5a,0x2f,0x24,0x00,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0xfe,0x74,
57576 -0x55,0x2f,0xf5,0x82,0xe4,0x34,0x9e,0xf5,0x83,0xee,0xf0,0x0f,0xbf,0x08,0xe0,0x91,
57577 -0x5a,0xef,0x70,0x3f,0x90,0x01,0xc3,0xe0,0x60,0x25,0xc3,0xe5,0x60,0x94,0xe8,0xe5,
57578 -0x5f,0x94,0x03,0x40,0x09,0x90,0x01,0xc6,0xe0,0x44,0x10,0xf0,0x80,0x63,0x05,0x60,
57579 -0xe5,0x60,0x70,0x02,0x05,0x5f,0x7f,0x0a,0x7e,0x00,0x12,0x32,0x15,0x80,0xd5,0x90,
57580 -0x01,0xc6,0xe0,0x90,0x01,0xc3,0x30,0xe2,0x05,0x74,0xfe,0xf0,0x80,0x43,0x74,0xff,
57581 -0xf0,0x80,0x3e,0xe5,0x5b,0xb4,0x78,0x23,0xe4,0xf5,0x5b,0x05,0x5e,0xe5,0x5a,0x64,
57582 -0x80,0x45,0x59,0x70,0x06,0xf5,0x59,0xf5,0x5a,0x80,0x06,0x75,0x59,0x00,0x75,0x5a,
57583 -0x80,0xe5,0x5e,0xc3,0x13,0x90,0xfd,0x10,0xf0,0x80,0x06,0x74,0x08,0x25,0x5b,0xf5,
57584 -0x5b,0xe5,0x5d,0x15,0x5d,0x70,0x02,0x15,0x5c,0xe5,0x5d,0x45,0x5c,0x60,0x02,0xc1,
57585 -0x74,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x06,0x34,0x74,0xff,0xf0,0xe4,0xa3,0xf0,0xa3,
57586 -0xf0,0xa3,0xf0,0x22,0xe4,0x90,0x9e,0x5d,0xf0,0x90,0x00,0x80,0xe0,0x44,0x80,0xfd,
57587 -0x7f,0x80,0x02,0x4c,0xe3,0x8e,0x59,0x8f,0x5a,0x8b,0x5b,0x8a,0x5c,0x89,0x5d,0xe4,
57588 -0x90,0x9e,0x34,0xf0,0xef,0x90,0x00,0x31,0xf0,0x12,0x4b,0xdb,0xe5,0x59,0x54,0x03,
57589 -0xff,0x90,0x00,0x32,0xe0,0x54,0xfc,0x4f,0xf0,0x12,0x4b,0xdb,0x90,0x00,0x33,0xe0,
57590 -0x54,0x7f,0xf0,0x12,0x4b,0xdb,0x90,0x00,0x33,0xe0,0x20,0xe7,0x0e,0x90,0x9e,0x34,
57591 -0xe0,0xc3,0x94,0x64,0x50,0x05,0xe0,0x04,0xf0,0x80,0xeb,0x90,0x9e,0x34,0xe0,0xc3,
57592 -0x94,0x64,0x50,0x10,0x90,0x00,0x30,0xe0,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x12,0x42,
57593 -0x4d,0x7f,0x01,0x22,0x7f,0x00,0x22,0xe4,0xf5,0x74,0x22,0x90,0x9e,0x60,0xe0,0x90,
57594 -0x9e,0x0f,0xf0,0x22,0xef,0x70,0x03,0x02,0x79,0x9c,0x90,0x9e,0x0f,0xe0,0x60,0x03,
57595 -0x02,0x7d,0x67,0x90,0x9d,0xfb,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,
57596 -0x8c,0x7e,0x08,0x12,0x2b,0x08,0x90,0x9d,0xa7,0x12,0x43,0x53,0x90,0x80,0x96,0x12,
57597 -0x25,0x08,0x7f,0x44,0x7e,0x08,0x12,0x2b,0x08,0x90,0x9d,0xab,0x12,0x43,0x53,0x90,
57598 -0x80,0x96,0x12,0x25,0x08,0x7f,0x5c,0x7e,0x08,0x12,0x2b,0x08,0x90,0x9d,0xaf,0x12,
57599 -0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x6c,0x7e,0x0e,0x12,0x2b,0x08,0x90,
57600 -0x9d,0xb3,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x70,0x7e,0x0e,0x12,
57601 -0x2b,0x08,0x90,0x9d,0xb7,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x74,
57602 -0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xbb,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,
57603 -0x08,0x7f,0x78,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xbf,0x12,0x43,0x53,0x90,0x80,
57604 -0x96,0x12,0x25,0x08,0x7f,0x7c,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xc3,0x12,0x43,
57605 -0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x80,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,
57606 -0xc7,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x84,0x7e,0x0e,0x12,0x2b,
57607 -0x08,0x90,0x9d,0xcb,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x88,0x7e,
57608 -0x0e,0x12,0x2b,0x08,0x90,0x9d,0xcf,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,
57609 -0x7f,0x8c,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xd3,0x12,0x43,0x53,0x90,0x80,0x96,
57610 -0x12,0x25,0x08,0x7f,0xd0,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xd7,0x12,0x43,0x53,
57611 -0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0xd4,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xdb,
57612 -0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0xd8,0x7e,0x0e,0x12,0x2b,0x08,
57613 -0x90,0x9d,0xdf,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0xdc,0x7e,0x0e,
57614 -0x12,0x2b,0x08,0x90,0x9d,0xe3,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,
57615 -0xe0,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xe7,0x12,0x43,0x53,0x90,0x80,0x96,0x12,
57616 -0x25,0x08,0x7f,0xec,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xeb,0x12,0x43,0x53,0x90,
57617 -0x80,0x96,0x12,0x25,0x08,0x7f,0x04,0x7e,0x0c,0x12,0x2b,0x08,0x90,0x9d,0xef,0x12,
57618 -0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x04,0x7e,0x0d,0x12,0x2b,0x08,0x90,
57619 -0x9d,0xf3,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x0c,0x7e,0x09,0x12,
57620 -0x2b,0x08,0x90,0x9d,0xf7,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x04,
57621 -0x7e,0x08,0x12,0x2b,0x08,0x90,0x9e,0x0f,0x74,0x01,0xf0,0x22,0x90,0x9e,0x0f,0xe0,
57622 -0x64,0x01,0x60,0x02,0xa1,0x67,0x7f,0x8c,0x7e,0x08,0x12,0x22,0x65,0x90,0x9d,0xfb,
57623 -0x12,0x25,0x08,0x7f,0x44,0x7e,0x08,0x12,0x22,0x65,0x90,0x9d,0xa7,0x12,0x25,0x08,
57624 -0x7f,0x5c,0x7e,0x08,0x12,0x22,0x65,0x90,0x9d,0xab,0x12,0x25,0x08,0x7f,0x6c,0x7e,
57625 -0x0e,0x12,0x22,0x65,0x90,0x9d,0xaf,0x12,0x25,0x08,0x7f,0x70,0x7e,0x0e,0x12,0x22,
57626 -0x65,0x90,0x9d,0xb3,0x12,0x25,0x08,0x7f,0x74,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,
57627 -0xb7,0x12,0x25,0x08,0x7f,0x78,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xbb,0x12,0x25,
57628 -0x08,0x7f,0x7c,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xbf,0x12,0x25,0x08,0x7f,0x80,
57629 -0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xc3,0x12,0x25,0x08,0x7f,0x84,0x7e,0x0e,0x12,
57630 -0x22,0x65,0x90,0x9d,0xc7,0x12,0x25,0x08,0x7f,0x88,0x7e,0x0e,0x12,0x22,0x65,0x90,
57631 -0x9d,0xcb,0x12,0x25,0x08,0x7f,0x8c,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xcf,0x12,
57632 -0x25,0x08,0x7f,0xd0,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xd3,0x12,0x25,0x08,0x7f,
57633 -0xd4,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xd7,0x12,0x25,0x08,0x7f,0xd8,0x7e,0x0e,
57634 -0x12,0x22,0x65,0x90,0x9d,0xdb,0x12,0x25,0x08,0x7f,0xdc,0x7e,0x0e,0x12,0x22,0x65,
57635 -0x90,0x9d,0xdf,0x12,0x25,0x08,0x7f,0xe0,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xe3,
57636 -0x12,0x25,0x08,0x7f,0xec,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xe7,0x12,0x25,0x08,
57637 -0x7f,0x04,0x7e,0x0c,0x12,0x22,0x65,0x90,0x9d,0xeb,0x12,0x25,0x08,0x7f,0x04,0x7e,
57638 -0x0d,0x12,0x22,0x65,0x90,0x9d,0xef,0x12,0x25,0x08,0x7f,0x0c,0x7e,0x09,0x12,0x22,
57639 -0x65,0x90,0x9d,0xf3,0x12,0x25,0x08,0x7f,0x04,0x7e,0x08,0x12,0x22,0x65,0x90,0x9d,
57640 -0xf7,0x12,0x25,0x08,0x7f,0x8c,0x7e,0x08,0x12,0x22,0x65,0x90,0x9e,0xa1,0x12,0x25,
57641 -0x08,0x90,0x9e,0xa1,0x12,0x43,0x53,0xed,0x44,0xc0,0xfd,0xec,0x90,0x9e,0xa1,0x12,
57642 -0x25,0x08,0x90,0x9e,0xa1,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x8c,
57643 -0x7e,0x08,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x00,0x01,0x00,0x00,0x7f,
57644 -0x44,0x7e,0x08,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x00,0xdb,0x25,0xa4,
57645 -0x7f,0x5c,0x7e,0x08,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x20,0xdb,0x25,
57646 -0xa4,0x7f,0x6c,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x20,0xdb,
57647 -0x25,0xa4,0x7f,0x70,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x04,
57648 -0x1b,0x25,0xa4,0x7f,0x74,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,
57649 -0x04,0x1b,0x25,0xa4,0x7f,0x78,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,
57650 -0x14,0x04,0x1b,0x25,0xa4,0x7f,0x7c,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,
57651 -0x25,0x14,0x04,0x1b,0x25,0xa4,0x7f,0x80,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,
57652 -0x12,0x25,0x14,0x63,0xdb,0x25,0xa4,0x7f,0x84,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,
57653 -0x96,0x12,0x25,0x14,0x04,0x1b,0x25,0xa4,0x7f,0x88,0x7e,0x0e,0x12,0x2b,0x08,0x90,
57654 -0x80,0x96,0x12,0x25,0x14,0x20,0xdb,0x25,0xa4,0x7f,0x8c,0x7e,0x0e,0x12,0x2b,0x08,
57655 -0x90,0x80,0x96,0x12,0x25,0x14,0x20,0xdb,0x25,0xa4,0x7f,0xd0,0x7e,0x0e,0x12,0x2b,
57656 -0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x20,0xdb,0x25,0xa4,0x7f,0xd4,0x7e,0x0e,0x12,
57657 -0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x20,0xdb,0x25,0xa4,0x7f,0xd8,0x7e,0x0e,
57658 -0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x00,0x1b,0x25,0xa4,0x7f,0xdc,0x7e,
57659 -0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x00,0x1b,0x25,0xa4,0x7f,0xe0,
57660 -0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x24,0xdb,0x25,0xa4,0x7f,
57661 -0xec,0x7e,0x0e,0x12,0x2b,0x08,0x7f,0x04,0x7e,0x0c,0x12,0x22,0x65,0x90,0x9e,0xa1,
57662 -0x12,0x25,0x08,0x90,0x9e,0xa1,0x12,0x43,0x53,0xe4,0xff,0xec,0x90,0x9e,0xa1,0x12,
57663 -0x25,0x08,0x90,0x9e,0xa1,0x12,0x43,0x53,0xef,0x44,0x11,0xff,0xec,0x90,0x9e,0xa1,
57664 -0x12,0x25,0x08,0x90,0x9e,0xa1,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,
57665 -0x04,0x7e,0x0c,0x12,0x2b,0x08,0x7f,0x04,0x7e,0x0d,0x12,0x22,0x65,0x90,0x9e,0xa1,
57666 -0x12,0x25,0x08,0x90,0x9e,0xa1,0x12,0x43,0x53,0xef,0x54,0xf0,0xff,0xec,0x90,0x9e,
57667 -0xa1,0x12,0x25,0x08,0x90,0x9e,0xa1,0x12,0x43,0x53,0xef,0x44,0x01,0xff,0xec,0x90,
57668 -0x9e,0xa1,0x12,0x25,0x08,0x90,0x9e,0xa1,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,
57669 -0x08,0x7f,0x04,0x7e,0x0d,0x12,0x2b,0x08,0x7f,0x0c,0x7e,0x09,0x12,0x22,0x65,0x90,
57670 -0x9e,0xa1,0x12,0x25,0x08,0x90,0x9e,0xa1,0x12,0x43,0x53,0xe4,0xff,0xec,0x90,0x9e,
57671 -0xa1,0x12,0x25,0x08,0x90,0x9e,0xa1,0x12,0x43,0x53,0xef,0x44,0x11,0xff,0xec,0x90,
57672 -0x9e,0xa1,0x12,0x25,0x08,0x90,0x9e,0xa1,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,
57673 -0x08,0x7f,0x0c,0x7e,0x09,0x12,0x2b,0x08,0x7f,0x0c,0x7e,0x09,0x12,0x22,0x65,0x90,
57674 -0x9e,0xa1,0x12,0x25,0x08,0x90,0x9e,0xa1,0x12,0x43,0x53,0xed,0x54,0x0f,0xfd,0xec,
57675 -0x54,0xf0,0xfc,0x90,0x9e,0xa1,0x12,0x25,0x08,0x90,0x9e,0xa1,0x12,0x43,0x53,0xed,
57676 -0x44,0x10,0xfd,0xec,0x44,0x01,0xfc,0x90,0x9e,0xa1,0x12,0x25,0x08,0x90,0x9e,0xa1,
57677 -0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x0c,0x7e,0x09,0x12,0x2b,0x08,
57678 -0x7f,0x04,0x7e,0x08,0x12,0x22,0x65,0x90,0x9e,0xa1,0x12,0x25,0x08,0x90,0x9e,0xa1,
57679 -0x12,0x43,0x53,0xef,0x54,0xf0,0xff,0xec,0x90,0x9e,0xa1,0x12,0x25,0x08,0x90,0x9e,
57680 -0xa1,0x12,0x43,0x53,0xef,0x44,0x01,0xff,0xec,0x90,0x9e,0xa1,0x12,0x25,0x08,0x90,
57681 -0x9e,0xa1,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x04,0x7e,0x08,0x12,
57682 -0x2b,0x08,0xe4,0x90,0x9e,0x0f,0xf0,0x22,0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x9e,
57683 -0x1e,0xf0,0xe0,0x60,0x04,0xe0,0xf4,0x70,0x21,0xa2,0xaf,0xe4,0x33,0xf5,0x59,0xc2,
57684 -0xaf,0x90,0x00,0x47,0xe0,0x54,0xfb,0xfd,0x7f,0x47,0x12,0x4c,0xe3,0x7d,0x40,0x7f,
57685 -0x01,0x12,0x31,0x66,0xe5,0x59,0x24,0xff,0x92,0xaf,0x22,0xe4,0xfd,0x7f,0x45,0x12,
57686 -0x4c,0xe3,0x90,0x04,0xfd,0xe4,0xf0,0xa3,0xf0,0x90,0x9e,0x1e,0xf0,0x90,0x9e,0x24,
57687 -0xf0,0x90,0x9e,0x27,0xf0,0x90,0x9e,0x25,0xf0,0x90,0x9e,0x28,0xf0,0x90,0x9e,0x26,
57688 -0xf0,0x90,0x9e,0x29,0xf0,0x90,0x9e,0x10,0x04,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,
57689 -0xf0,0x90,0x9e,0x15,0xf0,0x90,0x9e,0x1a,0xf0,0x90,0x9e,0x1c,0xf0,0x90,0x9e,0x2e,
57690 -0xf0,0x90,0x9e,0x1f,0xf0,0x90,0x9e,0x1b,0xf0,0x90,0x9e,0x14,0xf0,0x90,0x00,0x51,
57691 -0xe0,0x44,0xc0,0xfd,0x7f,0x51,0x02,0x4c,0xe3,0x90,0x9e,0x2e,0xe0,0x64,0x01,0x60,
57692 -0x08,0x90,0x9e,0x1c,0xe0,0x60,0x02,0xc1,0xd0,0x90,0x9e,0x10,0xe0,0xc3,0x94,0xff,
57693 -0x50,0x05,0xe0,0x04,0xf0,0x80,0x3b,0x90,0x9e,0x11,0xe0,0xc3,0x94,0xff,0x50,0x06,
57694 -0xe0,0x04,0xf0,0xe4,0x80,0x28,0x90,0x9e,0x12,0xe0,0xc3,0x94,0xff,0x50,0x0a,0xe0,
57695 -0x04,0xf0,0xe4,0x90,0x9e,0x11,0xf0,0x80,0x15,0x90,0x9e,0x13,0xe0,0xc3,0x94,0xff,
57696 -0x50,0x10,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x12,0xf0,0x90,0x9e,0x11,0xf0,0x90,0x9e,
57697 -0x10,0xf0,0x90,0x00,0x44,0xe0,0x54,0x0c,0x60,0x76,0xe0,0x30,0xe2,0x32,0x90,0x9e,
57698 -0x24,0xe0,0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,0x24,0x90,0x9e,0x25,0xe0,
57699 -0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x11,0x90,0x9e,0x26,0xe0,0xc3,
57700 -0x94,0xff,0x50,0x0c,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x25,0xf0,0x90,0x9e,0x24,0xf0,
57701 -0x90,0x00,0x44,0xe0,0x30,0xe3,0x32,0x90,0x9e,0x27,0xe0,0xc3,0x94,0xff,0x50,0x05,
57702 -0xe0,0x04,0xf0,0x80,0x24,0x90,0x9e,0x28,0xe0,0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,
57703 -0xf0,0xe4,0x80,0x11,0x90,0x9e,0x29,0xe0,0xc3,0x94,0xff,0x50,0x0c,0xe0,0x04,0xf0,
57704 -0xe4,0x90,0x9e,0x28,0xf0,0x90,0x9e,0x27,0xf0,0x90,0x04,0xfd,0xe0,0x44,0x01,0xf0,
57705 -0x22,0x00,0x6a,0xe7,};
57706 +0x60,0x03,0x02,0x7c,0xe9,0x90,0x9d,0xfb,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,
57707 +0x08,0x7f,0x8c,0x7e,0x08,0x12,0x2b,0x08,0x90,0x9d,0xa7,0x12,0x43,0x53,0x90,0x80,
57708 +0x96,0x12,0x25,0x08,0x7f,0x44,0x7e,0x08,0x12,0x2b,0x08,0x90,0x9d,0xab,0x12,0x43,
57709 +0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x5c,0x7e,0x08,0x12,0x2b,0x08,0x90,0x9d,
57710 +0xaf,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x6c,0x7e,0x0e,0x12,0x2b,
57711 +0x08,0x90,0x9d,0xb3,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x70,0x7e,
57712 +0x0e,0x12,0x2b,0x08,0x90,0x9d,0xb7,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,
57713 +0x7f,0x74,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xbb,0x12,0x43,0x53,0x90,0x80,0x96,
57714 +0x12,0x25,0x08,0x7f,0x78,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xbf,0x12,0x43,0x53,
57715 +0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x7c,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xc3,
57716 +0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x80,0x7e,0x0e,0x12,0x2b,0x08,
57717 +0x90,0x9d,0xc7,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x84,0x7e,0x0e,
57718 +0x12,0x2b,0x08,0x90,0x9d,0xcb,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,
57719 +0x88,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xcf,0x12,0x43,0x53,0x90,0x80,0x96,0x12,
57720 +0x25,0x08,0x7f,0x8c,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xd3,0x12,0x43,0x53,0x90,
57721 +0x80,0x96,0x12,0x25,0x08,0x7f,0xd0,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xd7,0x12,
57722 +0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0xd4,0x7e,0x0e,0x12,0x2b,0x08,0x90,
57723 +0x9d,0xdb,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0xd8,0x7e,0x0e,0x12,
57724 +0x2b,0x08,0x90,0x9d,0xdf,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0xdc,
57725 +0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xe3,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,
57726 +0x08,0x7f,0xe0,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xe7,0x12,0x43,0x53,0x90,0x80,
57727 +0x96,0x12,0x25,0x08,0x7f,0xec,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xeb,0x12,0x43,
57728 +0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x04,0x7e,0x0c,0x12,0x2b,0x08,0x90,0x9d,
57729 +0xef,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x04,0x7e,0x0d,0x12,0x2b,
57730 +0x08,0x90,0x9d,0xf3,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x0c,0x7e,
57731 +0x09,0x12,0x2b,0x08,0x90,0x9d,0xf7,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,
57732 +0x7f,0x04,0x7e,0x08,0x12,0x2b,0x08,0x90,0x9e,0x0f,0x74,0x01,0xf0,0x22,0x90,0x9e,
57733 +0x0f,0xe0,0x64,0x01,0x60,0x02,0x81,0xe9,0x7f,0x8c,0x7e,0x08,0x12,0x22,0x65,0x90,
57734 +0x9d,0xfb,0x12,0x25,0x08,0x7f,0x44,0x7e,0x08,0x12,0x22,0x65,0x90,0x9d,0xa7,0x12,
57735 +0x25,0x08,0x7f,0x5c,0x7e,0x08,0x12,0x22,0x65,0x90,0x9d,0xab,0x12,0x25,0x08,0x7f,
57736 +0x6c,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xaf,0x12,0x25,0x08,0x7f,0x70,0x7e,0x0e,
57737 +0x12,0x22,0x65,0x90,0x9d,0xb3,0x12,0x25,0x08,0x7f,0x74,0x7e,0x0e,0x12,0x22,0x65,
57738 +0x90,0x9d,0xb7,0x12,0x25,0x08,0x7f,0x78,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xbb,
57739 +0x12,0x25,0x08,0x7f,0x7c,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xbf,0x12,0x25,0x08,
57740 +0x7f,0x80,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xc3,0x12,0x25,0x08,0x7f,0x84,0x7e,
57741 +0x0e,0x12,0x22,0x65,0x90,0x9d,0xc7,0x12,0x25,0x08,0x7f,0x88,0x7e,0x0e,0x12,0x22,
57742 +0x65,0x90,0x9d,0xcb,0x12,0x25,0x08,0x7f,0x8c,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,
57743 +0xcf,0x12,0x25,0x08,0x7f,0xd0,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xd3,0x12,0x25,
57744 +0x08,0x7f,0xd4,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xd7,0x12,0x25,0x08,0x7f,0xd8,
57745 +0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xdb,0x12,0x25,0x08,0x7f,0xdc,0x7e,0x0e,0x12,
57746 +0x22,0x65,0x90,0x9d,0xdf,0x12,0x25,0x08,0x7f,0xe0,0x7e,0x0e,0x12,0x22,0x65,0x90,
57747 +0x9d,0xe3,0x12,0x25,0x08,0x7f,0xec,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xe7,0x12,
57748 +0x25,0x08,0x7f,0x04,0x7e,0x0c,0x12,0x22,0x65,0x90,0x9d,0xeb,0x12,0x25,0x08,0x7f,
57749 +0x04,0x7e,0x0d,0x12,0x22,0x65,0x90,0x9d,0xef,0x12,0x25,0x08,0x7f,0x0c,0x7e,0x09,
57750 +0x12,0x22,0x65,0x90,0x9d,0xf3,0x12,0x25,0x08,0x7f,0x04,0x7e,0x08,0x12,0x22,0x65,
57751 +0x90,0x9d,0xf7,0x12,0x25,0x08,0x7f,0x8c,0x7e,0x08,0x12,0x22,0x65,0x90,0x9e,0xa4,
57752 +0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0xed,0x44,0xc0,0xfd,0xec,0x90,0x9e,
57753 +0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,
57754 +0x7f,0x8c,0x7e,0x08,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x00,0x01,0x00,
57755 +0x00,0x7f,0x44,0x7e,0x08,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x00,0xdb,
57756 +0x25,0xa4,0x7f,0x5c,0x7e,0x08,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x20,
57757 +0xdb,0x25,0xa4,0x7f,0x6c,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,
57758 +0x20,0xdb,0x25,0xa4,0x7f,0x70,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,
57759 +0x14,0x04,0x1b,0x25,0xa4,0x7f,0x74,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,
57760 +0x25,0x14,0x04,0x1b,0x25,0xa4,0x7f,0x78,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,
57761 +0x12,0x25,0x14,0x04,0x1b,0x25,0xa4,0x7f,0x7c,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,
57762 +0x96,0x12,0x25,0x14,0x04,0x1b,0x25,0xa4,0x7f,0x80,0x7e,0x0e,0x12,0x2b,0x08,0x90,
57763 +0x80,0x96,0x12,0x25,0x14,0x63,0xdb,0x25,0xa4,0x7f,0x84,0x7e,0x0e,0x12,0x2b,0x08,
57764 +0x90,0x80,0x96,0x12,0x25,0x14,0x04,0x1b,0x25,0xa4,0x7f,0x88,0x7e,0x0e,0x12,0x2b,
57765 +0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x20,0xdb,0x25,0xa4,0x7f,0x8c,0x7e,0x0e,0x12,
57766 +0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x20,0xdb,0x25,0xa4,0x7f,0xd0,0x7e,0x0e,
57767 +0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x20,0xdb,0x25,0xa4,0x7f,0xd4,0x7e,
57768 +0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x20,0xdb,0x25,0xa4,0x7f,0xd8,
57769 +0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x00,0x1b,0x25,0xa4,0x7f,
57770 +0xdc,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x00,0x1b,0x25,0xa4,
57771 +0x7f,0xe0,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x24,0xdb,0x25,
57772 +0xa4,0x7f,0xec,0x7e,0x0e,0x12,0x2b,0x08,0x7f,0x04,0x7e,0x0c,0x12,0x22,0x65,0x90,
57773 +0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0xe4,0xff,0xec,0x90,0x9e,
57774 +0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0xef,0x44,0x11,0xff,0xec,0x90,
57775 +0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,
57776 +0x08,0x7f,0x04,0x7e,0x0c,0x12,0x2b,0x08,0x7f,0x04,0x7e,0x0d,0x12,0x22,0x65,0x90,
57777 +0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0xef,0x54,0xf0,0xff,0xec,
57778 +0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0xef,0x44,0x01,0xff,
57779 +0xec,0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x96,
57780 +0x12,0x25,0x08,0x7f,0x04,0x7e,0x0d,0x12,0x2b,0x08,0x7f,0x0c,0x7e,0x09,0x12,0x22,
57781 +0x65,0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0xe4,0xff,0xec,
57782 +0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0xef,0x44,0x11,0xff,
57783 +0xec,0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x96,
57784 +0x12,0x25,0x08,0x7f,0x0c,0x7e,0x09,0x12,0x2b,0x08,0x7f,0x0c,0x7e,0x09,0x12,0x22,
57785 +0x65,0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0xed,0x54,0x0f,
57786 +0xfd,0xec,0x54,0xf0,0xfc,0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,
57787 +0x53,0xed,0x44,0x10,0xfd,0xec,0x44,0x01,0xfc,0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,
57788 +0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x0c,0x7e,0x09,0x12,
57789 +0x2b,0x08,0x7f,0x04,0x7e,0x08,0x12,0x22,0x65,0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,
57790 +0x9e,0xa4,0x12,0x43,0x53,0xef,0x54,0xf0,0xff,0xec,0x90,0x9e,0xa4,0x12,0x25,0x08,
57791 +0x90,0x9e,0xa4,0x12,0x43,0x53,0xef,0x44,0x01,0xff,0xec,0x90,0x9e,0xa4,0x12,0x25,
57792 +0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x04,0x7e,
57793 +0x08,0x12,0x2b,0x08,0xe4,0x90,0x9e,0x0f,0xf0,0x22,0x90,0x00,0x02,0x12,0x42,0x20,
57794 +0x90,0x9e,0x1e,0xf0,0xe0,0x60,0x04,0xe0,0xf4,0x70,0x21,0xa2,0xaf,0xe4,0x33,0xf5,
57795 +0x59,0xc2,0xaf,0x90,0x00,0x47,0xe0,0x54,0xfb,0xfd,0x7f,0x47,0x12,0x4a,0xc1,0x7d,
57796 +0x40,0x7f,0x01,0x12,0x31,0x66,0xe5,0x59,0x24,0xff,0x92,0xaf,0x22,0xe4,0xfd,0x7f,
57797 +0x45,0x12,0x4a,0xc1,0x90,0x04,0xfd,0xe4,0xf0,0xa3,0xf0,0x90,0x9e,0x1e,0xf0,0x90,
57798 +0x9e,0x24,0xf0,0x90,0x9e,0x27,0xf0,0x90,0x9e,0x25,0xf0,0x90,0x9e,0x28,0xf0,0x90,
57799 +0x9e,0x26,0xf0,0x90,0x9e,0x29,0xf0,0x90,0x9e,0x10,0x04,0xf0,0xe4,0xa3,0xf0,0xa3,
57800 +0xf0,0xa3,0xf0,0x90,0x9e,0x15,0xf0,0x90,0x9e,0x1a,0xf0,0x90,0x9e,0x1c,0xf0,0x90,
57801 +0x9e,0x2e,0xf0,0x90,0x9e,0x1f,0xf0,0x90,0x9e,0x1b,0xf0,0x90,0x9e,0x14,0xf0,0x90,
57802 +0x00,0x51,0xe0,0x44,0xc0,0xfd,0x7f,0x51,0x02,0x4a,0xc1,0x90,0x9e,0x15,0xe0,0xc3,
57803 +0x94,0x14,0x50,0x05,0xe0,0x04,0xf0,0xc1,0x33,0x90,0x9e,0x15,0xe0,0x64,0x14,0x60,
57804 +0x02,0xc1,0x33,0x90,0x9e,0x24,0xe0,0x70,0x25,0x90,0x9e,0x27,0xe0,0x70,0x1f,0x90,
57805 +0x9e,0x25,0xe0,0x70,0x19,0x90,0x9e,0x28,0xe0,0x70,0x13,0x90,0x9e,0x26,0xe0,0x70,
57806 +0x0d,0x90,0x9e,0x29,0xe0,0x70,0x07,0x90,0x04,0xfd,0xe0,0x54,0xfe,0xf0,0x90,0x9e,
57807 +0x24,0xe0,0x90,0x04,0x44,0xf0,0x90,0x9e,0x25,0xe0,0x90,0x04,0x45,0xf0,0x90,0x9e,
57808 +0x26,0xe0,0x90,0x04,0x46,0xf0,0xa3,0xe4,0xf0,0x90,0x9e,0x27,0xe0,0x90,0x04,0x48,
57809 +0xf0,0x90,0x9e,0x28,0xe0,0x90,0x04,0x49,0xf0,0x90,0x9e,0x29,0xe0,0x90,0x04,0x4a,
57810 +0xf0,0xa3,0xe4,0xf0,0x90,0x9e,0x10,0xe0,0x90,0x04,0x4c,0xf0,0x90,0x9e,0x11,0xe0,
57811 +0x90,0x04,0x4d,0xf0,0x90,0x9e,0x12,0xe0,0x90,0x04,0x4e,0xf0,0x90,0x9e,0x13,0xe0,
57812 +0x90,0x04,0x4f,0xf0,0xe4,0x90,0x9e,0x15,0xf0,0x90,0x9e,0x10,0x04,0xf0,0xe4,0xa3,
57813 +0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,0x24,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,
57814 +0xf0,0xa3,0xf0,0x90,0x05,0x60,0xe0,0x90,0x9e,0x34,0xf0,0x90,0x05,0x61,0xe0,0x90,
57815 +0x9e,0x35,0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x36,0xf0,0x90,0x05,0x63,0xe0,0x90,
57816 +0x9e,0x37,0xf0,0x90,0x9e,0x2d,0xe0,0xff,0x90,0x9e,0x37,0xe0,0xfe,0xd3,0x9f,0x50,
57817 +0x0b,0x90,0x9e,0x2d,0xe0,0xc3,0x9e,0xd3,0x94,0x01,0x40,0x11,0x90,0x9e,0x1b,0xe0,
57818 +0xb4,0x01,0x02,0x80,0x03,0x90,0x9e,0x1f,0xe0,0xff,0x12,0x4e,0xd8,0x22,0x90,0x9e,
57819 +0x2e,0xe0,0x64,0x01,0x60,0x08,0x90,0x9e,0x1c,0xe0,0x60,0x02,0xe1,0x55,0x90,0x9e,
57820 +0x10,0xe0,0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,0x3b,0x90,0x9e,0x11,0xe0,
57821 +0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x28,0x90,0x9e,0x12,0xe0,0xc3,
57822 +0x94,0xff,0x50,0x0a,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x11,0xf0,0x80,0x15,0x90,0x9e,
57823 +0x13,0xe0,0xc3,0x94,0xff,0x50,0x10,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x12,0xf0,0x90,
57824 +0x9e,0x11,0xf0,0x90,0x9e,0x10,0xf0,0x90,0x00,0x44,0xe0,0x54,0x0c,0x60,0x76,0xe0,
57825 +0x30,0xe2,0x32,0x90,0x9e,0x24,0xe0,0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,
57826 +0x24,0x90,0x9e,0x25,0xe0,0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x11,
57827 +0x90,0x9e,0x26,0xe0,0xc3,0x94,0xff,0x50,0x0c,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x25,
57828 +0xf0,0x90,0x9e,0x24,0xf0,0x90,0x00,0x44,0xe0,0x30,0xe3,0x32,0x90,0x9e,0x27,0xe0,
57829 +0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,0x24,0x90,0x9e,0x28,0xe0,0xc3,0x94,
57830 +0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x11,0x90,0x9e,0x29,0xe0,0xc3,0x94,0xff,
57831 +0x50,0x0c,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x28,0xf0,0x90,0x9e,0x27,0xf0,0x90,0x04,
57832 +0xfd,0xe0,0x44,0x01,0xf0,0x22,0xf5,0x67,};
57833
57834 -// =================== v80 UMC B Cut COMMON 2011-12-14 =====================
57835 +// =================== v84 UMC B Cut COMMON 2012-04-13 =====================
57836 u8 Rtl8192CUFwUMCBCutImgArray[UMCBCutImgArrayLength] = {
57837 -0xc2,0x88,0x02,0x00,0x50,0x00,0x00,0x00,0x12,0x14,0x16,0x10,0xc0,0x3e,0x01,0x00,
57838 -0x25,0x86,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
57839 +0xc2,0x88,0x02,0x00,0x54,0x00,0x01,0x00,0x04,0x13,0x11,0x08,0x26,0x3d,0x01,0x00,
57840 +0x58,0x97,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
57841 0x02,0x43,0xba,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
57842 -0x00,0x00,0x00,0x02,0x48,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
57843 +0x00,0x00,0x00,0x02,0x50,0xa1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
57844 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
57845 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
57846 -0x00,0x00,0x00,0x02,0x5e,0xff,0x00,0x00,0x00,0x00,0x00,0xa1,0xd4,0x00,0x00,0x00,
57847 +0x00,0x00,0x00,0x02,0x57,0x91,0x00,0x00,0x00,0x00,0x00,0xa1,0xe8,0x00,0x00,0x00,
57848 0x05,0x04,0x03,0x02,0x00,0x03,0x06,0x05,0x04,0x03,0x00,0x04,0x06,0x05,0x04,0x02,
57849 0x00,0x04,0x08,0x07,0x06,0x04,0x00,0x06,0x0a,0x09,0x08,0x06,0x00,0x08,0x0a,0x09,
57850 0x08,0x04,0x00,0x08,0x0a,0x09,0x08,0x02,0x00,0x08,0x0a,0x09,0x08,0x00,0x00,0x08,
57851 @@ -5168,7 +2091,7 @@ u8 Rtl8192CUFwUMCBCutImgArray[UMCBCutImg
57852 0x15,0x82,0x70,0x02,0x15,0x83,0xe0,0xfa,0x38,0xf0,0x22,0xeb,0xf0,0xa3,0xea,0xf0,
57853 0xa3,0xe9,0xf0,0x22,0xd0,0x83,0xd0,0x82,0xf8,0xe4,0x93,0x70,0x12,0x74,0x01,0x93,
57854 0x70,0x0d,0xa3,0xa3,0x93,0xf8,0x74,0x01,0x93,0xf5,0x82,0x88,0x83,0xe4,0x73,0x74,
57855 -0x02,0x93,0x68,0x60,0xef,0xa3,0xa3,0xa3,0x80,0xdf,0x02,0x43,0xf8,0x02,0x50,0x2e,
57856 +0x02,0x93,0x68,0x60,0xef,0xa3,0xa3,0xa3,0x80,0xdf,0x02,0x43,0xf8,0x02,0x48,0x29,
57857 0xe4,0x93,0xa3,0xf8,0xe4,0x93,0xa3,0x40,0x03,0xf6,0x80,0x01,0xf2,0x08,0xdf,0xf4,
57858 0x80,0x29,0xe4,0x93,0xa3,0xf8,0x54,0x07,0x24,0x0c,0xc8,0xc3,0x33,0xc4,0x54,0x0f,
57859 0x44,0x20,0xc8,0x83,0x40,0x04,0xf4,0x56,0x80,0x01,0x46,0xf6,0xdf,0xe4,0x80,0x0b,
57860 @@ -5176,833 +2099,797 @@ u8 Rtl8192CUFwUMCBCutImgArray[UMCBCutImg
57861 0xbc,0xa3,0xff,0x54,0x3f,0x30,0xe5,0x09,0x54,0x1f,0xfe,0xe4,0x93,0xa3,0x60,0x01,
57862 0x0e,0xcf,0x54,0xc0,0x25,0xe0,0x60,0xa8,0x40,0xb8,0xe4,0x93,0xa3,0xfa,0xe4,0x93,
57863 0xa3,0xf8,0xe4,0x93,0xa3,0xc8,0xc5,0x82,0xc8,0xca,0xc5,0x83,0xca,0xf0,0xa3,0xc8,
57864 -0xc5,0x82,0xc8,0xca,0xc5,0x83,0xca,0xdf,0xe9,0xde,0xe7,0x80,0xbe,0x41,0x9e,0x4f,
57865 -0x00,0x41,0x9e,0xad,0x00,0x41,0x9e,0x61,0x80,0x41,0x9e,0x62,0x80,0x41,0x9e,0xaf,
57866 -0x00,0x00,0xf0,0x90,0x9e,0x6b,0xe0,0x90,0x9e,0x87,0xf0,0xe4,0xfb,0xfd,0x7f,0x54,
57867 -0x7e,0x01,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x85,0xeb,0xf0,0xa3,0xe0,
57868 -0xfb,0xa3,0xe0,0xf5,0x44,0xe4,0xf5,0x45,0x12,0x35,0xab,0xd0,0xd0,0x92,0xaf,0x22,
57869 -0x90,0x01,0x5f,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x08,0xf0,0xe4,0x90,0x9e,0x86,0xf0,
57870 -0x90,0x9e,0x69,0xe0,0x90,0x9e,0x87,0xf0,0xe4,0xfb,0xfd,0x7f,0x5c,0x7e,0x01,0x91,
57871 -0x62,0x90,0x01,0x5f,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x02,0xf0,0x90,0x9e,0x70,
57872 -0x14,0xf0,0xe5,0x23,0x54,0x0f,0xc3,0x94,0x0c,0x50,0x02,0xf1,0x2b,0x22,0x8f,0x82,
57873 -0x8e,0x83,0xa3,0xa3,0xa3,0xe4,0xf0,0x22,0xe4,0xf5,0x71,0x7f,0x60,0x7e,0x01,0x80,
57874 -0xed,0x7d,0x01,0xaf,0x24,0xe1,0x2f,0xb1,0xa6,0xbf,0x01,0x0f,0x90,0x9e,0x51,0xe0,
57875 -0xff,0xe4,0xfd,0xf1,0xd0,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0x53,0x23,0xf0,0x43,
57876 -0x23,0x01,0x91,0xfd,0x91,0xfe,0x53,0x23,0xf0,0x43,0x23,0x02,0x22,0x22,0x22,0x22,
57877 -0x22,0x00,0x00,0x02,0x5f,0x91,0x02,0x5f,0x98,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
57878 -0x8b,0x1b,0x8a,0x1c,0x89,0x1d,0x90,0x9e,0x88,0x71,0x8b,0xab,0x1e,0xaa,0x1f,0xa9,
57879 -0x20,0x90,0x9e,0x8b,0x71,0x8b,0xaf,0x21,0x15,0x21,0xef,0x60,0x1b,0x90,0x9e,0x8b,
57880 -0xe4,0x75,0xf0,0x01,0x71,0x74,0x12,0x29,0xd9,0xff,0x90,0x9e,0x88,0xe4,0x75,0xf0,
57881 -0x01,0x71,0x74,0xef,0x51,0x4d,0x80,0xde,0xab,0x1b,0xaa,0x1c,0xa9,0x1d,0xd0,0xd0,
57882 -0x92,0xaf,0x22,0x90,0x06,0xa9,0xe0,0x90,0x9e,0x2f,0xf0,0xe0,0x54,0xc0,0x70,0x08,
57883 -0x53,0x26,0xfe,0x53,0x26,0xfd,0x91,0xd1,0x90,0x9e,0x2f,0xe0,0x30,0xe6,0x13,0x43,
57884 -0x26,0x01,0x90,0x9e,0x73,0xe0,0x64,0x02,0x60,0x04,0x91,0xd7,0x80,0x07,0x91,0x80,
57885 -0x80,0x03,0x53,0x26,0xfe,0x90,0x9e,0x2f,0xe0,0x30,0xe7,0x16,0x43,0x26,0x02,0xe4,
57886 -0x90,0x9e,0x86,0x91,0x52,0x90,0x01,0x57,0x74,0x05,0xf0,0x90,0x9e,0x74,0x74,0x01,
57887 -0xf0,0x22,0x53,0x26,0xfd,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x04,0x1d,
57888 -0xe0,0x60,0x1a,0x90,0x05,0x22,0xe0,0x54,0x90,0x60,0x07,0x90,0x01,0xc6,0xe0,0x44,
57889 -0x40,0xf0,0x90,0x01,0xc7,0xe0,0x30,0xe1,0xe4,0x7f,0x00,0x80,0x02,0x7f,0x01,0xd0,
57890 -0xd0,0x92,0xaf,0x22,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,
57891 -0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,
57892 -0x07,0x90,0x01,0xc4,0x74,0xd4,0xf0,0x74,0x45,0xa3,0xf0,0x53,0x91,0xdf,0x90,0x01,
57893 -0x3c,0xe0,0x55,0x30,0xf5,0x34,0xa3,0xe0,0x55,0x31,0xf5,0x35,0xa3,0xe0,0x55,0x32,
57894 -0xf5,0x36,0xa3,0xe0,0x55,0x33,0xf5,0x37,0xe5,0x34,0x30,0xe0,0x06,0x90,0x01,0x3c,
57895 -0x74,0x01,0xf0,0xe5,0x34,0x30,0xe1,0x09,0x90,0x01,0x3c,0x74,0x02,0xf0,0x12,0x65,
57896 -0xf6,0xe5,0x34,0x30,0xe2,0x38,0x90,0x01,0x3c,0x74,0x04,0xf0,0x90,0x06,0x92,0xe0,
57897 -0x30,0xe0,0x24,0x90,0x9e,0x86,0xe4,0xf0,0x90,0x9e,0x69,0xe0,0x90,0x9e,0x87,0xf0,
57898 -0xe4,0xfb,0xfd,0x7f,0x58,0x7e,0x01,0x91,0x62,0x90,0x01,0x5b,0x74,0x05,0xf0,0x90,
57899 -0x06,0x92,0x74,0x01,0xf0,0x80,0x07,0x90,0x9e,0x71,0xe4,0xf0,0x91,0xd1,0xe5,0x34,
57900 -0x30,0xe3,0x38,0x90,0x01,0x3c,0x74,0x08,0xf0,0x90,0x06,0x92,0xe0,0x30,0xe1,0x24,
57901 -0x90,0x9e,0x86,0xe4,0xf0,0x90,0x9e,0x69,0xe0,0x90,0x9e,0x87,0xf0,0xe4,0xfb,0xfd,
57902 -0x7f,0x5c,0x7e,0x01,0x91,0x62,0x90,0x01,0x5f,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,
57903 -0x02,0xf0,0x80,0x07,0x90,0x9e,0x70,0xe4,0xf0,0x91,0xd1,0xe5,0x34,0x30,0xe4,0x09,
57904 -0x90,0x01,0x3c,0x74,0x10,0xf0,0x12,0x73,0x53,0xe5,0x34,0x30,0xe5,0x09,0x90,0x01,
57905 -0x3c,0x74,0x20,0xf0,0x12,0x52,0x64,0xe5,0x35,0x30,0xe0,0x18,0x90,0x01,0x3d,0x74,
57906 -0x01,0xf0,0x90,0x01,0x2f,0xe0,0x44,0x7f,0xf0,0x90,0x00,0x83,0xe0,0xf5,0x24,0x12,
57907 -0x64,0xd0,0x91,0xd1,0xe5,0x35,0x30,0xe2,0x06,0x90,0x01,0x3d,0x74,0x04,0xf0,0xe5,
57908 -0x36,0x30,0xe0,0x06,0x90,0x01,0x3e,0x74,0x01,0xf0,0xe5,0x36,0x30,0xe1,0x06,0x90,
57909 -0x01,0x3e,0x74,0x02,0xf0,0x74,0xd4,0x04,0x90,0x01,0xc4,0xf0,0x74,0x45,0xa3,0xf0,
57910 -0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,
57911 -0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,0x32,0x7d,0x01,0x7f,0x0c,0x90,
57912 -0x9e,0xa6,0xed,0xf0,0x90,0x9e,0xa5,0xef,0xf0,0x54,0x0f,0xff,0xe5,0x23,0x54,0x0f,
57913 -0x6f,0x60,0x70,0x90,0x9e,0xa5,0xe0,0x30,0xe2,0x2a,0xe5,0x23,0x20,0xe2,0x05,0x7f,
57914 -0x01,0x12,0x63,0xea,0xe5,0x23,0x30,0xe3,0x09,0x90,0x9e,0xa5,0xe0,0x20,0xe3,0x02,
57915 -0x80,0x52,0xe5,0x23,0x20,0xe3,0x4c,0x90,0x9e,0xa5,0xe0,0x30,0xe3,0x45,0xa3,0xe0,
57916 -0xff,0x02,0x5e,0x95,0xe5,0x23,0x54,0x0f,0xff,0xbf,0x0c,0x0f,0x90,0x9e,0xa5,0xe0,
57917 -0x20,0xe3,0x08,0x12,0x62,0xce,0xef,0x60,0x2a,0xf1,0xb4,0xe5,0x23,0x54,0x0f,0xff,
57918 -0xbf,0x04,0x10,0x90,0x9e,0xa5,0xe0,0x20,0xe2,0x09,0x12,0x63,0x17,0xef,0x60,0x13,
57919 -0x12,0x61,0x3a,0xe5,0x23,0x54,0x0f,0xff,0xbf,0x02,0x08,0x12,0x63,0x7a,0xef,0x60,
57920 -0x02,0x91,0xec,0x22,0x90,0x06,0x04,0xe0,0x44,0x40,0xf0,0xe5,0x22,0xb4,0x01,0x05,
57921 -0x7f,0x01,0x12,0x5e,0x5c,0x53,0x23,0xf0,0x43,0x23,0x04,0x22,0xe0,0xff,0x7d,0x01,
57922 -0x90,0x9e,0x99,0xef,0xf0,0xa3,0xed,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xe5,0x25,0x60,
57923 -0x05,0xe4,0xff,0x12,0x61,0x1f,0x90,0x9e,0x99,0xe0,0x30,0xe0,0x09,0x90,0x9e,0x9b,
57924 -0xe4,0xf0,0xa3,0x74,0x80,0xf0,0x90,0x9e,0x99,0xe0,0xff,0xc3,0x13,0x90,0xfd,0x10,
57925 -0xf0,0x90,0x04,0x25,0xef,0xf0,0x90,0x9e,0x9a,0xe0,0x60,0x1f,0xa3,0xa3,0xe0,0xff,
57926 -0x24,0x0f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x80,0xf0,0x74,0x10,0x2f,
57927 -0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x80,0xf0,0x90,0x9e,0x9b,0xa3,0xe0,
57928 -0xff,0xfd,0x24,0x08,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe4,0xf0,0x74,0x09,0x2d,
57929 -0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xf0,0xf0,0x74,0x21,0x2f,0xf5,0x82,
57930 -0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xf7,0xf0,0x90,0x9e,0x9b,0xe0,0xfe,0xa3,0xe0,
57931 -0xff,0x22,0x12,0x45,0xa6,0xbf,0x01,0x10,0x90,0x02,0x09,0xe0,0xff,0x7d,0x01,0x12,
57932 -0x47,0xd0,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,
57933 -0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,
57934 -0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x01,0xc4,0x74,0x79,0xf0,0x74,0x48,0xa3,0xf0,
57935 -0x90,0x01,0x34,0xe0,0x55,0x28,0xf5,0x2c,0x90,0x01,0x36,0xe0,0x55,0x2a,0xf5,0x2e,
57936 -0xa3,0xe0,0x55,0x2b,0xf5,0x2f,0xe5,0x2c,0x20,0xe0,0x02,0x41,0x17,0x90,0x01,0x34,
57937 -0x74,0x01,0xf0,0x85,0xd1,0x08,0x85,0xd2,0x09,0x85,0xd3,0x0a,0x85,0xd4,0x0b,0x85,
57938 -0xd5,0x0c,0x85,0xd6,0x0d,0x85,0xd7,0x0e,0x85,0xd9,0x0f,0xe5,0x0f,0x54,0x40,0xc3,
57939 -0x13,0xff,0xe5,0x0e,0x54,0x20,0x6f,0x70,0x02,0x21,0xc9,0xe5,0x0f,0x30,0xe5,0x02,
57940 -0x21,0xc9,0xe5,0x0d,0x54,0x3f,0xf5,0x4d,0xe5,0x08,0x54,0x3f,0xf5,0x4e,0xe5,0x0c,
57941 -0x54,0x1f,0xff,0xe5,0x4d,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,
57942 -0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x0e,0x54,0x1f,0xff,0xe5,0x4d,0x25,0xe0,0x24,
57943 -0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x4e,
57944 -0xd3,0x94,0x04,0x40,0x03,0x75,0x4e,0x04,0x75,0xf0,0x0a,0xe5,0x4d,0x90,0x90,0x00,
57945 -0x12,0x43,0x5f,0x75,0xf0,0x02,0xe5,0x4e,0x12,0x43,0x5f,0xe0,0xfe,0xa3,0xe0,0xff,
57946 -0xe5,0x0e,0x54,0x1f,0x2f,0xff,0xe4,0x3e,0xfe,0x75,0xf0,0x0a,0xe5,0x4d,0x90,0x90,
57947 -0x00,0x12,0x43,0x5f,0x75,0xf0,0x02,0xe5,0x4e,0x12,0x43,0x5f,0xee,0xf0,0xa3,0xef,
57948 -0xf0,0xe5,0x0f,0x20,0xe6,0x24,0xe5,0x0e,0x54,0x1f,0xff,0xe5,0x4d,0x25,0xe0,0x24,
57949 -0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x0a,
57950 -0x30,0xe7,0x36,0xaf,0x4d,0x12,0x5b,0x68,0x80,0x2f,0xe5,0x0e,0x54,0x1f,0xff,0xe5,
57951 -0x4d,0x25,0xe0,0x24,0x44,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0x8f,0xf0,0x12,
57952 -0x42,0x81,0xe5,0x0a,0x30,0xe7,0x12,0xe5,0x0a,0x54,0x7f,0xfd,0xe5,0x0e,0x54,0x1f,
57953 -0xf5,0x53,0xab,0x4e,0xaf,0x4d,0x12,0x5b,0x05,0xe5,0x25,0x14,0x24,0xfd,0x50,0x02,
57954 -0x80,0x45,0x90,0x9e,0x73,0xe0,0x60,0x37,0x90,0x01,0x5b,0xe4,0xf0,0x90,0x01,0x3c,
57955 -0x74,0x04,0xf0,0x71,0xc4,0xef,0x64,0x01,0x70,0x2d,0x90,0x9e,0x69,0xe0,0xf5,0x44,
57956 -0x75,0x45,0x00,0xe4,0xfb,0xfd,0x7f,0x58,0x7e,0x01,0x12,0x35,0xab,0x90,0x01,0x5b,
57957 -0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x01,0xf0,0x90,0x9e,0x71,0xf0,0x80,0x08,0x71,
57958 -0xc4,0xbf,0x01,0x03,0x12,0x44,0xd1,0xe5,0x2c,0x30,0xe1,0x21,0x90,0x01,0x34,0x74,
57959 -0x02,0xf0,0x85,0xd1,0x13,0x85,0xd2,0x14,0x85,0xd3,0x15,0x85,0xd4,0x16,0x85,0xd5,
57960 -0x17,0x85,0xd6,0x18,0x85,0xd7,0x19,0x85,0xd9,0x1a,0x12,0x5c,0x46,0xe5,0x2c,0x30,
57961 -0xe3,0x06,0x90,0x01,0x34,0x74,0x08,0xf0,0xe5,0x2c,0x30,0xe4,0x09,0x90,0x01,0x34,
57962 -0x74,0x10,0xf0,0x43,0x12,0x10,0xe5,0x2c,0x30,0xe5,0x24,0x90,0x01,0xcf,0xe0,0x30,
57963 -0xe5,0x1d,0xe0,0x54,0xdf,0xf0,0x90,0x01,0x34,0x74,0x20,0xf0,0x75,0xa8,0x00,0x75,
57964 -0xe8,0x00,0xd1,0xdb,0x90,0x00,0x03,0xe0,0x54,0xfb,0xf0,0x71,0xdb,0x80,0xfe,0xe5,
57965 +0xc5,0x82,0xc8,0xca,0xc5,0x83,0xca,0xdf,0xe9,0xde,0xe7,0x80,0xbe,0x41,0x9e,0x77,
57966 +0x00,0x41,0x9e,0xae,0x00,0x41,0x9e,0x54,0x80,0x41,0x9e,0xb0,0x00,0x00,0xf0,0x90,
57967 +0x9e,0x5d,0xe0,0x90,0x9e,0x86,0xf0,0xe4,0xfb,0xfd,0x7f,0x54,0x7e,0x01,0xd3,0x10,
57968 +0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x85,0xe0,0xfb,0xa3,0xe0,0xf5,0x44,0xe4,0xf5,
57969 +0x45,0x12,0x35,0xab,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x01,0x5f,0xe4,0xf0,0x90,0x01,
57970 +0x3c,0x74,0x08,0xf0,0xe4,0x90,0x9e,0x85,0xf0,0x90,0x9e,0x5b,0xe0,0x90,0x9e,0x86,
57971 +0xf0,0xe4,0xfb,0xfd,0x7f,0x5c,0x7e,0x01,0x91,0x5e,0x90,0x01,0x5f,0x74,0x05,0xf0,
57972 +0x90,0x06,0x92,0x74,0x02,0xf0,0x90,0x9e,0x63,0x14,0xf0,0xe5,0x61,0x54,0x0f,0xc3,
57973 +0x94,0x0c,0x50,0x03,0x12,0x54,0xe3,0x22,0x8f,0x82,0x8e,0x83,0xa3,0xa3,0xa3,0xe4,
57974 +0xf0,0x22,0xe4,0xf5,0x65,0x7f,0x60,0x7e,0x01,0x80,0xed,0x7d,0x01,0xaf,0x62,0x02,
57975 +0x54,0xe7,0xb1,0xb0,0xbf,0x01,0x12,0x90,0x9e,0x79,0xe0,0xff,0xe4,0xfd,0xf1,0x79,
57976 +0x12,0x5f,0xf7,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0xb1,0xb0,0xbf,0x01,0x0f,0x90,
57977 +0x02,0x09,0xe0,0xff,0x7d,0x01,0xf1,0x79,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0x22,
57978 +0x22,0x22,0x00,0x02,0x45,0x03,0x02,0x45,0x06,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
57979 +0x8b,0x20,0x8a,0x21,0x89,0x22,0x90,0x9e,0x87,0x71,0x8b,0xab,0x23,0xaa,0x24,0xa9,
57980 +0x25,0x90,0x9e,0x8a,0x71,0x8b,0xaf,0x26,0x15,0x26,0xef,0x60,0x1b,0x90,0x9e,0x8a,
57981 +0xe4,0x75,0xf0,0x01,0x71,0x74,0x12,0x29,0xd9,0xff,0x90,0x9e,0x87,0xe4,0x75,0xf0,
57982 +0x01,0x71,0x74,0xef,0x51,0x4d,0x80,0xde,0xab,0x20,0xaa,0x21,0xa9,0x22,0xd0,0xd0,
57983 +0x92,0xaf,0x22,0x90,0x9e,0x11,0x12,0x2a,0x8b,0x00,0x00,0x00,0x00,0x90,0x06,0xa9,
57984 +0xe0,0x90,0x9e,0x10,0xf0,0xe0,0x54,0xc0,0x70,0x08,0x53,0x64,0xfe,0x53,0x64,0xfd,
57985 +0x91,0xcb,0x90,0x9e,0x10,0xe0,0x30,0xe6,0x13,0x43,0x64,0x01,0x90,0x9e,0x66,0xe0,
57986 +0x64,0x02,0x60,0x04,0x91,0xd2,0x80,0x07,0x91,0x79,0x80,0x03,0x53,0x64,0xfe,0x90,
57987 +0x9e,0x10,0xe0,0x30,0xe7,0x16,0x43,0x64,0x02,0xe4,0x90,0x9e,0x85,0x91,0x4e,0x90,
57988 +0x01,0x57,0x74,0x05,0xf0,0x90,0x9e,0x67,0x74,0x01,0xf0,0x22,0x53,0x64,0xfd,0x22,
57989 +0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x01,0xc4,0x74,0xb0,0xf0,0x74,0x45,0xa3,
57990 +0xf0,0x90,0x04,0x1d,0xe0,0x60,0x1a,0x90,0x05,0x22,0xe0,0x54,0x90,0x60,0x07,0x90,
57991 +0x01,0xc6,0xe0,0x44,0x40,0xf0,0x90,0x01,0xc7,0xe0,0x30,0xe1,0xe4,0x7f,0x00,0x80,
57992 +0x02,0x7f,0x01,0xd0,0xd0,0x92,0xaf,0x22,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,
57993 +0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,
57994 +0x05,0xc0,0x06,0xc0,0x07,0x75,0x13,0x00,0x90,0x01,0xc4,0x74,0xe8,0xf0,0x74,0x45,
57995 +0xa3,0xf0,0x53,0x91,0xdf,0x90,0x01,0x3c,0xe0,0x55,0x30,0xf5,0x34,0xa3,0xe0,0x55,
57996 +0x31,0xf5,0x35,0xa3,0xe0,0x55,0x32,0xf5,0x36,0xa3,0xe0,0x55,0x33,0xf5,0x37,0xe5,
57997 +0x34,0x30,0xe0,0x06,0x90,0x01,0x3c,0x74,0x01,0xf0,0xe5,0x34,0x30,0xe1,0x09,0x90,
57998 +0x01,0x3c,0x74,0x02,0xf0,0x12,0x61,0xc9,0xe5,0x34,0x30,0xe2,0x38,0x90,0x01,0x3c,
57999 +0x74,0x04,0xf0,0x90,0x06,0x92,0xe0,0x30,0xe0,0x24,0x90,0x9e,0x85,0xe4,0xf0,0x90,
58000 +0x9e,0x5b,0xe0,0x90,0x9e,0x86,0xf0,0xe4,0xfb,0xfd,0x7f,0x58,0x7e,0x01,0x91,0x5e,
58001 +0x90,0x01,0x5b,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x01,0xf0,0x80,0x07,0x90,0x9e,
58002 +0x64,0xe4,0xf0,0x91,0xcb,0xe5,0x34,0x30,0xe3,0x38,0x90,0x01,0x3c,0x74,0x08,0xf0,
58003 +0x90,0x06,0x92,0xe0,0x30,0xe1,0x24,0x90,0x9e,0x85,0xe4,0xf0,0x90,0x9e,0x5b,0xe0,
58004 +0x90,0x9e,0x86,0xf0,0xe4,0xfb,0xfd,0x7f,0x5c,0x7e,0x01,0x91,0x5e,0x90,0x01,0x5f,
58005 +0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x02,0xf0,0x80,0x07,0x90,0x9e,0x63,0xe4,0xf0,
58006 +0x91,0xcb,0xe5,0x34,0x30,0xe4,0x09,0x90,0x01,0x3c,0x74,0x10,0xf0,0x12,0x4b,0xfb,
58007 +0xe5,0x34,0x30,0xe5,0x09,0x90,0x01,0x3c,0x74,0x20,0xf0,0x12,0x4c,0x3d,0xe5,0x35,
58008 +0x30,0xe0,0x44,0x90,0x01,0x3d,0x74,0x01,0xf0,0x90,0x01,0x2f,0xe0,0x44,0x7f,0xf0,
58009 +0x90,0x00,0x83,0xe0,0x54,0x0f,0xf5,0x13,0xb4,0x01,0x02,0x80,0x1c,0xe5,0x13,0xb4,
58010 +0x02,0x05,0x90,0x00,0x83,0x80,0x12,0xe5,0x13,0xb4,0x04,0x05,0x90,0x00,0x83,0x80,
58011 +0x08,0xe5,0x13,0xb4,0x0c,0x06,0x90,0x00,0x83,0xe0,0xf5,0x62,0x90,0x01,0xbb,0xe5,
58012 +0x62,0xf0,0x12,0x60,0xc0,0x91,0xcb,0xe5,0x35,0x30,0xe2,0x06,0x90,0x01,0x3d,0x74,
58013 +0x04,0xf0,0xe5,0x35,0x30,0xe4,0x06,0x90,0x01,0x3d,0x74,0x10,0xf0,0xe5,0x36,0x30,
58014 +0xe0,0x06,0x90,0x01,0x3e,0x74,0x01,0xf0,0xe5,0x36,0x30,0xe1,0x06,0x90,0x01,0x3e,
58015 +0x74,0x02,0xf0,0x74,0xe8,0x04,0x90,0x01,0xc4,0xf0,0x74,0x45,0xa3,0xf0,0xd0,0x07,
58016 +0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,
58017 +0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,0x32,0x90,0x9e,0x98,0xef,0xf0,0xa3,0xed,
58018 +0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xe5,0x63,0x60,0x05,0xe4,0xff,0x12,0x54,0x97,0x90,
58019 +0x9e,0x98,0xe0,0x30,0xe0,0x09,0x90,0x9e,0x9a,0xe4,0xf0,0xa3,0x74,0x80,0xf0,0x90,
58020 +0x9e,0x98,0xe0,0xff,0xc3,0x13,0x90,0xfd,0x10,0xf0,0x90,0x04,0x25,0xef,0xf0,0x90,
58021 +0x9e,0x99,0xe0,0x60,0x1f,0xa3,0xa3,0xe0,0xff,0x24,0x0f,0xf5,0x82,0xe4,0x34,0xfc,
58022 +0xf5,0x83,0xe0,0x44,0x80,0xf0,0x74,0x10,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,
58023 +0xe0,0x44,0x80,0xf0,0x90,0x9e,0x9a,0xa3,0xe0,0xff,0xfd,0x24,0x08,0xf5,0x82,0xe4,
58024 +0x34,0xfc,0xf5,0x83,0xe4,0xf0,0x74,0x09,0x2d,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,
58025 +0xe0,0x54,0xf0,0xf0,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,
58026 +0xf7,0xf0,0x90,0x9e,0x9a,0xe0,0xfe,0xa3,0xe0,0xff,0x22,0x75,0x28,0x33,0xe4,0xf5,
58027 +0x29,0x75,0x2a,0x07,0xf5,0x2b,0x90,0x01,0x30,0xe5,0x28,0xf0,0xa3,0xe5,0x29,0xf0,
58028 +0xa3,0xe5,0x2a,0xf0,0xa3,0xe5,0x2b,0xf0,0x22,0xe4,0x90,0x9e,0x16,0xf0,0xa3,0xf0,
58029 +0x75,0x8e,0x02,0xf1,0xa1,0xf1,0xe9,0x90,0x9e,0x7e,0xef,0xf0,0xf1,0xdd,0x90,0x9e,
58030 +0x80,0xef,0xf0,0xf1,0xf6,0x90,0x9e,0x75,0xee,0xf0,0xa3,0xef,0xf0,0xe4,0xf5,0x57,
58031 +0x12,0x6e,0x77,0xf1,0xd4,0x12,0x60,0x4b,0x12,0x32,0x3d,0xf1,0xc9,0x11,0x0b,0x12,
58032 +0x50,0x0e,0xf1,0xcd,0xf1,0xb1,0x12,0x44,0xff,0xf1,0x45,0x90,0x9e,0x18,0xe5,0xd9,
58033 +0xf0,0x11,0xd0,0xc2,0xaf,0x90,0x00,0x80,0xe0,0x44,0x40,0xf0,0xb1,0x45,0x75,0xe8,
58034 +0x03,0x43,0xa8,0x85,0xd2,0xaf,0x90,0x9e,0x16,0xe0,0x64,0x01,0xf0,0x24,0x29,0x90,
58035 +0x01,0xc4,0xf0,0x74,0x48,0xa3,0xf0,0xe5,0x57,0x30,0xe4,0x0a,0xc2,0xaf,0x53,0x57,
58036 +0xef,0xd2,0xaf,0x12,0x58,0x74,0xe5,0x57,0x30,0xe6,0x17,0xc2,0xaf,0x53,0x57,0xbf,
58037 +0xd2,0xaf,0x12,0x67,0xa1,0x90,0x9e,0x43,0xe0,0xff,0x60,0x03,0xb4,0x01,0x03,0x12,
58038 +0x7b,0x49,0x90,0x9e,0x43,0xe0,0x70,0x03,0x12,0x7c,0x4c,0x12,0x73,0x85,0x80,0xb6,
58039 +0x90,0x01,0x3c,0x74,0xff,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x01,0x34,0xf0,0xa3,0xf0,
58040 +0xa3,0xf0,0xa3,0xf0,0xfd,0x7f,0x54,0x31,0x05,0x7d,0xff,0x7f,0x55,0x31,0x05,0x7d,
58041 +0xff,0x7f,0x56,0x31,0x05,0x7d,0xff,0x7f,0x57,0x80,0x0a,0xf0,0x90,0x00,0x45,0xe0,
58042 +0x54,0xfe,0xfd,0x7f,0x45,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x8f,0x82,0x75,0x83,
58043 +0x00,0xed,0xf0,0xb1,0x45,0xd0,0xd0,0x92,0xaf,0x22,0xef,0x14,0x60,0x30,0x14,0x60,
58044 +0x66,0x24,0x02,0x60,0x02,0x21,0xc1,0x90,0x9e,0x3f,0x74,0x02,0xf0,0x90,0x00,0x48,
58045 +0xe0,0x44,0x0c,0xfd,0x7f,0x48,0x31,0x05,0x90,0x00,0x47,0xe0,0x44,0x08,0xfd,0x7f,
58046 +0x47,0x31,0x05,0x90,0x00,0x45,0xe0,0x44,0x10,0xfd,0x7f,0x45,0x80,0x71,0xe4,0x90,
58047 +0x9e,0x3f,0xf0,0x90,0x9e,0x3b,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
58048 +0x80,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x00,0x45,0xe0,0x44,0xef,0xfd,0x7f,0x45,0x31,
58049 +0x05,0x90,0x00,0x45,0xe0,0x54,0xef,0xfd,0x7f,0x45,0x31,0x05,0x90,0x00,0x46,0xe0,
58050 +0x44,0x10,0xfd,0x7f,0x46,0x80,0x38,0x90,0x9e,0x3f,0x74,0x01,0xf0,0x90,0x9e,0x45,
58051 +0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,
58052 +0x90,0x00,0x45,0xe0,0x44,0x20,0xfd,0x7f,0x45,0x31,0x05,0x90,0x00,0x45,0xe0,0x44,
58053 +0x10,0xfd,0x7f,0x45,0x31,0x05,0x90,0x00,0x46,0xe0,0x44,0x10,0xfd,0x7f,0x46,0x31,
58054 +0x05,0x22,0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x9e,0x41,0xf0,0x90,0x00,0x01,0x12,
58055 +0x42,0x20,0x25,0xe0,0x25,0xe0,0x90,0x9e,0x40,0xf0,0x12,0x29,0xd9,0x25,0xe0,0x25,
58056 +0xe0,0x90,0x9e,0x44,0xf0,0x90,0x05,0x60,0xe0,0x90,0x9e,0x4f,0xf0,0x90,0x05,0x61,
58057 +0xe0,0x90,0x9e,0x50,0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x51,0xf0,0x90,0x05,0x63,
58058 +0xe0,0x90,0x9e,0x52,0xf0,0xa2,0xaf,0xe4,0x33,0x90,0x9e,0x24,0xf0,0xc2,0xaf,0x90,
58059 +0x9e,0x40,0xe0,0xff,0x91,0xf0,0x90,0x9e,0x24,0xe0,0x24,0xff,0x92,0xaf,0x90,0x9e,
58060 +0x41,0xe0,0x70,0x02,0x41,0xc8,0x90,0x9e,0x40,0xe0,0x70,0x02,0x41,0xc8,0x90,0x9e,
58061 +0x44,0xe0,0x70,0x02,0x41,0xc8,0xa2,0xaf,0xe4,0x33,0x90,0x9e,0x24,0xf0,0xc2,0xaf,
58062 +0x90,0x9e,0x53,0x74,0x01,0xf0,0x90,0x9e,0x24,0xe0,0x24,0xff,0x92,0xaf,0x11,0xfc,
58063 +0x90,0x00,0x46,0xe0,0x44,0x01,0xfd,0x7f,0x46,0x31,0x05,0x90,0x9e,0x39,0xe0,0x60,
58064 +0x15,0x90,0x9e,0x45,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,
58065 +0x08,0x12,0x2f,0xd9,0x80,0x06,0x90,0x05,0x22,0x74,0x7f,0xf0,0x90,0x00,0x45,0xe0,
58066 +0x54,0xef,0xfd,0x7f,0x45,0x31,0x05,0x90,0x05,0x87,0xe0,0x64,0x80,0xf0,0x90,0x9e,
58067 +0x4f,0xe0,0x90,0x05,0x84,0xf0,0x90,0x9e,0x50,0xe0,0x90,0x05,0x85,0xf0,0x90,0x9e,
58068 +0x51,0xe0,0x90,0x05,0x86,0xf0,0x90,0x9e,0x52,0xe0,0x90,0x05,0x87,0xf0,0xa2,0xaf,
58069 +0xe4,0x33,0x90,0x9e,0x24,0xf0,0xc2,0xaf,0x90,0x01,0x3c,0xe0,0x44,0x20,0xf0,0x7d,
58070 +0x20,0xe4,0xff,0x12,0x37,0x00,0x80,0x2b,0x90,0x9e,0x41,0xe0,0x70,0x2d,0x90,0x9e,
58071 +0x53,0x11,0xfb,0x90,0x00,0x46,0xe0,0x54,0xfe,0xfd,0x7f,0x46,0x31,0x05,0x90,0x05,
58072 +0x22,0xe4,0xf0,0xa2,0xaf,0x33,0x90,0x9e,0x24,0xf0,0xc2,0xaf,0x7d,0x20,0xe4,0xff,
58073 +0x12,0x36,0x92,0x90,0x9e,0x24,0xe0,0x24,0xff,0x92,0xaf,0x22,0x8b,0x14,0x8a,0x15,
58074 +0x89,0x16,0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x9e,0x42,0xf0,0xe0,0x30,0xe0,0x4b,
58075 +0x90,0x9e,0x39,0x74,0x01,0xf0,0x7f,0x80,0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0x3b,
58076 +0x12,0x2a,0x7f,0xab,0x14,0xaa,0x15,0xa9,0x16,0x90,0x00,0x01,0x12,0x42,0x20,0xff,
58077 +0xe4,0xfc,0xfd,0xfe,0x78,0x1a,0x12,0x2a,0x6c,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,
58078 +0x07,0x90,0x9e,0x3b,0x12,0x43,0x53,0xec,0x54,0x03,0xfc,0x12,0x43,0x46,0x90,0x9e,
58079 +0x45,0x12,0x2a,0x7f,0x90,0x05,0x22,0xe4,0xf0,0x80,0x2d,0xe4,0x90,0x9e,0x39,0xf0,
58080 +0x7f,0x80,0x7e,0x08,0x12,0x27,0xde,0xec,0x54,0x03,0xfc,0xec,0x44,0xc0,0xfc,0x90,
58081 +0x9e,0x3b,0x12,0x2a,0x7f,0x90,0x9e,0x3b,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,
58082 +0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,0x42,0xe0,0x30,0xe1,0x19,0x7d,
58083 +0x0c,0x7f,0x47,0x31,0x05,0x90,0x00,0x48,0xe0,0x44,0x0c,0xfd,0x7f,0x48,0x31,0x05,
58084 +0x90,0x00,0x46,0xe0,0x44,0x10,0x80,0x1c,0x90,0x00,0x47,0xe0,0x54,0xf3,0xfd,0x7f,
58085 +0x47,0x31,0x05,0x90,0x00,0x48,0xe0,0x54,0xf3,0xfd,0x7f,0x48,0x31,0x05,0x90,0x00,
58086 +0x46,0xe0,0x54,0xef,0xfd,0x7f,0x46,0x31,0x05,0xe4,0x90,0x9e,0x3f,0xf0,0x22,0x90,
58087 +0x01,0x30,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x01,0x38,0xf0,0xa3,0xf0,
58088 +0xa3,0xf0,0xa3,0xf0,0xfd,0x7f,0x50,0x31,0x05,0xe4,0xfd,0x7f,0x51,0x31,0x05,0xe4,
58089 +0xfd,0x7f,0x52,0x31,0x05,0xe4,0xfd,0x7f,0x53,0x21,0x05,0xe5,0x65,0x64,0x01,0x70,
58090 +0x3b,0xd1,0x85,0xbf,0x01,0x04,0x7f,0x01,0xd1,0x79,0x90,0x00,0x46,0xe0,0x44,0x04,
58091 +0xfd,0x7f,0x46,0x31,0x05,0x90,0x00,0x44,0xe0,0x54,0xfb,0xfd,0x7f,0x44,0x31,0x05,
58092 +0x90,0x00,0x46,0xe0,0x54,0xfb,0xfd,0x7f,0x46,0x31,0x05,0x7f,0x02,0xd1,0xa1,0x8f,
58093 +0x69,0x90,0x01,0xc9,0xe5,0x69,0xf0,0xb4,0x01,0x02,0xd1,0x19,0x22,0x90,0x9e,0x41,
58094 +0xe0,0x64,0x01,0x60,0x02,0x81,0xef,0x90,0x00,0x46,0xe0,0x44,0x01,0xfd,0x7f,0x46,
58095 +0x31,0x05,0x90,0x9e,0x53,0xe0,0x70,0x31,0x90,0x9e,0x39,0xe0,0x60,0x15,0x90,0x9e,
58096 +0x45,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,
58097 +0xd9,0x80,0x06,0x90,0x05,0x22,0x74,0x7f,0xf0,0x90,0x9e,0x40,0xe0,0xff,0x91,0xf0,
58098 +0x90,0x9e,0x53,0x74,0x01,0x11,0xfb,0x80,0x3f,0x90,0x9e,0x53,0xe0,0x64,0x01,0x70,
58099 +0x37,0x90,0x9e,0x44,0xe0,0xff,0x91,0xf0,0xe4,0x90,0x9e,0x53,0xf0,0x90,0x00,0x45,
58100 +0xe0,0x44,0x01,0xfd,0x7f,0x45,0x31,0x05,0x90,0x9e,0x39,0xe0,0x60,0x15,0x90,0x9e,
58101 +0x3b,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,
58102 +0xd9,0x80,0x05,0x90,0x05,0x22,0xe4,0xf0,0x90,0x05,0x87,0xe0,0x64,0x80,0xf0,0x90,
58103 +0x9e,0x4f,0xe0,0x90,0x05,0x84,0xf0,0x90,0x9e,0x50,0xe0,0x90,0x05,0x85,0xf0,0x90,
58104 +0x9e,0x51,0xe0,0x90,0x05,0x86,0xf0,0x90,0x9e,0x52,0xe0,0x90,0x05,0x87,0xf0,0x22,
58105 +0x90,0x05,0x60,0xe0,0x90,0x9e,0x4f,0xf0,0x90,0x05,0x61,0xe0,0x90,0x9e,0x50,0xf0,
58106 +0x90,0x05,0x62,0xe0,0x90,0x9e,0x51,0xf0,0x90,0x05,0x63,0xe0,0x90,0x9e,0x52,0xf0,
58107 +0xc3,0x74,0xff,0x9f,0xfe,0x90,0x9e,0x50,0xe0,0xd3,0x9e,0x40,0x1e,0xe0,0x2f,0xf0,
58108 +0xa3,0xe0,0xb4,0xff,0x0f,0xe4,0xf0,0xa3,0xe0,0xb4,0xff,0x03,0xe4,0xf0,0x22,0x90,
58109 +0x9e,0x52,0x80,0x03,0x90,0x9e,0x51,0xe0,0x04,0xf0,0x22,0x90,0x9e,0x50,0xe0,0x2f,
58110 +0xf0,0x22,0xe0,0x5f,0xf0,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x7f,0x10,0xdf,0xfe,
58111 +0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x2a,0xed,
58112 +0xf0,0x90,0x9e,0x29,0xef,0xf0,0xd3,0x94,0x07,0x50,0x4e,0xa3,0xe0,0x70,0x1a,0x90,
58113 +0x9e,0x29,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,
58114 +0xff,0x90,0x00,0x47,0xe0,0x5f,0xf0,0x80,0x17,0x90,0x9e,0x29,0xe0,0xff,0x74,0x01,
58115 +0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x47,0xe0,0x4f,0xf0,
58116 +0xb1,0x45,0x90,0x9e,0x29,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,
58117 +0xd8,0xfc,0xf4,0xff,0x90,0x00,0x46,0x80,0x59,0x90,0x9e,0x29,0xe0,0x24,0xf8,0xf0,
58118 +0xa3,0xe0,0x70,0x1d,0x90,0x9e,0x29,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,
58119 +0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0x80,
58120 +0x1a,0x90,0x9e,0x29,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,
58121 +0xfc,0xc4,0x54,0xf0,0xff,0x90,0x00,0x43,0xe0,0x4f,0xf0,0xb1,0x45,0x90,0x9e,0x29,
58122 +0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,
58123 +0x00,0x43,0xb1,0x42,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x00,0x49,0xe0,0x90,0x9e,0xb1,
58124 +0xf0,0xe0,0x54,0x0f,0xf0,0x44,0xf0,0xfd,0x7f,0x49,0x31,0x05,0x90,0x9e,0xb1,0xe0,
58125 +0x44,0xb0,0xfd,0x7f,0x49,0x21,0x05,0x90,0x9e,0x27,0xee,0xf0,0xa3,0xef,0xf0,0x75,
58126 +0x65,0x01,0x8e,0x66,0xf5,0x67,0xe4,0xfd,0x7f,0x0b,0xb1,0x55,0xe4,0xfd,0x7f,0x02,
58127 +0xb1,0x55,0xd1,0x85,0xe4,0xff,0xd1,0x79,0xe4,0xf5,0x69,0x90,0x01,0xc9,0xe5,0x69,
58128 +0xf0,0x90,0x9e,0x27,0xe0,0xfc,0xa3,0xe0,0xfd,0xec,0xfb,0x8d,0x44,0xe4,0xf5,0x45,
58129 +0x7d,0x01,0x7f,0x60,0x7e,0x01,0x02,0x35,0xab,0x90,0x01,0xca,0xe5,0x68,0xf0,0xef,
58130 +0x60,0x02,0xd1,0x19,0x22,0x7f,0x0b,0xd1,0xa1,0xef,0x65,0x68,0x60,0x10,0xe5,0x68,
58131 +0xb4,0x01,0x05,0xe4,0xf5,0x68,0x80,0x03,0x75,0x68,0x01,0x7f,0x01,0x22,0x7f,0x00,
58132 +0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0xb2,0xef,0xf0,0xd3,0x94,0x07,
58133 +0x50,0x43,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,
58134 +0xff,0x90,0x00,0x46,0xb1,0x42,0x90,0x9e,0xb2,0xe0,0xfd,0x74,0x01,0x7e,0x00,0xa8,
58135 +0x05,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,0x44,0xe0,
58136 +0xfb,0xe4,0xfe,0xef,0x5b,0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,
58137 +0xd8,0xf8,0xff,0x80,0x4b,0x90,0x9e,0xb2,0xe0,0x24,0xf8,0xf0,0xe0,0xff,0x74,0x01,
58138 +0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,
58139 +0xf0,0xb1,0x45,0x90,0x9e,0xb2,0xe0,0xfd,0x74,0x01,0x7e,0x00,0xa8,0x05,0x08,0x80,
58140 +0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,0x42,0xe0,0xfb,0xe4,0xfe,
58141 +0xef,0x5b,0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,0xd8,0xf8,0xff,
58142 +0xd0,0xd0,0x92,0xaf,0x22,0xe4,0xfd,0x7f,0x45,0x31,0x05,0x90,0x04,0xfd,0xe4,0xf0,
58143 +0xa3,0xf0,0x90,0x9e,0x43,0xf0,0x90,0x9e,0x49,0xf0,0x90,0x9e,0x4c,0xf0,0x90,0x9e,
58144 +0x4a,0xf0,0x90,0x9e,0x4d,0xf0,0x90,0x9e,0x4b,0xf0,0x90,0x9e,0x4e,0xf0,0x90,0x9e,
58145 +0x35,0x04,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,0x3a,0xf0,0x90,0x9e,
58146 +0x3f,0xf0,0x90,0x9e,0x41,0xf0,0x90,0x9e,0x53,0xf0,0x90,0x9e,0x44,0xf0,0x90,0x9e,
58147 +0x40,0xf0,0x90,0x9e,0x39,0xf0,0x90,0x00,0x51,0xe0,0x44,0xc0,0xfd,0x7f,0x51,0x21,
58148 +0x05,0xe4,0x90,0x9e,0x7d,0xf0,0x90,0x00,0x80,0xe0,0x44,0x80,0xfd,0x7f,0x80,0x21,
58149 +0x05,0x75,0x30,0x1f,0x75,0x31,0x01,0xe4,0xf5,0x32,0x90,0x01,0x38,0xe5,0x30,0xf0,
58150 +0xa3,0xe5,0x31,0xf0,0xa3,0xe5,0x32,0xf0,0x22,0xe4,0xf5,0x68,0x22,0x90,0x01,0x64,
58151 +0x74,0xa0,0xf0,0x22,0x90,0x9e,0x80,0xe0,0x90,0x9e,0x0f,0xf0,0x22,0x90,0x00,0xf3,
58152 +0xe0,0x7f,0x00,0x30,0xe3,0x02,0x7f,0x01,0x22,0x90,0x00,0x02,0xe0,0x54,0xe0,0x7f,
58153 +0x01,0x60,0x02,0x7f,0x00,0x22,0x90,0x9e,0x80,0xe0,0xb4,0x01,0x0c,0x90,0x00,0xf2,
58154 +0xe0,0x30,0xe7,0x05,0x7e,0xfd,0x7f,0x33,0x22,0x7e,0xfd,0x7f,0x2f,0x22,0x90,0x00,
58155 +0xf3,0xe0,0x30,0xe2,0x0d,0x90,0x05,0x41,0x74,0x10,0xf0,0x90,0x05,0x5a,0xf0,0xa3,
58156 +0xe4,0xf0,0x22,0x90,0x01,0x02,0xe0,0x54,0x03,0xff,0xe0,0x54,0x0c,0x13,0x13,0x54,
58157 +0x3f,0xfe,0xef,0x64,0x01,0x60,0x04,0xef,0xb4,0x03,0x10,0x90,0x9e,0x10,0x74,0x01,
58158 +0xf0,0xa3,0x74,0x37,0xf0,0xa3,0x74,0x01,0xf0,0x80,0x1a,0xee,0x64,0x01,0x60,0x07,
58159 +0xaf,0x06,0xee,0x64,0x03,0x70,0x49,0x90,0x9e,0x10,0x74,0x01,0xf0,0xa3,0x74,0x3d,
58160 +0xf0,0xa3,0x74,0x40,0xf0,0x90,0x9e,0x10,0xe0,0xfe,0xa3,0xe0,0xff,0xf5,0x82,0x8e,
58161 +0x83,0xe0,0xfd,0x90,0x9e,0x12,0xe0,0xfc,0xed,0x5c,0x60,0x0c,0x8f,0x82,0x8e,0x83,
58162 +0xec,0xf0,0xe4,0x90,0x9e,0x77,0xf0,0x22,0x90,0x9e,0x77,0xe0,0x04,0xf0,0xe0,0xc3,
58163 +0x94,0x0a,0x40,0x0c,0xe4,0xf0,0x90,0x04,0x19,0xe0,0x30,0xe0,0x03,0x12,0x44,0xea,
58164 +0x22,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,
58165 +0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x01,
58166 +0xc4,0x74,0xa1,0xf0,0x74,0x50,0xa3,0xf0,0x90,0x01,0x34,0xe0,0x55,0x28,0xf5,0x2c,
58167 +0xa3,0xe0,0x55,0x29,0xf5,0x2d,0xa3,0xe0,0x55,0x2a,0xf5,0x2e,0xa3,0xe0,0x55,0x2b,
58168 +0xf5,0x2f,0xe5,0x2c,0x20,0xe0,0x02,0x41,0x46,0x90,0x01,0x34,0x74,0x01,0xf0,0x85,
58169 +0xd1,0x4d,0x85,0xd2,0x4e,0x85,0xd3,0x4f,0x85,0xd4,0x50,0x85,0xd5,0x51,0x85,0xd6,
58170 +0x52,0x85,0xd7,0x53,0x85,0xd9,0x54,0xe5,0x54,0x54,0x40,0xc3,0x13,0xff,0xe5,0x53,
58171 +0x54,0x20,0x6f,0x70,0x02,0x21,0xf5,0xe5,0x54,0x30,0xe5,0x02,0x21,0xf5,0xe5,0x52,
58172 +0x54,0x3f,0xf5,0x08,0xe5,0x4d,0x54,0x3f,0xf5,0x09,0xe5,0x51,0x54,0x1f,0xff,0xe5,
58173 +0x08,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0x8f,0xf0,0x12,
58174 +0x42,0x81,0xe5,0x53,0x54,0x1f,0xff,0xe5,0x08,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,
58175 +0x34,0x93,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x09,0xd3,0x94,0x04,0x40,
58176 +0x03,0x75,0x09,0x04,0x75,0xf0,0x0a,0xe5,0x08,0x90,0x90,0x00,0x12,0x43,0x5f,0x75,
58177 +0xf0,0x02,0xe5,0x09,0x12,0x43,0x5f,0xe0,0xfe,0xa3,0xe0,0xff,0xe5,0x53,0x54,0x1f,
58178 +0x2f,0xff,0xe4,0x3e,0xfe,0x75,0xf0,0x0a,0xe5,0x08,0x90,0x90,0x00,0x12,0x43,0x5f,
58179 +0x75,0xf0,0x02,0xe5,0x09,0x12,0x43,0x5f,0xee,0xf0,0xa3,0xef,0xf0,0xe5,0x54,0x20,
58180 +0xe6,0x24,0xe5,0x53,0x54,0x1f,0xff,0xe5,0x08,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,
58181 +0x34,0x98,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x4f,0x30,0xe7,0x36,0xaf,
58182 +0x08,0x12,0x63,0x51,0x80,0x2f,0xe5,0x53,0x54,0x1f,0xff,0xe5,0x08,0x25,0xe0,0x24,
58183 +0x44,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x4f,
58184 +0x30,0xe7,0x12,0xe5,0x4f,0x54,0x7f,0xfd,0xe5,0x53,0x54,0x1f,0xf5,0x0d,0xab,0x09,
58185 +0xaf,0x08,0x12,0x62,0xee,0xe5,0x63,0x14,0x24,0xfd,0x50,0x02,0x80,0x48,0x90,0x9e,
58186 +0x66,0xe0,0x60,0x3a,0x90,0x01,0x5b,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x04,0xf0,0x71,
58187 +0xc3,0xef,0x64,0x01,0x70,0x30,0x90,0x9e,0x85,0xf0,0x90,0x9e,0x5b,0xe0,0x90,0x9e,
58188 +0x86,0xf0,0xe4,0xfb,0xfd,0x7f,0x58,0x7e,0x01,0x12,0x44,0x5e,0x90,0x01,0x5b,0x74,
58189 +0x05,0xf0,0x90,0x06,0x92,0x74,0x01,0xf0,0x90,0x9e,0x64,0xf0,0x80,0x08,0x71,0xc3,
58190 +0xbf,0x01,0x03,0x12,0x44,0xcb,0xe5,0x2c,0x30,0xe1,0x20,0x90,0x01,0x34,0x74,0x02,
58191 +0xf0,0x85,0xd1,0x58,0x85,0xd2,0x59,0x85,0xd3,0x5a,0x85,0xd4,0x5b,0x85,0xd5,0x5c,
58192 +0x85,0xd6,0x5d,0x85,0xd7,0x5e,0x85,0xd9,0x5f,0x71,0xd2,0xe5,0x2c,0x30,0xe3,0x06,
58193 +0x90,0x01,0x34,0x74,0x08,0xf0,0xe5,0x2c,0x30,0xe4,0x09,0x90,0x01,0x34,0x74,0x10,
58194 +0xf0,0x43,0x57,0x10,0xe5,0x2c,0x30,0xe5,0x26,0x90,0x01,0xcf,0xe0,0x30,0xe5,0x1f,
58195 +0xe0,0x54,0xdf,0xf0,0x90,0x01,0x34,0x74,0x20,0xf0,0x75,0xa8,0x00,0x75,0xe8,0x00,
58196 +0x12,0x4b,0xcf,0x90,0x00,0x03,0xe0,0x54,0xfb,0xf0,0x12,0x4d,0x45,0x80,0xfe,0xe5,
58197 0x2c,0x30,0xe6,0x06,0x90,0x01,0x34,0x74,0x40,0xf0,0xe5,0x2e,0x30,0xe0,0x12,0x90,
58198 -0x9e,0x5f,0x74,0x01,0xf0,0x90,0x01,0x36,0xf0,0x12,0x65,0x90,0x90,0x9e,0x5f,0xe4,
58199 -0xf0,0xe5,0x2e,0x30,0xe1,0x3b,0x90,0x01,0x36,0x74,0x02,0xf0,0x43,0x12,0x40,0x90,
58200 -0x01,0x02,0xe0,0x54,0x03,0x64,0x01,0x70,0x28,0x90,0x01,0x37,0xe0,0x30,0xe0,0x0a,
58201 -0x74,0x01,0xf0,0x90,0x9e,0x4f,0xe4,0xf0,0x80,0x17,0x90,0x9e,0x4f,0xe0,0x04,0xf0,
58202 -0xe0,0xc3,0x94,0x0a,0x40,0x0b,0xe4,0xf0,0x90,0x04,0x19,0xe0,0x30,0xe0,0x02,0x11,
58203 -0x62,0xe5,0x2e,0x30,0xe2,0x09,0x90,0x01,0x36,0x74,0x04,0xf0,0x12,0x65,0x28,0xe5,
58204 -0x2e,0x30,0xe3,0x28,0x90,0x01,0x36,0x74,0x08,0xf0,0xe5,0x22,0x64,0x01,0x70,0x1c,
58205 -0xe5,0x25,0x60,0x18,0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,
58206 -0x9e,0x86,0xe4,0x12,0x44,0x52,0x90,0x01,0x57,0x74,0x05,0xf0,0xe5,0x2e,0x30,0xe4,
58207 -0x2b,0x90,0x01,0x36,0x74,0x10,0xf0,0xe5,0x22,0xb4,0x01,0x20,0xe5,0x25,0x60,0x1c,
58208 -0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,0x9e,0x74,0xe4,0xf0,
58209 -0x53,0x26,0xfd,0xe5,0x26,0x54,0x07,0x70,0x03,0x12,0x44,0xd1,0xe5,0x2e,0x30,0xe5,
58210 -0x1f,0x90,0x01,0x36,0x74,0x20,0xf0,0xe5,0x22,0xb4,0x01,0x14,0xe5,0x25,0x60,0x10,
58211 -0x90,0x9e,0x73,0xe0,0x64,0x02,0x60,0x05,0x12,0x44,0xd7,0x80,0x03,0x12,0x44,0x80,
58212 -0xe5,0x2e,0x30,0xe6,0x1b,0x90,0x01,0x36,0x74,0x40,0xf0,0xe5,0x22,0xb4,0x01,0x10,
58213 -0xe5,0x25,0x60,0x0c,0x53,0x26,0xfe,0xe5,0x26,0x54,0x07,0x70,0x03,0x12,0x44,0xd1,
58214 -0xe5,0x2f,0x30,0xe1,0x09,0x90,0x01,0x37,0x74,0x02,0xf0,0x12,0x61,0x92,0x74,0x79,
58215 -0x04,0x90,0x01,0xc4,0xf0,0x74,0x48,0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,
58216 +0x9e,0x7f,0x74,0x01,0xf0,0x90,0x01,0x36,0xf0,0x12,0x61,0x4e,0x90,0x9e,0x7f,0xe4,
58217 +0xf0,0xe5,0x2e,0x30,0xe1,0x0b,0x90,0x01,0x36,0x74,0x02,0xf0,0x43,0x57,0x40,0x11,
58218 +0x23,0xe5,0x2e,0x30,0xe2,0x09,0x90,0x01,0x36,0x74,0x04,0xf0,0x12,0x60,0xdf,0xe5,
58219 +0x2e,0x30,0xe3,0x28,0x90,0x01,0x36,0x74,0x08,0xf0,0xe5,0x60,0x64,0x01,0x70,0x1c,
58220 +0xe5,0x63,0x60,0x18,0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,
58221 +0x9e,0x85,0xe4,0x12,0x44,0x4e,0x90,0x01,0x57,0x74,0x05,0xf0,0xe5,0x2e,0x30,0xe4,
58222 +0x2b,0x90,0x01,0x36,0x74,0x10,0xf0,0xe5,0x60,0xb4,0x01,0x20,0xe5,0x63,0x60,0x1c,
58223 +0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,0x9e,0x67,0xe4,0xf0,
58224 +0x53,0x64,0xfd,0xe5,0x64,0x54,0x07,0x70,0x03,0x12,0x44,0xcb,0xe5,0x2e,0x30,0xe5,
58225 +0x1f,0x90,0x01,0x36,0x74,0x20,0xf0,0xe5,0x60,0xb4,0x01,0x14,0xe5,0x63,0x60,0x10,
58226 +0x90,0x9e,0x66,0xe0,0x64,0x02,0x60,0x05,0x12,0x44,0xd2,0x80,0x03,0x12,0x44,0x79,
58227 +0xe5,0x2e,0x30,0xe6,0x1b,0x90,0x01,0x36,0x74,0x40,0xf0,0xe5,0x60,0xb4,0x01,0x10,
58228 +0xe5,0x63,0x60,0x0c,0x53,0x64,0xfe,0xe5,0x64,0x54,0x07,0x70,0x03,0x12,0x44,0xcb,
58229 +0xe5,0x2f,0x30,0xe1,0x08,0x90,0x01,0x37,0x74,0x02,0xf0,0x91,0x64,0x74,0xa1,0x04,
58230 +0x90,0x01,0xc4,0xf0,0x74,0x50,0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,
58231 +0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,
58232 +0xd0,0xe0,0x32,0x90,0x04,0x1b,0xe0,0x54,0x7f,0x64,0x7f,0x7f,0x01,0x60,0x02,0x7f,
58233 +0x00,0x22,0x90,0x9e,0x10,0xe0,0x54,0xf0,0x44,0x03,0xf0,0x54,0x0f,0x44,0x80,0xf0,
58234 +0x7b,0x00,0x7a,0x00,0x79,0x58,0x90,0x9e,0x90,0x12,0x43,0x8b,0x0b,0x7a,0x9e,0x79,
58235 +0x10,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x8d,0x12,0x43,0x8b,0x90,0x9e,
58236 +0xb0,0xe0,0xff,0x04,0xf0,0x90,0x00,0x01,0xef,0x12,0x42,0x5f,0x7f,0xaf,0x7e,0x01,
58237 +0x12,0x71,0x7a,0xef,0x60,0x49,0x90,0x9e,0x8d,0x12,0x43,0x6b,0x8b,0x23,0x8a,0x24,
58238 +0x89,0x25,0x75,0x26,0x02,0x7b,0x01,0x7a,0x01,0x79,0xa0,0x12,0x45,0x09,0x90,0x9e,
58239 +0x90,0x12,0x43,0x6b,0x8b,0x23,0x8a,0x24,0x89,0x25,0x90,0x9e,0x8d,0x12,0x43,0x6b,
58240 +0x12,0x29,0xd9,0xff,0xc4,0x54,0x0f,0xf5,0x26,0x7b,0x01,0x7a,0x01,0x79,0xa2,0x12,
58241 +0x45,0x09,0x90,0x01,0xaf,0x74,0xff,0xf0,0x90,0x01,0xcb,0xe0,0x64,0x80,0xf0,0xd0,
58242 +0xd0,0x92,0xaf,0x22,0x90,0x9e,0xa0,0x12,0x2a,0x8b,0x00,0x00,0x00,0x00,0xe5,0x63,
58243 +0x14,0x24,0xfd,0x50,0x02,0x80,0x1f,0x90,0x9e,0x66,0xe0,0x60,0x06,0x7d,0x01,0x7f,
58244 +0x0c,0x80,0x0d,0xe5,0x61,0x54,0x0f,0xc3,0x94,0x04,0x50,0x06,0x7d,0x01,0x7f,0x04,
58245 +0x91,0xe7,0xe4,0xff,0x91,0x97,0x22,0xef,0x60,0x0b,0x90,0x9e,0x80,0xe0,0xb4,0x01,
58246 +0x10,0xe4,0xff,0x80,0x09,0x90,0x9e,0x80,0xe0,0xb4,0x01,0x05,0x7f,0x01,0x12,0x75,
58247 +0x92,0x22,0x90,0x01,0x37,0x74,0x02,0xf0,0x90,0x05,0x22,0x74,0xff,0xf0,0x12,0x74,
58248 +0x12,0xef,0x70,0x06,0x90,0x01,0xc8,0x74,0xfd,0xf0,0x7d,0x02,0x7f,0x03,0x12,0x36,
58249 +0xe6,0xe5,0x63,0x60,0x04,0x7f,0x01,0x91,0x97,0x12,0x74,0xc8,0x53,0x61,0xf0,0x43,
58250 +0x61,0x02,0x22,0x7d,0x01,0x7f,0x0c,0x8f,0x6a,0x8d,0x6b,0xe5,0x6a,0x54,0x0f,0xff,
58251 +0xe5,0x61,0x54,0x0f,0x6f,0x60,0x65,0xe5,0x6a,0x30,0xe2,0x28,0xe5,0x61,0x20,0xe2,
58252 +0x04,0x7f,0x01,0xd1,0xc2,0xe5,0x61,0x30,0xe3,0x0c,0xe5,0x6a,0x20,0xe3,0x07,0xb1,
58253 +0x5d,0xef,0x60,0x48,0xa1,0xa5,0xe5,0x61,0x20,0xe3,0x41,0xe5,0x6a,0x30,0xe3,0x3c,
58254 +0xaf,0x6b,0xc1,0xdc,0xe5,0x61,0x54,0x0f,0xff,0xbf,0x0c,0x0c,0xe5,0x6a,0x20,0xe3,
58255 +0x07,0xb1,0x5d,0xef,0x60,0x26,0xb1,0xa5,0xe5,0x61,0x54,0x0f,0xff,0xbf,0x04,0x0c,
58256 +0xe5,0x6a,0x20,0xe2,0x07,0xf1,0x21,0xef,0x60,0x12,0x91,0xb2,0xe5,0x61,0x54,0x0f,
58257 +0xff,0xbf,0x02,0x08,0x12,0x60,0xbd,0xef,0x60,0x02,0xd1,0xaf,0x22,0x71,0xc3,0xef,
58258 +0x64,0x01,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,0xf0,0x80,0x30,0x90,0x9e,0x64,0xe0,
58259 +0x60,0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x22,0x90,0x9e,0x63,0xe0,0x60,0x08,
58260 +0x90,0x01,0xb9,0x74,0x04,0xf0,0x80,0x14,0xe5,0x62,0x54,0x0f,0xd3,0x94,0x04,0x40,
58261 +0x08,0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,0x03,0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,
58262 +0x08,0xf0,0x7f,0x00,0x22,0x90,0x06,0x04,0xe0,0x44,0x40,0xf0,0xe5,0x60,0xb4,0x01,
58263 +0x04,0x7f,0x01,0xd1,0xf6,0x53,0x61,0xf0,0x43,0x61,0x04,0x22,0xef,0x64,0x01,0x70,
58264 +0x2e,0x7d,0x78,0x7f,0x02,0x12,0x36,0x75,0x7d,0x02,0x7f,0x03,0x12,0x36,0x75,0x90,
58265 +0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x91,0xe3,0xe4,0xff,0x91,0x97,
58266 +0x90,0x06,0x04,0xe0,0x54,0x7f,0xf0,0x90,0x06,0x0a,0xe0,0x54,0xf8,0xf0,0x22,0x90,
58267 +0x01,0x36,0x74,0x7b,0xf0,0xa3,0x74,0x02,0xf0,0x7d,0x7b,0xff,0x12,0x36,0xe6,0x7d,
58268 +0x02,0x7f,0x03,0x12,0x36,0xe6,0x90,0x06,0x04,0xe0,0x44,0x80,0xf0,0x90,0x06,0x0a,
58269 +0xe0,0x44,0x07,0xf0,0x12,0x62,0x4c,0xe5,0x60,0x20,0xe0,0x05,0xe4,0x90,0x9e,0x58,
58270 +0xf0,0x22,0x8b,0x14,0x8a,0x15,0x89,0x16,0x12,0x60,0xb1,0xab,0x14,0xaa,0x15,0xa9,
58271 +0x16,0x12,0x29,0xd9,0xf5,0x63,0x14,0x60,0x0e,0x14,0x60,0x1e,0x14,0x60,0x2f,0x24,
58272 +0x03,0x70,0x40,0x7f,0x01,0x80,0x3a,0xab,0x14,0xaa,0x15,0xa9,0x16,0x90,0x00,0x02,
58273 +0x12,0x42,0x20,0xfd,0xe4,0xff,0xd1,0x84,0x80,0x27,0xab,0x14,0xaa,0x15,0xa9,0x16,
58274 +0x90,0x00,0x02,0x12,0x42,0x20,0xfd,0x7f,0x01,0xd1,0x84,0x1f,0x80,0x13,0xab,0x14,
58275 +0xaa,0x15,0xa9,0x16,0x90,0x00,0x02,0x12,0x42,0x20,0xfd,0x7f,0x02,0xd1,0x84,0xe4,
58276 +0xff,0xb1,0xbc,0x22,0xef,0x24,0xfe,0x60,0x0b,0x04,0x70,0x22,0x90,0x9e,0x65,0x74,
58277 +0x01,0xf0,0x80,0x16,0xed,0x70,0x0a,0x90,0x9e,0x62,0xe0,0x90,0x9e,0x65,0xf0,0x80,
58278 +0x05,0x90,0x9e,0x65,0xed,0xf0,0x90,0x9e,0x65,0xe0,0x90,0x9e,0x56,0xf0,0x22,0x53,
58279 +0x61,0xf0,0x43,0x61,0x01,0x12,0x45,0x00,0x12,0x45,0x01,0x53,0x61,0xf0,0x43,0x61,
58280 +0x02,0x22,0x90,0x9e,0xaf,0xef,0xf0,0x12,0x74,0x53,0x90,0x9e,0xaf,0xe0,0x60,0x05,
58281 +0x90,0x05,0x22,0xe4,0xf0,0x53,0x61,0xf0,0x43,0x61,0x04,0x22,0x90,0x06,0x04,0xe0,
58282 +0x54,0xbf,0xf0,0xef,0x60,0x09,0xe5,0x60,0xb4,0x01,0x04,0xe4,0xff,0xd1,0xf6,0x53,
58283 +0x61,0xf0,0x43,0x61,0x0c,0x22,0x8f,0x27,0x12,0x45,0xb0,0xbf,0x01,0x22,0x90,0x9e,
58284 +0x7a,0xe0,0xff,0x7d,0x01,0x12,0x47,0x79,0xab,0x07,0xaa,0x06,0xad,0x03,0xac,0x02,
58285 +0xaf,0x27,0x12,0x60,0x2a,0xaf,0x03,0x12,0x5f,0xf7,0x90,0x04,0x1f,0x74,0x20,0xf0,
58286 +0x22,0x71,0xc3,0xef,0x64,0x01,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,0xf0,0x80,0x58,
58287 +0xe5,0x64,0x54,0x03,0x60,0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x4a,0xe5,0x62,
58288 +0x54,0x0f,0xd3,0x94,0x02,0x40,0x08,0x90,0x01,0xb9,0x74,0x04,0xf0,0x80,0x39,0xe5,
58289 +0x64,0x30,0xe2,0x08,0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,0x2c,0xe5,0x64,0x30,0xe4,
58290 +0x08,0x90,0x01,0xb9,0x74,0x10,0xf0,0x80,0x1f,0x90,0x9e,0x58,0xe0,0x60,0x08,0x90,
58291 +0x01,0xb9,0x74,0x20,0xf0,0x80,0x11,0x90,0x9e,0x5e,0xe0,0x60,0x08,0x90,0x01,0xb9,
58292 +0x74,0x80,0xf0,0x80,0x03,0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,0x04,0xf0,0x7f,0x00,
58293 +0x22,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,
58294 +0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x01,
58295 +0xc4,0x74,0x91,0xf0,0x74,0x57,0xa3,0xf0,0x53,0x91,0xef,0x90,0x00,0x51,0xe0,0xff,
58296 +0x90,0x00,0x55,0xe0,0x5f,0xf5,0x3d,0x90,0x00,0x52,0xe0,0xff,0x90,0x00,0x56,0xe0,
58297 +0x5f,0xf5,0x3e,0xe5,0x3d,0x30,0xe4,0x06,0x90,0x00,0x55,0x74,0x10,0xf0,0xe5,0x3d,
58298 +0x30,0xe5,0x06,0x90,0x00,0x55,0x74,0x20,0xf0,0xe5,0x3d,0x30,0xe6,0x1b,0x90,0x00,
58299 +0x55,0x74,0x40,0xf0,0x90,0x9e,0x42,0xe0,0x54,0x03,0xff,0xbf,0x03,0x0b,0x90,0x9e,
58300 +0x3f,0xe0,0x60,0x05,0x7f,0x01,0x12,0x49,0x1a,0xe5,0x3d,0x30,0xe7,0x15,0x90,0x00,
58301 +0x55,0x74,0x80,0xf0,0x90,0x9e,0x42,0xe0,0x54,0x03,0xff,0xbf,0x03,0x05,0x7f,0x02,
58302 +0x12,0x49,0x1a,0xe5,0x3e,0x30,0xe0,0x06,0x90,0x00,0x56,0x74,0x01,0xf0,0xe5,0x3e,
58303 +0x30,0xe1,0x06,0x90,0x00,0x56,0x74,0x02,0xf0,0xe5,0x3e,0x30,0xe2,0x06,0x90,0x00,
58304 +0x56,0x74,0x04,0xf0,0xe5,0x3e,0x30,0xe3,0x06,0x90,0x00,0x56,0x74,0x08,0xf0,0x90,
58305 +0x01,0xc4,0x74,0x91,0xf0,0x74,0x57,0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,
58306 0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,
58307 -0xf0,0xd0,0xe0,0x32,0x90,0x04,0x1b,0xe0,0x54,0x7f,0x64,0x7f,0x7f,0x01,0x60,0x02,
58308 -0x7f,0x00,0x22,0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0xd3,0x10,0xaf,0x01,0xc3,
58309 -0xc0,0xd0,0x7f,0x10,0xdf,0xfe,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,
58310 -0xc0,0xd0,0x90,0x9e,0xac,0xed,0xf0,0x90,0x9e,0xab,0xef,0xf0,0xd3,0x94,0x07,0x50,
58311 -0x63,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,
58312 -0x90,0x00,0x47,0xe0,0x5f,0xf0,0x71,0xdb,0x90,0x9e,0xab,0xe0,0xff,0x74,0x01,0xa8,
58313 -0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x46,0xe0,0x4f,0xf0,0x71,
58314 -0xdb,0x90,0x9e,0xac,0xe0,0x60,0x16,0x90,0x9e,0xab,0xe0,0xff,0x74,0x01,0xa8,0x07,
58315 -0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x45,0x80,0x66,0x90,0x9e,0xab,
58316 -0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,
58317 -0x00,0x45,0x80,0x6b,0x90,0x9e,0xab,0xe0,0x24,0xf8,0xf0,0xe0,0xff,0x74,0x01,0xa8,
58318 -0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0x71,0xd3,0x90,0x9e,0xab,
58319 -0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,
58320 -0x43,0xe0,0x4f,0xf0,0x71,0xdb,0x90,0x9e,0xac,0xe0,0x60,0x1b,0x90,0x9e,0xab,0xe0,
58321 -0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0xff,
58322 -0x90,0x00,0x42,0xe0,0x4f,0x80,0x1a,0x90,0x9e,0xab,0xe0,0xff,0x74,0x01,0xa8,0x07,
58323 -0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0xf4,0xff,0x90,0x00,0x42,0xe0,
58324 -0x5f,0xf0,0x71,0xdb,0xd0,0xd0,0x92,0xaf,0x22,0xf0,0x90,0x00,0x45,0xe0,0x54,0xfe,
58325 -0xfd,0x7f,0x45,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x8f,0x82,0x75,0x83,0x00,0xed,
58326 -0xf0,0x71,0xdb,0xd0,0xd0,0x92,0xaf,0x22,0xef,0x14,0x60,0x30,0x14,0x60,0x66,0x24,
58327 -0x02,0x60,0x02,0xa1,0x9f,0x90,0x9e,0x1a,0x74,0x02,0xf0,0x90,0x00,0x48,0xe0,0x44,
58328 -0x0c,0xfd,0x7f,0x48,0x91,0xe3,0x90,0x00,0x47,0xe0,0x44,0x08,0xfd,0x7f,0x47,0x91,
58329 -0xe3,0x90,0x00,0x45,0xe0,0x44,0x10,0xfd,0x7f,0x45,0x80,0x71,0xe4,0x90,0x9e,0x1a,
58330 -0xf0,0x90,0x9e,0x16,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,
58331 -0x08,0x12,0x2f,0xd9,0x90,0x00,0x45,0xe0,0x44,0xef,0xfd,0x7f,0x45,0x91,0xe3,0x90,
58332 -0x00,0x45,0xe0,0x54,0xef,0xfd,0x7f,0x45,0x91,0xe3,0x90,0x00,0x46,0xe0,0x44,0x10,
58333 -0xfd,0x7f,0x46,0x80,0x38,0x90,0x9e,0x1a,0x74,0x01,0xf0,0x90,0x9e,0x20,0x12,0x43,
58334 -0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x00,
58335 -0x45,0xe0,0x44,0x20,0xfd,0x7f,0x45,0x91,0xe3,0x90,0x00,0x45,0xe0,0x44,0x10,0xfd,
58336 -0x7f,0x45,0x91,0xe3,0x90,0x00,0x46,0xe0,0x44,0x10,0xfd,0x7f,0x46,0x91,0xe3,0x22,
58337 -0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x9e,0x1c,0xf0,0x90,0x00,0x01,0x12,0x42,0x20,
58338 -0x25,0xe0,0x25,0xe0,0x90,0x9e,0x1b,0xf0,0x12,0x29,0xd9,0x25,0xe0,0x25,0xe0,0x90,
58339 -0x9e,0x1f,0xf0,0x90,0x05,0x60,0xe0,0x90,0x9e,0x2a,0xf0,0x90,0x05,0x61,0xe0,0x90,
58340 -0x9e,0x2b,0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x2c,0xf0,0x90,0x05,0x63,0xe0,0x90,
58341 -0x9e,0x2d,0xf0,0xa2,0xaf,0xe4,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x90,0x9e,0x1b,
58342 -0xe0,0xff,0x12,0x52,0x12,0x90,0x9e,0x3f,0xe0,0x24,0xff,0x92,0xaf,0x90,0x9e,0x1c,
58343 -0xe0,0x70,0x02,0xc1,0xa7,0x90,0x9e,0x1b,0xe0,0x70,0x02,0xc1,0xa7,0x90,0x9e,0x1f,
58344 -0xe0,0x70,0x02,0xc1,0xa7,0xa2,0xaf,0xe4,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x90,
58345 -0x9e,0x2e,0x74,0x01,0xf0,0x90,0x9e,0x3f,0xe0,0x24,0xff,0x92,0xaf,0x91,0xda,0x90,
58346 -0x00,0x46,0xe0,0x44,0x01,0xfd,0x7f,0x46,0x91,0xe3,0x90,0x9e,0x14,0xe0,0x60,0x15,
58347 -0x90,0x9e,0x20,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,
58348 -0x12,0x2f,0xd9,0x80,0x06,0x90,0x05,0x22,0x74,0x7f,0xf0,0x90,0x00,0x45,0xe0,0x54,
58349 -0xef,0xfd,0x7f,0x45,0x91,0xe3,0x90,0x05,0x87,0xe0,0x64,0x80,0xf0,0x90,0x9e,0x2a,
58350 -0xe0,0x90,0x05,0x84,0xf0,0x90,0x9e,0x2b,0xe0,0x90,0x05,0x85,0xf0,0x90,0x9e,0x2c,
58351 -0xe0,0x90,0x05,0x86,0xf0,0x90,0x9e,0x2d,0xe0,0x90,0x05,0x87,0xf0,0xa2,0xaf,0xe4,
58352 -0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x90,0x01,0x3c,0xe0,0x44,0x20,0xf0,0x7d,0x20,
58353 -0xe4,0xff,0x12,0x37,0x00,0x80,0x2b,0x90,0x9e,0x1c,0xe0,0x70,0x2d,0x90,0x9e,0x2e,
58354 -0x91,0xd9,0x90,0x00,0x46,0xe0,0x54,0xfe,0xfd,0x7f,0x46,0x91,0xe3,0x90,0x05,0x22,
58355 -0xe4,0xf0,0xa2,0xaf,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x7d,0x20,0xe4,0xff,0x12,
58356 -0x36,0x92,0x90,0x9e,0x3f,0xe0,0x24,0xff,0x92,0xaf,0x22,0x90,0x01,0x30,0xe4,0xf0,
58357 -0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x01,0x38,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,
58358 -0xfd,0x7f,0x50,0x91,0xe3,0xe4,0xfd,0x7f,0x51,0x91,0xe3,0xe4,0xfd,0x7f,0x52,0x91,
58359 -0xe3,0xe4,0xfd,0x7f,0x53,0x81,0xe3,0x8b,0x59,0x8a,0x5a,0x89,0x5b,0x90,0x00,0x02,
58360 -0x12,0x42,0x20,0x90,0x9e,0x1d,0xf0,0xe0,0x30,0xe0,0x4b,0x90,0x9e,0x14,0x74,0x01,
58361 -0xf0,0x7f,0x80,0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0x16,0x12,0x2a,0x7f,0xab,0x59,
58362 -0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0xe4,0xfc,0xfd,0xfe,0x78,
58363 -0x1a,0x12,0x2a,0x6c,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,0x07,0x90,0x9e,0x16,0x12,
58364 -0x43,0x53,0xec,0x54,0x03,0xfc,0x12,0x43,0x46,0x90,0x9e,0x20,0x12,0x2a,0x7f,0x90,
58365 -0x05,0x22,0xe4,0xf0,0x80,0x2d,0xe4,0x90,0x9e,0x14,0xf0,0x7f,0x80,0x7e,0x08,0x12,
58366 -0x27,0xde,0xec,0x54,0x03,0xfc,0xec,0x44,0xc0,0xfc,0x90,0x9e,0x16,0x12,0x2a,0x7f,
58367 -0x90,0x9e,0x16,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,
58368 -0x12,0x2f,0xd9,0x90,0x9e,0x1d,0xe0,0x30,0xe1,0x19,0x7d,0x0c,0x7f,0x47,0x91,0xe3,
58369 -0x90,0x00,0x48,0xe0,0x44,0x0c,0xfd,0x7f,0x48,0x91,0xe3,0x90,0x00,0x46,0xe0,0x44,
58370 -0x10,0x80,0x1c,0x90,0x00,0x47,0xe0,0x54,0xf3,0xfd,0x7f,0x47,0x91,0xe3,0x90,0x00,
58371 -0x48,0xe0,0x54,0xf3,0xfd,0x7f,0x48,0x91,0xe3,0x90,0x00,0x46,0xe0,0x54,0xef,0xfd,
58372 -0x7f,0x46,0x91,0xe3,0xe4,0x90,0x9e,0x1a,0xf0,0x22,0x90,0x00,0x49,0xe0,0x90,0x9e,
58373 -0xb0,0xf0,0xe0,0x54,0x0f,0xf0,0x44,0xf0,0xfd,0x7f,0x49,0x91,0xe3,0x90,0x9e,0xb0,
58374 -0xe0,0x44,0xb0,0xfd,0x7f,0x49,0x81,0xe3,0x75,0x28,0x33,0xe4,0xf5,0x29,0x75,0x2a,
58375 -0x07,0xf5,0x2b,0x90,0x01,0x30,0xe5,0x28,0xf0,0xa3,0xe5,0x29,0xf0,0xa3,0xe5,0x2a,
58376 -0xf0,0xa3,0xe5,0x2b,0xf0,0x22,0x75,0x30,0x1f,0x75,0x31,0x01,0xe4,0xf5,0x32,0x90,
58377 -0x01,0x38,0xe5,0x30,0xf0,0xa3,0xe5,0x31,0xf0,0xa3,0xe5,0x32,0xf0,0x22,0xe4,0x90,
58378 -0x9e,0x31,0xf0,0xa3,0xf0,0x75,0x8e,0x02,0x12,0x77,0x51,0x12,0x5e,0xde,0x90,0x9e,
58379 -0x5e,0xef,0xf0,0x12,0x5e,0xeb,0x90,0x9e,0x60,0xef,0xf0,0xe4,0xf5,0x12,0x12,0x6e,
58380 -0xcc,0x12,0x77,0xc8,0x12,0x5f,0x9f,0x12,0x32,0x3d,0x12,0x77,0xc4,0x12,0x4f,0xf8,
58381 -0x90,0x00,0xf3,0xe0,0x30,0xe2,0x0d,0x90,0x05,0x41,0x74,0x10,0xf0,0x90,0x05,0x5a,
58382 -0xf0,0xa3,0xe4,0xf0,0x12,0x5e,0xf8,0x11,0x16,0x12,0x44,0xff,0x12,0x7d,0x88,0x90,
58383 -0x9e,0x33,0xe5,0xd9,0xf0,0x12,0x5e,0xaf,0xc2,0xaf,0x90,0x00,0x80,0xe0,0x44,0x40,
58384 -0xf0,0x12,0x4b,0xdb,0x75,0xe8,0x03,0x43,0xa8,0x85,0xd2,0xaf,0x90,0x9e,0x31,0xe0,
58385 -0x64,0x01,0xf0,0x24,0x2e,0x90,0x01,0xc4,0xf0,0x74,0x50,0xa3,0xf0,0xe5,0x12,0x30,
58386 -0xe4,0x09,0xc2,0xaf,0x53,0x12,0xef,0xd2,0xaf,0x71,0x1a,0xe5,0x12,0x30,0xe6,0x16,
58387 -0xc2,0xaf,0x53,0x12,0xbf,0xd2,0xaf,0x12,0x68,0x7a,0x90,0x9e,0x1e,0xe0,0xff,0x60,
58388 -0x03,0xb4,0x01,0x02,0x31,0x10,0x90,0x9e,0x1e,0xe0,0x70,0x03,0x12,0x7d,0xe6,0x11,
58389 -0xe3,0x80,0xb9,0x90,0x06,0x34,0xe0,0x60,0x26,0x14,0x70,0x1b,0x7b,0x01,0x7a,0x06,
58390 -0x79,0x35,0x7f,0xf9,0x7e,0x01,0x12,0x77,0x62,0xbf,0x01,0x09,0x90,0x06,0x35,0xe0,
58391 -0x54,0x0f,0xf0,0x80,0x05,0x80,0x00,0x02,0x77,0x43,0xe4,0x90,0x06,0x34,0xf0,0x22,
58392 -0x90,0x9e,0x15,0xe0,0xc3,0x94,0x14,0x50,0x05,0xe0,0x04,0xf0,0x21,0xc8,0x90,0x9e,
58393 -0x15,0xe0,0x64,0x14,0x60,0x02,0x21,0xc8,0x90,0x9e,0x24,0xe0,0x70,0x25,0x90,0x9e,
58394 -0x27,0xe0,0x70,0x1f,0x90,0x9e,0x25,0xe0,0x70,0x19,0x90,0x9e,0x28,0xe0,0x70,0x13,
58395 -0x90,0x9e,0x26,0xe0,0x70,0x0d,0x90,0x9e,0x29,0xe0,0x70,0x07,0x90,0x04,0xfd,0xe0,
58396 -0x54,0xfe,0xf0,0x90,0x9e,0x24,0xe0,0x90,0x04,0x44,0xf0,0x90,0x9e,0x25,0xe0,0x90,
58397 -0x04,0x45,0xf0,0x90,0x9e,0x26,0xe0,0x90,0x04,0x46,0xf0,0xa3,0xe4,0xf0,0x90,0x9e,
58398 -0x27,0xe0,0x90,0x04,0x48,0xf0,0x90,0x9e,0x28,0xe0,0x90,0x04,0x49,0xf0,0x90,0x9e,
58399 -0x29,0xe0,0x90,0x04,0x4a,0xf0,0xa3,0xe4,0xf0,0x90,0x9e,0x10,0xe0,0x90,0x04,0x4c,
58400 -0xf0,0x90,0x9e,0x11,0xe0,0x90,0x04,0x4d,0xf0,0x90,0x9e,0x12,0xe0,0x90,0x04,0x4e,
58401 -0xf0,0x90,0x9e,0x13,0xe0,0x90,0x04,0x4f,0xf0,0xe4,0x90,0x9e,0x15,0xf0,0x90,0x9e,
58402 -0x10,0x04,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,0x24,0xf0,0xa3,0xf0,
58403 -0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x05,0x60,0xe0,0x90,0x9e,0x34,0xf0,
58404 -0x90,0x05,0x61,0xe0,0x90,0x9e,0x35,0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x36,0xf0,
58405 -0x90,0x05,0x63,0xe0,0x90,0x9e,0x37,0xf0,0x90,0x9e,0x2d,0xe0,0xff,0x90,0x9e,0x37,
58406 -0xe0,0xfe,0xd3,0x9f,0x50,0x0b,0x90,0x9e,0x2d,0xe0,0xc3,0x9e,0xd3,0x94,0x01,0x40,
58407 -0x10,0x90,0x9e,0x1b,0xe0,0xb4,0x01,0x02,0x80,0x03,0x90,0x9e,0x1f,0xe0,0xff,0x51,
58408 -0x12,0x22,0x90,0x05,0x60,0xe0,0x90,0x9e,0x2a,0xf0,0x90,0x05,0x61,0xe0,0x90,0x9e,
58409 -0x2b,0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x2c,0xf0,0x90,0x05,0x63,0xe0,0x90,0x9e,
58410 -0x2d,0xf0,0xc3,0x74,0xff,0x9f,0xfe,0x90,0x9e,0x2b,0xe0,0xd3,0x9e,0x40,0x1e,0xe0,
58411 -0x2f,0xf0,0xa3,0xe0,0xb4,0xff,0x0f,0xe4,0xf0,0xa3,0xe0,0xb4,0xff,0x03,0xe4,0xf0,
58412 -0x22,0x90,0x9e,0x2d,0x80,0x03,0x90,0x9e,0x2c,0xe0,0x04,0xf0,0x22,0x90,0x9e,0x2b,
58413 -0xe0,0x2f,0xf0,0x22,0x90,0x9e,0x1c,0xe0,0x64,0x01,0x60,0x02,0x61,0x19,0x90,0x00,
58414 -0x46,0xe0,0x44,0x01,0xfd,0x7f,0x46,0x12,0x4c,0xe3,0x90,0x9e,0x2e,0xe0,0x70,0x32,
58415 -0x90,0x9e,0x14,0xe0,0x60,0x15,0x90,0x9e,0x20,0x12,0x43,0x53,0x90,0x80,0x85,0x12,
58416 -0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,0x80,0x06,0x90,0x05,0x22,0x74,0x7f,
58417 -0xf0,0x90,0x9e,0x1b,0xe0,0xff,0x51,0x12,0x90,0x9e,0x2e,0x74,0x01,0x12,0x4c,0xd9,
58418 -0x80,0x40,0x90,0x9e,0x2e,0xe0,0x64,0x01,0x70,0x38,0x90,0x9e,0x1f,0xe0,0xff,0x51,
58419 -0x12,0xe4,0x90,0x9e,0x2e,0xf0,0x90,0x00,0x45,0xe0,0x44,0x01,0xfd,0x7f,0x45,0x12,
58420 -0x4c,0xe3,0x90,0x9e,0x14,0xe0,0x60,0x15,0x90,0x9e,0x16,0x12,0x43,0x53,0x90,0x80,
58421 -0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,0x80,0x05,0x90,0x05,0x22,
58422 -0xe4,0xf0,0x90,0x05,0x87,0xe0,0x64,0x80,0xf0,0x90,0x9e,0x2a,0xe0,0x90,0x05,0x84,
58423 -0xf0,0x90,0x9e,0x2b,0xe0,0x90,0x05,0x85,0xf0,0x90,0x9e,0x2c,0xe0,0x90,0x05,0x86,
58424 -0xf0,0x90,0x9e,0x2d,0xe0,0x90,0x05,0x87,0xf0,0x22,0x90,0x01,0xcc,0xe0,0x54,0x0f,
58425 -0x90,0x9e,0x34,0xf0,0x90,0x9e,0x34,0xe0,0xfd,0x70,0x02,0x81,0x5b,0x90,0x9e,0xad,
58426 -0xe0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,
58427 -0xd8,0xf9,0xff,0xef,0x5d,0x70,0x02,0x81,0x54,0x90,0x9e,0xad,0xe0,0x75,0xf0,0x04,
58428 -0x90,0x01,0xd0,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x35,0xf0,0x75,0x1e,0x01,0x75,0x1f,
58429 -0x9e,0x75,0x20,0x35,0x75,0x21,0x01,0x7b,0x01,0x7a,0x9e,0x79,0x36,0x12,0x45,0x09,
58430 -0x90,0x9e,0x36,0xe0,0xff,0xc4,0x13,0x13,0x13,0x54,0x01,0x90,0x9e,0xad,0x30,0xe0,
58431 -0x59,0xe0,0x75,0xf0,0x02,0x90,0x00,0x88,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x37,0xf0,
58432 -0x90,0x9e,0xad,0xe0,0x75,0xf0,0x02,0x90,0x00,0x89,0x12,0x43,0x5f,0xe0,0x90,0x9e,
58433 -0x38,0xf0,0x90,0x9e,0xad,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd1,0x12,0x43,0x5f,0xe0,
58434 -0x90,0x9e,0x39,0xf0,0x90,0x9e,0xad,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd2,0x12,0x43,
58435 -0x5f,0xe0,0x90,0x9e,0x3a,0xf0,0x90,0x9e,0xad,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd3,
58436 -0x12,0x43,0x5f,0xe0,0x90,0x9e,0x3b,0xf0,0x80,0x33,0xe0,0x75,0xf0,0x04,0x90,0x01,
58437 -0xd1,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x37,0xf0,0x90,0x9e,0xad,0xe0,0x75,0xf0,0x04,
58438 -0x90,0x01,0xd2,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x38,0xf0,0x90,0x9e,0xad,0xe0,0x75,
58439 -0xf0,0x04,0x90,0x01,0xd3,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x39,0xf0,0xef,0x54,0x7f,
58440 -0xff,0x7b,0x01,0x7a,0x9e,0x79,0x37,0x91,0x5c,0x90,0x9e,0x34,0xe0,0xff,0x90,0x9e,
58441 -0xad,0xe0,0xfe,0x74,0x01,0xa8,0x06,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0x5f,
58442 -0x90,0x9e,0x34,0xf0,0x90,0x9e,0xad,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,
58443 -0xc3,0x33,0xd8,0xfc,0x90,0x01,0xcc,0xf0,0x90,0x9e,0xad,0xe0,0x04,0xf0,0xe0,0x54,
58444 -0x03,0xf0,0x61,0x24,0x90,0x01,0xc6,0xe0,0x44,0x02,0xf0,0x22,0x90,0x9e,0x3c,0x12,
58445 -0x43,0x8b,0xef,0x12,0x43,0x94,0x54,0x97,0x01,0x54,0xa0,0x02,0x54,0xbb,0x03,0x54,
58446 -0xc4,0x05,0x54,0xcd,0x06,0x55,0x1b,0x07,0x54,0xd5,0x09,0x54,0xde,0x0c,0x54,0xe7,
58447 -0x0d,0x54,0xf0,0x0e,0x54,0xf9,0x1b,0x55,0x02,0x1c,0x55,0x0b,0x2c,0x54,0xa9,0x2d,
58448 -0x54,0xb2,0x2e,0x00,0x00,0x55,0x14,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x61,0x69,
58449 -0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x70,0xef,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,
58450 -0x70,0xf5,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x71,0x3d,0x90,0x9e,0x3c,0x12,0x43,
58451 -0x6b,0x02,0x71,0x6b,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x70,0x9f,0x90,0x9e,0x3c,
58452 -0x12,0x43,0x6b,0x80,0x47,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x71,0xb3,0x90,0x9e,
58453 -0x3c,0x12,0x43,0x6b,0x02,0x4d,0xa0,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x7d,0x55,
58454 -0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x4f,0x07,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,
58455 -0x70,0xe7,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x70,0xce,0x90,0x9e,0x3c,0x12,0x43,
58456 -0x6b,0x02,0x76,0x23,0x90,0x01,0xc6,0xe0,0x44,0x01,0xf0,0x22,0x90,0x00,0x04,0x12,
58457 -0x42,0x20,0xff,0x54,0x1f,0xfe,0xef,0x54,0x20,0xc4,0x13,0x54,0x07,0xfd,0xaf,0x06,
58458 -0x90,0x9e,0x3f,0xef,0xf0,0xa3,0xed,0xf0,0xa3,0x12,0x43,0x8b,0x90,0x9e,0x41,0x12,
58459 -0x43,0x6b,0x90,0x00,0x03,0x12,0x42,0x20,0x54,0xf0,0xc4,0x54,0x0f,0x90,0x9e,0x44,
58460 -0xf0,0x90,0x00,0x04,0x12,0x42,0x20,0x54,0x40,0xc4,0x13,0x13,0x54,0x03,0x90,0x9e,
58461 -0x45,0xf0,0x90,0x9e,0x3f,0xe0,0xff,0x75,0xf0,0x09,0x90,0x96,0x46,0x12,0x43,0x5f,
58462 -0xad,0x82,0xac,0x83,0x90,0x9e,0x46,0xec,0xf0,0xa3,0xed,0xf0,0xef,0x75,0xf0,0x09,
58463 -0xa4,0x24,0x44,0xf9,0x74,0x96,0x35,0xf0,0xfa,0x7b,0x01,0xa3,0x12,0x43,0x8b,0x90,
58464 -0x9e,0x41,0x12,0x43,0x6b,0x90,0x00,0x03,0x12,0x42,0x20,0x54,0x0f,0xff,0x90,0x9e,
58465 -0x48,0x12,0x43,0x6b,0xef,0x12,0x42,0x4d,0x90,0x9e,0x41,0x12,0x43,0x6b,0x90,0x00,
58466 -0x02,0x12,0x42,0x20,0xff,0x90,0x9e,0x48,0x12,0x43,0x6b,0x90,0x00,0x01,0xef,0x12,
58467 -0x42,0x5f,0x90,0x9e,0x41,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0x90,
58468 -0x9e,0x46,0xe0,0xfc,0xa3,0xe0,0xfd,0xf5,0x82,0x8c,0x83,0xef,0xf0,0x12,0x29,0xd9,
58469 -0x8d,0x82,0x8c,0x83,0xa3,0xf0,0x90,0x9e,0x44,0xe0,0xfe,0x90,0x9e,0x3f,0xe0,0xff,
58470 -0x24,0x82,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0x90,0x9e,0x40,0xe0,0xfe,
58471 -0x75,0xf0,0x09,0xef,0x90,0x96,0x4a,0x12,0x43,0x5f,0xee,0xf0,0x75,0xf0,0x09,0xef,
58472 -0x90,0x96,0x4b,0x12,0x43,0x5f,0x74,0x01,0xf0,0x90,0x9e,0x45,0xe0,0xfe,0x75,0xf0,
58473 -0x09,0xef,0x90,0x96,0x4c,0x12,0x43,0x5f,0xee,0xf0,0x8f,0x59,0xef,0x25,0xe0,0x24,
58474 -0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xaf,0x82,0xf5,0x5b,0x8f,0x5c,0xe5,0x59,0x75,0xf0,
58475 -0x02,0xa4,0x24,0x02,0xf9,0x74,0x95,0x35,0xf0,0x75,0x5d,0x01,0xf5,0x5e,0x89,0x5f,
58476 -0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x46,0x12,0x43,0x5f,0xaf,0x82,0x85,0x83,0x60,
58477 -0x8f,0x61,0xe5,0x59,0x75,0xf0,0x09,0xa4,0x24,0x44,0xf9,0x74,0x96,0x35,0xf0,0x75,
58478 -0x62,0x01,0xf5,0x63,0x89,0x64,0x74,0x82,0x25,0x59,0xf5,0x82,0xe4,0x34,0x95,0xf5,
58479 -0x83,0xe0,0x12,0x43,0x94,0x56,0xaa,0x00,0x56,0xbf,0x01,0x56,0xd4,0x02,0x56,0xe9,
58480 -0x03,0x57,0x13,0x04,0x57,0x28,0x05,0x57,0x3d,0x06,0x57,0x64,0x0c,0x57,0x92,0x0d,
58481 -0x57,0xbf,0x0e,0x57,0xec,0x0f,0x00,0x00,0x58,0x20,0xe5,0x59,0x25,0xe0,0x24,0xc6,
58482 -0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0x74,0x15,0x80,0x3c,0xe5,
58483 -0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,
58484 -0x74,0x10,0x80,0x27,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,
58485 -0x83,0x74,0xf0,0xf0,0xa3,0x74,0x05,0x80,0x12,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,
58486 -0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0xe4,0xf0,0xe5,0x59,0x25,0xe0,
58487 -0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0x8f,0xf0,
58488 -0x02,0x58,0x20,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,
58489 -0x74,0x0f,0xf0,0xa3,0x74,0xf5,0x80,0x27,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,
58490 -0xe4,0x34,0x9b,0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0xf0,0x80,0x12,0xe5,0x59,0x25,
58491 -0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe4,0xf0,0xa3,0x74,0x0d,0xf0,
58492 -0xe5,0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe4,0xf0,0xa3,
58493 -0xf0,0x02,0x58,0x20,0x90,0x04,0x47,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,
58494 -0x4d,0x90,0x04,0x46,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,
58495 -0x5f,0x90,0x04,0x45,0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xf0,0x90,0x04,0x44,0x02,
58496 -0x58,0x17,0x90,0x04,0x4b,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,0x4d,0x90,
58497 -0x04,0x4a,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,
58498 -0x04,0x49,0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xf0,0x90,0x04,0x48,0x80,0x58,0x90,
58499 -0x04,0x4f,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,0x4d,0x90,0x04,0x4e,0xe0,
58500 -0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,0x04,0x4d,0xe0,
58501 -0x85,0x5c,0x82,0x85,0x5b,0x83,0xf0,0x90,0x04,0x4c,0x80,0x2b,0x90,0x04,0x53,0xe0,
58502 -0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,0x4d,0x90,0x04,0x52,0xe0,0xab,0x5d,0xaa,
58503 -0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,0x04,0x51,0xe0,0x85,0x5c,0x82,
58504 -0x85,0x5b,0x83,0xf0,0x90,0x04,0x50,0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xa3,0xf0,
58505 -0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0xc0,0x03,0xc0,0x02,0xc0,0x01,0x12,0x29,0xd9,0xff,
58506 -0xab,0x62,0xaa,0x63,0xa9,0x64,0x12,0x29,0xd9,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,
58507 -0x12,0x42,0x4d,0xab,0x5d,0xe5,0x5f,0x24,0x01,0xf9,0xe4,0x35,0x5e,0xfa,0xc0,0x03,
58508 -0xc0,0x02,0xc0,0x01,0x12,0x29,0xd9,0xff,0xab,0x62,0xaa,0x63,0xa9,0x64,0x90,0x00,
58509 -0x01,0x12,0x42,0x20,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,0x12,0x42,0x4d,0x85,0x5c,
58510 -0x82,0x85,0x5b,0x83,0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,0x61,0x82,0x85,0x60,0x83,
58511 -0xe0,0xfe,0xef,0x5e,0xd0,0x82,0xd0,0x83,0xf0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xa3,
58512 -0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,0x61,0x82,0x85,0x60,0x83,0xa3,0xe0,0xfe,0xef,
58513 -0x5e,0xd0,0x82,0xd0,0x83,0xf0,0xe5,0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,
58514 -0x95,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3b,0x75,0x5a,0x0b,0x74,0x01,0x7e,
58515 -0x00,0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x59,
58516 +0xf0,0xd0,0xe0,0x32,0x90,0x01,0xcc,0xe0,0x54,0x0f,0x90,0x9e,0x19,0xf0,0x90,0x9e,
58517 +0x19,0xe0,0xfd,0x70,0x02,0x21,0xb5,0x90,0x9e,0xae,0xe0,0xff,0x74,0x01,0x7e,0x00,
58518 +0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xef,0x5d,0x70,
58519 +0x02,0x21,0xae,0x90,0x9e,0xae,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd0,0x12,0x43,0x5f,
58520 +0xe0,0x90,0x9e,0x1a,0xf0,0x75,0x23,0x01,0x75,0x24,0x9e,0x75,0x25,0x1a,0x75,0x26,
58521 +0x01,0x7b,0x01,0x7a,0x9e,0x79,0x1b,0x12,0x45,0x09,0x90,0x9e,0x1b,0xe0,0xff,0xc4,
58522 +0x13,0x13,0x13,0x54,0x01,0x90,0x9e,0xae,0x30,0xe0,0x59,0xe0,0x75,0xf0,0x02,0x90,
58523 +0x00,0x88,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x1c,0xf0,0x90,0x9e,0xae,0xe0,0x75,0xf0,
58524 +0x02,0x90,0x00,0x89,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x1d,0xf0,0x90,0x9e,0xae,0xe0,
58525 +0x75,0xf0,0x04,0x90,0x01,0xd1,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x1e,0xf0,0x90,0x9e,
58526 +0xae,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd2,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x1f,0xf0,
58527 +0x90,0x9e,0xae,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd3,0x12,0x43,0x5f,0xe0,0x90,0x9e,
58528 +0x20,0xf0,0x80,0x33,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd1,0x12,0x43,0x5f,0xe0,0x90,
58529 +0x9e,0x1c,0xf0,0x90,0x9e,0xae,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd2,0x12,0x43,0x5f,
58530 +0xe0,0x90,0x9e,0x1d,0xf0,0x90,0x9e,0xae,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd3,0x12,
58531 +0x43,0x5f,0xe0,0x90,0x9e,0x1e,0xf0,0xef,0x54,0x7f,0xff,0x7b,0x01,0x7a,0x9e,0x79,
58532 +0x1c,0x31,0xb6,0x90,0x9e,0x19,0xe0,0xff,0x90,0x9e,0xae,0xe0,0xfe,0x74,0x01,0xa8,
58533 +0x06,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0x5f,0x90,0x9e,0x19,0xf0,0x90,0x9e,
58534 +0xae,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0x90,0x01,
58535 +0xcc,0xf0,0x90,0x9e,0xae,0xe0,0x04,0xf0,0xe0,0x54,0x03,0xf0,0x01,0x7e,0x90,0x01,
58536 +0xc6,0xe0,0x44,0x02,0xf0,0x22,0x90,0x9e,0x21,0x12,0x43,0x8b,0xef,0x12,0x43,0x94,
58537 +0x59,0xfc,0x01,0x59,0xf4,0x02,0x5a,0x20,0x03,0x5a,0x29,0x05,0x5a,0x32,0x06,0x5a,
58538 +0x7e,0x07,0x5a,0x3a,0x09,0x5a,0x43,0x0b,0x5a,0x4c,0x0c,0x5a,0x55,0x0d,0x5a,0x5e,
58539 +0x0e,0x5a,0x67,0x1b,0x5a,0x6f,0x1c,0x5a,0x05,0x2d,0x5a,0x0e,0x2e,0x5a,0x17,0x3b,
58540 +0x00,0x00,0x5a,0x77,0x90,0x9e,0x21,0x12,0x43,0x6b,0xe1,0xe9,0x90,0x9e,0x21,0x12,
58541 +0x43,0x6b,0x02,0x71,0xd0,0x90,0x9e,0x21,0x12,0x43,0x6b,0x02,0x72,0x0b,0x90,0x9e,
58542 +0x21,0x12,0x43,0x6b,0x02,0x72,0x53,0x90,0x9e,0x21,0x12,0x43,0x6b,0x02,0x72,0x8c,
58543 +0x90,0x9e,0x21,0x12,0x43,0x6b,0x02,0x72,0xb6,0x90,0x9e,0x21,0x12,0x43,0x6b,0x02,
58544 +0x70,0x4a,0x90,0x9e,0x21,0x12,0x43,0x6b,0x80,0x45,0x90,0x9e,0x21,0x12,0x43,0x6b,
58545 +0x02,0x72,0xfe,0x90,0x9e,0x21,0x12,0x43,0x6b,0x02,0x70,0xa2,0x90,0x9e,0x21,0x12,
58546 +0x43,0x6b,0x02,0x49,0xc2,0x90,0x9e,0x21,0x12,0x43,0x6b,0x02,0x7b,0x16,0x90,0x9e,
58547 +0x21,0x12,0x43,0x6b,0x02,0x4a,0xfc,0x90,0x9e,0x21,0x12,0x43,0x6b,0xe1,0xef,0x90,
58548 +0x9e,0x21,0x12,0x43,0x6b,0xe1,0xd1,0x90,0x01,0xc6,0xe0,0x44,0x01,0xf0,0x22,0x90,
58549 +0x00,0x04,0x12,0x42,0x20,0xff,0x54,0x1f,0xfe,0xef,0x54,0x20,0xc4,0x13,0x54,0x07,
58550 +0xfd,0xaf,0x06,0x90,0x9e,0x24,0xef,0xf0,0xa3,0xed,0xf0,0xa3,0x12,0x43,0x8b,0x90,
58551 +0x9e,0x26,0x12,0x43,0x6b,0x90,0x00,0x03,0x12,0x42,0x20,0x54,0xf0,0xc4,0x54,0x0f,
58552 +0x90,0x9e,0x29,0xf0,0x90,0x00,0x04,0x12,0x42,0x20,0x54,0x40,0xc4,0x13,0x13,0x54,
58553 +0x03,0x90,0x9e,0x2a,0xf0,0x90,0x9e,0x24,0xe0,0xff,0x75,0xf0,0x09,0x90,0x96,0x46,
58554 +0x12,0x43,0x5f,0xad,0x82,0xac,0x83,0x90,0x9e,0x2b,0xec,0xf0,0xa3,0xed,0xf0,0xef,
58555 +0x75,0xf0,0x09,0xa4,0x24,0x44,0xf9,0x74,0x96,0x35,0xf0,0xfa,0x7b,0x01,0xa3,0x12,
58556 +0x43,0x8b,0x90,0x9e,0x26,0x12,0x43,0x6b,0x90,0x00,0x03,0x12,0x42,0x20,0x54,0x0f,
58557 +0xff,0x90,0x9e,0x2d,0x12,0x43,0x6b,0xef,0x12,0x42,0x4d,0x90,0x9e,0x26,0x12,0x43,
58558 +0x6b,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0x90,0x9e,0x2d,0x12,0x43,0x6b,0x90,0x00,
58559 +0x01,0xef,0x12,0x42,0x5f,0x90,0x9e,0x26,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,
58560 +0x20,0xff,0x90,0x9e,0x2b,0xe0,0xfc,0xa3,0xe0,0xfd,0xf5,0x82,0x8c,0x83,0xef,0xf0,
58561 +0x12,0x29,0xd9,0x8d,0x82,0x8c,0x83,0xa3,0xf0,0x90,0x9e,0x29,0xe0,0xfe,0x90,0x9e,
58562 +0x24,0xe0,0xff,0x24,0x82,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0x90,0x9e,
58563 +0x25,0xe0,0xfe,0x75,0xf0,0x09,0xef,0x90,0x96,0x4a,0x12,0x43,0x5f,0xee,0xf0,0x75,
58564 +0xf0,0x09,0xef,0x90,0x96,0x4b,0x12,0x43,0x5f,0x74,0x01,0xf0,0x90,0x9e,0x2a,0xe0,
58565 +0xfe,0x75,0xf0,0x09,0xef,0x90,0x96,0x4c,0x12,0x43,0x5f,0xee,0xf0,0x8f,0x14,0xef,
58566 +0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xaf,0x82,0xf5,0x16,0x8f,0x17,0xe5,
58567 +0x14,0x75,0xf0,0x02,0xa4,0x24,0x02,0xf9,0x74,0x95,0x35,0xf0,0x75,0x18,0x01,0xf5,
58568 +0x19,0x89,0x1a,0x75,0xf0,0x09,0xe5,0x14,0x90,0x96,0x46,0x12,0x43,0x5f,0xaf,0x82,
58569 +0x85,0x83,0x1b,0x8f,0x1c,0xe5,0x14,0x75,0xf0,0x09,0xa4,0x24,0x44,0xf9,0x74,0x96,
58570 +0x35,0xf0,0x75,0x1d,0x01,0xf5,0x1e,0x89,0x1f,0x74,0x82,0x25,0x14,0xf5,0x82,0xe4,
58571 +0x34,0x95,0xf5,0x83,0xe0,0x12,0x43,0x94,0x5c,0x0d,0x00,0x5c,0x22,0x01,0x5c,0x37,
58572 +0x02,0x5c,0x4c,0x03,0x5c,0x75,0x04,0x5c,0x8a,0x05,0x5c,0x9f,0x06,0x5c,0xc5,0x0c,
58573 +0x5c,0xf2,0x0d,0x5d,0x1f,0x0e,0x5d,0x4c,0x0f,0x00,0x00,0x5d,0x80,0xe5,0x14,0x25,
58574 +0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0x74,0x15,
58575 +0x80,0x3c,0xe5,0x14,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,
58576 +0xf0,0xf0,0xa3,0x74,0x10,0x80,0x27,0xe5,0x14,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,
58577 +0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0x74,0x05,0x80,0x12,0xe5,0x14,0x25,0xe0,
58578 +0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0xe4,0xf0,0xe5,
58579 +0x14,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0x74,0x0f,0xf0,0xa3,
58580 +0x74,0x8f,0xf0,0xa1,0x80,0xe5,0x14,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,
58581 +0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0xf5,0x80,0x27,0xe5,0x14,0x25,0xe0,0x24,0xc6,
58582 +0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0xf0,0x80,0x12,0xe5,
58583 +0x14,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe4,0xf0,0xa3,0x74,
58584 +0x0d,0xf0,0xe5,0x14,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe4,
58585 +0xf0,0xa3,0xf0,0xa1,0x80,0x90,0x04,0x47,0xe0,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x12,
58586 +0x42,0x4d,0x90,0x04,0x46,0xe0,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,0x01,0x12,
58587 +0x42,0x5f,0x90,0x04,0x45,0xe0,0x85,0x17,0x82,0x85,0x16,0x83,0xf0,0x90,0x04,0x44,
58588 +0xa1,0x77,0x90,0x04,0x4b,0xe0,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x12,0x42,0x4d,0x90,
58589 +0x04,0x4a,0xe0,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,
58590 +0x04,0x49,0xe0,0x85,0x17,0x82,0x85,0x16,0x83,0xf0,0x90,0x04,0x48,0x80,0x58,0x90,
58591 +0x04,0x4f,0xe0,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x12,0x42,0x4d,0x90,0x04,0x4e,0xe0,
58592 +0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,0x04,0x4d,0xe0,
58593 +0x85,0x17,0x82,0x85,0x16,0x83,0xf0,0x90,0x04,0x4c,0x80,0x2b,0x90,0x04,0x53,0xe0,
58594 +0xab,0x18,0xaa,0x19,0xa9,0x1a,0x12,0x42,0x4d,0x90,0x04,0x52,0xe0,0xab,0x18,0xaa,
58595 +0x19,0xa9,0x1a,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,0x04,0x51,0xe0,0x85,0x17,0x82,
58596 +0x85,0x16,0x83,0xf0,0x90,0x04,0x50,0xe0,0x85,0x17,0x82,0x85,0x16,0x83,0xa3,0xf0,
58597 +0xab,0x18,0xaa,0x19,0xa9,0x1a,0xc0,0x03,0xc0,0x02,0xc0,0x01,0x12,0x29,0xd9,0xff,
58598 +0xab,0x1d,0xaa,0x1e,0xa9,0x1f,0x12,0x29,0xd9,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,
58599 +0x12,0x42,0x4d,0xab,0x18,0xe5,0x1a,0x24,0x01,0xf9,0xe4,0x35,0x19,0xfa,0xc0,0x03,
58600 +0xc0,0x02,0xc0,0x01,0x12,0x29,0xd9,0xff,0xab,0x1d,0xaa,0x1e,0xa9,0x1f,0x90,0x00,
58601 +0x01,0x12,0x42,0x20,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,0x12,0x42,0x4d,0x85,0x17,
58602 +0x82,0x85,0x16,0x83,0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,0x1c,0x82,0x85,0x1b,0x83,
58603 +0xe0,0xfe,0xef,0x5e,0xd0,0x82,0xd0,0x83,0xf0,0x85,0x17,0x82,0x85,0x16,0x83,0xa3,
58604 +0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,0x1c,0x82,0x85,0x1b,0x83,0xa3,0xe0,0xfe,0xef,
58605 +0x5e,0xd0,0x82,0xd0,0x83,0xf0,0xe5,0x14,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,
58606 +0x95,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3b,0x75,0x15,0x0b,0x74,0x01,0x7e,
58607 +0x00,0xa8,0x15,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x14,
58608 0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,
58609 -0x5f,0x4e,0x60,0x06,0xe5,0x5a,0x24,0x10,0x80,0x5d,0x15,0x5a,0xe5,0x5a,0xc3,0x94,
58610 -0x00,0x50,0xca,0x80,0x56,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,
58611 -0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3d,0x75,0x5a,0x0f,0x74,0x01,0x7e,0x00,
58612 -0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x59,0x25,
58613 +0x5f,0x4e,0x60,0x06,0xe5,0x15,0x24,0x10,0x80,0x5d,0x15,0x15,0xe5,0x15,0xc3,0x94,
58614 +0x00,0x50,0xca,0x80,0x56,0xe5,0x14,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,
58615 +0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3d,0x75,0x15,0x0f,0x74,0x01,0x7e,0x00,
58616 +0xa8,0x15,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x14,0x25,
58617 0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,
58618 -0x4e,0x60,0x08,0x90,0x9e,0x4b,0xe5,0x5a,0xf0,0x80,0x10,0x15,0x5a,0xe5,0x5a,0xc3,
58619 -0x94,0x00,0x50,0xc8,0x80,0x05,0xe4,0x90,0x9e,0x4b,0xf0,0xe5,0x59,0x25,0xe0,0x24,
58620 +0x4e,0x60,0x08,0x90,0x9e,0x30,0xe5,0x15,0xf0,0x80,0x10,0x15,0x15,0xe5,0x15,0xc3,
58621 +0x94,0x00,0x50,0xc8,0x80,0x05,0xe4,0x90,0x9e,0x30,0xf0,0xe5,0x14,0x25,0xe0,0x24,
58622 0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3b,0xe4,
58623 -0xf5,0x5a,0x74,0x01,0x7e,0x00,0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,
58624 -0xd8,0xf9,0xff,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,
58625 -0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x08,0x90,0x9e,0x4c,0xe5,0x5a,0xf0,0x80,
58626 -0x5b,0x05,0x5a,0xe5,0x5a,0xb4,0x10,0xca,0x80,0x52,0xe5,0x59,0x25,0xe0,0x24,0x02,
58627 +0xf5,0x15,0x74,0x01,0x7e,0x00,0xa8,0x15,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,
58628 +0xd8,0xf9,0xff,0xe5,0x14,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,
58629 +0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x08,0x90,0x9e,0x31,0xe5,0x15,0xf0,0x80,
58630 +0x5b,0x05,0x15,0xe5,0x15,0xb4,0x10,0xca,0x80,0x52,0xe5,0x14,0x25,0xe0,0x24,0x02,
58631 0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x39,0xe4,0xf5,
58632 -0x5a,0x74,0x01,0x7e,0x00,0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,
58633 -0xf9,0xff,0xe5,0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,
58634 -0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x06,0xe5,0x5a,0x24,0x10,0x80,0x0a,0x05,0x5a,
58635 -0xe5,0x5a,0xb4,0x0c,0xcc,0x80,0x05,0xe4,0x90,0x9e,0x4c,0xf0,0x90,0x9e,0x4b,0xe0,
58636 -0xff,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x48,0x12,0x43,0x5f,0xef,0xf0,0x90,0x9e,
58637 -0x4c,0xe0,0xfe,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x49,0x12,0x43,0x5f,0xee,0xf0,
58638 -0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0xd3,0x9f,0x40,0x05,
58639 -0x90,0x9e,0x4b,0x51,0x6f,0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,
58640 -0xe0,0xff,0x90,0x9e,0x4c,0xe0,0xfe,0xef,0xc3,0x9e,0x50,0x02,0x51,0x6f,0x90,0x9e,
58641 -0x4b,0xe0,0xff,0xd3,0x94,0x13,0x40,0x07,0x90,0x96,0x43,0x74,0x03,0xf0,0x22,0xef,
58642 -0xd3,0x94,0x0b,0x40,0x07,0x90,0x96,0x43,0x74,0x02,0xf0,0x22,0xef,0xd3,0x94,0x03,
58643 -0x40,0x07,0x90,0x96,0x43,0x74,0x01,0xf0,0x22,0xe4,0x90,0x96,0x43,0xf0,0x22,0xe0,
58644 -0xfd,0x74,0x26,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xed,0xf0,0xaf,0x59,
58645 -0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xef,0xc3,0x94,0x20,0x50,0x0e,0x74,0x84,0x2f,
58646 -0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xed,0xf0,0x80,0x29,0x74,0xa6,0x2f,0xf5,0x82,
58647 -0xe4,0x34,0x9c,0xf5,0x83,0xed,0xf0,0x90,0x9e,0x75,0xef,0xf0,0x24,0xa6,0xf5,0x82,
58648 -0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x90,0x9e,0x76,0xf0,0x7b,0x01,0x7a,0x9e,0x79,0x75,
58649 -0x7d,0x02,0x51,0xc9,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
58650 -0x90,0x9e,0x94,0x12,0x43,0x8b,0x90,0x9e,0x97,0xe0,0x54,0xf0,0x44,0x06,0xff,0xf0,
58651 -0xed,0x54,0x0f,0xc4,0x54,0xf0,0xfe,0xef,0x54,0x0f,0x4e,0xf0,0x90,0x9e,0x94,0x12,
58652 -0x43,0x6b,0x90,0x9e,0x91,0x12,0x43,0x8b,0x7b,0x01,0x7a,0x9e,0x79,0x97,0x71,0xd4,
58653 -0xd0,0xd0,0x92,0xaf,0x22,0x8f,0x50,0x8d,0x51,0xe5,0x51,0x54,0x1f,0xf5,0x56,0x74,
58654 -0x01,0x2f,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe0,0xf5,0x54,0x90,0x04,0xfd,0xe0,
58655 -0xb4,0x01,0x05,0x75,0x57,0x03,0x80,0x03,0x75,0x57,0x01,0xeb,0xc3,0x95,0x57,0x40,
58656 -0x04,0xaf,0x50,0x80,0x33,0xe5,0x54,0x25,0x53,0xf5,0x55,0xe5,0x56,0x90,0x41,0xd6,
58657 -0x93,0xff,0xe5,0x55,0xd3,0x9f,0x74,0x01,0x40,0x11,0x25,0x50,0xf5,0x82,0xe4,0x34,
58658 -0x94,0xf5,0x83,0xe4,0xf0,0xad,0x51,0xaf,0x50,0x41,0x80,0x25,0x50,0xf5,0x82,0xe4,
58659 -0x34,0x94,0xf5,0x83,0xe5,0x55,0xf0,0x22,0xad,0x07,0x75,0xf0,0x09,0xed,0x90,0x96,
58660 -0x48,0x12,0x43,0x5f,0xe0,0xff,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,
58661 -0xe0,0x54,0x1f,0xf5,0x58,0xd3,0x9f,0x40,0x02,0x8f,0x58,0xe5,0x58,0x25,0xe0,0x24,
58662 -0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xe5,
58663 -0x58,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,
58664 -0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,
58665 -0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0xaf,0x05,0xad,0x58,0x51,
58666 -0x80,0xaf,0x58,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x8e,0x12,0x43,
58667 -0x8b,0x90,0x9e,0xaf,0xe0,0xff,0x04,0xf0,0x90,0x00,0x01,0xef,0x12,0x42,0x5f,0x7f,
58668 -0xaf,0x7e,0x01,0x91,0x67,0xef,0x60,0x49,0x90,0x9e,0x8e,0x12,0x43,0x6b,0x8b,0x1e,
58669 -0x8a,0x1f,0x89,0x20,0x75,0x21,0x02,0x7b,0x01,0x7a,0x01,0x79,0xa0,0x12,0x45,0x09,
58670 -0x90,0x9e,0x91,0x12,0x43,0x6b,0x8b,0x1e,0x8a,0x1f,0x89,0x20,0x90,0x9e,0x8e,0x12,
58671 -0x43,0x6b,0x12,0x29,0xd9,0xff,0xc4,0x54,0x0f,0xf5,0x21,0x7b,0x01,0x7a,0x01,0x79,
58672 -0xa2,0x12,0x45,0x09,0x90,0x01,0xaf,0x74,0xff,0xf0,0x90,0x01,0xcb,0xe0,0x64,0x80,
58673 -0xf0,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x9e,0x2f,0xe0,0x54,0xf0,0x44,0x03,0xf0,0x54,
58674 -0x0f,0x44,0x80,0xf0,0x7b,0x00,0x7a,0x00,0x79,0x13,0x90,0x9e,0x91,0x12,0x43,0x8b,
58675 -0x0b,0x7a,0x9e,0x79,0x2f,0x61,0xd4,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,
58676 -0x9d,0xee,0xf0,0xa3,0xef,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,0x9d,0xe0,0xfe,
58677 -0xa3,0xe0,0xf5,0x82,0x8e,0x83,0xe0,0x60,0x2d,0xc3,0x90,0x9e,0xa0,0xe0,0x94,0xe8,
58678 -0x90,0x9e,0x9f,0xe0,0x94,0x03,0x40,0x0b,0x90,0x01,0xc6,0xe0,0x44,0x10,0xf0,0x7f,
58679 -0x00,0x80,0x15,0x90,0x9e,0x9f,0xe4,0x75,0xf0,0x01,0x12,0x42,0x81,0x7f,0x0a,0x7e,
58680 -0x00,0x12,0x37,0x54,0x80,0xc5,0x7f,0x01,0xd0,0xd0,0x92,0xaf,0x22,0xac,0x07,0xec,
58681 +0x15,0x74,0x01,0x7e,0x00,0xa8,0x15,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,
58682 +0xf9,0xff,0xe5,0x14,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,
58683 +0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x06,0xe5,0x15,0x24,0x10,0x80,0x0a,0x05,0x15,
58684 +0xe5,0x15,0xb4,0x0c,0xcc,0x80,0x05,0xe4,0x90,0x9e,0x31,0xf0,0x90,0x9e,0x30,0xe0,
58685 +0xff,0x75,0xf0,0x09,0xe5,0x14,0x90,0x96,0x48,0x12,0x43,0x5f,0xef,0xf0,0x90,0x9e,
58686 +0x31,0xe0,0xfe,0x75,0xf0,0x09,0xe5,0x14,0x90,0x96,0x49,0x12,0x43,0x5f,0xee,0xf0,
58687 +0x74,0x84,0x25,0x14,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0xd3,0x9f,0x40,0x06,
58688 +0x90,0x9e,0x30,0x12,0x62,0x94,0x74,0x84,0x25,0x14,0xf5,0x82,0xe4,0x34,0x04,0xf5,
58689 +0x83,0xe0,0xff,0x90,0x9e,0x31,0xe0,0xfe,0xef,0xc3,0x9e,0x50,0x03,0x12,0x62,0x94,
58690 +0x90,0x9e,0x30,0xe0,0xff,0xd3,0x94,0x13,0x40,0x07,0x90,0x96,0x43,0x74,0x03,0xf0,
58691 +0x22,0xef,0xd3,0x94,0x0b,0x40,0x07,0x90,0x96,0x43,0x74,0x02,0xf0,0x22,0xef,0xd3,
58692 +0x94,0x03,0x40,0x07,0x90,0x96,0x43,0x74,0x01,0xf0,0x22,0xe4,0x90,0x96,0x43,0xf0,
58693 +0x22,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0x54,0x3f,0xfe,0xef,0x54,0x80,0xc4,0x13,
58694 +0x13,0x13,0x54,0x01,0xfd,0xaf,0x06,0x41,0x93,0x12,0x29,0xd9,0xf5,0x60,0x22,0x12,
58695 +0x29,0xd9,0x90,0x95,0x01,0xf0,0x22,0xad,0x07,0x74,0x11,0x2d,0xf5,0x82,0xe4,0x34,
58696 +0xfc,0xf5,0x83,0xe0,0x44,0x01,0xf0,0x90,0x04,0x80,0xe0,0x54,0x0f,0xfc,0x74,0x14,
58697 +0x2d,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xc0,0x4c,0xfd,0x74,0x14,0x2f,
58698 +0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xed,0xf0,0x22,0xef,0x60,0x0f,0x74,0x21,0x2d,
58699 +0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x10,0xf0,0x22,0x74,0x21,0x2d,0xf5,
58700 +0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xef,0xf0,0x22,0xe4,0xf5,0x60,0xf5,0x64,
58701 +0xf5,0x63,0x75,0x62,0x0c,0x75,0x61,0x0c,0x90,0x9e,0x66,0xf0,0x90,0x9e,0x64,0xf0,
58702 +0x90,0x9e,0x63,0xf0,0x90,0x9e,0x65,0x04,0xf0,0x90,0x9e,0x56,0xf0,0xe4,0x90,0x9e,
58703 +0x67,0xf0,0x90,0x9e,0x58,0xf0,0x90,0x9e,0x61,0x74,0x07,0xf0,0xe4,0x90,0x9e,0x57,
58704 +0xf0,0x90,0x9e,0x5f,0xf0,0xa3,0x74,0x03,0xf0,0x90,0x9e,0x5c,0x74,0x0a,0xf0,0xa3,
58705 +0x74,0x05,0xf0,0x90,0x9e,0x5b,0x74,0x14,0xf0,0x90,0x9e,0x62,0x74,0x05,0xf0,0xe4,
58706 +0x90,0x9e,0x5a,0xf0,0x90,0x9e,0x55,0xf0,0x90,0x9e,0x7f,0xf0,0x90,0x9e,0x5e,0xf0,
58707 +0x22,0xe4,0x90,0x9e,0x67,0xf0,0x90,0x9e,0x57,0xf0,0xf5,0x64,0x22,0x7f,0x00,0x22,
58708 +0xe5,0x62,0x30,0xe6,0x19,0xe5,0x62,0x54,0x0f,0xff,0x90,0x9e,0x54,0xe0,0xfe,0x4f,
58709 +0x90,0x01,0x2f,0xf0,0xee,0x64,0x80,0x90,0x9e,0x54,0xf0,0x53,0x62,0xbf,0x22,0xe5,
58710 +0x60,0x64,0x01,0x70,0x68,0xe5,0x63,0x60,0x64,0xe5,0x63,0x64,0x02,0x60,0x06,0xe5,
58711 +0x63,0x64,0x05,0x70,0x27,0x90,0x06,0xab,0xe0,0x90,0x9e,0x56,0xf0,0x90,0x06,0xaa,
58712 +0xe0,0x90,0x9e,0x65,0xf0,0x90,0x9e,0x56,0xe0,0x70,0x07,0x90,0x9e,0x65,0xe0,0xff,
58713 +0x80,0x05,0x90,0x9e,0x56,0xe0,0xff,0x90,0x9e,0x56,0xef,0xf0,0x90,0x9e,0x58,0xe0,
58714 +0x60,0x03,0xe0,0x14,0xf0,0xe4,0x90,0x9e,0x57,0xf0,0x90,0x05,0x58,0x74,0x03,0xf0,
58715 +0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x53,0x64,0xfd,0x53,0x64,
58716 +0xef,0xe5,0x63,0x14,0x24,0xfd,0x50,0x02,0x80,0x03,0x12,0x45,0x53,0x22,0xe4,0xfb,
58717 +0x90,0x9e,0x9c,0x12,0x2a,0x8b,0x00,0x00,0x00,0x00,0xe5,0x63,0x60,0x6a,0xe5,0x60,
58718 +0x64,0x01,0x70,0x64,0xe5,0x63,0x14,0x60,0x2b,0x24,0xfd,0x60,0x27,0x24,0x02,0x24,
58719 +0xfb,0x50,0x02,0x80,0x21,0x90,0x9e,0x56,0xe0,0x14,0xf0,0xe0,0x60,0x04,0xa3,0xe0,
58720 +0x60,0x14,0x90,0x9e,0x56,0xe0,0x70,0x08,0x90,0x9e,0x65,0xe0,0x90,0x9e,0x56,0xf0,
58721 +0x7b,0x01,0x80,0x02,0x7b,0x01,0xeb,0x60,0x2f,0x43,0x64,0x10,0xe4,0x90,0x9e,0x85,
58722 +0xf0,0x90,0x9e,0x57,0xe0,0x75,0xf0,0x03,0xa4,0xff,0x90,0x9e,0x61,0xe0,0x2f,0x12,
58723 +0x44,0x53,0x90,0x01,0x57,0x74,0x05,0xf0,0xe5,0x61,0x54,0x0f,0xc3,0x94,0x04,0x50,
58724 +0x07,0x7d,0x01,0x7f,0x04,0x12,0x54,0xe7,0x22,0xe4,0x90,0x9e,0x15,0xf0,0xe5,0x63,
58725 +0x60,0x79,0x90,0x9e,0x67,0xe0,0x60,0x0d,0xe4,0xf0,0x53,0x64,0xfd,0xe5,0x64,0x54,
58726 +0x07,0x70,0x68,0x80,0x63,0x90,0x9e,0x57,0xe0,0x04,0xf0,0x53,0x64,0xef,0x90,0x9e,
58727 +0x15,0xe0,0xf9,0xff,0x7e,0x00,0x24,0x01,0xfd,0xee,0x33,0xfc,0x90,0x9e,0x57,0xe0,
58728 +0xb5,0x05,0x06,0xe4,0xb5,0x04,0x02,0x80,0x12,0xef,0x24,0x02,0xff,0xe4,0x3e,0xfe,
58729 +0x90,0x9e,0x57,0xe0,0xb5,0x07,0x0a,0xe4,0xb5,0x06,0x06,0x90,0x05,0x58,0xe0,0x04,
58730 +0xf0,0xe9,0xff,0x90,0x9e,0x5c,0xe0,0x2f,0xff,0xe4,0x33,0xfe,0x90,0x9e,0x57,0xe0,
58731 +0xd3,0x9f,0xee,0x64,0x80,0xf8,0x74,0x80,0x98,0x40,0x0d,0xe5,0x60,0xb4,0x01,0x0b,
58732 +0xa3,0xe0,0x70,0x07,0xe0,0x04,0xf0,0x22,0x12,0x44,0xcb,0x22,0x90,0x9e,0x5f,0xe0,
58733 +0xa3,0xe0,0x90,0x05,0x58,0xf0,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,
58734 +0x93,0x12,0x43,0x8b,0x90,0x9e,0x96,0xe0,0x54,0xf0,0x44,0x06,0xff,0xf0,0xed,0x54,
58735 +0x0f,0xc4,0x54,0xf0,0xfe,0xef,0x54,0x0f,0x4e,0xf0,0x90,0x9e,0x93,0x12,0x43,0x6b,
58736 +0x90,0x9e,0x90,0x12,0x43,0x8b,0x7b,0x01,0x7a,0x9e,0x79,0x96,0x12,0x53,0xf1,0xd0,
58737 +0xd0,0x92,0xaf,0x22,0xe0,0xfd,0x74,0x26,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9d,0xf5,
58738 +0x83,0xed,0xf0,0xaf,0x14,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xef,0xc3,0x94,0x20,
58739 +0x50,0x0e,0x74,0x84,0x2f,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xed,0xf0,0x80,0x29,
58740 +0x74,0xa6,0x2f,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xed,0xf0,0x90,0x9e,0x68,0xef,
58741 +0xf0,0x24,0xa6,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x90,0x9e,0x69,0xf0,0x7b,
58742 +0x01,0x7a,0x9e,0x79,0x68,0x7d,0x02,0x51,0x57,0xd0,0xd0,0x92,0xaf,0x22,0x8f,0x0a,
58743 +0x8d,0x0b,0xe5,0x0b,0x54,0x1f,0xf5,0x10,0x74,0x01,0x2f,0xf5,0x82,0xe4,0x34,0x94,
58744 +0xf5,0x83,0xe0,0xf5,0x0e,0x90,0x04,0xfd,0xe0,0xb4,0x01,0x05,0x75,0x11,0x03,0x80,
58745 +0x03,0x75,0x11,0x01,0xeb,0xc3,0x95,0x11,0x40,0x04,0xaf,0x0a,0x80,0x33,0xe5,0x0e,
58746 +0x25,0x0d,0xf5,0x0f,0xe5,0x10,0x90,0x41,0xd6,0x93,0xff,0xe5,0x0f,0xd3,0x9f,0x74,
58747 +0x01,0x40,0x11,0x25,0x0a,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,0xf0,0xad,0x0b,
58748 +0xaf,0x0a,0x41,0xa5,0x25,0x0a,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe5,0x0f,0xf0,
58749 +0x22,0xad,0x07,0x75,0xf0,0x09,0xed,0x90,0x96,0x48,0x12,0x43,0x5f,0xe0,0xff,0x74,
58750 +0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xe0,0x54,0x1f,0xf5,0x12,0xd3,0x9f,
58751 +0x40,0x02,0x8f,0x12,0xe5,0x12,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,
58752 +0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xe5,0x12,0x25,0xe0,0x24,0x66,0xf5,0x82,
58753 +0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,
58754 +0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,
58755 +0xf0,0xa3,0xef,0xf0,0xaf,0x05,0xad,0x12,0x51,0xa5,0xaf,0x12,0x22,0xac,0x07,0xec,
58756 0xc3,0x94,0x20,0x50,0x0d,0x74,0x84,0x2c,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,
58757 0x80,0x0b,0x74,0xa6,0x2c,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x54,0x7f,0xf5,
58758 -0x64,0xe5,0x64,0x54,0x1f,0xff,0x90,0x9e,0x40,0xf0,0x75,0xf0,0x09,0xec,0x90,0x96,
58759 -0x49,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x42,0xf0,0x75,0xf0,0x09,0xec,0x90,0x96,0x48,
58760 -0x12,0x43,0x5f,0xe0,0xfe,0x90,0x9e,0x43,0xf0,0xec,0x25,0xe0,0x24,0xc6,0xf5,0x82,
58761 -0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x44,0xcb,0xf0,0xa3,0xeb,
58762 +0x1f,0xe5,0x1f,0x54,0x1f,0xff,0x90,0x9e,0x25,0xf0,0x75,0xf0,0x09,0xec,0x90,0x96,
58763 +0x49,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x27,0xf0,0x75,0xf0,0x09,0xec,0x90,0x96,0x48,
58764 +0x12,0x43,0x5f,0xe0,0xfe,0x90,0x9e,0x28,0xf0,0xec,0x25,0xe0,0x24,0xc6,0xf5,0x82,
58765 +0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x29,0xcb,0xf0,0xa3,0xeb,
58766 0xf0,0xec,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfb,0xa3,
58767 -0xe0,0x90,0x9e,0x46,0xcb,0xf0,0xa3,0xeb,0xf0,0xef,0xd3,0x9e,0x40,0x0a,0x90,0x9e,
58768 -0x43,0xe0,0x90,0x9e,0x40,0xf0,0xf5,0x64,0xed,0x70,0x02,0xc1,0x13,0x90,0x9e,0x41,
58769 -0xed,0xf0,0xe5,0x64,0x30,0xe6,0x0a,0x90,0x9e,0x40,0xe0,0xf5,0x64,0xa3,0xe0,0x14,
58770 -0xf0,0x90,0x9e,0x41,0xe0,0x70,0x02,0xc1,0x13,0x90,0x9e,0x40,0xe0,0xff,0xd3,0x94,
58771 -0x00,0x50,0x02,0xc1,0x13,0xe4,0x90,0x9e,0x3f,0xf0,0xef,0x14,0x90,0x9e,0x3e,0xf0,
58772 -0x90,0x9e,0x42,0xe0,0xfd,0x90,0x9e,0x3e,0xe0,0xff,0xd3,0x9d,0x40,0x6b,0xef,0x94,
58773 +0xe0,0x90,0x9e,0x2b,0xcb,0xf0,0xa3,0xeb,0xf0,0xef,0xd3,0x9e,0x40,0x0a,0x90,0x9e,
58774 +0x28,0xe0,0x90,0x9e,0x25,0xf0,0xf5,0x1f,0xed,0x70,0x02,0xa1,0x13,0x90,0x9e,0x26,
58775 +0xed,0xf0,0xe5,0x1f,0x30,0xe6,0x0a,0x90,0x9e,0x25,0xe0,0xf5,0x1f,0xa3,0xe0,0x14,
58776 +0xf0,0x90,0x9e,0x26,0xe0,0x70,0x02,0xa1,0x13,0x90,0x9e,0x25,0xe0,0xff,0xd3,0x94,
58777 +0x00,0x50,0x02,0xa1,0x13,0xe4,0x90,0x9e,0x24,0xf0,0xef,0x14,0x90,0x9e,0x23,0xf0,
58778 +0x90,0x9e,0x27,0xe0,0xfd,0x90,0x9e,0x23,0xe0,0xff,0xd3,0x9d,0x40,0x6b,0xef,0x94,
58779 0x10,0x40,0x21,0xef,0x24,0xf0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,
58780 -0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x46,0xe0,0x5e,0xfe,0xa3,0xe0,
58781 -0x5f,0x4e,0x70,0x27,0x90,0x9e,0x3e,0xe0,0xff,0xc3,0x94,0x10,0x50,0x33,0x74,0x01,
58782 +0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x2b,0xe0,0x5e,0xfe,0xa3,0xe0,
58783 +0x5f,0x4e,0x70,0x27,0x90,0x9e,0x23,0xe0,0xff,0xc3,0x94,0x10,0x50,0x33,0x74,0x01,
58784 0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,
58785 -0x9e,0x44,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x16,0x90,0x9e,0x3e,0xe0,0xf5,
58786 -0x64,0xa3,0xe0,0x04,0xf0,0x90,0x9e,0x41,0xe0,0xff,0x90,0x9e,0x3f,0xe0,0x6f,0x60,
58787 -0x08,0x90,0x9e,0x3e,0xe0,0x14,0xf0,0x80,0x87,0x90,0x9e,0x41,0xe0,0xff,0x90,0x9e,
58788 -0x3f,0xe0,0xc3,0x9f,0x50,0x0d,0x90,0x9e,0x3e,0xe0,0xb5,0x05,0x06,0x90,0x9e,0x42,
58789 -0xe0,0xf5,0x64,0xe5,0x64,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,
58790 -0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xe5,0x64,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,
58791 +0x9e,0x29,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x16,0x90,0x9e,0x23,0xe0,0xf5,
58792 +0x1f,0xa3,0xe0,0x04,0xf0,0x90,0x9e,0x26,0xe0,0xff,0x90,0x9e,0x24,0xe0,0x6f,0x60,
58793 +0x08,0x90,0x9e,0x23,0xe0,0x14,0xf0,0x80,0x87,0x90,0x9e,0x26,0xe0,0xff,0x90,0x9e,
58794 +0x24,0xe0,0xc3,0x9f,0x50,0x0d,0x90,0x9e,0x23,0xe0,0xb5,0x05,0x06,0x90,0x9e,0x27,
58795 +0xe0,0xf5,0x1f,0xe5,0x1f,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,
58796 +0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xe5,0x1f,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,
58797 0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,
58798 0x13,0xff,0xec,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,
58799 -0xa3,0xef,0xf0,0xaf,0x04,0xad,0x64,0x51,0x80,0xaf,0x64,0x22,0x8f,0x77,0x12,0x45,
58800 -0xa6,0xef,0x64,0x01,0x70,0x2e,0x90,0x9e,0x52,0x12,0x47,0xcc,0xe5,0x77,0x60,0x10,
58801 -0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x10,0xf0,0x80,0x0e,
58802 -0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xef,0xf0,0x90,0x04,
58803 -0x1f,0x74,0x20,0xf0,0x22,0x90,0x06,0x04,0xe0,0x54,0xbf,0xf0,0xef,0x60,0x09,0xe5,
58804 -0x22,0xb4,0x01,0x04,0xe4,0xff,0xd1,0x5c,0x53,0x23,0xf0,0x43,0x23,0x0c,0x22,0x90,
58805 -0x01,0x3c,0x74,0xff,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x01,0x34,0xf0,0xa3,0xf0,0xa3,
58806 -0xf0,0xa3,0xf0,0xfd,0x7f,0x54,0x12,0x4c,0xe3,0x7d,0xff,0x7f,0x55,0x12,0x4c,0xe3,
58807 -0x7d,0xff,0x7f,0x56,0x12,0x4c,0xe3,0x7d,0xff,0x7f,0x57,0x02,0x4c,0xe3,0x90,0x00,
58808 -0x02,0xe0,0x54,0xe0,0x7f,0x01,0x60,0x02,0x7f,0x00,0x22,0x90,0x00,0xf3,0xe0,0x7f,
58809 -0x00,0x30,0xe3,0x03,0x7f,0x01,0x22,0x22,0x90,0x01,0x64,0x74,0xa0,0xf0,0x22,0xc0,
58810 -0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,
58811 -0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x01,0xc4,0x74,
58812 -0xff,0xf0,0x74,0x5e,0xa3,0xf0,0x53,0x91,0xef,0x90,0x00,0x51,0xe0,0xff,0x90,0x00,
58813 -0x55,0xe0,0x5f,0xf5,0x3d,0xe5,0x3d,0x30,0xe6,0x18,0x74,0x40,0xf0,0x90,0x9e,0x1d,
58814 -0xe0,0x54,0x03,0xff,0xbf,0x03,0x0b,0x90,0x9e,0x1a,0xe0,0x60,0x05,0x7f,0x01,0x12,
58815 -0x4c,0xf8,0xe5,0x3d,0x30,0xe7,0x15,0x90,0x00,0x55,0x74,0x80,0xf0,0x90,0x9e,0x1d,
58816 -0xe0,0x54,0x03,0xff,0xbf,0x03,0x05,0x7f,0x02,0x12,0x4c,0xf8,0x90,0x01,0xc4,0x74,
58817 -0xff,0xf0,0x74,0x5e,0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,
58818 -0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,
58819 -0x32,0x8f,0x6b,0x8c,0x6c,0x8d,0x6d,0x22,0x8f,0x6e,0x8c,0x6f,0x8d,0x70,0x22,0xe4,
58820 -0xf5,0x22,0xf5,0x26,0xf5,0x25,0x75,0x24,0x0c,0x75,0x23,0x0c,0x90,0x9e,0x73,0xf0,
58821 -0x90,0x9e,0x71,0xf0,0x90,0x9e,0x70,0xf0,0x90,0x9e,0x72,0x04,0xf0,0x90,0x9e,0x64,
58822 -0xf0,0xe4,0x90,0x9e,0x74,0xf0,0x90,0x9e,0x66,0xf0,0x90,0x9e,0x6e,0x74,0x07,0xf0,
58823 -0xe4,0x90,0x9e,0x65,0xf0,0x90,0x9e,0x6c,0xf0,0xa3,0x74,0x02,0xf0,0x90,0x9e,0x6a,
58824 -0x14,0xf0,0xa3,0x74,0x03,0xf0,0x90,0x9e,0x69,0x74,0x14,0xf0,0x90,0x9e,0x6f,0x74,
58825 -0x05,0xf0,0xe4,0x90,0x9e,0x68,0xf0,0x90,0x9e,0x63,0xf0,0x90,0x9e,0x5f,0xf0,0x22,
58826 -0xe4,0x90,0x9e,0x74,0xf0,0x90,0x9e,0x65,0xf0,0xf5,0x26,0x22,0x8b,0x59,0x8a,0x5a,
58827 -0x89,0x5b,0x11,0x00,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x12,0x29,0xd9,0xf5,0x25,0x14,
58828 -0x60,0x0e,0x14,0x60,0x1e,0x14,0x60,0x2f,0x24,0x03,0x70,0x40,0x7f,0x01,0x80,0x3a,
58829 -0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x02,0x12,0x42,0x20,0xfd,0xe4,0xff,0x11,
58830 -0x6d,0x80,0x27,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x02,0x12,0x42,0x20,0xfd,
58831 -0x7f,0x01,0x11,0x6d,0x1f,0x80,0x13,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x02,
58832 -0x12,0x42,0x20,0xfd,0x7f,0x02,0x11,0x6d,0xe4,0xff,0x11,0x98,0x22,0xef,0x24,0xfe,
58833 -0x60,0x0b,0x04,0x70,0x22,0x90,0x9e,0x72,0x74,0x01,0xf0,0x80,0x16,0xed,0x70,0x0a,
58834 -0x90,0x9e,0x6f,0xe0,0x90,0x9e,0x72,0xf0,0x80,0x05,0x90,0x9e,0x72,0xed,0xf0,0x90,
58835 -0x9e,0x72,0xe0,0x90,0x9e,0x64,0xf0,0x22,0xef,0x64,0x01,0x70,0x2f,0x7d,0x7c,0x7f,
58836 -0x02,0x12,0x36,0x75,0x7d,0x02,0x7f,0x03,0x12,0x36,0x75,0x90,0x01,0x57,0xe4,0xf0,
58837 -0x90,0x01,0x3c,0x74,0x02,0xf0,0x12,0x47,0x2b,0xe4,0xff,0x31,0x1f,0x90,0x06,0x04,
58838 -0xe0,0x54,0x7f,0xf0,0x90,0x06,0x0a,0xe0,0x54,0xf8,0xf0,0x22,0x90,0x01,0x36,0x74,
58839 -0x7c,0xf0,0xa3,0x74,0x02,0xf0,0x7d,0x7c,0xff,0x12,0x36,0xe6,0x7d,0x02,0x7f,0x03,
58840 -0x12,0x36,0xe6,0x90,0x06,0x04,0xe0,0x44,0x80,0xf0,0x90,0x06,0x0a,0xe0,0x44,0x07,
58841 -0xf0,0x90,0x9e,0x6c,0xe0,0xa3,0xe0,0x90,0x05,0x58,0xf0,0xe5,0x22,0x30,0xe0,0x19,
58842 -0x90,0x9e,0x66,0xe0,0x70,0x18,0xe0,0x04,0xf0,0xe5,0x23,0x54,0x0f,0xc3,0x94,0x04,
58843 -0x50,0x0c,0x7d,0x01,0x7f,0x04,0x02,0x47,0x2f,0xe4,0x90,0x9e,0x66,0xf0,0x22,0xef,
58844 -0x60,0x0b,0x90,0x9e,0x60,0xe0,0xb4,0x01,0x10,0xe4,0xff,0x80,0x09,0x90,0x9e,0x60,
58845 -0xe0,0xb4,0x01,0x05,0x7f,0x01,0x12,0x77,0xd1,0x22,0x90,0x01,0x37,0x74,0x02,0xf0,
58846 -0x90,0x05,0x22,0x74,0xff,0xf0,0x31,0xc3,0xef,0x70,0x06,0x90,0x01,0xc8,0x74,0xfd,
58847 -0xf0,0x7d,0x02,0x7f,0x03,0x12,0x36,0xe6,0xe5,0x25,0x60,0x04,0x7f,0x01,0x31,0x1f,
58848 -0x51,0x04,0x53,0x23,0xf0,0x43,0x23,0x02,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
58849 -0x90,0x00,0x01,0x12,0x42,0x20,0x90,0x9e,0x73,0xf0,0x90,0x00,0x03,0x12,0x42,0x20,
58850 -0x90,0x9e,0x63,0xf0,0x12,0x29,0xd9,0x65,0x25,0x60,0x02,0x11,0x0c,0xd0,0xd0,0x92,
58851 -0xaf,0x22,0x7d,0x02,0x7f,0x03,0x12,0x36,0x75,0xe5,0x25,0x14,0x24,0xfd,0x50,0x02,
58852 -0x80,0x20,0x90,0x9e,0x73,0xe0,0x60,0x06,0x7d,0x01,0x7f,0x0c,0x80,0x0d,0xe5,0x23,
58853 -0x54,0x0f,0xc3,0x94,0x04,0x50,0x07,0x7d,0x01,0x7f,0x04,0x12,0x47,0x2f,0xe4,0xff,
58854 -0x31,0x1f,0x22,0xe4,0x90,0x9e,0xa9,0xf0,0xa3,0xf0,0x90,0x05,0xf8,0xe0,0x70,0x0f,
58855 -0xa3,0xe0,0x70,0x0b,0xa3,0xe0,0x70,0x07,0xa3,0xe0,0x70,0x03,0x7f,0x01,0x22,0xd3,
58856 -0x90,0x9e,0xaa,0xe0,0x94,0xe8,0x90,0x9e,0xa9,0xe0,0x94,0x03,0x40,0x03,0x7f,0x00,
58857 -0x22,0x7f,0x32,0x7e,0x00,0x12,0x37,0x54,0x90,0x9e,0xa9,0xe4,0x75,0xf0,0x01,0x12,
58858 -0x42,0x81,0x80,0xc6,0x7f,0x78,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xff,0x12,0x2a,
58859 -0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x27,0xde,0x90,0x9e,0x03,0x12,0x2a,0x7f,0x7f,0x00,
58860 -0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0x07,0x12,0x2a,0x7f,0x90,0x9e,0x60,0xe0,0x90,
58861 -0x9d,0xff,0xb4,0x01,0x0d,0x12,0x43,0x53,0xef,0x54,0xc7,0xff,0xed,0x54,0xc7,0xfd,
58862 -0x80,0x07,0x12,0x43,0x53,0xef,0x54,0xc7,0xff,0xec,0x90,0x80,0x85,0x12,0x2a,0x7f,
58863 -0x7f,0x78,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,0x03,0x12,0x43,0x53,0xef,0x54,0x0f,
58864 -0xff,0xec,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x2f,0xd9,0x90,
58865 -0x9e,0x07,0x12,0x43,0x53,0xef,0x44,0x02,0xff,0xec,0x90,0x80,0x85,0x12,0x2a,0x7f,
58866 -0x7f,0x00,0x7e,0x08,0x12,0x2f,0xd9,0x7f,0x70,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9e,
58867 -0x0b,0x12,0x2a,0x7f,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x1b,0x25,0xa0,0x7f,0x70,
58868 -0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x59,0x12,0x2a,0x8b,0x00,0x00,0x00,0x00,0xe4,
58869 -0xfd,0xff,0x12,0x34,0x81,0x90,0x9e,0x60,0xe0,0xb4,0x01,0x11,0x90,0x80,0x59,0x12,
58870 -0x2a,0x8b,0x00,0x00,0x00,0x00,0xe4,0xfd,0x7f,0x01,0x12,0x34,0x81,0x22,0x12,0x4b,
58871 -0xc4,0xef,0x64,0x01,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,0xf0,0x80,0x30,0x90,0x9e,
58872 -0x71,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x22,0x90,0x9e,0x70,0xe0,
58873 -0x60,0x08,0x90,0x01,0xb9,0x74,0x04,0xf0,0x80,0x14,0xe5,0x24,0x54,0x0f,0xd3,0x94,
58874 -0x04,0x40,0x08,0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,0x03,0x7f,0x01,0x22,0x90,0x01,
58875 -0xb8,0x74,0x08,0xf0,0x7f,0x00,0x22,0x12,0x4b,0xc4,0xef,0x64,0x01,0x60,0x08,0x90,
58876 -0x01,0xb9,0x74,0x01,0xf0,0x80,0x4a,0xe5,0x26,0x54,0x03,0x60,0x08,0x90,0x01,0xb9,
58877 -0x74,0x02,0xf0,0x80,0x3c,0xe5,0x24,0x54,0x0f,0xd3,0x94,0x02,0x40,0x08,0x90,0x01,
58878 -0xb9,0x74,0x04,0xf0,0x80,0x2b,0xe5,0x26,0x30,0xe2,0x08,0x90,0x01,0xb9,0x74,0x08,
58879 -0xf0,0x80,0x1e,0xe5,0x26,0x30,0xe4,0x08,0x90,0x01,0xb9,0x74,0x10,0xf0,0x80,0x11,
58880 -0x90,0x9e,0x66,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x20,0xf0,0x80,0x03,0x7f,0x01,
58881 -0x22,0x90,0x01,0xb8,0x74,0x04,0xf0,0x7f,0x00,0x22,0xe5,0x12,0x60,0x08,0x90,0x01,
58882 -0xb9,0x74,0x01,0xf0,0x80,0x5b,0xe5,0x24,0x54,0x0f,0xd3,0x94,0x01,0x40,0x08,0x90,
58883 -0x01,0xb9,0x74,0x02,0xf0,0x80,0x4a,0x90,0x02,0x87,0xe0,0x60,0x08,0x90,0x01,0xb9,
58884 -0x74,0x04,0xf0,0x80,0x3c,0x90,0x9e,0x5e,0xe0,0xb4,0x01,0x10,0x90,0x9e,0x4d,0xe0,
58885 -0xfe,0xa3,0xe0,0xf5,0x82,0x8e,0x83,0xe0,0x60,0x16,0x80,0x25,0x90,0x9e,0x5e,0xe0,
58886 -0x70,0x0e,0x90,0x01,0xaf,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,0x11,
58887 -0x90,0x9e,0x68,0xe0,0x70,0x08,0x90,0x01,0xb9,0x74,0x10,0xf0,0x80,0x03,0x7f,0x01,
58888 -0x22,0x90,0x01,0xb8,0x74,0x02,0xf0,0x7f,0x00,0x22,0x90,0x9e,0xae,0xef,0xf0,0x91,
58889 -0x03,0x90,0x9e,0xae,0xe0,0x60,0x05,0x90,0x05,0x22,0xe4,0xf0,0x53,0x23,0xf0,0x43,
58890 -0x23,0x04,0x22,0x90,0x9d,0xff,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
58891 +0xa3,0xef,0xf0,0xaf,0x04,0xad,0x1f,0x51,0xa5,0xaf,0x1f,0x22,0xad,0x07,0xed,0xc3,
58892 +0x94,0x20,0x50,0x0d,0x74,0x84,0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x80,
58893 +0x0b,0x74,0xa6,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x54,0x7f,0xf5,0x1f,
58894 +0xe5,0x1f,0x54,0x1f,0xfc,0x75,0xf0,0x09,0xed,0x90,0x96,0x48,0x12,0x43,0x5f,0xe0,
58895 +0xff,0x90,0x9e,0x23,0xf0,0xed,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,
58896 +0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x24,0xcb,0xf0,0xa3,0xeb,0xf0,0xed,0x25,0xe0,
58897 +0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x26,
58898 +0xcb,0xf0,0xa3,0xeb,0xf0,0xec,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,
58899 +0x83,0xe4,0x93,0xfa,0x74,0x01,0x93,0xfb,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,
58900 +0x34,0x95,0xf5,0x83,0xea,0xf0,0xa3,0xeb,0xf0,0xec,0xc3,0x9f,0x40,0x02,0xc1,0x7a,
58901 +0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xec,0xf0,0x04,0xfb,0x90,0x9e,
58902 +0x23,0xe0,0xff,0xeb,0xd3,0x9f,0x40,0x02,0xc1,0xab,0xeb,0xc3,0x94,0x10,0x40,0x21,
58903 +0xeb,0x24,0xf0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,
58904 +0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x24,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x70,
58905 +0x23,0xeb,0xc3,0x94,0x10,0x50,0x40,0x74,0x01,0x7e,0x00,0xa8,0x03,0x08,0x80,0x05,
58906 +0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x26,0xe0,0x5e,0xfe,0xa3,0xe0,
58907 +0x5f,0x4e,0x60,0x23,0xbb,0x11,0x09,0x90,0x9e,0x25,0xe0,0x30,0xe7,0x02,0x7b,0x17,
58908 +0xeb,0x64,0x13,0x60,0x03,0xbb,0x12,0x09,0x90,0x9e,0x24,0xe0,0x30,0xe0,0x02,0x7b,
58909 +0x18,0xac,0x03,0x8c,0x1f,0x80,0x34,0x0b,0x80,0x84,0x90,0x9e,0x23,0xe0,0xfb,0x6c,
58910 +0x70,0x69,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xec,0xf0,0x75,0xf0,
58911 +0x09,0xed,0x90,0x96,0x4a,0x12,0x43,0x5f,0xe0,0xb4,0x01,0x0c,0xe5,0x1f,0x20,0xe6,
58912 +0x07,0xec,0x44,0x40,0xf5,0x1f,0x80,0x03,0xaf,0x1f,0x22,0xec,0x25,0xe0,0x24,0x9e,
58913 +0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xec,0x25,
58914 +0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,
58915 +0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,
58916 +0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0x80,0x5b,0xec,0xd3,0x9b,0x40,0x56,
58917 +0x90,0x9e,0x23,0xe0,0xff,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xef,
58918 +0xf0,0xac,0x07,0x8f,0x1f,0xec,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,
58919 +0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xec,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,
58920 +0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,
58921 +0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,
58922 +0xa3,0xef,0xf0,0xaf,0x1f,0x22,0x74,0x01,0x2d,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,
58923 +0xe4,0xf0,0xaf,0x05,0xe5,0x1f,0x44,0x80,0xfd,0x51,0xa5,0xe5,0x1f,0x44,0x80,0xff,
58924 +0x22,0xef,0xc3,0x94,0x20,0x50,0x39,0xef,0x30,0xe0,0x17,0xed,0xc4,0x54,0xf0,0xfd,
58925 +0xef,0xc3,0x13,0xfe,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,0x0f,
58926 +0x80,0x10,0xef,0xc3,0x13,0xfe,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,
58927 +0x54,0xf0,0xf0,0x74,0xa4,0x2e,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x4d,0xf0,
58928 +0x22,0xe4,0xf5,0x14,0xe5,0x14,0xb4,0x20,0x14,0x90,0x9a,0xc5,0xe0,0x04,0xf0,0x90,
58929 +0x95,0x01,0xe0,0xff,0x90,0x9a,0xc5,0xe0,0xb5,0x07,0x02,0xe4,0xf0,0x75,0xf0,0x09,
58930 +0xe5,0x14,0x90,0x96,0x4b,0x12,0x43,0x5f,0xe0,0x64,0x01,0x60,0x03,0x02,0x6e,0x6a,
58931 +0xe5,0x14,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe0,0xfe,0xa3,
58932 +0xe0,0xd3,0x94,0x00,0xee,0x94,0x00,0x50,0x03,0x02,0x6e,0x6a,0xe5,0x14,0x94,0x20,
58933 +0x40,0x09,0x90,0x9a,0xc5,0xe0,0x60,0x03,0x02,0x6e,0x76,0xe5,0x14,0x75,0xf0,0x0a,
58934 +0xa4,0x24,0x00,0xf9,0x74,0x90,0x35,0xf0,0x75,0x18,0x01,0xf5,0x19,0x89,0x1a,0xe5,
58935 +0x14,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe0,0xff,0xa3,0xe0,
58936 +0x90,0x9e,0x1b,0xcf,0xf0,0xa3,0xef,0xf0,0xe5,0x14,0x25,0xe0,0x24,0xc4,0xf5,0x82,
58937 +0xe4,0x34,0x98,0xf5,0x83,0xe0,0xff,0xa3,0xe0,0x90,0x9e,0x1d,0xcf,0xf0,0xa3,0xef,
58938 +0xf0,0xe5,0x14,0xc3,0x94,0x20,0x50,0x14,0x74,0x84,0x25,0x14,0xf5,0x82,0xe4,0x34,
58939 +0x04,0xf5,0x83,0xe0,0x54,0x3f,0x90,0x9e,0x19,0xf0,0x80,0x12,0x74,0xa6,0x25,0x14,
58940 +0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x54,0x3f,0x90,0x9e,0x19,0xf0,0x90,0x9e,
58941 +0x19,0xe0,0xfe,0x54,0x1f,0xa3,0xf0,0x75,0xf0,0x09,0xe5,0x14,0x90,0x96,0x48,0x12,
58942 +0x43,0x5f,0xe0,0x90,0x9e,0x20,0xf0,0x74,0xe6,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9c,
58943 +0xf5,0x83,0xe0,0xc3,0x94,0x05,0x40,0x02,0x41,0x9f,0x90,0x9e,0x20,0xe0,0xff,0x90,
58944 +0x9e,0x1a,0xe0,0x9f,0x40,0x13,0x90,0x9e,0x20,0xe0,0x90,0x9e,0x1a,0xf0,0xee,0x54,
58945 +0x40,0xfe,0x90,0x9e,0x19,0xf0,0xef,0x4e,0xf0,0x90,0x04,0xfd,0xe0,0x54,0x05,0x64,
58946 +0x01,0x70,0x29,0x90,0x9e,0x1a,0xe0,0xff,0x90,0x41,0x4a,0x93,0xfe,0x74,0x44,0x25,
58947 +0x14,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xc3,0x9e,0x40,0x06,0xef,0x90,0x40,
58948 +0xda,0x80,0x30,0x90,0x9e,0x1a,0xe0,0x90,0x40,0xf6,0x80,0x27,0x90,0x9e,0x1a,0xe0,
58949 +0xff,0x90,0x41,0x4a,0x93,0xfe,0x74,0x44,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9a,0xf5,
58950 +0x83,0xe0,0xc3,0x9e,0x40,0x06,0xef,0x90,0x41,0x12,0x80,0x07,0x90,0x9e,0x1a,0xe0,
58951 +0x90,0x41,0x2e,0x93,0x90,0x9e,0x1f,0xf0,0x90,0x9e,0x1f,0xe0,0x75,0xf0,0x06,0xa4,
58952 +0x24,0x50,0xf9,0x74,0x40,0x35,0xf0,0xfa,0x7b,0xff,0x8b,0x15,0xf5,0x16,0x89,0x17,
58953 +0xe5,0x14,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xf5,0x1b,
58954 +0xa3,0xe0,0xf5,0x1c,0x12,0x29,0xd9,0xff,0x7e,0x00,0xab,0x18,0xaa,0x19,0xa9,0x1a,
58955 +0x12,0x42,0x97,0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,
58956 +0x1b,0xf5,0x1b,0xab,0x15,0xaa,0x16,0xa9,0x17,0x90,0x00,0x01,0x12,0x42,0x20,0xff,
58957 +0x7e,0x00,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,0x02,0x12,0x42,0xc2,0xfd,0xac,
58958 +0xf0,0x12,0x29,0xf2,0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,0xf5,0x1b,0xab,0x15,
58959 +0xaa,0x16,0xa9,0x17,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0x7e,0x00,0xab,0x18,0xaa,
58960 +0x19,0xa9,0x1a,0x90,0x00,0x04,0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,
58961 +0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,0xf5,0x1b,0xab,0x15,0xaa,0x16,0xa9,0x17,0x90,
58962 +0x00,0x03,0x12,0x42,0x20,0xff,0x7e,0x00,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,
58963 +0x06,0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,0x25,0x1c,0xf5,0x1c,0xee,
58964 +0x35,0x1b,0xf5,0x1b,0xab,0x15,0xaa,0x16,0xa9,0x17,0x90,0x00,0x04,0x12,0x42,0x20,
58965 +0xff,0x7e,0x00,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,0x08,0x12,0x42,0xc2,0xfd,
58966 +0xac,0xf0,0x12,0x29,0xf2,0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,0xf5,0x1b,0xab,
58967 +0x15,0xaa,0x16,0xa9,0x17,0x90,0x00,0x05,0x12,0x42,0x20,0xff,0x7e,0x00,0x90,0x9e,
58968 +0x1b,0xe0,0xfc,0xa3,0xe0,0xfd,0x12,0x29,0xf2,0xd3,0xe5,0x1c,0x9f,0xe5,0x1b,0x9e,
58969 +0x40,0x0c,0xe5,0x1c,0x9f,0xf5,0x1c,0xe5,0x1b,0x9e,0xf5,0x1b,0x80,0x05,0xe4,0xf5,
58970 +0x1b,0xf5,0x1c,0xe5,0x14,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,
58971 +0xe5,0x1b,0xf0,0xa3,0xe5,0x1c,0xf0,0x90,0x9e,0x19,0xe0,0x25,0xe0,0x24,0x66,0xf5,
58972 +0x82,0xe4,0x34,0x41,0xf5,0x83,0xc3,0x74,0x01,0x93,0x95,0x1c,0xe4,0x93,0x95,0x1b,
58973 +0x50,0x07,0xaf,0x14,0x12,0x65,0x5c,0xa1,0x31,0x90,0x9e,0x19,0xe0,0x25,0xe0,0x24,
58974 +0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xd3,0x74,0x01,0x93,0x95,0x1c,0xe4,0x93,
58975 +0x95,0x1b,0x50,0x02,0xa1,0x31,0x7d,0x01,0xaf,0x14,0x12,0x63,0xbd,0xa1,0x31,0x74,
58976 +0xe6,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xfc,0x64,0x05,0x60,0x02,
58977 +0x81,0x3a,0x90,0x96,0x43,0xe0,0xff,0xb4,0x03,0x0b,0x90,0x9e,0x1a,0xe0,0xc3,0x94,
58978 +0x19,0x40,0x3d,0x80,0x2e,0xef,0xb4,0x02,0x0b,0x90,0x9e,0x1a,0xe0,0xc3,0x94,0x11,
58979 +0x40,0x2e,0x80,0x1f,0x90,0x96,0x43,0xe0,0xff,0xb4,0x01,0x0b,0x90,0x9e,0x1a,0xe0,
58980 +0xc3,0x94,0x0a,0x40,0x1b,0x80,0x0c,0xef,0x70,0x11,0x90,0x9e,0x1a,0xe0,0xc3,0x94,
58981 +0x03,0x40,0x0d,0x90,0x9a,0x84,0x74,0x01,0xf0,0x80,0x05,0xe4,0x90,0x9a,0x84,0xf0,
58982 +0x74,0x84,0x25,0x14,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x1e,0x74,0x44,
58983 +0x25,0x14,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xff,0xc3,0x94,0x30,0x50,0x02,
58984 +0x61,0xe7,0x90,0x9a,0x84,0xe0,0x64,0x01,0x60,0x02,0x61,0xe7,0x74,0x85,0x25,0x14,
58985 +0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0x64,0x0a,0x60,0x51,0xef,0x24,0x05,0xff,
58986 +0xe4,0x33,0xfe,0x74,0x41,0x25,0x14,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe0,0xfd,
58987 +0xd3,0x9f,0xee,0x64,0x80,0xf8,0x74,0x80,0x98,0x50,0x32,0xed,0x24,0x05,0xff,0xe4,
58988 +0x33,0xfe,0x74,0x44,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xd3,0x9f,
58989 +0xee,0x64,0x80,0xf8,0x74,0x80,0x98,0x50,0x14,0x74,0x26,0x25,0x14,0xf5,0x82,0xe4,
58990 +0x34,0x9d,0xf5,0x83,0xe0,0xff,0x90,0x9e,0x1a,0xe0,0x6f,0x60,0x3d,0x74,0x44,0x25,
58991 +0x14,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xff,0xd3,0x94,0x42,0x40,0x05,0x75,
58992 +0x1e,0x05,0x80,0x0e,0xef,0xd3,0x94,0x39,0x40,0x05,0x75,0x1e,0x03,0x80,0x03,0x75,
58993 +0x1e,0x01,0x74,0x41,0x25,0x14,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xef,0xf0,0x74,
58994 +0x85,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9a,0x80,0x29,0x74,0xe6,0x25,0x14,0xf5,0x82,
58995 +0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x74,0x85,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9a,
58996 +0xf5,0x83,0xe0,0x04,0xf0,0x80,0x10,0xe4,0xf5,0x1e,0x74,0xe6,0x25,0x14,0xf5,0x82,
58997 +0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x90,0x9e,0x1a,0xe0,0xff,0x74,0x26,0x25,0x14,
58998 +0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xef,0xf0,0x74,0x84,0x25,0x14,0xf5,0x82,0xe4,
58999 +0x34,0x98,0xf5,0x83,0xe5,0x1e,0xf0,0x75,0xf0,0x09,0xe5,0x14,0x90,0x96,0x4c,0x12,
59000 +0x43,0x5f,0xe0,0xb4,0x01,0x10,0xe4,0xf5,0x1e,0x74,0xe6,0x25,0x14,0xf5,0x82,0xe4,
59001 +0x34,0x9c,0xf5,0x83,0xe4,0xf0,0xad,0x1e,0xa1,0x2c,0xec,0x64,0x06,0x60,0x02,0xa1,
59002 +0x31,0xf5,0x1b,0xf5,0x1c,0x90,0x42,0x13,0x93,0xff,0x7e,0x00,0x90,0x9e,0x1b,0xe0,
59003 +0xfc,0xa3,0xe0,0xfd,0x12,0x29,0xf2,0x90,0x9e,0x21,0xee,0xf0,0xa3,0xef,0xf0,0x74,
59004 +0x84,0x25,0x14,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x1e,0xe4,0xf5,0x1d,
59005 +0xab,0x18,0xaa,0x19,0xa9,0x1a,0x75,0xf0,0x02,0xe5,0x1d,0xa4,0xf5,0x82,0x85,0xf0,
59006 +0x83,0x12,0x42,0xc2,0xfd,0xac,0xf0,0xe5,0x1d,0x90,0x42,0x0e,0x93,0xff,0x7e,0x00,
59007 +0x12,0x29,0xf2,0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,0xf5,0x1b,0xc3,0x90,0x9e,
59008 +0x22,0xe0,0x95,0x1c,0x90,0x9e,0x21,0xe0,0x95,0x1b,0x40,0x07,0x05,0x1d,0xe5,0x1d,
59009 +0xb4,0x05,0xbd,0xe5,0x1d,0xc3,0x13,0xf5,0x1d,0xe5,0x1e,0xb4,0x01,0x06,0xe5,0x1d,
59010 +0x70,0x46,0x80,0x13,0xe5,0x1e,0xb4,0x03,0x15,0xe5,0x1d,0x70,0x05,0x75,0x1e,0x03,
59011 +0x80,0x39,0xe5,0x1d,0xb4,0x01,0x05,0x75,0x1e,0x01,0x80,0x2f,0x80,0x2a,0xe5,0x1e,
59012 +0xb4,0x05,0x28,0xe5,0x1d,0x70,0x05,0x75,0x1e,0x05,0x80,0x0d,0xe5,0x1d,0xb4,0x01,
59013 +0x05,0x75,0x1e,0x03,0x80,0x03,0x75,0x1e,0x01,0xd3,0x90,0x9e,0x1e,0xe0,0x94,0x03,
59014 +0x90,0x9e,0x1d,0xe0,0x94,0x00,0x40,0x03,0xe4,0xf5,0x1e,0xd3,0x90,0x9e,0x1e,0xe0,
59015 +0x94,0x03,0x90,0x9e,0x1d,0xe0,0x94,0x00,0x40,0x03,0xe4,0xf5,0x1e,0x74,0x84,0x25,
59016 +0x14,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe5,0x1e,0xf0,0xfd,0xaf,0x14,0x12,0x67,
59017 +0x61,0x74,0xe6,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xd3,0x94,0x05,
59018 +0x74,0xe6,0x50,0x0e,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x04,0xf0,
59019 +0x80,0x0b,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x90,0x9e,0x1d,
59020 +0xe0,0xfe,0xa3,0xe0,0xff,0xc3,0x74,0xff,0x9f,0xfd,0x74,0xff,0x9e,0xfc,0xe5,0x14,
59021 +0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xfa,0xa3,0xe0,0xd3,
59022 +0x9d,0xea,0x9c,0xe5,0x14,0x50,0x13,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9a,
59023 +0xf5,0x83,0xee,0x8f,0xf0,0x12,0x42,0x81,0x80,0x10,0x25,0xe0,0x24,0xc6,0xf5,0x82,
59024 +0xe4,0x34,0x9a,0xf5,0x83,0x74,0xff,0xf0,0xa3,0xf0,0xe5,0x14,0x25,0xe0,0x24,0x44,
59025 +0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0xff,0xc3,0x74,0xff,0x9f,
59026 +0xfd,0x74,0xff,0x9e,0xfc,0xe5,0x14,0x25,0xe0,0x24,0x46,0xf5,0x82,0xe4,0x34,0x9b,
59027 +0xf5,0x83,0xe0,0xfa,0xa3,0xe0,0xd3,0x9d,0xea,0x9c,0xe5,0x14,0x50,0x13,0x25,0xe0,
59028 +0x24,0x46,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xee,0x8f,0xf0,0x12,0x42,0x81,0x80,
59029 +0x10,0x25,0xe0,0x24,0x46,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xff,0xf0,0xa3,
59030 +0xf0,0xab,0x18,0xaa,0x19,0xa9,0x1a,0xe4,0xf5,0xf0,0x12,0x42,0xfa,0xab,0x18,0xaa,
59031 +0x19,0xa9,0x1a,0x90,0x00,0x02,0xe4,0xf5,0xf0,0x12,0x43,0x19,0x90,0x00,0x04,0xe4,
59032 +0xf5,0xf0,0x12,0x43,0x19,0x90,0x00,0x06,0xe4,0xf5,0xf0,0x12,0x43,0x19,0x90,0x00,
59033 +0x08,0xe4,0xf5,0xf0,0x12,0x43,0x19,0xe5,0x14,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,
59034 +0x34,0x93,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xe5,0x14,0x25,0xe0,0x24,0xc4,0xf5,0x82,
59035 +0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xe5,0x14,0x25,0xe0,0x24,0x44,0xf5,
59036 +0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0x05,0x14,0xe5,0x14,0xc3,0x94,
59037 +0x40,0x50,0x03,0x02,0x67,0xa4,0x22,0x90,0x04,0x44,0x74,0x11,0xf0,0xa3,0x74,0xf0,
59038 +0xf0,0xa3,0x74,0x0f,0xf0,0xa3,0xe4,0xf0,0xfd,0x74,0xa4,0x2d,0xf5,0x82,0xe4,0x34,
59039 +0x04,0xf5,0x83,0xe4,0xf0,0x0d,0xbd,0x10,0xf0,0xe4,0x90,0x9a,0xc5,0xf0,0x90,0x95,
59040 +0x01,0x04,0xf0,0xe4,0xfd,0x75,0xf0,0x0a,0xed,0x90,0x90,0x00,0x12,0x43,0x5f,0xe4,
59041 +0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x02,0x12,0x43,0x5f,0xe4,0xf0,0xa3,
59042 +0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x04,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,
59043 +0xf0,0x0a,0xed,0x90,0x90,0x06,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,
59044 +0xed,0x90,0x90,0x08,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x74,0x26,0x2d,0xf5,0x82,
59045 +0xe4,0x34,0x9d,0xf5,0x83,0x74,0x13,0xf0,0x74,0x85,0x2d,0xf5,0x82,0xe4,0x34,0x9a,
59046 +0xf5,0x83,0xe4,0xf0,0x74,0x84,0x2d,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,
59047 +0xed,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,
59048 +0xed,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,
59049 +0xed,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,
59050 +0xed,0x25,0xe0,0x24,0x44,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,
59051 +0xed,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,
59052 +0xed,0x25,0xe0,0x24,0x46,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,
59053 +0x74,0x86,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x74,0x46,0x2d,0xf5,
59054 +0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x74,0xe6,0x2d,0xf5,0x82,0xe4,0x34,0x9c,
59055 +0xf5,0x83,0xe4,0xf0,0x90,0x41,0xc4,0x93,0xfe,0x74,0x01,0x93,0xff,0x90,0x41,0x8c,
59056 +0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,
59057 +0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0x75,
59058 +0xf0,0x09,0xed,0x90,0x96,0x4b,0x12,0x43,0x5f,0x74,0x01,0xf0,0x75,0xf0,0x09,0xed,
59059 +0x90,0x96,0x4a,0x12,0x43,0x5f,0x74,0x01,0xf0,0x74,0x82,0x2d,0xf5,0x82,0xe4,0x34,
59060 +0x95,0xf5,0x83,0x74,0x0c,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x46,0x12,0x43,0x5f,
59061 +0x74,0xff,0xf0,0xa3,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x44,0x12,0x43,0x5f,0xe4,
59062 +0xf0,0xa3,0x74,0x0f,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x48,0x12,0x43,0x5f,0x74,
59063 +0x13,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x49,0x12,0x43,0x5f,0xe4,0xf0,0xed,0xc3,
59064 +0x94,0x20,0x50,0x0f,0x74,0x84,0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0x74,0x13,
59065 +0xf0,0x80,0x0d,0x74,0xa6,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0x74,0x13,0xf0,
59066 +0x0d,0xed,0x64,0x40,0x60,0x03,0x02,0x6e,0xa5,0x22,0x12,0x29,0xd9,0xf5,0x14,0xc3,
59067 +0x94,0x40,0x50,0x15,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0x74,0x44,0x25,0x14,0xf5,
59068 +0x82,0xe4,0x34,0x9a,0xf5,0x83,0xef,0xf0,0x22,0xe5,0x14,0xb4,0x40,0x0a,0x90,0x00,
59069 +0x02,0x12,0x42,0x20,0x90,0x96,0x42,0xf0,0x22,0x90,0x9e,0x30,0x12,0x43,0x8b,0x90,
59070 +0x9e,0x33,0xe0,0x54,0xf0,0x44,0x02,0xf0,0x54,0x0f,0x44,0xc0,0xf0,0x90,0x9e,0x30,
59071 +0x12,0x43,0x6b,0x90,0x9e,0x90,0x12,0x43,0x8b,0x7b,0x01,0x7a,0x9e,0x79,0x33,0x02,
59072 +0x53,0xf1,0x90,0x00,0x02,0x12,0x42,0x20,0xfd,0x90,0x00,0x01,0x12,0x42,0x20,0xfc,
59073 +0xed,0xc3,0x94,0x40,0x40,0x02,0xe4,0xfd,0xec,0xc3,0x94,0x40,0x40,0x02,0xe4,0xfc,
59074 +0xed,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xfa,0xa3,0xe0,
59075 +0xfb,0xea,0x90,0x9e,0x24,0xf0,0xeb,0xa3,0xf0,0xed,0x25,0xe0,0x24,0x46,0xf5,0x82,
59076 +0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfa,0xa3,0xe0,0xfb,0xea,0x90,0x9e,0x26,0xf0,0xeb,
59077 +0xa3,0xf0,0xa3,0xed,0xf0,0xa3,0x74,0xff,0xf0,0xec,0x25,0xe0,0x24,0xc6,0xf5,0x82,
59078 +0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xfa,0xa3,0xe0,0xfb,0xea,0x90,0x9e,0x2a,0xf0,0xeb,
59079 +0xa3,0xf0,0xec,0x25,0xe0,0x24,0x46,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfa,
59080 +0xa3,0xe0,0xfb,0xea,0x90,0x9e,0x2c,0xf0,0xeb,0xa3,0xf0,0xa3,0xec,0xf0,0xa3,0x74,
59081 +0xff,0xf0,0xed,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe4,0xf0,
59082 +0xa3,0xf0,0xed,0x25,0xe0,0x24,0x46,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe4,0xf0,
59083 +0xa3,0xf0,0xec,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe4,0xf0,
59084 +0xa3,0xf0,0xec,0x25,0xe0,0x24,0x46,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe4,0xf0,
59085 +0xa3,0xf0,0x7b,0x01,0x7a,0x9e,0x79,0x24,0x01,0x79,0xd3,0x10,0xaf,0x01,0xc3,0xc0,
59086 +0xd0,0x90,0x9e,0xa4,0xee,0xf0,0xa3,0xef,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,
59087 +0xa4,0xe0,0xfe,0xa3,0xe0,0xf5,0x82,0x8e,0x83,0xe0,0x60,0x2d,0xc3,0x90,0x9e,0xa7,
59088 +0xe0,0x94,0xe8,0x90,0x9e,0xa6,0xe0,0x94,0x03,0x40,0x0b,0x90,0x01,0xc6,0xe0,0x44,
59089 +0x10,0xf0,0x7f,0x00,0x80,0x15,0x90,0x9e,0xa6,0xe4,0x75,0xf0,0x01,0x12,0x42,0x81,
59090 +0x7f,0x0a,0x7e,0x00,0x12,0x37,0x54,0x80,0xc5,0x7f,0x01,0xd0,0xd0,0x92,0xaf,0x22,
59091 +0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x24,0x12,0x2a,0x8b,0x00,0x00,0x00,
59092 +0x00,0x90,0x00,0x01,0x12,0x42,0x20,0x90,0x9e,0x66,0xf0,0x90,0x00,0x03,0x12,0x42,
59093 +0x20,0x90,0x9e,0x55,0xf0,0x12,0x56,0x22,0x90,0x01,0xe5,0xe5,0x63,0xf0,0x90,0x9e,
59094 +0x66,0xe0,0x90,0x01,0xe6,0xf0,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x00,0x02,0x12,0x42,
59095 +0x20,0xff,0x30,0xe0,0x25,0x12,0x29,0xd9,0x90,0x9e,0x5c,0xf0,0x90,0x00,0x01,0x12,
59096 +0x42,0x20,0x90,0x9e,0x5d,0xf0,0xef,0xc3,0x13,0x54,0x7f,0x90,0x9e,0x5b,0xf0,0x90,
59097 +0x00,0x03,0x12,0x42,0x20,0x90,0x9e,0x62,0xf0,0x22,0x90,0x9e,0x5c,0x74,0x0a,0xf0,
59098 +0x90,0x9e,0x5d,0x74,0x05,0xf0,0x90,0x9e,0x5b,0x74,0x14,0xf0,0x90,0x9e,0x62,0x74,
59099 +0x05,0xf0,0x22,0x12,0x29,0xd9,0x30,0xe0,0x19,0xc3,0x13,0x54,0x7f,0x90,0x9e,0x61,
59100 +0xf0,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0x90,0x9e,0x5f,0xe4,0xf0,0xa3,0xef,0xf0,
59101 +0x80,0x0f,0x90,0x9e,0x61,0x74,0x07,0xf0,0x90,0x9e,0x5f,0xe4,0xf0,0xa3,0x74,0x03,
59102 +0xf0,0x90,0x9e,0x5f,0xe0,0xa3,0xe0,0x90,0x05,0x58,0xf0,0x22,0x90,0x9e,0x24,0x12,
59103 +0x2a,0x8b,0x00,0x00,0x00,0x00,0x12,0x29,0xd9,0x60,0x0d,0x90,0x9e,0x5e,0xf0,0xe4,
59104 +0xfd,0x7f,0x04,0x12,0x54,0xe7,0x80,0x05,0xe4,0x90,0x9e,0x5e,0xf0,0x90,0x9e,0x5e,
59105 +0xe0,0x90,0x01,0xe7,0xf0,0x22,0x90,0x02,0x09,0xe0,0xfd,0x12,0x29,0xd9,0xfe,0xaf,
59106 +0x05,0xed,0x2e,0x90,0x9e,0x78,0xf0,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0xed,0x2f,
59107 +0x90,0x9e,0x79,0xf0,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0xed,0x2f,0x90,0x9e,0x7a,
59108 +0xf0,0x90,0x00,0x03,0x12,0x42,0x20,0xff,0xed,0x2f,0x90,0x9e,0x7b,0xf0,0x90,0x00,
59109 +0x04,0x12,0x42,0x20,0xff,0xae,0x05,0xed,0x2f,0x90,0x9e,0x7c,0xf0,0x22,0xd3,0x10,
59110 +0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x24,0x12,0x43,0x8b,0x90,0x9e,0x24,0x12,0x43,
59111 +0x6b,0x90,0x00,0x01,0x12,0x42,0xc2,0xfa,0xe5,0xf0,0x24,0x00,0xff,0xe4,0x3a,0xfe,
59112 +0x90,0x9e,0x24,0x12,0x43,0x6b,0x90,0x00,0x01,0xee,0x8f,0xf0,0x12,0x43,0x19,0x12,
59113 +0x29,0xd9,0xff,0x60,0x2d,0xb5,0x65,0x16,0x90,0x9e,0x24,0x12,0x43,0x6b,0x90,0x00,
59114 +0x01,0x12,0x42,0xc2,0x65,0x67,0x70,0x04,0xe5,0x66,0x65,0xf0,0x60,0x24,0x90,0x9e,
59115 +0x24,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,0xc2,0xff,0xae,0xf0,0x12,0x4e,0x37,
59116 +0x80,0x10,0x90,0x9e,0x24,0x12,0x43,0x6b,0x12,0x29,0xd9,0x65,0x65,0x60,0x03,0x12,
59117 +0x44,0xc2,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x06,0x34,0x74,0xff,0xf0,0xe4,0xa3,0xf0,
59118 +0xa3,0xf0,0xa3,0xf0,0x22,0x90,0x06,0x34,0xe0,0x60,0x24,0x14,0x70,0x1a,0x7b,0x01,
59119 +0x7a,0x06,0x79,0x35,0x7f,0xf9,0x7e,0x01,0x71,0xb0,0xbf,0x01,0x09,0x90,0x06,0x35,
59120 +0xe0,0x54,0x0f,0xf0,0x80,0x04,0x80,0x00,0x80,0xcd,0xe4,0x90,0x06,0x34,0xf0,0x22,
59121 +0x8e,0x14,0x8f,0x15,0x8b,0x16,0x8a,0x17,0x89,0x18,0xe4,0x90,0x9e,0x19,0xf0,0xef,
59122 +0x90,0x00,0x31,0xf0,0x12,0x4d,0x45,0xe5,0x14,0x54,0x03,0xff,0x90,0x00,0x32,0xe0,
59123 +0x54,0xfc,0x4f,0xf0,0x12,0x4d,0x45,0x90,0x00,0x33,0xe0,0x54,0x7f,0xf0,0x12,0x4d,
59124 +0x45,0x90,0x00,0x33,0xe0,0x20,0xe7,0x0e,0x90,0x9e,0x19,0xe0,0xc3,0x94,0x64,0x50,
59125 +0x05,0xe0,0x04,0xf0,0x80,0xeb,0x90,0x9e,0x19,0xe0,0xc3,0x94,0x64,0x50,0x10,0x90,
59126 +0x00,0x30,0xe0,0xab,0x16,0xaa,0x17,0xa9,0x18,0x12,0x42,0x4d,0x7f,0x01,0x22,0x7f,
59127 +0x00,0x22,0xe4,0x90,0x9e,0xac,0xf0,0xa3,0xf0,0x90,0x05,0xf8,0xe0,0x70,0x0f,0xa3,
59128 +0xe0,0x70,0x0b,0xa3,0xe0,0x70,0x07,0xa3,0xe0,0x70,0x03,0x7f,0x01,0x22,0xd3,0x90,
59129 +0x9e,0xad,0xe0,0x94,0xe8,0x90,0x9e,0xac,0xe0,0x94,0x03,0x40,0x03,0x7f,0x00,0x22,
59130 +0x7f,0x32,0x7e,0x00,0x12,0x37,0x54,0x90,0x9e,0xac,0xe4,0x75,0xf0,0x01,0x12,0x42,
59131 +0x81,0x80,0xc6,0x90,0x9d,0xff,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
59132 0x78,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,0x03,0x12,0x43,0x53,0x90,0x80,0x85,0x12,
59133 0x2a,0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x2f,0xd9,0x90,0x9e,0x07,0x12,0x43,0x53,0x90,
59134 0x80,0x85,0x12,0x2a,0x7f,0x7f,0x00,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,0x0b,0x12,
59135 0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x70,0x7e,0x0e,0x12,0x2f,0xd9,0x90,
59136 0x80,0x59,0x12,0x2a,0x8b,0x00,0x03,0x2d,0x95,0xe4,0xfd,0xff,0x12,0x34,0x81,0x90,
59137 -0x9e,0x60,0xe0,0xb4,0x01,0x11,0x90,0x80,0x59,0x12,0x2a,0x8b,0x00,0x03,0x2d,0x95,
59138 -0xe4,0xfd,0x7f,0x01,0x12,0x34,0x81,0x22,0x8f,0x27,0xe4,0x90,0x9e,0xa7,0xf0,0xa3,
59139 -0xf0,0x90,0x01,0x09,0xe0,0x7f,0x00,0x30,0xe7,0x02,0x7f,0x01,0xef,0x65,0x27,0x60,
59140 -0x3e,0xc3,0x90,0x9e,0xa8,0xe0,0x94,0x88,0x90,0x9e,0xa7,0xe0,0x94,0x13,0x40,0x08,
59141 -0x90,0x01,0xc6,0xe0,0x44,0x80,0xf0,0x22,0x90,0x9e,0xa7,0xe4,0x75,0xf0,0x01,0x12,
59142 -0x42,0x81,0x7f,0x14,0x7e,0x00,0x12,0x37,0x54,0xd3,0x90,0x9e,0xa8,0xe0,0x94,0x32,
59143 -0x90,0x9e,0xa7,0xe0,0x94,0x00,0x40,0xb9,0x90,0x01,0xc7,0xe0,0x30,0xe0,0xb2,0x22,
59144 -0xe5,0x24,0x30,0xe6,0x19,0xe5,0x24,0x54,0x0f,0xff,0x90,0x9e,0x62,0xe0,0xfe,0x4f,
59145 -0x90,0x01,0x2f,0xf0,0xee,0x64,0x80,0x90,0x9e,0x62,0xf0,0x53,0x24,0xbf,0x22,0x8f,
59146 -0x76,0x12,0x45,0xa6,0xef,0x64,0x01,0x70,0x2e,0x90,0x9e,0x53,0x12,0x47,0xcc,0xe5,
59147 -0x76,0x60,0x10,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x10,
59148 -0xf0,0x80,0x0e,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xef,
59149 -0xf0,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0xe5,0x22,0x64,0x01,0x70,0x61,0xe5,0x25,
59150 -0x60,0x5d,0xe5,0x25,0x64,0x02,0x60,0x06,0xe5,0x25,0x64,0x05,0x70,0x27,0x90,0x06,
59151 -0xab,0xe0,0x90,0x9e,0x64,0xf0,0x90,0x06,0xaa,0xe0,0x90,0x9e,0x72,0xf0,0x90,0x9e,
59152 -0x64,0xe0,0x70,0x07,0x90,0x9e,0x72,0xe0,0xff,0x80,0x05,0x90,0x9e,0x64,0xe0,0xff,
59153 -0x90,0x9e,0x64,0xef,0xf0,0x90,0x9e,0x66,0xe0,0x60,0x03,0xe0,0x14,0xf0,0xe4,0x90,
59154 -0x9e,0x65,0xf0,0x90,0x01,0x57,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x53,0x26,0xfd,
59155 -0x53,0x26,0xef,0xe5,0x25,0x14,0x24,0xfd,0x50,0x02,0x80,0x03,0x12,0x45,0x53,0x22,
59156 -0xe4,0xff,0xe5,0x25,0x60,0x5f,0xe5,0x22,0x64,0x01,0x70,0x59,0xe5,0x25,0x14,0x60,
59157 -0x2b,0x24,0xfd,0x60,0x27,0x24,0x02,0x24,0xfb,0x50,0x02,0x80,0x21,0x90,0x9e,0x64,
59158 -0xe0,0x14,0xf0,0xe0,0x60,0x04,0xa3,0xe0,0x60,0x14,0x90,0x9e,0x64,0xe0,0x70,0x08,
59159 -0x90,0x9e,0x72,0xe0,0x90,0x9e,0x64,0xf0,0x7f,0x01,0x80,0x02,0x7f,0x01,0xef,0x60,
59160 -0x24,0x43,0x26,0x10,0xe4,0x90,0x9e,0x86,0xf0,0x90,0x9e,0x6e,0x12,0x44,0x56,0x90,
59161 -0x01,0x57,0x74,0x05,0xf0,0xe5,0x23,0x54,0x0f,0xc3,0x94,0x04,0x50,0x07,0x7d,0x01,
59162 -0x7f,0x04,0x12,0x47,0x2f,0x22,0xe5,0x25,0x60,0x39,0x90,0x9e,0x74,0xe0,0x60,0x0d,
59163 -0xe4,0xf0,0x53,0x26,0xfd,0xe5,0x26,0x54,0x07,0x70,0x28,0x80,0x23,0x90,0x9e,0x65,
59164 -0xe0,0x04,0xf0,0x53,0x26,0xef,0x90,0x9e,0x6a,0xe0,0xff,0x90,0x9e,0x65,0xe0,0xd3,
59165 -0x9f,0x40,0x0d,0xe5,0x22,0xb4,0x01,0x0b,0xa3,0xe0,0x70,0x07,0xe0,0x04,0xf0,0x22,
59166 -0x12,0x44,0xd1,0x22,0xef,0xc3,0x94,0x20,0x50,0x39,0xef,0x30,0xe0,0x17,0xed,0xc4,
59167 -0x54,0xf0,0xfd,0xef,0xc3,0x13,0xfe,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,
59168 -0xe0,0x54,0x0f,0x80,0x10,0xef,0xc3,0x13,0xfe,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x04,
59169 -0xf5,0x83,0xe0,0x54,0xf0,0xf0,0x74,0xa4,0x2e,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,
59170 -0xe0,0x4d,0xf0,0x22,0xad,0x07,0xed,0xc3,0x94,0x20,0x50,0x0d,0x74,0x84,0x2d,0xf5,
59171 -0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x80,0x0b,0x74,0xa6,0x2d,0xf5,0x82,0xe4,0x34,
59172 -0x9c,0xf5,0x83,0xe0,0x54,0x7f,0xf5,0x64,0xe5,0x64,0x54,0x1f,0xfc,0x75,0xf0,0x09,
59173 -0xed,0x90,0x96,0x48,0x12,0x43,0x5f,0xe0,0xff,0x90,0x9e,0x3e,0xf0,0xed,0x25,0xe0,
59174 -0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x3f,
59175 -0xcb,0xf0,0xa3,0xeb,0xf0,0xed,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,
59176 -0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x41,0xcb,0xf0,0xa3,0xeb,0xf0,0xec,0x25,0xe0,
59177 -0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfa,0x74,0x01,0x93,0xfb,
59178 -0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xea,0xf0,0xa3,0xeb,
59179 -0xf0,0xec,0xc3,0x9f,0x40,0x02,0xe1,0x92,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,
59180 -0xf5,0x83,0xec,0xf0,0x04,0xfb,0x90,0x9e,0x3e,0xe0,0xff,0xeb,0xd3,0x9f,0x40,0x02,
59181 -0xe1,0xc3,0xeb,0xc3,0x94,0x10,0x40,0x21,0xeb,0x24,0xf0,0xff,0x74,0x01,0x7e,0x00,
59182 -0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x3f,
59183 -0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x70,0x23,0xeb,0xc3,0x94,0x10,0x50,0x40,0x74,
59184 -0x01,0x7e,0x00,0xa8,0x03,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,
59185 -0x90,0x9e,0x41,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x23,0xbb,0x11,0x09,0x90,
59186 -0x9e,0x40,0xe0,0x30,0xe7,0x02,0x7b,0x17,0xeb,0x64,0x13,0x60,0x03,0xbb,0x12,0x09,
59187 -0x90,0x9e,0x3f,0xe0,0x30,0xe0,0x02,0x7b,0x18,0xac,0x03,0x8c,0x64,0x80,0x34,0x0b,
59188 -0x80,0x84,0x90,0x9e,0x3e,0xe0,0xfb,0x6c,0x70,0x69,0x74,0x67,0x2d,0xf5,0x82,0xe4,
59189 -0x34,0x9d,0xf5,0x83,0xec,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4a,0x12,0x43,0x5f,
59190 -0xe0,0xb4,0x01,0x0c,0xe5,0x64,0x20,0xe6,0x07,0xec,0x44,0x40,0xf5,0x64,0x80,0x03,
59191 -0xaf,0x64,0x22,0xec,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,
59192 -0x93,0xfe,0x74,0x01,0x93,0xff,0xec,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,
59193 -0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,
59194 -0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,
59195 -0xf0,0x80,0x5b,0xec,0xd3,0x9b,0x40,0x56,0x90,0x9e,0x3e,0xe0,0xff,0x74,0x67,0x2d,
59196 -0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xef,0xf0,0xac,0x07,0x8f,0x64,0xec,0x25,0xe0,
59197 -0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,
59198 -0xec,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,
59199 -0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,
59200 -0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0xaf,0x64,0x22,0x74,0x01,
59201 -0x2d,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,0xf0,0xaf,0x05,0xe5,0x64,0x44,0x80,
59202 -0xfd,0x12,0x5a,0x80,0xe5,0x64,0x44,0x80,0xff,0x22,0xe4,0xf5,0x59,0xe5,0x59,0xb4,
59203 -0x20,0x14,0x90,0x9a,0xc5,0xe0,0x04,0xf0,0x90,0x95,0x01,0xe0,0xff,0x90,0x9a,0xc5,
59204 -0xe0,0xb5,0x07,0x02,0xe4,0xf0,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x4b,0x12,0x43,
59205 -0x5f,0xe0,0x64,0x01,0x60,0x02,0xc1,0xc0,0xe5,0x59,0x25,0xe0,0x24,0x80,0xf5,0x82,
59206 -0xe4,0x34,0x93,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0xd3,0x94,0x00,0xee,0x94,0x00,0x50,
59207 -0x02,0xc1,0xc0,0xe5,0x59,0x94,0x20,0x40,0x08,0x90,0x9a,0xc5,0xe0,0x60,0x02,0xc1,
59208 -0xcb,0xe5,0x59,0x75,0xf0,0x0a,0xa4,0x24,0x00,0xf9,0x74,0x90,0x35,0xf0,0x75,0x5e,
59209 -0x01,0xf5,0x5f,0x89,0x60,0xe5,0x59,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,
59210 -0xf5,0x83,0xe0,0xff,0xa3,0xe0,0x90,0x9e,0x38,0xcf,0xf0,0xa3,0xef,0xf0,0xe5,0x59,
59211 -0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xff,0xa3,0xe0,0x90,
59212 -0x9e,0x3a,0xcf,0xf0,0xa3,0xef,0xf0,0xe5,0x59,0xc3,0x94,0x20,0x50,0x14,0x74,0x84,
59213 -0x25,0x59,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,0x3f,0x90,0x9e,0x34,0xf0,
59214 -0x80,0x12,0x74,0xa6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x54,0x3f,
59215 -0x90,0x9e,0x34,0xf0,0x90,0x9e,0x34,0xe0,0xfe,0x54,0x1f,0xa3,0xf0,0x75,0xf0,0x09,
59216 -0xe5,0x59,0x90,0x96,0x48,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x3d,0xf0,0x74,0xe6,0x25,
59217 -0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xc3,0x94,0x05,0x40,0x02,0x61,0x99,
59218 -0x90,0x9e,0x3d,0xe0,0xff,0x90,0x9e,0x35,0xe0,0x9f,0x40,0x13,0x90,0x9e,0x3d,0xe0,
59219 -0x90,0x9e,0x35,0xf0,0xee,0x54,0x40,0xfe,0x90,0x9e,0x34,0xf0,0xef,0x4e,0xf0,0x90,
59220 -0x04,0xfd,0xe0,0x54,0x05,0x64,0x01,0x70,0x29,0x90,0x9e,0x35,0xe0,0xff,0x90,0x41,
59221 -0x4a,0x93,0xfe,0x74,0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xc3,
59222 -0x9e,0x40,0x06,0xef,0x90,0x40,0xda,0x80,0x30,0x90,0x9e,0x35,0xe0,0x90,0x40,0xf6,
59223 -0x80,0x27,0x90,0x9e,0x35,0xe0,0xff,0x90,0x41,0x4a,0x93,0xfe,0x74,0x44,0x25,0x59,
59224 -0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xc3,0x9e,0x40,0x06,0xef,0x90,0x41,0x12,
59225 -0x80,0x07,0x90,0x9e,0x35,0xe0,0x90,0x41,0x2e,0x93,0x90,0x9e,0x3c,0xf0,0x90,0x9e,
59226 -0x3c,0xe0,0x75,0xf0,0x06,0xa4,0x24,0x50,0xf9,0x74,0x40,0x35,0xf0,0x75,0x5b,0xff,
59227 -0xf5,0x5c,0x89,0x5d,0x90,0x9e,0x34,0xe0,0x90,0x41,0xf2,0x93,0xff,0xd3,0x90,0x9e,
59228 -0x3b,0xe0,0x9f,0x90,0x9e,0x3a,0xe0,0x94,0x00,0x40,0x09,0xe4,0xfd,0xaf,0x59,0x12,
59229 -0x5c,0xbd,0xc1,0x57,0xe5,0x59,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,
59230 -0x83,0xe0,0xf5,0x61,0xa3,0xe0,0xf5,0x62,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x12,0x29,
59231 -0xd9,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x12,0x42,0x97,0xfd,0xac,0xf0,
59232 -0x12,0x29,0xf2,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,0xaa,
59233 -0x5c,0xa9,0x5d,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,
59234 -0xa9,0x60,0x90,0x00,0x02,0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,0x25,
59235 -0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,0x00,
59236 -0x02,0x12,0x42,0x20,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x04,
59237 -0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,
59238 -0x61,0xf5,0x61,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,0x00,0x03,0x12,0x42,0x20,0xff,
59239 -0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x06,0x12,0x42,0xc2,0xfd,0xac,
59240 -0xf0,0x12,0x29,0xf2,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,
59241 -0xaa,0x5c,0xa9,0x5d,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0x7e,0x00,0xab,0x5e,0xaa,
59242 -0x5f,0xa9,0x60,0x90,0x00,0x08,0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,
59243 -0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,
59244 -0x00,0x05,0x12,0x42,0x20,0xff,0x7e,0x00,0x90,0x9e,0x38,0xe0,0xfc,0xa3,0xe0,0xfd,
59245 -0x12,0x29,0xf2,0xd3,0xe5,0x62,0x9f,0xe5,0x61,0x9e,0x40,0x0c,0xe5,0x62,0x9f,0xf5,
59246 -0x62,0xe5,0x61,0x9e,0xf5,0x61,0x80,0x05,0xe4,0xf5,0x61,0xf5,0x62,0xe5,0x59,0x25,
59247 -0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe5,0x61,0xf0,0xa3,0xe5,0x62,
59248 -0xf0,0x90,0x9e,0x34,0xe0,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,
59249 -0xc3,0x74,0x01,0x93,0x95,0x62,0xe4,0x93,0x95,0x61,0x50,0x07,0xaf,0x59,0x12,0x66,
59250 -0x74,0xc1,0x2b,0x90,0x9e,0x34,0xe0,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,
59251 -0xf5,0x83,0xd3,0x74,0x01,0x93,0x95,0x62,0xe4,0x93,0x95,0x61,0x50,0x02,0xc1,0x2b,
59252 -0x7d,0x01,0xaf,0x59,0x12,0x5c,0xbd,0xc1,0x2b,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,
59253 -0x34,0x9c,0xf5,0x83,0xe0,0xfc,0x64,0x05,0x60,0x02,0xa1,0x34,0x90,0x96,0x43,0xe0,
59254 -0xff,0xb4,0x03,0x0b,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x19,0x40,0x3d,0x80,0x2e,0xef,
59255 -0xb4,0x02,0x0b,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x11,0x40,0x2e,0x80,0x1f,0x90,0x96,
59256 -0x43,0xe0,0xff,0xb4,0x01,0x0b,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x0a,0x40,0x1b,0x80,
59257 -0x0c,0xef,0x70,0x11,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x03,0x40,0x0d,0x90,0x9a,0x84,
59258 -0x74,0x01,0xf0,0x80,0x05,0xe4,0x90,0x9a,0x84,0xf0,0x74,0x84,0x25,0x59,0xf5,0x82,
59259 -0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x63,0x74,0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,
59260 -0x9a,0xf5,0x83,0xe0,0xff,0xc3,0x94,0x30,0x50,0x02,0x81,0xe1,0x90,0x9a,0x84,0xe0,
59261 -0x64,0x01,0x60,0x02,0x81,0xe1,0x74,0x85,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,
59262 -0x83,0xe0,0x64,0x0a,0x60,0x51,0xef,0x24,0x05,0xff,0xe4,0x33,0xfe,0x74,0x41,0x25,
59263 -0x59,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe0,0xfd,0xd3,0x9f,0xee,0x64,0x80,0xf8,
59264 -0x74,0x80,0x98,0x50,0x32,0xed,0x24,0x05,0xff,0xe4,0x33,0xfe,0x74,0x44,0x25,0x59,
59265 -0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xd3,0x9f,0xee,0x64,0x80,0xf8,0x74,0x80,
59266 -0x98,0x50,0x14,0x74,0x26,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xe0,0xff,
59267 -0x90,0x9e,0x35,0xe0,0x6f,0x60,0x3d,0x74,0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,
59268 -0xf5,0x83,0xe0,0xff,0xd3,0x94,0x42,0x40,0x05,0x75,0x63,0x05,0x80,0x0e,0xef,0xd3,
59269 -0x94,0x39,0x40,0x05,0x75,0x63,0x03,0x80,0x03,0x75,0x63,0x01,0x74,0x41,0x25,0x59,
59270 -0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xef,0xf0,0x74,0x85,0x25,0x59,0xf5,0x82,0xe4,
59271 -0x34,0x9a,0x80,0x29,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,
59272 -0xf0,0x74,0x85,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0x04,0xf0,0x80,
59273 -0x10,0xe4,0xf5,0x63,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,
59274 -0xf0,0x90,0x9e,0x35,0xe0,0xff,0x74,0x26,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9d,0xf5,
59275 -0x83,0xef,0xf0,0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe5,0x63,
59276 -0xf0,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x4c,0x12,0x43,0x5f,0xe0,0xb4,0x01,0x10,
59277 -0xe4,0xf5,0x63,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,
59278 -0xad,0x63,0xc1,0x26,0xec,0x64,0x06,0x60,0x02,0xc1,0x2b,0xf5,0x61,0xf5,0x62,0x90,
59279 -0x42,0x13,0x93,0xff,0x7e,0x00,0x90,0x9e,0x38,0xe0,0xfc,0xa3,0xe0,0xfd,0x12,0x29,
59280 -0xf2,0x90,0x9e,0x36,0xee,0xf0,0xa3,0xef,0xf0,0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,
59281 -0x34,0x98,0xf5,0x83,0xe0,0xf5,0x63,0xe4,0xf5,0x5a,0xab,0x5e,0xaa,0x5f,0xa9,0x60,
59282 -0x75,0xf0,0x02,0xe5,0x5a,0xa4,0xf5,0x82,0x85,0xf0,0x83,0x12,0x42,0xc2,0xfd,0xac,
59283 -0xf0,0xe5,0x5a,0x90,0x42,0x0e,0x93,0xff,0x7e,0x00,0x12,0x29,0xf2,0xef,0x25,0x62,
59284 -0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xc3,0x90,0x9e,0x37,0xe0,0x95,0x62,0x90,0x9e,
59285 -0x36,0xe0,0x95,0x61,0x40,0x07,0x05,0x5a,0xe5,0x5a,0xb4,0x05,0xbd,0xe5,0x5a,0xc3,
59286 -0x13,0xf5,0x5a,0xe5,0x63,0xb4,0x01,0x06,0xe5,0x5a,0x70,0x46,0x80,0x13,0xe5,0x63,
59287 -0xb4,0x03,0x15,0xe5,0x5a,0x70,0x05,0x75,0x63,0x03,0x80,0x39,0xe5,0x5a,0xb4,0x01,
59288 -0x05,0x75,0x63,0x01,0x80,0x2f,0x80,0x2a,0xe5,0x63,0xb4,0x05,0x28,0xe5,0x5a,0x70,
59289 -0x05,0x75,0x63,0x05,0x80,0x0d,0xe5,0x5a,0xb4,0x01,0x05,0x75,0x63,0x03,0x80,0x03,
59290 -0x75,0x63,0x01,0xd3,0x90,0x9e,0x3b,0xe0,0x94,0x03,0x90,0x9e,0x3a,0xe0,0x94,0x00,
59291 -0x40,0x03,0xe4,0xf5,0x63,0xd3,0x90,0x9e,0x3b,0xe0,0x94,0x03,0x90,0x9e,0x3a,0xe0,
59292 -0x94,0x00,0x40,0x03,0xe4,0xf5,0x63,0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x98,
59293 -0xf5,0x83,0xe5,0x63,0xf0,0xfd,0xaf,0x59,0x12,0x66,0x34,0x74,0xe6,0x25,0x59,0xf5,
59294 -0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xd3,0x94,0x05,0x74,0xe6,0x50,0x0e,0x25,0x59,
59295 -0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x04,0xf0,0x80,0x0b,0x25,0x59,0xf5,0x82,
59296 -0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0xe4,0xf5,0xf0,
59297 -0x12,0x42,0xfa,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x02,0xe4,0xf5,0xf0,0x12,
59298 -0x43,0x19,0x90,0x00,0x04,0xe4,0xf5,0xf0,0x12,0x43,0x19,0x90,0x00,0x06,0xe4,0xf5,
59299 -0xf0,0x12,0x43,0x19,0x90,0x00,0x08,0xe4,0xf5,0xf0,0x12,0x43,0x19,0xe5,0x59,0x25,
59300 -0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xe5,0x59,
59301 -0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xe5,
59302 -0x59,0x25,0xe0,0x24,0x44,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,
59303 -0x05,0x59,0xe5,0x59,0xc3,0x94,0x40,0x50,0x02,0x01,0x7d,0x22,0x90,0x04,0x44,0x74,
59304 -0x11,0xf0,0xa3,0x74,0xf0,0xf0,0xa3,0x74,0x0f,0xf0,0xa3,0xe4,0xf0,0xfd,0x74,0xa4,
59305 -0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe4,0xf0,0x0d,0xbd,0x10,0xf0,0xe4,0x90,
59306 -0x9a,0xc5,0xf0,0x90,0x95,0x01,0x04,0xf0,0xe4,0xfd,0x75,0xf0,0x0a,0xed,0x90,0x90,
59307 -0x00,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x02,0x12,
59308 -0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x04,0x12,0x43,0x5f,
59309 -0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x06,0x12,0x43,0x5f,0xe4,0xf0,
59310 -0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x08,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,
59311 -0x74,0x26,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0x74,0x13,0xf0,0x74,0x85,0x2d,
59312 -0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe4,0xf0,0x74,0x84,0x2d,0xf5,0x82,0xe4,0x34,
59313 -0x98,0xf5,0x83,0xe4,0xf0,0xed,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,
59314 -0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,
59315 -0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x99,0xf5,
59316 -0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0x44,0xf5,0x82,0xe4,0x34,0x99,0xf5,
59317 -0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9a,0xf5,
59318 -0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0x46,0xf5,0x82,0xe4,0x34,0x9b,0xf5,
59319 -0x83,0xe4,0xf0,0xa3,0xf0,0x74,0x86,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,
59320 -0xf0,0x74,0x46,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x74,0xe6,0x2d,
59321 -0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x90,0x41,0xc4,0x93,0xfe,0x74,0x01,
59322 -0x93,0xff,0x90,0x41,0x8c,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,
59323 -0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,
59324 -0xf0,0xa3,0xef,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4b,0x12,0x43,0x5f,0x74,0x01,
59325 -0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4a,0x12,0x43,0x5f,0x74,0x01,0xf0,0x74,0x82,
59326 -0x2d,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0x74,0x0c,0xf0,0x75,0xf0,0x09,0xed,0x90,
59327 -0x96,0x46,0x12,0x43,0x5f,0x74,0xff,0xf0,0xa3,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,
59328 -0x44,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0x74,0x0f,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,
59329 -0x48,0x12,0x43,0x5f,0x74,0x13,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x49,0x12,0x43,
59330 -0x5f,0xe4,0xf0,0xed,0xc3,0x94,0x20,0x50,0x0f,0x74,0x84,0x2d,0xf5,0x82,0xe4,0x34,
59331 -0x04,0xf5,0x83,0x74,0x13,0xf0,0x80,0x0d,0x74,0xa6,0x2d,0xf5,0x82,0xe4,0x34,0x9c,
59332 -0xf5,0x83,0x74,0x13,0xf0,0x0d,0xed,0x64,0x40,0x60,0x03,0x02,0x6e,0xfa,0x22,0x12,
59333 -0x29,0xd9,0xf5,0x59,0xc3,0x94,0x40,0x50,0x15,0x90,0x00,0x02,0x12,0x42,0x20,0xff,
59334 -0x74,0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xef,0xf0,0x22,0xe5,0x59,
59335 -0xb4,0x40,0x0a,0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x96,0x42,0xf0,0x22,0x90,0x00,
59336 -0x04,0x12,0x42,0x20,0xff,0x54,0x3f,0xfe,0xef,0x54,0x80,0xc4,0x13,0x13,0x13,0x54,
59337 -0x01,0xfd,0xaf,0x06,0x02,0x55,0x30,0x12,0x29,0xd9,0x90,0x95,0x01,0xf0,0x22,0x12,
59338 -0x29,0xd9,0xf5,0x22,0x22,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0x30,0xe0,0x25,0x12,
59339 -0x29,0xd9,0x90,0x9e,0x6a,0xf0,0x90,0x00,0x01,0x12,0x42,0x20,0x90,0x9e,0x6b,0xf0,
59340 -0xef,0xc3,0x13,0x54,0x7f,0x90,0x9e,0x69,0xf0,0x90,0x00,0x03,0x12,0x42,0x20,0x90,
59341 -0x9e,0x6f,0xf0,0x22,0x90,0x9e,0x6a,0x74,0x01,0xf0,0x90,0x9e,0x6b,0x74,0x03,0xf0,
59342 -0x90,0x9e,0x69,0x74,0x14,0xf0,0x90,0x9e,0x6f,0x74,0x05,0xf0,0x22,0x12,0x29,0xd9,
59343 -0x30,0xe0,0x18,0xc3,0x13,0x54,0x7f,0x90,0x9e,0x6e,0xf0,0x90,0x00,0x01,0x12,0x42,
59344 -0x20,0xff,0x90,0x9e,0x6c,0xe4,0xf0,0xa3,0xef,0xf0,0x22,0x90,0x9e,0x6e,0x74,0x07,
59345 -0xf0,0x90,0x9e,0x6c,0xe4,0xf0,0xa3,0x74,0x02,0xf0,0x22,0x90,0x02,0x09,0xe0,0xfd,
59346 -0x12,0x29,0xd9,0xfe,0xaf,0x05,0xed,0x2e,0x90,0x9e,0x50,0xf0,0x90,0x00,0x01,0x12,
59347 -0x42,0x20,0xff,0xed,0x2f,0x90,0x9e,0x51,0xf0,0x90,0x00,0x02,0x12,0x42,0x20,0xff,
59348 -0xed,0x2f,0x90,0x9e,0x52,0xf0,0x90,0x00,0x03,0x12,0x42,0x20,0xff,0xed,0x2f,0x90,
59349 -0x9e,0x53,0xf0,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0xae,0x05,0xed,0x2f,0x90,0x9e,
59350 -0x54,0xf0,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x3f,0x12,0x43,0x8b,
59351 -0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,0xc2,0xfa,0xe5,0xf0,0x24,
59352 -0x00,0xff,0xe4,0x3a,0xfe,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,0x01,0xee,0x8f,
59353 -0xf0,0x12,0x43,0x19,0x12,0x29,0xd9,0xff,0x60,0x2c,0xb5,0x71,0x16,0x90,0x9e,0x3f,
59354 -0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,0xc2,0x65,0x73,0x70,0x04,0xe5,0x72,0x65,
59355 -0xf0,0x60,0x23,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,0xc2,0xff,
59356 -0xae,0xf0,0x51,0x2b,0x80,0x10,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x12,0x29,0xd9,0x65,
59357 -0x71,0x60,0x03,0x12,0x44,0xc8,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x9e,0x42,0xee,0xf0,
59358 -0xa3,0xef,0xf0,0x75,0x71,0x01,0x8e,0x72,0xf5,0x73,0xe4,0xfd,0x7f,0x0b,0x51,0x6d,
59359 -0xe4,0xfd,0x7f,0x02,0x51,0x6d,0x71,0x37,0xe4,0xff,0x71,0x99,0xe4,0xf5,0x75,0x90,
59360 -0x01,0xc9,0xe5,0x75,0xf0,0x90,0x9e,0x42,0xe0,0xfc,0xa3,0xe0,0xfd,0xec,0xfb,0x8d,
59361 -0x44,0xe4,0xf5,0x45,0x7d,0x01,0x7f,0x60,0x7e,0x01,0x02,0x35,0xab,0xd3,0x10,0xaf,
59362 -0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x45,0xed,0xf0,0x90,0x9e,0x44,0xef,0xf0,0xd3,0x94,
59363 -0x07,0x50,0x4f,0xa3,0xe0,0x70,0x1a,0x90,0x9e,0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,
59364 -0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x47,0xe0,0x5f,0xf0,0x80,
59365 -0x17,0x90,0x9e,0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,
59366 -0xfc,0xff,0x90,0x00,0x47,0xe0,0x4f,0xf0,0x12,0x4b,0xdb,0x90,0x9e,0x44,0xe0,0xff,
59367 -0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x46,
59368 -0x80,0x5a,0x90,0x9e,0x44,0xe0,0x24,0xf8,0xf0,0xa3,0xe0,0x70,0x1d,0x90,0x9e,0x44,
59369 -0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,
59370 -0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0x80,0x1a,0x90,0x9e,0x44,0xe0,0xff,0x74,
59371 -0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0xff,0x90,0x00,
59372 -0x43,0xe0,0x4f,0xf0,0x12,0x4b,0xdb,0x90,0x9e,0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,
59373 -0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0x12,
59374 -0x4b,0xdb,0xd0,0xd0,0x92,0xaf,0x22,0x7f,0x0b,0x71,0xa6,0xef,0x65,0x74,0x60,0x10,
59375 -0xe5,0x74,0xb4,0x01,0x05,0xe4,0xf5,0x74,0x80,0x03,0x75,0x74,0x01,0x7f,0x01,0x22,
59376 -0x7f,0x00,0x22,0xe5,0x71,0x64,0x01,0x70,0x3f,0x71,0x37,0xbf,0x01,0x04,0x7f,0x01,
59377 -0x71,0x99,0x90,0x00,0x46,0xe0,0x44,0x04,0xfd,0x7f,0x46,0x12,0x4c,0xe3,0x90,0x00,
59378 -0x44,0xe0,0x54,0xfb,0xfd,0x7f,0x44,0x12,0x4c,0xe3,0x90,0x00,0x46,0xe0,0x54,0xfb,
59379 -0xfd,0x7f,0x46,0x12,0x4c,0xe3,0x7f,0x02,0x71,0xa6,0x8f,0x75,0x90,0x01,0xc9,0xe5,
59380 -0x75,0xf0,0xb4,0x01,0x03,0x12,0x4f,0xda,0x22,0x90,0x01,0xca,0xe5,0x74,0xf0,0xef,
59381 -0x60,0x03,0x12,0x4f,0xda,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0xb1,
59382 -0xef,0xf0,0xd3,0x94,0x07,0x50,0x47,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,
59383 -0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x46,0xe0,0x5f,0xf0,0x12,0x4b,0xdb,0x90,
59384 -0x9e,0xb1,0xe0,0xfd,0x74,0x01,0x7e,0x00,0xa8,0x05,0x08,0x80,0x05,0xc3,0x33,0xce,
59385 -0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,0x44,0xe0,0xfb,0xe4,0xfe,0xef,0x5b,0xa8,0x05,
59386 -0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,0xd8,0xf8,0xff,0x80,0x44,0x90,0x9e,
59387 -0xb1,0xe0,0x24,0xf8,0xf0,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,
59388 -0xd8,0xfc,0x12,0x4b,0xd3,0x90,0x9e,0xb1,0xe0,0xfd,0x74,0x01,0x7e,0x00,0xa8,0x05,
59389 -0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,0x42,0xe0,0xfb,
59390 -0xe4,0xfe,0xef,0x5b,0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,0xd8,
59391 -0xf8,0xff,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,
59392 -0x56,0xe0,0x90,0x9e,0x40,0xf0,0x90,0x9e,0x57,0xe0,0xf5,0x64,0xa3,0xe0,0xf5,0x65,
59393 -0xe4,0xf5,0x61,0x74,0x59,0x25,0x61,0xf5,0x82,0xe4,0x34,0x9e,0xf5,0x83,0xe0,0xff,
59394 -0x74,0x66,0x25,0x61,0xf8,0xa6,0x07,0x05,0x61,0xe5,0x61,0xb4,0x04,0xe5,0x90,0x9e,
59395 -0x40,0xe0,0x12,0x43,0x94,0x74,0xa4,0x00,0x75,0xcc,0x01,0x74,0xaa,0x02,0x74,0xaa,
59396 -0x03,0x74,0xaa,0x04,0x75,0xcc,0x05,0x75,0x9c,0x80,0x75,0xb2,0x81,0x75,0xcc,0x82,
59397 -0x00,0x00,0x75,0xc8,0xaf,0x69,0xb1,0xd3,0xa1,0xcc,0x90,0x9e,0x40,0xe0,0xff,0xb4,
59398 -0x02,0x08,0x90,0x9e,0x3f,0x74,0x01,0xf0,0x80,0x0f,0xef,0x90,0x9e,0x3f,0xb4,0x03,
59399 -0x05,0x74,0x02,0xf0,0x80,0x03,0x74,0x04,0xf0,0xc3,0xe5,0x64,0x94,0x08,0x50,0x49,
59400 -0xe4,0xf5,0x61,0x90,0x9e,0x3f,0xe0,0xff,0xe5,0x61,0xc3,0x9f,0x40,0x02,0xa1,0xcc,
59401 -0xc3,0xe5,0x64,0x94,0x01,0x50,0x14,0xe5,0x61,0x25,0x65,0xff,0xc3,0x74,0x03,0x95,
59402 -0x61,0x24,0x66,0xf8,0xe6,0xfd,0x12,0x4c,0xe3,0x80,0x1a,0xc3,0x74,0x03,0x95,0x61,
59403 -0x24,0x66,0xf8,0xe6,0xff,0xe5,0x61,0x7c,0x00,0x25,0x65,0xfd,0xec,0x35,0x64,0x8d,
59404 -0x82,0xf5,0x83,0xef,0xf0,0x05,0x61,0x80,0xba,0xc3,0xe5,0x64,0x94,0x10,0x40,0x02,
59405 -0xa1,0xcc,0x90,0x9e,0x40,0xe0,0x64,0x04,0x60,0x02,0xa1,0xcc,0xaf,0x67,0xfc,0xfd,
59406 -0xfe,0x78,0x10,0x12,0x2a,0x6c,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0xaf,0x66,
59407 -0xe4,0xfc,0xfd,0xfe,0x78,0x18,0x12,0x2a,0x6c,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,
59408 -0x00,0x12,0x43,0x46,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0xaf,0x68,0xe4,0xfc,
59409 -0xfd,0xfe,0x78,0x08,0x12,0x2a,0x6c,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0x12,
59410 -0x43,0x46,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,0x07,0xaf,0x69,0xe4,0xfc,0xfd,0xfe,
59411 -0x12,0x43,0x46,0xa3,0x12,0x2a,0x7f,0x90,0x9e,0x41,0x12,0x43,0x53,0x90,0x80,0x85,
59412 -0x12,0x2a,0x7f,0xaf,0x65,0xae,0x64,0x12,0x2f,0xd9,0x80,0x30,0xe5,0x68,0x7f,0x00,
59413 -0xfe,0xef,0x25,0x69,0xf5,0x63,0xe4,0x3e,0xf5,0x62,0xaf,0x63,0xfe,0x12,0x37,0x54,
59414 -0x80,0x1a,0xe5,0x68,0x7f,0x00,0xfe,0xef,0x25,0x69,0xf5,0x63,0xe4,0x3e,0xf5,0x62,
59415 -0xaf,0x63,0xfe,0x12,0x36,0xcb,0x80,0x04,0x7f,0x00,0x80,0x02,0x7f,0x01,0xd0,0xd0,
59416 -0x92,0xaf,0x22,0x8f,0x6a,0xe4,0x90,0x9e,0x45,0xf0,0xe5,0x6a,0x14,0xfe,0x90,0x9e,
59417 -0x45,0xe0,0xff,0xc3,0x9e,0x50,0x0e,0xef,0x04,0xfd,0x12,0x34,0xb7,0x90,0x9e,0x45,
59418 -0xe0,0x04,0xf0,0x80,0xe5,0xe5,0x6a,0x14,0xff,0x7d,0xff,0x12,0x34,0xb7,0x90,0x9e,
59419 -0x45,0xe5,0x6a,0xf0,0x90,0x9e,0x45,0xe0,0xc3,0x94,0xff,0x50,0x0f,0xe0,0xff,0x04,
59420 -0xfd,0x12,0x34,0xb7,0x90,0x9e,0x45,0xe0,0x04,0xf0,0x80,0xe8,0xad,0x6a,0x7f,0xff,
59421 -0x02,0x34,0xb7,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xe4,0xf5,0x5b,0x75,0x5c,0x04,
59422 -0xf5,0x5d,0xf5,0x5f,0xf5,0x60,0x90,0x02,0x09,0xe0,0xff,0x12,0x29,0xd9,0xfe,0xef,
59423 -0x2e,0xf5,0x5e,0x30,0xe0,0x08,0x75,0x59,0x00,0x75,0x5a,0x80,0x80,0x05,0xe4,0xf5,
59424 -0x59,0xf5,0x5a,0xe5,0x5e,0xc3,0x13,0x90,0xfd,0x10,0xf0,0x74,0x20,0x25,0x5b,0xf5,
59425 -0x5b,0xad,0x5a,0xe5,0x5b,0x2d,0xff,0x24,0x01,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,
59426 -0xe0,0x90,0x9e,0x56,0xf0,0x74,0x02,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,
59427 -0xfe,0xe5,0x5b,0x2d,0x24,0x03,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x24,0x00,
59428 -0xff,0xe4,0x3e,0x90,0x9e,0x57,0xf0,0xa3,0xef,0xf0,0x7f,0x04,0xe5,0x5b,0x25,0x5a,
59429 -0x2f,0x24,0x00,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0xfe,0x74,0x55,0x2f,0xf5,
59430 -0x82,0xe4,0x34,0x9e,0xf5,0x83,0xee,0xf0,0x0f,0xbf,0x08,0xe0,0x91,0x47,0xef,0x70,
59431 -0x3f,0x90,0x01,0xc3,0xe0,0x60,0x25,0xc3,0xe5,0x60,0x94,0xe8,0xe5,0x5f,0x94,0x03,
59432 -0x40,0x09,0x90,0x01,0xc6,0xe0,0x44,0x10,0xf0,0x80,0x63,0x05,0x60,0xe5,0x60,0x70,
59433 -0x02,0x05,0x5f,0x7f,0x0a,0x7e,0x00,0x12,0x37,0x54,0x80,0xd5,0x90,0x01,0xc6,0xe0,
59434 -0x90,0x01,0xc3,0x30,0xe2,0x05,0x74,0xfe,0xf0,0x80,0x43,0x74,0xff,0xf0,0x80,0x3e,
59435 -0xe5,0x5b,0xb4,0x78,0x23,0xe4,0xf5,0x5b,0x05,0x5e,0xe5,0x5a,0x64,0x80,0x45,0x59,
59436 -0x70,0x06,0xf5,0x59,0xf5,0x5a,0x80,0x06,0x75,0x59,0x00,0x75,0x5a,0x80,0xe5,0x5e,
59437 -0xc3,0x13,0x90,0xfd,0x10,0xf0,0x80,0x06,0x74,0x08,0x25,0x5b,0xf5,0x5b,0xe5,0x5d,
59438 -0x15,0x5d,0x70,0x02,0x15,0x5c,0xe5,0x5d,0x45,0x5c,0x60,0x02,0xc1,0x61,0xd0,0xd0,
59439 -0x92,0xaf,0x22,0x90,0x06,0x34,0x74,0xff,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,
59440 -0x22,0xe4,0x90,0x9e,0x5d,0xf0,0x90,0x00,0x80,0xe0,0x44,0x80,0xfd,0x7f,0x80,0x02,
59441 -0x4c,0xe3,0x8e,0x59,0x8f,0x5a,0x8b,0x5b,0x8a,0x5c,0x89,0x5d,0xe4,0x90,0x9e,0x34,
59442 -0xf0,0xef,0x90,0x00,0x31,0xf0,0x12,0x4b,0xdb,0xe5,0x59,0x54,0x03,0xff,0x90,0x00,
59443 -0x32,0xe0,0x54,0xfc,0x4f,0xf0,0x12,0x4b,0xdb,0x90,0x00,0x33,0xe0,0x54,0x7f,0xf0,
59444 -0x12,0x4b,0xdb,0x90,0x00,0x33,0xe0,0x20,0xe7,0x0e,0x90,0x9e,0x34,0xe0,0xc3,0x94,
59445 -0x64,0x50,0x05,0xe0,0x04,0xf0,0x80,0xeb,0x90,0x9e,0x34,0xe0,0xc3,0x94,0x64,0x50,
59446 -0x10,0x90,0x00,0x30,0xe0,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x12,0x42,0x4d,0x7f,0x01,
59447 -0x22,0x7f,0x00,0x22,0xe4,0xf5,0x74,0x22,0x90,0x9e,0x60,0xe0,0x90,0x9e,0x0f,0xf0,
59448 -0x22,0xef,0x70,0x03,0x02,0x79,0x89,0x90,0x9e,0x0f,0xe0,0x60,0x03,0x02,0x7d,0x54,
59449 +0x9e,0x80,0xe0,0xb4,0x01,0x11,0x90,0x80,0x59,0x12,0x2a,0x8b,0x00,0x03,0x2d,0x95,
59450 +0xe4,0xfd,0x7f,0x01,0x12,0x34,0x81,0x22,0x7f,0x78,0x7e,0x08,0x12,0x27,0xde,0x90,
59451 +0x9d,0xff,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x27,0xde,0x90,0x9e,0x03,0x12,
59452 +0x2a,0x7f,0x7f,0x00,0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0x07,0x12,0x2a,0x7f,0x90,
59453 +0x9e,0x80,0xe0,0x90,0x9d,0xff,0xb4,0x01,0x0d,0x12,0x43,0x53,0xef,0x54,0xc7,0xff,
59454 +0xed,0x54,0xc7,0xfd,0x80,0x07,0x12,0x43,0x53,0xef,0x54,0xc7,0xff,0xec,0x90,0x80,
59455 +0x85,0x12,0x2a,0x7f,0x7f,0x78,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,0x03,0x12,0x43,
59456 +0x53,0xef,0x54,0x0f,0xff,0xec,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,
59457 +0x12,0x2f,0xd9,0x90,0x9e,0x07,0x12,0x43,0x53,0xef,0x44,0x02,0xff,0xec,0x90,0x80,
59458 +0x85,0x12,0x2a,0x7f,0x7f,0x00,0x7e,0x08,0x12,0x2f,0xd9,0x7f,0x70,0x7e,0x0e,0x12,
59459 +0x27,0xde,0x90,0x9e,0x0b,0x12,0x2a,0x7f,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x1b,
59460 +0x25,0xa0,0x7f,0x70,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x59,0x12,0x2a,0x8b,0x00,
59461 +0x00,0x00,0x00,0xe4,0xfd,0xff,0x12,0x34,0x81,0x90,0x9e,0x80,0xe0,0xb4,0x01,0x11,
59462 +0x90,0x80,0x59,0x12,0x2a,0x8b,0x00,0x00,0x00,0x00,0xe4,0xfd,0x7f,0x01,0x12,0x34,
59463 +0x81,0x22,0xef,0x70,0x02,0xe1,0x49,0x90,0x9e,0x0f,0xe0,0x60,0x03,0x02,0x7b,0x15,
59464 0x90,0x9d,0xfb,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x8c,0x7e,0x08,
59465 0x12,0x2f,0xd9,0x90,0x9d,0xa7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
59466 0x44,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9d,0xab,0x12,0x43,0x53,0x90,0x80,0x85,0x12,
59467 @@ -6030,1114 +2917,3136 @@ u8 Rtl8192CUFwUMCBCutImgArray[UMCBCutImg
59468 0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,0x2f,0xd9,0x90,
59469 0x9d,0xf7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x08,0x12,
59470 0x2f,0xd9,0x90,0x9e,0x0f,0x74,0x01,0xf0,0x22,0x90,0x9e,0x0f,0xe0,0x64,0x01,0x60,
59471 -0x02,0xa1,0x54,0x7f,0x8c,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xfb,0x12,0x2a,0x7f,
59472 -0x7f,0x44,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xa7,0x12,0x2a,0x7f,0x7f,0x5c,0x7e,
59473 -0x08,0x12,0x27,0xde,0x90,0x9d,0xab,0x12,0x2a,0x7f,0x7f,0x6c,0x7e,0x0e,0x12,0x27,
59474 -0xde,0x90,0x9d,0xaf,0x12,0x2a,0x7f,0x7f,0x70,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,
59475 -0xb3,0x12,0x2a,0x7f,0x7f,0x74,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xb7,0x12,0x2a,
59476 -0x7f,0x7f,0x78,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xbb,0x12,0x2a,0x7f,0x7f,0x7c,
59477 -0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xbf,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x0e,0x12,
59478 -0x27,0xde,0x90,0x9d,0xc3,0x12,0x2a,0x7f,0x7f,0x84,0x7e,0x0e,0x12,0x27,0xde,0x90,
59479 -0x9d,0xc7,0x12,0x2a,0x7f,0x7f,0x88,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xcb,0x12,
59480 -0x2a,0x7f,0x7f,0x8c,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xcf,0x12,0x2a,0x7f,0x7f,
59481 -0xd0,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xd3,0x12,0x2a,0x7f,0x7f,0xd4,0x7e,0x0e,
59482 -0x12,0x27,0xde,0x90,0x9d,0xd7,0x12,0x2a,0x7f,0x7f,0xd8,0x7e,0x0e,0x12,0x27,0xde,
59483 -0x90,0x9d,0xdb,0x12,0x2a,0x7f,0x7f,0xdc,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xdf,
59484 -0x12,0x2a,0x7f,0x7f,0xe0,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xe3,0x12,0x2a,0x7f,
59485 -0x7f,0xec,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xe7,0x12,0x2a,0x7f,0x7f,0x04,0x7e,
59486 -0x0c,0x12,0x27,0xde,0x90,0x9d,0xeb,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0d,0x12,0x27,
59487 -0xde,0x90,0x9d,0xef,0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,0x27,0xde,0x90,0x9d,
59488 -0xf3,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xf7,0x12,0x2a,
59489 -0x7f,0x7f,0x8c,0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0xa1,0x12,0x2a,0x7f,0x90,0x9e,
59490 -0xa1,0x12,0x43,0x53,0xed,0x44,0xc0,0xfd,0xec,0x90,0x9e,0xa1,0x12,0x2a,0x7f,0x90,
59491 -0x9e,0xa1,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x8c,0x7e,0x08,0x12,
59492 -0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x01,0x00,0x00,0x7f,0x44,0x7e,0x08,
59493 -0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0xdb,0x25,0xa4,0x7f,0x5c,0x7e,
59494 -0x08,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0x6c,
59495 -0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,
59496 -0x70,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x04,0x1b,0x25,0xa4,
59497 -0x7f,0x74,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x04,0x1b,0x25,
59498 -0xa4,0x7f,0x78,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x04,0x1b,
59499 -0x25,0xa4,0x7f,0x7c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x04,
59500 -0x1b,0x25,0xa4,0x7f,0x80,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,
59501 -0x63,0xdb,0x25,0xa4,0x7f,0x84,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,
59502 -0x8b,0x04,0x1b,0x25,0xa4,0x7f,0x88,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,
59503 -0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0x8c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,
59504 -0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0xd0,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,
59505 -0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0xd4,0x7e,0x0e,0x12,0x2f,0xd9,0x90,
59506 -0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0xd8,0x7e,0x0e,0x12,0x2f,0xd9,
59507 -0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x1b,0x25,0xa4,0x7f,0xdc,0x7e,0x0e,0x12,0x2f,
59508 -0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x1b,0x25,0xa4,0x7f,0xe0,0x7e,0x0e,0x12,
59509 -0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x24,0xdb,0x25,0xa4,0x7f,0xec,0x7e,0x0e,
59510 -0x12,0x2f,0xd9,0x7f,0x04,0x7e,0x0c,0x12,0x27,0xde,0x90,0x9e,0xa1,0x12,0x2a,0x7f,
59511 -0x90,0x9e,0xa1,0x12,0x43,0x53,0xe4,0xff,0xec,0x90,0x9e,0xa1,0x12,0x2a,0x7f,0x90,
59512 -0x9e,0xa1,0x12,0x43,0x53,0xef,0x44,0x11,0xff,0xec,0x90,0x9e,0xa1,0x12,0x2a,0x7f,
59513 -0x90,0x9e,0xa1,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,
59514 -0x12,0x2f,0xd9,0x7f,0x04,0x7e,0x0d,0x12,0x27,0xde,0x90,0x9e,0xa1,0x12,0x2a,0x7f,
59515 -0x90,0x9e,0xa1,0x12,0x43,0x53,0xef,0x54,0xf0,0xff,0xec,0x90,0x9e,0xa1,0x12,0x2a,
59516 -0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0xef,0x44,0x01,0xff,0xec,0x90,0x9e,0xa1,0x12,
59517 -0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,
59518 -0x7e,0x0d,0x12,0x2f,0xd9,0x7f,0x0c,0x7e,0x09,0x12,0x27,0xde,0x90,0x9e,0xa1,0x12,
59519 -0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0xe4,0xff,0xec,0x90,0x9e,0xa1,0x12,0x2a,
59520 -0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0xef,0x44,0x11,0xff,0xec,0x90,0x9e,0xa1,0x12,
59521 -0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x0c,
59522 -0x7e,0x09,0x12,0x2f,0xd9,0x7f,0x0c,0x7e,0x09,0x12,0x27,0xde,0x90,0x9e,0xa1,0x12,
59523 -0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0xed,0x54,0x0f,0xfd,0xec,0x54,0xf0,0xfc,
59524 -0x90,0x9e,0xa1,0x12,0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0xed,0x44,0x10,0xfd,
59525 -0xec,0x44,0x01,0xfc,0x90,0x9e,0xa1,0x12,0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,
59526 -0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,0x2f,0xd9,0x7f,0x04,0x7e,
59527 -0x08,0x12,0x27,0xde,0x90,0x9e,0xa1,0x12,0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,
59528 -0xef,0x54,0xf0,0xff,0xec,0x90,0x9e,0xa1,0x12,0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,
59529 -0x53,0xef,0x44,0x01,0xff,0xec,0x90,0x9e,0xa1,0x12,0x2a,0x7f,0x90,0x9e,0xa1,0x12,
59530 -0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x08,0x12,0x2f,0xd9,0xe4,
59531 -0x90,0x9e,0x0f,0xf0,0x22,0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x9e,0x1e,0xf0,0xe0,
59532 -0x60,0x04,0xe0,0xf4,0x70,0x21,0xa2,0xaf,0xe4,0x33,0xf5,0x59,0xc2,0xaf,0x90,0x00,
59533 -0x47,0xe0,0x54,0xfb,0xfd,0x7f,0x47,0x12,0x4c,0xe3,0x7d,0x40,0x7f,0x01,0x12,0x36,
59534 -0xaf,0xe5,0x59,0x24,0xff,0x92,0xaf,0x22,0xe4,0xfd,0x7f,0x45,0x12,0x4c,0xe3,0x90,
59535 -0x04,0xfd,0xe4,0xf0,0xa3,0xf0,0x90,0x9e,0x1e,0xf0,0x90,0x9e,0x24,0xf0,0x90,0x9e,
59536 -0x27,0xf0,0x90,0x9e,0x25,0xf0,0x90,0x9e,0x28,0xf0,0x90,0x9e,0x26,0xf0,0x90,0x9e,
59537 -0x29,0xf0,0x90,0x9e,0x10,0x04,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,
59538 -0x15,0xf0,0x90,0x9e,0x1a,0xf0,0x90,0x9e,0x1c,0xf0,0x90,0x9e,0x2e,0xf0,0x90,0x9e,
59539 -0x1f,0xf0,0x90,0x9e,0x1b,0xf0,0x90,0x9e,0x14,0xf0,0x90,0x00,0x51,0xe0,0x44,0xc0,
59540 -0xfd,0x7f,0x51,0x02,0x4c,0xe3,0x90,0x9e,0x2e,0xe0,0x64,0x01,0x60,0x08,0x90,0x9e,
59541 -0x1c,0xe0,0x60,0x02,0xc1,0xbd,0x90,0x9e,0x10,0xe0,0xc3,0x94,0xff,0x50,0x05,0xe0,
59542 -0x04,0xf0,0x80,0x3b,0x90,0x9e,0x11,0xe0,0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,0xf0,
59543 -0xe4,0x80,0x28,0x90,0x9e,0x12,0xe0,0xc3,0x94,0xff,0x50,0x0a,0xe0,0x04,0xf0,0xe4,
59544 -0x90,0x9e,0x11,0xf0,0x80,0x15,0x90,0x9e,0x13,0xe0,0xc3,0x94,0xff,0x50,0x10,0xe0,
59545 -0x04,0xf0,0xe4,0x90,0x9e,0x12,0xf0,0x90,0x9e,0x11,0xf0,0x90,0x9e,0x10,0xf0,0x90,
59546 -0x00,0x44,0xe0,0x54,0x0c,0x60,0x76,0xe0,0x30,0xe2,0x32,0x90,0x9e,0x24,0xe0,0xc3,
59547 -0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,0x24,0x90,0x9e,0x25,0xe0,0xc3,0x94,0xff,
59548 -0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x11,0x90,0x9e,0x26,0xe0,0xc3,0x94,0xff,0x50,
59549 -0x0c,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x25,0xf0,0x90,0x9e,0x24,0xf0,0x90,0x00,0x44,
59550 -0xe0,0x30,0xe3,0x32,0x90,0x9e,0x27,0xe0,0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,
59551 -0x80,0x24,0x90,0x9e,0x28,0xe0,0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,
59552 -0x11,0x90,0x9e,0x29,0xe0,0xc3,0x94,0xff,0x50,0x0c,0xe0,0x04,0xf0,0xe4,0x90,0x9e,
59553 -0x28,0xf0,0x90,0x9e,0x27,0xf0,0x90,0x04,0xfd,0xe0,0x44,0x01,0xf0,0x22,0x17,0xed,
59554 -};
59555 +0x03,0x02,0x7b,0x15,0x7f,0x8c,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xfb,0x12,0x2a,
59556 +0x7f,0x7f,0x44,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xa7,0x12,0x2a,0x7f,0x7f,0x5c,
59557 +0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xab,0x12,0x2a,0x7f,0x7f,0x6c,0x7e,0x0e,0x12,
59558 +0x27,0xde,0x90,0x9d,0xaf,0x12,0x2a,0x7f,0x7f,0x70,0x7e,0x0e,0x12,0x27,0xde,0x90,
59559 +0x9d,0xb3,0x12,0x2a,0x7f,0x7f,0x74,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xb7,0x12,
59560 +0x2a,0x7f,0x7f,0x78,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xbb,0x12,0x2a,0x7f,0x7f,
59561 +0x7c,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xbf,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x0e,
59562 +0x12,0x27,0xde,0x90,0x9d,0xc3,0x12,0x2a,0x7f,0x7f,0x84,0x7e,0x0e,0x12,0x27,0xde,
59563 +0x90,0x9d,0xc7,0x12,0x2a,0x7f,0x7f,0x88,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xcb,
59564 +0x12,0x2a,0x7f,0x7f,0x8c,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xcf,0x12,0x2a,0x7f,
59565 +0x7f,0xd0,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xd3,0x12,0x2a,0x7f,0x7f,0xd4,0x7e,
59566 +0x0e,0x12,0x27,0xde,0x90,0x9d,0xd7,0x12,0x2a,0x7f,0x7f,0xd8,0x7e,0x0e,0x12,0x27,
59567 +0xde,0x90,0x9d,0xdb,0x12,0x2a,0x7f,0x7f,0xdc,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,
59568 +0xdf,0x12,0x2a,0x7f,0x7f,0xe0,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xe3,0x12,0x2a,
59569 +0x7f,0x7f,0xec,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xe7,0x12,0x2a,0x7f,0x7f,0x04,
59570 +0x7e,0x0c,0x12,0x27,0xde,0x90,0x9d,0xeb,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0d,0x12,
59571 +0x27,0xde,0x90,0x9d,0xef,0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,0x27,0xde,0x90,
59572 +0x9d,0xf3,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xf7,0x12,
59573 +0x2a,0x7f,0x7f,0x8c,0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0xa8,0x12,0x2a,0x7f,0x90,
59574 +0x9e,0xa8,0x12,0x43,0x53,0xed,0x44,0xc0,0xfd,0xec,0x90,0x9e,0xa8,0x12,0x2a,0x7f,
59575 +0x90,0x9e,0xa8,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x8c,0x7e,0x08,
59576 +0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x01,0x00,0x00,0x7f,0x44,0x7e,
59577 +0x08,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0xdb,0x25,0xa4,0x7f,0x5c,
59578 +0x7e,0x08,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,
59579 +0x6c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,
59580 +0x7f,0x70,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x04,0x1b,0x25,
59581 +0xa4,0x7f,0x74,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x04,0x1b,
59582 +0x25,0xa4,0x7f,0x78,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x04,
59583 +0x1b,0x25,0xa4,0x7f,0x7c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,
59584 +0x04,0x1b,0x25,0xa4,0x7f,0x80,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,
59585 +0x8b,0x63,0xdb,0x25,0xa4,0x7f,0x84,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,
59586 +0x2a,0x8b,0x04,0x1b,0x25,0xa4,0x7f,0x88,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,
59587 +0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0x8c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,
59588 +0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0xd0,0x7e,0x0e,0x12,0x2f,0xd9,0x90,
59589 +0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0xd4,0x7e,0x0e,0x12,0x2f,0xd9,
59590 +0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0xd8,0x7e,0x0e,0x12,0x2f,
59591 +0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x1b,0x25,0xa4,0x7f,0xdc,0x7e,0x0e,0x12,
59592 +0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x1b,0x25,0xa4,0x7f,0xe0,0x7e,0x0e,
59593 +0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x24,0xdb,0x25,0xa4,0x7f,0xec,0x7e,
59594 +0x0e,0x12,0x2f,0xd9,0x7f,0x04,0x7e,0x0c,0x12,0x27,0xde,0x90,0x9e,0xa8,0x12,0x2a,
59595 +0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0xe4,0xff,0xec,0x90,0x9e,0xa8,0x12,0x2a,0x7f,
59596 +0x90,0x9e,0xa8,0x12,0x43,0x53,0xef,0x44,0x11,0xff,0xec,0x90,0x9e,0xa8,0x12,0x2a,
59597 +0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,
59598 +0x0c,0x12,0x2f,0xd9,0x7f,0x04,0x7e,0x0d,0x12,0x27,0xde,0x90,0x9e,0xa8,0x12,0x2a,
59599 +0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0xef,0x54,0xf0,0xff,0xec,0x90,0x9e,0xa8,0x12,
59600 +0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0xef,0x44,0x01,0xff,0xec,0x90,0x9e,0xa8,
59601 +0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
59602 +0x04,0x7e,0x0d,0x12,0x2f,0xd9,0x7f,0x0c,0x7e,0x09,0x12,0x27,0xde,0x90,0x9e,0xa8,
59603 +0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0xe4,0xff,0xec,0x90,0x9e,0xa8,0x12,
59604 +0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0xef,0x44,0x11,0xff,0xec,0x90,0x9e,0xa8,
59605 +0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
59606 +0x0c,0x7e,0x09,0x12,0x2f,0xd9,0x7f,0x0c,0x7e,0x09,0x12,0x27,0xde,0x90,0x9e,0xa8,
59607 +0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0xed,0x54,0x0f,0xfd,0xec,0x54,0xf0,
59608 +0xfc,0x90,0x9e,0xa8,0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0xed,0x44,0x10,
59609 +0xfd,0xec,0x44,0x01,0xfc,0x90,0x9e,0xa8,0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,
59610 +0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,0x2f,0xd9,0x7f,0x04,
59611 +0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0xa8,0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,
59612 +0x53,0xef,0x54,0xf0,0xff,0xec,0x90,0x9e,0xa8,0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,
59613 +0x43,0x53,0xef,0x44,0x01,0xff,0xec,0x90,0x9e,0xa8,0x12,0x2a,0x7f,0x90,0x9e,0xa8,
59614 +0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x08,0x12,0x2f,0xd9,
59615 +0xe4,0x90,0x9e,0x0f,0xf0,0x22,0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x9e,0x43,0xf0,
59616 +0xe0,0x60,0x04,0xe0,0xf4,0x70,0x21,0xa2,0xaf,0xe4,0x33,0xf5,0x14,0xc2,0xaf,0x90,
59617 +0x00,0x47,0xe0,0x54,0xfb,0xfd,0x7f,0x47,0x12,0x49,0x05,0x7d,0x40,0x7f,0x01,0x12,
59618 +0x36,0xaf,0xe5,0x14,0x24,0xff,0x92,0xaf,0x22,0x90,0x9e,0x3a,0xe0,0xc3,0x94,0x14,
59619 +0x50,0x05,0xe0,0x04,0xf0,0x81,0x01,0x90,0x9e,0x3a,0xe0,0x64,0x14,0x60,0x02,0x81,
59620 +0x01,0x90,0x9e,0x49,0xe0,0x70,0x25,0x90,0x9e,0x4c,0xe0,0x70,0x1f,0x90,0x9e,0x4a,
59621 +0xe0,0x70,0x19,0x90,0x9e,0x4d,0xe0,0x70,0x13,0x90,0x9e,0x4b,0xe0,0x70,0x0d,0x90,
59622 +0x9e,0x4e,0xe0,0x70,0x07,0x90,0x04,0xfd,0xe0,0x54,0xfe,0xf0,0x90,0x9e,0x49,0xe0,
59623 +0x90,0x04,0x44,0xf0,0x90,0x9e,0x4a,0xe0,0x90,0x04,0x45,0xf0,0x90,0x9e,0x4b,0xe0,
59624 +0x90,0x04,0x46,0xf0,0xa3,0xe4,0xf0,0x90,0x9e,0x4c,0xe0,0x90,0x04,0x48,0xf0,0x90,
59625 +0x9e,0x4d,0xe0,0x90,0x04,0x49,0xf0,0x90,0x9e,0x4e,0xe0,0x90,0x04,0x4a,0xf0,0xa3,
59626 +0xe4,0xf0,0x90,0x9e,0x35,0xe0,0x90,0x04,0x4c,0xf0,0x90,0x9e,0x36,0xe0,0x90,0x04,
59627 +0x4d,0xf0,0x90,0x9e,0x37,0xe0,0x90,0x04,0x4e,0xf0,0x90,0x9e,0x38,0xe0,0x90,0x04,
59628 +0x4f,0xf0,0xe4,0x90,0x9e,0x3a,0xf0,0x90,0x9e,0x35,0x04,0xf0,0xe4,0xa3,0xf0,0xa3,
59629 +0xf0,0xa3,0xf0,0x90,0x9e,0x49,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,
59630 +0xf0,0x90,0x05,0x60,0xe0,0x90,0x9e,0x19,0xf0,0x90,0x05,0x61,0xe0,0x90,0x9e,0x1a,
59631 +0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x1b,0xf0,0x90,0x05,0x63,0xe0,0x90,0x9e,0x1c,
59632 +0xf0,0x90,0x9e,0x52,0xe0,0xff,0x90,0x9e,0x1c,0xe0,0xfe,0xd3,0x9f,0x50,0x0b,0x90,
59633 +0x9e,0x52,0xe0,0xc3,0x9e,0xd3,0x94,0x01,0x40,0x11,0x90,0x9e,0x40,0xe0,0xb4,0x01,
59634 +0x02,0x80,0x03,0x90,0x9e,0x44,0xe0,0xff,0x12,0x4c,0xf0,0x22,0x90,0x9e,0x53,0xe0,
59635 +0x64,0x01,0x60,0x08,0x90,0x9e,0x41,0xe0,0x60,0x02,0xa1,0x23,0x90,0x9e,0x35,0xe0,
59636 +0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,0x3b,0x90,0x9e,0x36,0xe0,0xc3,0x94,
59637 +0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x28,0x90,0x9e,0x37,0xe0,0xc3,0x94,0xff,
59638 +0x50,0x0a,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x36,0xf0,0x80,0x15,0x90,0x9e,0x38,0xe0,
59639 +0xc3,0x94,0xff,0x50,0x10,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x37,0xf0,0x90,0x9e,0x36,
59640 +0xf0,0x90,0x9e,0x35,0xf0,0x90,0x00,0x44,0xe0,0x54,0x0c,0x60,0x76,0xe0,0x30,0xe2,
59641 +0x32,0x90,0x9e,0x49,0xe0,0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,0x24,0x90,
59642 +0x9e,0x4a,0xe0,0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x11,0x90,0x9e,
59643 +0x4b,0xe0,0xc3,0x94,0xff,0x50,0x0c,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x4a,0xf0,0x90,
59644 +0x9e,0x49,0xf0,0x90,0x00,0x44,0xe0,0x30,0xe3,0x32,0x90,0x9e,0x4c,0xe0,0xc3,0x94,
59645 +0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,0x24,0x90,0x9e,0x4d,0xe0,0xc3,0x94,0xff,0x50,
59646 +0x06,0xe0,0x04,0xf0,0xe4,0x80,0x11,0x90,0x9e,0x4e,0xe0,0xc3,0x94,0xff,0x50,0x0c,
59647 +0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x4d,0xf0,0x90,0x9e,0x4c,0xf0,0x90,0x04,0xfd,0xe0,
59648 +0x44,0x01,0xf0,0x22,0x68,0x4c,};
59649 +#else
59650 +// =================== v88 TSMC P2PPS with CCX report C2H 2012-12-05 =======================
59651 +u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayLength] = {
59652 +0xC1, 0x88, 0x02, 0x05, 0x58, 0x00, 0x02, 0x00, 0x12, 0x05, 0x17, 0x12, 0xDE, 0x3E, 0x00, 0x00,
59653 +0x94, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
59654 +0x02, 0x46, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
59655 +0x00, 0x00, 0x00, 0x02, 0x60, 0xF2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
59656 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
59657 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
59658 +0x00, 0x00, 0x00, 0x02, 0x68, 0x91, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x4B, 0x87, 0x00, 0x00,
59659 +0x05, 0x04, 0x03, 0x02, 0x00, 0x03, 0x06, 0x05, 0x04, 0x03, 0x00, 0x04, 0x06, 0x05, 0x04, 0x02,
59660 +0x00, 0x04, 0x08, 0x07, 0x06, 0x04, 0x00, 0x06, 0x0A, 0x09, 0x08, 0x06, 0x00, 0x08, 0x0A, 0x09,
59661 +0x08, 0x04, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x02, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x00, 0x00, 0x08,
59662 +0x12, 0x11, 0x10, 0x08, 0x00, 0x10, 0x1A, 0x19, 0x18, 0x10, 0x00, 0x18, 0x22, 0x21, 0x20, 0x18,
59663 +0x00, 0x20, 0x22, 0x21, 0x20, 0x10, 0x00, 0x20, 0x22, 0x21, 0x20, 0x08, 0x00, 0x20, 0x22, 0x21,
59664 +0x1C, 0x08, 0x00, 0x20, 0x22, 0x21, 0x14, 0x08, 0x00, 0x20, 0x22, 0x20, 0x18, 0x08, 0x00, 0x20,
59665 +0x31, 0x30, 0x20, 0x10, 0x00, 0x30, 0x31, 0x30, 0x18, 0x00, 0x00, 0x30, 0x31, 0x2F, 0x10, 0x10,
59666 +0x00, 0x30, 0x31, 0x2C, 0x10, 0x10, 0x00, 0x30, 0x31, 0x28, 0x10, 0x00, 0x00, 0x30, 0x31, 0x20,
59667 +0x10, 0x00, 0x00, 0x30, 0x31, 0x10, 0x10, 0x00, 0x00, 0x30, 0x04, 0x04, 0x04, 0x05, 0x04, 0x04,
59668 +0x05, 0x07, 0x07, 0x07, 0x08, 0x0A, 0x04, 0x04, 0x04, 0x04, 0x06, 0x0A, 0x0B, 0x0D, 0x05, 0x05,
59669 +0x07, 0x07, 0x08, 0x0B, 0x0D, 0x0F, 0x04, 0x04, 0x04, 0x05, 0x07, 0x07, 0x09, 0x09, 0x0C, 0x0E,
59670 +0x10, 0x12, 0x06, 0x07, 0x09, 0x0A, 0x0C, 0x0E, 0x11, 0x13, 0x09, 0x09, 0x09, 0x09, 0x0C, 0x0E,
59671 +0x11, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x26, 0x2A, 0x18, 0x1A,
59672 +0x1D, 0x1F, 0x21, 0x27, 0x29, 0x2A, 0x00, 0x00, 0x00, 0x1F, 0x23, 0x28, 0x2A, 0x2C, 0x00, 0x04,
59673 +0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, 0x00, 0x48, 0x00, 0x60,
59674 +0x00, 0x90, 0x00, 0xC0, 0x00, 0xD8, 0x00, 0x50, 0x00, 0x78, 0x00, 0xA0, 0x00, 0xC8, 0x01, 0x40,
59675 +0x01, 0x90, 0x01, 0xE0, 0x02, 0x30, 0x01, 0x2C, 0x01, 0x40, 0x01, 0xE0, 0x02, 0xD0, 0x03, 0xE8,
59676 +0x04, 0xB0, 0x06, 0x40, 0x07, 0xD0, 0x00, 0x02, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x0C,
59677 +0x00, 0x12, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, 0x00, 0x48, 0x00, 0x60, 0x00, 0x6C, 0x00, 0x28,
59678 +0x00, 0x3C, 0x00, 0x50, 0x00, 0x64, 0x00, 0xA0, 0x00, 0xC8, 0x00, 0xF0, 0x01, 0x18, 0x00, 0x64,
59679 +0x00, 0xA0, 0x00, 0xF0, 0x01, 0x68, 0x01, 0xF4, 0x02, 0x58, 0x03, 0x20, 0x03, 0xE8, 0x02, 0x02,
59680 +0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x07, 0x02, 0x03, 0x04, 0x0A, 0x0C, 0x0E,
59681 +0x10, 0x12, 0x05, 0x07, 0x07, 0x08, 0x0B, 0x12, 0x24, 0x3C, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02,
59682 +0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x05, 0x06,
59683 +0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x20, 0x1E, 0x1C, 0x18, 0x10, 0x18, 0x00, 0x00, 0x00, 0x00,
59684 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
59685 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
59686 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
59687 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
59688 +0xBB, 0x01, 0x0C, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0, 0x22, 0x50,
59689 +0x06, 0xE9, 0x25, 0x82, 0xF8, 0xE6, 0x22, 0xBB, 0xFE, 0x06, 0xE9, 0x25, 0x82, 0xF8, 0xE2, 0x22,
59690 +0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE4, 0x93, 0x22, 0xBB, 0x01, 0x06,
59691 +0x89, 0x82, 0x8A, 0x83, 0xF0, 0x22, 0x50, 0x02, 0xF7, 0x22, 0xBB, 0xFE, 0x01, 0xF3, 0x22, 0xF8,
59692 +0xBB, 0x01, 0x0D, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0x22,
59693 +0x50, 0x06, 0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x22, 0xBB, 0xFE, 0x05, 0xE9, 0x25, 0x82, 0xC8, 0xF2,
59694 +0x22, 0xC5, 0xF0, 0xF8, 0xA3, 0xE0, 0x28, 0xF0, 0xC5, 0xF0, 0xF8, 0xE5, 0x82, 0x15, 0x82, 0x70,
59695 +0x02, 0x15, 0x83, 0xE0, 0x38, 0xF0, 0x22, 0xBB, 0x01, 0x0A, 0x89, 0x82, 0x8A, 0x83, 0xE0, 0xF5,
59696 +0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x06, 0x87, 0xF0, 0x09, 0xE7, 0x19, 0x22, 0xBB, 0xFE, 0x07, 0xE3,
59697 +0xF5, 0xF0, 0x09, 0xE3, 0x19, 0x22, 0x89, 0x82, 0x8A, 0x83, 0xE4, 0x93, 0xF5, 0xF0, 0x74, 0x01,
59698 +0x93, 0x22, 0xBB, 0x01, 0x10, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0,
59699 +0xF5, 0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x09, 0xE9, 0x25, 0x82, 0xF8, 0x86, 0xF0, 0x08, 0xE6, 0x22,
59700 +0xBB, 0xFE, 0x0A, 0xE9, 0x25, 0x82, 0xF8, 0xE2, 0xF5, 0xF0, 0x08, 0xE2, 0x22, 0xE5, 0x83, 0x2A,
59701 +0xF5, 0x83, 0xE9, 0x93, 0xF5, 0xF0, 0xA3, 0xE9, 0x93, 0x22, 0xBB, 0x01, 0x0A, 0x89, 0x82, 0x8A,
59702 +0x83, 0xF0, 0xE5, 0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x06, 0xF7, 0x09, 0xA7, 0xF0, 0x19, 0x22, 0xBB,
59703 +0xFE, 0x06, 0xF3, 0xE5, 0xF0, 0x09, 0xF3, 0x19, 0x22, 0xF8, 0xBB, 0x01, 0x11, 0xE5, 0x82, 0x29,
59704 +0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0xE5, 0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x09,
59705 +0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x08, 0xA6, 0xF0, 0x22, 0xBB, 0xFE, 0x09, 0xE9, 0x25, 0x82, 0xC8,
59706 +0xF2, 0xE5, 0xF0, 0x08, 0xF2, 0x22, 0xEF, 0x4B, 0xFF, 0xEE, 0x4A, 0xFE, 0xED, 0x49, 0xFD, 0xEC,
59707 +0x48, 0xFC, 0x22, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22, 0xA4,
59708 +0x25, 0x82, 0xF5, 0x82, 0xE5, 0xF0, 0x35, 0x83, 0xF5, 0x83, 0x22, 0xE0, 0xFB, 0xA3, 0xE0, 0xFA,
59709 +0xA3, 0xE0, 0xF9, 0x22, 0xF8, 0xE0, 0xFB, 0xA3, 0xA3, 0xE0, 0xF9, 0x25, 0xF0, 0xF0, 0xE5, 0x82,
59710 +0x15, 0x82, 0x70, 0x02, 0x15, 0x83, 0xE0, 0xFA, 0x38, 0xF0, 0x22, 0xEB, 0xF0, 0xA3, 0xEA, 0xF0,
59711 +0xA3, 0xE9, 0xF0, 0x22, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12, 0x74, 0x01, 0x93,
59712 +0x70, 0x0D, 0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83, 0xE4, 0x73, 0x74,
59713 +0x02, 0x93, 0x68, 0x60, 0xEF, 0xA3, 0xA3, 0xA3, 0x80, 0xDF, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4,
59714 +0x93, 0x70, 0x12, 0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5,
59715 +0x82, 0x88, 0x83, 0xE4, 0x73, 0x74, 0x02, 0x93, 0xB5, 0xF0, 0x06, 0x74, 0x03, 0x93, 0x68, 0x60,
59716 +0xE9, 0xA3, 0xA3, 0xA3, 0xA3, 0x80, 0xD8, 0xE4, 0x90, 0x8A, 0xC5, 0xF0, 0xE5, 0x24, 0x70, 0x03,
59717 +0x02, 0x44, 0x9D, 0xE5, 0x21, 0x64, 0x01, 0x60, 0x03, 0x02, 0x44, 0x9D, 0xE5, 0x24, 0x14, 0x60,
59718 +0x29, 0x24, 0xFD, 0x60, 0x25, 0x24, 0x02, 0x24, 0xFB, 0x50, 0x02, 0x80, 0x23, 0x90, 0x8B, 0x0B,
59719 +0xE0, 0x14, 0xF0, 0xE0, 0x60, 0x04, 0xA3, 0xE0, 0x60, 0x16, 0x90, 0x8B, 0x0B, 0xE0, 0x70, 0x0A,
59720 +0x90, 0x8B, 0x19, 0xE0, 0x90, 0x8B, 0x0B, 0xF0, 0x80, 0x00, 0x90, 0x8A, 0xC5, 0x74, 0x01, 0xF0,
59721 +0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x16, 0xA3, 0xE0, 0xB4, 0x06, 0x05, 0xE4, 0x90, 0x8A, 0xC5,
59722 +0xF0, 0xE4, 0xFF, 0x12, 0x4D, 0xE0, 0xEF, 0x70, 0x04, 0x90, 0x8A, 0xC5, 0xF0, 0x90, 0x8A, 0xC5,
59723 +0xE0, 0x60, 0x4A, 0x43, 0x25, 0x10, 0xE4, 0x90, 0x8B, 0x3D, 0xF0, 0x90, 0x8B, 0x0C, 0xE0, 0x75,
59724 +0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x8B, 0x15, 0xE0, 0x2F, 0x90, 0x8B, 0x3E, 0xF0, 0xE4, 0xFB, 0xFD,
59725 +0x7F, 0x54, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x22, 0x54,
59726 +0x0F, 0xC3, 0x94, 0x04, 0x50, 0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x45, 0xA2, 0x90, 0x8B, 0x2C,
59727 +0xE0, 0x30, 0xE0, 0x09, 0x12, 0x7D, 0xC1, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x22, 0xE4, 0xF5,
59728 +0x25, 0xF5, 0x24, 0x75, 0x23, 0x0C, 0x75, 0x22, 0x0C, 0x90, 0x8B, 0x1A, 0xF0, 0x90, 0x8B, 0x18,
59729 +0xF0, 0x90, 0x8B, 0x17, 0xF0, 0x90, 0x8B, 0x19, 0x04, 0xF0, 0x90, 0x8B, 0x0B, 0xF0, 0xE4, 0x90,
59730 +0x8B, 0x1B, 0xF0, 0x90, 0x8B, 0x0D, 0xF0, 0x90, 0x8B, 0x15, 0x74, 0x05, 0xF0, 0xE4, 0x90, 0x8B,
59731 +0x0C, 0xF0, 0x90, 0x8B, 0x13, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90, 0x8B, 0x10, 0xF0, 0xA3, 0x74,
59732 +0x05, 0xF0, 0x90, 0x8B, 0x0F, 0x74, 0x14, 0xF0, 0x90, 0x8B, 0x16, 0x74, 0x05, 0xF0, 0xE4, 0x90,
59733 +0x8B, 0x0E, 0xF0, 0x90, 0x8B, 0x0A, 0xF0, 0x90, 0x8B, 0x08, 0xF0, 0x90, 0x8B, 0x12, 0xF0, 0x22,
59734 +0x7F, 0x00, 0x22, 0x02, 0x45, 0x03, 0x02, 0x45, 0x06, 0x8E, 0x64, 0x8F, 0x65, 0xAD, 0x65, 0xAC,
59735 +0x64, 0xAF, 0x63, 0x12, 0x4A, 0x5B, 0xAF, 0x65, 0xAE, 0x64, 0x90, 0x04, 0x80, 0xE0, 0x54, 0x0F,
59736 +0xFD, 0xAC, 0x07, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x01,
59737 +0xF0, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xFB, 0xF0, 0xAC,
59738 +0x07, 0x74, 0x16, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0xFA, 0xF0, 0x74,
59739 +0x15, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x1F, 0xF0, 0xAC, 0x07, 0x74,
59740 +0x06, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x0F, 0xF0, 0x90, 0x04, 0x53,
59741 +0xE4, 0xF0, 0x90, 0x04, 0x52, 0xF0, 0x90, 0x04, 0x51, 0x74, 0xFF, 0xF0, 0x90, 0x04, 0x50, 0x74,
59742 +0xFD, 0xF0, 0x74, 0x14, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xC0, 0x4D,
59743 +0xFD, 0x74, 0x14, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xED, 0xF0, 0x22, 0x7D, 0x01,
59744 +0x7F, 0x0C, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x67, 0x8D, 0x68, 0xE5, 0x67, 0x54,
59745 +0x0F, 0xFF, 0xE5, 0x22, 0x54, 0x0F, 0x6F, 0x60, 0x72, 0xE5, 0x67, 0x30, 0xE2, 0x30, 0xE5, 0x22,
59746 +0x20, 0xE2, 0x05, 0x7F, 0x01, 0x12, 0x4A, 0xB2, 0xE5, 0x22, 0x30, 0xE3, 0x10, 0xE5, 0x67, 0x20,
59747 +0xE3, 0x0B, 0x12, 0x49, 0xD5, 0xEF, 0x60, 0x53, 0x12, 0x4A, 0xCC, 0x80, 0x4E, 0xE5, 0x22, 0x20,
59748 +0xE3, 0x49, 0xE5, 0x67, 0x30, 0xE3, 0x44, 0xAF, 0x68, 0x12, 0x4A, 0x7C, 0x80, 0x3D, 0xE5, 0x22,
59749 +0x54, 0x0F, 0xFF, 0xBF, 0x0C, 0x0E, 0xE5, 0x67, 0x20, 0xE3, 0x09, 0x12, 0x49, 0xD5, 0xEF, 0x60,
59750 +0x2A, 0x12, 0x4A, 0xCC, 0xE5, 0x22, 0x54, 0x0F, 0xFF, 0xBF, 0x04, 0x0E, 0xE5, 0x67, 0x20, 0xE2,
59751 +0x09, 0x12, 0x49, 0x93, 0xEF, 0x60, 0x14, 0x12, 0x4A, 0x32, 0xE5, 0x22, 0x54, 0x0F, 0xFF, 0xBF,
59752 +0x02, 0x09, 0x12, 0x45, 0x00, 0xEF, 0x60, 0x03, 0x12, 0x4B, 0x10, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
59753 +0x02, 0x46, 0x6E, 0x02, 0x50, 0xC6, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0x40, 0x03, 0xF6,
59754 +0x80, 0x01, 0xF2, 0x08, 0xDF, 0xF4, 0x80, 0x29, 0xE4, 0x93, 0xA3, 0xF8, 0x54, 0x07, 0x24, 0x0C,
59755 +0xC8, 0xC3, 0x33, 0xC4, 0x54, 0x0F, 0x44, 0x20, 0xC8, 0x83, 0x40, 0x04, 0xF4, 0x56, 0x80, 0x01,
59756 +0x46, 0xF6, 0xDF, 0xE4, 0x80, 0x0B, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x90, 0x4B,
59757 +0x23, 0xE4, 0x7E, 0x01, 0x93, 0x60, 0xBC, 0xA3, 0xFF, 0x54, 0x3F, 0x30, 0xE5, 0x09, 0x54, 0x1F,
59758 +0xFE, 0xE4, 0x93, 0xA3, 0x60, 0x01, 0x0E, 0xCF, 0x54, 0xC0, 0x25, 0xE0, 0x60, 0xA8, 0x40, 0xB8,
59759 +0xE4, 0x93, 0xA3, 0xFA, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA,
59760 +0xC5, 0x83, 0xCA, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA, 0xDF, 0xE9, 0xDE,
59761 +0xE7, 0x80, 0xBE, 0xE5, 0x21, 0x64, 0x01, 0x70, 0x67, 0xE5, 0x24, 0x60, 0x63, 0xE5, 0x24, 0x64,
59762 +0x02, 0x60, 0x06, 0xE5, 0x24, 0x64, 0x05, 0x70, 0x27, 0x90, 0x06, 0xAB, 0xE0, 0x90, 0x8B, 0x0B,
59763 +0xF0, 0x90, 0x06, 0xAA, 0xE0, 0x90, 0x8B, 0x19, 0xF0, 0x90, 0x8B, 0x0B, 0xE0, 0x70, 0x07, 0x90,
59764 +0x8B, 0x19, 0xE0, 0xFF, 0x80, 0x05, 0x90, 0x8B, 0x0B, 0xE0, 0xFF, 0x90, 0x8B, 0x0B, 0xEF, 0xF0,
59765 +0x90, 0x8B, 0x0D, 0xE0, 0x60, 0x02, 0xE4, 0xF0, 0xE4, 0x90, 0x8B, 0x0C, 0xF0, 0x90, 0x05, 0x58,
59766 +0x74, 0x03, 0xF0, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x53, 0x25,
59767 +0xFD, 0x53, 0x25, 0xEF, 0xE5, 0x24, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x03, 0x12, 0x47, 0x8E,
59768 +0x22, 0xEF, 0x64, 0x01, 0x70, 0x35, 0x7D, 0x78, 0x7F, 0x02, 0x12, 0x36, 0x75, 0x7D, 0x02, 0x7F,
59769 +0x03, 0x12, 0x36, 0x75, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x12,
59770 +0x45, 0x9E, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x03, 0x12, 0x7D, 0xC1, 0x90, 0x06, 0x04, 0xE0,
59771 +0x54, 0x7F, 0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x54, 0xF8, 0xF0, 0x22, 0x90, 0x01, 0x36, 0x74, 0x7B,
59772 +0xF0, 0xA3, 0x74, 0x02, 0xF0, 0x7D, 0x7B, 0xFF, 0x12, 0x36, 0xE6, 0x7D, 0x02, 0x7F, 0x03, 0x12,
59773 +0x36, 0xE6, 0x90, 0x06, 0x04, 0xE0, 0x44, 0x80, 0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x44, 0x07, 0xF0,
59774 +0x12, 0x4B, 0x4F, 0xE5, 0x21, 0x20, 0xE0, 0x05, 0xE4, 0x90, 0x8B, 0x0D, 0xF0, 0x22, 0xE4, 0x90,
59775 +0x8A, 0xC5, 0xF0, 0x90, 0x06, 0xA9, 0xE0, 0x90, 0x8A, 0xC5, 0xF0, 0xE0, 0x54, 0xC0, 0x70, 0x09,
59776 +0x53, 0x25, 0xFE, 0x53, 0x25, 0xFD, 0x12, 0x4A, 0xFC, 0x90, 0x8A, 0xC5, 0xE0, 0x30, 0xE6, 0x15,
59777 +0x43, 0x25, 0x01, 0x90, 0x8B, 0x1A, 0xE0, 0x64, 0x02, 0x60, 0x05, 0x12, 0x4A, 0x97, 0x80, 0x08,
59778 +0x12, 0x49, 0x49, 0x80, 0x03, 0x53, 0x25, 0xFE, 0x90, 0x8A, 0xC5, 0xE0, 0x30, 0xE7, 0x27, 0x43,
59779 +0x25, 0x02, 0xE4, 0x90, 0x8B, 0x3D, 0xF0, 0x90, 0x8B, 0x11, 0xE0, 0x90, 0x8B, 0x3E, 0xF0, 0xE4,
59780 +0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0x90,
59781 +0x8B, 0x1B, 0x74, 0x01, 0xF0, 0x22, 0x53, 0x25, 0xFD, 0x22, 0x90, 0x8A, 0xDE, 0x12, 0x43, 0x8B,
59782 +0x12, 0x4B, 0x43, 0x90, 0x8A, 0xDE, 0x12, 0x43, 0x6B, 0x12, 0x29, 0xD9, 0xF5, 0x24, 0x14, 0x60,
59783 +0x0E, 0x14, 0x60, 0x1F, 0x14, 0x60, 0x31, 0x24, 0x03, 0x70, 0x44, 0x7F, 0x01, 0x80, 0x3D, 0x90,
59784 +0x8A, 0xDE, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFD, 0xE4, 0xFF, 0x12, 0x4A,
59785 +0x07, 0x80, 0x29, 0x90, 0x8A, 0xDE, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFD,
59786 +0x7F, 0x01, 0x12, 0x4A, 0x07, 0x1F, 0x80, 0x14, 0x90, 0x8A, 0xDE, 0x12, 0x43, 0x6B, 0x90, 0x00,
59787 +0x02, 0x12, 0x42, 0x20, 0xFD, 0x7F, 0x02, 0x12, 0x4A, 0x07, 0xE4, 0xFF, 0x12, 0x47, 0x21, 0x22,
59788 +0xE4, 0x90, 0x8A, 0xCB, 0xF0, 0xE5, 0x24, 0x60, 0x49, 0x90, 0x8B, 0x1B, 0xE0, 0x60, 0x0D, 0xE4,
59789 +0xF0, 0x53, 0x25, 0xFD, 0xE5, 0x25, 0x54, 0x07, 0x70, 0x38, 0x80, 0x33, 0x90, 0x8B, 0x0C, 0xE0,
59790 +0x04, 0xF0, 0x53, 0x25, 0xEF, 0x90, 0x8A, 0xCB, 0xE0, 0xFF, 0x90, 0x8B, 0x10, 0xE0, 0x2F, 0xFF,
59791 +0xE4, 0x33, 0xFE, 0x90, 0x8B, 0x0C, 0xE0, 0xD3, 0x9F, 0xEE, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98,
59792 +0x40, 0x0D, 0xE5, 0x21, 0xB4, 0x01, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xE0, 0x04, 0xF0, 0x22, 0x12,
59793 +0x4A, 0xFC, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x63, 0x90, 0x04, 0x1D, 0xE0,
59794 +0x60, 0x24, 0x90, 0x05, 0x22, 0xE0, 0xF5, 0x66, 0x74, 0xFF, 0xF0, 0x12, 0x7E, 0x9A, 0xBF, 0x01,
59795 +0x0D, 0x90, 0x8A, 0xF9, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x5F, 0xFD, 0x12, 0x45, 0x09, 0x90, 0x05,
59796 +0x22, 0xE5, 0x66, 0xF0, 0x80, 0x0D, 0x90, 0x8A, 0xF9, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x5F, 0xFD,
59797 +0x12, 0x45, 0x09, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE5, 0x24,
59798 +0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x41, 0x90, 0x8B, 0x1A, 0xE0, 0x60, 0x2B, 0x12, 0x45, 0x9E,
59799 +0xE4, 0x90, 0x8B, 0x3D, 0xF0, 0x90, 0x8B, 0x0F, 0xE0, 0x90, 0x8B, 0x3E, 0xF0, 0xE4, 0xFB, 0xFD,
59800 +0x7F, 0x58, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92,
59801 +0x74, 0x01, 0xF0, 0x90, 0x8B, 0x18, 0xF0, 0x22, 0xE5, 0x22, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50,
59802 +0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x45, 0xA2, 0x22, 0x90, 0x01, 0x5F, 0xE4, 0xF0, 0x90, 0x01,
59803 +0x3C, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0x8B, 0x3D, 0xF0, 0x90, 0x8B, 0x0F, 0xE0, 0x90, 0x8B, 0x3E,
59804 +0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x5C, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x5F, 0x74, 0x05,
59805 +0xF0, 0x90, 0x06, 0x92, 0x74, 0x02, 0xF0, 0x90, 0x8B, 0x17, 0x14, 0xF0, 0xE5, 0x22, 0x54, 0x0F,
59806 +0xC3, 0x94, 0x0C, 0x50, 0x0D, 0x12, 0x45, 0x9E, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x03, 0x12,
59807 +0x7D, 0xC1, 0x22, 0x12, 0x4B, 0x34, 0xEF, 0x64, 0x01, 0x70, 0x37, 0xE5, 0x25, 0x54, 0x03, 0x70,
59808 +0x31, 0xE5, 0x23, 0x54, 0x0F, 0xD3, 0x94, 0x02, 0x50, 0x28, 0xE5, 0x25, 0x20, 0xE2, 0x23, 0xE5,
59809 +0x25, 0x20, 0xE4, 0x1E, 0x90, 0x8B, 0x0D, 0xE0, 0x70, 0x18, 0x90, 0x8B, 0x12, 0xE0, 0x70, 0x12,
59810 +0xE5, 0x26, 0x70, 0x0E, 0x90, 0x01, 0xB9, 0xE4, 0xF0, 0x90, 0x01, 0xB8, 0x74, 0x04, 0xF0, 0x7F,
59811 +0x01, 0x22, 0x7F, 0x00, 0x22, 0x12, 0x4B, 0x34, 0xEF, 0x64, 0x01, 0x70, 0x27, 0x90, 0x8B, 0x18,
59812 +0xE0, 0x70, 0x21, 0x90, 0x8B, 0x17, 0xE0, 0x70, 0x1B, 0xE5, 0x23, 0x54, 0x0F, 0xD3, 0x94, 0x04,
59813 +0x50, 0x12, 0xE5, 0x26, 0x70, 0x0E, 0x90, 0x01, 0xB9, 0xE4, 0xF0, 0x90, 0x01, 0xB8, 0x74, 0x08,
59814 +0xF0, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0xEF, 0x24, 0xFE, 0x60, 0x0B, 0x04, 0x70, 0x22, 0x90,
59815 +0x8B, 0x19, 0x74, 0x01, 0xF0, 0x80, 0x16, 0xED, 0x70, 0x0A, 0x90, 0x8B, 0x16, 0xE0, 0x90, 0x8B,
59816 +0x19, 0xF0, 0x80, 0x05, 0x90, 0x8B, 0x19, 0xED, 0xF0, 0x90, 0x8B, 0x19, 0xE0, 0x90, 0x8B, 0x0B,
59817 +0xF0, 0x22, 0x90, 0x01, 0x37, 0x74, 0x02, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12, 0x7E,
59818 +0x9A, 0xEF, 0x70, 0x06, 0x90, 0x01, 0xC8, 0x74, 0xFD, 0xF0, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x36,
59819 +0xE6, 0x12, 0x7C, 0x50, 0x53, 0x22, 0xF0, 0x43, 0x22, 0x02, 0x22, 0xEF, 0x60, 0x0F, 0x74, 0x21,
59820 +0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x22, 0x74, 0x21, 0x2D,
59821 +0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0x22, 0x90, 0x06, 0x04, 0xE0,
59822 +0x54, 0xBF, 0xF0, 0xEF, 0x60, 0x0A, 0xE5, 0x21, 0xB4, 0x01, 0x05, 0xE4, 0xFF, 0x12, 0x48, 0xB3,
59823 +0x53, 0x22, 0xF0, 0x43, 0x22, 0x0C, 0x22, 0x90, 0x04, 0x1D, 0xE0, 0x70, 0x14, 0x90, 0x8A, 0xF8,
59824 +0xE0, 0xFF, 0xE4, 0xFD, 0x12, 0x5F, 0xFD, 0x8E, 0x69, 0x8F, 0x6A, 0x90, 0x04, 0x1F, 0x74, 0x20,
59825 +0xF0, 0x22, 0x90, 0x8B, 0x52, 0xEF, 0xF0, 0x12, 0x7D, 0x42, 0x90, 0x8B, 0x52, 0xE0, 0x60, 0x05,
59826 +0x90, 0x05, 0x22, 0xE4, 0xF0, 0x53, 0x22, 0xF0, 0x43, 0x22, 0x04, 0x22, 0x90, 0x06, 0x04, 0xE0,
59827 +0x44, 0x40, 0xF0, 0xE5, 0x21, 0xB4, 0x01, 0x05, 0x7F, 0x01, 0x12, 0x48, 0xB3, 0x53, 0x22, 0xF0,
59828 +0x43, 0x22, 0x04, 0x22, 0xE5, 0x23, 0x30, 0xE6, 0x12, 0xE5, 0x23, 0x54, 0x0F, 0xFF, 0x90, 0x01,
59829 +0x2F, 0xE0, 0x54, 0x80, 0x4F, 0x64, 0x80, 0xF0, 0x53, 0x23, 0xBF, 0x22, 0x90, 0x8B, 0x2C, 0xE0,
59830 +0x30, 0xE0, 0x05, 0xAF, 0x23, 0x02, 0x7E, 0x06, 0x7D, 0x01, 0xAF, 0x23, 0x12, 0x45, 0xA2, 0x22,
59831 +0x53, 0x22, 0xF0, 0x43, 0x22, 0x01, 0x12, 0x4B, 0x5A, 0x12, 0x4B, 0x5B, 0x53, 0x22, 0xF0, 0x43,
59832 +0x22, 0x02, 0x22, 0x41, 0x8A, 0xF6, 0x00, 0x41, 0x8B, 0x05, 0x00, 0x41, 0x8B, 0x51, 0x00, 0x41,
59833 +0x8B, 0x53, 0x00, 0x00, 0x90, 0x04, 0x1B, 0xE0, 0x54, 0x7F, 0x64, 0x7F, 0x7F, 0x01, 0x60, 0x02,
59834 +0x7F, 0x00, 0x22, 0xE4, 0x90, 0x8B, 0x1B, 0xF0, 0x90, 0x8B, 0x0C, 0xF0, 0xF5, 0x25, 0x22, 0x90,
59835 +0x8B, 0x13, 0xE0, 0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22, 0x22, 0x22, 0xF0, 0x90, 0x8B, 0x0F,
59836 +0xE0, 0x90, 0x8B, 0x3E, 0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0xD3, 0x10, 0xAF, 0x01,
59837 +0xC3, 0xC0, 0xD0, 0x90, 0x8B, 0x3D, 0xE0, 0xFB, 0xA3, 0xE0, 0xF5, 0x44, 0xE4, 0xF5, 0x45, 0x12,
59838 +0x35, 0xAB, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0,
59839 +0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05,
59840 +0xC0, 0x06, 0xC0, 0x07, 0x75, 0x0E, 0x00, 0x90, 0x01, 0xC4, 0x74, 0x87, 0xF0, 0x74, 0x4B, 0xA3,
59841 +0xF0, 0x53, 0x91, 0xDF, 0x90, 0x01, 0x3C, 0xE0, 0x55, 0x30, 0xF5, 0x34, 0xA3, 0xE0, 0x55, 0x31,
59842 +0xF5, 0x35, 0xA3, 0xE0, 0x55, 0x32, 0xF5, 0x36, 0xA3, 0xE0, 0x55, 0x33, 0xF5, 0x37, 0xE5, 0x34,
59843 +0x30, 0xE0, 0x51, 0x90, 0x01, 0x3C, 0x74, 0x01, 0xF0, 0x90, 0x8B, 0x32, 0xE0, 0x30, 0xE0, 0x1F,
59844 +0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x18, 0x90, 0x8B, 0x34, 0xE4, 0xF0, 0x90, 0x8B, 0x33, 0xE0,
59845 +0x64, 0x03, 0x60, 0x0B, 0x7F, 0x01, 0xB1, 0xE0, 0xEF, 0x70, 0x04, 0x7F, 0x02, 0xD1, 0x89, 0x90,
59846 +0x8B, 0x2C, 0xE0, 0xFF, 0x30, 0xE0, 0x1D, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x16, 0x90, 0x8B,
59847 +0x2E, 0xE4, 0xF0, 0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x06, 0x60, 0x09, 0xE4, 0xFF, 0xB1, 0xE0, 0xEF,
59848 +0x70, 0x02, 0xD1, 0x56, 0xE5, 0x34, 0x30, 0xE1, 0x08, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x11,
59849 +0x60, 0xE5, 0x34, 0x30, 0xE2, 0x28, 0x90, 0x01, 0x3C, 0x74, 0x04, 0xF0, 0x90, 0x06, 0x92, 0xE0,
59850 +0x30, 0xE0, 0x14, 0x90, 0x8B, 0x3D, 0xE4, 0x71, 0x5C, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90,
59851 +0x06, 0x92, 0x74, 0x01, 0xF0, 0x80, 0x07, 0x90, 0x8B, 0x18, 0xE4, 0xF0, 0x51, 0xFC, 0xE5, 0x34,
59852 +0x30, 0xE3, 0x38, 0x90, 0x01, 0x3C, 0x74, 0x08, 0xF0, 0x90, 0x06, 0x92, 0xE0, 0x30, 0xE1, 0x24,
59853 +0x90, 0x8B, 0x3D, 0xE4, 0xF0, 0x90, 0x8B, 0x0F, 0xE0, 0x90, 0x8B, 0x3E, 0xF0, 0xE4, 0xFB, 0xFD,
59854 +0x7F, 0x5C, 0x7E, 0x01, 0x71, 0x6C, 0x90, 0x01, 0x5F, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74,
59855 +0x02, 0xF0, 0x80, 0x07, 0x90, 0x8B, 0x17, 0xE4, 0xF0, 0x51, 0xFC, 0xE5, 0x34, 0x30, 0xE4, 0x09,
59856 +0x90, 0x01, 0x3C, 0x74, 0x10, 0xF0, 0x12, 0x51, 0xC9, 0xE5, 0x34, 0x30, 0xE5, 0x06, 0x90, 0x01,
59857 +0x3C, 0x74, 0x20, 0xF0, 0xE5, 0x35, 0x30, 0xE0, 0x10, 0x90, 0x01, 0x3D, 0x74, 0x01, 0xF0, 0x90,
59858 +0x00, 0x83, 0xE0, 0xF5, 0x23, 0x51, 0xE4, 0x51, 0xFC, 0xE5, 0x35, 0x30, 0xE2, 0x06, 0x90, 0x01,
59859 +0x3D, 0x74, 0x04, 0xF0, 0xE5, 0x35, 0x30, 0xE4, 0x1B, 0x90, 0x01, 0x3D, 0x74, 0x10, 0xF0, 0x90,
59860 +0x8B, 0x05, 0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x05,
59861 +0xFD, 0xE0, 0x04, 0xF0, 0xE5, 0x36, 0x30, 0xE0, 0x75, 0x90, 0x01, 0x3E, 0x74, 0x01, 0xF0, 0x90,
59862 +0x8B, 0x32, 0xE0, 0x30, 0xE0, 0x18, 0x90, 0x8B, 0x36, 0xE4, 0xF0, 0x90, 0x8B, 0x33, 0xE0, 0x64,
59863 +0x03, 0x60, 0x0B, 0x7F, 0x01, 0xB1, 0xE0, 0xEF, 0x60, 0x04, 0x7F, 0x01, 0xD1, 0x89, 0x90, 0x8B,
59864 +0x2C, 0xE0, 0x30, 0xE0, 0x49, 0x90, 0x8B, 0x30, 0xE4, 0xF0, 0xFF, 0xB1, 0xE0, 0xEF, 0x60, 0x3E,
59865 +0x12, 0x65, 0x5F, 0x90, 0x8B, 0x2D, 0xE0, 0xFF, 0x64, 0x06, 0x60, 0x32, 0xEF, 0xB4, 0x04, 0x02,
59866 +0x80, 0x07, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05, 0x04, 0xE4, 0xFF, 0x80, 0x14, 0x90, 0x8B, 0x2D,
59867 +0xE0, 0xB4, 0x03, 0x04, 0x7F, 0x01, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x02, 0x05, 0x7F,
59868 +0x01, 0x12, 0x65, 0x82, 0x7D, 0x01, 0xAF, 0x23, 0x12, 0x45, 0xA2, 0x12, 0x7D, 0xC1, 0xE5, 0x36,
59869 +0x30, 0xE1, 0x47, 0x90, 0x01, 0x3E, 0x74, 0x02, 0xF0, 0x90, 0x8B, 0x32, 0xE0, 0x30, 0xE0, 0x19,
59870 +0x90, 0x8B, 0x36, 0x74, 0x01, 0xF0, 0x90, 0x8B, 0x33, 0xE0, 0x64, 0x03, 0x60, 0x0B, 0x7F, 0x01,
59871 +0xB1, 0xE0, 0xEF, 0x70, 0x04, 0x7F, 0x02, 0xD1, 0x89, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x1A,
59872 +0x90, 0x8B, 0x30, 0x74, 0x01, 0xF0, 0x12, 0x7E, 0x2B, 0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x06, 0x60,
59873 +0x09, 0xE4, 0xFF, 0xB1, 0xE0, 0xEF, 0x70, 0x02, 0xD1, 0x56, 0x74, 0x87, 0x04, 0x90, 0x01, 0xC4,
59874 +0xF0, 0x74, 0x4B, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0,
59875 +0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32,
59876 +0xEF, 0x64, 0x01, 0x70, 0x3D, 0x90, 0x8B, 0x35, 0xE0, 0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x8B,
59877 +0x08, 0xE0, 0x60, 0x03, 0x7F, 0x01, 0x22, 0x90, 0x8B, 0x34, 0xE0, 0x60, 0x03, 0x7F, 0x01, 0x22,
59878 +0x90, 0x8B, 0x32, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x0B, 0xEF, 0xC4, 0x13, 0x54,
59879 +0x07, 0x30, 0xE0, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x8B, 0x36, 0xE0, 0x7F, 0x01, 0x60, 0x36, 0x7F,
59880 +0x00, 0x22, 0x90, 0x8B, 0x2F, 0xE0, 0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x8B, 0x08, 0xE0, 0x60,
59881 +0x03, 0x7F, 0x01, 0x22, 0x90, 0x8B, 0x2E, 0xE0, 0x60, 0x03, 0x7F, 0x01, 0x22, 0x90, 0x8B, 0x2C,
59882 +0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x8B, 0x30, 0xE0, 0x7F,
59883 +0x01, 0x60, 0x02, 0x7F, 0x00, 0x22, 0x90, 0x8B, 0x0D, 0xE0, 0x60, 0x16, 0x90, 0x8B, 0x2D, 0xE0,
59884 +0x70, 0x04, 0x7F, 0x05, 0x80, 0x1F, 0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x01, 0x70, 0x1A, 0x7F, 0x02,
59885 +0x80, 0x13, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x01, 0x04, 0x7F, 0x03, 0x80, 0x08, 0x90, 0x8B, 0x2D,
59886 +0xE0, 0x70, 0x05, 0x7F, 0x04, 0x12, 0x65, 0x82, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
59887 +0x90, 0x8B, 0x33, 0xE0, 0x90, 0x8B, 0x55, 0xF0, 0x6F, 0x70, 0x02, 0xE1, 0x55, 0xEF, 0x14, 0x60,
59888 +0x3B, 0x14, 0x60, 0x5F, 0x14, 0x70, 0x02, 0xE1, 0x30, 0x24, 0x03, 0x60, 0x02, 0xE1, 0x55, 0x90,
59889 +0x8B, 0x55, 0xE0, 0xB4, 0x03, 0x04, 0xF1, 0xC2, 0xE1, 0x55, 0x90, 0x8B, 0x55, 0xE0, 0xB4, 0x02,
59890 +0x04, 0xF1, 0xAF, 0xE1, 0x55, 0x90, 0x8B, 0x55, 0xE0, 0xB4, 0x04, 0x04, 0xF1, 0xC6, 0xE1, 0x55,
59891 +0x90, 0x8B, 0x55, 0xE0, 0x64, 0x01, 0x70, 0x7D, 0xF1, 0xB1, 0x80, 0x79, 0x90, 0x8B, 0x55, 0xE0,
59892 +0xFF, 0xB4, 0x03, 0x04, 0xF1, 0xCA, 0x80, 0x6D, 0xEF, 0xB4, 0x02, 0x04, 0xF1, 0xA1, 0x80, 0x65,
59893 +0x90, 0x8B, 0x55, 0xE0, 0xFF, 0xB4, 0x04, 0x04, 0xF1, 0xD5, 0x80, 0x59, 0xEF, 0x70, 0x56, 0xF1,
59894 +0x8E, 0x80, 0x52, 0x90, 0x8B, 0x55, 0xE0, 0xB4, 0x03, 0x05, 0x12, 0x7C, 0x41, 0x80, 0x46, 0x90,
59895 +0x8B, 0x55, 0xE0, 0xB4, 0x01, 0x04, 0xF1, 0x72, 0x80, 0x3B, 0x90, 0x8B, 0x55, 0xE0, 0xB4, 0x04,
59896 +0x05, 0x12, 0x7D, 0x23, 0x80, 0x2F, 0x90, 0x8B, 0x55, 0xE0, 0x70, 0x29, 0xF1, 0x70, 0x80, 0x25,
59897 +0x90, 0x8B, 0x55, 0xE0, 0xFF, 0xB4, 0x01, 0x04, 0xF1, 0x5A, 0x80, 0x19, 0xEF, 0xB4, 0x02, 0x04,
59898 +0xF1, 0x6B, 0x80, 0x11, 0x90, 0x8B, 0x55, 0xE0, 0xFF, 0xB4, 0x04, 0x04, 0xF1, 0x5A, 0x80, 0x05,
59899 +0xEF, 0x70, 0x02, 0xF1, 0x67, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0,
59900 +0x90, 0x8B, 0x33, 0x74, 0x03, 0xF0, 0x22, 0xF1, 0x8E, 0x80, 0xEF, 0x12, 0x7D, 0x42, 0x80, 0xEA,
59901 +0xF1, 0x8E, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12, 0x7E, 0x9A, 0xEF, 0x70, 0x06, 0x90, 0x01,
59902 +0xC8, 0x74, 0xFD, 0xF0, 0x12, 0x7C, 0x50, 0x90, 0x8B, 0x33, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x01,
59903 +0x3E, 0x74, 0x03, 0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x37, 0x00, 0x90, 0x8B, 0x33, 0x74, 0x01, 0xF0,
59904 +0x22, 0x12, 0x7D, 0x42, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x8B, 0x33, 0x04, 0xF0, 0x22, 0xF1,
59905 +0xA1, 0x7D, 0x03, 0x7F, 0x02, 0x12, 0x36, 0x92, 0x90, 0x05, 0x27, 0xE4, 0xF0, 0x90, 0x8B, 0x33,
59906 +0xF0, 0x22, 0xF1, 0xCA, 0x80, 0xEB, 0xF1, 0xD5, 0x80, 0xE7, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90,
59907 +0x8B, 0x33, 0x04, 0xF0, 0x22, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x8B, 0x33, 0x04, 0xF0, 0x22,
59908 +0xF1, 0x8E, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x8B, 0x33, 0x74, 0x04, 0xF0, 0x22, 0x90,
59909 +0x02, 0x84, 0xEF, 0xF0, 0xA3, 0xEE, 0xF0, 0xA3, 0x74, 0x05, 0xF0, 0x22, 0xEF, 0x8E, 0xF0, 0x12,
59910 +0x43, 0xBA, 0x50, 0x1A, 0x00, 0x40, 0x50, 0x42, 0x00, 0x80, 0x50, 0x6D, 0x01, 0x00, 0x50, 0x81,
59911 +0x02, 0x00, 0x50, 0x99, 0x04, 0x00, 0x00, 0x00, 0x50, 0xB6, 0xED, 0x54, 0x3F, 0x70, 0x04, 0xFE,
59912 +0xFF, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x40, 0xEF, 0x2D, 0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x06,
59913 +0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78, 0x06, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9,
59914 +0x80, 0x26, 0xED, 0x54, 0x7F, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x80, 0xEF,
59915 +0x2D, 0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x07, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78,
59916 +0x07, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFD, 0xAC, 0x06, 0x80, 0x49, 0xED, 0x70, 0x04,
59917 +0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x01, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x7D, 0x00, 0xFC, 0x80,
59918 +0x35, 0xEC, 0x54, 0x01, 0x4D, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x02, 0x7F, 0x00, 0xEF,
59919 +0x2D, 0xEE, 0x3C, 0xC3, 0x13, 0x7D, 0x00, 0x80, 0x1A, 0xEC, 0x54, 0x03, 0x4D, 0x70, 0x04, 0xFE,
59920 +0xFF, 0x80, 0x04, 0x7E, 0x04, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x13, 0x13, 0x54, 0x3F, 0x7D,
59921 +0x00, 0x25, 0xE0, 0x25, 0xE0, 0xFC, 0xAE, 0x04, 0xAF, 0x05, 0x22, 0x90, 0x01, 0xE4, 0x74, 0x58,
59922 +0xF0, 0xA3, 0x74, 0x02, 0xF0, 0x22, 0xE4, 0x90, 0x8A, 0xCC, 0xF0, 0xA3, 0xF0, 0x75, 0x8E, 0x02,
59923 +0x91, 0x0E, 0x12, 0x68, 0x44, 0x90, 0x8B, 0x07, 0xEF, 0xF0, 0x12, 0x68, 0x51, 0x90, 0x8B, 0x09,
59924 +0xEF, 0xF0, 0x12, 0x68, 0x5D, 0x90, 0x8A, 0xF4, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xF5, 0x55,
59925 +0xF5, 0x21, 0x12, 0x72, 0x55, 0x12, 0x44, 0x9E, 0x12, 0x32, 0x3D, 0x7F, 0x03, 0x12, 0x78, 0x42,
59926 +0x12, 0x7C, 0x3D, 0x12, 0x68, 0x0A, 0x12, 0x68, 0x75, 0x12, 0x68, 0x8A, 0x12, 0x68, 0x28, 0x12,
59927 +0x68, 0x43, 0x90, 0x8A, 0xCE, 0xE5, 0xD9, 0xF0, 0x31, 0x5F, 0xC2, 0xAF, 0x90, 0x00, 0x80, 0xE0,
59928 +0x44, 0x40, 0xF0, 0x51, 0x0E, 0x75, 0xE8, 0x03, 0x43, 0xA8, 0x85, 0xD2, 0xAF, 0x11, 0xBB, 0x90,
59929 +0x8A, 0xCC, 0xE0, 0x64, 0x01, 0xF0, 0x24, 0xC6, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x50, 0xA3, 0xF0,
59930 +0xE5, 0x55, 0x30, 0xE4, 0x09, 0xC2, 0xAF, 0x53, 0x55, 0xEF, 0xD2, 0xAF, 0xB1, 0x59, 0xE5, 0x55,
59931 +0x30, 0xE6, 0xDC, 0xC2, 0xAF, 0x53, 0x55, 0xBF, 0xD2, 0xAF, 0x12, 0x6B, 0xBD, 0x80, 0xD0, 0x90,
59932 +0x01, 0x3C, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x34, 0xF0, 0xA3, 0xF0, 0xA3,
59933 +0xF0, 0xA3, 0xF0, 0xFD, 0x7F, 0x54, 0x31, 0x88, 0x7D, 0xFF, 0x7F, 0x55, 0x31, 0x88, 0x7D, 0xFF,
59934 +0x7F, 0x56, 0x31, 0x88, 0x7D, 0xFF, 0x7F, 0x57, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F,
59935 +0x82, 0x75, 0x83, 0x00, 0xED, 0xF0, 0x51, 0x0E, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x01, 0x30,
59936 +0xE4, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x38, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
59937 +0xA3, 0xF0, 0xFD, 0x7F, 0x50, 0x31, 0x88, 0xE4, 0xFD, 0x7F, 0x51, 0x31, 0x88, 0xE4, 0xFD, 0x7F,
59938 +0x52, 0x31, 0x88, 0xE4, 0xFD, 0x7F, 0x53, 0x80, 0xBF, 0xE5, 0x5E, 0x64, 0x01, 0x70, 0x3B, 0x71,
59939 +0x4E, 0xBF, 0x01, 0x04, 0x7F, 0x01, 0x71, 0x42, 0x90, 0x00, 0x46, 0xE0, 0x44, 0x04, 0xFD, 0x7F,
59940 +0x46, 0x31, 0x88, 0x90, 0x00, 0x44, 0xE0, 0x54, 0xFB, 0xFD, 0x7F, 0x44, 0x31, 0x88, 0x90, 0x00,
59941 +0x46, 0xE0, 0x54, 0xFB, 0xFD, 0x7F, 0x46, 0x31, 0x88, 0x7F, 0x02, 0x71, 0x6A, 0x8F, 0x62, 0x90,
59942 +0x01, 0xC9, 0xE5, 0x62, 0xF0, 0xB4, 0x01, 0x02, 0x51, 0xE2, 0x22, 0xE0, 0x5F, 0xF0, 0xD3, 0x10,
59943 +0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F, 0x10, 0xDF, 0xFE, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10,
59944 +0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x8A, 0xE0, 0xED, 0xF0, 0x90, 0x8A, 0xDF, 0xEF, 0xF0, 0xD3,
59945 +0x94, 0x07, 0x50, 0x4E, 0xA3, 0xE0, 0x70, 0x1A, 0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0x74, 0x01, 0xA8,
59946 +0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x47, 0xE0, 0x5F, 0xF0,
59947 +0x80, 0x17, 0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33,
59948 +0xD8, 0xFC, 0xFF, 0x90, 0x00, 0x47, 0xE0, 0x4F, 0xF0, 0x51, 0x0E, 0x90, 0x8A, 0xDF, 0xE0, 0xFF,
59949 +0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x46,
59950 +0x80, 0x59, 0x90, 0x8A, 0xDF, 0xE0, 0x24, 0xF8, 0xF0, 0xA3, 0xE0, 0x70, 0x1D, 0x90, 0x8A, 0xDF,
59951 +0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xC4, 0x54, 0xF0,
59952 +0xF4, 0xFF, 0x90, 0x00, 0x43, 0xE0, 0x5F, 0xF0, 0x80, 0x1A, 0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0x74,
59953 +0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xC4, 0x54, 0xF0, 0xFF, 0x90, 0x00,
59954 +0x43, 0xE0, 0x4F, 0xF0, 0x51, 0x0E, 0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08,
59955 +0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x43, 0x51, 0x0B, 0xD0, 0xD0, 0x92,
59956 +0xAF, 0x22, 0x90, 0x00, 0x49, 0xE0, 0x90, 0x8B, 0x54, 0xF0, 0xE0, 0x54, 0x0F, 0xF0, 0x44, 0xF0,
59957 +0xFD, 0x7F, 0x49, 0x31, 0x88, 0x90, 0x8B, 0x54, 0xE0, 0x44, 0xB0, 0xFD, 0x7F, 0x49, 0x21, 0x88,
59958 +0x90, 0x8A, 0xDD, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x75, 0x5E, 0x01, 0x8E, 0x5F, 0xF5, 0x60, 0xE4,
59959 +0xFD, 0x7F, 0x0B, 0x51, 0x1E, 0xE4, 0xFD, 0x7F, 0x02, 0x51, 0x1E, 0x71, 0x4E, 0xE4, 0xFF, 0x71,
59960 +0x42, 0xE4, 0xF5, 0x62, 0x90, 0x01, 0xC9, 0xE5, 0x62, 0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0xFC, 0xA3,
59961 +0xE0, 0xFD, 0xEC, 0xFB, 0x8D, 0x44, 0xE4, 0xF5, 0x45, 0x7D, 0x01, 0x7F, 0x60, 0x7E, 0x01, 0x02,
59962 +0x35, 0xAB, 0x90, 0x01, 0xCA, 0xE5, 0x61, 0xF0, 0xEF, 0x60, 0x02, 0x51, 0xE2, 0x22, 0x7F, 0x0B,
59963 +0x71, 0x6A, 0xEF, 0x65, 0x61, 0x60, 0x10, 0xE5, 0x61, 0xB4, 0x01, 0x05, 0xE4, 0xF5, 0x61, 0x80,
59964 +0x03, 0x75, 0x61, 0x01, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0,
59965 +0xD0, 0x90, 0x8B, 0x57, 0xEF, 0xF0, 0xD3, 0x94, 0x07, 0x50, 0x43, 0xE0, 0xFF, 0x74, 0x01, 0xA8,
59966 +0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x46, 0x51, 0x0B, 0x90,
59967 +0x8B, 0x57, 0xE0, 0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x05, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE,
59968 +0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x00, 0x44, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x5B, 0xA8, 0x05,
59969 +0x08, 0x80, 0x06, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, 0x80, 0x4B, 0x90, 0x8B,
59970 +0x57, 0xE0, 0x24, 0xF8, 0xF0, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33,
59971 +0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x43, 0xE0, 0x5F, 0xF0, 0x51, 0x0E, 0x90, 0x8B, 0x57, 0xE0,
59972 +0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x05, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8,
59973 +0xF9, 0xFF, 0x90, 0x00, 0x42, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x5B, 0xA8, 0x05, 0x08, 0x80, 0x06,
59974 +0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0x90,
59975 +0x8B, 0x04, 0xF0, 0x90, 0x00, 0x80, 0xE0, 0x44, 0x80, 0xFD, 0x7F, 0x80, 0x21, 0x88, 0xD3, 0x10,
59976 +0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x8B, 0x90, 0x8A, 0xDA, 0x12, 0x43,
59977 +0x6B, 0x90, 0x00, 0x01, 0x12, 0x42, 0xC2, 0xFA, 0xE5, 0xF0, 0x24, 0x00, 0xFF, 0xE4, 0x3A, 0xFE,
59978 +0x90, 0x8A, 0xDA, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x01, 0xEE, 0x8F, 0xF0, 0x12, 0x43, 0x19, 0x12,
59979 +0x29, 0xD9, 0xFF, 0x60, 0x2C, 0xB5, 0x5E, 0x16, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x6B, 0x90, 0x00,
59980 +0x01, 0x12, 0x42, 0xC2, 0x65, 0x60, 0x70, 0x04, 0xE5, 0x5F, 0x65, 0xF0, 0x60, 0x22, 0x90, 0x8A,
59981 +0xDA, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x01, 0x12, 0x42, 0xC2, 0xFF, 0xAE, 0xF0, 0x71, 0x00, 0x80,
59982 +0x0F, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x6B, 0x12, 0x29, 0xD9, 0x65, 0x5E, 0x60, 0x02, 0x91, 0x95,
59983 +0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0xF5, 0x5E, 0x7F, 0x60, 0x7E, 0x01, 0x8F, 0x82, 0x8E, 0x83,
59984 +0xA3, 0xA3, 0xA3, 0xE4, 0xF0, 0x22, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x8B, 0xEF, 0x12, 0x43, 0x94,
59985 +0x54, 0xE7, 0x01, 0x54, 0xDE, 0x02, 0x55, 0x0B, 0x03, 0x55, 0x14, 0x05, 0x55, 0x1D, 0x06, 0x55,
59986 +0x58, 0x07, 0x55, 0x25, 0x08, 0x55, 0x2E, 0x09, 0x55, 0x36, 0x20, 0x55, 0x3F, 0x2C, 0x54, 0xF0,
59987 +0x2D, 0x54, 0xF9, 0x2E, 0x55, 0x02, 0x3B, 0x55, 0x48, 0x4B, 0x00, 0x00, 0x55, 0x51, 0x90, 0x8A,
59988 +0xD7, 0x12, 0x43, 0x6B, 0x02, 0x74, 0x85, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x74, 0x8B,
59989 +0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x74, 0xB8, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02,
59990 +0x75, 0x00, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x75, 0x39, 0x90, 0x8A, 0xD7, 0x12, 0x43,
59991 +0x6B, 0x02, 0x75, 0x52, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x74, 0x0F, 0x90, 0x8A, 0xD7,
59992 +0x12, 0x43, 0x6B, 0xC1, 0xA6, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x75, 0x9A, 0x90, 0x8A,
59993 +0xD7, 0x12, 0x43, 0x6B, 0x81, 0x1E, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x78, 0x81, 0x90,
59994 +0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x7A, 0xC2, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x7C,
59995 +0x2B, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
59996 +0x90, 0x01, 0xCC, 0xE0, 0x54, 0x0F, 0x90, 0x8A, 0xCF, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0xFD, 0x70,
59997 +0x02, 0xC1, 0xA1, 0x90, 0x8B, 0x51, 0xE0, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80,
59998 +0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEF, 0x5D, 0x70, 0x02, 0xC1, 0x9A, 0x90,
59999 +0x8B, 0x51, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD0, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD0,
60000 +0xF0, 0x75, 0x1D, 0x01, 0x75, 0x1E, 0x8A, 0x75, 0x1F, 0xD0, 0x75, 0x20, 0x01, 0x7B, 0x01, 0x7A,
60001 +0x8A, 0x79, 0xD1, 0x12, 0x5E, 0xE4, 0x90, 0x8A, 0xD1, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54,
60002 +0x01, 0x90, 0x8B, 0x51, 0x30, 0xE0, 0x59, 0xE0, 0x75, 0xF0, 0x02, 0x90, 0x00, 0x88, 0x12, 0x43,
60003 +0x5F, 0xE0, 0x90, 0x8A, 0xD2, 0xF0, 0x90, 0x8B, 0x51, 0xE0, 0x75, 0xF0, 0x02, 0x90, 0x00, 0x89,
60004 +0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD3, 0xF0, 0x90, 0x8B, 0x51, 0xE0, 0x75, 0xF0, 0x04, 0x90,
60005 +0x01, 0xD1, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD4, 0xF0, 0x90, 0x8B, 0x51, 0xE0, 0x75, 0xF0,
60006 +0x04, 0x90, 0x01, 0xD2, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD5, 0xF0, 0x90, 0x8B, 0x51, 0xE0,
60007 +0x75, 0xF0, 0x04, 0x90, 0x01, 0xD3, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD6, 0xF0, 0x80, 0x33,
60008 +0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD1, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD2, 0xF0, 0x90,
60009 +0x8B, 0x51, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD2, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD3,
60010 +0xF0, 0x90, 0x8B, 0x51, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD3, 0x12, 0x43, 0x5F, 0xE0, 0x90,
60011 +0x8A, 0xD4, 0xF0, 0xEF, 0x54, 0x7F, 0xFF, 0x7B, 0x01, 0x7A, 0x8A, 0x79, 0xD2, 0x91, 0xA6, 0x90,
60012 +0x8A, 0xCF, 0xE0, 0xFF, 0x90, 0x8B, 0x51, 0xE0, 0xFE, 0x74, 0x01, 0xA8, 0x06, 0x08, 0x80, 0x02,
60013 +0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0x90, 0x8A, 0xCF, 0xF0, 0x90, 0x8B, 0x51, 0xE0, 0xFF, 0x74,
60014 +0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x90, 0x01, 0xCC, 0xF0, 0x90, 0x8B,
60015 +0x51, 0xE0, 0x04, 0xF0, 0xE0, 0x54, 0x03, 0xF0, 0xA1, 0x6A, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x02,
60016 +0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x00, 0x04, 0x12, 0x42, 0x20, 0xFF, 0x54, 0x1F, 0xFE,
60017 +0xEF, 0x54, 0x20, 0xC4, 0x13, 0x54, 0x07, 0xFD, 0xAF, 0x06, 0x90, 0x8A, 0xDA, 0xEF, 0xF0, 0xA3,
60018 +0xED, 0xF0, 0xA3, 0x12, 0x43, 0x8B, 0x90, 0x8A, 0xDC, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x03, 0x12,
60019 +0x42, 0x20, 0x54, 0xF0, 0xC4, 0x54, 0x0F, 0x90, 0x8A, 0xDF, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x42,
60020 +0x20, 0x54, 0x40, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x90, 0x8A, 0xE0, 0xF0, 0x90, 0x8A, 0xDA, 0xE0,
60021 +0xFF, 0x75, 0xF0, 0x09, 0x90, 0x87, 0x25, 0x12, 0x43, 0x5F, 0xAD, 0x82, 0xAC, 0x83, 0x90, 0x8A,
60022 +0xE1, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x75, 0xF0, 0x09, 0xA4, 0x24, 0x23, 0xF9, 0x74, 0x87,
60023 +0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xA3, 0x12, 0x43, 0x8B, 0x90, 0x8A, 0xDC, 0x12, 0x43, 0x6B, 0x90,
60024 +0x00, 0x03, 0x12, 0x42, 0x20, 0x54, 0x0F, 0xFF, 0x90, 0x8A, 0xE3, 0x12, 0x43, 0x6B, 0xEF, 0x12,
60025 +0x42, 0x4D, 0x90, 0x8A, 0xDC, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFF, 0x90,
60026 +0x8A, 0xE3, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x01, 0xEF, 0x12, 0x42, 0x5F, 0x90, 0x8A, 0xDC, 0x12,
60027 +0x43, 0x6B, 0x90, 0x00, 0x01, 0x12, 0x42, 0x20, 0xFF, 0x90, 0x8A, 0xE1, 0xE0, 0xFC, 0xA3, 0xE0,
60028 +0xFD, 0xF5, 0x82, 0x8C, 0x83, 0xEF, 0xF0, 0x12, 0x29, 0xD9, 0x8D, 0x82, 0x8C, 0x83, 0xA3, 0xF0,
60029 +0x90, 0x8A, 0xDF, 0xE0, 0xFE, 0x90, 0x8A, 0xDA, 0xE0, 0xFF, 0x24, 0xC1, 0xF5, 0x82, 0xE4, 0x34,
60030 +0x86, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x8A, 0xDB, 0xE0, 0xFE, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x87,
60031 +0x29, 0x12, 0x43, 0x5F, 0xEE, 0xF0, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x87, 0x2A, 0x12, 0x43, 0x5F,
60032 +0x74, 0x01, 0xF0, 0x90, 0x8A, 0xE0, 0xE0, 0xFE, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x87, 0x2B, 0x12,
60033 +0x43, 0x5F, 0xEE, 0xF0, 0x8F, 0x0F, 0xEF, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89,
60034 +0xAF, 0x82, 0xF5, 0x10, 0x8F, 0x11, 0xE5, 0x0F, 0x75, 0xF0, 0x02, 0xA4, 0x24, 0x81, 0xF9, 0x74,
60035 +0x86, 0x35, 0xF0, 0x75, 0x12, 0x01, 0xF5, 0x13, 0x89, 0x14, 0x75, 0xF0, 0x09, 0xE5, 0x0F, 0x90,
60036 +0x87, 0x25, 0x12, 0x43, 0x5F, 0xAF, 0x82, 0x85, 0x83, 0x15, 0x8F, 0x16, 0xE5, 0x0F, 0x75, 0xF0,
60037 +0x09, 0xA4, 0x24, 0x23, 0xF9, 0x74, 0x87, 0x35, 0xF0, 0x75, 0x17, 0x01, 0xF5, 0x18, 0x89, 0x19,
60038 +0x74, 0xC1, 0x25, 0x0F, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0x12, 0x43, 0x94, 0x58,
60039 +0x34, 0x00, 0x58, 0x49, 0x01, 0x58, 0x5E, 0x02, 0x58, 0x73, 0x03, 0x58, 0x9C, 0x04, 0x58, 0xB1,
60040 +0x05, 0x58, 0xC6, 0x06, 0x58, 0xEC, 0x0C, 0x59, 0x19, 0x0D, 0x59, 0x46, 0x0E, 0x59, 0x73, 0x0F,
60041 +0x00, 0x00, 0x59, 0xA7, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5,
60042 +0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x15, 0x80, 0x3C, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5,
60043 +0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x10, 0x80, 0x27, 0xE5, 0x0F,
60044 +0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74,
60045 +0x05, 0x80, 0x12, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83,
60046 +0x74, 0xF0, 0xF0, 0xA3, 0xE4, 0xF0, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34,
60047 +0x86, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0x8F, 0xF0, 0x21, 0xA7, 0xE5, 0x0F, 0x25, 0xE0,
60048 +0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0xF5, 0x80,
60049 +0x27, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0x0F,
60050 +0xF0, 0xA3, 0x74, 0xF0, 0x80, 0x12, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34,
60051 +0x89, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0x74, 0x0D, 0xF0, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0x81, 0xF5,
60052 +0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x21, 0xA7, 0x90, 0x04, 0x47, 0xE0,
60053 +0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x12, 0x42, 0x4D, 0x90, 0x04, 0x46, 0xE0, 0xAB, 0x12, 0xAA,
60054 +0x13, 0xA9, 0x14, 0x90, 0x00, 0x01, 0x12, 0x42, 0x5F, 0x90, 0x04, 0x45, 0xE0, 0x85, 0x11, 0x82,
60055 +0x85, 0x10, 0x83, 0xF0, 0x90, 0x04, 0x44, 0x21, 0x9E, 0x90, 0x04, 0x4B, 0xE0, 0xAB, 0x12, 0xAA,
60056 +0x13, 0xA9, 0x14, 0x12, 0x42, 0x4D, 0x90, 0x04, 0x4A, 0xE0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14,
60057 +0x90, 0x00, 0x01, 0x12, 0x42, 0x5F, 0x90, 0x04, 0x49, 0xE0, 0x85, 0x11, 0x82, 0x85, 0x10, 0x83,
60058 +0xF0, 0x90, 0x04, 0x48, 0x80, 0x58, 0x90, 0x04, 0x4F, 0xE0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14,
60059 +0x12, 0x42, 0x4D, 0x90, 0x04, 0x4E, 0xE0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x90, 0x00, 0x01,
60060 +0x12, 0x42, 0x5F, 0x90, 0x04, 0x4D, 0xE0, 0x85, 0x11, 0x82, 0x85, 0x10, 0x83, 0xF0, 0x90, 0x04,
60061 +0x4C, 0x80, 0x2B, 0x90, 0x04, 0x53, 0xE0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x12, 0x42, 0x4D,
60062 +0x90, 0x04, 0x52, 0xE0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x90, 0x00, 0x01, 0x12, 0x42, 0x5F,
60063 +0x90, 0x04, 0x51, 0xE0, 0x85, 0x11, 0x82, 0x85, 0x10, 0x83, 0xF0, 0x90, 0x04, 0x50, 0xE0, 0x85,
60064 +0x11, 0x82, 0x85, 0x10, 0x83, 0xA3, 0xF0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0xC0, 0x03, 0xC0,
60065 +0x02, 0xC0, 0x01, 0x12, 0x29, 0xD9, 0xFF, 0xAB, 0x17, 0xAA, 0x18, 0xA9, 0x19, 0x12, 0x29, 0xD9,
60066 +0x5F, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x42, 0x4D, 0xAB, 0x12, 0xE5, 0x14, 0x24, 0x01,
60067 +0xF9, 0xE4, 0x35, 0x13, 0xFA, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x12, 0x29, 0xD9, 0xFF, 0xAB,
60068 +0x17, 0xAA, 0x18, 0xA9, 0x19, 0x90, 0x00, 0x01, 0x12, 0x42, 0x20, 0x5F, 0xD0, 0x01, 0xD0, 0x02,
60069 +0xD0, 0x03, 0x12, 0x42, 0x4D, 0x85, 0x11, 0x82, 0x85, 0x10, 0x83, 0xC0, 0x83, 0xC0, 0x82, 0xE0,
60070 +0xFF, 0x85, 0x16, 0x82, 0x85, 0x15, 0x83, 0xE0, 0xFE, 0xEF, 0x5E, 0xD0, 0x82, 0xD0, 0x83, 0xF0,
60071 +0x85, 0x11, 0x82, 0x85, 0x10, 0x83, 0xA3, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFF, 0x85, 0x16, 0x82,
60072 +0x85, 0x15, 0x83, 0xA3, 0xE0, 0xFE, 0xEF, 0x5E, 0xD0, 0x82, 0xD0, 0x83, 0xF0, 0xE5, 0x0F, 0x25,
60073 +0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60,
60074 +0x4B, 0x90, 0x8A, 0xE6, 0x74, 0x0B, 0xF0, 0x90, 0x8A, 0xE6, 0xE0, 0xFF, 0xC3, 0x94, 0x00, 0x50,
60075 +0x02, 0x41, 0xEC, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33,
60076 +0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5,
60077 +0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x0A, 0x90, 0x8A, 0xE6, 0xE0, 0x24, 0x10,
60078 +0xA3, 0xF0, 0x80, 0x68, 0x90, 0x8A, 0xE6, 0xE0, 0x14, 0xF0, 0x80, 0xBB, 0xE5, 0x0F, 0x25, 0xE0,
60079 +0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x47,
60080 +0x90, 0x8A, 0xE6, 0x74, 0x0F, 0xF0, 0x90, 0x8A, 0xE6, 0xE0, 0xFF, 0xC3, 0x94, 0x00, 0x40, 0x3C,
60081 +0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9,
60082 +0xFF, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0x5E,
60083 +0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x08, 0x90, 0x8A, 0xE6, 0xE0, 0xA3, 0xF0, 0x80, 0x0D, 0x90,
60084 +0x8A, 0xE6, 0xE0, 0x14, 0xF0, 0x80, 0xBF, 0xE4, 0x90, 0x8A, 0xE7, 0xF0, 0xE5, 0x0F, 0x25, 0xE0,
60085 +0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x46,
60086 +0xE4, 0x90, 0x8A, 0xE6, 0xF0, 0x90, 0x8A, 0xE6, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x40, 0x02, 0x61,
60087 +0xA5, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8,
60088 +0xF9, 0xFF, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0,
60089 +0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x06, 0x90, 0x8A, 0xE6, 0xE0, 0x80, 0x63, 0x90, 0x8A,
60090 +0xE6, 0xE0, 0x04, 0xF0, 0x80, 0xBF, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34,
60091 +0x86, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x46, 0xE4, 0x90, 0x8A, 0xE6, 0xF0, 0x90,
60092 +0x8A, 0xE6, 0xE0, 0xFF, 0xC3, 0x94, 0x0C, 0x50, 0x3C, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08,
60093 +0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0x81,
60094 +0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x08,
60095 +0x90, 0x8A, 0xE6, 0xE0, 0x24, 0x10, 0x80, 0x09, 0x90, 0x8A, 0xE6, 0xE0, 0x04, 0xF0, 0x80, 0xBF,
60096 +0xE4, 0x90, 0x8A, 0xE8, 0xF0, 0x90, 0x8A, 0xE7, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0xE5, 0x0F, 0x90,
60097 +0x87, 0x27, 0x12, 0x43, 0x5F, 0xEF, 0xF0, 0x90, 0x8A, 0xE8, 0xE0, 0xFE, 0x75, 0xF0, 0x09, 0xE5,
60098 +0x0F, 0x90, 0x87, 0x28, 0x12, 0x43, 0x5F, 0xEE, 0xF0, 0xE5, 0x0F, 0xC3, 0x94, 0x20, 0x50, 0x32,
60099 +0x74, 0x84, 0x25, 0x0F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0xD3, 0x9F, 0x40, 0x02,
60100 +0x80, 0x18, 0x74, 0x84, 0x25, 0x0F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0xC3, 0x9E,
60101 +0x50, 0x08, 0x90, 0x8A, 0xE8, 0xE0, 0xA3, 0xF0, 0x80, 0x08, 0x90, 0x8A, 0xE7, 0xE0, 0x90, 0x8A,
60102 +0xE9, 0xF0, 0x90, 0x8A, 0xE9, 0xE0, 0xFD, 0xAF, 0x0F, 0x91, 0x4E, 0x90, 0x8A, 0xE9, 0xE0, 0xFF,
60103 +0x74, 0x84, 0x25, 0x0F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x8A, 0xE7,
60104 +0xE0, 0xFF, 0xD3, 0x94, 0x13, 0x40, 0x07, 0x90, 0x87, 0x22, 0x74, 0x03, 0xF0, 0x22, 0xEF, 0xD3,
60105 +0x94, 0x0B, 0x40, 0x07, 0x90, 0x87, 0x22, 0x74, 0x02, 0xF0, 0x22, 0xEF, 0xD3, 0x94, 0x03, 0x40,
60106 +0x07, 0x90, 0x87, 0x22, 0x74, 0x01, 0xF0, 0x22, 0xE4, 0x90, 0x87, 0x22, 0xF0, 0x22, 0xD3, 0x10,
60107 +0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x74, 0x84, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xED,
60108 +0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xAC, 0x07, 0xED, 0x54, 0x1F, 0x90, 0x8A, 0xC7, 0xF0, 0x74,
60109 +0x01, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0x90, 0x8A, 0xC5, 0xF0, 0x90, 0x8A,
60110 +0xC8, 0x74, 0x01, 0xF0, 0xEB, 0xC3, 0x94, 0x01, 0x40, 0x02, 0x80, 0x37, 0x90, 0x8A, 0xC5, 0xE0,
60111 +0x25, 0x0D, 0xFF, 0xA3, 0xF0, 0xA3, 0xE0, 0x90, 0x41, 0x9E, 0x93, 0xFE, 0xEF, 0xD3, 0x9E, 0x40,
60112 +0x10, 0x74, 0x01, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE4, 0xF0, 0xAF, 0x04, 0x80,
60113 +0x9D, 0x90, 0x8A, 0xC6, 0xE0, 0xFF, 0x74, 0x01, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83,
60114 +0xEF, 0xF0, 0x22, 0xAD, 0x07, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x27, 0x12, 0x43, 0x5F, 0xE0,
60115 +0xFF, 0x90, 0x8A, 0xCA, 0xF0, 0x74, 0xA5, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0,
60116 +0x54, 0x1F, 0x90, 0x8A, 0xC9, 0xF0, 0xD3, 0x9F, 0x40, 0x06, 0xA3, 0xE0, 0x90, 0x8A, 0xC9, 0xF0,
60117 +0x90, 0x8A, 0xC9, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83,
60118 +0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34,
60119 +0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13,
60120 +0xFF, 0xED, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xEE, 0xF0, 0xA3,
60121 +0xEF, 0xF0, 0xAF, 0x05, 0x90, 0x8A, 0xC9, 0xE0, 0xFD, 0x91, 0x4E, 0x90, 0x8A, 0xC9, 0xE0, 0xFF,
60122 +0x22, 0xAC, 0x07, 0x74, 0x84, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x7F,
60123 +0x90, 0x8A, 0xDE, 0xF0, 0xE0, 0x54, 0x1F, 0xFF, 0x90, 0x8A, 0xE1, 0xF0, 0x75, 0xF0, 0x09, 0xEC,
60124 +0x90, 0x87, 0x28, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xE3, 0xF0, 0x75, 0xF0, 0x09, 0xEC, 0x90,
60125 +0x87, 0x27, 0x12, 0x43, 0x5F, 0xE0, 0xFE, 0x90, 0x8A, 0xE4, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0xE4,
60126 +0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x8A, 0xE5, 0xCB, 0xF0,
60127 +0xA3, 0xEB, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0,
60128 +0xFB, 0xA3, 0xE0, 0x90, 0x8A, 0xE7, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0xEF, 0xD3, 0x9E, 0x40, 0x0C,
60129 +0x90, 0x8A, 0xE4, 0xE0, 0x90, 0x8A, 0xE1, 0xF0, 0x90, 0x8A, 0xDE, 0xF0, 0xED, 0x70, 0x02, 0xC1,
60130 +0x93, 0x90, 0x8A, 0xE2, 0xED, 0xF0, 0x90, 0x8A, 0xDE, 0xE0, 0x30, 0xE6, 0x0E, 0x90, 0x8A, 0xE1,
60131 +0xE0, 0x90, 0x8A, 0xDE, 0xF0, 0x90, 0x8A, 0xE2, 0xE0, 0x14, 0xF0, 0x90, 0x8A, 0xE2, 0xE0, 0x70,
60132 +0x02, 0xC1, 0x93, 0x90, 0x8A, 0xE1, 0xE0, 0xFF, 0xD3, 0x94, 0x00, 0x50, 0x02, 0xC1, 0x93, 0xE4,
60133 +0x90, 0x8A, 0xE0, 0xF0, 0xEF, 0x14, 0x90, 0x8A, 0xDF, 0xF0, 0x90, 0x8A, 0xE3, 0xE0, 0xFD, 0x90,
60134 +0x8A, 0xDF, 0xE0, 0xFF, 0xD3, 0x9D, 0x40, 0x6F, 0xEF, 0x94, 0x10, 0x40, 0x21, 0xEF, 0x24, 0xF0,
60135 +0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8,
60136 +0xF9, 0xFF, 0x90, 0x8A, 0xE7, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x70, 0x27, 0x90, 0x8A,
60137 +0xDF, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x37, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80,
60138 +0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x8A, 0xE5, 0xE0, 0x5E, 0xFE, 0xA3,
60139 +0xE0, 0x5F, 0x4E, 0x60, 0x1A, 0x90, 0x8A, 0xDF, 0xE0, 0x90, 0x8A, 0xDE, 0xF0, 0x90, 0x8A, 0xE0,
60140 +0xE0, 0x04, 0xF0, 0x90, 0x8A, 0xE2, 0xE0, 0xFF, 0x90, 0x8A, 0xE0, 0xE0, 0x6F, 0x60, 0x08, 0x90,
60141 +0x8A, 0xDF, 0xE0, 0x14, 0xF0, 0x80, 0x83, 0x90, 0x8A, 0xE2, 0xE0, 0xFF, 0x90, 0x8A, 0xE0, 0xE0,
60142 +0xC3, 0x9F, 0x50, 0x0F, 0x90, 0x8A, 0xDF, 0xE0, 0xB5, 0x05, 0x08, 0x90, 0x8A, 0xE3, 0xE0, 0x90,
60143 +0x8A, 0xDE, 0xF0, 0x90, 0x8A, 0xDE, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34,
60144 +0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x2E, 0xF5,
60145 +0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13,
60146 +0xFE, 0xEF, 0x13, 0xFF, 0xEC, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83,
60147 +0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0x04, 0x90, 0x8A, 0xDE, 0xE0, 0xFD, 0x91, 0x4E, 0x90, 0x8A,
60148 +0xDE, 0xE0, 0xFF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8B, 0x1A, 0x8A, 0x1B, 0x89,
60149 +0x1C, 0x90, 0x8B, 0x3F, 0x12, 0x43, 0x8B, 0xAB, 0x1D, 0xAA, 0x1E, 0xA9, 0x1F, 0x90, 0x8B, 0x42,
60150 +0x12, 0x43, 0x8B, 0xAF, 0x20, 0x15, 0x20, 0xEF, 0x60, 0x1E, 0x90, 0x8B, 0x42, 0xE4, 0x75, 0xF0,
60151 +0x01, 0x12, 0x43, 0x74, 0x12, 0x29, 0xD9, 0xFF, 0x90, 0x8B, 0x3F, 0xE4, 0x75, 0xF0, 0x01, 0x12,
60152 +0x43, 0x74, 0xEF, 0x12, 0x42, 0x4D, 0x80, 0xDB, 0xAB, 0x1A, 0xAA, 0x1B, 0xA9, 0x1C, 0xD0, 0xD0,
60153 +0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x8B, 0x45, 0x12, 0x43, 0x8B,
60154 +0x90, 0x8B, 0x53, 0xE0, 0xFF, 0x04, 0xF0, 0x90, 0x00, 0x01, 0xEF, 0x12, 0x42, 0x5F, 0x7F, 0xAF,
60155 +0x7E, 0x01, 0x12, 0x74, 0x3B, 0xEF, 0x60, 0x47, 0x90, 0x8B, 0x45, 0x12, 0x43, 0x6B, 0x8B, 0x1D,
60156 +0x8A, 0x1E, 0x89, 0x1F, 0x75, 0x20, 0x02, 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA0, 0xD1, 0xE4, 0x90,
60157 +0x8B, 0x48, 0x12, 0x43, 0x6B, 0x8B, 0x1D, 0x8A, 0x1E, 0x89, 0x1F, 0x90, 0x8B, 0x45, 0x12, 0x43,
60158 +0x6B, 0x12, 0x29, 0xD9, 0xFF, 0xC4, 0x54, 0x0F, 0xF5, 0x20, 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA2,
60159 +0xD1, 0xE4, 0x90, 0x01, 0xAF, 0x74, 0xFF, 0xF0, 0x90, 0x01, 0xCB, 0xE0, 0x64, 0x80, 0xF0, 0xD0,
60160 +0xD0, 0x92, 0xAF, 0x22, 0x90, 0x8A, 0xC5, 0xE0, 0x54, 0xF0, 0x44, 0x03, 0xF0, 0x54, 0x0F, 0x44,
60161 +0x80, 0xF0, 0x7B, 0x00, 0x7A, 0x00, 0x79, 0x56, 0x90, 0x8B, 0x48, 0x12, 0x43, 0x8B, 0x0B, 0x7A,
60162 +0x8A, 0x79, 0xC5, 0xE1, 0x33, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x01, 0xC4, 0x74,
60163 +0xC5, 0xF0, 0x74, 0x5F, 0xA3, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x1A, 0x90, 0x05, 0x22, 0xE0,
60164 +0x54, 0x90, 0x60, 0x07, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x01, 0xC7, 0xE0, 0x30,
60165 +0xE1, 0xE4, 0x7F, 0x00, 0x80, 0x02, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF,
60166 +0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFB, 0xFA, 0xEF, 0x30, 0xE0, 0x02, 0x7B, 0x80, 0xEF, 0xC3, 0x13,
60167 +0x90, 0xFD, 0x10, 0xF0, 0x90, 0x04, 0x25, 0xEF, 0xF0, 0xED, 0x60, 0x1E, 0xAF, 0x03, 0x74, 0x0F,
60168 +0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0x74, 0x10, 0x2F, 0xF5,
60169 +0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0xAF, 0x03, 0x74, 0x08, 0x2F, 0xF5,
60170 +0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x09, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
60171 +0xF5, 0x83, 0xE0, 0x54, 0xF0, 0xF0, 0x74, 0x21, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83,
60172 +0xE0, 0x54, 0xF7, 0xF0, 0xAE, 0x02, 0xAF, 0x03, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x5F, 0xC5,
60173 +0xBF, 0x01, 0x10, 0x90, 0x02, 0x09, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x5F, 0xFD, 0x90, 0x04, 0x1F,
60174 +0x74, 0x20, 0xF0, 0x22, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0xFF, 0xE0, 0x54, 0x0C, 0x13, 0x13,
60175 +0x54, 0x3F, 0xFE, 0xEF, 0x64, 0x01, 0x60, 0x04, 0xEF, 0xB4, 0x03, 0x0E, 0x90, 0x8A, 0xC5, 0x74,
60176 +0x01, 0xF0, 0xA3, 0x74, 0x37, 0xF0, 0x79, 0x01, 0x80, 0x18, 0xEE, 0x64, 0x01, 0x60, 0x07, 0xAF,
60177 +0x06, 0xEE, 0x64, 0x03, 0x70, 0x3B, 0x90, 0x8A, 0xC5, 0x74, 0x01, 0xF0, 0xA3, 0x74, 0x3D, 0xF0,
60178 +0x79, 0x40, 0x90, 0x8A, 0xC5, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xF5, 0x82, 0x8E, 0x83, 0xE0, 0x59,
60179 +0x60, 0x08, 0xE9, 0xF0, 0xE4, 0x90, 0x8A, 0xF6, 0xF0, 0x22, 0x90, 0x8A, 0xF6, 0xE0, 0x04, 0xF0,
60180 +0xE0, 0xC3, 0x94, 0x0A, 0x40, 0x0B, 0xE4, 0xF0, 0x90, 0x04, 0x19, 0xE0, 0x30, 0xE0, 0x02, 0x11,
60181 +0x6D, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0,
60182 +0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90,
60183 +0x01, 0xC4, 0x74, 0xF2, 0xF0, 0x74, 0x60, 0xA3, 0xF0, 0x90, 0x01, 0x34, 0xE0, 0x55, 0x28, 0xF5,
60184 +0x2C, 0xA3, 0xE0, 0x55, 0x29, 0xF5, 0x2D, 0xA3, 0xE0, 0x55, 0x2A, 0xF5, 0x2E, 0xA3, 0xE0, 0x55,
60185 +0x2B, 0xF5, 0x2F, 0xE5, 0x2C, 0x20, 0xE0, 0x02, 0x41, 0x89, 0x90, 0x01, 0x34, 0x74, 0x01, 0xF0,
60186 +0x85, 0xD1, 0x4D, 0x85, 0xD2, 0x4E, 0x85, 0xD3, 0x4F, 0x85, 0xD4, 0x50, 0x85, 0xD5, 0x51, 0x85,
60187 +0xD6, 0x52, 0x85, 0xD7, 0x53, 0x85, 0xD9, 0x54, 0xE5, 0x54, 0x54, 0x40, 0xC3, 0x13, 0xFF, 0xE5,
60188 +0x53, 0x54, 0x20, 0x6F, 0x70, 0x02, 0x41, 0x46, 0xE5, 0x54, 0x30, 0xE5, 0x02, 0x41, 0x46, 0xE5,
60189 +0x52, 0x54, 0x1F, 0xF5, 0x08, 0xE5, 0x4D, 0x54, 0x3F, 0xF5, 0x09, 0xE5, 0x51, 0x54, 0x1F, 0xFF,
60190 +0xE5, 0x08, 0x25, 0xE0, 0x24, 0xE3, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0x8F, 0xF0,
60191 +0x12, 0x42, 0x81, 0xE5, 0x53, 0x54, 0x1F, 0xFF, 0xE5, 0x08, 0x25, 0xE0, 0x24, 0xC0, 0xF5, 0x82,
60192 +0xE4, 0x34, 0x85, 0xF5, 0x83, 0xE4, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0xE5, 0x09, 0xD3, 0x94, 0x04,
60193 +0x40, 0x03, 0x75, 0x09, 0x04, 0x75, 0xF0, 0x0A, 0xE5, 0x08, 0x90, 0x84, 0x00, 0x12, 0x43, 0x5F,
60194 +0x75, 0xF0, 0x02, 0xE5, 0x09, 0x12, 0x43, 0x5F, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xE5, 0x53, 0x54,
60195 +0x1F, 0x2F, 0xFF, 0xE4, 0x3E, 0xFE, 0x75, 0xF0, 0x0A, 0xE5, 0x08, 0x90, 0x84, 0x00, 0x12, 0x43,
60196 +0x5F, 0x75, 0xF0, 0x02, 0xE5, 0x09, 0x12, 0x43, 0x5F, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE5, 0x54,
60197 +0x20, 0xE6, 0x24, 0xE5, 0x53, 0x54, 0x1F, 0xFF, 0xE5, 0x08, 0x25, 0xE0, 0x24, 0x63, 0xF5, 0x82,
60198 +0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0xE5, 0x4F, 0x30, 0xE7, 0x36,
60199 +0xAF, 0x08, 0x12, 0x5C, 0xC3, 0x80, 0x2F, 0xE5, 0x53, 0x54, 0x1F, 0xFF, 0xE5, 0x08, 0x25, 0xE0,
60200 +0x24, 0xA3, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0xE5,
60201 +0x4F, 0x30, 0xE7, 0x12, 0xE5, 0x4F, 0x54, 0x7F, 0xFD, 0xE5, 0x53, 0x54, 0x1F, 0xF5, 0x0D, 0xAB,
60202 +0x09, 0xAF, 0x08, 0x12, 0x5C, 0x66, 0xE5, 0x24, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x3A, 0x90,
60203 +0x8B, 0x1A, 0xE0, 0x60, 0x2B, 0x90, 0x01, 0x5B, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x04, 0xF0,
60204 +0x12, 0x4B, 0x34, 0xEF, 0x64, 0x01, 0x70, 0x21, 0x90, 0x8B, 0x3D, 0x12, 0x4B, 0x5C, 0x90, 0x01,
60205 +0x5B, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0, 0x90, 0x8B, 0x18, 0xF0, 0x80, 0x09,
60206 +0x12, 0x4B, 0x34, 0xBF, 0x01, 0x03, 0x12, 0x4A, 0xFC, 0xE5, 0x2C, 0x30, 0xE1, 0x21, 0x90, 0x01,
60207 +0x34, 0x74, 0x02, 0xF0, 0x85, 0xD1, 0x56, 0x85, 0xD2, 0x57, 0x85, 0xD3, 0x58, 0x85, 0xD4, 0x59,
60208 +0x85, 0xD5, 0x5A, 0x85, 0xD6, 0x5B, 0x85, 0xD7, 0x5C, 0x85, 0xD9, 0x5D, 0x12, 0x5F, 0xA4, 0xE5,
60209 +0x2C, 0x30, 0xE3, 0x06, 0x90, 0x01, 0x34, 0x74, 0x08, 0xF0, 0xE5, 0x2C, 0x30, 0xE4, 0x09, 0x90,
60210 +0x01, 0x34, 0x74, 0x10, 0xF0, 0x43, 0x55, 0x10, 0xE5, 0x2C, 0x30, 0xE5, 0x26, 0x90, 0x01, 0xCF,
60211 +0xE0, 0x30, 0xE5, 0x1F, 0xE0, 0x54, 0xDF, 0xF0, 0x90, 0x01, 0x34, 0x74, 0x20, 0xF0, 0x75, 0xA8,
60212 +0x00, 0x75, 0xE8, 0x00, 0x12, 0x51, 0x9D, 0x90, 0x00, 0x03, 0xE0, 0x54, 0xFB, 0xF0, 0x12, 0x52,
60213 +0x0E, 0x80, 0xFE, 0xE5, 0x2C, 0x30, 0xE6, 0x2D, 0x90, 0x01, 0x34, 0x74, 0x40, 0xF0, 0x90, 0x8B,
60214 +0x32, 0xE0, 0x30, 0xE0, 0x0C, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x05, 0x90, 0x8B, 0x34, 0xE4,
60215 +0xF0, 0x90, 0x8B, 0x2C, 0xE0, 0xFF, 0x30, 0xE0, 0x0C, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x05,
60216 +0x90, 0x8B, 0x2E, 0xE4, 0xF0, 0xE5, 0x2E, 0x20, 0xE0, 0x02, 0x61, 0xE6, 0x90, 0x8B, 0x08, 0x74,
60217 +0x01, 0xF0, 0x90, 0x01, 0x36, 0xF0, 0x90, 0x8B, 0x06, 0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90, 0x05,
60218 +0x53, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x05, 0xFC, 0xE0, 0x04, 0xF0, 0x90, 0x8B, 0x32, 0xE0, 0x30,
60219 +0xE0, 0x2F, 0x90, 0x8B, 0x37, 0x74, 0x01, 0xF0, 0x90, 0x8B, 0x32, 0xE0, 0xFF, 0x13, 0x13, 0x54,
60220 +0x3F, 0x30, 0xE0, 0x1D, 0x90, 0x8B, 0x34, 0x74, 0x01, 0xF0, 0xB1, 0x39, 0x90, 0x8B, 0x33, 0xE0,
60221 +0x64, 0x03, 0x60, 0x0D, 0x7F, 0x01, 0x12, 0x4D, 0xE0, 0xEF, 0x60, 0x05, 0x7F, 0x04, 0x12, 0x4E,
60222 +0x89, 0x90, 0x8B, 0x2C, 0xE0, 0xFF, 0x30, 0xE0, 0x55, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x4E,
60223 +0x90, 0x8B, 0x2E, 0x74, 0x01, 0xF0, 0xB1, 0x39, 0xE4, 0xFF, 0x12, 0x4D, 0xE0, 0xEF, 0x60, 0x3E,
60224 +0xB1, 0x5F, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x8B, 0x2D, 0xE0, 0xFF, 0x64, 0x06, 0x60,
60225 +0x2D, 0xEF, 0xB4, 0x04, 0x02, 0x80, 0x07, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05, 0x04, 0xE4, 0xFF,
60226 +0x80, 0x14, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x03, 0x04, 0x7F, 0x01, 0x80, 0x09, 0x90, 0x8B, 0x2D,
60227 +0xE0, 0xB4, 0x02, 0x04, 0x7F, 0x01, 0xB1, 0x82, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12, 0x43,
60228 +0xE7, 0x90, 0x8B, 0x08, 0xE4, 0xF0, 0xE5, 0x2E, 0x30, 0xE1, 0x2F, 0x90, 0x01, 0x36, 0x74, 0x02,
60229 +0xF0, 0x43, 0x55, 0x40, 0x11, 0x84, 0x90, 0x8B, 0x37, 0xE0, 0xB4, 0x01, 0x09, 0x90, 0x05, 0x22,
60230 +0xE4, 0xF0, 0x90, 0x8B, 0x37, 0xF0, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x0D, 0xE4, 0xFF, 0x12,
60231 +0x4D, 0xE0, 0xEF, 0x60, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0xE5, 0x2E, 0x30, 0xE2, 0x16, 0x90,
60232 +0x01, 0x36, 0x74, 0x04, 0xF0, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x06, 0xA3, 0xE0, 0x64, 0x06,
60233 +0x60, 0x03, 0x12, 0x46, 0xB3, 0xE5, 0x2E, 0x30, 0xE3, 0x38, 0x90, 0x01, 0x36, 0x74, 0x08, 0xF0,
60234 +0xE5, 0x21, 0x64, 0x01, 0x70, 0x2C, 0xE5, 0x24, 0x60, 0x28, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90,
60235 +0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90, 0x8B, 0x3D, 0xE4, 0xF0, 0x90, 0x8B, 0x11, 0xE0, 0x90, 0x8B,
60236 +0x3E, 0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x57, 0x74,
60237 +0x05, 0xF0, 0xE5, 0x2E, 0x30, 0xE4, 0x2B, 0x90, 0x01, 0x36, 0x74, 0x10, 0xF0, 0xE5, 0x21, 0xB4,
60238 +0x01, 0x20, 0xE5, 0x24, 0x60, 0x1C, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02,
60239 +0xF0, 0x90, 0x8B, 0x1B, 0xE4, 0xF0, 0x53, 0x25, 0xFD, 0xE5, 0x25, 0x54, 0x07, 0x70, 0x03, 0x12,
60240 +0x4A, 0xFC, 0xE5, 0x2E, 0x30, 0xE5, 0x1F, 0x90, 0x01, 0x36, 0x74, 0x20, 0xF0, 0xE5, 0x21, 0xB4,
60241 +0x01, 0x14, 0xE5, 0x24, 0x60, 0x10, 0x90, 0x8B, 0x1A, 0xE0, 0x64, 0x02, 0x60, 0x05, 0x12, 0x4A,
60242 +0x97, 0x80, 0x03, 0x12, 0x49, 0x49, 0xE5, 0x2E, 0x30, 0xE6, 0x1B, 0x90, 0x01, 0x36, 0x74, 0x40,
60243 +0xF0, 0xE5, 0x21, 0xB4, 0x01, 0x10, 0xE5, 0x24, 0x60, 0x0C, 0x53, 0x25, 0xFE, 0xE5, 0x25, 0x54,
60244 +0x07, 0x70, 0x03, 0x12, 0x4A, 0xFC, 0xE5, 0x2F, 0x30, 0xE1, 0x28, 0x90, 0x01, 0x37, 0x74, 0x02,
60245 +0xF0, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x18, 0xE4, 0xFF, 0x12, 0x4D, 0xE0, 0xEF, 0x60, 0x08,
60246 +0x12, 0x48, 0xFE, 0x12, 0x7D, 0xC1, 0x80, 0x0B, 0x90, 0x8B, 0x31, 0x74, 0x01, 0xF0, 0x80, 0x03,
60247 +0x12, 0x48, 0xFE, 0x74, 0xF2, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x60, 0xA3, 0xF0, 0xD0, 0x07,
60248 +0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0,
60249 +0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0xE4, 0x90, 0x8B, 0x3D, 0xF0, 0x90, 0x05,
60250 +0x58, 0xE0, 0xFF, 0x90, 0x8B, 0x38, 0xE0, 0x2F, 0x24, 0xFE, 0x90, 0x8B, 0x3E, 0xF0, 0xE4, 0xFB,
60251 +0xFD, 0x7F, 0x50, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x53, 0x74, 0x05, 0xF0, 0x22, 0x90,
60252 +0x8B, 0x2C, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x0A, 0xA3, 0xE0, 0x64, 0x06,
60253 +0x60, 0x04, 0x7F, 0x06, 0xB1, 0x82, 0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x06, 0x60, 0x03, 0x12, 0x78,
60254 +0x35, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x8B, 0x2D, 0xE0, 0xFE, 0x6F, 0x70,
60255 +0x02, 0xE1, 0x4E, 0xEF, 0x12, 0x43, 0x94, 0x65, 0xB0, 0x00, 0x65, 0xEA, 0x01, 0x66, 0x30, 0x02,
60256 +0x66, 0x6A, 0x03, 0x66, 0xA2, 0x04, 0x66, 0xDB, 0x05, 0x67, 0x16, 0x06, 0x00, 0x00, 0x67, 0x4E,
60257 +0xEE, 0xB4, 0x04, 0x06, 0x7F, 0x01, 0xF1, 0x81, 0xE1, 0x4E, 0x90, 0x8B, 0x2D, 0xE0, 0xFF, 0xB4,
60258 +0x05, 0x04, 0xF1, 0x5D, 0xE1, 0x4E, 0xEF, 0xB4, 0x06, 0x06, 0x7F, 0x01, 0xF1, 0x72, 0x80, 0x16,
60259 +0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x03, 0x06, 0x7F, 0x01, 0xF1, 0x53, 0x80, 0x09, 0x90, 0x8B, 0x2D,
60260 +0xE0, 0xB4, 0x02, 0x02, 0xF1, 0x67, 0xF1, 0xA4, 0xE1, 0x4E, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x04,
60261 +0x06, 0x7F, 0x01, 0xF1, 0x81, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05, 0x02, 0xF1, 0x5D,
60262 +0x90, 0x8B, 0x2D, 0xE0, 0x70, 0x04, 0xF1, 0x9A, 0xE1, 0x4E, 0x90, 0x8B, 0x2D, 0xE0, 0xFE, 0xB4,
60263 +0x06, 0x06, 0x7F, 0x01, 0xF1, 0x72, 0xE1, 0x4E, 0xEE, 0xB4, 0x03, 0x06, 0x7F, 0x01, 0xF1, 0x53,
60264 +0xE1, 0x4E, 0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x02, 0x60, 0x02, 0xE1, 0x4E, 0xF1, 0x67, 0xE1, 0x4E,
60265 +0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x04, 0x06, 0x7F, 0x01, 0xF1, 0x81, 0x80, 0x09, 0x90, 0x8B, 0x2D,
60266 +0xE0, 0xB4, 0x05, 0x02, 0xF1, 0x5D, 0x90, 0x8B, 0x2D, 0xE0, 0x70, 0x04, 0xF1, 0x9A, 0x80, 0x16,
60267 +0x90, 0x8B, 0x2D, 0xE0, 0xFE, 0xB4, 0x06, 0x06, 0x7F, 0x01, 0xF1, 0x72, 0x80, 0x08, 0xEE, 0xB4,
60268 +0x03, 0x04, 0x7F, 0x01, 0xF1, 0x53, 0xF1, 0xD0, 0xE1, 0x4E, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x04,
60269 +0x06, 0x7F, 0x01, 0xF1, 0x81, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05, 0x02, 0xF1, 0x5D,
60270 +0x90, 0x8B, 0x2D, 0xE0, 0x70, 0x04, 0xF1, 0x9A, 0x80, 0x14, 0x90, 0x8B, 0x2D, 0xE0, 0xFE, 0xB4,
60271 +0x06, 0x06, 0xE4, 0xFF, 0xF1, 0x72, 0x80, 0x06, 0xEE, 0xB4, 0x02, 0x02, 0xF1, 0x67, 0xF1, 0xB9,
60272 +0xE1, 0x4E, 0x90, 0x8B, 0x2D, 0xE0, 0xFE, 0xB4, 0x06, 0x06, 0xE4, 0xFF, 0xF1, 0x72, 0x80, 0x13,
60273 +0xEE, 0xB4, 0x03, 0x06, 0x7F, 0x01, 0xF1, 0x53, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x02,
60274 +0x02, 0xF1, 0x67, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x01, 0x04, 0xF1, 0xA4, 0x80, 0x09, 0x90, 0x8B,
60275 +0x2D, 0xE0, 0xB4, 0x05, 0x02, 0xF1, 0x5D, 0xF1, 0xAF, 0x80, 0x73, 0x90, 0x8B, 0x2D, 0xE0, 0xFE,
60276 +0xB4, 0x06, 0x06, 0xE4, 0xFF, 0xF1, 0x72, 0x80, 0x13, 0xEE, 0xB4, 0x03, 0x06, 0x7F, 0x01, 0xF1,
60277 +0x53, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x02, 0x02, 0xF1, 0x67, 0x90, 0x8B, 0x2D, 0xE0,
60278 +0xB4, 0x01, 0x04, 0xF1, 0xA4, 0x80, 0x0B, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x04, 0x04, 0x7F, 0x01,
60279 +0xF1, 0x81, 0xF1, 0xC3, 0x80, 0x38, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x04, 0x06, 0x7F, 0x01, 0xF1,
60280 +0x81, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05, 0x02, 0xF1, 0x5D, 0x90, 0x8B, 0x2D, 0xE0,
60281 +0x70, 0x04, 0xF1, 0x9A, 0x80, 0x16, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x03, 0x06, 0xE4, 0xFF, 0xF1,
60282 +0x53, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x02, 0x02, 0xF1, 0x67, 0xF1, 0xDD, 0xD0, 0xD0,
60283 +0x92, 0xAF, 0x22, 0x12, 0x4A, 0xB2, 0x90, 0x8B, 0x2D, 0x74, 0x01, 0xF0, 0x22, 0x90, 0x05, 0x22,
60284 +0xE4, 0xF0, 0x90, 0x8B, 0x2D, 0xF0, 0x22, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x8B, 0x2D, 0x04,
60285 +0xF0, 0x22, 0xEF, 0x60, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x8B, 0x2D, 0x74, 0x01, 0xF0,
60286 +0x22, 0x90, 0x8B, 0x56, 0xEF, 0xF0, 0x12, 0x7D, 0x42, 0x90, 0x8B, 0x56, 0xE0, 0x60, 0x05, 0x90,
60287 +0x05, 0x22, 0xE4, 0xF0, 0xE4, 0x90, 0x8B, 0x2D, 0xF0, 0x22, 0x12, 0x4A, 0xCC, 0x90, 0x8B, 0x2D,
60288 +0x74, 0x01, 0xF0, 0x22, 0x7F, 0x01, 0x12, 0x4A, 0x7C, 0xE4, 0x90, 0x8B, 0x2D, 0xF0, 0x22, 0x12,
60289 +0x7C, 0x4A, 0x90, 0x8B, 0x2D, 0x74, 0x04, 0xF0, 0x22, 0x12, 0x4A, 0x32, 0x90, 0x8B, 0x2D, 0x74,
60290 +0x03, 0xF0, 0x22, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x8B, 0x2D, 0x74, 0x05, 0xF0, 0x22,
60291 +0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x8B, 0x2D, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x05, 0x22,
60292 +0x74, 0x6F, 0xF0, 0x90, 0x8B, 0x2D, 0x74, 0x06, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0,
60293 +0xD0, 0xE4, 0xFD, 0xFC, 0xEF, 0x30, 0xE0, 0x02, 0x7D, 0x80, 0xEF, 0xC3, 0x13, 0x90, 0xFD, 0x10,
60294 +0xF0, 0xAE, 0x04, 0xAF, 0x05, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x75, 0x28, 0x33, 0xE4, 0xF5, 0x29,
60295 +0x75, 0x2A, 0x07, 0xF5, 0x2B, 0x90, 0x01, 0x30, 0xE5, 0x28, 0xF0, 0xA3, 0xE5, 0x29, 0xF0, 0xA3,
60296 +0xE5, 0x2A, 0xF0, 0xA3, 0xE5, 0x2B, 0xF0, 0x22, 0x75, 0x30, 0x1F, 0x75, 0x31, 0x01, 0x43, 0x31,
60297 +0x10, 0xE4, 0xF5, 0x32, 0x90, 0x01, 0x38, 0xE5, 0x30, 0xF0, 0xA3, 0xE5, 0x31, 0xF0, 0xA3, 0xE5,
60298 +0x32, 0xF0, 0x22, 0x22, 0x90, 0x00, 0x02, 0xE0, 0x54, 0xE0, 0x7F, 0x01, 0x60, 0x02, 0x7F, 0x00,
60299 +0x22, 0x90, 0x00, 0xF3, 0xE0, 0x7F, 0x00, 0x30, 0xE3, 0x02, 0x7F, 0x01, 0x22, 0x90, 0x8B, 0x09,
60300 +0xE0, 0xB4, 0x01, 0x0C, 0x90, 0x00, 0xF2, 0xE0, 0x30, 0xE7, 0x05, 0x7E, 0xFD, 0x7F, 0x33, 0x22,
60301 +0x7E, 0xFD, 0x7F, 0x2F, 0x22, 0x90, 0x00, 0xF3, 0xE0, 0x30, 0xE2, 0x0D, 0x90, 0x05, 0x41, 0x74,
60302 +0x10, 0xF0, 0x90, 0x05, 0x5A, 0xF0, 0xA3, 0xE4, 0xF0, 0x22, 0x90, 0x01, 0x64, 0x74, 0xA0, 0xF0,
60303 +0x22, 0xC0, 0xE0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x05, 0xC0, 0x06,
60304 +0xC0, 0x07, 0x7D, 0x91, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0x74, 0x68, 0xFF, 0xA3, 0xF0, 0x53, 0x91,
60305 +0xEF, 0x90, 0x00, 0x51, 0xE0, 0xFE, 0x90, 0x00, 0x55, 0xE0, 0x5E, 0xF5, 0x3D, 0x90, 0x00, 0x52,
60306 +0xE0, 0xFE, 0x90, 0x00, 0x56, 0xE0, 0x5E, 0xF5, 0x3E, 0xE5, 0x3D, 0x30, 0xE4, 0x06, 0x90, 0x00,
60307 +0x55, 0x74, 0x10, 0xF0, 0xE5, 0x3D, 0x30, 0xE5, 0x06, 0x90, 0x00, 0x55, 0x74, 0x20, 0xF0, 0xE5,
60308 +0x3D, 0x30, 0xE6, 0x06, 0x90, 0x00, 0x55, 0x74, 0x40, 0xF0, 0xE5, 0x3D, 0x30, 0xE7, 0x06, 0x90,
60309 +0x00, 0x55, 0x74, 0x80, 0xF0, 0xE5, 0x3E, 0x30, 0xE0, 0x06, 0x90, 0x00, 0x56, 0x74, 0x01, 0xF0,
60310 +0xE5, 0x3E, 0x30, 0xE1, 0x06, 0x90, 0x00, 0x56, 0x74, 0x02, 0xF0, 0xE5, 0x3E, 0x30, 0xE2, 0x06,
60311 +0x90, 0x00, 0x56, 0x74, 0x04, 0xF0, 0xE5, 0x3E, 0x30, 0xE3, 0x06, 0x90, 0x00, 0x56, 0x74, 0x08,
60312 +0xF0, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0xA3, 0xEF, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0,
60313 +0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xE0, 0x32, 0xEF, 0xC3, 0x94, 0x20, 0x50, 0x39, 0xEF, 0x30,
60314 +0xE0, 0x17, 0xED, 0xC4, 0x54, 0xF0, 0xFD, 0xEF, 0xC3, 0x13, 0xFE, 0x24, 0xA4, 0xF5, 0x82, 0xE4,
60315 +0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x0F, 0x80, 0x10, 0xEF, 0xC3, 0x13, 0xFE, 0x24, 0xA4, 0xF5,
60316 +0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0xF0, 0xF0, 0x74, 0xA4, 0x2E, 0xF5, 0x82, 0xE4,
60317 +0x34, 0x04, 0xF5, 0x83, 0xE0, 0x4D, 0xF0, 0x22, 0xAD, 0x07, 0x74, 0x84, 0x2D, 0xF5, 0x82, 0xE4,
60318 +0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x8A, 0xDE, 0xF0, 0xE0, 0xF9, 0x54, 0x1F, 0xA3,
60319 +0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x27, 0x12, 0x43, 0x5F, 0xE0, 0xFF, 0x90, 0x8A, 0xE1,
60320 +0xF0, 0xED, 0x25, 0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0xFB, 0xA3,
60321 +0xE0, 0x90, 0x8A, 0xE2, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82,
60322 +0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x8A, 0xE4, 0xCB, 0xF0, 0xA3, 0xEB,
60323 +0xF0, 0x90, 0x8A, 0xDF, 0xE0, 0xFE, 0x25, 0xE0, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5,
60324 +0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xED, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4,
60325 +0x34, 0x86, 0xF5, 0x83, 0xEA, 0xF0, 0xA3, 0xEB, 0xF0, 0xEE, 0xC3, 0x9F, 0x40, 0x02, 0x41, 0xB9,
60326 +0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0x74, 0xA5, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEF,
60327 +0xF0, 0xEF, 0x04, 0x90, 0x8A, 0xE0, 0xF0, 0x90, 0x8A, 0xE1, 0xE0, 0xFF, 0x90, 0x8A, 0xE0, 0xE0,
60328 +0xFE, 0xD3, 0x9F, 0x40, 0x02, 0x41, 0xF3, 0xEE, 0xC3, 0x94, 0x10, 0x40, 0x21, 0xEE, 0x24, 0xF0,
60329 +0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8,
60330 +0xF9, 0xFF, 0x90, 0x8A, 0xE2, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x70, 0x27, 0x90, 0x8A,
60331 +0xE0, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x59, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80,
60332 +0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x8A, 0xE4, 0xE0, 0x5E, 0xFE, 0xA3,
60333 +0xE0, 0x5F, 0x4E, 0x60, 0x3C, 0x90, 0x8A, 0xE0, 0xE0, 0xB4, 0x11, 0x0D, 0x90, 0x8A, 0xE3, 0xE0,
60334 +0x30, 0xE7, 0x06, 0x90, 0x8A, 0xE0, 0x74, 0x17, 0xF0, 0x90, 0x8A, 0xE0, 0xE0, 0xFF, 0x64, 0x13,
60335 +0x60, 0x04, 0xEF, 0xB4, 0x12, 0x0D, 0x90, 0x8A, 0xE2, 0xE0, 0x30, 0xE0, 0x06, 0x90, 0x8A, 0xE0,
60336 +0x74, 0x18, 0xF0, 0x90, 0x8A, 0xE0, 0xE0, 0x90, 0x8A, 0xDF, 0xF0, 0x90, 0x8A, 0xDE, 0xF0, 0x80,
60337 +0x42, 0x90, 0x8A, 0xE0, 0xE0, 0x04, 0xF0, 0x41, 0x17, 0x90, 0x8A, 0xE1, 0xE0, 0xFC, 0x90, 0x8A,
60338 +0xDF, 0xE0, 0xFF, 0x6C, 0x70, 0x71, 0x74, 0xA5, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83,
60339 +0xEF, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x29, 0x12, 0x43, 0x5F, 0xE0, 0xB4, 0x01, 0x10,
60340 +0xE9, 0x20, 0xE6, 0x0C, 0x90, 0x8A, 0xDF, 0xE0, 0x44, 0x40, 0x90, 0x8A, 0xDE, 0xF0, 0x80, 0x03,
60341 +0xAF, 0x01, 0x22, 0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34,
60342 +0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x2E, 0xF5,
60343 +0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13,
60344 +0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83,
60345 +0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x66, 0x90, 0x8A, 0xDF, 0xE0, 0xD3, 0x9C, 0x40, 0x5E, 0x90,
60346 +0x8A, 0xE1, 0xE0, 0xFF, 0x74, 0xA5, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEF, 0xF0,
60347 +0x90, 0x8A, 0xDF, 0xEF, 0xF0, 0x90, 0x8A, 0xDE, 0xF0, 0xFC, 0xA3, 0xE0, 0xFF, 0x25, 0xE0, 0x24,
60348 +0x66, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF,
60349 +0x25, 0xE0, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF,
60350 +0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82,
60351 +0xE4, 0x34, 0x86, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0x04, 0x22, 0x74, 0x01, 0x2D,
60352 +0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE4, 0xF0, 0xAF, 0x05, 0x90, 0x8A, 0xDE, 0xE0, 0x44,
60353 +0x80, 0xFD, 0x12, 0x5C, 0x4E, 0x90, 0x8A, 0xDE, 0xE0, 0x44, 0x80, 0xFF, 0x22, 0xE4, 0x90, 0x8A,
60354 +0xCF, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0xC3, 0x94, 0x20, 0x40, 0x03, 0x02, 0x72, 0x54, 0x75,
60355 +0xF0, 0x09, 0xEF, 0x90, 0x87, 0x2A, 0x12, 0x43, 0x5F, 0xE0, 0x64, 0x01, 0x60, 0x03, 0x02, 0x72,
60356 +0x4B, 0x90, 0x8A, 0xCF, 0xE0, 0x25, 0xE0, 0x24, 0xC0, 0xF5, 0x82, 0xE4, 0x34, 0x85, 0xF5, 0x83,
60357 +0xE0, 0xFC, 0xA3, 0xE0, 0xD3, 0x94, 0x00, 0xEC, 0x94, 0x00, 0x50, 0x03, 0x02, 0x72, 0x4B, 0xEF,
60358 +0x75, 0xF0, 0x0A, 0xA4, 0x24, 0x00, 0xF9, 0x74, 0x84, 0x35, 0xF0, 0x75, 0x12, 0x01, 0xF5, 0x13,
60359 +0x89, 0x14, 0x90, 0x8A, 0xCF, 0xE0, 0x25, 0xE0, 0x24, 0xC0, 0xF5, 0x82, 0xE4, 0x34, 0x85, 0xF5,
60360 +0x83, 0xE0, 0xFD, 0xA3, 0xE0, 0x90, 0x8A, 0xD4, 0xCD, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x25, 0xE0,
60361 +0x24, 0x63, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x8A, 0xD6,
60362 +0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0xFE, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34,
60363 +0x04, 0xF5, 0x83, 0xE0, 0x54, 0x3F, 0x90, 0x8A, 0xD0, 0xF0, 0xE0, 0xFD, 0x54, 0x1F, 0xA3, 0xF0,
60364 +0x75, 0xF0, 0x09, 0xEE, 0x90, 0x87, 0x27, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD9, 0xF0, 0x90,
60365 +0x8A, 0xCF, 0xE0, 0xFB, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xC3, 0x94,
60366 +0x05, 0x40, 0x02, 0xC1, 0x9C, 0x90, 0x8A, 0xD9, 0xE0, 0xFE, 0x90, 0x8A, 0xD1, 0xE0, 0x9E, 0x40,
60367 +0x13, 0x90, 0x8A, 0xD9, 0xE0, 0x90, 0x8A, 0xD1, 0xF0, 0xED, 0x54, 0x40, 0xFD, 0x90, 0x8A, 0xD0,
60368 +0xF0, 0xEE, 0x4D, 0xF0, 0x90, 0x8A, 0xD1, 0xE0, 0xFF, 0x90, 0x41, 0x12, 0x93, 0xFE, 0x74, 0x23,
60369 +0x2B, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xC3, 0x9E, 0x40, 0x06, 0xEF, 0x90, 0x40,
60370 +0xDA, 0x80, 0x07, 0x90, 0x8A, 0xD1, 0xE0, 0x90, 0x40, 0xF6, 0x93, 0x90, 0x8A, 0xD8, 0xF0, 0x90,
60371 +0x8A, 0xD8, 0xE0, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x50, 0xF9, 0x74, 0x40, 0x35, 0xF0, 0x75, 0x0F,
60372 +0xFF, 0xF5, 0x10, 0x89, 0x11, 0x90, 0x8A, 0xD0, 0xE0, 0x90, 0x41, 0xBA, 0x93, 0xFF, 0xD3, 0x90,
60373 +0x8A, 0xD7, 0xE0, 0x9F, 0x90, 0x8A, 0xD6, 0xE0, 0x94, 0x00, 0x40, 0x0D, 0x90, 0x8A, 0xCF, 0xE0,
60374 +0xFF, 0xE4, 0xFD, 0x12, 0x5D, 0x41, 0x02, 0x71, 0xE1, 0x90, 0x8A, 0xCF, 0xE0, 0x25, 0xE0, 0x24,
60375 +0xE1, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x8A, 0xD2, 0xCF,
60376 +0xF0, 0xA3, 0xEF, 0xF0, 0xAB, 0x0F, 0xAA, 0x10, 0xA9, 0x11, 0x12, 0x29, 0xD9, 0xFF, 0x7E, 0x00,
60377 +0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x12, 0x42, 0x97, 0xFD, 0xAC, 0xF0, 0x12, 0x29, 0xF2, 0x90,
60378 +0x8A, 0xD2, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0xAB, 0x0F, 0xAA, 0x10, 0xA9, 0x11, 0x90, 0x00,
60379 +0x01, 0x12, 0x42, 0x20, 0xFF, 0x7E, 0x00, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x90, 0x00, 0x02,
60380 +0x12, 0x42, 0xC2, 0xFD, 0xAC, 0xF0, 0x12, 0x29, 0xF2, 0x90, 0x8A, 0xD2, 0xEE, 0x8F, 0xF0, 0x12,
60381 +0x42, 0x81, 0xAB, 0x0F, 0xAA, 0x10, 0xA9, 0x11, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFF, 0x7E,
60382 +0x00, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x90, 0x00, 0x04, 0x12, 0x42, 0xC2, 0xFD, 0xAC, 0xF0,
60383 +0x12, 0x29, 0xF2, 0x90, 0x8A, 0xD2, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0xAB, 0x0F, 0xAA, 0x10,
60384 +0xA9, 0x11, 0x90, 0x00, 0x03, 0x12, 0x42, 0x20, 0xFF, 0x7E, 0x00, 0xAB, 0x12, 0xAA, 0x13, 0xA9,
60385 +0x14, 0x90, 0x00, 0x06, 0x12, 0x42, 0xC2, 0xFD, 0xAC, 0xF0, 0x12, 0x29, 0xF2, 0x90, 0x8A, 0xD2,
60386 +0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0xAB, 0x0F, 0xAA, 0x10, 0xA9, 0x11, 0x90, 0x00, 0x04, 0x12,
60387 +0x42, 0x20, 0xFF, 0x7E, 0x00, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x90, 0x00, 0x08, 0x12, 0x42,
60388 +0xC2, 0xFD, 0xAC, 0xF0, 0x12, 0x29, 0xF2, 0x90, 0x8A, 0xD2, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x81,
60389 +0xAB, 0x0F, 0xAA, 0x10, 0xA9, 0x11, 0x90, 0x00, 0x05, 0x12, 0x42, 0x20, 0xFF, 0x7E, 0x00, 0x90,
60390 +0x8A, 0xD4, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x12, 0x29, 0xF2, 0xD3, 0x90, 0x8A, 0xD3, 0xE0, 0x9F,
60391 +0x90, 0x8A, 0xD2, 0xE0, 0x9E, 0x40, 0x0C, 0xA3, 0xE0, 0x9F, 0xF0, 0x90, 0x8A, 0xD2, 0xE0, 0x9E,
60392 +0xF0, 0x80, 0x07, 0xE4, 0x90, 0x8A, 0xD2, 0xF0, 0xA3, 0xF0, 0x90, 0x8A, 0xD2, 0xE0, 0xFC, 0xA3,
60393 +0xE0, 0xFD, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34, 0x86,
60394 +0xF5, 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x8A, 0xD0, 0xE0, 0x25, 0xE0, 0x24, 0x2E, 0xF5,
60395 +0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xD3, 0xED, 0x9B,
60396 +0xEC, 0x9A, 0x40, 0x05, 0x31, 0x78, 0x02, 0x71, 0xAF, 0x90, 0x8A, 0xD0, 0xE0, 0x25, 0xE0, 0x24,
60397 +0x66, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFE, 0x74, 0x01, 0x93, 0xFF, 0xC3,
60398 +0x90, 0x8A, 0xD3, 0xE0, 0x9F, 0x90, 0x8A, 0xD2, 0xE0, 0x9E, 0x40, 0x03, 0x02, 0x71, 0xAF, 0x90,
60399 +0x8A, 0xCF, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x5D, 0x41, 0x02, 0x71, 0xAF, 0x90, 0x8A, 0xCF, 0xE0,
60400 +0xFF, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xFC, 0x64, 0x05, 0x60, 0x03,
60401 +0x02, 0x70, 0x7D, 0x90, 0x87, 0x22, 0xE0, 0xFE, 0xB4, 0x03, 0x0B, 0x90, 0x8A, 0xD1, 0xE0, 0xC3,
60402 +0x94, 0x19, 0x40, 0x3D, 0x80, 0x2E, 0xEE, 0xB4, 0x02, 0x0B, 0x90, 0x8A, 0xD1, 0xE0, 0xC3, 0x94,
60403 +0x11, 0x40, 0x2E, 0x80, 0x1F, 0x90, 0x87, 0x22, 0xE0, 0xFE, 0xB4, 0x01, 0x0B, 0x90, 0x8A, 0xD1,
60404 +0xE0, 0xC3, 0x94, 0x0A, 0x40, 0x1B, 0x80, 0x0C, 0xEE, 0x70, 0x11, 0x90, 0x8A, 0xD1, 0xE0, 0xC3,
60405 +0x94, 0x03, 0x40, 0x0D, 0x90, 0x89, 0x43, 0x74, 0x01, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x89, 0x43,
60406 +0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0xFE, 0x24, 0x43, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0,
60407 +0x90, 0x8A, 0xDD, 0xF0, 0x74, 0x23, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE,
60408 +0xC3, 0x94, 0x30, 0x50, 0x0B, 0xE4, 0x90, 0x8A, 0xDD, 0xF0, 0x74, 0x64, 0x2F, 0x02, 0x70, 0x28,
60409 +0x90, 0x89, 0x43, 0xE0, 0x64, 0x01, 0x60, 0x03, 0x02, 0x70, 0x1D, 0x90, 0x8A, 0xCF, 0xE0, 0x24,
60410 +0x44, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0x64, 0x0A, 0x60, 0x5B, 0x90, 0x8A, 0xCF,
60411 +0xE0, 0xFF, 0xEE, 0x24, 0x05, 0xFB, 0xE4, 0x33, 0xFA, 0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
60412 +0x86, 0xF5, 0x83, 0xE0, 0xFF, 0xD3, 0x9B, 0xEA, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x38,
60413 +0x90, 0x8A, 0xCF, 0xE0, 0xFE, 0xEF, 0x24, 0x05, 0xFB, 0xE4, 0x33, 0xFA, 0x74, 0x23, 0x2E, 0xF5,
60414 +0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xD3, 0x9B, 0xEA, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98,
60415 +0x50, 0x16, 0x90, 0x8A, 0xCF, 0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0,
60416 +0xFF, 0x90, 0x8A, 0xD1, 0xE0, 0x6F, 0x60, 0x56, 0x90, 0x8A, 0xCF, 0xE0, 0x24, 0x23, 0xF5, 0x82,
60417 +0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFF, 0xD3, 0x94, 0x42, 0x40, 0x08, 0x90, 0x8A, 0xDD, 0x74,
60418 +0x05, 0xF0, 0x80, 0x11, 0xEF, 0xD3, 0x94, 0x39, 0x90, 0x8A, 0xDD, 0x40, 0x05, 0x74, 0x03, 0xF0,
60419 +0x80, 0x03, 0x74, 0x01, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0x24, 0x23, 0xF5, 0x82, 0xE4, 0x34,
60420 +0x89, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xEE,
60421 +0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0x24, 0x44, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0x80, 0x2F, 0x90, 0x8A,
60422 +0xCF, 0xE0, 0xFF, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x44,
60423 +0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x80, 0x14, 0xE4, 0x90, 0x8A,
60424 +0xDD, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4,
60425 +0xF0, 0x90, 0x8A, 0xD1, 0xE0, 0xFE, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0x24, 0x84, 0xF5, 0x82, 0xE4,
60426 +0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0xFE, 0x74, 0x43, 0x2F, 0xF5, 0x82,
60427 +0xE4, 0x34, 0x88, 0xF5, 0x83, 0xEE, 0xF0, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x87, 0x2B, 0x12, 0x43,
60428 +0x5F, 0xE0, 0xB4, 0x01, 0x11, 0xE4, 0x90, 0x8A, 0xDD, 0xF0, 0x74, 0x64, 0x2F, 0xF5, 0x82, 0xE4,
60429 +0x34, 0x8A, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0xFD, 0x21, 0xAC, 0xEC, 0x64, 0x06,
60430 +0x60, 0x02, 0x21, 0xAF, 0x90, 0x8A, 0xD2, 0xF0, 0xA3, 0xF0, 0x90, 0x41, 0xDB, 0x93, 0xFF, 0x7E,
60431 +0x00, 0x90, 0x8A, 0xD4, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x12, 0x29, 0xF2, 0x90, 0x8A, 0xDB, 0xEE,
60432 +0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0x24, 0x43, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5,
60433 +0x83, 0xE0, 0x90, 0x8A, 0xDD, 0xF0, 0xE4, 0x90, 0x8A, 0xDA, 0xF0, 0x90, 0x8A, 0xDA, 0xE0, 0xFF,
60434 +0xD3, 0x94, 0x04, 0x50, 0x47, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x75, 0xF0, 0x02, 0xEF, 0xA4,
60435 +0xF5, 0x82, 0x85, 0xF0, 0x83, 0x12, 0x42, 0xC2, 0xFD, 0xAC, 0xF0, 0xEF, 0x90, 0x41, 0xD6, 0x93,
60436 +0xFF, 0x7E, 0x00, 0x12, 0x29, 0xF2, 0x90, 0x8A, 0xD2, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0x90,
60437 +0x8A, 0xDB, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xD3, 0x90, 0x8A, 0xD3, 0xE0, 0x9F, 0x90, 0x8A, 0xD2,
60438 +0xE0, 0x9E, 0x50, 0x08, 0x90, 0x8A, 0xDA, 0xE0, 0x04, 0xF0, 0x80, 0xAF, 0x90, 0x8A, 0xDA, 0xE0,
60439 +0xC3, 0x13, 0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0xFF, 0xB4, 0x01, 0x0D, 0x90, 0x8A, 0xDA, 0xE0, 0x70,
60440 +0x5D, 0x90, 0x8A, 0xDD, 0x04, 0xF0, 0x80, 0x5B, 0xEF, 0xB4, 0x03, 0x1D, 0x90, 0x8A, 0xDA, 0xE0,
60441 +0xFF, 0x70, 0x08, 0x90, 0x8A, 0xDD, 0x74, 0x03, 0xF0, 0x80, 0x48, 0xEF, 0xB4, 0x01, 0x08, 0x90,
60442 +0x8A, 0xDD, 0x74, 0x01, 0xF0, 0x80, 0x3C, 0x80, 0x35, 0x90, 0x8A, 0xDD, 0xE0, 0x64, 0x05, 0x70,
60443 +0x32, 0x90, 0x8A, 0xDA, 0xE0, 0xFF, 0x70, 0x08, 0x90, 0x8A, 0xDD, 0x74, 0x05, 0xF0, 0x80, 0x0F,
60444 +0xEF, 0x90, 0x8A, 0xDD, 0xB4, 0x01, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03, 0x74, 0x01, 0xF0, 0xD3,
60445 +0x90, 0x8A, 0xD7, 0xE0, 0x94, 0x03, 0x90, 0x8A, 0xD6, 0xE0, 0x94, 0x00, 0x40, 0x05, 0xE4, 0x90,
60446 +0x8A, 0xDD, 0xF0, 0xD3, 0x90, 0x8A, 0xD7, 0xE0, 0x94, 0x03, 0x90, 0x8A, 0xD6, 0xE0, 0x94, 0x00,
60447 +0x40, 0x05, 0xE4, 0x90, 0x8A, 0xDD, 0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0xFD, 0x90, 0x8A, 0xCF, 0xE0,
60448 +0xFF, 0x24, 0x43, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xED, 0xF0, 0x12, 0x69, 0x38, 0x90,
60449 +0x8A, 0xCF, 0xE0, 0xFF, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xD3, 0x94,
60450 +0x05, 0x50, 0x0F, 0x74, 0x64, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0x04, 0xF0,
60451 +0x80, 0x0F, 0x90, 0x8A, 0xCF, 0xE0, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4,
60452 +0xF0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0xE4, 0xF5, 0xF0, 0x12, 0x42, 0xFA, 0xAB, 0x12, 0xAA,
60453 +0x13, 0xA9, 0x14, 0x90, 0x00, 0x02, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x19, 0x90, 0x00, 0x04, 0xE4,
60454 +0xF5, 0xF0, 0x12, 0x43, 0x19, 0x90, 0x00, 0x06, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x19, 0x90, 0x00,
60455 +0x08, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x19, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0xC0,
60456 +0xF5, 0x82, 0xE4, 0x34, 0x85, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x63,
60457 +0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xA3,
60458 +0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0x04,
60459 +0xF0, 0x02, 0x6B, 0xC2, 0x22, 0xE4, 0x90, 0x8A, 0xCF, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0xC3,
60460 +0x94, 0x10, 0x50, 0x14, 0x74, 0xA4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE4, 0xF0,
60461 +0x90, 0x8A, 0xCF, 0xE0, 0x04, 0xF0, 0x80, 0xE2, 0xE4, 0x90, 0x8A, 0xCF, 0xF0, 0x90, 0x8A, 0xCF,
60462 +0xE0, 0xFF, 0xC3, 0x94, 0x20, 0x40, 0x02, 0x81, 0x0E, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x00,
60463 +0x12, 0x43, 0x5F, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x02, 0x12, 0x43,
60464 +0x5F, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x04, 0x12, 0x43, 0x5F, 0xE4,
60465 +0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x06, 0x12, 0x43, 0x5F, 0xE4, 0xF0, 0xA3,
60466 +0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x08, 0x12, 0x43, 0x5F, 0xE4, 0xF0, 0xA3, 0xF0, 0x74,
60467 +0x84, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x74, 0x44, 0x2F, 0xF5,
60468 +0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x43, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88,
60469 +0xF5, 0x83, 0xE4, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xC0, 0xF5, 0x82, 0xE4, 0x34, 0x85, 0xF5, 0x83,
60470 +0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x63, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83,
60471 +0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xE3, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83,
60472 +0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xA3, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83,
60473 +0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83,
60474 +0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xA4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83,
60475 +0xE4, 0xF0, 0xA3, 0xF0, 0x74, 0x44, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4, 0xF0,
60476 +0x74, 0x24, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x64, 0x2F, 0xF5,
60477 +0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x41, 0x8C, 0x93, 0xFE, 0x74, 0x01, 0x93,
60478 +0xFF, 0x90, 0x41, 0x54, 0x74, 0x01, 0x93, 0x2F, 0xFF, 0xE4, 0x93, 0x3E, 0xC3, 0x13, 0xFE, 0xEF,
60479 +0x13, 0xFF, 0x90, 0x8A, 0xCF, 0xE0, 0xFD, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34, 0x86,
60480 +0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x29, 0x12, 0x43,
60481 +0x5F, 0x74, 0x01, 0xF0, 0x74, 0xC1, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0x74, 0x0C,
60482 +0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x25, 0x12, 0x43, 0x5F, 0x74, 0xFF, 0xF0, 0xA3, 0xF0,
60483 +0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x23, 0x12, 0x43, 0x5F, 0xE4, 0xF0, 0xA3, 0x74, 0x0F, 0xF0,
60484 +0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x27, 0x12, 0x43, 0x5F, 0x74, 0x13, 0xF0, 0x75, 0xF0, 0x09,
60485 +0xED, 0x90, 0x87, 0x28, 0x12, 0x43, 0x5F, 0xE4, 0xF0, 0x74, 0x84, 0x2D, 0xF5, 0x82, 0xE4, 0x34,
60486 +0x04, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0x04, 0xF0, 0x41, 0x7D, 0x22, 0x12,
60487 +0x29, 0xD9, 0xFF, 0xC3, 0x94, 0x20, 0x50, 0x14, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFE, 0x74,
60488 +0x23, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0x22, 0xEF, 0xB4, 0x20, 0x0A,
60489 +0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0x90, 0x87, 0x21, 0xF0, 0x22, 0x90, 0x8B, 0x4B, 0xEE, 0xF0,
60490 +0xA3, 0xEF, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x8B, 0x4B, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5,
60491 +0x82, 0x8E, 0x83, 0xE0, 0x60, 0x2C, 0xC3, 0x90, 0x8B, 0x4E, 0xE0, 0x94, 0xE8, 0x90, 0x8B, 0x4D,
60492 +0xE0, 0x94, 0x03, 0x40, 0x0A, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x10, 0xF0, 0x7F, 0x00, 0x22, 0x90,
60493 +0x8B, 0x4D, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x81, 0x7F, 0x0A, 0x7E, 0x00, 0x12, 0x37, 0x54,
60494 +0x80, 0xC6, 0x7F, 0x01, 0x22, 0x12, 0x29, 0xD9, 0xF5, 0x21, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3,
60495 +0xC0, 0xD0, 0x90, 0x8A, 0xDA, 0x12, 0x2A, 0x8B, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x01, 0x12,
60496 +0x42, 0x20, 0x90, 0x8B, 0x1A, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x42, 0x20, 0x90, 0x8B, 0x0A, 0xF0,
60497 +0x12, 0x47, 0xFA, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFF, 0x30,
60498 +0xE0, 0x25, 0x12, 0x29, 0xD9, 0x90, 0x8B, 0x10, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x42, 0x20, 0x90,
60499 +0x8B, 0x11, 0xF0, 0xEF, 0xC3, 0x13, 0x54, 0x7F, 0x90, 0x8B, 0x0F, 0xF0, 0x90, 0x00, 0x03, 0x12,
60500 +0x42, 0x20, 0x90, 0x8B, 0x16, 0xF0, 0x22, 0x90, 0x8B, 0x10, 0x74, 0x03, 0xF0, 0x90, 0x8B, 0x11,
60501 +0x74, 0x05, 0xF0, 0x90, 0x8B, 0x0F, 0x74, 0x14, 0xF0, 0x90, 0x8B, 0x16, 0x74, 0x05, 0xF0, 0x22,
60502 +0x12, 0x29, 0xD9, 0x30, 0xE0, 0x19, 0xC3, 0x13, 0x54, 0x7F, 0x90, 0x8B, 0x15, 0xF0, 0x90, 0x00,
60503 +0x01, 0x12, 0x42, 0x20, 0xFF, 0x90, 0x8B, 0x13, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x0F, 0x90,
60504 +0x8B, 0x15, 0x74, 0x05, 0xF0, 0x90, 0x8B, 0x13, 0xE4, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90, 0x8B,
60505 +0x13, 0xE0, 0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22, 0x12, 0x29, 0xD9, 0x90, 0x8B, 0x12, 0xF0,
60506 +0x60, 0x07, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x45, 0xA2, 0x90, 0x8B, 0x12, 0xE0, 0x90, 0x01, 0xE7,
60507 +0xF0, 0x22, 0x90, 0x02, 0x09, 0xE0, 0xFD, 0x12, 0x29, 0xD9, 0xFE, 0xAF, 0x05, 0xED, 0x2E, 0x90,
60508 +0x8A, 0xF7, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x42, 0x20, 0xFF, 0xED, 0x2F, 0x90, 0x8A, 0xF8, 0xF0,
60509 +0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFF, 0xED, 0x2F, 0x90, 0x8A, 0xF9, 0xF0, 0x90, 0x00, 0x03,
60510 +0x12, 0x42, 0x20, 0xFF, 0xED, 0x2F, 0x90, 0x8A, 0xFA, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x42, 0x20,
60511 +0xFF, 0xAE, 0x05, 0xED, 0x2F, 0x90, 0x8A, 0xFB, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0,
60512 +0xD0, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x8B, 0xE4, 0x90, 0x8A, 0xDD, 0xF0, 0x12, 0x29, 0xD9, 0xC3,
60513 +0x13, 0x20, 0xE0, 0x02, 0xC1, 0xED, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x6B, 0x12, 0x29, 0xD9, 0xFF,
60514 +0x54, 0x02, 0xFE, 0x90, 0x8B, 0x32, 0xE0, 0x54, 0xFD, 0x4E, 0xFE, 0xF0, 0xEF, 0x54, 0x01, 0xFF,
60515 +0xEE, 0x54, 0xFE, 0x4F, 0xFF, 0xF0, 0x12, 0x29, 0xD9, 0xFE, 0x54, 0x08, 0xFD, 0xEF, 0x54, 0xF7,
60516 +0x4D, 0xFF, 0x90, 0x8B, 0x32, 0xF0, 0xEE, 0x54, 0x10, 0xFE, 0xEF, 0x54, 0xEF, 0x4E, 0xFF, 0xF0,
60517 +0x12, 0x29, 0xD9, 0xFE, 0x54, 0x20, 0xFD, 0xEF, 0x54, 0xDF, 0x4D, 0xFF, 0x90, 0x8B, 0x32, 0xF0,
60518 +0xEE, 0x54, 0x40, 0xFE, 0xEF, 0x54, 0xBF, 0x4E, 0xF0, 0x20, 0xE0, 0x02, 0xC1, 0xD9, 0x90, 0x8A,
60519 +0xDD, 0x74, 0x21, 0xF0, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x6B, 0x12, 0x29, 0xD9, 0xFF, 0x13, 0x13,
60520 +0x54, 0x01, 0xFE, 0x90, 0x8B, 0x32, 0xE0, 0xFD, 0x13, 0x13, 0x54, 0x01, 0x6E, 0x60, 0x2A, 0xEF,
60521 +0x54, 0x04, 0xFF, 0xED, 0x54, 0xFB, 0x4F, 0xF0, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x0E,
60522 +0x90, 0x01, 0x34, 0x74, 0x40, 0xF0, 0xFD, 0xE4, 0xFF, 0x12, 0x36, 0xE6, 0x80, 0x0B, 0xE4, 0x90,
60523 +0x8B, 0x34, 0xF0, 0x7D, 0x40, 0xFF, 0x12, 0x36, 0x75, 0x90, 0x8B, 0x32, 0xE0, 0xFD, 0x13, 0x13,
60524 +0x13, 0x54, 0x1F, 0x30, 0xE0, 0x07, 0x90, 0x8A, 0xDD, 0xE0, 0x44, 0x12, 0xF0, 0xED, 0xC4, 0x54,
60525 +0x0F, 0x30, 0xE0, 0x07, 0x90, 0x8A, 0xDD, 0xE0, 0x44, 0x14, 0xF0, 0x90, 0x8B, 0x32, 0xE0, 0xC4,
60526 +0x13, 0x54, 0x07, 0x30, 0xE0, 0x07, 0x90, 0x8A, 0xDD, 0xE0, 0x44, 0x80, 0xF0, 0x90, 0x8B, 0x32,
60527 +0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x07, 0x90, 0x8A, 0xDD, 0xE0, 0x44, 0x40, 0xF0,
60528 +0x90, 0x8A, 0xDD, 0xE0, 0x90, 0x05, 0x27, 0xF0, 0x90, 0x8B, 0x33, 0xE0, 0x70, 0x05, 0x7F, 0x01,
60529 +0x12, 0x4E, 0x89, 0x90, 0x8B, 0x32, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x04, 0x7F,
60530 +0x03, 0x80, 0x0E, 0x7F, 0x01, 0x12, 0x4D, 0xE0, 0xEF, 0x60, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F,
60531 +0x02, 0x12, 0x4E, 0x89, 0x7F, 0x02, 0x02, 0x78, 0x2E, 0x90, 0x8A, 0xDD, 0x74, 0x01, 0xF0, 0x90,
60532 +0x05, 0x27, 0xF0, 0xE4, 0xFF, 0x12, 0x4E, 0x89, 0x7F, 0x03, 0x02, 0x78, 0x2E, 0x90, 0x8A, 0xDA,
60533 +0x12, 0x43, 0x6B, 0x12, 0x29, 0xD9, 0xFF, 0x54, 0x02, 0xFE, 0x90, 0x8B, 0x2C, 0xE0, 0x54, 0xFD,
60534 +0x4E, 0xFE, 0xF0, 0xEF, 0x54, 0x01, 0xFF, 0xEE, 0x54, 0xFE, 0x4F, 0xFF, 0xF0, 0x12, 0x29, 0xD9,
60535 +0xFE, 0x54, 0x08, 0xFD, 0xEF, 0x54, 0xF7, 0x4D, 0xFF, 0x90, 0x8B, 0x2C, 0xF0, 0xEE, 0x54, 0x10,
60536 +0xFE, 0xEF, 0x54, 0xEF, 0x4E, 0xFF, 0xF0, 0x12, 0x29, 0xD9, 0xFE, 0x54, 0x40, 0xFD, 0xEF, 0x54,
60537 +0xBF, 0x4D, 0xFF, 0x90, 0x8B, 0x2C, 0xF0, 0xEE, 0x54, 0x04, 0xFE, 0xEF, 0x54, 0xFB, 0x4E, 0xF0,
60538 +0x20, 0xE0, 0x02, 0xE1, 0xE2, 0x90, 0x8A, 0xDD, 0x74, 0x31, 0xF0, 0x90, 0x8B, 0x2C, 0xE0, 0x13,
60539 +0x13, 0x54, 0x3F, 0x20, 0xE0, 0x0B, 0xE4, 0x90, 0x8B, 0x2E, 0xF0, 0x7D, 0x40, 0xFF, 0x12, 0x36,
60540 +0x75, 0x90, 0x8B, 0x2C, 0xE0, 0xFD, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x07, 0x90, 0x8A,
60541 +0xDD, 0xE0, 0x44, 0x02, 0xF0, 0xED, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x07, 0x90, 0x8A, 0xDD, 0xE0,
60542 +0x44, 0x04, 0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0x54, 0x06, 0x60, 0x0C, 0x90, 0x01, 0x3E, 0x74, 0x03,
60543 +0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x37, 0x00, 0x90, 0x8A, 0xDD, 0xE0, 0x90, 0x05, 0x27, 0xF0, 0x90,
60544 +0x8B, 0x2C, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x0D, 0xA3, 0xE0, 0x64, 0x06,
60545 +0x60, 0x2C, 0x7F, 0x06, 0x12, 0x65, 0x82, 0x80, 0x25, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x06, 0x1B,
60546 +0x7F, 0x01, 0x12, 0x65, 0x82, 0xE4, 0xFF, 0x12, 0x4D, 0xE0, 0xEF, 0x60, 0x09, 0x7D, 0x01, 0xAF,
60547 +0x23, 0x12, 0x45, 0xA2, 0x80, 0x05, 0x12, 0x4E, 0x56, 0x80, 0x03, 0x12, 0x7D, 0xC1, 0x7F, 0x01,
60548 +0x80, 0x4C, 0x90, 0x8A, 0xDD, 0x74, 0x01, 0xF0, 0x90, 0x05, 0x27, 0xF0, 0x7D, 0x03, 0x7F, 0x02,
60549 +0x12, 0x36, 0x92, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x06, 0x02, 0x80, 0x1B, 0x90, 0x8B, 0x2D, 0xE0,
60550 +0xB4, 0x04, 0x02, 0x80, 0x07, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05, 0x04, 0xE4, 0xFF, 0x80, 0x14,
60551 +0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x03, 0x04, 0x7F, 0x01, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4,
60552 +0x02, 0x05, 0x7F, 0x01, 0x12, 0x65, 0x82, 0x11, 0x35, 0x12, 0x4A, 0xFC, 0x7F, 0x03, 0x11, 0x42,
60553 +0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x8B, 0x31, 0xE0, 0xB4, 0x01, 0x05, 0xE4, 0xF0, 0x12, 0x48,
60554 +0xFE, 0x22, 0xAD, 0x07, 0xEF, 0x64, 0x01, 0x60, 0x04, 0xEF, 0xB4, 0x03, 0x15, 0x90, 0x8B, 0x32,
60555 +0xE0, 0x54, 0xFE, 0xF0, 0x54, 0xFB, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
60556 +0xA3, 0xF0, 0xED, 0x64, 0x02, 0x60, 0x04, 0xED, 0xB4, 0x03, 0x15, 0x90, 0x8B, 0x2C, 0xE0, 0x54,
60557 +0xFE, 0xF0, 0x54, 0xFB, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
60558 +0x22, 0x12, 0x29, 0xD9, 0x90, 0x8B, 0x38, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
60559 +0x90, 0x8A, 0xFD, 0xE0, 0x90, 0x8A, 0xE8, 0xF0, 0x90, 0x8A, 0xFE, 0xE0, 0xFF, 0xA3, 0xE0, 0x90,
60560 +0x8A, 0xE9, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0x90, 0x8A, 0xE4, 0xF0, 0x90, 0x8A, 0xE4, 0xE0,
60561 +0xFF, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x8B, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0xEB, 0x2F, 0xF5,
60562 +0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x8A, 0xE4, 0xE0, 0x04, 0xF0, 0xE0, 0xB4,
60563 +0x04, 0xDA, 0x90, 0x8A, 0xE8, 0xE0, 0x12, 0x43, 0x94, 0x78, 0xF8, 0x00, 0x7A, 0x6B, 0x01, 0x79,
60564 +0x01, 0x02, 0x79, 0x01, 0x03, 0x79, 0x01, 0x04, 0x7A, 0x6B, 0x05, 0x7A, 0x35, 0x80, 0x7A, 0x4E,
60565 +0x81, 0x7A, 0x6B, 0x82, 0x00, 0x00, 0x7A, 0x67, 0x90, 0x8A, 0xEE, 0xE0, 0xFF, 0x51, 0x72, 0x41,
60566 +0x6B, 0x90, 0x8A, 0xE8, 0xE0, 0xFF, 0xB4, 0x02, 0x08, 0x90, 0x8A, 0xE5, 0x74, 0x01, 0xF0, 0x80,
60567 +0x0F, 0xEF, 0x90, 0x8A, 0xE5, 0xB4, 0x03, 0x05, 0x74, 0x02, 0xF0, 0x80, 0x03, 0x74, 0x04, 0xF0,
60568 +0xC3, 0x90, 0x8A, 0xE9, 0xE0, 0x94, 0x08, 0x50, 0x78, 0xE4, 0x90, 0x8A, 0xE4, 0xF0, 0x90, 0x8A,
60569 +0xE5, 0xE0, 0xFF, 0x90, 0x8A, 0xE4, 0xE0, 0xC3, 0x9F, 0x40, 0x02, 0x41, 0x6B, 0x90, 0x8A, 0xE9,
60570 +0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC3, 0xEE, 0x94, 0x01, 0x90, 0x8A, 0xE4, 0xE0, 0x50, 0x1F, 0xFE,
60571 +0x2F, 0xFF, 0xEE, 0xFD, 0xC3, 0x74, 0x03, 0x9D, 0xFD, 0xE4, 0x94, 0x00, 0xFC, 0x74, 0xEB, 0x2D,
60572 +0xF5, 0x82, 0x74, 0x8A, 0x3C, 0xF5, 0x83, 0xE0, 0xFD, 0x12, 0x51, 0x88, 0x80, 0x2B, 0xFF, 0xFD,
60573 +0xC3, 0x74, 0x03, 0x9D, 0xFD, 0xE4, 0x94, 0x00, 0xFC, 0x74, 0xEB, 0x2D, 0xF5, 0x82, 0x74, 0x8A,
60574 +0x3C, 0xF5, 0x83, 0xE0, 0xFE, 0xEF, 0xFD, 0x90, 0x8A, 0xEA, 0xE0, 0x2D, 0xFD, 0x90, 0x8A, 0xE9,
60575 +0xE0, 0x34, 0x00, 0x8D, 0x82, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x8A, 0xE4, 0xE0, 0x04, 0xF0, 0x80,
60576 +0x8D, 0xC3, 0x90, 0x8A, 0xE9, 0xE0, 0x94, 0x10, 0x40, 0x02, 0x41, 0x6B, 0x90, 0x8A, 0xE8, 0xE0,
60577 +0x64, 0x04, 0x60, 0x02, 0x41, 0x6B, 0x90, 0x8A, 0xEC, 0xE0, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x78,
60578 +0x10, 0x12, 0x2A, 0x6C, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x8A, 0xEB, 0xE0,
60579 +0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x18, 0x12, 0x2A, 0x6C, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01,
60580 +0xD0, 0x00, 0x12, 0x43, 0x46, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x8A, 0xED,
60581 +0xE0, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x08, 0x12, 0x2A, 0x6C, 0xD0, 0x03, 0xD0, 0x02, 0xD0,
60582 +0x01, 0xD0, 0x00, 0x12, 0x43, 0x46, 0xA8, 0x04, 0xA9, 0x05, 0xAA, 0x06, 0xAB, 0x07, 0xA3, 0xE0,
60583 +0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x12, 0x43, 0x46, 0xA3, 0x12, 0x2A, 0x7F, 0x90, 0x8A, 0xEF, 0x12,
60584 +0x43, 0x53, 0x90, 0x80, 0x85, 0x12, 0x2A, 0x7F, 0x90, 0x8A, 0xE9, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF,
60585 +0x12, 0x2F, 0xD9, 0x80, 0x36, 0x90, 0x8A, 0xED, 0xE0, 0xFE, 0xA3, 0xE0, 0x24, 0x00, 0xFF, 0xE4,
60586 +0x3E, 0xFE, 0x90, 0x8A, 0xE6, 0xF0, 0xA3, 0xEF, 0xF0, 0x12, 0x37, 0x54, 0x80, 0x1D, 0x90, 0x8A,
60587 +0xED, 0xE0, 0xFE, 0xA3, 0xE0, 0x24, 0x00, 0xFF, 0xE4, 0x3E, 0xFE, 0x90, 0x8A, 0xE6, 0xF0, 0xA3,
60588 +0xEF, 0xF0, 0x12, 0x36, 0xCB, 0x80, 0x04, 0x7F, 0x00, 0x80, 0x02, 0x7F, 0x01, 0xD0, 0xD0, 0x92,
60589 +0xAF, 0x22, 0x8F, 0x0F, 0xE4, 0x90, 0x8A, 0xF3, 0xF0, 0xE5, 0x0F, 0x14, 0xFE, 0x90, 0x8A, 0xF3,
60590 +0xE0, 0xFF, 0xC3, 0x9E, 0x50, 0x0E, 0xEF, 0x04, 0xFD, 0x12, 0x34, 0xB7, 0x90, 0x8A, 0xF3, 0xE0,
60591 +0x04, 0xF0, 0x80, 0xE5, 0xE5, 0x0F, 0x14, 0xFF, 0x7D, 0xFF, 0x12, 0x34, 0xB7, 0x90, 0x8A, 0xF3,
60592 +0xE5, 0x0F, 0xF0, 0x90, 0x8A, 0xF3, 0xE0, 0xC3, 0x94, 0xFF, 0x50, 0x0F, 0xE0, 0xFF, 0x04, 0xFD,
60593 +0x12, 0x34, 0xB7, 0x90, 0x8A, 0xF3, 0xE0, 0x04, 0xF0, 0x80, 0xE8, 0xAD, 0x0F, 0x7F, 0xFF, 0x02,
60594 +0x34, 0xB7, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0x90, 0x8A, 0xDD, 0xF0, 0xA3, 0x74,
60595 +0x04, 0xF0, 0xA3, 0xE4, 0xF0, 0x90, 0x8A, 0xE2, 0xF0, 0xA3, 0xF0, 0x90, 0x02, 0x09, 0xE0, 0x90,
60596 +0x8A, 0xE1, 0xF0, 0x12, 0x29, 0xD9, 0xFF, 0x90, 0x8A, 0xE1, 0xE0, 0x2F, 0x90, 0x8A, 0xE0, 0xF0,
60597 +0x30, 0xE0, 0x0B, 0x90, 0x8A, 0xDB, 0xE4, 0xF0, 0xA3, 0x74, 0x80, 0xF0, 0x80, 0x07, 0xE4, 0x90,
60598 +0x8A, 0xDB, 0xF0, 0xA3, 0xF0, 0x90, 0x8A, 0xE0, 0xE0, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0x90,
60599 +0x8A, 0xDD, 0xE0, 0x24, 0x20, 0xF0, 0x90, 0x8A, 0xDB, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFC, 0x2D,
60600 +0xFF, 0x24, 0x01, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0x8A, 0xFD, 0xF0, 0x74,
60601 +0x02, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFE, 0xEC, 0x2D, 0x24, 0x03, 0xF5,
60602 +0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x24, 0x00, 0xFF, 0xE4, 0x3E, 0x90, 0x8A, 0xFE, 0xF0,
60603 +0xA3, 0xEF, 0xF0, 0x90, 0x8A, 0xDA, 0x74, 0x04, 0xF0, 0x90, 0x8A, 0xDB, 0xA3, 0xE0, 0xFF, 0xA3,
60604 +0xE0, 0x2F, 0xFF, 0x90, 0x8A, 0xDA, 0xE0, 0xFE, 0x2F, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
60605 +0xF5, 0x83, 0xE0, 0xFF, 0x74, 0xFC, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEF, 0xF0,
60606 +0x90, 0x8A, 0xDA, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x08, 0xCF, 0x11, 0x89, 0xEF, 0x70, 0x45, 0x90,
60607 +0x01, 0xC3, 0xE0, 0x60, 0x2B, 0xC3, 0x90, 0x8A, 0xE3, 0xE0, 0x94, 0xE8, 0x90, 0x8A, 0xE2, 0xE0,
60608 +0x94, 0x03, 0x40, 0x09, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x10, 0xF0, 0x80, 0x79, 0x90, 0x8A, 0xE2,
60609 +0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x81, 0x7F, 0x0A, 0x7E, 0x00, 0x12, 0x37, 0x54, 0x80, 0xCF,
60610 +0x90, 0x01, 0xC6, 0xE0, 0x90, 0x01, 0xC3, 0x30, 0xE2, 0x05, 0x74, 0xFE, 0xF0, 0x80, 0x57, 0x74,
60611 +0xFF, 0xF0, 0x80, 0x52, 0x90, 0x8A, 0xDD, 0xE0, 0xB4, 0x78, 0x2E, 0xE4, 0xF0, 0x90, 0x8A, 0xE0,
60612 +0xE0, 0x04, 0xF0, 0x90, 0x8A, 0xDB, 0xE0, 0x70, 0x04, 0xA3, 0xE0, 0x64, 0x80, 0x90, 0x8A, 0xDB,
60613 +0x70, 0x05, 0xF0, 0xA3, 0xF0, 0x80, 0x06, 0xE4, 0xF0, 0xA3, 0x74, 0x80, 0xF0, 0x90, 0x8A, 0xE0,
60614 +0xE0, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0x80, 0x07, 0x90, 0x8A, 0xDD, 0xE0, 0x24, 0x08, 0xF0,
60615 +0x90, 0x8A, 0xDE, 0x74, 0xFF, 0xF5, 0xF0, 0x12, 0x42, 0x81, 0x90, 0x8A, 0xDE, 0xE0, 0x70, 0x02,
60616 +0xA3, 0xE0, 0x60, 0x02, 0x61, 0x16, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x29, 0xD9, 0x90, 0x8B,
60617 +0x05, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x42, 0x20, 0x90, 0x8B, 0x06, 0xF0, 0x22, 0xE4, 0xF5, 0x61,
60618 +0x22, 0x91, 0x4A, 0x90, 0x8B, 0x33, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0,
60619 +0x7F, 0x78, 0x7E, 0x08, 0x12, 0x27, 0xDE, 0x90, 0x8B, 0x1C, 0x12, 0x2A, 0x7F, 0x7F, 0x04, 0x7E,
60620 +0x0C, 0x12, 0x27, 0xDE, 0x90, 0x8B, 0x20, 0x12, 0x2A, 0x7F, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x27,
60621 +0xDE, 0x90, 0x8B, 0x24, 0x12, 0x2A, 0x7F, 0x90, 0x8B, 0x09, 0xE0, 0x90, 0x8B, 0x1C, 0xB4, 0x01,
60622 +0x0D, 0x12, 0x43, 0x53, 0xEF, 0x54, 0xC7, 0xFF, 0xED, 0x54, 0xC7, 0xFD, 0x80, 0x07, 0x12, 0x43,
60623 +0x53, 0xEF, 0x54, 0xC7, 0xFF, 0xEC, 0x90, 0x80, 0x85, 0x12, 0x2A, 0x7F, 0x7F, 0x78, 0x7E, 0x08,
60624 +0x12, 0x2F, 0xD9, 0x90, 0x8B, 0x20, 0x12, 0x43, 0x53, 0xEF, 0x54, 0x0F, 0xFF, 0xEC, 0x90, 0x80,
60625 +0x85, 0x12, 0x2A, 0x7F, 0x7F, 0x04, 0x7E, 0x0C, 0x12, 0x2F, 0xD9, 0x90, 0x8B, 0x24, 0x12, 0x43,
60626 +0x53, 0xEF, 0x44, 0x02, 0xFF, 0xEC, 0x90, 0x80, 0x85, 0x12, 0x2A, 0x7F, 0x7F, 0x00, 0x7E, 0x08,
60627 +0x12, 0x2F, 0xD9, 0x7F, 0x70, 0x7E, 0x0E, 0x12, 0x27, 0xDE, 0x90, 0x8B, 0x28, 0x12, 0x2A, 0x7F,
60628 +0x90, 0x80, 0x85, 0x12, 0x2A, 0x8B, 0x00, 0x1B, 0x25, 0xA0, 0x7F, 0x70, 0x7E, 0x0E, 0x12, 0x2F,
60629 +0xD9, 0x90, 0x80, 0x59, 0x12, 0x2A, 0x8B, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xFD, 0xFF, 0x12, 0x34,
60630 +0x81, 0x90, 0x8B, 0x09, 0xE0, 0xB4, 0x01, 0x11, 0x90, 0x80, 0x59, 0x12, 0x2A, 0x8B, 0x00, 0x00,
60631 +0x00, 0x00, 0xE4, 0xFD, 0x7F, 0x01, 0x12, 0x34, 0x81, 0x90, 0x00, 0x11, 0xE0, 0x54, 0xF6, 0xF0,
60632 +0x02, 0x52, 0x0E, 0x91, 0x50, 0x90, 0x8B, 0x33, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x05, 0x22, 0x74,
60633 +0xFF, 0xF0, 0x90, 0x8B, 0x33, 0x74, 0x04, 0xF0, 0x22, 0xB1, 0x42, 0x90, 0x8B, 0x33, 0x74, 0x04,
60634 +0xF0, 0x22, 0x90, 0x00, 0x11, 0xE0, 0x44, 0x09, 0xF0, 0x12, 0x52, 0x0E, 0x90, 0x8B, 0x1C, 0x12,
60635 +0x43, 0x53, 0x90, 0x80, 0x85, 0x12, 0x2A, 0x7F, 0x7F, 0x78, 0x7E, 0x08, 0x12, 0x2F, 0xD9, 0x90,
60636 +0x8B, 0x20, 0x12, 0x43, 0x53, 0x90, 0x80, 0x85, 0x12, 0x2A, 0x7F, 0x7F, 0x04, 0x7E, 0x0C, 0x12,
60637 +0x2F, 0xD9, 0x90, 0x8B, 0x24, 0x12, 0x43, 0x53, 0x90, 0x80, 0x85, 0x12, 0x2A, 0x7F, 0x7F, 0x00,
60638 +0x7E, 0x08, 0x12, 0x2F, 0xD9, 0x90, 0x8B, 0x28, 0x12, 0x43, 0x53, 0x90, 0x80, 0x85, 0x12, 0x2A,
60639 +0x7F, 0x7F, 0x70, 0x7E, 0x0E, 0x12, 0x2F, 0xD9, 0x90, 0x80, 0x59, 0x12, 0x2A, 0x8B, 0x00, 0x03,
60640 +0x2D, 0x95, 0xE4, 0xFD, 0xFF, 0x12, 0x34, 0x81, 0x90, 0x8B, 0x09, 0xE0, 0xB4, 0x01, 0x11, 0x90,
60641 +0x80, 0x59, 0x12, 0x2A, 0x8B, 0x00, 0x03, 0x2D, 0x95, 0xE4, 0xFD, 0x7F, 0x01, 0x12, 0x34, 0x81,
60642 +0x22, 0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x06, 0x60, 0x3C, 0xE5, 0x22, 0x54, 0x0F, 0x14, 0x60, 0x2E,
60643 +0x14, 0x60, 0x1E, 0x24, 0xFE, 0x60, 0x0E, 0x24, 0xF8, 0x70, 0x2A, 0xE4, 0x90, 0x8B, 0x2D, 0xF0,
60644 +0x90, 0x05, 0x22, 0xF0, 0x22, 0x90, 0x8B, 0x2D, 0x74, 0x01, 0xF0, 0x90, 0x05, 0x22, 0xE4, 0xF0,
60645 +0x22, 0x90, 0x8B, 0x2D, 0x74, 0x03, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x22, 0x90, 0x01,
60646 +0xC6, 0xE0, 0x44, 0x08, 0xF0, 0x22, 0xAE, 0x07, 0xE4, 0xFF, 0x12, 0x4D, 0xE0, 0xEF, 0x60, 0x18,
60647 +0x90, 0x8B, 0x2C, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x0C, 0xAF, 0x06, 0x7D, 0x01,
60648 +0x12, 0x45, 0xA2, 0xB1, 0xC1, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0x90, 0x01, 0x57, 0xE0, 0x60,
60649 +0x3C, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90, 0x8B, 0x1B, 0xE0,
60650 +0x60, 0x07, 0xE4, 0xF0, 0x53, 0x25, 0xFD, 0x80, 0x24, 0x90, 0x8B, 0x0C, 0xE0, 0x04, 0xF0, 0x53,
60651 +0x25, 0xEF, 0x90, 0x8B, 0x10, 0xE0, 0xFF, 0x90, 0x8B, 0x0C, 0xE0, 0xD3, 0x9F, 0x40, 0x0E, 0xE5,
60652 +0x21, 0xB4, 0x01, 0x09, 0x90, 0x8B, 0x0D, 0xE0, 0x70, 0x03, 0xE0, 0x04, 0xF0, 0x90, 0x01, 0x5B,
60653 +0xE0, 0x60, 0x10, 0x90, 0x01, 0x5B, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x04, 0xF0, 0xE4, 0x90,
60654 +0x8B, 0x18, 0xF0, 0x90, 0x01, 0x5F, 0xE0, 0x60, 0x10, 0x90, 0x01, 0x5F, 0xE4, 0xF0, 0x90, 0x01,
60655 +0x3C, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0x8B, 0x17, 0xF0, 0x22, 0xE4, 0x90, 0x8B, 0x4F, 0xF0, 0xA3,
60656 +0xF0, 0x90, 0x05, 0xF8, 0xE0, 0x70, 0x0F, 0xA3, 0xE0, 0x70, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xA3,
60657 +0xE0, 0x70, 0x03, 0x7F, 0x01, 0x22, 0xD3, 0x90, 0x8B, 0x50, 0xE0, 0x94, 0xE8, 0x90, 0x8B, 0x4F,
60658 +0xE0, 0x94, 0x03, 0x40, 0x03, 0x7F, 0x00, 0x22, 0x7F, 0x32, 0x7E, 0x00, 0x12, 0x37, 0x54, 0x90,
60659 +0x8B, 0x4F, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x81, 0x80, 0xC6, 0x00, 0x92, 0x00};
60660
60661 -#endif
60662 +// =================== v88 UMC A Cut P2PPS with CCX report C2H 2012-12-05 =====================
60663 +u8 Rtl8192CUFwUMCACutImgArray[UMCACutImgArrayLength] = {
60664 +0xC1, 0x88, 0x02, 0x05, 0x58, 0x00, 0x02, 0x00, 0x12, 0x05, 0x17, 0x11, 0xDE, 0x3E, 0x01, 0x00,
60665 +0x94, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
60666 +0x02, 0x46, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
60667 +0x00, 0x00, 0x00, 0x02, 0x60, 0xF2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
60668 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
60669 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
60670 +0x00, 0x00, 0x00, 0x02, 0x68, 0x91, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x4B, 0x87, 0x00, 0x00,
60671 +0x05, 0x04, 0x03, 0x02, 0x00, 0x03, 0x06, 0x05, 0x04, 0x03, 0x00, 0x04, 0x06, 0x05, 0x04, 0x02,
60672 +0x00, 0x04, 0x08, 0x07, 0x06, 0x04, 0x00, 0x06, 0x0A, 0x09, 0x08, 0x06, 0x00, 0x08, 0x0A, 0x09,
60673 +0x08, 0x04, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x02, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x00, 0x00, 0x08,
60674 +0x12, 0x11, 0x10, 0x08, 0x00, 0x10, 0x1A, 0x19, 0x18, 0x10, 0x00, 0x18, 0x22, 0x21, 0x20, 0x18,
60675 +0x00, 0x20, 0x22, 0x21, 0x20, 0x10, 0x00, 0x20, 0x22, 0x21, 0x20, 0x08, 0x00, 0x20, 0x22, 0x21,
60676 +0x1C, 0x08, 0x00, 0x20, 0x22, 0x21, 0x14, 0x08, 0x00, 0x20, 0x22, 0x20, 0x18, 0x08, 0x00, 0x20,
60677 +0x31, 0x30, 0x20, 0x10, 0x00, 0x30, 0x31, 0x30, 0x18, 0x00, 0x00, 0x30, 0x31, 0x2F, 0x10, 0x10,
60678 +0x00, 0x30, 0x31, 0x2C, 0x10, 0x10, 0x00, 0x30, 0x31, 0x28, 0x10, 0x00, 0x00, 0x30, 0x31, 0x20,
60679 +0x10, 0x00, 0x00, 0x30, 0x31, 0x10, 0x10, 0x00, 0x00, 0x30, 0x04, 0x04, 0x04, 0x05, 0x04, 0x04,
60680 +0x05, 0x07, 0x07, 0x07, 0x08, 0x0A, 0x04, 0x04, 0x04, 0x04, 0x06, 0x0A, 0x0B, 0x0D, 0x05, 0x05,
60681 +0x07, 0x07, 0x08, 0x0B, 0x0D, 0x0F, 0x04, 0x04, 0x04, 0x05, 0x07, 0x07, 0x09, 0x09, 0x0C, 0x0E,
60682 +0x10, 0x12, 0x06, 0x07, 0x09, 0x0A, 0x0C, 0x0E, 0x11, 0x13, 0x09, 0x09, 0x09, 0x09, 0x0C, 0x0E,
60683 +0x11, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x26, 0x2A, 0x18, 0x1A,
60684 +0x1D, 0x1F, 0x21, 0x27, 0x29, 0x2A, 0x00, 0x00, 0x00, 0x1F, 0x23, 0x28, 0x2A, 0x2C, 0x00, 0x04,
60685 +0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, 0x00, 0x48, 0x00, 0x60,
60686 +0x00, 0x90, 0x00, 0xC0, 0x00, 0xD8, 0x00, 0x50, 0x00, 0x78, 0x00, 0xA0, 0x00, 0xC8, 0x01, 0x40,
60687 +0x01, 0x90, 0x01, 0xE0, 0x02, 0x30, 0x01, 0x2C, 0x01, 0x40, 0x01, 0xE0, 0x02, 0xD0, 0x03, 0xE8,
60688 +0x04, 0xB0, 0x06, 0x40, 0x07, 0xD0, 0x00, 0x02, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x0C,
60689 +0x00, 0x12, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, 0x00, 0x48, 0x00, 0x60, 0x00, 0x6C, 0x00, 0x28,
60690 +0x00, 0x3C, 0x00, 0x50, 0x00, 0x64, 0x00, 0xA0, 0x00, 0xC8, 0x00, 0xF0, 0x01, 0x18, 0x00, 0x64,
60691 +0x00, 0xA0, 0x00, 0xF0, 0x01, 0x68, 0x01, 0xF4, 0x02, 0x58, 0x03, 0x20, 0x03, 0xE8, 0x02, 0x02,
60692 +0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x07, 0x02, 0x03, 0x04, 0x0A, 0x0C, 0x0E,
60693 +0x10, 0x12, 0x05, 0x07, 0x07, 0x08, 0x0B, 0x12, 0x24, 0x3C, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02,
60694 +0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x05, 0x06,
60695 +0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x20, 0x1E, 0x1C, 0x18, 0x10, 0x18, 0x00, 0x00, 0x00, 0x00,
60696 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
60697 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
60698 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
60699 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
60700 +0xBB, 0x01, 0x0C, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0, 0x22, 0x50,
60701 +0x06, 0xE9, 0x25, 0x82, 0xF8, 0xE6, 0x22, 0xBB, 0xFE, 0x06, 0xE9, 0x25, 0x82, 0xF8, 0xE2, 0x22,
60702 +0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE4, 0x93, 0x22, 0xBB, 0x01, 0x06,
60703 +0x89, 0x82, 0x8A, 0x83, 0xF0, 0x22, 0x50, 0x02, 0xF7, 0x22, 0xBB, 0xFE, 0x01, 0xF3, 0x22, 0xF8,
60704 +0xBB, 0x01, 0x0D, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0x22,
60705 +0x50, 0x06, 0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x22, 0xBB, 0xFE, 0x05, 0xE9, 0x25, 0x82, 0xC8, 0xF2,
60706 +0x22, 0xC5, 0xF0, 0xF8, 0xA3, 0xE0, 0x28, 0xF0, 0xC5, 0xF0, 0xF8, 0xE5, 0x82, 0x15, 0x82, 0x70,
60707 +0x02, 0x15, 0x83, 0xE0, 0x38, 0xF0, 0x22, 0xBB, 0x01, 0x0A, 0x89, 0x82, 0x8A, 0x83, 0xE0, 0xF5,
60708 +0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x06, 0x87, 0xF0, 0x09, 0xE7, 0x19, 0x22, 0xBB, 0xFE, 0x07, 0xE3,
60709 +0xF5, 0xF0, 0x09, 0xE3, 0x19, 0x22, 0x89, 0x82, 0x8A, 0x83, 0xE4, 0x93, 0xF5, 0xF0, 0x74, 0x01,
60710 +0x93, 0x22, 0xBB, 0x01, 0x10, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0,
60711 +0xF5, 0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x09, 0xE9, 0x25, 0x82, 0xF8, 0x86, 0xF0, 0x08, 0xE6, 0x22,
60712 +0xBB, 0xFE, 0x0A, 0xE9, 0x25, 0x82, 0xF8, 0xE2, 0xF5, 0xF0, 0x08, 0xE2, 0x22, 0xE5, 0x83, 0x2A,
60713 +0xF5, 0x83, 0xE9, 0x93, 0xF5, 0xF0, 0xA3, 0xE9, 0x93, 0x22, 0xBB, 0x01, 0x0A, 0x89, 0x82, 0x8A,
60714 +0x83, 0xF0, 0xE5, 0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x06, 0xF7, 0x09, 0xA7, 0xF0, 0x19, 0x22, 0xBB,
60715 +0xFE, 0x06, 0xF3, 0xE5, 0xF0, 0x09, 0xF3, 0x19, 0x22, 0xF8, 0xBB, 0x01, 0x11, 0xE5, 0x82, 0x29,
60716 +0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0xE5, 0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x09,
60717 +0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x08, 0xA6, 0xF0, 0x22, 0xBB, 0xFE, 0x09, 0xE9, 0x25, 0x82, 0xC8,
60718 +0xF2, 0xE5, 0xF0, 0x08, 0xF2, 0x22, 0xEF, 0x4B, 0xFF, 0xEE, 0x4A, 0xFE, 0xED, 0x49, 0xFD, 0xEC,
60719 +0x48, 0xFC, 0x22, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22, 0xA4,
60720 +0x25, 0x82, 0xF5, 0x82, 0xE5, 0xF0, 0x35, 0x83, 0xF5, 0x83, 0x22, 0xE0, 0xFB, 0xA3, 0xE0, 0xFA,
60721 +0xA3, 0xE0, 0xF9, 0x22, 0xF8, 0xE0, 0xFB, 0xA3, 0xA3, 0xE0, 0xF9, 0x25, 0xF0, 0xF0, 0xE5, 0x82,
60722 +0x15, 0x82, 0x70, 0x02, 0x15, 0x83, 0xE0, 0xFA, 0x38, 0xF0, 0x22, 0xEB, 0xF0, 0xA3, 0xEA, 0xF0,
60723 +0xA3, 0xE9, 0xF0, 0x22, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12, 0x74, 0x01, 0x93,
60724 +0x70, 0x0D, 0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83, 0xE4, 0x73, 0x74,
60725 +0x02, 0x93, 0x68, 0x60, 0xEF, 0xA3, 0xA3, 0xA3, 0x80, 0xDF, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4,
60726 +0x93, 0x70, 0x12, 0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5,
60727 +0x82, 0x88, 0x83, 0xE4, 0x73, 0x74, 0x02, 0x93, 0xB5, 0xF0, 0x06, 0x74, 0x03, 0x93, 0x68, 0x60,
60728 +0xE9, 0xA3, 0xA3, 0xA3, 0xA3, 0x80, 0xD8, 0xE4, 0x90, 0x8A, 0xC5, 0xF0, 0xE5, 0x24, 0x70, 0x03,
60729 +0x02, 0x44, 0x9D, 0xE5, 0x21, 0x64, 0x01, 0x60, 0x03, 0x02, 0x44, 0x9D, 0xE5, 0x24, 0x14, 0x60,
60730 +0x29, 0x24, 0xFD, 0x60, 0x25, 0x24, 0x02, 0x24, 0xFB, 0x50, 0x02, 0x80, 0x23, 0x90, 0x8B, 0x0B,
60731 +0xE0, 0x14, 0xF0, 0xE0, 0x60, 0x04, 0xA3, 0xE0, 0x60, 0x16, 0x90, 0x8B, 0x0B, 0xE0, 0x70, 0x0A,
60732 +0x90, 0x8B, 0x19, 0xE0, 0x90, 0x8B, 0x0B, 0xF0, 0x80, 0x00, 0x90, 0x8A, 0xC5, 0x74, 0x01, 0xF0,
60733 +0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x16, 0xA3, 0xE0, 0xB4, 0x06, 0x05, 0xE4, 0x90, 0x8A, 0xC5,
60734 +0xF0, 0xE4, 0xFF, 0x12, 0x4D, 0xE0, 0xEF, 0x70, 0x04, 0x90, 0x8A, 0xC5, 0xF0, 0x90, 0x8A, 0xC5,
60735 +0xE0, 0x60, 0x4A, 0x43, 0x25, 0x10, 0xE4, 0x90, 0x8B, 0x3D, 0xF0, 0x90, 0x8B, 0x0C, 0xE0, 0x75,
60736 +0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x8B, 0x15, 0xE0, 0x2F, 0x90, 0x8B, 0x3E, 0xF0, 0xE4, 0xFB, 0xFD,
60737 +0x7F, 0x54, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x22, 0x54,
60738 +0x0F, 0xC3, 0x94, 0x04, 0x50, 0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x45, 0xA2, 0x90, 0x8B, 0x2C,
60739 +0xE0, 0x30, 0xE0, 0x09, 0x12, 0x7D, 0xC1, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x22, 0xE4, 0xF5,
60740 +0x25, 0xF5, 0x24, 0x75, 0x23, 0x0C, 0x75, 0x22, 0x0C, 0x90, 0x8B, 0x1A, 0xF0, 0x90, 0x8B, 0x18,
60741 +0xF0, 0x90, 0x8B, 0x17, 0xF0, 0x90, 0x8B, 0x19, 0x04, 0xF0, 0x90, 0x8B, 0x0B, 0xF0, 0xE4, 0x90,
60742 +0x8B, 0x1B, 0xF0, 0x90, 0x8B, 0x0D, 0xF0, 0x90, 0x8B, 0x15, 0x74, 0x05, 0xF0, 0xE4, 0x90, 0x8B,
60743 +0x0C, 0xF0, 0x90, 0x8B, 0x13, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90, 0x8B, 0x10, 0xF0, 0xA3, 0x74,
60744 +0x05, 0xF0, 0x90, 0x8B, 0x0F, 0x74, 0x14, 0xF0, 0x90, 0x8B, 0x16, 0x74, 0x05, 0xF0, 0xE4, 0x90,
60745 +0x8B, 0x0E, 0xF0, 0x90, 0x8B, 0x0A, 0xF0, 0x90, 0x8B, 0x08, 0xF0, 0x90, 0x8B, 0x12, 0xF0, 0x22,
60746 +0x7F, 0x00, 0x22, 0x02, 0x45, 0x03, 0x02, 0x45, 0x06, 0x8E, 0x64, 0x8F, 0x65, 0xAD, 0x65, 0xAC,
60747 +0x64, 0xAF, 0x63, 0x12, 0x4A, 0x5B, 0xAF, 0x65, 0xAE, 0x64, 0x90, 0x04, 0x80, 0xE0, 0x54, 0x0F,
60748 +0xFD, 0xAC, 0x07, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x01,
60749 +0xF0, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xFB, 0xF0, 0xAC,
60750 +0x07, 0x74, 0x16, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0xFA, 0xF0, 0x74,
60751 +0x15, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x1F, 0xF0, 0xAC, 0x07, 0x74,
60752 +0x06, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x0F, 0xF0, 0x90, 0x04, 0x53,
60753 +0xE4, 0xF0, 0x90, 0x04, 0x52, 0xF0, 0x90, 0x04, 0x51, 0x74, 0xFF, 0xF0, 0x90, 0x04, 0x50, 0x74,
60754 +0xFD, 0xF0, 0x74, 0x14, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xC0, 0x4D,
60755 +0xFD, 0x74, 0x14, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xED, 0xF0, 0x22, 0x7D, 0x01,
60756 +0x7F, 0x0C, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x67, 0x8D, 0x68, 0xE5, 0x67, 0x54,
60757 +0x0F, 0xFF, 0xE5, 0x22, 0x54, 0x0F, 0x6F, 0x60, 0x72, 0xE5, 0x67, 0x30, 0xE2, 0x30, 0xE5, 0x22,
60758 +0x20, 0xE2, 0x05, 0x7F, 0x01, 0x12, 0x4A, 0xB2, 0xE5, 0x22, 0x30, 0xE3, 0x10, 0xE5, 0x67, 0x20,
60759 +0xE3, 0x0B, 0x12, 0x49, 0xD5, 0xEF, 0x60, 0x53, 0x12, 0x4A, 0xCC, 0x80, 0x4E, 0xE5, 0x22, 0x20,
60760 +0xE3, 0x49, 0xE5, 0x67, 0x30, 0xE3, 0x44, 0xAF, 0x68, 0x12, 0x4A, 0x7C, 0x80, 0x3D, 0xE5, 0x22,
60761 +0x54, 0x0F, 0xFF, 0xBF, 0x0C, 0x0E, 0xE5, 0x67, 0x20, 0xE3, 0x09, 0x12, 0x49, 0xD5, 0xEF, 0x60,
60762 +0x2A, 0x12, 0x4A, 0xCC, 0xE5, 0x22, 0x54, 0x0F, 0xFF, 0xBF, 0x04, 0x0E, 0xE5, 0x67, 0x20, 0xE2,
60763 +0x09, 0x12, 0x49, 0x93, 0xEF, 0x60, 0x14, 0x12, 0x4A, 0x32, 0xE5, 0x22, 0x54, 0x0F, 0xFF, 0xBF,
60764 +0x02, 0x09, 0x12, 0x45, 0x00, 0xEF, 0x60, 0x03, 0x12, 0x4B, 0x10, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
60765 +0x02, 0x46, 0x6E, 0x02, 0x50, 0xC6, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0x40, 0x03, 0xF6,
60766 +0x80, 0x01, 0xF2, 0x08, 0xDF, 0xF4, 0x80, 0x29, 0xE4, 0x93, 0xA3, 0xF8, 0x54, 0x07, 0x24, 0x0C,
60767 +0xC8, 0xC3, 0x33, 0xC4, 0x54, 0x0F, 0x44, 0x20, 0xC8, 0x83, 0x40, 0x04, 0xF4, 0x56, 0x80, 0x01,
60768 +0x46, 0xF6, 0xDF, 0xE4, 0x80, 0x0B, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x90, 0x4B,
60769 +0x23, 0xE4, 0x7E, 0x01, 0x93, 0x60, 0xBC, 0xA3, 0xFF, 0x54, 0x3F, 0x30, 0xE5, 0x09, 0x54, 0x1F,
60770 +0xFE, 0xE4, 0x93, 0xA3, 0x60, 0x01, 0x0E, 0xCF, 0x54, 0xC0, 0x25, 0xE0, 0x60, 0xA8, 0x40, 0xB8,
60771 +0xE4, 0x93, 0xA3, 0xFA, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA,
60772 +0xC5, 0x83, 0xCA, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA, 0xDF, 0xE9, 0xDE,
60773 +0xE7, 0x80, 0xBE, 0xE5, 0x21, 0x64, 0x01, 0x70, 0x67, 0xE5, 0x24, 0x60, 0x63, 0xE5, 0x24, 0x64,
60774 +0x02, 0x60, 0x06, 0xE5, 0x24, 0x64, 0x05, 0x70, 0x27, 0x90, 0x06, 0xAB, 0xE0, 0x90, 0x8B, 0x0B,
60775 +0xF0, 0x90, 0x06, 0xAA, 0xE0, 0x90, 0x8B, 0x19, 0xF0, 0x90, 0x8B, 0x0B, 0xE0, 0x70, 0x07, 0x90,
60776 +0x8B, 0x19, 0xE0, 0xFF, 0x80, 0x05, 0x90, 0x8B, 0x0B, 0xE0, 0xFF, 0x90, 0x8B, 0x0B, 0xEF, 0xF0,
60777 +0x90, 0x8B, 0x0D, 0xE0, 0x60, 0x02, 0xE4, 0xF0, 0xE4, 0x90, 0x8B, 0x0C, 0xF0, 0x90, 0x05, 0x58,
60778 +0x74, 0x03, 0xF0, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x53, 0x25,
60779 +0xFD, 0x53, 0x25, 0xEF, 0xE5, 0x24, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x03, 0x12, 0x47, 0x8E,
60780 +0x22, 0xEF, 0x64, 0x01, 0x70, 0x35, 0x7D, 0x78, 0x7F, 0x02, 0x12, 0x31, 0x2C, 0x7D, 0x02, 0x7F,
60781 +0x03, 0x12, 0x31, 0x2C, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x12,
60782 +0x45, 0x9E, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x03, 0x12, 0x7D, 0xC1, 0x90, 0x06, 0x04, 0xE0,
60783 +0x54, 0x7F, 0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x54, 0xF8, 0xF0, 0x22, 0x90, 0x01, 0x36, 0x74, 0x7B,
60784 +0xF0, 0xA3, 0x74, 0x02, 0xF0, 0x7D, 0x7B, 0xFF, 0x12, 0x31, 0x9D, 0x7D, 0x02, 0x7F, 0x03, 0x12,
60785 +0x31, 0x9D, 0x90, 0x06, 0x04, 0xE0, 0x44, 0x80, 0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x44, 0x07, 0xF0,
60786 +0x12, 0x4B, 0x4F, 0xE5, 0x21, 0x20, 0xE0, 0x05, 0xE4, 0x90, 0x8B, 0x0D, 0xF0, 0x22, 0xE4, 0x90,
60787 +0x8A, 0xC5, 0xF0, 0x90, 0x06, 0xA9, 0xE0, 0x90, 0x8A, 0xC5, 0xF0, 0xE0, 0x54, 0xC0, 0x70, 0x09,
60788 +0x53, 0x25, 0xFE, 0x53, 0x25, 0xFD, 0x12, 0x4A, 0xFC, 0x90, 0x8A, 0xC5, 0xE0, 0x30, 0xE6, 0x15,
60789 +0x43, 0x25, 0x01, 0x90, 0x8B, 0x1A, 0xE0, 0x64, 0x02, 0x60, 0x05, 0x12, 0x4A, 0x97, 0x80, 0x08,
60790 +0x12, 0x49, 0x49, 0x80, 0x03, 0x53, 0x25, 0xFE, 0x90, 0x8A, 0xC5, 0xE0, 0x30, 0xE7, 0x27, 0x43,
60791 +0x25, 0x02, 0xE4, 0x90, 0x8B, 0x3D, 0xF0, 0x90, 0x8B, 0x11, 0xE0, 0x90, 0x8B, 0x3E, 0xF0, 0xE4,
60792 +0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0x90,
60793 +0x8B, 0x1B, 0x74, 0x01, 0xF0, 0x22, 0x53, 0x25, 0xFD, 0x22, 0x90, 0x8A, 0xDE, 0x12, 0x43, 0x8B,
60794 +0x12, 0x4B, 0x43, 0x90, 0x8A, 0xDE, 0x12, 0x43, 0x6B, 0x12, 0x24, 0x62, 0xF5, 0x24, 0x14, 0x60,
60795 +0x0E, 0x14, 0x60, 0x1F, 0x14, 0x60, 0x31, 0x24, 0x03, 0x70, 0x44, 0x7F, 0x01, 0x80, 0x3D, 0x90,
60796 +0x8A, 0xDE, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFD, 0xE4, 0xFF, 0x12, 0x4A,
60797 +0x07, 0x80, 0x29, 0x90, 0x8A, 0xDE, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFD,
60798 +0x7F, 0x01, 0x12, 0x4A, 0x07, 0x1F, 0x80, 0x14, 0x90, 0x8A, 0xDE, 0x12, 0x43, 0x6B, 0x90, 0x00,
60799 +0x02, 0x12, 0x42, 0x20, 0xFD, 0x7F, 0x02, 0x12, 0x4A, 0x07, 0xE4, 0xFF, 0x12, 0x47, 0x21, 0x22,
60800 +0xE4, 0x90, 0x8A, 0xCB, 0xF0, 0xE5, 0x24, 0x60, 0x49, 0x90, 0x8B, 0x1B, 0xE0, 0x60, 0x0D, 0xE4,
60801 +0xF0, 0x53, 0x25, 0xFD, 0xE5, 0x25, 0x54, 0x07, 0x70, 0x38, 0x80, 0x33, 0x90, 0x8B, 0x0C, 0xE0,
60802 +0x04, 0xF0, 0x53, 0x25, 0xEF, 0x90, 0x8A, 0xCB, 0xE0, 0xFF, 0x90, 0x8B, 0x10, 0xE0, 0x2F, 0xFF,
60803 +0xE4, 0x33, 0xFE, 0x90, 0x8B, 0x0C, 0xE0, 0xD3, 0x9F, 0xEE, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98,
60804 +0x40, 0x0D, 0xE5, 0x21, 0xB4, 0x01, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xE0, 0x04, 0xF0, 0x22, 0x12,
60805 +0x4A, 0xFC, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x63, 0x90, 0x04, 0x1D, 0xE0,
60806 +0x60, 0x24, 0x90, 0x05, 0x22, 0xE0, 0xF5, 0x66, 0x74, 0xFF, 0xF0, 0x12, 0x7E, 0x9A, 0xBF, 0x01,
60807 +0x0D, 0x90, 0x8A, 0xF9, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x5F, 0xFD, 0x12, 0x45, 0x09, 0x90, 0x05,
60808 +0x22, 0xE5, 0x66, 0xF0, 0x80, 0x0D, 0x90, 0x8A, 0xF9, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x5F, 0xFD,
60809 +0x12, 0x45, 0x09, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE5, 0x24,
60810 +0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x41, 0x90, 0x8B, 0x1A, 0xE0, 0x60, 0x2B, 0x12, 0x45, 0x9E,
60811 +0xE4, 0x90, 0x8B, 0x3D, 0xF0, 0x90, 0x8B, 0x0F, 0xE0, 0x90, 0x8B, 0x3E, 0xF0, 0xE4, 0xFB, 0xFD,
60812 +0x7F, 0x58, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92,
60813 +0x74, 0x01, 0xF0, 0x90, 0x8B, 0x18, 0xF0, 0x22, 0xE5, 0x22, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50,
60814 +0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x45, 0xA2, 0x22, 0x90, 0x01, 0x5F, 0xE4, 0xF0, 0x90, 0x01,
60815 +0x3C, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0x8B, 0x3D, 0xF0, 0x90, 0x8B, 0x0F, 0xE0, 0x90, 0x8B, 0x3E,
60816 +0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x5C, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x5F, 0x74, 0x05,
60817 +0xF0, 0x90, 0x06, 0x92, 0x74, 0x02, 0xF0, 0x90, 0x8B, 0x17, 0x14, 0xF0, 0xE5, 0x22, 0x54, 0x0F,
60818 +0xC3, 0x94, 0x0C, 0x50, 0x0D, 0x12, 0x45, 0x9E, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x03, 0x12,
60819 +0x7D, 0xC1, 0x22, 0x12, 0x4B, 0x34, 0xEF, 0x64, 0x01, 0x70, 0x37, 0xE5, 0x25, 0x54, 0x03, 0x70,
60820 +0x31, 0xE5, 0x23, 0x54, 0x0F, 0xD3, 0x94, 0x02, 0x50, 0x28, 0xE5, 0x25, 0x20, 0xE2, 0x23, 0xE5,
60821 +0x25, 0x20, 0xE4, 0x1E, 0x90, 0x8B, 0x0D, 0xE0, 0x70, 0x18, 0x90, 0x8B, 0x12, 0xE0, 0x70, 0x12,
60822 +0xE5, 0x26, 0x70, 0x0E, 0x90, 0x01, 0xB9, 0xE4, 0xF0, 0x90, 0x01, 0xB8, 0x74, 0x04, 0xF0, 0x7F,
60823 +0x01, 0x22, 0x7F, 0x00, 0x22, 0x12, 0x4B, 0x34, 0xEF, 0x64, 0x01, 0x70, 0x27, 0x90, 0x8B, 0x18,
60824 +0xE0, 0x70, 0x21, 0x90, 0x8B, 0x17, 0xE0, 0x70, 0x1B, 0xE5, 0x23, 0x54, 0x0F, 0xD3, 0x94, 0x04,
60825 +0x50, 0x12, 0xE5, 0x26, 0x70, 0x0E, 0x90, 0x01, 0xB9, 0xE4, 0xF0, 0x90, 0x01, 0xB8, 0x74, 0x08,
60826 +0xF0, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0xEF, 0x24, 0xFE, 0x60, 0x0B, 0x04, 0x70, 0x22, 0x90,
60827 +0x8B, 0x19, 0x74, 0x01, 0xF0, 0x80, 0x16, 0xED, 0x70, 0x0A, 0x90, 0x8B, 0x16, 0xE0, 0x90, 0x8B,
60828 +0x19, 0xF0, 0x80, 0x05, 0x90, 0x8B, 0x19, 0xED, 0xF0, 0x90, 0x8B, 0x19, 0xE0, 0x90, 0x8B, 0x0B,
60829 +0xF0, 0x22, 0x90, 0x01, 0x37, 0x74, 0x02, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12, 0x7E,
60830 +0x9A, 0xEF, 0x70, 0x06, 0x90, 0x01, 0xC8, 0x74, 0xFD, 0xF0, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x31,
60831 +0x9D, 0x12, 0x7C, 0x50, 0x53, 0x22, 0xF0, 0x43, 0x22, 0x02, 0x22, 0xEF, 0x60, 0x0F, 0x74, 0x21,
60832 +0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x22, 0x74, 0x21, 0x2D,
60833 +0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0x22, 0x90, 0x06, 0x04, 0xE0,
60834 +0x54, 0xBF, 0xF0, 0xEF, 0x60, 0x0A, 0xE5, 0x21, 0xB4, 0x01, 0x05, 0xE4, 0xFF, 0x12, 0x48, 0xB3,
60835 +0x53, 0x22, 0xF0, 0x43, 0x22, 0x0C, 0x22, 0x90, 0x04, 0x1D, 0xE0, 0x70, 0x14, 0x90, 0x8A, 0xF8,
60836 +0xE0, 0xFF, 0xE4, 0xFD, 0x12, 0x5F, 0xFD, 0x8E, 0x69, 0x8F, 0x6A, 0x90, 0x04, 0x1F, 0x74, 0x20,
60837 +0xF0, 0x22, 0x90, 0x8B, 0x52, 0xEF, 0xF0, 0x12, 0x7D, 0x42, 0x90, 0x8B, 0x52, 0xE0, 0x60, 0x05,
60838 +0x90, 0x05, 0x22, 0xE4, 0xF0, 0x53, 0x22, 0xF0, 0x43, 0x22, 0x04, 0x22, 0x90, 0x06, 0x04, 0xE0,
60839 +0x44, 0x40, 0xF0, 0xE5, 0x21, 0xB4, 0x01, 0x05, 0x7F, 0x01, 0x12, 0x48, 0xB3, 0x53, 0x22, 0xF0,
60840 +0x43, 0x22, 0x04, 0x22, 0xE5, 0x23, 0x30, 0xE6, 0x12, 0xE5, 0x23, 0x54, 0x0F, 0xFF, 0x90, 0x01,
60841 +0x2F, 0xE0, 0x54, 0x80, 0x4F, 0x64, 0x80, 0xF0, 0x53, 0x23, 0xBF, 0x22, 0x90, 0x8B, 0x2C, 0xE0,
60842 +0x30, 0xE0, 0x05, 0xAF, 0x23, 0x02, 0x7E, 0x06, 0x7D, 0x01, 0xAF, 0x23, 0x12, 0x45, 0xA2, 0x22,
60843 +0x53, 0x22, 0xF0, 0x43, 0x22, 0x01, 0x12, 0x4B, 0x5A, 0x12, 0x4B, 0x5B, 0x53, 0x22, 0xF0, 0x43,
60844 +0x22, 0x02, 0x22, 0x41, 0x8A, 0xF6, 0x00, 0x41, 0x8B, 0x05, 0x00, 0x41, 0x8B, 0x51, 0x00, 0x41,
60845 +0x8B, 0x53, 0x00, 0x00, 0x90, 0x04, 0x1B, 0xE0, 0x54, 0x7F, 0x64, 0x7F, 0x7F, 0x01, 0x60, 0x02,
60846 +0x7F, 0x00, 0x22, 0xE4, 0x90, 0x8B, 0x1B, 0xF0, 0x90, 0x8B, 0x0C, 0xF0, 0xF5, 0x25, 0x22, 0x90,
60847 +0x8B, 0x13, 0xE0, 0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22, 0x22, 0x22, 0xF0, 0x90, 0x8B, 0x0F,
60848 +0xE0, 0x90, 0x8B, 0x3E, 0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0xD3, 0x10, 0xAF, 0x01,
60849 +0xC3, 0xC0, 0xD0, 0x90, 0x8B, 0x3D, 0xE0, 0xFB, 0xA3, 0xE0, 0xF5, 0x44, 0xE4, 0xF5, 0x45, 0x12,
60850 +0x30, 0x62, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0,
60851 +0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05,
60852 +0xC0, 0x06, 0xC0, 0x07, 0x75, 0x0E, 0x00, 0x90, 0x01, 0xC4, 0x74, 0x87, 0xF0, 0x74, 0x4B, 0xA3,
60853 +0xF0, 0x53, 0x91, 0xDF, 0x90, 0x01, 0x3C, 0xE0, 0x55, 0x30, 0xF5, 0x34, 0xA3, 0xE0, 0x55, 0x31,
60854 +0xF5, 0x35, 0xA3, 0xE0, 0x55, 0x32, 0xF5, 0x36, 0xA3, 0xE0, 0x55, 0x33, 0xF5, 0x37, 0xE5, 0x34,
60855 +0x30, 0xE0, 0x51, 0x90, 0x01, 0x3C, 0x74, 0x01, 0xF0, 0x90, 0x8B, 0x32, 0xE0, 0x30, 0xE0, 0x1F,
60856 +0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x18, 0x90, 0x8B, 0x34, 0xE4, 0xF0, 0x90, 0x8B, 0x33, 0xE0,
60857 +0x64, 0x03, 0x60, 0x0B, 0x7F, 0x01, 0xB1, 0xE0, 0xEF, 0x70, 0x04, 0x7F, 0x02, 0xD1, 0x89, 0x90,
60858 +0x8B, 0x2C, 0xE0, 0xFF, 0x30, 0xE0, 0x1D, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x16, 0x90, 0x8B,
60859 +0x2E, 0xE4, 0xF0, 0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x06, 0x60, 0x09, 0xE4, 0xFF, 0xB1, 0xE0, 0xEF,
60860 +0x70, 0x02, 0xD1, 0x56, 0xE5, 0x34, 0x30, 0xE1, 0x08, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x11,
60861 +0x60, 0xE5, 0x34, 0x30, 0xE2, 0x28, 0x90, 0x01, 0x3C, 0x74, 0x04, 0xF0, 0x90, 0x06, 0x92, 0xE0,
60862 +0x30, 0xE0, 0x14, 0x90, 0x8B, 0x3D, 0xE4, 0x71, 0x5C, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90,
60863 +0x06, 0x92, 0x74, 0x01, 0xF0, 0x80, 0x07, 0x90, 0x8B, 0x18, 0xE4, 0xF0, 0x51, 0xFC, 0xE5, 0x34,
60864 +0x30, 0xE3, 0x38, 0x90, 0x01, 0x3C, 0x74, 0x08, 0xF0, 0x90, 0x06, 0x92, 0xE0, 0x30, 0xE1, 0x24,
60865 +0x90, 0x8B, 0x3D, 0xE4, 0xF0, 0x90, 0x8B, 0x0F, 0xE0, 0x90, 0x8B, 0x3E, 0xF0, 0xE4, 0xFB, 0xFD,
60866 +0x7F, 0x5C, 0x7E, 0x01, 0x71, 0x6C, 0x90, 0x01, 0x5F, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74,
60867 +0x02, 0xF0, 0x80, 0x07, 0x90, 0x8B, 0x17, 0xE4, 0xF0, 0x51, 0xFC, 0xE5, 0x34, 0x30, 0xE4, 0x09,
60868 +0x90, 0x01, 0x3C, 0x74, 0x10, 0xF0, 0x12, 0x51, 0xC9, 0xE5, 0x34, 0x30, 0xE5, 0x06, 0x90, 0x01,
60869 +0x3C, 0x74, 0x20, 0xF0, 0xE5, 0x35, 0x30, 0xE0, 0x10, 0x90, 0x01, 0x3D, 0x74, 0x01, 0xF0, 0x90,
60870 +0x00, 0x83, 0xE0, 0xF5, 0x23, 0x51, 0xE4, 0x51, 0xFC, 0xE5, 0x35, 0x30, 0xE2, 0x06, 0x90, 0x01,
60871 +0x3D, 0x74, 0x04, 0xF0, 0xE5, 0x35, 0x30, 0xE4, 0x1B, 0x90, 0x01, 0x3D, 0x74, 0x10, 0xF0, 0x90,
60872 +0x8B, 0x05, 0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x05,
60873 +0xFD, 0xE0, 0x04, 0xF0, 0xE5, 0x36, 0x30, 0xE0, 0x75, 0x90, 0x01, 0x3E, 0x74, 0x01, 0xF0, 0x90,
60874 +0x8B, 0x32, 0xE0, 0x30, 0xE0, 0x18, 0x90, 0x8B, 0x36, 0xE4, 0xF0, 0x90, 0x8B, 0x33, 0xE0, 0x64,
60875 +0x03, 0x60, 0x0B, 0x7F, 0x01, 0xB1, 0xE0, 0xEF, 0x60, 0x04, 0x7F, 0x01, 0xD1, 0x89, 0x90, 0x8B,
60876 +0x2C, 0xE0, 0x30, 0xE0, 0x49, 0x90, 0x8B, 0x30, 0xE4, 0xF0, 0xFF, 0xB1, 0xE0, 0xEF, 0x60, 0x3E,
60877 +0x12, 0x65, 0x5F, 0x90, 0x8B, 0x2D, 0xE0, 0xFF, 0x64, 0x06, 0x60, 0x32, 0xEF, 0xB4, 0x04, 0x02,
60878 +0x80, 0x07, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05, 0x04, 0xE4, 0xFF, 0x80, 0x14, 0x90, 0x8B, 0x2D,
60879 +0xE0, 0xB4, 0x03, 0x04, 0x7F, 0x01, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x02, 0x05, 0x7F,
60880 +0x01, 0x12, 0x65, 0x82, 0x7D, 0x01, 0xAF, 0x23, 0x12, 0x45, 0xA2, 0x12, 0x7D, 0xC1, 0xE5, 0x36,
60881 +0x30, 0xE1, 0x47, 0x90, 0x01, 0x3E, 0x74, 0x02, 0xF0, 0x90, 0x8B, 0x32, 0xE0, 0x30, 0xE0, 0x19,
60882 +0x90, 0x8B, 0x36, 0x74, 0x01, 0xF0, 0x90, 0x8B, 0x33, 0xE0, 0x64, 0x03, 0x60, 0x0B, 0x7F, 0x01,
60883 +0xB1, 0xE0, 0xEF, 0x70, 0x04, 0x7F, 0x02, 0xD1, 0x89, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x1A,
60884 +0x90, 0x8B, 0x30, 0x74, 0x01, 0xF0, 0x12, 0x7E, 0x2B, 0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x06, 0x60,
60885 +0x09, 0xE4, 0xFF, 0xB1, 0xE0, 0xEF, 0x70, 0x02, 0xD1, 0x56, 0x74, 0x87, 0x04, 0x90, 0x01, 0xC4,
60886 +0xF0, 0x74, 0x4B, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0,
60887 +0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32,
60888 +0xEF, 0x64, 0x01, 0x70, 0x3D, 0x90, 0x8B, 0x35, 0xE0, 0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x8B,
60889 +0x08, 0xE0, 0x60, 0x03, 0x7F, 0x01, 0x22, 0x90, 0x8B, 0x34, 0xE0, 0x60, 0x03, 0x7F, 0x01, 0x22,
60890 +0x90, 0x8B, 0x32, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x0B, 0xEF, 0xC4, 0x13, 0x54,
60891 +0x07, 0x30, 0xE0, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x8B, 0x36, 0xE0, 0x7F, 0x01, 0x60, 0x36, 0x7F,
60892 +0x00, 0x22, 0x90, 0x8B, 0x2F, 0xE0, 0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x8B, 0x08, 0xE0, 0x60,
60893 +0x03, 0x7F, 0x01, 0x22, 0x90, 0x8B, 0x2E, 0xE0, 0x60, 0x03, 0x7F, 0x01, 0x22, 0x90, 0x8B, 0x2C,
60894 +0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x8B, 0x30, 0xE0, 0x7F,
60895 +0x01, 0x60, 0x02, 0x7F, 0x00, 0x22, 0x90, 0x8B, 0x0D, 0xE0, 0x60, 0x16, 0x90, 0x8B, 0x2D, 0xE0,
60896 +0x70, 0x04, 0x7F, 0x05, 0x80, 0x1F, 0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x01, 0x70, 0x1A, 0x7F, 0x02,
60897 +0x80, 0x13, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x01, 0x04, 0x7F, 0x03, 0x80, 0x08, 0x90, 0x8B, 0x2D,
60898 +0xE0, 0x70, 0x05, 0x7F, 0x04, 0x12, 0x65, 0x82, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
60899 +0x90, 0x8B, 0x33, 0xE0, 0x90, 0x8B, 0x55, 0xF0, 0x6F, 0x70, 0x02, 0xE1, 0x55, 0xEF, 0x14, 0x60,
60900 +0x3B, 0x14, 0x60, 0x5F, 0x14, 0x70, 0x02, 0xE1, 0x30, 0x24, 0x03, 0x60, 0x02, 0xE1, 0x55, 0x90,
60901 +0x8B, 0x55, 0xE0, 0xB4, 0x03, 0x04, 0xF1, 0xC2, 0xE1, 0x55, 0x90, 0x8B, 0x55, 0xE0, 0xB4, 0x02,
60902 +0x04, 0xF1, 0xAF, 0xE1, 0x55, 0x90, 0x8B, 0x55, 0xE0, 0xB4, 0x04, 0x04, 0xF1, 0xC6, 0xE1, 0x55,
60903 +0x90, 0x8B, 0x55, 0xE0, 0x64, 0x01, 0x70, 0x7D, 0xF1, 0xB1, 0x80, 0x79, 0x90, 0x8B, 0x55, 0xE0,
60904 +0xFF, 0xB4, 0x03, 0x04, 0xF1, 0xCA, 0x80, 0x6D, 0xEF, 0xB4, 0x02, 0x04, 0xF1, 0xA1, 0x80, 0x65,
60905 +0x90, 0x8B, 0x55, 0xE0, 0xFF, 0xB4, 0x04, 0x04, 0xF1, 0xD5, 0x80, 0x59, 0xEF, 0x70, 0x56, 0xF1,
60906 +0x8E, 0x80, 0x52, 0x90, 0x8B, 0x55, 0xE0, 0xB4, 0x03, 0x05, 0x12, 0x7C, 0x41, 0x80, 0x46, 0x90,
60907 +0x8B, 0x55, 0xE0, 0xB4, 0x01, 0x04, 0xF1, 0x72, 0x80, 0x3B, 0x90, 0x8B, 0x55, 0xE0, 0xB4, 0x04,
60908 +0x05, 0x12, 0x7D, 0x23, 0x80, 0x2F, 0x90, 0x8B, 0x55, 0xE0, 0x70, 0x29, 0xF1, 0x70, 0x80, 0x25,
60909 +0x90, 0x8B, 0x55, 0xE0, 0xFF, 0xB4, 0x01, 0x04, 0xF1, 0x5A, 0x80, 0x19, 0xEF, 0xB4, 0x02, 0x04,
60910 +0xF1, 0x6B, 0x80, 0x11, 0x90, 0x8B, 0x55, 0xE0, 0xFF, 0xB4, 0x04, 0x04, 0xF1, 0x5A, 0x80, 0x05,
60911 +0xEF, 0x70, 0x02, 0xF1, 0x67, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0,
60912 +0x90, 0x8B, 0x33, 0x74, 0x03, 0xF0, 0x22, 0xF1, 0x8E, 0x80, 0xEF, 0x12, 0x7D, 0x42, 0x80, 0xEA,
60913 +0xF1, 0x8E, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12, 0x7E, 0x9A, 0xEF, 0x70, 0x06, 0x90, 0x01,
60914 +0xC8, 0x74, 0xFD, 0xF0, 0x12, 0x7C, 0x50, 0x90, 0x8B, 0x33, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x01,
60915 +0x3E, 0x74, 0x03, 0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x31, 0xB7, 0x90, 0x8B, 0x33, 0x74, 0x01, 0xF0,
60916 +0x22, 0x12, 0x7D, 0x42, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x8B, 0x33, 0x04, 0xF0, 0x22, 0xF1,
60917 +0xA1, 0x7D, 0x03, 0x7F, 0x02, 0x12, 0x31, 0x49, 0x90, 0x05, 0x27, 0xE4, 0xF0, 0x90, 0x8B, 0x33,
60918 +0xF0, 0x22, 0xF1, 0xCA, 0x80, 0xEB, 0xF1, 0xD5, 0x80, 0xE7, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90,
60919 +0x8B, 0x33, 0x04, 0xF0, 0x22, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x8B, 0x33, 0x04, 0xF0, 0x22,
60920 +0xF1, 0x8E, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x8B, 0x33, 0x74, 0x04, 0xF0, 0x22, 0x90,
60921 +0x02, 0x84, 0xEF, 0xF0, 0xA3, 0xEE, 0xF0, 0xA3, 0x74, 0x05, 0xF0, 0x22, 0xEF, 0x8E, 0xF0, 0x12,
60922 +0x43, 0xBA, 0x50, 0x1A, 0x00, 0x40, 0x50, 0x42, 0x00, 0x80, 0x50, 0x6D, 0x01, 0x00, 0x50, 0x81,
60923 +0x02, 0x00, 0x50, 0x99, 0x04, 0x00, 0x00, 0x00, 0x50, 0xB6, 0xED, 0x54, 0x3F, 0x70, 0x04, 0xFE,
60924 +0xFF, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x40, 0xEF, 0x2D, 0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x06,
60925 +0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78, 0x06, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9,
60926 +0x80, 0x26, 0xED, 0x54, 0x7F, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x80, 0xEF,
60927 +0x2D, 0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x07, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78,
60928 +0x07, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFD, 0xAC, 0x06, 0x80, 0x49, 0xED, 0x70, 0x04,
60929 +0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x01, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x7D, 0x00, 0xFC, 0x80,
60930 +0x35, 0xEC, 0x54, 0x01, 0x4D, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x02, 0x7F, 0x00, 0xEF,
60931 +0x2D, 0xEE, 0x3C, 0xC3, 0x13, 0x7D, 0x00, 0x80, 0x1A, 0xEC, 0x54, 0x03, 0x4D, 0x70, 0x04, 0xFE,
60932 +0xFF, 0x80, 0x04, 0x7E, 0x04, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x13, 0x13, 0x54, 0x3F, 0x7D,
60933 +0x00, 0x25, 0xE0, 0x25, 0xE0, 0xFC, 0xAE, 0x04, 0xAF, 0x05, 0x22, 0x90, 0x01, 0xE4, 0x74, 0x58,
60934 +0xF0, 0xA3, 0x74, 0x02, 0xF0, 0x22, 0xE4, 0x90, 0x8A, 0xCC, 0xF0, 0xA3, 0xF0, 0x75, 0x8E, 0x02,
60935 +0x91, 0x0E, 0x12, 0x68, 0x44, 0x90, 0x8B, 0x07, 0xEF, 0xF0, 0x12, 0x68, 0x51, 0x90, 0x8B, 0x09,
60936 +0xEF, 0xF0, 0x12, 0x68, 0x5D, 0x90, 0x8A, 0xF4, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xF5, 0x55,
60937 +0xF5, 0x21, 0x12, 0x72, 0x55, 0x12, 0x44, 0x9E, 0x12, 0x2E, 0x01, 0x7F, 0x03, 0x12, 0x78, 0x42,
60938 +0x12, 0x7C, 0x3D, 0x12, 0x68, 0x0A, 0x12, 0x68, 0x75, 0x12, 0x68, 0x8A, 0x12, 0x68, 0x28, 0x12,
60939 +0x68, 0x43, 0x90, 0x8A, 0xCE, 0xE5, 0xD9, 0xF0, 0x31, 0x5F, 0xC2, 0xAF, 0x90, 0x00, 0x80, 0xE0,
60940 +0x44, 0x40, 0xF0, 0x51, 0x0E, 0x75, 0xE8, 0x03, 0x43, 0xA8, 0x85, 0xD2, 0xAF, 0x11, 0xBB, 0x90,
60941 +0x8A, 0xCC, 0xE0, 0x64, 0x01, 0xF0, 0x24, 0xC6, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x50, 0xA3, 0xF0,
60942 +0xE5, 0x55, 0x30, 0xE4, 0x09, 0xC2, 0xAF, 0x53, 0x55, 0xEF, 0xD2, 0xAF, 0xB1, 0x59, 0xE5, 0x55,
60943 +0x30, 0xE6, 0xDC, 0xC2, 0xAF, 0x53, 0x55, 0xBF, 0xD2, 0xAF, 0x12, 0x6B, 0xBD, 0x80, 0xD0, 0x90,
60944 +0x01, 0x3C, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x34, 0xF0, 0xA3, 0xF0, 0xA3,
60945 +0xF0, 0xA3, 0xF0, 0xFD, 0x7F, 0x54, 0x31, 0x88, 0x7D, 0xFF, 0x7F, 0x55, 0x31, 0x88, 0x7D, 0xFF,
60946 +0x7F, 0x56, 0x31, 0x88, 0x7D, 0xFF, 0x7F, 0x57, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F,
60947 +0x82, 0x75, 0x83, 0x00, 0xED, 0xF0, 0x51, 0x0E, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x01, 0x30,
60948 +0xE4, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x38, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
60949 +0xA3, 0xF0, 0xFD, 0x7F, 0x50, 0x31, 0x88, 0xE4, 0xFD, 0x7F, 0x51, 0x31, 0x88, 0xE4, 0xFD, 0x7F,
60950 +0x52, 0x31, 0x88, 0xE4, 0xFD, 0x7F, 0x53, 0x80, 0xBF, 0xE5, 0x5E, 0x64, 0x01, 0x70, 0x3B, 0x71,
60951 +0x4E, 0xBF, 0x01, 0x04, 0x7F, 0x01, 0x71, 0x42, 0x90, 0x00, 0x46, 0xE0, 0x44, 0x04, 0xFD, 0x7F,
60952 +0x46, 0x31, 0x88, 0x90, 0x00, 0x44, 0xE0, 0x54, 0xFB, 0xFD, 0x7F, 0x44, 0x31, 0x88, 0x90, 0x00,
60953 +0x46, 0xE0, 0x54, 0xFB, 0xFD, 0x7F, 0x46, 0x31, 0x88, 0x7F, 0x02, 0x71, 0x6A, 0x8F, 0x62, 0x90,
60954 +0x01, 0xC9, 0xE5, 0x62, 0xF0, 0xB4, 0x01, 0x02, 0x51, 0xE2, 0x22, 0xE0, 0x5F, 0xF0, 0xD3, 0x10,
60955 +0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F, 0x10, 0xDF, 0xFE, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10,
60956 +0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x8A, 0xE0, 0xED, 0xF0, 0x90, 0x8A, 0xDF, 0xEF, 0xF0, 0xD3,
60957 +0x94, 0x07, 0x50, 0x4E, 0xA3, 0xE0, 0x70, 0x1A, 0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0x74, 0x01, 0xA8,
60958 +0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x47, 0xE0, 0x5F, 0xF0,
60959 +0x80, 0x17, 0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33,
60960 +0xD8, 0xFC, 0xFF, 0x90, 0x00, 0x47, 0xE0, 0x4F, 0xF0, 0x51, 0x0E, 0x90, 0x8A, 0xDF, 0xE0, 0xFF,
60961 +0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x46,
60962 +0x80, 0x59, 0x90, 0x8A, 0xDF, 0xE0, 0x24, 0xF8, 0xF0, 0xA3, 0xE0, 0x70, 0x1D, 0x90, 0x8A, 0xDF,
60963 +0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xC4, 0x54, 0xF0,
60964 +0xF4, 0xFF, 0x90, 0x00, 0x43, 0xE0, 0x5F, 0xF0, 0x80, 0x1A, 0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0x74,
60965 +0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xC4, 0x54, 0xF0, 0xFF, 0x90, 0x00,
60966 +0x43, 0xE0, 0x4F, 0xF0, 0x51, 0x0E, 0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08,
60967 +0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x43, 0x51, 0x0B, 0xD0, 0xD0, 0x92,
60968 +0xAF, 0x22, 0x90, 0x00, 0x49, 0xE0, 0x90, 0x8B, 0x54, 0xF0, 0xE0, 0x54, 0x0F, 0xF0, 0x44, 0xF0,
60969 +0xFD, 0x7F, 0x49, 0x31, 0x88, 0x90, 0x8B, 0x54, 0xE0, 0x44, 0xB0, 0xFD, 0x7F, 0x49, 0x21, 0x88,
60970 +0x90, 0x8A, 0xDD, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x75, 0x5E, 0x01, 0x8E, 0x5F, 0xF5, 0x60, 0xE4,
60971 +0xFD, 0x7F, 0x0B, 0x51, 0x1E, 0xE4, 0xFD, 0x7F, 0x02, 0x51, 0x1E, 0x71, 0x4E, 0xE4, 0xFF, 0x71,
60972 +0x42, 0xE4, 0xF5, 0x62, 0x90, 0x01, 0xC9, 0xE5, 0x62, 0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0xFC, 0xA3,
60973 +0xE0, 0xFD, 0xEC, 0xFB, 0x8D, 0x44, 0xE4, 0xF5, 0x45, 0x7D, 0x01, 0x7F, 0x60, 0x7E, 0x01, 0x02,
60974 +0x30, 0x62, 0x90, 0x01, 0xCA, 0xE5, 0x61, 0xF0, 0xEF, 0x60, 0x02, 0x51, 0xE2, 0x22, 0x7F, 0x0B,
60975 +0x71, 0x6A, 0xEF, 0x65, 0x61, 0x60, 0x10, 0xE5, 0x61, 0xB4, 0x01, 0x05, 0xE4, 0xF5, 0x61, 0x80,
60976 +0x03, 0x75, 0x61, 0x01, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0,
60977 +0xD0, 0x90, 0x8B, 0x57, 0xEF, 0xF0, 0xD3, 0x94, 0x07, 0x50, 0x43, 0xE0, 0xFF, 0x74, 0x01, 0xA8,
60978 +0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x46, 0x51, 0x0B, 0x90,
60979 +0x8B, 0x57, 0xE0, 0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x05, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE,
60980 +0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x00, 0x44, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x5B, 0xA8, 0x05,
60981 +0x08, 0x80, 0x06, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, 0x80, 0x4B, 0x90, 0x8B,
60982 +0x57, 0xE0, 0x24, 0xF8, 0xF0, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33,
60983 +0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x43, 0xE0, 0x5F, 0xF0, 0x51, 0x0E, 0x90, 0x8B, 0x57, 0xE0,
60984 +0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x05, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8,
60985 +0xF9, 0xFF, 0x90, 0x00, 0x42, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x5B, 0xA8, 0x05, 0x08, 0x80, 0x06,
60986 +0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0x90,
60987 +0x8B, 0x04, 0xF0, 0x90, 0x00, 0x80, 0xE0, 0x44, 0x80, 0xFD, 0x7F, 0x80, 0x21, 0x88, 0xD3, 0x10,
60988 +0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x8B, 0x90, 0x8A, 0xDA, 0x12, 0x43,
60989 +0x6B, 0x90, 0x00, 0x01, 0x12, 0x42, 0xC2, 0xFA, 0xE5, 0xF0, 0x24, 0x00, 0xFF, 0xE4, 0x3A, 0xFE,
60990 +0x90, 0x8A, 0xDA, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x01, 0xEE, 0x8F, 0xF0, 0x12, 0x43, 0x19, 0x12,
60991 +0x24, 0x62, 0xFF, 0x60, 0x2C, 0xB5, 0x5E, 0x16, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x6B, 0x90, 0x00,
60992 +0x01, 0x12, 0x42, 0xC2, 0x65, 0x60, 0x70, 0x04, 0xE5, 0x5F, 0x65, 0xF0, 0x60, 0x22, 0x90, 0x8A,
60993 +0xDA, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x01, 0x12, 0x42, 0xC2, 0xFF, 0xAE, 0xF0, 0x71, 0x00, 0x80,
60994 +0x0F, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x6B, 0x12, 0x24, 0x62, 0x65, 0x5E, 0x60, 0x02, 0x91, 0x95,
60995 +0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0xF5, 0x5E, 0x7F, 0x60, 0x7E, 0x01, 0x8F, 0x82, 0x8E, 0x83,
60996 +0xA3, 0xA3, 0xA3, 0xE4, 0xF0, 0x22, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x8B, 0xEF, 0x12, 0x43, 0x94,
60997 +0x54, 0xE7, 0x01, 0x54, 0xDE, 0x02, 0x55, 0x0B, 0x03, 0x55, 0x14, 0x05, 0x55, 0x1D, 0x06, 0x55,
60998 +0x58, 0x07, 0x55, 0x25, 0x08, 0x55, 0x2E, 0x09, 0x55, 0x36, 0x20, 0x55, 0x3F, 0x2C, 0x54, 0xF0,
60999 +0x2D, 0x54, 0xF9, 0x2E, 0x55, 0x02, 0x3B, 0x55, 0x48, 0x4B, 0x00, 0x00, 0x55, 0x51, 0x90, 0x8A,
61000 +0xD7, 0x12, 0x43, 0x6B, 0x02, 0x74, 0x85, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x74, 0x8B,
61001 +0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x74, 0xB8, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02,
61002 +0x75, 0x00, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x75, 0x39, 0x90, 0x8A, 0xD7, 0x12, 0x43,
61003 +0x6B, 0x02, 0x75, 0x52, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x74, 0x0F, 0x90, 0x8A, 0xD7,
61004 +0x12, 0x43, 0x6B, 0xC1, 0xA6, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x75, 0x9A, 0x90, 0x8A,
61005 +0xD7, 0x12, 0x43, 0x6B, 0x81, 0x1E, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x78, 0x81, 0x90,
61006 +0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x7A, 0xC2, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x7C,
61007 +0x2B, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
61008 +0x90, 0x01, 0xCC, 0xE0, 0x54, 0x0F, 0x90, 0x8A, 0xCF, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0xFD, 0x70,
61009 +0x02, 0xC1, 0xA1, 0x90, 0x8B, 0x51, 0xE0, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80,
61010 +0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEF, 0x5D, 0x70, 0x02, 0xC1, 0x9A, 0x90,
61011 +0x8B, 0x51, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD0, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD0,
61012 +0xF0, 0x75, 0x1D, 0x01, 0x75, 0x1E, 0x8A, 0x75, 0x1F, 0xD0, 0x75, 0x20, 0x01, 0x7B, 0x01, 0x7A,
61013 +0x8A, 0x79, 0xD1, 0x12, 0x5E, 0xE4, 0x90, 0x8A, 0xD1, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54,
61014 +0x01, 0x90, 0x8B, 0x51, 0x30, 0xE0, 0x59, 0xE0, 0x75, 0xF0, 0x02, 0x90, 0x00, 0x88, 0x12, 0x43,
61015 +0x5F, 0xE0, 0x90, 0x8A, 0xD2, 0xF0, 0x90, 0x8B, 0x51, 0xE0, 0x75, 0xF0, 0x02, 0x90, 0x00, 0x89,
61016 +0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD3, 0xF0, 0x90, 0x8B, 0x51, 0xE0, 0x75, 0xF0, 0x04, 0x90,
61017 +0x01, 0xD1, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD4, 0xF0, 0x90, 0x8B, 0x51, 0xE0, 0x75, 0xF0,
61018 +0x04, 0x90, 0x01, 0xD2, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD5, 0xF0, 0x90, 0x8B, 0x51, 0xE0,
61019 +0x75, 0xF0, 0x04, 0x90, 0x01, 0xD3, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD6, 0xF0, 0x80, 0x33,
61020 +0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD1, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD2, 0xF0, 0x90,
61021 +0x8B, 0x51, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD2, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD3,
61022 +0xF0, 0x90, 0x8B, 0x51, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD3, 0x12, 0x43, 0x5F, 0xE0, 0x90,
61023 +0x8A, 0xD4, 0xF0, 0xEF, 0x54, 0x7F, 0xFF, 0x7B, 0x01, 0x7A, 0x8A, 0x79, 0xD2, 0x91, 0xA6, 0x90,
61024 +0x8A, 0xCF, 0xE0, 0xFF, 0x90, 0x8B, 0x51, 0xE0, 0xFE, 0x74, 0x01, 0xA8, 0x06, 0x08, 0x80, 0x02,
61025 +0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0x90, 0x8A, 0xCF, 0xF0, 0x90, 0x8B, 0x51, 0xE0, 0xFF, 0x74,
61026 +0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x90, 0x01, 0xCC, 0xF0, 0x90, 0x8B,
61027 +0x51, 0xE0, 0x04, 0xF0, 0xE0, 0x54, 0x03, 0xF0, 0xA1, 0x6A, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x02,
61028 +0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x00, 0x04, 0x12, 0x42, 0x20, 0xFF, 0x54, 0x1F, 0xFE,
61029 +0xEF, 0x54, 0x20, 0xC4, 0x13, 0x54, 0x07, 0xFD, 0xAF, 0x06, 0x90, 0x8A, 0xDA, 0xEF, 0xF0, 0xA3,
61030 +0xED, 0xF0, 0xA3, 0x12, 0x43, 0x8B, 0x90, 0x8A, 0xDC, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x03, 0x12,
61031 +0x42, 0x20, 0x54, 0xF0, 0xC4, 0x54, 0x0F, 0x90, 0x8A, 0xDF, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x42,
61032 +0x20, 0x54, 0x40, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x90, 0x8A, 0xE0, 0xF0, 0x90, 0x8A, 0xDA, 0xE0,
61033 +0xFF, 0x75, 0xF0, 0x09, 0x90, 0x87, 0x25, 0x12, 0x43, 0x5F, 0xAD, 0x82, 0xAC, 0x83, 0x90, 0x8A,
61034 +0xE1, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x75, 0xF0, 0x09, 0xA4, 0x24, 0x23, 0xF9, 0x74, 0x87,
61035 +0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xA3, 0x12, 0x43, 0x8B, 0x90, 0x8A, 0xDC, 0x12, 0x43, 0x6B, 0x90,
61036 +0x00, 0x03, 0x12, 0x42, 0x20, 0x54, 0x0F, 0xFF, 0x90, 0x8A, 0xE3, 0x12, 0x43, 0x6B, 0xEF, 0x12,
61037 +0x42, 0x4D, 0x90, 0x8A, 0xDC, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFF, 0x90,
61038 +0x8A, 0xE3, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x01, 0xEF, 0x12, 0x42, 0x5F, 0x90, 0x8A, 0xDC, 0x12,
61039 +0x43, 0x6B, 0x90, 0x00, 0x01, 0x12, 0x42, 0x20, 0xFF, 0x90, 0x8A, 0xE1, 0xE0, 0xFC, 0xA3, 0xE0,
61040 +0xFD, 0xF5, 0x82, 0x8C, 0x83, 0xEF, 0xF0, 0x12, 0x24, 0x62, 0x8D, 0x82, 0x8C, 0x83, 0xA3, 0xF0,
61041 +0x90, 0x8A, 0xDF, 0xE0, 0xFE, 0x90, 0x8A, 0xDA, 0xE0, 0xFF, 0x24, 0xC1, 0xF5, 0x82, 0xE4, 0x34,
61042 +0x86, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x8A, 0xDB, 0xE0, 0xFE, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x87,
61043 +0x29, 0x12, 0x43, 0x5F, 0xEE, 0xF0, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x87, 0x2A, 0x12, 0x43, 0x5F,
61044 +0x74, 0x01, 0xF0, 0x90, 0x8A, 0xE0, 0xE0, 0xFE, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x87, 0x2B, 0x12,
61045 +0x43, 0x5F, 0xEE, 0xF0, 0x8F, 0x0F, 0xEF, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89,
61046 +0xAF, 0x82, 0xF5, 0x10, 0x8F, 0x11, 0xE5, 0x0F, 0x75, 0xF0, 0x02, 0xA4, 0x24, 0x81, 0xF9, 0x74,
61047 +0x86, 0x35, 0xF0, 0x75, 0x12, 0x01, 0xF5, 0x13, 0x89, 0x14, 0x75, 0xF0, 0x09, 0xE5, 0x0F, 0x90,
61048 +0x87, 0x25, 0x12, 0x43, 0x5F, 0xAF, 0x82, 0x85, 0x83, 0x15, 0x8F, 0x16, 0xE5, 0x0F, 0x75, 0xF0,
61049 +0x09, 0xA4, 0x24, 0x23, 0xF9, 0x74, 0x87, 0x35, 0xF0, 0x75, 0x17, 0x01, 0xF5, 0x18, 0x89, 0x19,
61050 +0x74, 0xC1, 0x25, 0x0F, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0x12, 0x43, 0x94, 0x58,
61051 +0x34, 0x00, 0x58, 0x49, 0x01, 0x58, 0x5E, 0x02, 0x58, 0x73, 0x03, 0x58, 0x9C, 0x04, 0x58, 0xB1,
61052 +0x05, 0x58, 0xC6, 0x06, 0x58, 0xEC, 0x0C, 0x59, 0x19, 0x0D, 0x59, 0x46, 0x0E, 0x59, 0x73, 0x0F,
61053 +0x00, 0x00, 0x59, 0xA7, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5,
61054 +0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x15, 0x80, 0x3C, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5,
61055 +0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x10, 0x80, 0x27, 0xE5, 0x0F,
61056 +0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74,
61057 +0x05, 0x80, 0x12, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83,
61058 +0x74, 0xF0, 0xF0, 0xA3, 0xE4, 0xF0, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34,
61059 +0x86, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0x8F, 0xF0, 0x21, 0xA7, 0xE5, 0x0F, 0x25, 0xE0,
61060 +0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0xF5, 0x80,
61061 +0x27, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0x0F,
61062 +0xF0, 0xA3, 0x74, 0xF0, 0x80, 0x12, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34,
61063 +0x89, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0x74, 0x0D, 0xF0, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0x81, 0xF5,
61064 +0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x21, 0xA7, 0x90, 0x04, 0x47, 0xE0,
61065 +0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x12, 0x42, 0x4D, 0x90, 0x04, 0x46, 0xE0, 0xAB, 0x12, 0xAA,
61066 +0x13, 0xA9, 0x14, 0x90, 0x00, 0x01, 0x12, 0x42, 0x5F, 0x90, 0x04, 0x45, 0xE0, 0x85, 0x11, 0x82,
61067 +0x85, 0x10, 0x83, 0xF0, 0x90, 0x04, 0x44, 0x21, 0x9E, 0x90, 0x04, 0x4B, 0xE0, 0xAB, 0x12, 0xAA,
61068 +0x13, 0xA9, 0x14, 0x12, 0x42, 0x4D, 0x90, 0x04, 0x4A, 0xE0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14,
61069 +0x90, 0x00, 0x01, 0x12, 0x42, 0x5F, 0x90, 0x04, 0x49, 0xE0, 0x85, 0x11, 0x82, 0x85, 0x10, 0x83,
61070 +0xF0, 0x90, 0x04, 0x48, 0x80, 0x58, 0x90, 0x04, 0x4F, 0xE0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14,
61071 +0x12, 0x42, 0x4D, 0x90, 0x04, 0x4E, 0xE0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x90, 0x00, 0x01,
61072 +0x12, 0x42, 0x5F, 0x90, 0x04, 0x4D, 0xE0, 0x85, 0x11, 0x82, 0x85, 0x10, 0x83, 0xF0, 0x90, 0x04,
61073 +0x4C, 0x80, 0x2B, 0x90, 0x04, 0x53, 0xE0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x12, 0x42, 0x4D,
61074 +0x90, 0x04, 0x52, 0xE0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x90, 0x00, 0x01, 0x12, 0x42, 0x5F,
61075 +0x90, 0x04, 0x51, 0xE0, 0x85, 0x11, 0x82, 0x85, 0x10, 0x83, 0xF0, 0x90, 0x04, 0x50, 0xE0, 0x85,
61076 +0x11, 0x82, 0x85, 0x10, 0x83, 0xA3, 0xF0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0xC0, 0x03, 0xC0,
61077 +0x02, 0xC0, 0x01, 0x12, 0x24, 0x62, 0xFF, 0xAB, 0x17, 0xAA, 0x18, 0xA9, 0x19, 0x12, 0x24, 0x62,
61078 +0x5F, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x42, 0x4D, 0xAB, 0x12, 0xE5, 0x14, 0x24, 0x01,
61079 +0xF9, 0xE4, 0x35, 0x13, 0xFA, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x12, 0x24, 0x62, 0xFF, 0xAB,
61080 +0x17, 0xAA, 0x18, 0xA9, 0x19, 0x90, 0x00, 0x01, 0x12, 0x42, 0x20, 0x5F, 0xD0, 0x01, 0xD0, 0x02,
61081 +0xD0, 0x03, 0x12, 0x42, 0x4D, 0x85, 0x11, 0x82, 0x85, 0x10, 0x83, 0xC0, 0x83, 0xC0, 0x82, 0xE0,
61082 +0xFF, 0x85, 0x16, 0x82, 0x85, 0x15, 0x83, 0xE0, 0xFE, 0xEF, 0x5E, 0xD0, 0x82, 0xD0, 0x83, 0xF0,
61083 +0x85, 0x11, 0x82, 0x85, 0x10, 0x83, 0xA3, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFF, 0x85, 0x16, 0x82,
61084 +0x85, 0x15, 0x83, 0xA3, 0xE0, 0xFE, 0xEF, 0x5E, 0xD0, 0x82, 0xD0, 0x83, 0xF0, 0xE5, 0x0F, 0x25,
61085 +0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60,
61086 +0x4B, 0x90, 0x8A, 0xE6, 0x74, 0x0B, 0xF0, 0x90, 0x8A, 0xE6, 0xE0, 0xFF, 0xC3, 0x94, 0x00, 0x50,
61087 +0x02, 0x41, 0xEC, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33,
61088 +0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5,
61089 +0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x0A, 0x90, 0x8A, 0xE6, 0xE0, 0x24, 0x10,
61090 +0xA3, 0xF0, 0x80, 0x68, 0x90, 0x8A, 0xE6, 0xE0, 0x14, 0xF0, 0x80, 0xBB, 0xE5, 0x0F, 0x25, 0xE0,
61091 +0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x47,
61092 +0x90, 0x8A, 0xE6, 0x74, 0x0F, 0xF0, 0x90, 0x8A, 0xE6, 0xE0, 0xFF, 0xC3, 0x94, 0x00, 0x40, 0x3C,
61093 +0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9,
61094 +0xFF, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0x5E,
61095 +0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x08, 0x90, 0x8A, 0xE6, 0xE0, 0xA3, 0xF0, 0x80, 0x0D, 0x90,
61096 +0x8A, 0xE6, 0xE0, 0x14, 0xF0, 0x80, 0xBF, 0xE4, 0x90, 0x8A, 0xE7, 0xF0, 0xE5, 0x0F, 0x25, 0xE0,
61097 +0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x46,
61098 +0xE4, 0x90, 0x8A, 0xE6, 0xF0, 0x90, 0x8A, 0xE6, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x40, 0x02, 0x61,
61099 +0xA5, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8,
61100 +0xF9, 0xFF, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0,
61101 +0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x06, 0x90, 0x8A, 0xE6, 0xE0, 0x80, 0x63, 0x90, 0x8A,
61102 +0xE6, 0xE0, 0x04, 0xF0, 0x80, 0xBF, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34,
61103 +0x86, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x46, 0xE4, 0x90, 0x8A, 0xE6, 0xF0, 0x90,
61104 +0x8A, 0xE6, 0xE0, 0xFF, 0xC3, 0x94, 0x0C, 0x50, 0x3C, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08,
61105 +0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0x81,
61106 +0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x08,
61107 +0x90, 0x8A, 0xE6, 0xE0, 0x24, 0x10, 0x80, 0x09, 0x90, 0x8A, 0xE6, 0xE0, 0x04, 0xF0, 0x80, 0xBF,
61108 +0xE4, 0x90, 0x8A, 0xE8, 0xF0, 0x90, 0x8A, 0xE7, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0xE5, 0x0F, 0x90,
61109 +0x87, 0x27, 0x12, 0x43, 0x5F, 0xEF, 0xF0, 0x90, 0x8A, 0xE8, 0xE0, 0xFE, 0x75, 0xF0, 0x09, 0xE5,
61110 +0x0F, 0x90, 0x87, 0x28, 0x12, 0x43, 0x5F, 0xEE, 0xF0, 0xE5, 0x0F, 0xC3, 0x94, 0x20, 0x50, 0x32,
61111 +0x74, 0x84, 0x25, 0x0F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0xD3, 0x9F, 0x40, 0x02,
61112 +0x80, 0x18, 0x74, 0x84, 0x25, 0x0F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0xC3, 0x9E,
61113 +0x50, 0x08, 0x90, 0x8A, 0xE8, 0xE0, 0xA3, 0xF0, 0x80, 0x08, 0x90, 0x8A, 0xE7, 0xE0, 0x90, 0x8A,
61114 +0xE9, 0xF0, 0x90, 0x8A, 0xE9, 0xE0, 0xFD, 0xAF, 0x0F, 0x91, 0x4E, 0x90, 0x8A, 0xE9, 0xE0, 0xFF,
61115 +0x74, 0x84, 0x25, 0x0F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x8A, 0xE7,
61116 +0xE0, 0xFF, 0xD3, 0x94, 0x13, 0x40, 0x07, 0x90, 0x87, 0x22, 0x74, 0x03, 0xF0, 0x22, 0xEF, 0xD3,
61117 +0x94, 0x0B, 0x40, 0x07, 0x90, 0x87, 0x22, 0x74, 0x02, 0xF0, 0x22, 0xEF, 0xD3, 0x94, 0x03, 0x40,
61118 +0x07, 0x90, 0x87, 0x22, 0x74, 0x01, 0xF0, 0x22, 0xE4, 0x90, 0x87, 0x22, 0xF0, 0x22, 0xD3, 0x10,
61119 +0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x74, 0x84, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xED,
61120 +0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xAC, 0x07, 0xED, 0x54, 0x1F, 0x90, 0x8A, 0xC7, 0xF0, 0x74,
61121 +0x01, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0x90, 0x8A, 0xC5, 0xF0, 0x90, 0x8A,
61122 +0xC8, 0x74, 0x01, 0xF0, 0xEB, 0xC3, 0x94, 0x01, 0x40, 0x02, 0x80, 0x37, 0x90, 0x8A, 0xC5, 0xE0,
61123 +0x25, 0x0D, 0xFF, 0xA3, 0xF0, 0xA3, 0xE0, 0x90, 0x41, 0x9E, 0x93, 0xFE, 0xEF, 0xD3, 0x9E, 0x40,
61124 +0x10, 0x74, 0x01, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE4, 0xF0, 0xAF, 0x04, 0x80,
61125 +0x9D, 0x90, 0x8A, 0xC6, 0xE0, 0xFF, 0x74, 0x01, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83,
61126 +0xEF, 0xF0, 0x22, 0xAD, 0x07, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x27, 0x12, 0x43, 0x5F, 0xE0,
61127 +0xFF, 0x90, 0x8A, 0xCA, 0xF0, 0x74, 0xA5, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0,
61128 +0x54, 0x1F, 0x90, 0x8A, 0xC9, 0xF0, 0xD3, 0x9F, 0x40, 0x06, 0xA3, 0xE0, 0x90, 0x8A, 0xC9, 0xF0,
61129 +0x90, 0x8A, 0xC9, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83,
61130 +0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34,
61131 +0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13,
61132 +0xFF, 0xED, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xEE, 0xF0, 0xA3,
61133 +0xEF, 0xF0, 0xAF, 0x05, 0x90, 0x8A, 0xC9, 0xE0, 0xFD, 0x91, 0x4E, 0x90, 0x8A, 0xC9, 0xE0, 0xFF,
61134 +0x22, 0xAC, 0x07, 0x74, 0x84, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x7F,
61135 +0x90, 0x8A, 0xDE, 0xF0, 0xE0, 0x54, 0x1F, 0xFF, 0x90, 0x8A, 0xE1, 0xF0, 0x75, 0xF0, 0x09, 0xEC,
61136 +0x90, 0x87, 0x28, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xE3, 0xF0, 0x75, 0xF0, 0x09, 0xEC, 0x90,
61137 +0x87, 0x27, 0x12, 0x43, 0x5F, 0xE0, 0xFE, 0x90, 0x8A, 0xE4, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0xE4,
61138 +0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x8A, 0xE5, 0xCB, 0xF0,
61139 +0xA3, 0xEB, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0,
61140 +0xFB, 0xA3, 0xE0, 0x90, 0x8A, 0xE7, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0xEF, 0xD3, 0x9E, 0x40, 0x0C,
61141 +0x90, 0x8A, 0xE4, 0xE0, 0x90, 0x8A, 0xE1, 0xF0, 0x90, 0x8A, 0xDE, 0xF0, 0xED, 0x70, 0x02, 0xC1,
61142 +0x93, 0x90, 0x8A, 0xE2, 0xED, 0xF0, 0x90, 0x8A, 0xDE, 0xE0, 0x30, 0xE6, 0x0E, 0x90, 0x8A, 0xE1,
61143 +0xE0, 0x90, 0x8A, 0xDE, 0xF0, 0x90, 0x8A, 0xE2, 0xE0, 0x14, 0xF0, 0x90, 0x8A, 0xE2, 0xE0, 0x70,
61144 +0x02, 0xC1, 0x93, 0x90, 0x8A, 0xE1, 0xE0, 0xFF, 0xD3, 0x94, 0x00, 0x50, 0x02, 0xC1, 0x93, 0xE4,
61145 +0x90, 0x8A, 0xE0, 0xF0, 0xEF, 0x14, 0x90, 0x8A, 0xDF, 0xF0, 0x90, 0x8A, 0xE3, 0xE0, 0xFD, 0x90,
61146 +0x8A, 0xDF, 0xE0, 0xFF, 0xD3, 0x9D, 0x40, 0x6F, 0xEF, 0x94, 0x10, 0x40, 0x21, 0xEF, 0x24, 0xF0,
61147 +0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8,
61148 +0xF9, 0xFF, 0x90, 0x8A, 0xE7, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x70, 0x27, 0x90, 0x8A,
61149 +0xDF, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x37, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80,
61150 +0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x8A, 0xE5, 0xE0, 0x5E, 0xFE, 0xA3,
61151 +0xE0, 0x5F, 0x4E, 0x60, 0x1A, 0x90, 0x8A, 0xDF, 0xE0, 0x90, 0x8A, 0xDE, 0xF0, 0x90, 0x8A, 0xE0,
61152 +0xE0, 0x04, 0xF0, 0x90, 0x8A, 0xE2, 0xE0, 0xFF, 0x90, 0x8A, 0xE0, 0xE0, 0x6F, 0x60, 0x08, 0x90,
61153 +0x8A, 0xDF, 0xE0, 0x14, 0xF0, 0x80, 0x83, 0x90, 0x8A, 0xE2, 0xE0, 0xFF, 0x90, 0x8A, 0xE0, 0xE0,
61154 +0xC3, 0x9F, 0x50, 0x0F, 0x90, 0x8A, 0xDF, 0xE0, 0xB5, 0x05, 0x08, 0x90, 0x8A, 0xE3, 0xE0, 0x90,
61155 +0x8A, 0xDE, 0xF0, 0x90, 0x8A, 0xDE, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34,
61156 +0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x2E, 0xF5,
61157 +0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13,
61158 +0xFE, 0xEF, 0x13, 0xFF, 0xEC, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83,
61159 +0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0x04, 0x90, 0x8A, 0xDE, 0xE0, 0xFD, 0x91, 0x4E, 0x90, 0x8A,
61160 +0xDE, 0xE0, 0xFF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8B, 0x1A, 0x8A, 0x1B, 0x89,
61161 +0x1C, 0x90, 0x8B, 0x3F, 0x12, 0x43, 0x8B, 0xAB, 0x1D, 0xAA, 0x1E, 0xA9, 0x1F, 0x90, 0x8B, 0x42,
61162 +0x12, 0x43, 0x8B, 0xAF, 0x20, 0x15, 0x20, 0xEF, 0x60, 0x1E, 0x90, 0x8B, 0x42, 0xE4, 0x75, 0xF0,
61163 +0x01, 0x12, 0x43, 0x74, 0x12, 0x24, 0x62, 0xFF, 0x90, 0x8B, 0x3F, 0xE4, 0x75, 0xF0, 0x01, 0x12,
61164 +0x43, 0x74, 0xEF, 0x12, 0x42, 0x4D, 0x80, 0xDB, 0xAB, 0x1A, 0xAA, 0x1B, 0xA9, 0x1C, 0xD0, 0xD0,
61165 +0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x8B, 0x45, 0x12, 0x43, 0x8B,
61166 +0x90, 0x8B, 0x53, 0xE0, 0xFF, 0x04, 0xF0, 0x90, 0x00, 0x01, 0xEF, 0x12, 0x42, 0x5F, 0x7F, 0xAF,
61167 +0x7E, 0x01, 0x12, 0x74, 0x3B, 0xEF, 0x60, 0x47, 0x90, 0x8B, 0x45, 0x12, 0x43, 0x6B, 0x8B, 0x1D,
61168 +0x8A, 0x1E, 0x89, 0x1F, 0x75, 0x20, 0x02, 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA0, 0xD1, 0xE4, 0x90,
61169 +0x8B, 0x48, 0x12, 0x43, 0x6B, 0x8B, 0x1D, 0x8A, 0x1E, 0x89, 0x1F, 0x90, 0x8B, 0x45, 0x12, 0x43,
61170 +0x6B, 0x12, 0x24, 0x62, 0xFF, 0xC4, 0x54, 0x0F, 0xF5, 0x20, 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA2,
61171 +0xD1, 0xE4, 0x90, 0x01, 0xAF, 0x74, 0xFF, 0xF0, 0x90, 0x01, 0xCB, 0xE0, 0x64, 0x80, 0xF0, 0xD0,
61172 +0xD0, 0x92, 0xAF, 0x22, 0x90, 0x8A, 0xC5, 0xE0, 0x54, 0xF0, 0x44, 0x03, 0xF0, 0x54, 0x0F, 0x44,
61173 +0x80, 0xF0, 0x7B, 0x00, 0x7A, 0x00, 0x79, 0x56, 0x90, 0x8B, 0x48, 0x12, 0x43, 0x8B, 0x0B, 0x7A,
61174 +0x8A, 0x79, 0xC5, 0xE1, 0x33, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x01, 0xC4, 0x74,
61175 +0xC5, 0xF0, 0x74, 0x5F, 0xA3, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x1A, 0x90, 0x05, 0x22, 0xE0,
61176 +0x54, 0x90, 0x60, 0x07, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x01, 0xC7, 0xE0, 0x30,
61177 +0xE1, 0xE4, 0x7F, 0x00, 0x80, 0x02, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF,
61178 +0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFB, 0xFA, 0xEF, 0x30, 0xE0, 0x02, 0x7B, 0x80, 0xEF, 0xC3, 0x13,
61179 +0x90, 0xFD, 0x10, 0xF0, 0x90, 0x04, 0x25, 0xEF, 0xF0, 0xED, 0x60, 0x1E, 0xAF, 0x03, 0x74, 0x0F,
61180 +0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0x74, 0x10, 0x2F, 0xF5,
61181 +0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0xAF, 0x03, 0x74, 0x08, 0x2F, 0xF5,
61182 +0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x09, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
61183 +0xF5, 0x83, 0xE0, 0x54, 0xF0, 0xF0, 0x74, 0x21, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83,
61184 +0xE0, 0x54, 0xF7, 0xF0, 0xAE, 0x02, 0xAF, 0x03, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x5F, 0xC5,
61185 +0xBF, 0x01, 0x10, 0x90, 0x02, 0x09, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x5F, 0xFD, 0x90, 0x04, 0x1F,
61186 +0x74, 0x20, 0xF0, 0x22, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0xFF, 0xE0, 0x54, 0x0C, 0x13, 0x13,
61187 +0x54, 0x3F, 0xFE, 0xEF, 0x64, 0x01, 0x60, 0x04, 0xEF, 0xB4, 0x03, 0x0E, 0x90, 0x8A, 0xC5, 0x74,
61188 +0x01, 0xF0, 0xA3, 0x74, 0x37, 0xF0, 0x79, 0x01, 0x80, 0x18, 0xEE, 0x64, 0x01, 0x60, 0x07, 0xAF,
61189 +0x06, 0xEE, 0x64, 0x03, 0x70, 0x3B, 0x90, 0x8A, 0xC5, 0x74, 0x01, 0xF0, 0xA3, 0x74, 0x3D, 0xF0,
61190 +0x79, 0x40, 0x90, 0x8A, 0xC5, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xF5, 0x82, 0x8E, 0x83, 0xE0, 0x59,
61191 +0x60, 0x08, 0xE9, 0xF0, 0xE4, 0x90, 0x8A, 0xF6, 0xF0, 0x22, 0x90, 0x8A, 0xF6, 0xE0, 0x04, 0xF0,
61192 +0xE0, 0xC3, 0x94, 0x0A, 0x40, 0x0B, 0xE4, 0xF0, 0x90, 0x04, 0x19, 0xE0, 0x30, 0xE0, 0x02, 0x11,
61193 +0x6D, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0,
61194 +0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90,
61195 +0x01, 0xC4, 0x74, 0xF2, 0xF0, 0x74, 0x60, 0xA3, 0xF0, 0x90, 0x01, 0x34, 0xE0, 0x55, 0x28, 0xF5,
61196 +0x2C, 0xA3, 0xE0, 0x55, 0x29, 0xF5, 0x2D, 0xA3, 0xE0, 0x55, 0x2A, 0xF5, 0x2E, 0xA3, 0xE0, 0x55,
61197 +0x2B, 0xF5, 0x2F, 0xE5, 0x2C, 0x20, 0xE0, 0x02, 0x41, 0x89, 0x90, 0x01, 0x34, 0x74, 0x01, 0xF0,
61198 +0x85, 0xD1, 0x4D, 0x85, 0xD2, 0x4E, 0x85, 0xD3, 0x4F, 0x85, 0xD4, 0x50, 0x85, 0xD5, 0x51, 0x85,
61199 +0xD6, 0x52, 0x85, 0xD7, 0x53, 0x85, 0xD9, 0x54, 0xE5, 0x54, 0x54, 0x40, 0xC3, 0x13, 0xFF, 0xE5,
61200 +0x53, 0x54, 0x20, 0x6F, 0x70, 0x02, 0x41, 0x46, 0xE5, 0x54, 0x30, 0xE5, 0x02, 0x41, 0x46, 0xE5,
61201 +0x52, 0x54, 0x1F, 0xF5, 0x08, 0xE5, 0x4D, 0x54, 0x3F, 0xF5, 0x09, 0xE5, 0x51, 0x54, 0x1F, 0xFF,
61202 +0xE5, 0x08, 0x25, 0xE0, 0x24, 0xE3, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0x8F, 0xF0,
61203 +0x12, 0x42, 0x81, 0xE5, 0x53, 0x54, 0x1F, 0xFF, 0xE5, 0x08, 0x25, 0xE0, 0x24, 0xC0, 0xF5, 0x82,
61204 +0xE4, 0x34, 0x85, 0xF5, 0x83, 0xE4, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0xE5, 0x09, 0xD3, 0x94, 0x04,
61205 +0x40, 0x03, 0x75, 0x09, 0x04, 0x75, 0xF0, 0x0A, 0xE5, 0x08, 0x90, 0x84, 0x00, 0x12, 0x43, 0x5F,
61206 +0x75, 0xF0, 0x02, 0xE5, 0x09, 0x12, 0x43, 0x5F, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xE5, 0x53, 0x54,
61207 +0x1F, 0x2F, 0xFF, 0xE4, 0x3E, 0xFE, 0x75, 0xF0, 0x0A, 0xE5, 0x08, 0x90, 0x84, 0x00, 0x12, 0x43,
61208 +0x5F, 0x75, 0xF0, 0x02, 0xE5, 0x09, 0x12, 0x43, 0x5F, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE5, 0x54,
61209 +0x20, 0xE6, 0x24, 0xE5, 0x53, 0x54, 0x1F, 0xFF, 0xE5, 0x08, 0x25, 0xE0, 0x24, 0x63, 0xF5, 0x82,
61210 +0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0xE5, 0x4F, 0x30, 0xE7, 0x36,
61211 +0xAF, 0x08, 0x12, 0x5C, 0xC3, 0x80, 0x2F, 0xE5, 0x53, 0x54, 0x1F, 0xFF, 0xE5, 0x08, 0x25, 0xE0,
61212 +0x24, 0xA3, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0xE5,
61213 +0x4F, 0x30, 0xE7, 0x12, 0xE5, 0x4F, 0x54, 0x7F, 0xFD, 0xE5, 0x53, 0x54, 0x1F, 0xF5, 0x0D, 0xAB,
61214 +0x09, 0xAF, 0x08, 0x12, 0x5C, 0x66, 0xE5, 0x24, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x3A, 0x90,
61215 +0x8B, 0x1A, 0xE0, 0x60, 0x2B, 0x90, 0x01, 0x5B, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x04, 0xF0,
61216 +0x12, 0x4B, 0x34, 0xEF, 0x64, 0x01, 0x70, 0x21, 0x90, 0x8B, 0x3D, 0x12, 0x4B, 0x5C, 0x90, 0x01,
61217 +0x5B, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0, 0x90, 0x8B, 0x18, 0xF0, 0x80, 0x09,
61218 +0x12, 0x4B, 0x34, 0xBF, 0x01, 0x03, 0x12, 0x4A, 0xFC, 0xE5, 0x2C, 0x30, 0xE1, 0x21, 0x90, 0x01,
61219 +0x34, 0x74, 0x02, 0xF0, 0x85, 0xD1, 0x56, 0x85, 0xD2, 0x57, 0x85, 0xD3, 0x58, 0x85, 0xD4, 0x59,
61220 +0x85, 0xD5, 0x5A, 0x85, 0xD6, 0x5B, 0x85, 0xD7, 0x5C, 0x85, 0xD9, 0x5D, 0x12, 0x5F, 0xA4, 0xE5,
61221 +0x2C, 0x30, 0xE3, 0x06, 0x90, 0x01, 0x34, 0x74, 0x08, 0xF0, 0xE5, 0x2C, 0x30, 0xE4, 0x09, 0x90,
61222 +0x01, 0x34, 0x74, 0x10, 0xF0, 0x43, 0x55, 0x10, 0xE5, 0x2C, 0x30, 0xE5, 0x26, 0x90, 0x01, 0xCF,
61223 +0xE0, 0x30, 0xE5, 0x1F, 0xE0, 0x54, 0xDF, 0xF0, 0x90, 0x01, 0x34, 0x74, 0x20, 0xF0, 0x75, 0xA8,
61224 +0x00, 0x75, 0xE8, 0x00, 0x12, 0x51, 0x9D, 0x90, 0x00, 0x03, 0xE0, 0x54, 0xFB, 0xF0, 0x12, 0x52,
61225 +0x0E, 0x80, 0xFE, 0xE5, 0x2C, 0x30, 0xE6, 0x2D, 0x90, 0x01, 0x34, 0x74, 0x40, 0xF0, 0x90, 0x8B,
61226 +0x32, 0xE0, 0x30, 0xE0, 0x0C, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x05, 0x90, 0x8B, 0x34, 0xE4,
61227 +0xF0, 0x90, 0x8B, 0x2C, 0xE0, 0xFF, 0x30, 0xE0, 0x0C, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x05,
61228 +0x90, 0x8B, 0x2E, 0xE4, 0xF0, 0xE5, 0x2E, 0x20, 0xE0, 0x02, 0x61, 0xE6, 0x90, 0x8B, 0x08, 0x74,
61229 +0x01, 0xF0, 0x90, 0x01, 0x36, 0xF0, 0x90, 0x8B, 0x06, 0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90, 0x05,
61230 +0x53, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x05, 0xFC, 0xE0, 0x04, 0xF0, 0x90, 0x8B, 0x32, 0xE0, 0x30,
61231 +0xE0, 0x2F, 0x90, 0x8B, 0x37, 0x74, 0x01, 0xF0, 0x90, 0x8B, 0x32, 0xE0, 0xFF, 0x13, 0x13, 0x54,
61232 +0x3F, 0x30, 0xE0, 0x1D, 0x90, 0x8B, 0x34, 0x74, 0x01, 0xF0, 0xB1, 0x39, 0x90, 0x8B, 0x33, 0xE0,
61233 +0x64, 0x03, 0x60, 0x0D, 0x7F, 0x01, 0x12, 0x4D, 0xE0, 0xEF, 0x60, 0x05, 0x7F, 0x04, 0x12, 0x4E,
61234 +0x89, 0x90, 0x8B, 0x2C, 0xE0, 0xFF, 0x30, 0xE0, 0x55, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x4E,
61235 +0x90, 0x8B, 0x2E, 0x74, 0x01, 0xF0, 0xB1, 0x39, 0xE4, 0xFF, 0x12, 0x4D, 0xE0, 0xEF, 0x60, 0x3E,
61236 +0xB1, 0x5F, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x8B, 0x2D, 0xE0, 0xFF, 0x64, 0x06, 0x60,
61237 +0x2D, 0xEF, 0xB4, 0x04, 0x02, 0x80, 0x07, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05, 0x04, 0xE4, 0xFF,
61238 +0x80, 0x14, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x03, 0x04, 0x7F, 0x01, 0x80, 0x09, 0x90, 0x8B, 0x2D,
61239 +0xE0, 0xB4, 0x02, 0x04, 0x7F, 0x01, 0xB1, 0x82, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12, 0x43,
61240 +0xE7, 0x90, 0x8B, 0x08, 0xE4, 0xF0, 0xE5, 0x2E, 0x30, 0xE1, 0x2F, 0x90, 0x01, 0x36, 0x74, 0x02,
61241 +0xF0, 0x43, 0x55, 0x40, 0x11, 0x84, 0x90, 0x8B, 0x37, 0xE0, 0xB4, 0x01, 0x09, 0x90, 0x05, 0x22,
61242 +0xE4, 0xF0, 0x90, 0x8B, 0x37, 0xF0, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x0D, 0xE4, 0xFF, 0x12,
61243 +0x4D, 0xE0, 0xEF, 0x60, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0xE5, 0x2E, 0x30, 0xE2, 0x16, 0x90,
61244 +0x01, 0x36, 0x74, 0x04, 0xF0, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x06, 0xA3, 0xE0, 0x64, 0x06,
61245 +0x60, 0x03, 0x12, 0x46, 0xB3, 0xE5, 0x2E, 0x30, 0xE3, 0x38, 0x90, 0x01, 0x36, 0x74, 0x08, 0xF0,
61246 +0xE5, 0x21, 0x64, 0x01, 0x70, 0x2C, 0xE5, 0x24, 0x60, 0x28, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90,
61247 +0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90, 0x8B, 0x3D, 0xE4, 0xF0, 0x90, 0x8B, 0x11, 0xE0, 0x90, 0x8B,
61248 +0x3E, 0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x57, 0x74,
61249 +0x05, 0xF0, 0xE5, 0x2E, 0x30, 0xE4, 0x2B, 0x90, 0x01, 0x36, 0x74, 0x10, 0xF0, 0xE5, 0x21, 0xB4,
61250 +0x01, 0x20, 0xE5, 0x24, 0x60, 0x1C, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02,
61251 +0xF0, 0x90, 0x8B, 0x1B, 0xE4, 0xF0, 0x53, 0x25, 0xFD, 0xE5, 0x25, 0x54, 0x07, 0x70, 0x03, 0x12,
61252 +0x4A, 0xFC, 0xE5, 0x2E, 0x30, 0xE5, 0x1F, 0x90, 0x01, 0x36, 0x74, 0x20, 0xF0, 0xE5, 0x21, 0xB4,
61253 +0x01, 0x14, 0xE5, 0x24, 0x60, 0x10, 0x90, 0x8B, 0x1A, 0xE0, 0x64, 0x02, 0x60, 0x05, 0x12, 0x4A,
61254 +0x97, 0x80, 0x03, 0x12, 0x49, 0x49, 0xE5, 0x2E, 0x30, 0xE6, 0x1B, 0x90, 0x01, 0x36, 0x74, 0x40,
61255 +0xF0, 0xE5, 0x21, 0xB4, 0x01, 0x10, 0xE5, 0x24, 0x60, 0x0C, 0x53, 0x25, 0xFE, 0xE5, 0x25, 0x54,
61256 +0x07, 0x70, 0x03, 0x12, 0x4A, 0xFC, 0xE5, 0x2F, 0x30, 0xE1, 0x28, 0x90, 0x01, 0x37, 0x74, 0x02,
61257 +0xF0, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x18, 0xE4, 0xFF, 0x12, 0x4D, 0xE0, 0xEF, 0x60, 0x08,
61258 +0x12, 0x48, 0xFE, 0x12, 0x7D, 0xC1, 0x80, 0x0B, 0x90, 0x8B, 0x31, 0x74, 0x01, 0xF0, 0x80, 0x03,
61259 +0x12, 0x48, 0xFE, 0x74, 0xF2, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x60, 0xA3, 0xF0, 0xD0, 0x07,
61260 +0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0,
61261 +0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0xE4, 0x90, 0x8B, 0x3D, 0xF0, 0x90, 0x05,
61262 +0x58, 0xE0, 0xFF, 0x90, 0x8B, 0x38, 0xE0, 0x2F, 0x24, 0xFE, 0x90, 0x8B, 0x3E, 0xF0, 0xE4, 0xFB,
61263 +0xFD, 0x7F, 0x50, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x53, 0x74, 0x05, 0xF0, 0x22, 0x90,
61264 +0x8B, 0x2C, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x0A, 0xA3, 0xE0, 0x64, 0x06,
61265 +0x60, 0x04, 0x7F, 0x06, 0xB1, 0x82, 0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x06, 0x60, 0x03, 0x12, 0x78,
61266 +0x35, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x8B, 0x2D, 0xE0, 0xFE, 0x6F, 0x70,
61267 +0x02, 0xE1, 0x4E, 0xEF, 0x12, 0x43, 0x94, 0x65, 0xB0, 0x00, 0x65, 0xEA, 0x01, 0x66, 0x30, 0x02,
61268 +0x66, 0x6A, 0x03, 0x66, 0xA2, 0x04, 0x66, 0xDB, 0x05, 0x67, 0x16, 0x06, 0x00, 0x00, 0x67, 0x4E,
61269 +0xEE, 0xB4, 0x04, 0x06, 0x7F, 0x01, 0xF1, 0x81, 0xE1, 0x4E, 0x90, 0x8B, 0x2D, 0xE0, 0xFF, 0xB4,
61270 +0x05, 0x04, 0xF1, 0x5D, 0xE1, 0x4E, 0xEF, 0xB4, 0x06, 0x06, 0x7F, 0x01, 0xF1, 0x72, 0x80, 0x16,
61271 +0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x03, 0x06, 0x7F, 0x01, 0xF1, 0x53, 0x80, 0x09, 0x90, 0x8B, 0x2D,
61272 +0xE0, 0xB4, 0x02, 0x02, 0xF1, 0x67, 0xF1, 0xA4, 0xE1, 0x4E, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x04,
61273 +0x06, 0x7F, 0x01, 0xF1, 0x81, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05, 0x02, 0xF1, 0x5D,
61274 +0x90, 0x8B, 0x2D, 0xE0, 0x70, 0x04, 0xF1, 0x9A, 0xE1, 0x4E, 0x90, 0x8B, 0x2D, 0xE0, 0xFE, 0xB4,
61275 +0x06, 0x06, 0x7F, 0x01, 0xF1, 0x72, 0xE1, 0x4E, 0xEE, 0xB4, 0x03, 0x06, 0x7F, 0x01, 0xF1, 0x53,
61276 +0xE1, 0x4E, 0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x02, 0x60, 0x02, 0xE1, 0x4E, 0xF1, 0x67, 0xE1, 0x4E,
61277 +0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x04, 0x06, 0x7F, 0x01, 0xF1, 0x81, 0x80, 0x09, 0x90, 0x8B, 0x2D,
61278 +0xE0, 0xB4, 0x05, 0x02, 0xF1, 0x5D, 0x90, 0x8B, 0x2D, 0xE0, 0x70, 0x04, 0xF1, 0x9A, 0x80, 0x16,
61279 +0x90, 0x8B, 0x2D, 0xE0, 0xFE, 0xB4, 0x06, 0x06, 0x7F, 0x01, 0xF1, 0x72, 0x80, 0x08, 0xEE, 0xB4,
61280 +0x03, 0x04, 0x7F, 0x01, 0xF1, 0x53, 0xF1, 0xD0, 0xE1, 0x4E, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x04,
61281 +0x06, 0x7F, 0x01, 0xF1, 0x81, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05, 0x02, 0xF1, 0x5D,
61282 +0x90, 0x8B, 0x2D, 0xE0, 0x70, 0x04, 0xF1, 0x9A, 0x80, 0x14, 0x90, 0x8B, 0x2D, 0xE0, 0xFE, 0xB4,
61283 +0x06, 0x06, 0xE4, 0xFF, 0xF1, 0x72, 0x80, 0x06, 0xEE, 0xB4, 0x02, 0x02, 0xF1, 0x67, 0xF1, 0xB9,
61284 +0xE1, 0x4E, 0x90, 0x8B, 0x2D, 0xE0, 0xFE, 0xB4, 0x06, 0x06, 0xE4, 0xFF, 0xF1, 0x72, 0x80, 0x13,
61285 +0xEE, 0xB4, 0x03, 0x06, 0x7F, 0x01, 0xF1, 0x53, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x02,
61286 +0x02, 0xF1, 0x67, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x01, 0x04, 0xF1, 0xA4, 0x80, 0x09, 0x90, 0x8B,
61287 +0x2D, 0xE0, 0xB4, 0x05, 0x02, 0xF1, 0x5D, 0xF1, 0xAF, 0x80, 0x73, 0x90, 0x8B, 0x2D, 0xE0, 0xFE,
61288 +0xB4, 0x06, 0x06, 0xE4, 0xFF, 0xF1, 0x72, 0x80, 0x13, 0xEE, 0xB4, 0x03, 0x06, 0x7F, 0x01, 0xF1,
61289 +0x53, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x02, 0x02, 0xF1, 0x67, 0x90, 0x8B, 0x2D, 0xE0,
61290 +0xB4, 0x01, 0x04, 0xF1, 0xA4, 0x80, 0x0B, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x04, 0x04, 0x7F, 0x01,
61291 +0xF1, 0x81, 0xF1, 0xC3, 0x80, 0x38, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x04, 0x06, 0x7F, 0x01, 0xF1,
61292 +0x81, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05, 0x02, 0xF1, 0x5D, 0x90, 0x8B, 0x2D, 0xE0,
61293 +0x70, 0x04, 0xF1, 0x9A, 0x80, 0x16, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x03, 0x06, 0xE4, 0xFF, 0xF1,
61294 +0x53, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x02, 0x02, 0xF1, 0x67, 0xF1, 0xDD, 0xD0, 0xD0,
61295 +0x92, 0xAF, 0x22, 0x12, 0x4A, 0xB2, 0x90, 0x8B, 0x2D, 0x74, 0x01, 0xF0, 0x22, 0x90, 0x05, 0x22,
61296 +0xE4, 0xF0, 0x90, 0x8B, 0x2D, 0xF0, 0x22, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x8B, 0x2D, 0x04,
61297 +0xF0, 0x22, 0xEF, 0x60, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x8B, 0x2D, 0x74, 0x01, 0xF0,
61298 +0x22, 0x90, 0x8B, 0x56, 0xEF, 0xF0, 0x12, 0x7D, 0x42, 0x90, 0x8B, 0x56, 0xE0, 0x60, 0x05, 0x90,
61299 +0x05, 0x22, 0xE4, 0xF0, 0xE4, 0x90, 0x8B, 0x2D, 0xF0, 0x22, 0x12, 0x4A, 0xCC, 0x90, 0x8B, 0x2D,
61300 +0x74, 0x01, 0xF0, 0x22, 0x7F, 0x01, 0x12, 0x4A, 0x7C, 0xE4, 0x90, 0x8B, 0x2D, 0xF0, 0x22, 0x12,
61301 +0x7C, 0x4A, 0x90, 0x8B, 0x2D, 0x74, 0x04, 0xF0, 0x22, 0x12, 0x4A, 0x32, 0x90, 0x8B, 0x2D, 0x74,
61302 +0x03, 0xF0, 0x22, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x8B, 0x2D, 0x74, 0x05, 0xF0, 0x22,
61303 +0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x8B, 0x2D, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x05, 0x22,
61304 +0x74, 0x6F, 0xF0, 0x90, 0x8B, 0x2D, 0x74, 0x06, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0,
61305 +0xD0, 0xE4, 0xFD, 0xFC, 0xEF, 0x30, 0xE0, 0x02, 0x7D, 0x80, 0xEF, 0xC3, 0x13, 0x90, 0xFD, 0x10,
61306 +0xF0, 0xAE, 0x04, 0xAF, 0x05, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x75, 0x28, 0x33, 0xE4, 0xF5, 0x29,
61307 +0x75, 0x2A, 0x07, 0xF5, 0x2B, 0x90, 0x01, 0x30, 0xE5, 0x28, 0xF0, 0xA3, 0xE5, 0x29, 0xF0, 0xA3,
61308 +0xE5, 0x2A, 0xF0, 0xA3, 0xE5, 0x2B, 0xF0, 0x22, 0x75, 0x30, 0x1F, 0x75, 0x31, 0x01, 0x43, 0x31,
61309 +0x10, 0xE4, 0xF5, 0x32, 0x90, 0x01, 0x38, 0xE5, 0x30, 0xF0, 0xA3, 0xE5, 0x31, 0xF0, 0xA3, 0xE5,
61310 +0x32, 0xF0, 0x22, 0x22, 0x90, 0x00, 0x02, 0xE0, 0x54, 0xE0, 0x7F, 0x01, 0x60, 0x02, 0x7F, 0x00,
61311 +0x22, 0x90, 0x00, 0xF3, 0xE0, 0x7F, 0x00, 0x30, 0xE3, 0x02, 0x7F, 0x01, 0x22, 0x90, 0x8B, 0x09,
61312 +0xE0, 0xB4, 0x01, 0x0C, 0x90, 0x00, 0xF2, 0xE0, 0x30, 0xE7, 0x05, 0x7E, 0xFD, 0x7F, 0x33, 0x22,
61313 +0x7E, 0xFD, 0x7F, 0x2F, 0x22, 0x90, 0x00, 0xF3, 0xE0, 0x30, 0xE2, 0x0D, 0x90, 0x05, 0x41, 0x74,
61314 +0x10, 0xF0, 0x90, 0x05, 0x5A, 0xF0, 0xA3, 0xE4, 0xF0, 0x22, 0x90, 0x01, 0x64, 0x74, 0xA0, 0xF0,
61315 +0x22, 0xC0, 0xE0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x05, 0xC0, 0x06,
61316 +0xC0, 0x07, 0x7D, 0x91, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0x74, 0x68, 0xFF, 0xA3, 0xF0, 0x53, 0x91,
61317 +0xEF, 0x90, 0x00, 0x51, 0xE0, 0xFE, 0x90, 0x00, 0x55, 0xE0, 0x5E, 0xF5, 0x3D, 0x90, 0x00, 0x52,
61318 +0xE0, 0xFE, 0x90, 0x00, 0x56, 0xE0, 0x5E, 0xF5, 0x3E, 0xE5, 0x3D, 0x30, 0xE4, 0x06, 0x90, 0x00,
61319 +0x55, 0x74, 0x10, 0xF0, 0xE5, 0x3D, 0x30, 0xE5, 0x06, 0x90, 0x00, 0x55, 0x74, 0x20, 0xF0, 0xE5,
61320 +0x3D, 0x30, 0xE6, 0x06, 0x90, 0x00, 0x55, 0x74, 0x40, 0xF0, 0xE5, 0x3D, 0x30, 0xE7, 0x06, 0x90,
61321 +0x00, 0x55, 0x74, 0x80, 0xF0, 0xE5, 0x3E, 0x30, 0xE0, 0x06, 0x90, 0x00, 0x56, 0x74, 0x01, 0xF0,
61322 +0xE5, 0x3E, 0x30, 0xE1, 0x06, 0x90, 0x00, 0x56, 0x74, 0x02, 0xF0, 0xE5, 0x3E, 0x30, 0xE2, 0x06,
61323 +0x90, 0x00, 0x56, 0x74, 0x04, 0xF0, 0xE5, 0x3E, 0x30, 0xE3, 0x06, 0x90, 0x00, 0x56, 0x74, 0x08,
61324 +0xF0, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0xA3, 0xEF, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0,
61325 +0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xE0, 0x32, 0xEF, 0xC3, 0x94, 0x20, 0x50, 0x39, 0xEF, 0x30,
61326 +0xE0, 0x17, 0xED, 0xC4, 0x54, 0xF0, 0xFD, 0xEF, 0xC3, 0x13, 0xFE, 0x24, 0xA4, 0xF5, 0x82, 0xE4,
61327 +0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x0F, 0x80, 0x10, 0xEF, 0xC3, 0x13, 0xFE, 0x24, 0xA4, 0xF5,
61328 +0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0xF0, 0xF0, 0x74, 0xA4, 0x2E, 0xF5, 0x82, 0xE4,
61329 +0x34, 0x04, 0xF5, 0x83, 0xE0, 0x4D, 0xF0, 0x22, 0xAD, 0x07, 0x74, 0x84, 0x2D, 0xF5, 0x82, 0xE4,
61330 +0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x8A, 0xDE, 0xF0, 0xE0, 0xF9, 0x54, 0x1F, 0xA3,
61331 +0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x27, 0x12, 0x43, 0x5F, 0xE0, 0xFF, 0x90, 0x8A, 0xE1,
61332 +0xF0, 0xED, 0x25, 0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0xFB, 0xA3,
61333 +0xE0, 0x90, 0x8A, 0xE2, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82,
61334 +0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x8A, 0xE4, 0xCB, 0xF0, 0xA3, 0xEB,
61335 +0xF0, 0x90, 0x8A, 0xDF, 0xE0, 0xFE, 0x25, 0xE0, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5,
61336 +0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xED, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4,
61337 +0x34, 0x86, 0xF5, 0x83, 0xEA, 0xF0, 0xA3, 0xEB, 0xF0, 0xEE, 0xC3, 0x9F, 0x40, 0x02, 0x41, 0xB9,
61338 +0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0x74, 0xA5, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEF,
61339 +0xF0, 0xEF, 0x04, 0x90, 0x8A, 0xE0, 0xF0, 0x90, 0x8A, 0xE1, 0xE0, 0xFF, 0x90, 0x8A, 0xE0, 0xE0,
61340 +0xFE, 0xD3, 0x9F, 0x40, 0x02, 0x41, 0xF3, 0xEE, 0xC3, 0x94, 0x10, 0x40, 0x21, 0xEE, 0x24, 0xF0,
61341 +0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8,
61342 +0xF9, 0xFF, 0x90, 0x8A, 0xE2, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x70, 0x27, 0x90, 0x8A,
61343 +0xE0, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x59, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80,
61344 +0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x8A, 0xE4, 0xE0, 0x5E, 0xFE, 0xA3,
61345 +0xE0, 0x5F, 0x4E, 0x60, 0x3C, 0x90, 0x8A, 0xE0, 0xE0, 0xB4, 0x11, 0x0D, 0x90, 0x8A, 0xE3, 0xE0,
61346 +0x30, 0xE7, 0x06, 0x90, 0x8A, 0xE0, 0x74, 0x17, 0xF0, 0x90, 0x8A, 0xE0, 0xE0, 0xFF, 0x64, 0x13,
61347 +0x60, 0x04, 0xEF, 0xB4, 0x12, 0x0D, 0x90, 0x8A, 0xE2, 0xE0, 0x30, 0xE0, 0x06, 0x90, 0x8A, 0xE0,
61348 +0x74, 0x18, 0xF0, 0x90, 0x8A, 0xE0, 0xE0, 0x90, 0x8A, 0xDF, 0xF0, 0x90, 0x8A, 0xDE, 0xF0, 0x80,
61349 +0x42, 0x90, 0x8A, 0xE0, 0xE0, 0x04, 0xF0, 0x41, 0x17, 0x90, 0x8A, 0xE1, 0xE0, 0xFC, 0x90, 0x8A,
61350 +0xDF, 0xE0, 0xFF, 0x6C, 0x70, 0x71, 0x74, 0xA5, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83,
61351 +0xEF, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x29, 0x12, 0x43, 0x5F, 0xE0, 0xB4, 0x01, 0x10,
61352 +0xE9, 0x20, 0xE6, 0x0C, 0x90, 0x8A, 0xDF, 0xE0, 0x44, 0x40, 0x90, 0x8A, 0xDE, 0xF0, 0x80, 0x03,
61353 +0xAF, 0x01, 0x22, 0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34,
61354 +0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x2E, 0xF5,
61355 +0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13,
61356 +0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83,
61357 +0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x66, 0x90, 0x8A, 0xDF, 0xE0, 0xD3, 0x9C, 0x40, 0x5E, 0x90,
61358 +0x8A, 0xE1, 0xE0, 0xFF, 0x74, 0xA5, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEF, 0xF0,
61359 +0x90, 0x8A, 0xDF, 0xEF, 0xF0, 0x90, 0x8A, 0xDE, 0xF0, 0xFC, 0xA3, 0xE0, 0xFF, 0x25, 0xE0, 0x24,
61360 +0x66, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF,
61361 +0x25, 0xE0, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF,
61362 +0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82,
61363 +0xE4, 0x34, 0x86, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0x04, 0x22, 0x74, 0x01, 0x2D,
61364 +0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE4, 0xF0, 0xAF, 0x05, 0x90, 0x8A, 0xDE, 0xE0, 0x44,
61365 +0x80, 0xFD, 0x12, 0x5C, 0x4E, 0x90, 0x8A, 0xDE, 0xE0, 0x44, 0x80, 0xFF, 0x22, 0xE4, 0x90, 0x8A,
61366 +0xCF, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0xC3, 0x94, 0x20, 0x40, 0x03, 0x02, 0x72, 0x54, 0x75,
61367 +0xF0, 0x09, 0xEF, 0x90, 0x87, 0x2A, 0x12, 0x43, 0x5F, 0xE0, 0x64, 0x01, 0x60, 0x03, 0x02, 0x72,
61368 +0x4B, 0x90, 0x8A, 0xCF, 0xE0, 0x25, 0xE0, 0x24, 0xC0, 0xF5, 0x82, 0xE4, 0x34, 0x85, 0xF5, 0x83,
61369 +0xE0, 0xFC, 0xA3, 0xE0, 0xD3, 0x94, 0x00, 0xEC, 0x94, 0x00, 0x50, 0x03, 0x02, 0x72, 0x4B, 0xEF,
61370 +0x75, 0xF0, 0x0A, 0xA4, 0x24, 0x00, 0xF9, 0x74, 0x84, 0x35, 0xF0, 0x75, 0x12, 0x01, 0xF5, 0x13,
61371 +0x89, 0x14, 0x90, 0x8A, 0xCF, 0xE0, 0x25, 0xE0, 0x24, 0xC0, 0xF5, 0x82, 0xE4, 0x34, 0x85, 0xF5,
61372 +0x83, 0xE0, 0xFD, 0xA3, 0xE0, 0x90, 0x8A, 0xD4, 0xCD, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x25, 0xE0,
61373 +0x24, 0x63, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x8A, 0xD6,
61374 +0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0xFE, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34,
61375 +0x04, 0xF5, 0x83, 0xE0, 0x54, 0x3F, 0x90, 0x8A, 0xD0, 0xF0, 0xE0, 0xFD, 0x54, 0x1F, 0xA3, 0xF0,
61376 +0x75, 0xF0, 0x09, 0xEE, 0x90, 0x87, 0x27, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD9, 0xF0, 0x90,
61377 +0x8A, 0xCF, 0xE0, 0xFB, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xC3, 0x94,
61378 +0x05, 0x40, 0x02, 0xC1, 0x9C, 0x90, 0x8A, 0xD9, 0xE0, 0xFE, 0x90, 0x8A, 0xD1, 0xE0, 0x9E, 0x40,
61379 +0x13, 0x90, 0x8A, 0xD9, 0xE0, 0x90, 0x8A, 0xD1, 0xF0, 0xED, 0x54, 0x40, 0xFD, 0x90, 0x8A, 0xD0,
61380 +0xF0, 0xEE, 0x4D, 0xF0, 0x90, 0x8A, 0xD1, 0xE0, 0xFF, 0x90, 0x41, 0x12, 0x93, 0xFE, 0x74, 0x23,
61381 +0x2B, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xC3, 0x9E, 0x40, 0x06, 0xEF, 0x90, 0x40,
61382 +0xDA, 0x80, 0x07, 0x90, 0x8A, 0xD1, 0xE0, 0x90, 0x40, 0xF6, 0x93, 0x90, 0x8A, 0xD8, 0xF0, 0x90,
61383 +0x8A, 0xD8, 0xE0, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x50, 0xF9, 0x74, 0x40, 0x35, 0xF0, 0x75, 0x0F,
61384 +0xFF, 0xF5, 0x10, 0x89, 0x11, 0x90, 0x8A, 0xD0, 0xE0, 0x90, 0x41, 0xBA, 0x93, 0xFF, 0xD3, 0x90,
61385 +0x8A, 0xD7, 0xE0, 0x9F, 0x90, 0x8A, 0xD6, 0xE0, 0x94, 0x00, 0x40, 0x0D, 0x90, 0x8A, 0xCF, 0xE0,
61386 +0xFF, 0xE4, 0xFD, 0x12, 0x5D, 0x41, 0x02, 0x71, 0xE1, 0x90, 0x8A, 0xCF, 0xE0, 0x25, 0xE0, 0x24,
61387 +0xE1, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x8A, 0xD2, 0xCF,
61388 +0xF0, 0xA3, 0xEF, 0xF0, 0xAB, 0x0F, 0xAA, 0x10, 0xA9, 0x11, 0x12, 0x24, 0x62, 0xFF, 0x7E, 0x00,
61389 +0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x12, 0x42, 0x97, 0xFD, 0xAC, 0xF0, 0x12, 0x24, 0x7B, 0x90,
61390 +0x8A, 0xD2, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0xAB, 0x0F, 0xAA, 0x10, 0xA9, 0x11, 0x90, 0x00,
61391 +0x01, 0x12, 0x42, 0x20, 0xFF, 0x7E, 0x00, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x90, 0x00, 0x02,
61392 +0x12, 0x42, 0xC2, 0xFD, 0xAC, 0xF0, 0x12, 0x24, 0x7B, 0x90, 0x8A, 0xD2, 0xEE, 0x8F, 0xF0, 0x12,
61393 +0x42, 0x81, 0xAB, 0x0F, 0xAA, 0x10, 0xA9, 0x11, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFF, 0x7E,
61394 +0x00, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x90, 0x00, 0x04, 0x12, 0x42, 0xC2, 0xFD, 0xAC, 0xF0,
61395 +0x12, 0x24, 0x7B, 0x90, 0x8A, 0xD2, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0xAB, 0x0F, 0xAA, 0x10,
61396 +0xA9, 0x11, 0x90, 0x00, 0x03, 0x12, 0x42, 0x20, 0xFF, 0x7E, 0x00, 0xAB, 0x12, 0xAA, 0x13, 0xA9,
61397 +0x14, 0x90, 0x00, 0x06, 0x12, 0x42, 0xC2, 0xFD, 0xAC, 0xF0, 0x12, 0x24, 0x7B, 0x90, 0x8A, 0xD2,
61398 +0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0xAB, 0x0F, 0xAA, 0x10, 0xA9, 0x11, 0x90, 0x00, 0x04, 0x12,
61399 +0x42, 0x20, 0xFF, 0x7E, 0x00, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x90, 0x00, 0x08, 0x12, 0x42,
61400 +0xC2, 0xFD, 0xAC, 0xF0, 0x12, 0x24, 0x7B, 0x90, 0x8A, 0xD2, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x81,
61401 +0xAB, 0x0F, 0xAA, 0x10, 0xA9, 0x11, 0x90, 0x00, 0x05, 0x12, 0x42, 0x20, 0xFF, 0x7E, 0x00, 0x90,
61402 +0x8A, 0xD4, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x12, 0x24, 0x7B, 0xD3, 0x90, 0x8A, 0xD3, 0xE0, 0x9F,
61403 +0x90, 0x8A, 0xD2, 0xE0, 0x9E, 0x40, 0x0C, 0xA3, 0xE0, 0x9F, 0xF0, 0x90, 0x8A, 0xD2, 0xE0, 0x9E,
61404 +0xF0, 0x80, 0x07, 0xE4, 0x90, 0x8A, 0xD2, 0xF0, 0xA3, 0xF0, 0x90, 0x8A, 0xD2, 0xE0, 0xFC, 0xA3,
61405 +0xE0, 0xFD, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34, 0x86,
61406 +0xF5, 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x8A, 0xD0, 0xE0, 0x25, 0xE0, 0x24, 0x2E, 0xF5,
61407 +0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xD3, 0xED, 0x9B,
61408 +0xEC, 0x9A, 0x40, 0x05, 0x31, 0x78, 0x02, 0x71, 0xAF, 0x90, 0x8A, 0xD0, 0xE0, 0x25, 0xE0, 0x24,
61409 +0x66, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFE, 0x74, 0x01, 0x93, 0xFF, 0xC3,
61410 +0x90, 0x8A, 0xD3, 0xE0, 0x9F, 0x90, 0x8A, 0xD2, 0xE0, 0x9E, 0x40, 0x03, 0x02, 0x71, 0xAF, 0x90,
61411 +0x8A, 0xCF, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x5D, 0x41, 0x02, 0x71, 0xAF, 0x90, 0x8A, 0xCF, 0xE0,
61412 +0xFF, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xFC, 0x64, 0x05, 0x60, 0x03,
61413 +0x02, 0x70, 0x7D, 0x90, 0x87, 0x22, 0xE0, 0xFE, 0xB4, 0x03, 0x0B, 0x90, 0x8A, 0xD1, 0xE0, 0xC3,
61414 +0x94, 0x19, 0x40, 0x3D, 0x80, 0x2E, 0xEE, 0xB4, 0x02, 0x0B, 0x90, 0x8A, 0xD1, 0xE0, 0xC3, 0x94,
61415 +0x11, 0x40, 0x2E, 0x80, 0x1F, 0x90, 0x87, 0x22, 0xE0, 0xFE, 0xB4, 0x01, 0x0B, 0x90, 0x8A, 0xD1,
61416 +0xE0, 0xC3, 0x94, 0x0A, 0x40, 0x1B, 0x80, 0x0C, 0xEE, 0x70, 0x11, 0x90, 0x8A, 0xD1, 0xE0, 0xC3,
61417 +0x94, 0x03, 0x40, 0x0D, 0x90, 0x89, 0x43, 0x74, 0x01, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x89, 0x43,
61418 +0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0xFE, 0x24, 0x43, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0,
61419 +0x90, 0x8A, 0xDD, 0xF0, 0x74, 0x23, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE,
61420 +0xC3, 0x94, 0x30, 0x50, 0x0B, 0xE4, 0x90, 0x8A, 0xDD, 0xF0, 0x74, 0x64, 0x2F, 0x02, 0x70, 0x28,
61421 +0x90, 0x89, 0x43, 0xE0, 0x64, 0x01, 0x60, 0x03, 0x02, 0x70, 0x1D, 0x90, 0x8A, 0xCF, 0xE0, 0x24,
61422 +0x44, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0x64, 0x0A, 0x60, 0x5B, 0x90, 0x8A, 0xCF,
61423 +0xE0, 0xFF, 0xEE, 0x24, 0x05, 0xFB, 0xE4, 0x33, 0xFA, 0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
61424 +0x86, 0xF5, 0x83, 0xE0, 0xFF, 0xD3, 0x9B, 0xEA, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x38,
61425 +0x90, 0x8A, 0xCF, 0xE0, 0xFE, 0xEF, 0x24, 0x05, 0xFB, 0xE4, 0x33, 0xFA, 0x74, 0x23, 0x2E, 0xF5,
61426 +0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xD3, 0x9B, 0xEA, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98,
61427 +0x50, 0x16, 0x90, 0x8A, 0xCF, 0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0,
61428 +0xFF, 0x90, 0x8A, 0xD1, 0xE0, 0x6F, 0x60, 0x56, 0x90, 0x8A, 0xCF, 0xE0, 0x24, 0x23, 0xF5, 0x82,
61429 +0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFF, 0xD3, 0x94, 0x42, 0x40, 0x08, 0x90, 0x8A, 0xDD, 0x74,
61430 +0x05, 0xF0, 0x80, 0x11, 0xEF, 0xD3, 0x94, 0x39, 0x90, 0x8A, 0xDD, 0x40, 0x05, 0x74, 0x03, 0xF0,
61431 +0x80, 0x03, 0x74, 0x01, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0x24, 0x23, 0xF5, 0x82, 0xE4, 0x34,
61432 +0x89, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xEE,
61433 +0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0x24, 0x44, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0x80, 0x2F, 0x90, 0x8A,
61434 +0xCF, 0xE0, 0xFF, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x44,
61435 +0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x80, 0x14, 0xE4, 0x90, 0x8A,
61436 +0xDD, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4,
61437 +0xF0, 0x90, 0x8A, 0xD1, 0xE0, 0xFE, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0x24, 0x84, 0xF5, 0x82, 0xE4,
61438 +0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0xFE, 0x74, 0x43, 0x2F, 0xF5, 0x82,
61439 +0xE4, 0x34, 0x88, 0xF5, 0x83, 0xEE, 0xF0, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x87, 0x2B, 0x12, 0x43,
61440 +0x5F, 0xE0, 0xB4, 0x01, 0x11, 0xE4, 0x90, 0x8A, 0xDD, 0xF0, 0x74, 0x64, 0x2F, 0xF5, 0x82, 0xE4,
61441 +0x34, 0x8A, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0xFD, 0x21, 0xAC, 0xEC, 0x64, 0x06,
61442 +0x60, 0x02, 0x21, 0xAF, 0x90, 0x8A, 0xD2, 0xF0, 0xA3, 0xF0, 0x90, 0x41, 0xDB, 0x93, 0xFF, 0x7E,
61443 +0x00, 0x90, 0x8A, 0xD4, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x12, 0x24, 0x7B, 0x90, 0x8A, 0xDB, 0xEE,
61444 +0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0x24, 0x43, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5,
61445 +0x83, 0xE0, 0x90, 0x8A, 0xDD, 0xF0, 0xE4, 0x90, 0x8A, 0xDA, 0xF0, 0x90, 0x8A, 0xDA, 0xE0, 0xFF,
61446 +0xD3, 0x94, 0x04, 0x50, 0x47, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x75, 0xF0, 0x02, 0xEF, 0xA4,
61447 +0xF5, 0x82, 0x85, 0xF0, 0x83, 0x12, 0x42, 0xC2, 0xFD, 0xAC, 0xF0, 0xEF, 0x90, 0x41, 0xD6, 0x93,
61448 +0xFF, 0x7E, 0x00, 0x12, 0x24, 0x7B, 0x90, 0x8A, 0xD2, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0x90,
61449 +0x8A, 0xDB, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xD3, 0x90, 0x8A, 0xD3, 0xE0, 0x9F, 0x90, 0x8A, 0xD2,
61450 +0xE0, 0x9E, 0x50, 0x08, 0x90, 0x8A, 0xDA, 0xE0, 0x04, 0xF0, 0x80, 0xAF, 0x90, 0x8A, 0xDA, 0xE0,
61451 +0xC3, 0x13, 0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0xFF, 0xB4, 0x01, 0x0D, 0x90, 0x8A, 0xDA, 0xE0, 0x70,
61452 +0x5D, 0x90, 0x8A, 0xDD, 0x04, 0xF0, 0x80, 0x5B, 0xEF, 0xB4, 0x03, 0x1D, 0x90, 0x8A, 0xDA, 0xE0,
61453 +0xFF, 0x70, 0x08, 0x90, 0x8A, 0xDD, 0x74, 0x03, 0xF0, 0x80, 0x48, 0xEF, 0xB4, 0x01, 0x08, 0x90,
61454 +0x8A, 0xDD, 0x74, 0x01, 0xF0, 0x80, 0x3C, 0x80, 0x35, 0x90, 0x8A, 0xDD, 0xE0, 0x64, 0x05, 0x70,
61455 +0x32, 0x90, 0x8A, 0xDA, 0xE0, 0xFF, 0x70, 0x08, 0x90, 0x8A, 0xDD, 0x74, 0x05, 0xF0, 0x80, 0x0F,
61456 +0xEF, 0x90, 0x8A, 0xDD, 0xB4, 0x01, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03, 0x74, 0x01, 0xF0, 0xD3,
61457 +0x90, 0x8A, 0xD7, 0xE0, 0x94, 0x03, 0x90, 0x8A, 0xD6, 0xE0, 0x94, 0x00, 0x40, 0x05, 0xE4, 0x90,
61458 +0x8A, 0xDD, 0xF0, 0xD3, 0x90, 0x8A, 0xD7, 0xE0, 0x94, 0x03, 0x90, 0x8A, 0xD6, 0xE0, 0x94, 0x00,
61459 +0x40, 0x05, 0xE4, 0x90, 0x8A, 0xDD, 0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0xFD, 0x90, 0x8A, 0xCF, 0xE0,
61460 +0xFF, 0x24, 0x43, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xED, 0xF0, 0x12, 0x69, 0x38, 0x90,
61461 +0x8A, 0xCF, 0xE0, 0xFF, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xD3, 0x94,
61462 +0x05, 0x50, 0x0F, 0x74, 0x64, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0x04, 0xF0,
61463 +0x80, 0x0F, 0x90, 0x8A, 0xCF, 0xE0, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4,
61464 +0xF0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0xE4, 0xF5, 0xF0, 0x12, 0x42, 0xFA, 0xAB, 0x12, 0xAA,
61465 +0x13, 0xA9, 0x14, 0x90, 0x00, 0x02, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x19, 0x90, 0x00, 0x04, 0xE4,
61466 +0xF5, 0xF0, 0x12, 0x43, 0x19, 0x90, 0x00, 0x06, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x19, 0x90, 0x00,
61467 +0x08, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x19, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0xC0,
61468 +0xF5, 0x82, 0xE4, 0x34, 0x85, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x63,
61469 +0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xA3,
61470 +0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0x04,
61471 +0xF0, 0x02, 0x6B, 0xC2, 0x22, 0xE4, 0x90, 0x8A, 0xCF, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0xC3,
61472 +0x94, 0x10, 0x50, 0x14, 0x74, 0xA4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE4, 0xF0,
61473 +0x90, 0x8A, 0xCF, 0xE0, 0x04, 0xF0, 0x80, 0xE2, 0xE4, 0x90, 0x8A, 0xCF, 0xF0, 0x90, 0x8A, 0xCF,
61474 +0xE0, 0xFF, 0xC3, 0x94, 0x20, 0x40, 0x02, 0x81, 0x0E, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x00,
61475 +0x12, 0x43, 0x5F, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x02, 0x12, 0x43,
61476 +0x5F, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x04, 0x12, 0x43, 0x5F, 0xE4,
61477 +0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x06, 0x12, 0x43, 0x5F, 0xE4, 0xF0, 0xA3,
61478 +0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x08, 0x12, 0x43, 0x5F, 0xE4, 0xF0, 0xA3, 0xF0, 0x74,
61479 +0x84, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x74, 0x44, 0x2F, 0xF5,
61480 +0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x43, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88,
61481 +0xF5, 0x83, 0xE4, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xC0, 0xF5, 0x82, 0xE4, 0x34, 0x85, 0xF5, 0x83,
61482 +0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x63, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83,
61483 +0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xE3, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83,
61484 +0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xA3, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83,
61485 +0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83,
61486 +0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xA4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83,
61487 +0xE4, 0xF0, 0xA3, 0xF0, 0x74, 0x44, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4, 0xF0,
61488 +0x74, 0x24, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x64, 0x2F, 0xF5,
61489 +0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x41, 0x8C, 0x93, 0xFE, 0x74, 0x01, 0x93,
61490 +0xFF, 0x90, 0x41, 0x54, 0x74, 0x01, 0x93, 0x2F, 0xFF, 0xE4, 0x93, 0x3E, 0xC3, 0x13, 0xFE, 0xEF,
61491 +0x13, 0xFF, 0x90, 0x8A, 0xCF, 0xE0, 0xFD, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34, 0x86,
61492 +0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x29, 0x12, 0x43,
61493 +0x5F, 0x74, 0x01, 0xF0, 0x74, 0xC1, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0x74, 0x0C,
61494 +0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x25, 0x12, 0x43, 0x5F, 0x74, 0xFF, 0xF0, 0xA3, 0xF0,
61495 +0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x23, 0x12, 0x43, 0x5F, 0xE4, 0xF0, 0xA3, 0x74, 0x0F, 0xF0,
61496 +0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x27, 0x12, 0x43, 0x5F, 0x74, 0x13, 0xF0, 0x75, 0xF0, 0x09,
61497 +0xED, 0x90, 0x87, 0x28, 0x12, 0x43, 0x5F, 0xE4, 0xF0, 0x74, 0x84, 0x2D, 0xF5, 0x82, 0xE4, 0x34,
61498 +0x04, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0x04, 0xF0, 0x41, 0x7D, 0x22, 0x12,
61499 +0x24, 0x62, 0xFF, 0xC3, 0x94, 0x20, 0x50, 0x14, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFE, 0x74,
61500 +0x23, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0x22, 0xEF, 0xB4, 0x20, 0x0A,
61501 +0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0x90, 0x87, 0x21, 0xF0, 0x22, 0x90, 0x8B, 0x4B, 0xEE, 0xF0,
61502 +0xA3, 0xEF, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x8B, 0x4B, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5,
61503 +0x82, 0x8E, 0x83, 0xE0, 0x60, 0x2C, 0xC3, 0x90, 0x8B, 0x4E, 0xE0, 0x94, 0xE8, 0x90, 0x8B, 0x4D,
61504 +0xE0, 0x94, 0x03, 0x40, 0x0A, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x10, 0xF0, 0x7F, 0x00, 0x22, 0x90,
61505 +0x8B, 0x4D, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x81, 0x7F, 0x0A, 0x7E, 0x00, 0x12, 0x32, 0x15,
61506 +0x80, 0xC6, 0x7F, 0x01, 0x22, 0x12, 0x24, 0x62, 0xF5, 0x21, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3,
61507 +0xC0, 0xD0, 0x90, 0x8A, 0xDA, 0x12, 0x25, 0x14, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x01, 0x12,
61508 +0x42, 0x20, 0x90, 0x8B, 0x1A, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x42, 0x20, 0x90, 0x8B, 0x0A, 0xF0,
61509 +0x12, 0x47, 0xFA, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFF, 0x30,
61510 +0xE0, 0x25, 0x12, 0x24, 0x62, 0x90, 0x8B, 0x10, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x42, 0x20, 0x90,
61511 +0x8B, 0x11, 0xF0, 0xEF, 0xC3, 0x13, 0x54, 0x7F, 0x90, 0x8B, 0x0F, 0xF0, 0x90, 0x00, 0x03, 0x12,
61512 +0x42, 0x20, 0x90, 0x8B, 0x16, 0xF0, 0x22, 0x90, 0x8B, 0x10, 0x74, 0x03, 0xF0, 0x90, 0x8B, 0x11,
61513 +0x74, 0x05, 0xF0, 0x90, 0x8B, 0x0F, 0x74, 0x14, 0xF0, 0x90, 0x8B, 0x16, 0x74, 0x05, 0xF0, 0x22,
61514 +0x12, 0x24, 0x62, 0x30, 0xE0, 0x19, 0xC3, 0x13, 0x54, 0x7F, 0x90, 0x8B, 0x15, 0xF0, 0x90, 0x00,
61515 +0x01, 0x12, 0x42, 0x20, 0xFF, 0x90, 0x8B, 0x13, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x0F, 0x90,
61516 +0x8B, 0x15, 0x74, 0x05, 0xF0, 0x90, 0x8B, 0x13, 0xE4, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90, 0x8B,
61517 +0x13, 0xE0, 0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22, 0x12, 0x24, 0x62, 0x90, 0x8B, 0x12, 0xF0,
61518 +0x60, 0x07, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x45, 0xA2, 0x90, 0x8B, 0x12, 0xE0, 0x90, 0x01, 0xE7,
61519 +0xF0, 0x22, 0x90, 0x02, 0x09, 0xE0, 0xFD, 0x12, 0x24, 0x62, 0xFE, 0xAF, 0x05, 0xED, 0x2E, 0x90,
61520 +0x8A, 0xF7, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x42, 0x20, 0xFF, 0xED, 0x2F, 0x90, 0x8A, 0xF8, 0xF0,
61521 +0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFF, 0xED, 0x2F, 0x90, 0x8A, 0xF9, 0xF0, 0x90, 0x00, 0x03,
61522 +0x12, 0x42, 0x20, 0xFF, 0xED, 0x2F, 0x90, 0x8A, 0xFA, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x42, 0x20,
61523 +0xFF, 0xAE, 0x05, 0xED, 0x2F, 0x90, 0x8A, 0xFB, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0,
61524 +0xD0, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x8B, 0xE4, 0x90, 0x8A, 0xDD, 0xF0, 0x12, 0x24, 0x62, 0xC3,
61525 +0x13, 0x20, 0xE0, 0x02, 0xC1, 0xED, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x6B, 0x12, 0x24, 0x62, 0xFF,
61526 +0x54, 0x02, 0xFE, 0x90, 0x8B, 0x32, 0xE0, 0x54, 0xFD, 0x4E, 0xFE, 0xF0, 0xEF, 0x54, 0x01, 0xFF,
61527 +0xEE, 0x54, 0xFE, 0x4F, 0xFF, 0xF0, 0x12, 0x24, 0x62, 0xFE, 0x54, 0x08, 0xFD, 0xEF, 0x54, 0xF7,
61528 +0x4D, 0xFF, 0x90, 0x8B, 0x32, 0xF0, 0xEE, 0x54, 0x10, 0xFE, 0xEF, 0x54, 0xEF, 0x4E, 0xFF, 0xF0,
61529 +0x12, 0x24, 0x62, 0xFE, 0x54, 0x20, 0xFD, 0xEF, 0x54, 0xDF, 0x4D, 0xFF, 0x90, 0x8B, 0x32, 0xF0,
61530 +0xEE, 0x54, 0x40, 0xFE, 0xEF, 0x54, 0xBF, 0x4E, 0xF0, 0x20, 0xE0, 0x02, 0xC1, 0xD9, 0x90, 0x8A,
61531 +0xDD, 0x74, 0x21, 0xF0, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x6B, 0x12, 0x24, 0x62, 0xFF, 0x13, 0x13,
61532 +0x54, 0x01, 0xFE, 0x90, 0x8B, 0x32, 0xE0, 0xFD, 0x13, 0x13, 0x54, 0x01, 0x6E, 0x60, 0x2A, 0xEF,
61533 +0x54, 0x04, 0xFF, 0xED, 0x54, 0xFB, 0x4F, 0xF0, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x0E,
61534 +0x90, 0x01, 0x34, 0x74, 0x40, 0xF0, 0xFD, 0xE4, 0xFF, 0x12, 0x31, 0x9D, 0x80, 0x0B, 0xE4, 0x90,
61535 +0x8B, 0x34, 0xF0, 0x7D, 0x40, 0xFF, 0x12, 0x31, 0x2C, 0x90, 0x8B, 0x32, 0xE0, 0xFD, 0x13, 0x13,
61536 +0x13, 0x54, 0x1F, 0x30, 0xE0, 0x07, 0x90, 0x8A, 0xDD, 0xE0, 0x44, 0x12, 0xF0, 0xED, 0xC4, 0x54,
61537 +0x0F, 0x30, 0xE0, 0x07, 0x90, 0x8A, 0xDD, 0xE0, 0x44, 0x14, 0xF0, 0x90, 0x8B, 0x32, 0xE0, 0xC4,
61538 +0x13, 0x54, 0x07, 0x30, 0xE0, 0x07, 0x90, 0x8A, 0xDD, 0xE0, 0x44, 0x80, 0xF0, 0x90, 0x8B, 0x32,
61539 +0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x07, 0x90, 0x8A, 0xDD, 0xE0, 0x44, 0x40, 0xF0,
61540 +0x90, 0x8A, 0xDD, 0xE0, 0x90, 0x05, 0x27, 0xF0, 0x90, 0x8B, 0x33, 0xE0, 0x70, 0x05, 0x7F, 0x01,
61541 +0x12, 0x4E, 0x89, 0x90, 0x8B, 0x32, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x04, 0x7F,
61542 +0x03, 0x80, 0x0E, 0x7F, 0x01, 0x12, 0x4D, 0xE0, 0xEF, 0x60, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F,
61543 +0x02, 0x12, 0x4E, 0x89, 0x7F, 0x02, 0x02, 0x78, 0x2E, 0x90, 0x8A, 0xDD, 0x74, 0x01, 0xF0, 0x90,
61544 +0x05, 0x27, 0xF0, 0xE4, 0xFF, 0x12, 0x4E, 0x89, 0x7F, 0x03, 0x02, 0x78, 0x2E, 0x90, 0x8A, 0xDA,
61545 +0x12, 0x43, 0x6B, 0x12, 0x24, 0x62, 0xFF, 0x54, 0x02, 0xFE, 0x90, 0x8B, 0x2C, 0xE0, 0x54, 0xFD,
61546 +0x4E, 0xFE, 0xF0, 0xEF, 0x54, 0x01, 0xFF, 0xEE, 0x54, 0xFE, 0x4F, 0xFF, 0xF0, 0x12, 0x24, 0x62,
61547 +0xFE, 0x54, 0x08, 0xFD, 0xEF, 0x54, 0xF7, 0x4D, 0xFF, 0x90, 0x8B, 0x2C, 0xF0, 0xEE, 0x54, 0x10,
61548 +0xFE, 0xEF, 0x54, 0xEF, 0x4E, 0xFF, 0xF0, 0x12, 0x24, 0x62, 0xFE, 0x54, 0x40, 0xFD, 0xEF, 0x54,
61549 +0xBF, 0x4D, 0xFF, 0x90, 0x8B, 0x2C, 0xF0, 0xEE, 0x54, 0x04, 0xFE, 0xEF, 0x54, 0xFB, 0x4E, 0xF0,
61550 +0x20, 0xE0, 0x02, 0xE1, 0xE2, 0x90, 0x8A, 0xDD, 0x74, 0x31, 0xF0, 0x90, 0x8B, 0x2C, 0xE0, 0x13,
61551 +0x13, 0x54, 0x3F, 0x20, 0xE0, 0x0B, 0xE4, 0x90, 0x8B, 0x2E, 0xF0, 0x7D, 0x40, 0xFF, 0x12, 0x31,
61552 +0x2C, 0x90, 0x8B, 0x2C, 0xE0, 0xFD, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x07, 0x90, 0x8A,
61553 +0xDD, 0xE0, 0x44, 0x02, 0xF0, 0xED, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x07, 0x90, 0x8A, 0xDD, 0xE0,
61554 +0x44, 0x04, 0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0x54, 0x06, 0x60, 0x0C, 0x90, 0x01, 0x3E, 0x74, 0x03,
61555 +0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x31, 0xB7, 0x90, 0x8A, 0xDD, 0xE0, 0x90, 0x05, 0x27, 0xF0, 0x90,
61556 +0x8B, 0x2C, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x0D, 0xA3, 0xE0, 0x64, 0x06,
61557 +0x60, 0x2C, 0x7F, 0x06, 0x12, 0x65, 0x82, 0x80, 0x25, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x06, 0x1B,
61558 +0x7F, 0x01, 0x12, 0x65, 0x82, 0xE4, 0xFF, 0x12, 0x4D, 0xE0, 0xEF, 0x60, 0x09, 0x7D, 0x01, 0xAF,
61559 +0x23, 0x12, 0x45, 0xA2, 0x80, 0x05, 0x12, 0x4E, 0x56, 0x80, 0x03, 0x12, 0x7D, 0xC1, 0x7F, 0x01,
61560 +0x80, 0x4C, 0x90, 0x8A, 0xDD, 0x74, 0x01, 0xF0, 0x90, 0x05, 0x27, 0xF0, 0x7D, 0x03, 0x7F, 0x02,
61561 +0x12, 0x31, 0x49, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x06, 0x02, 0x80, 0x1B, 0x90, 0x8B, 0x2D, 0xE0,
61562 +0xB4, 0x04, 0x02, 0x80, 0x07, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05, 0x04, 0xE4, 0xFF, 0x80, 0x14,
61563 +0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x03, 0x04, 0x7F, 0x01, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4,
61564 +0x02, 0x05, 0x7F, 0x01, 0x12, 0x65, 0x82, 0x11, 0x35, 0x12, 0x4A, 0xFC, 0x7F, 0x03, 0x11, 0x42,
61565 +0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x8B, 0x31, 0xE0, 0xB4, 0x01, 0x05, 0xE4, 0xF0, 0x12, 0x48,
61566 +0xFE, 0x22, 0xAD, 0x07, 0xEF, 0x64, 0x01, 0x60, 0x04, 0xEF, 0xB4, 0x03, 0x15, 0x90, 0x8B, 0x32,
61567 +0xE0, 0x54, 0xFE, 0xF0, 0x54, 0xFB, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
61568 +0xA3, 0xF0, 0xED, 0x64, 0x02, 0x60, 0x04, 0xED, 0xB4, 0x03, 0x15, 0x90, 0x8B, 0x2C, 0xE0, 0x54,
61569 +0xFE, 0xF0, 0x54, 0xFB, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
61570 +0x22, 0x12, 0x24, 0x62, 0x90, 0x8B, 0x38, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
61571 +0x90, 0x8A, 0xFD, 0xE0, 0x90, 0x8A, 0xE8, 0xF0, 0x90, 0x8A, 0xFE, 0xE0, 0xFF, 0xA3, 0xE0, 0x90,
61572 +0x8A, 0xE9, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0x90, 0x8A, 0xE4, 0xF0, 0x90, 0x8A, 0xE4, 0xE0,
61573 +0xFF, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x8B, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0xEB, 0x2F, 0xF5,
61574 +0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x8A, 0xE4, 0xE0, 0x04, 0xF0, 0xE0, 0xB4,
61575 +0x04, 0xDA, 0x90, 0x8A, 0xE8, 0xE0, 0x12, 0x43, 0x94, 0x78, 0xF8, 0x00, 0x7A, 0x6B, 0x01, 0x79,
61576 +0x01, 0x02, 0x79, 0x01, 0x03, 0x79, 0x01, 0x04, 0x7A, 0x6B, 0x05, 0x7A, 0x35, 0x80, 0x7A, 0x4E,
61577 +0x81, 0x7A, 0x6B, 0x82, 0x00, 0x00, 0x7A, 0x67, 0x90, 0x8A, 0xEE, 0xE0, 0xFF, 0x51, 0x72, 0x41,
61578 +0x6B, 0x90, 0x8A, 0xE8, 0xE0, 0xFF, 0xB4, 0x02, 0x08, 0x90, 0x8A, 0xE5, 0x74, 0x01, 0xF0, 0x80,
61579 +0x0F, 0xEF, 0x90, 0x8A, 0xE5, 0xB4, 0x03, 0x05, 0x74, 0x02, 0xF0, 0x80, 0x03, 0x74, 0x04, 0xF0,
61580 +0xC3, 0x90, 0x8A, 0xE9, 0xE0, 0x94, 0x08, 0x50, 0x78, 0xE4, 0x90, 0x8A, 0xE4, 0xF0, 0x90, 0x8A,
61581 +0xE5, 0xE0, 0xFF, 0x90, 0x8A, 0xE4, 0xE0, 0xC3, 0x9F, 0x40, 0x02, 0x41, 0x6B, 0x90, 0x8A, 0xE9,
61582 +0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC3, 0xEE, 0x94, 0x01, 0x90, 0x8A, 0xE4, 0xE0, 0x50, 0x1F, 0xFE,
61583 +0x2F, 0xFF, 0xEE, 0xFD, 0xC3, 0x74, 0x03, 0x9D, 0xFD, 0xE4, 0x94, 0x00, 0xFC, 0x74, 0xEB, 0x2D,
61584 +0xF5, 0x82, 0x74, 0x8A, 0x3C, 0xF5, 0x83, 0xE0, 0xFD, 0x12, 0x51, 0x88, 0x80, 0x2B, 0xFF, 0xFD,
61585 +0xC3, 0x74, 0x03, 0x9D, 0xFD, 0xE4, 0x94, 0x00, 0xFC, 0x74, 0xEB, 0x2D, 0xF5, 0x82, 0x74, 0x8A,
61586 +0x3C, 0xF5, 0x83, 0xE0, 0xFE, 0xEF, 0xFD, 0x90, 0x8A, 0xEA, 0xE0, 0x2D, 0xFD, 0x90, 0x8A, 0xE9,
61587 +0xE0, 0x34, 0x00, 0x8D, 0x82, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x8A, 0xE4, 0xE0, 0x04, 0xF0, 0x80,
61588 +0x8D, 0xC3, 0x90, 0x8A, 0xE9, 0xE0, 0x94, 0x10, 0x40, 0x02, 0x41, 0x6B, 0x90, 0x8A, 0xE8, 0xE0,
61589 +0x64, 0x04, 0x60, 0x02, 0x41, 0x6B, 0x90, 0x8A, 0xEC, 0xE0, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x78,
61590 +0x10, 0x12, 0x24, 0xF5, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x8A, 0xEB, 0xE0,
61591 +0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x18, 0x12, 0x24, 0xF5, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01,
61592 +0xD0, 0x00, 0x12, 0x43, 0x46, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x8A, 0xED,
61593 +0xE0, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x08, 0x12, 0x24, 0xF5, 0xD0, 0x03, 0xD0, 0x02, 0xD0,
61594 +0x01, 0xD0, 0x00, 0x12, 0x43, 0x46, 0xA8, 0x04, 0xA9, 0x05, 0xAA, 0x06, 0xAB, 0x07, 0xA3, 0xE0,
61595 +0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x12, 0x43, 0x46, 0xA3, 0x12, 0x25, 0x08, 0x90, 0x8A, 0xEF, 0x12,
61596 +0x43, 0x53, 0x90, 0x80, 0x96, 0x12, 0x25, 0x08, 0x90, 0x8A, 0xE9, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF,
61597 +0x12, 0x2B, 0x08, 0x80, 0x36, 0x90, 0x8A, 0xED, 0xE0, 0xFE, 0xA3, 0xE0, 0x24, 0x00, 0xFF, 0xE4,
61598 +0x3E, 0xFE, 0x90, 0x8A, 0xE6, 0xF0, 0xA3, 0xEF, 0xF0, 0x12, 0x32, 0x15, 0x80, 0x1D, 0x90, 0x8A,
61599 +0xED, 0xE0, 0xFE, 0xA3, 0xE0, 0x24, 0x00, 0xFF, 0xE4, 0x3E, 0xFE, 0x90, 0x8A, 0xE6, 0xF0, 0xA3,
61600 +0xEF, 0xF0, 0x12, 0x31, 0x82, 0x80, 0x04, 0x7F, 0x00, 0x80, 0x02, 0x7F, 0x01, 0xD0, 0xD0, 0x92,
61601 +0xAF, 0x22, 0x8F, 0x0F, 0xE4, 0x90, 0x8A, 0xF3, 0xF0, 0xE5, 0x0F, 0x14, 0xFE, 0x90, 0x8A, 0xF3,
61602 +0xE0, 0xFF, 0xC3, 0x9E, 0x50, 0x0E, 0xEF, 0x04, 0xFD, 0x12, 0x2D, 0x4D, 0x90, 0x8A, 0xF3, 0xE0,
61603 +0x04, 0xF0, 0x80, 0xE5, 0xE5, 0x0F, 0x14, 0xFF, 0x7D, 0xFF, 0x12, 0x2D, 0x4D, 0x90, 0x8A, 0xF3,
61604 +0xE5, 0x0F, 0xF0, 0x90, 0x8A, 0xF3, 0xE0, 0xC3, 0x94, 0xFF, 0x50, 0x0F, 0xE0, 0xFF, 0x04, 0xFD,
61605 +0x12, 0x2D, 0x4D, 0x90, 0x8A, 0xF3, 0xE0, 0x04, 0xF0, 0x80, 0xE8, 0xAD, 0x0F, 0x7F, 0xFF, 0x02,
61606 +0x2D, 0x4D, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0x90, 0x8A, 0xDD, 0xF0, 0xA3, 0x74,
61607 +0x04, 0xF0, 0xA3, 0xE4, 0xF0, 0x90, 0x8A, 0xE2, 0xF0, 0xA3, 0xF0, 0x90, 0x02, 0x09, 0xE0, 0x90,
61608 +0x8A, 0xE1, 0xF0, 0x12, 0x24, 0x62, 0xFF, 0x90, 0x8A, 0xE1, 0xE0, 0x2F, 0x90, 0x8A, 0xE0, 0xF0,
61609 +0x30, 0xE0, 0x0B, 0x90, 0x8A, 0xDB, 0xE4, 0xF0, 0xA3, 0x74, 0x80, 0xF0, 0x80, 0x07, 0xE4, 0x90,
61610 +0x8A, 0xDB, 0xF0, 0xA3, 0xF0, 0x90, 0x8A, 0xE0, 0xE0, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0x90,
61611 +0x8A, 0xDD, 0xE0, 0x24, 0x20, 0xF0, 0x90, 0x8A, 0xDB, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFC, 0x2D,
61612 +0xFF, 0x24, 0x01, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0x8A, 0xFD, 0xF0, 0x74,
61613 +0x02, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFE, 0xEC, 0x2D, 0x24, 0x03, 0xF5,
61614 +0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x24, 0x00, 0xFF, 0xE4, 0x3E, 0x90, 0x8A, 0xFE, 0xF0,
61615 +0xA3, 0xEF, 0xF0, 0x90, 0x8A, 0xDA, 0x74, 0x04, 0xF0, 0x90, 0x8A, 0xDB, 0xA3, 0xE0, 0xFF, 0xA3,
61616 +0xE0, 0x2F, 0xFF, 0x90, 0x8A, 0xDA, 0xE0, 0xFE, 0x2F, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
61617 +0xF5, 0x83, 0xE0, 0xFF, 0x74, 0xFC, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEF, 0xF0,
61618 +0x90, 0x8A, 0xDA, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x08, 0xCF, 0x11, 0x89, 0xEF, 0x70, 0x45, 0x90,
61619 +0x01, 0xC3, 0xE0, 0x60, 0x2B, 0xC3, 0x90, 0x8A, 0xE3, 0xE0, 0x94, 0xE8, 0x90, 0x8A, 0xE2, 0xE0,
61620 +0x94, 0x03, 0x40, 0x09, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x10, 0xF0, 0x80, 0x79, 0x90, 0x8A, 0xE2,
61621 +0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x81, 0x7F, 0x0A, 0x7E, 0x00, 0x12, 0x32, 0x15, 0x80, 0xCF,
61622 +0x90, 0x01, 0xC6, 0xE0, 0x90, 0x01, 0xC3, 0x30, 0xE2, 0x05, 0x74, 0xFE, 0xF0, 0x80, 0x57, 0x74,
61623 +0xFF, 0xF0, 0x80, 0x52, 0x90, 0x8A, 0xDD, 0xE0, 0xB4, 0x78, 0x2E, 0xE4, 0xF0, 0x90, 0x8A, 0xE0,
61624 +0xE0, 0x04, 0xF0, 0x90, 0x8A, 0xDB, 0xE0, 0x70, 0x04, 0xA3, 0xE0, 0x64, 0x80, 0x90, 0x8A, 0xDB,
61625 +0x70, 0x05, 0xF0, 0xA3, 0xF0, 0x80, 0x06, 0xE4, 0xF0, 0xA3, 0x74, 0x80, 0xF0, 0x90, 0x8A, 0xE0,
61626 +0xE0, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0x80, 0x07, 0x90, 0x8A, 0xDD, 0xE0, 0x24, 0x08, 0xF0,
61627 +0x90, 0x8A, 0xDE, 0x74, 0xFF, 0xF5, 0xF0, 0x12, 0x42, 0x81, 0x90, 0x8A, 0xDE, 0xE0, 0x70, 0x02,
61628 +0xA3, 0xE0, 0x60, 0x02, 0x61, 0x16, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x24, 0x62, 0x90, 0x8B,
61629 +0x05, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x42, 0x20, 0x90, 0x8B, 0x06, 0xF0, 0x22, 0xE4, 0xF5, 0x61,
61630 +0x22, 0x91, 0x4A, 0x90, 0x8B, 0x33, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0,
61631 +0x7F, 0x78, 0x7E, 0x08, 0x12, 0x22, 0x65, 0x90, 0x8B, 0x1C, 0x12, 0x25, 0x08, 0x7F, 0x04, 0x7E,
61632 +0x0C, 0x12, 0x22, 0x65, 0x90, 0x8B, 0x20, 0x12, 0x25, 0x08, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x22,
61633 +0x65, 0x90, 0x8B, 0x24, 0x12, 0x25, 0x08, 0x90, 0x8B, 0x09, 0xE0, 0x90, 0x8B, 0x1C, 0xB4, 0x01,
61634 +0x0D, 0x12, 0x43, 0x53, 0xEF, 0x54, 0xC7, 0xFF, 0xED, 0x54, 0xC7, 0xFD, 0x80, 0x07, 0x12, 0x43,
61635 +0x53, 0xEF, 0x54, 0xC7, 0xFF, 0xEC, 0x90, 0x80, 0x96, 0x12, 0x25, 0x08, 0x7F, 0x78, 0x7E, 0x08,
61636 +0x12, 0x2B, 0x08, 0x90, 0x8B, 0x20, 0x12, 0x43, 0x53, 0xEF, 0x54, 0x0F, 0xFF, 0xEC, 0x90, 0x80,
61637 +0x96, 0x12, 0x25, 0x08, 0x7F, 0x04, 0x7E, 0x0C, 0x12, 0x2B, 0x08, 0x90, 0x8B, 0x24, 0x12, 0x43,
61638 +0x53, 0xEF, 0x44, 0x02, 0xFF, 0xEC, 0x90, 0x80, 0x96, 0x12, 0x25, 0x08, 0x7F, 0x00, 0x7E, 0x08,
61639 +0x12, 0x2B, 0x08, 0x7F, 0x70, 0x7E, 0x0E, 0x12, 0x22, 0x65, 0x90, 0x8B, 0x28, 0x12, 0x25, 0x08,
61640 +0x90, 0x80, 0x96, 0x12, 0x25, 0x14, 0x00, 0x1B, 0x25, 0xA0, 0x7F, 0x70, 0x7E, 0x0E, 0x12, 0x2B,
61641 +0x08, 0x90, 0x80, 0x68, 0x12, 0x25, 0x14, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xFD, 0xFF, 0x12, 0x30,
61642 +0x2C, 0x90, 0x8B, 0x09, 0xE0, 0xB4, 0x01, 0x11, 0x90, 0x80, 0x68, 0x12, 0x25, 0x14, 0x00, 0x00,
61643 +0x00, 0x00, 0xE4, 0xFD, 0x7F, 0x01, 0x12, 0x30, 0x2C, 0x90, 0x00, 0x11, 0xE0, 0x54, 0xF6, 0xF0,
61644 +0x02, 0x52, 0x0E, 0x91, 0x50, 0x90, 0x8B, 0x33, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x05, 0x22, 0x74,
61645 +0xFF, 0xF0, 0x90, 0x8B, 0x33, 0x74, 0x04, 0xF0, 0x22, 0xB1, 0x42, 0x90, 0x8B, 0x33, 0x74, 0x04,
61646 +0xF0, 0x22, 0x90, 0x00, 0x11, 0xE0, 0x44, 0x09, 0xF0, 0x12, 0x52, 0x0E, 0x90, 0x8B, 0x1C, 0x12,
61647 +0x43, 0x53, 0x90, 0x80, 0x96, 0x12, 0x25, 0x08, 0x7F, 0x78, 0x7E, 0x08, 0x12, 0x2B, 0x08, 0x90,
61648 +0x8B, 0x20, 0x12, 0x43, 0x53, 0x90, 0x80, 0x96, 0x12, 0x25, 0x08, 0x7F, 0x04, 0x7E, 0x0C, 0x12,
61649 +0x2B, 0x08, 0x90, 0x8B, 0x24, 0x12, 0x43, 0x53, 0x90, 0x80, 0x96, 0x12, 0x25, 0x08, 0x7F, 0x00,
61650 +0x7E, 0x08, 0x12, 0x2B, 0x08, 0x90, 0x8B, 0x28, 0x12, 0x43, 0x53, 0x90, 0x80, 0x96, 0x12, 0x25,
61651 +0x08, 0x7F, 0x70, 0x7E, 0x0E, 0x12, 0x2B, 0x08, 0x90, 0x80, 0x68, 0x12, 0x25, 0x14, 0x00, 0x03,
61652 +0x2D, 0x95, 0xE4, 0xFD, 0xFF, 0x12, 0x30, 0x2C, 0x90, 0x8B, 0x09, 0xE0, 0xB4, 0x01, 0x11, 0x90,
61653 +0x80, 0x68, 0x12, 0x25, 0x14, 0x00, 0x03, 0x2D, 0x95, 0xE4, 0xFD, 0x7F, 0x01, 0x12, 0x30, 0x2C,
61654 +0x22, 0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x06, 0x60, 0x3C, 0xE5, 0x22, 0x54, 0x0F, 0x14, 0x60, 0x2E,
61655 +0x14, 0x60, 0x1E, 0x24, 0xFE, 0x60, 0x0E, 0x24, 0xF8, 0x70, 0x2A, 0xE4, 0x90, 0x8B, 0x2D, 0xF0,
61656 +0x90, 0x05, 0x22, 0xF0, 0x22, 0x90, 0x8B, 0x2D, 0x74, 0x01, 0xF0, 0x90, 0x05, 0x22, 0xE4, 0xF0,
61657 +0x22, 0x90, 0x8B, 0x2D, 0x74, 0x03, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x22, 0x90, 0x01,
61658 +0xC6, 0xE0, 0x44, 0x08, 0xF0, 0x22, 0xAE, 0x07, 0xE4, 0xFF, 0x12, 0x4D, 0xE0, 0xEF, 0x60, 0x18,
61659 +0x90, 0x8B, 0x2C, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x0C, 0xAF, 0x06, 0x7D, 0x01,
61660 +0x12, 0x45, 0xA2, 0xB1, 0xC1, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0x90, 0x01, 0x57, 0xE0, 0x60,
61661 +0x3C, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90, 0x8B, 0x1B, 0xE0,
61662 +0x60, 0x07, 0xE4, 0xF0, 0x53, 0x25, 0xFD, 0x80, 0x24, 0x90, 0x8B, 0x0C, 0xE0, 0x04, 0xF0, 0x53,
61663 +0x25, 0xEF, 0x90, 0x8B, 0x10, 0xE0, 0xFF, 0x90, 0x8B, 0x0C, 0xE0, 0xD3, 0x9F, 0x40, 0x0E, 0xE5,
61664 +0x21, 0xB4, 0x01, 0x09, 0x90, 0x8B, 0x0D, 0xE0, 0x70, 0x03, 0xE0, 0x04, 0xF0, 0x90, 0x01, 0x5B,
61665 +0xE0, 0x60, 0x10, 0x90, 0x01, 0x5B, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x04, 0xF0, 0xE4, 0x90,
61666 +0x8B, 0x18, 0xF0, 0x90, 0x01, 0x5F, 0xE0, 0x60, 0x10, 0x90, 0x01, 0x5F, 0xE4, 0xF0, 0x90, 0x01,
61667 +0x3C, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0x8B, 0x17, 0xF0, 0x22, 0xE4, 0x90, 0x8B, 0x4F, 0xF0, 0xA3,
61668 +0xF0, 0x90, 0x05, 0xF8, 0xE0, 0x70, 0x0F, 0xA3, 0xE0, 0x70, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xA3,
61669 +0xE0, 0x70, 0x03, 0x7F, 0x01, 0x22, 0xD3, 0x90, 0x8B, 0x50, 0xE0, 0x94, 0xE8, 0x90, 0x8B, 0x4F,
61670 +0xE0, 0x94, 0x03, 0x40, 0x03, 0x7F, 0x00, 0x22, 0x7F, 0x32, 0x7E, 0x00, 0x12, 0x32, 0x15, 0x90,
61671 +0x8B, 0x4F, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x81, 0x80, 0xC6, 0x00, 0xFB, 0x98};
61672
61673 -// ===================8723=========================================
61674 -u8 Rtl8192CUFwUMC8723ImgArray[UMC8723ImgArrayLength] = {
61675 -0xc1,0x88,0x02,0x00,0x39,0x00,0x01,0x00,0x09,0x09,0x16,0x47,0x80,0x3f,0x00,0x00,
61676 -0x29,0x29,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
61677 -0x02,0x74,0xc9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
61678 -0x00,0x00,0x00,0x02,0x59,0xd0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
61679 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
61680 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
61681 -0x00,0x00,0x00,0x02,0x73,0xab,0x00,0x00,0x00,0x00,0x00,0x02,0x67,0xfe,0x00,0x00,
61682 -0x05,0x04,0x03,0x02,0x00,0x03,0x06,0x05,0x04,0x03,0x00,0x04,0x06,0x05,0x04,0x02,
61683 -0x00,0x04,0x08,0x07,0x06,0x04,0x00,0x06,0x0a,0x09,0x08,0x06,0x00,0x08,0x0a,0x09,
61684 -0x08,0x04,0x00,0x08,0x0a,0x09,0x08,0x02,0x00,0x08,0x0a,0x09,0x08,0x00,0x00,0x08,
61685 -0x12,0x11,0x10,0x08,0x00,0x10,0x1a,0x19,0x18,0x10,0x00,0x18,0x22,0x21,0x20,0x18,
61686 -0x00,0x20,0x22,0x21,0x20,0x10,0x00,0x20,0x22,0x21,0x20,0x08,0x00,0x20,0x22,0x21,
61687 -0x1c,0x08,0x00,0x20,0x22,0x21,0x14,0x08,0x00,0x20,0x22,0x20,0x18,0x08,0x00,0x20,
61688 -0x31,0x30,0x20,0x10,0x00,0x30,0x31,0x30,0x18,0x00,0x00,0x30,0x31,0x2f,0x10,0x10,
61689 -0x00,0x30,0x31,0x2c,0x10,0x10,0x00,0x30,0x31,0x28,0x10,0x00,0x00,0x30,0x31,0x20,
61690 -0x10,0x00,0x00,0x30,0x31,0x10,0x10,0x00,0x00,0x30,0x05,0x05,0x05,0x05,0x05,0x05,
61691 -0x05,0x07,0x07,0x07,0x08,0x0a,0x05,0x05,0x05,0x07,0x07,0x0a,0x0d,0x0e,0x05,0x05,
61692 -0x07,0x07,0x08,0x0c,0x14,0x14,0x05,0x05,0x05,0x05,0x09,0x09,0x09,0x09,0x0c,0x0e,
61693 -0x13,0x13,0x09,0x09,0x0a,0x0b,0x0d,0x11,0x13,0x13,0x09,0x09,0x09,0x09,0x0c,0x14,
61694 -0x15,0x15,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x06,0x06,0x06,0x06,0x06,0x05,0x05,
61695 -0x05,0x06,0x06,0x06,0x06,0x06,0x05,0x05,0x06,0x06,0x06,0x06,0x06,0x06,0x05,0x05,
61696 -0x05,0x05,0x09,0x09,0x09,0x09,0x0b,0x0d,0x10,0x12,0x05,0x09,0x0a,0x0c,0x0d,0x0e,
61697 -0x10,0x12,0x09,0x09,0x0e,0x0e,0x10,0x10,0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00,
61698 -0x00,0x00,0x00,0x24,0x26,0x2a,0x18,0x1a,0x1d,0x1f,0x21,0x27,0x29,0x2a,0x00,0x00,
61699 -0x00,0x1f,0x23,0x28,0x2a,0x2c,0x00,0x04,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x18,
61700 -0x00,0x24,0x00,0x30,0x00,0x48,0x00,0x60,0x00,0x90,0x00,0xc0,0x00,0xd8,0x00,0x50,
61701 -0x00,0x78,0x00,0xa0,0x00,0xc8,0x01,0x40,0x01,0x90,0x01,0xe0,0x02,0x30,0x01,0x2c,
61702 -0x01,0x40,0x01,0xe0,0x02,0xd0,0x03,0xe8,0x04,0xb0,0x06,0x40,0x07,0xd0,0x00,0x02,
61703 -0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x0c,0x00,0x12,0x00,0x18,0x00,0x24,0x00,0x30,
61704 -0x00,0x48,0x00,0x60,0x00,0x6c,0x00,0x28,0x00,0x3c,0x00,0x50,0x00,0x64,0x00,0xa0,
61705 -0x00,0xc8,0x00,0xf0,0x01,0x18,0x00,0x64,0x00,0xa0,0x00,0xf0,0x01,0x68,0x01,0xf4,
61706 -0x02,0x58,0x03,0x20,0x03,0xe8,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,
61707 -0x07,0x08,0x01,0x02,0x03,0x04,0x08,0x0f,0x23,0x3c,0x05,0x06,0x07,0x0f,0x19,0x32,
61708 -0x4b,0x64,0x01,0x01,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x01,0x02,
61709 -0x03,0x04,0x05,0x06,0x07,0x08,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x22,0x1f,
61710 -0x1e,0x18,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
61711 -0x8f,0x17,0x74,0x42,0x90,0x01,0xc4,0xf0,0xa3,0x74,0x20,0xf0,0x74,0x84,0x25,0x17,
61712 -0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,0x7f,0x90,0x97,0x54,0xf0,0xe0,0xfb,
61713 -0x54,0x1f,0xff,0xa3,0xf0,0xe5,0x17,0x75,0xf0,0x08,0xa4,0x24,0x67,0xf5,0x82,0xe4,
61714 -0x34,0x93,0xf5,0x83,0xe0,0xfe,0x90,0x97,0x57,0xf0,0xe5,0x17,0x25,0xe0,0x24,0x81,
61715 -0xf5,0x82,0xe4,0x34,0x92,0xf5,0x83,0xe0,0xfd,0xa3,0xe0,0x90,0x97,0x58,0xcd,0xf0,
61716 -0xa3,0xed,0xf0,0xe5,0x17,0x25,0xe0,0x24,0xe4,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,
61717 -0xe0,0xfd,0xa3,0xe0,0x90,0x97,0x5a,0xcd,0xf0,0xa3,0xed,0xf0,0xef,0xc3,0x9e,0x40,
61718 -0x03,0x02,0x43,0x56,0x90,0x01,0xc5,0x74,0x20,0xf0,0x90,0x97,0x55,0xe0,0xff,0x74,
61719 -0xa5,0x25,0x17,0xf5,0x82,0xe4,0x34,0x96,0xf5,0x83,0xef,0xf0,0xef,0x04,0x90,0x97,
61720 -0x56,0xf0,0x90,0x97,0x57,0xe0,0xff,0x90,0x97,0x56,0xe0,0xfe,0xd3,0x9f,0x40,0x03,
61721 -0x02,0x43,0xa0,0xee,0xc3,0x94,0x10,0x40,0x21,0xee,0x24,0xf0,0xff,0x74,0x01,0x7e,
61722 -0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x97,
61723 -0x58,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x70,0x27,0x90,0x97,0x56,0xe0,0xff,0xc3,
61724 -0x94,0x10,0x50,0x59,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,
61725 -0x33,0xce,0xd8,0xf9,0xff,0x90,0x97,0x5a,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,
61726 -0x3c,0x90,0x97,0x56,0xe0,0xb4,0x11,0x0d,0x90,0x97,0x59,0xe0,0x30,0xe7,0x06,0x90,
61727 -0x97,0x56,0x74,0x17,0xf0,0x90,0x97,0x56,0xe0,0xff,0x64,0x13,0x60,0x04,0xef,0xb4,
61728 -0x12,0x0d,0x90,0x97,0x58,0xe0,0x30,0xe0,0x06,0x90,0x97,0x56,0x74,0x18,0xf0,0x90,
61729 -0x97,0x56,0xe0,0x90,0x97,0x55,0xf0,0x90,0x97,0x54,0xf0,0x80,0x53,0x90,0x97,0x56,
61730 -0xe0,0x04,0xf0,0x02,0x42,0xb2,0x90,0x97,0x57,0xe0,0xf9,0x90,0x97,0x55,0xe0,0xff,
61731 -0x69,0x60,0x03,0x02,0x43,0xe8,0x90,0x01,0xc5,0x74,0x40,0xf0,0x74,0xa5,0x25,0x17,
61732 -0xf5,0x82,0xe4,0x34,0x96,0xf5,0x83,0xef,0xf0,0xe5,0x17,0x75,0xf0,0x08,0xa4,0x24,
61733 -0x69,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe0,0xb4,0x01,0x14,0xeb,0x30,0xe6,0x06,
61734 -0x90,0x97,0x54,0xe0,0xff,0x22,0x90,0x97,0x55,0xe0,0x44,0x40,0x90,0x97,0x54,0xf0,
61735 -0x90,0x97,0x55,0xe0,0xff,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,
61736 -0xe4,0x93,0xfc,0x74,0x01,0x93,0xfd,0xef,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,
61737 -0x41,0xf5,0x83,0x74,0x01,0x93,0x2d,0xff,0xe4,0x93,0x3c,0xc3,0x13,0xfe,0xef,0x13,
61738 -0xff,0xe4,0xfc,0xfd,0xe5,0x17,0x25,0xe0,0x25,0xe0,0x24,0xe1,0xf5,0x82,0xe4,0x34,
61739 -0x92,0xf5,0x83,0x12,0x1d,0xa9,0x80,0x71,0x90,0x97,0x55,0xe0,0xd3,0x99,0x40,0x69,
61740 -0x90,0x01,0xc5,0x74,0x60,0xf0,0x90,0x97,0x57,0xe0,0xff,0x74,0xa5,0x25,0x17,0xf5,
61741 -0x82,0xe4,0x34,0x96,0xf5,0x83,0xef,0xf0,0x90,0x97,0x55,0xef,0xf0,0x90,0x97,0x54,
61742 -0xf0,0xfb,0xa3,0xe0,0xff,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,
61743 -0xe4,0x93,0xfc,0x74,0x01,0x93,0xfd,0xef,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,
61744 -0x41,0xf5,0x83,0x74,0x01,0x93,0x2d,0xff,0xe4,0x93,0x3c,0xc3,0x13,0xfe,0xef,0x13,
61745 -0xff,0xe4,0xfc,0xfd,0xe5,0x17,0x25,0xe0,0x25,0xe0,0x24,0xe1,0xf5,0x82,0xe4,0x34,
61746 -0x92,0xf5,0x83,0x12,0x1d,0xa9,0xaf,0x03,0x22,0x74,0x01,0x25,0x17,0xf5,0x82,0xe4,
61747 -0x34,0x92,0xf5,0x83,0xe4,0xf0,0x90,0x97,0x54,0xe0,0x44,0x80,0xff,0x74,0x84,0x25,
61748 -0x17,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xef,0xf0,0x22,0xef,0x14,0x60,0x20,0x14,
61749 -0x60,0x4b,0x24,0x02,0x70,0x78,0x90,0x97,0x69,0x74,0x02,0xf0,0x90,0x00,0x48,0xe0,
61750 -0x44,0x0c,0xf0,0x90,0x00,0x47,0xe0,0x44,0x08,0xf0,0x90,0x00,0x45,0x80,0x5b,0xe4,
61751 -0x90,0x97,0x69,0xf0,0x90,0x97,0x65,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,
61752 -0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x80,0x7e,0x08,0x12,0x33,0xd8,0x90,
61753 -0x00,0x45,0xe0,0x44,0xef,0xf0,0xe0,0x54,0xef,0xf0,0xa3,0x80,0x2d,0x90,0x97,0x69,
61754 -0x74,0x01,0xf0,0x90,0x97,0x6f,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,
61755 -0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x80,0x7e,0x08,0x12,0x33,0xd8,0x90,0x00,
61756 -0x45,0xe0,0x44,0x20,0xf0,0xe0,0x44,0x10,0xf0,0xa3,0xe0,0x44,0x10,0xf0,0x22,0xe4,
61757 -0xf5,0x61,0x22,0x02,0x7f,0x69,0x02,0x7f,0x70,0x74,0x45,0x90,0x01,0xc4,0xf0,0xa3,
61758 -0x74,0x09,0xf0,0xe4,0x90,0x97,0x3a,0xf0,0x90,0x97,0x3a,0xe0,0xff,0xc3,0x94,0x20,
61759 -0x40,0x03,0x02,0x4e,0x3a,0xef,0x75,0xf0,0x08,0xa4,0x24,0x6a,0xf5,0x82,0xe4,0x34,
61760 -0x93,0xf5,0x83,0xe0,0x64,0x01,0x60,0x03,0x02,0x4e,0x31,0x90,0x97,0x3a,0xe0,0x25,
61761 -0xe0,0x24,0xc0,0xf5,0x82,0xe4,0x34,0x91,0xf5,0x83,0xe0,0xfc,0xa3,0xe0,0xd3,0x94,
61762 -0x00,0xec,0x94,0x00,0x50,0x03,0x02,0x4e,0x31,0xef,0x75,0xf0,0x0a,0xa4,0x24,0x00,
61763 -0xf9,0x74,0x90,0x35,0xf0,0xfa,0x7b,0x01,0x8b,0x13,0xf5,0x14,0x89,0x15,0x90,0x97,
61764 -0x3a,0xe0,0x25,0xe0,0x24,0xc0,0xf5,0x82,0xe4,0x34,0x91,0xf5,0x83,0xe0,0xfd,0xa3,
61765 -0xe0,0x90,0x97,0x46,0xcd,0xf0,0xa3,0xed,0xf0,0xef,0x25,0xe0,0x24,0x63,0xf5,0x82,
61766 -0xe4,0x34,0x94,0xf5,0x83,0xe0,0xff,0xa3,0xe0,0x90,0x97,0x48,0xcf,0xf0,0xa3,0xef,
61767 -0xf0,0x90,0x00,0x02,0x12,0x66,0x20,0xff,0xae,0xf0,0x12,0x65,0xf5,0x2f,0xff,0xe5,
61768 -0xf0,0x3e,0x90,0x97,0x4f,0xf0,0xa3,0xef,0xf0,0x90,0x00,0x06,0x12,0x66,0x20,0xff,
61769 -0xae,0xf0,0x90,0x00,0x04,0x12,0x66,0x20,0x2f,0xff,0xe5,0xf0,0x3e,0x90,0x97,0x4d,
61770 -0xf0,0xa3,0xef,0xf0,0x90,0x00,0x08,0x12,0x66,0x20,0xff,0x90,0x97,0x4b,0xe5,0xf0,
61771 -0xf0,0xa3,0xef,0xf0,0x90,0x97,0x3a,0xe0,0xfe,0x24,0x84,0xf5,0x82,0xe4,0x34,0x04,
61772 -0xf5,0x83,0xe0,0x54,0x3f,0x90,0x97,0x3c,0xf0,0xe0,0xfd,0x54,0x1f,0xa3,0xf0,0xee,
61773 -0x75,0xf0,0x08,0xa4,0x24,0x67,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe0,0x90,0x97,
61774 -0x51,0xf0,0x90,0x97,0x3a,0xe0,0xfb,0x24,0x64,0xf5,0x82,0xe4,0x34,0x96,0xf5,0x83,
61775 -0xe0,0xc3,0x94,0x05,0x40,0x03,0x02,0x49,0xc2,0x90,0x97,0x51,0xe0,0xfe,0x90,0x97,
61776 -0x3d,0xe0,0x9e,0x40,0x13,0x90,0x97,0x51,0xe0,0x90,0x97,0x3d,0xf0,0xed,0x54,0x40,
61777 -0xfd,0x90,0x97,0x3c,0xf0,0xee,0x4d,0xf0,0x90,0x04,0xfd,0xe0,0x64,0x01,0x70,0x28,
61778 -0x90,0x97,0x3d,0xe0,0xff,0x90,0x41,0x4a,0x93,0xfe,0x74,0x23,0x2b,0xf5,0x82,0xe4,
61779 -0x34,0x95,0xf5,0x83,0xe0,0xc3,0x9e,0x40,0x06,0xef,0x90,0x41,0x12,0x80,0x32,0x90,
61780 -0x97,0x3d,0xe0,0x90,0x41,0x2e,0x80,0x29,0x90,0x97,0x3d,0xe0,0xff,0x90,0x41,0x4a,
61781 -0x93,0xfe,0x90,0x97,0x3a,0xe0,0x24,0x23,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,
61782 -0xc3,0x9e,0x40,0x06,0xef,0x90,0x40,0xda,0x80,0x07,0x90,0x97,0x3d,0xe0,0x90,0x40,
61783 -0xf6,0x93,0x90,0x97,0x4a,0xf0,0x90,0x97,0x4a,0xe0,0x75,0xf0,0x06,0xa4,0x24,0x50,
61784 -0xf9,0x74,0x40,0x35,0xf0,0x75,0x10,0xff,0xf5,0x11,0x89,0x12,0x90,0x97,0x3c,0xe0,
61785 -0x90,0x41,0xf2,0x93,0xff,0xd3,0x90,0x97,0x49,0xe0,0x9f,0x90,0x97,0x48,0xe0,0x94,
61786 -0x00,0x40,0x0d,0x90,0x97,0x3a,0xe0,0xff,0xe4,0xfd,0x12,0x5f,0x6d,0x02,0x4d,0xc7,
61787 -0x90,0x97,0x3a,0xe0,0x25,0xe0,0x25,0xe0,0x24,0xe1,0xf5,0x82,0xe4,0x34,0x92,0xf5,
61788 -0x83,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x97,0x3e,0x12,
61789 -0x1d,0xa9,0x90,0x97,0x3e,0xe0,0xf8,0xa3,0xe0,0xf9,0xa3,0xe0,0xfa,0xa3,0xe0,0xfb,
61790 -0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xab,0x10,0xaa,0x11,0xa9,0x12,0x12,0x1c,
61791 -0xd6,0xff,0x7e,0x00,0xab,0x13,0xaa,0x14,0xa9,0x15,0x12,0x65,0xf5,0xfd,0xac,0xf0,
61792 -0x12,0x1d,0x1c,0xe4,0xfc,0xfd,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xeb,0x2f,
61793 -0xff,0xea,0x3e,0xfe,0xed,0x39,0xfd,0xec,0x38,0xfc,0x90,0x97,0x3e,0x12,0x1d,0xa9,
61794 -0x90,0x97,0x3e,0xe0,0xf8,0xa3,0xe0,0xf9,0xa3,0xe0,0xfa,0xa3,0xe0,0xfb,0xc0,0x00,
61795 -0xc0,0x01,0xc0,0x02,0xc0,0x03,0xab,0x10,0xaa,0x11,0xa9,0x12,0x90,0x00,0x01,0x12,
61796 -0x1c,0xef,0xff,0x7e,0x00,0xab,0x13,0xaa,0x14,0xa9,0x15,0x90,0x00,0x02,0x12,0x66,
61797 -0x20,0xfd,0xac,0xf0,0x12,0x1d,0x1c,0xe4,0xfc,0xfd,0xd0,0x03,0xd0,0x02,0xd0,0x01,
61798 -0xd0,0x00,0xeb,0x2f,0xff,0xea,0x3e,0xfe,0xed,0x39,0xfd,0xec,0x38,0xfc,0x90,0x97,
61799 -0x3e,0x12,0x1d,0xa9,0x90,0x97,0x3e,0xe0,0xf8,0xa3,0xe0,0xf9,0xa3,0xe0,0xfa,0xa3,
61800 -0xe0,0xfb,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xab,0x10,0xaa,0x11,0xa9,0x12,
61801 -0x90,0x00,0x02,0x12,0x1c,0xef,0xff,0x7e,0x00,0xab,0x13,0xaa,0x14,0xa9,0x15,0x90,
61802 -0x00,0x04,0x12,0x66,0x20,0xfd,0xac,0xf0,0x12,0x1d,0x1c,0xe4,0xfc,0xfd,0xd0,0x03,
61803 -0xd0,0x02,0xd0,0x01,0xd0,0x00,0xeb,0x2f,0xff,0xea,0x3e,0xfe,0xed,0x39,0xfd,0xec,
61804 -0x38,0xfc,0x90,0x97,0x3e,0x12,0x1d,0xa9,0x90,0x97,0x3e,0xe0,0xf8,0xa3,0xe0,0xf9,
61805 -0xa3,0xe0,0xfa,0xa3,0xe0,0xfb,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xab,0x10,
61806 -0xaa,0x11,0xa9,0x12,0x90,0x00,0x03,0x12,0x1c,0xef,0xff,0x7e,0x00,0xab,0x13,0xaa,
61807 -0x14,0xa9,0x15,0x90,0x00,0x06,0x12,0x66,0x20,0xfd,0xac,0xf0,0x12,0x1d,0x1c,0xe4,
61808 -0xfc,0xfd,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xeb,0x2f,0xff,0xea,0x3e,0xfe,
61809 -0xed,0x39,0xfd,0xec,0x38,0xfc,0x90,0x97,0x3e,0x12,0x1d,0xa9,0x90,0x97,0x3e,0xe0,
61810 -0xf8,0xa3,0xe0,0xf9,0xa3,0xe0,0xfa,0xa3,0xe0,0xfb,0xc0,0x00,0xc0,0x01,0xc0,0x02,
61811 -0xc0,0x03,0xab,0x10,0xaa,0x11,0xa9,0x12,0x90,0x00,0x04,0x12,0x1c,0xef,0xff,0x7e,
61812 -0x00,0xab,0x13,0xaa,0x14,0xa9,0x15,0x90,0x00,0x08,0x12,0x66,0x20,0xfd,0xac,0xf0,
61813 -0x12,0x1d,0x1c,0xe4,0xfc,0xfd,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xeb,0x2f,
61814 -0xff,0xea,0x3e,0xfe,0xed,0x39,0xfd,0xec,0x38,0xfc,0x90,0x97,0x3e,0x12,0x1d,0xa9,
61815 -0xab,0x10,0xaa,0x11,0xa9,0x12,0x90,0x00,0x05,0x12,0x1c,0xef,0xff,0x7e,0x00,0x90,
61816 -0x97,0x46,0xe0,0xfc,0xa3,0xe0,0xfd,0x12,0x1d,0x1c,0xe4,0xfc,0xfd,0x90,0x97,0x3e,
61817 -0xe0,0xf8,0xa3,0xe0,0xf9,0xa3,0xe0,0xfa,0xa3,0xe0,0xfb,0xd3,0x12,0x66,0xa4,0x90,
61818 -0x97,0x3e,0x40,0x50,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0xc0,
61819 -0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0xab,0x10,0xaa,0x11,0xa9,0x12,0x90,0x00,0x05,
61820 -0x12,0x1c,0xef,0xff,0x7e,0x00,0x90,0x97,0x46,0xe0,0xfc,0xa3,0xe0,0xfd,0x12,0x1d,
61821 -0x1c,0xab,0x07,0xaa,0x06,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xc3,0xef,0x9b,
61822 -0xff,0xee,0x9a,0xfe,0xed,0x94,0x00,0xfd,0xec,0x94,0x00,0xfc,0x90,0x97,0x3e,0x12,
61823 -0x1d,0xa9,0x80,0x07,0x12,0x1d,0xb5,0x00,0x00,0x00,0x00,0x90,0x97,0x3e,0xe0,0xfc,
61824 -0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x97,0x3a,0xe0,0x25,0xe0,0x25,
61825 -0xe0,0x24,0xe1,0xf5,0x82,0xe4,0x34,0x92,0xf5,0x83,0x12,0x1d,0xa9,0x90,0x97,0x3c,
61826 -0xe0,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,
61827 -0x01,0x93,0xff,0xe4,0xfc,0xfd,0x90,0x97,0x3e,0xe0,0xf8,0xa3,0xe0,0xf9,0xa3,0xe0,
61828 -0xfa,0xa3,0xe0,0xfb,0xd3,0x12,0x66,0xa4,0x40,0x0b,0x90,0x97,0x3a,0xe0,0xff,0x12,
61829 -0x42,0x20,0x02,0x4d,0x3e,0x90,0x97,0x3c,0xe0,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,
61830 -0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xe4,0xfc,0xfd,0x90,0x97,
61831 -0x3e,0xe0,0xf8,0xa3,0xe0,0xf9,0xa3,0xe0,0xfa,0xa3,0xe0,0xfb,0xc3,0x12,0x66,0xa4,
61832 -0x40,0x03,0x02,0x4d,0x3e,0x90,0x97,0x3a,0xe0,0xff,0x7d,0x01,0x12,0x5f,0x6d,0x02,
61833 -0x4d,0x3e,0x90,0x97,0x3a,0xe0,0xff,0x24,0x64,0xf5,0x82,0xe4,0x34,0x96,0xf5,0x83,
61834 -0xe0,0x64,0x05,0x60,0x03,0x02,0x4b,0x8e,0x90,0x04,0xb3,0xe0,0x64,0x01,0x70,0x03,
61835 -0x02,0x4b,0x8e,0x90,0x93,0x62,0xe0,0xfe,0xb4,0x03,0x0b,0x90,0x97,0x3d,0xe0,0xc3,
61836 -0x94,0x19,0x40,0x3d,0x80,0x2e,0xee,0xb4,0x02,0x0b,0x90,0x97,0x3d,0xe0,0xc3,0x94,
61837 -0x11,0x40,0x2e,0x80,0x1f,0x90,0x93,0x62,0xe0,0xfe,0xb4,0x01,0x0b,0x90,0x97,0x3d,
61838 -0xe0,0xc3,0x94,0x0a,0x40,0x1b,0x80,0x0c,0xee,0x70,0x11,0x90,0x97,0x3d,0xe0,0xc3,
61839 -0x94,0x03,0x40,0x0d,0x90,0x95,0x43,0x74,0x01,0xf0,0x80,0x05,0xe4,0x90,0x95,0x43,
61840 -0xf0,0x74,0x23,0x2f,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xff,0xc3,0x94,0x30,
61841 -0x50,0x03,0x02,0x4b,0x2d,0x90,0x95,0x43,0xe0,0x64,0x01,0x60,0x03,0x02,0x4b,0x2d,
61842 -0x90,0x97,0x3a,0xe0,0x24,0x44,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0x64,0x0a,
61843 -0x60,0x56,0x90,0x97,0x3a,0xe0,0xfe,0xef,0x24,0x05,0xfd,0xe4,0x33,0xfc,0x74,0x21,
61844 -0x2e,0xf5,0x82,0xe4,0x34,0x92,0xf5,0x83,0xe0,0xff,0xd3,0x9d,0xec,0x64,0x80,0xf8,
61845 -0x74,0x80,0x98,0x50,0x33,0xef,0x24,0x05,0xfd,0xe4,0x33,0xfc,0x74,0x23,0x2e,0xf5,
61846 -0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xd3,0x9d,0xec,0x64,0x80,0xf8,0x74,0x80,0x98,
61847 -0x50,0x16,0x90,0x97,0x3a,0xe0,0x24,0x84,0xf5,0x82,0xe4,0x34,0x96,0xf5,0x83,0xe0,
61848 -0xff,0x90,0x97,0x3d,0xe0,0x6f,0x60,0x56,0x90,0x97,0x3a,0xe0,0x24,0x23,0xf5,0x82,
61849 -0xe4,0x34,0x95,0xf5,0x83,0xe0,0xff,0xd3,0x94,0x46,0x40,0x08,0x90,0x97,0x52,0x74,
61850 -0x05,0xf0,0x80,0x11,0xef,0xd3,0x94,0x3c,0x90,0x97,0x52,0x40,0x05,0x74,0x03,0xf0,
61851 -0x80,0x03,0x74,0x01,0xf0,0x90,0x97,0x3a,0xe0,0xff,0x24,0x23,0xf5,0x82,0xe4,0x34,
61852 -0x95,0xf5,0x83,0xe0,0xfe,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0x92,0xf5,0x83,0xee,
61853 -0xf0,0x90,0x97,0x3a,0xe0,0x24,0x44,0xf5,0x82,0xe4,0x34,0x95,0x80,0x2f,0x90,0x97,
61854 -0x3a,0xe0,0xff,0x24,0x64,0xf5,0x82,0xe4,0x34,0x96,0xf5,0x83,0xe4,0xf0,0x74,0x44,
61855 -0x2f,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0x04,0xf0,0x80,0x14,0xe4,0x90,0x97,
61856 -0x52,0xf0,0x90,0x97,0x3a,0xe0,0x24,0x64,0xf5,0x82,0xe4,0x34,0x96,0xf5,0x83,0xe4,
61857 -0xf0,0x90,0x97,0x3d,0xe0,0xff,0x90,0x97,0x3a,0xe0,0xfe,0x24,0x84,0xf5,0x82,0xe4,
61858 -0x34,0x96,0xf5,0x83,0xef,0xf0,0xee,0x30,0xe0,0x1e,0x90,0x97,0x52,0xe0,0xc4,0x54,
61859 -0xf0,0xf0,0x90,0x97,0x3a,0xe0,0xc3,0x13,0xff,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x04,
61860 -0xf5,0x83,0xe0,0x54,0x0f,0x02,0x4d,0x21,0x90,0x97,0x3a,0xe0,0xc3,0x13,0xff,0x24,
61861 -0xa4,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,0xf0,0x02,0x4d,0x21,0x90,0x97,
61862 -0x3a,0xe0,0x24,0x64,0xf5,0x82,0xe4,0x34,0x96,0xf5,0x83,0xe0,0x64,0x06,0x60,0x03,
61863 -0x02,0x4d,0x3e,0x90,0x04,0xb3,0xe0,0x64,0x01,0x70,0x03,0x02,0x4d,0x3e,0x90,0x97,
61864 -0x3e,0x12,0x1d,0xb5,0x00,0x00,0x00,0x00,0x90,0x42,0x13,0xe4,0x93,0xff,0x7e,0x00,
61865 -0x90,0x97,0x46,0xe0,0xfc,0xa3,0xe0,0xfd,0x12,0x1d,0x1c,0xe4,0xfc,0xfd,0x90,0x97,
61866 -0x42,0x12,0x1d,0xa9,0xe4,0x90,0x97,0x3b,0xf0,0x90,0x97,0x3e,0xe0,0xf8,0xa3,0xe0,
61867 -0xf9,0xa3,0xe0,0xfa,0xa3,0xe0,0xfb,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xab,
61868 -0x13,0xaa,0x14,0xa9,0x15,0x90,0x97,0x3b,0xe0,0xff,0x75,0xf0,0x02,0xa4,0xf5,0x82,
61869 -0x85,0xf0,0x83,0x12,0x66,0x20,0xfd,0xac,0xf0,0xef,0x90,0x42,0x0e,0x93,0xff,0x7e,
61870 -0x00,0x12,0x1d,0x1c,0xe4,0xfc,0xfd,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xeb,
61871 -0x2f,0xff,0xea,0x3e,0xfe,0xed,0x39,0xfd,0xec,0x38,0xfc,0x90,0x97,0x3e,0x12,0x1d,
61872 -0xa9,0x90,0x97,0x42,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,
61873 -0x97,0x3e,0xe0,0xf8,0xa3,0xe0,0xf9,0xa3,0xe0,0xfa,0xa3,0xe0,0xfb,0xd3,0x12,0x66,
61874 -0xa4,0x50,0x0e,0x90,0x97,0x3b,0xe0,0x04,0xf0,0xe0,0x64,0x05,0x60,0x03,0x02,0x4b,
61875 -0xd9,0x90,0x97,0x3b,0xe0,0xc3,0x13,0xf0,0x90,0x97,0x52,0xe0,0xff,0xb4,0x01,0x0d,
61876 -0x90,0x97,0x3b,0xe0,0x70,0x5d,0x90,0x97,0x52,0x04,0xf0,0x80,0x5b,0xef,0xb4,0x03,
61877 -0x1d,0x90,0x97,0x3b,0xe0,0xff,0x70,0x08,0x90,0x97,0x52,0x74,0x03,0xf0,0x80,0x48,
61878 -0xef,0xb4,0x01,0x08,0x90,0x97,0x52,0x74,0x01,0xf0,0x80,0x3c,0x80,0x35,0x90,0x97,
61879 -0x52,0xe0,0x64,0x05,0x70,0x32,0x90,0x97,0x3b,0xe0,0xff,0x70,0x08,0x90,0x97,0x52,
61880 -0x74,0x05,0xf0,0x80,0x0f,0xef,0x90,0x97,0x52,0xb4,0x01,0x05,0x74,0x03,0xf0,0x80,
61881 -0x03,0x74,0x01,0xf0,0xd3,0x90,0x97,0x49,0xe0,0x94,0x03,0x90,0x97,0x48,0xe0,0x94,
61882 -0x00,0x40,0x05,0xe4,0x90,0x97,0x52,0xf0,0xd3,0x90,0x97,0x49,0xe0,0x94,0x03,0x90,
61883 -0x97,0x48,0xe0,0x94,0x00,0x40,0x05,0xe4,0x90,0x97,0x52,0xf0,0x90,0x97,0x3a,0xe0,
61884 -0xff,0x30,0xe0,0x1a,0x90,0x97,0x52,0xe0,0xc4,0x54,0xf0,0xf0,0xef,0xc3,0x13,0xff,
61885 -0x24,0xa4,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,0x0f,0x80,0x13,0x90,0x97,
61886 -0x3a,0xe0,0xc3,0x13,0xff,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,
61887 -0xf0,0xf0,0x74,0xa4,0x2f,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xc0,0x83,0xc0,0x82,
61888 -0xe0,0xff,0x90,0x97,0x52,0xe0,0xfe,0xef,0x4e,0xd0,0x82,0xd0,0x83,0xf0,0x90,0x97,
61889 -0x3a,0xe0,0xff,0x24,0x64,0xf5,0x82,0xe4,0x34,0x96,0xf5,0x83,0xe0,0xd3,0x94,0x05,
61890 -0x50,0x0f,0x74,0x64,0x2f,0xf5,0x82,0xe4,0x34,0x96,0xf5,0x83,0xe0,0x04,0xf0,0x80,
61891 -0x0f,0x90,0x97,0x3a,0xe0,0x24,0x64,0xf5,0x82,0xe4,0x34,0x96,0xf5,0x83,0xe4,0xf0,
61892 -0x90,0x97,0x3a,0xe0,0xff,0x24,0x84,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,
61893 -0x1f,0xc3,0x94,0x09,0x50,0x05,0x90,0x92,0x00,0x80,0x11,0x74,0x84,0x2f,0xf5,0x82,
61894 -0xe4,0x34,0x04,0xf5,0x83,0xe0,0x90,0x92,0x00,0x20,0xe2,0x05,0x74,0x08,0xf0,0x80,
61895 -0x03,0x74,0x04,0xf0,0x90,0x97,0x3a,0xe0,0x60,0x0d,0x90,0x96,0xa4,0xe0,0xff,0x90,
61896 -0x92,0x00,0xe0,0xc3,0x9f,0x50,0x08,0x90,0x92,0x00,0xe0,0x90,0x96,0xa4,0xf0,0x90,
61897 -0x96,0xa4,0xe0,0x90,0x04,0x80,0xf0,0xab,0x13,0xaa,0x14,0xa9,0x15,0xe4,0xf5,0xf0,
61898 -0x12,0x66,0x58,0xab,0x13,0xaa,0x14,0xa9,0x15,0x90,0x00,0x02,0xe4,0xf5,0xf0,0x12,
61899 -0x66,0x77,0x90,0x00,0x04,0xe4,0xf5,0xf0,0x12,0x66,0x77,0x90,0x00,0x06,0xe4,0xf5,
61900 -0xf0,0x12,0x66,0x77,0x90,0x00,0x08,0xe4,0xf5,0xf0,0x12,0x66,0x77,0x90,0x97,0x3a,
61901 -0xe0,0xff,0x25,0xe0,0x24,0xc0,0xf5,0x82,0xe4,0x34,0x91,0xf5,0x83,0xe4,0xf0,0xa3,
61902 -0xf0,0xef,0x25,0xe0,0x24,0x63,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,0xf0,0xa3,
61903 -0xf0,0xef,0x25,0xe0,0x24,0xa3,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,0xf0,0xa3,
61904 -0xf0,0x90,0x97,0x3a,0xe0,0x04,0xf0,0x02,0x45,0x18,0x22,0xef,0x70,0x03,0x02,0x50,
61905 -0xa3,0x90,0x97,0x2d,0xe0,0x60,0x03,0x02,0x54,0xe5,0x90,0x97,0x19,0xe0,0xfc,0xa3,
61906 -0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x8c,
61907 -0x7e,0x08,0x12,0x33,0xd8,0x90,0x96,0xc5,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,
61908 -0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x44,0x7e,0x08,0x12,0x33,0xd8,
61909 -0x90,0x96,0xc9,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,
61910 -0x56,0x12,0x1d,0xa9,0x7f,0x5c,0x7e,0x08,0x12,0x33,0xd8,0x90,0x96,0xcd,0xe0,0xfc,
61911 -0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,
61912 -0x6c,0x7e,0x0e,0x12,0x33,0xd8,0x90,0x96,0xd1,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,
61913 -0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x70,0x7e,0x0e,0x12,0x33,
61914 -0xd8,0x90,0x96,0xd5,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,
61915 -0x81,0x56,0x12,0x1d,0xa9,0x7f,0x74,0x7e,0x0e,0x12,0x33,0xd8,0x90,0x96,0xd9,0xe0,
61916 -0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,
61917 -0x7f,0x78,0x7e,0x0e,0x12,0x33,0xd8,0x90,0x96,0xdd,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,
61918 -0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x7c,0x7e,0x0e,0x12,
61919 -0x33,0xd8,0x90,0x96,0xe1,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,
61920 -0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x80,0x7e,0x0e,0x12,0x33,0xd8,0x90,0x96,0xe5,
61921 -0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,
61922 -0xa9,0x7f,0x84,0x7e,0x0e,0x12,0x33,0xd8,0x90,0x96,0xe9,0xe0,0xfc,0xa3,0xe0,0xfd,
61923 -0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x88,0x7e,0x0e,
61924 -0x12,0x33,0xd8,0x90,0x96,0xed,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,
61925 -0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x8c,0x7e,0x0e,0x12,0x33,0xd8,0x90,0x96,
61926 -0xf1,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,
61927 -0x1d,0xa9,0x7f,0xd0,0x7e,0x0e,0x12,0x33,0xd8,0x90,0x96,0xf5,0xe0,0xfc,0xa3,0xe0,
61928 -0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0xd4,0x7e,
61929 -0x0e,0x12,0x33,0xd8,0x90,0x96,0xf9,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,
61930 -0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0xd8,0x7e,0x0e,0x12,0x33,0xd8,0x90,
61931 -0x96,0xfd,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,
61932 -0x12,0x1d,0xa9,0x7f,0xdc,0x7e,0x0e,0x12,0x33,0xd8,0x90,0x97,0x01,0xe0,0xfc,0xa3,
61933 -0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0xe0,
61934 -0x7e,0x0e,0x12,0x33,0xd8,0x90,0x97,0x05,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,
61935 -0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0xec,0x7e,0x0e,0x12,0x33,0xd8,
61936 -0x90,0x97,0x09,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,
61937 -0x56,0x12,0x1d,0xa9,0x7f,0x04,0x7e,0x0c,0x12,0x33,0xd8,0x90,0x97,0x0d,0xe0,0xfc,
61938 -0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,
61939 -0x04,0x7e,0x0d,0x12,0x33,0xd8,0x90,0x97,0x11,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,
61940 -0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x0c,0x7e,0x09,0x12,0x33,
61941 -0xd8,0x90,0x97,0x15,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,
61942 -0x81,0x56,0x12,0x1d,0xa9,0x7f,0x04,0x7e,0x08,0x12,0x33,0xd8,0x90,0x97,0x2d,0x74,
61943 -0x01,0xf0,0x22,0x90,0x97,0x2d,0xe0,0x64,0x01,0x60,0x03,0x02,0x54,0xe5,0x7f,0x8c,
61944 -0x7e,0x08,0x12,0x2b,0x13,0x90,0x97,0x19,0x12,0x1d,0xa9,0x7f,0x44,0x7e,0x08,0x12,
61945 -0x2b,0x13,0x90,0x96,0xc5,0x12,0x1d,0xa9,0x7f,0x5c,0x7e,0x08,0x12,0x2b,0x13,0x90,
61946 -0x96,0xc9,0x12,0x1d,0xa9,0x7f,0x6c,0x7e,0x0e,0x12,0x2b,0x13,0x90,0x96,0xcd,0x12,
61947 -0x1d,0xa9,0x7f,0x70,0x7e,0x0e,0x12,0x2b,0x13,0x90,0x96,0xd1,0x12,0x1d,0xa9,0x7f,
61948 -0x74,0x7e,0x0e,0x12,0x2b,0x13,0x90,0x96,0xd5,0x12,0x1d,0xa9,0x7f,0x78,0x7e,0x0e,
61949 -0x12,0x2b,0x13,0x90,0x96,0xd9,0x12,0x1d,0xa9,0x7f,0x7c,0x7e,0x0e,0x12,0x2b,0x13,
61950 -0x90,0x96,0xdd,0x12,0x1d,0xa9,0x7f,0x80,0x7e,0x0e,0x12,0x2b,0x13,0x90,0x96,0xe1,
61951 -0x12,0x1d,0xa9,0x7f,0x84,0x7e,0x0e,0x12,0x2b,0x13,0x90,0x96,0xe5,0x12,0x1d,0xa9,
61952 -0x7f,0x88,0x7e,0x0e,0x12,0x2b,0x13,0x90,0x96,0xe9,0x12,0x1d,0xa9,0x7f,0x8c,0x7e,
61953 -0x0e,0x12,0x2b,0x13,0x90,0x96,0xed,0x12,0x1d,0xa9,0x7f,0xd0,0x7e,0x0e,0x12,0x2b,
61954 -0x13,0x90,0x96,0xf1,0x12,0x1d,0xa9,0x7f,0xd4,0x7e,0x0e,0x12,0x2b,0x13,0x90,0x96,
61955 -0xf5,0x12,0x1d,0xa9,0x7f,0xd8,0x7e,0x0e,0x12,0x2b,0x13,0x90,0x96,0xf9,0x12,0x1d,
61956 -0xa9,0x7f,0xdc,0x7e,0x0e,0x12,0x2b,0x13,0x90,0x96,0xfd,0x12,0x1d,0xa9,0x7f,0xe0,
61957 -0x7e,0x0e,0x12,0x2b,0x13,0x90,0x97,0x01,0x12,0x1d,0xa9,0x7f,0xec,0x7e,0x0e,0x12,
61958 -0x2b,0x13,0x90,0x97,0x05,0x12,0x1d,0xa9,0x7f,0x04,0x7e,0x0c,0x12,0x2b,0x13,0x90,
61959 -0x97,0x09,0x12,0x1d,0xa9,0x7f,0x04,0x7e,0x0d,0x12,0x2b,0x13,0x90,0x97,0x0d,0x12,
61960 -0x1d,0xa9,0x7f,0x0c,0x7e,0x09,0x12,0x2b,0x13,0x90,0x97,0x11,0x12,0x1d,0xa9,0x7f,
61961 -0x04,0x7e,0x08,0x12,0x2b,0x13,0x90,0x97,0x15,0x12,0x1d,0xa9,0x7f,0x8c,0x7e,0x08,
61962 -0x12,0x2b,0x13,0x90,0x97,0xa3,0x12,0x1d,0xa9,0x90,0x97,0xa3,0xe0,0xfc,0xa3,0xe0,
61963 -0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0xed,0x44,0xc0,0xfd,0xec,0x90,0x97,0xa3,0x12,
61964 -0x1d,0xa9,0x90,0x97,0xa3,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,
61965 -0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x8c,0x7e,0x08,0x12,0x33,0xd8,0x90,0x81,0x56,
61966 -0x12,0x1d,0xb5,0x00,0x01,0x00,0x00,0x7f,0x44,0x7e,0x08,0x12,0x33,0xd8,0x90,0x81,
61967 -0x56,0x12,0x1d,0xb5,0x00,0xdb,0x25,0xa4,0x7f,0x5c,0x7e,0x08,0x12,0x33,0xd8,0x90,
61968 -0x81,0x56,0x12,0x1d,0xb5,0x20,0xdb,0x25,0xa4,0x7f,0x6c,0x7e,0x0e,0x12,0x33,0xd8,
61969 -0x90,0x81,0x56,0x12,0x1d,0xb5,0x20,0xdb,0x25,0xa4,0x7f,0x70,0x7e,0x0e,0x12,0x33,
61970 -0xd8,0x90,0x81,0x56,0x12,0x1d,0xb5,0x04,0x1b,0x25,0xa4,0x7f,0x74,0x7e,0x0e,0x12,
61971 -0x33,0xd8,0x90,0x81,0x56,0x12,0x1d,0xb5,0x04,0x1b,0x25,0xa4,0x7f,0x78,0x7e,0x0e,
61972 -0x12,0x33,0xd8,0x90,0x81,0x56,0x12,0x1d,0xb5,0x04,0x1b,0x25,0xa4,0x7f,0x7c,0x7e,
61973 -0x0e,0x12,0x33,0xd8,0x90,0x81,0x56,0x12,0x1d,0xb5,0x04,0x1b,0x25,0xa4,0x7f,0x80,
61974 -0x7e,0x0e,0x12,0x33,0xd8,0x90,0x81,0x56,0x12,0x1d,0xb5,0x63,0xdb,0x25,0xa4,0x7f,
61975 -0x84,0x7e,0x0e,0x12,0x33,0xd8,0x90,0x81,0x56,0x12,0x1d,0xb5,0x04,0x1b,0x25,0xa4,
61976 -0x7f,0x88,0x7e,0x0e,0x12,0x33,0xd8,0x90,0x81,0x56,0x12,0x1d,0xb5,0x20,0xdb,0x25,
61977 -0xa4,0x7f,0x8c,0x7e,0x0e,0x12,0x33,0xd8,0x90,0x81,0x56,0x12,0x1d,0xb5,0x20,0xdb,
61978 -0x25,0xa4,0x7f,0xd0,0x7e,0x0e,0x12,0x33,0xd8,0x90,0x81,0x56,0x12,0x1d,0xb5,0x20,
61979 -0xdb,0x25,0xa4,0x7f,0xd4,0x7e,0x0e,0x12,0x33,0xd8,0x90,0x81,0x56,0x12,0x1d,0xb5,
61980 -0x20,0xdb,0x25,0xa4,0x7f,0xd8,0x7e,0x0e,0x12,0x33,0xd8,0x90,0x81,0x56,0x12,0x1d,
61981 -0xb5,0x00,0x1b,0x25,0xa4,0x7f,0xdc,0x7e,0x0e,0x12,0x33,0xd8,0x90,0x81,0x56,0x12,
61982 -0x1d,0xb5,0x00,0x1b,0x25,0xa4,0x7f,0xe0,0x7e,0x0e,0x12,0x33,0xd8,0x90,0x81,0x56,
61983 -0x12,0x1d,0xb5,0x24,0xdb,0x25,0xa4,0x7f,0xec,0x7e,0x0e,0x12,0x33,0xd8,0x7f,0x04,
61984 -0x7e,0x0c,0x12,0x2b,0x13,0x90,0x97,0xa3,0x12,0x1d,0xa9,0x90,0x97,0xa3,0xe0,0xfc,
61985 -0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xe4,0xff,0xec,0x90,0x97,0xa3,0x12,0x1d,0xa9,0x90,
61986 -0x97,0xa3,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0x44,0x11,0xff,0xec,
61987 -0x90,0x97,0xa3,0x12,0x1d,0xa9,0x90,0x97,0xa3,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,
61988 -0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x04,0x7e,0x0c,0x12,0x33,
61989 -0xd8,0x7f,0x04,0x7e,0x0d,0x12,0x2b,0x13,0x90,0x97,0xa3,0x12,0x1d,0xa9,0x90,0x97,
61990 -0xa3,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0x54,0xf0,0xff,0xec,0x90,
61991 -0x97,0xa3,0x12,0x1d,0xa9,0x90,0x97,0xa3,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,
61992 -0xa3,0xe0,0x44,0x01,0xff,0xec,0x90,0x97,0xa3,0x12,0x1d,0xa9,0x90,0x97,0xa3,0xe0,
61993 -0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,
61994 -0x7f,0x04,0x7e,0x0d,0x12,0x33,0xd8,0x7f,0x0c,0x7e,0x09,0x12,0x2b,0x13,0x90,0x97,
61995 -0xa3,0x12,0x1d,0xa9,0x90,0x97,0xa3,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xe4,
61996 -0xff,0xec,0x90,0x97,0xa3,0x12,0x1d,0xa9,0x90,0x97,0xa3,0xe0,0xfc,0xa3,0xe0,0xfd,
61997 -0xa3,0xe0,0xfe,0xa3,0xe0,0x44,0x11,0xff,0xec,0x90,0x97,0xa3,0x12,0x1d,0xa9,0x90,
61998 -0x97,0xa3,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,
61999 -0x12,0x1d,0xa9,0x7f,0x0c,0x7e,0x09,0x12,0x33,0xd8,0x7f,0x0c,0x7e,0x09,0x12,0x2b,
62000 -0x13,0x90,0x97,0xa3,0x12,0x1d,0xa9,0x90,0x97,0xa3,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,
62001 -0xe0,0xfe,0xa3,0xe0,0xff,0xed,0x54,0x0f,0xfd,0xec,0x54,0xf0,0xfc,0x90,0x97,0xa3,
62002 -0x12,0x1d,0xa9,0x90,0x97,0xa3,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,
62003 -0xff,0xed,0x44,0x10,0xfd,0xec,0x44,0x01,0xfc,0x90,0x97,0xa3,0x12,0x1d,0xa9,0x90,
62004 -0x97,0xa3,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,
62005 -0x12,0x1d,0xa9,0x7f,0x0c,0x7e,0x09,0x12,0x33,0xd8,0x7f,0x04,0x7e,0x08,0x12,0x2b,
62006 -0x13,0x90,0x97,0xa3,0x12,0x1d,0xa9,0x90,0x97,0xa3,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,
62007 -0xe0,0xfe,0xa3,0xe0,0x54,0xf0,0xff,0xec,0x90,0x97,0xa3,0x12,0x1d,0xa9,0x90,0x97,
62008 -0xa3,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0x44,0x01,0xff,0xec,0x90,
62009 -0x97,0xa3,0x12,0x1d,0xa9,0x90,0x97,0xa3,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,
62010 -0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x04,0x7e,0x08,0x12,0x33,0xd8,
62011 -0xe4,0x90,0x97,0x2d,0xf0,0x22,0x8f,0x10,0xef,0x25,0xe0,0x24,0xe4,0xf5,0x82,0xe4,
62012 -0x34,0x95,0xaf,0x82,0xf5,0x11,0x8f,0x12,0xe5,0x10,0x75,0xf0,0x02,0xa4,0x24,0x81,
62013 -0xf9,0x74,0x92,0x35,0xf0,0x75,0x13,0x01,0xf5,0x14,0x89,0x15,0xe5,0x10,0x75,0xf0,
62014 -0x08,0xa4,0x24,0x65,0xf5,0x82,0xe4,0x34,0x93,0xaf,0x82,0xf5,0x16,0x8f,0x17,0xe5,
62015 -0x10,0x75,0xf0,0x08,0xa4,0x24,0x63,0xf9,0x74,0x93,0x35,0xf0,0x75,0x18,0x01,0xf5,
62016 -0x19,0x89,0x1a,0x74,0xc1,0x25,0x10,0xf5,0x82,0xe4,0x34,0x92,0xf5,0x83,0xe0,0x12,
62017 -0x66,0xc1,0x55,0x67,0x00,0x55,0x7c,0x01,0x55,0x91,0x02,0x55,0xa6,0x03,0x55,0xd0,
62018 -0x04,0x55,0xe5,0x05,0x55,0xfa,0x06,0x56,0x21,0x0c,0x56,0x4f,0x0d,0x56,0x7c,0x0e,
62019 -0x56,0xa9,0x0f,0x00,0x00,0x56,0xdd,0xe5,0x10,0x25,0xe0,0x24,0xe4,0xf5,0x82,0xe4,
62020 -0x34,0x95,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0x74,0x15,0x80,0x3c,0xe5,0x10,0x25,0xe0,
62021 -0x24,0xe4,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0x74,0x10,0x80,
62022 -0x27,0xe5,0x10,0x25,0xe0,0x24,0xe4,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0x74,0xf0,
62023 -0xf0,0xa3,0x74,0x05,0x80,0x12,0xe5,0x10,0x25,0xe0,0x24,0xe4,0xf5,0x82,0xe4,0x34,
62024 -0x95,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0xe4,0xf0,0xe5,0x10,0x25,0xe0,0x24,0x81,0xf5,
62025 -0x82,0xe4,0x34,0x92,0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0x8f,0xf0,0x02,0x56,0xdd,
62026 -0xe5,0x10,0x25,0xe0,0x24,0xe4,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0x74,0x0f,0xf0,
62027 -0xa3,0x74,0xf5,0x80,0x27,0xe5,0x10,0x25,0xe0,0x24,0xe4,0xf5,0x82,0xe4,0x34,0x95,
62028 -0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0xf0,0x80,0x12,0xe5,0x10,0x25,0xe0,0x24,0xe4,
62029 -0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe4,0xf0,0xa3,0x74,0x0d,0xf0,0xe5,0x10,0x25,
62030 -0xe0,0x24,0x81,0xf5,0x82,0xe4,0x34,0x92,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0x02,0x56,
62031 -0xdd,0x90,0x04,0x47,0xe0,0xab,0x13,0xaa,0x14,0xa9,0x15,0x12,0x65,0x95,0x90,0x04,
62032 -0x46,0xe0,0xab,0x13,0xaa,0x14,0xa9,0x15,0x90,0x00,0x01,0x12,0x65,0xa7,0x90,0x04,
62033 -0x45,0xe0,0x85,0x12,0x82,0x85,0x11,0x83,0xf0,0x90,0x04,0x44,0x02,0x56,0xd4,0x90,
62034 -0x04,0x4b,0xe0,0xab,0x13,0xaa,0x14,0xa9,0x15,0x12,0x65,0x95,0x90,0x04,0x4a,0xe0,
62035 -0xab,0x13,0xaa,0x14,0xa9,0x15,0x90,0x00,0x01,0x12,0x65,0xa7,0x90,0x04,0x49,0xe0,
62036 -0x85,0x12,0x82,0x85,0x11,0x83,0xf0,0x90,0x04,0x48,0x80,0x58,0x90,0x04,0x4f,0xe0,
62037 -0xab,0x13,0xaa,0x14,0xa9,0x15,0x12,0x65,0x95,0x90,0x04,0x4e,0xe0,0xab,0x13,0xaa,
62038 -0x14,0xa9,0x15,0x90,0x00,0x01,0x12,0x65,0xa7,0x90,0x04,0x4d,0xe0,0x85,0x12,0x82,
62039 -0x85,0x11,0x83,0xf0,0x90,0x04,0x4c,0x80,0x2b,0x90,0x04,0x53,0xe0,0xab,0x13,0xaa,
62040 -0x14,0xa9,0x15,0x12,0x65,0x95,0x90,0x04,0x52,0xe0,0xab,0x13,0xaa,0x14,0xa9,0x15,
62041 -0x90,0x00,0x01,0x12,0x65,0xa7,0x90,0x04,0x51,0xe0,0x85,0x12,0x82,0x85,0x11,0x83,
62042 -0xf0,0x90,0x04,0x50,0xe0,0x85,0x12,0x82,0x85,0x11,0x83,0xa3,0xf0,0xab,0x13,0xaa,
62043 -0x14,0xa9,0x15,0xc0,0x03,0xc0,0x02,0xc0,0x01,0x12,0x1c,0xd6,0xff,0xab,0x18,0xaa,
62044 -0x19,0xa9,0x1a,0x12,0x1c,0xd6,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,0x12,0x65,0x95,
62045 -0xab,0x13,0xe5,0x15,0x24,0x01,0xf9,0xe4,0x35,0x14,0xfa,0xc0,0x03,0xc0,0x02,0xc0,
62046 -0x01,0x12,0x1c,0xd6,0xff,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,0x01,0x12,0x1c,
62047 -0xef,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,0x12,0x65,0x95,0x85,0x12,0x82,0x85,0x11,
62048 -0x83,0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,0x17,0x82,0x85,0x16,0x83,0xe0,0xfe,0xef,
62049 -0x5e,0xd0,0x82,0xd0,0x83,0xf0,0x85,0x12,0x82,0x85,0x11,0x83,0xa3,0xc0,0x83,0xc0,
62050 -0x82,0xe0,0xff,0x85,0x17,0x82,0x85,0x16,0x83,0xa3,0xe0,0xfe,0xef,0x5e,0xd0,0x82,
62051 -0xd0,0x83,0xf0,0xe5,0x10,0x25,0xe0,0x24,0x81,0xf5,0x82,0xe4,0x34,0x92,0xf5,0x83,
62052 -0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x4c,0x90,0x97,0x51,0x74,0x0b,0xf0,0x90,0x97,0x51,
62053 -0xe0,0xff,0xc3,0x94,0x00,0x50,0x03,0x02,0x58,0x23,0x74,0x01,0x7e,0x00,0xa8,0x07,
62054 -0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x10,0x25,0xe0,0x24,
62055 -0x81,0xf5,0x82,0xe4,0x34,0x92,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,
62056 -0x0a,0x90,0x97,0x51,0xe0,0x24,0x10,0xa3,0xf0,0x80,0x68,0x90,0x97,0x51,0xe0,0x14,
62057 -0xf0,0x80,0xba,0xe5,0x10,0x25,0xe0,0x24,0xe4,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,
62058 -0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x47,0x90,0x97,0x51,0x74,0x0f,0xf0,0x90,0x97,0x51,
62059 -0xe0,0xff,0xc3,0x94,0x00,0x40,0x3c,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,
62060 -0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x10,0x25,0xe0,0x24,0xe4,0xf5,0x82,
62061 -0xe4,0x34,0x95,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x08,0x90,0x97,
62062 -0x51,0xe0,0xa3,0xf0,0x80,0x0d,0x90,0x97,0x51,0xe0,0x14,0xf0,0x80,0xbf,0xe4,0x90,
62063 -0x97,0x52,0xf0,0xe5,0x10,0x25,0xe0,0x24,0xe4,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,
62064 -0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x47,0xe4,0x90,0x97,0x51,0xf0,0x90,0x97,0x51,0xe0,
62065 -0xff,0xc3,0x94,0x10,0x40,0x03,0x02,0x58,0xdd,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,
62066 -0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x10,0x25,0xe0,0x24,0xe4,
62067 -0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x06,
62068 -0x90,0x97,0x51,0xe0,0x80,0x63,0x90,0x97,0x51,0xe0,0x04,0xf0,0x80,0xbe,0xe5,0x10,
62069 -0x25,0xe0,0x24,0x81,0xf5,0x82,0xe4,0x34,0x92,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,
62070 -0x60,0x46,0xe4,0x90,0x97,0x51,0xf0,0x90,0x97,0x51,0xe0,0xff,0xc3,0x94,0x0c,0x50,
62071 -0x3c,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,
62072 -0xf9,0xff,0xe5,0x10,0x25,0xe0,0x24,0x81,0xf5,0x82,0xe4,0x34,0x92,0xf5,0x83,0xe0,
62073 -0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x08,0x90,0x97,0x51,0xe0,0x24,0x10,0x80,0x09,
62074 -0x90,0x97,0x51,0xe0,0x04,0xf0,0x80,0xbf,0xe4,0x90,0x97,0x53,0xf0,0x90,0x97,0x52,
62075 -0xe0,0xff,0xe5,0x10,0x75,0xf0,0x08,0xa4,0x24,0x67,0xf5,0x82,0xe4,0x34,0x93,0xf5,
62076 -0x83,0xef,0xf0,0x90,0x97,0x53,0xe0,0xfe,0xe5,0x10,0x75,0xf0,0x08,0xa4,0x24,0x68,
62077 -0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xee,0xf0,0x74,0x84,0x25,0x10,0xf5,0x82,0xe4,
62078 -0x34,0x04,0xf5,0x83,0xe0,0xd3,0x9f,0x40,0x1f,0x90,0x97,0x52,0xe0,0xff,0x74,0x84,
62079 -0x25,0x10,0xf5,0x82,0xe4,0x34,0x96,0xf5,0x83,0xef,0xf0,0x74,0x84,0x25,0x10,0xf5,
62080 -0x82,0xe4,0x34,0x04,0xf5,0x83,0xef,0xf0,0x90,0x97,0x52,0xe0,0xff,0xd3,0x94,0x13,
62081 -0x40,0x08,0x90,0x93,0x62,0x74,0x03,0xf0,0x80,0x21,0xef,0xd3,0x94,0x0b,0x40,0x08,
62082 -0x90,0x93,0x62,0x74,0x02,0xf0,0x80,0x13,0xef,0xd3,0x94,0x03,0x40,0x08,0x90,0x93,
62083 -0x62,0x74,0x01,0xf0,0x80,0x05,0xe4,0x90,0x93,0x62,0xf0,0x90,0x93,0x62,0xe0,0x90,
62084 -0x04,0xb1,0xf0,0xe5,0x10,0x25,0xe0,0x24,0xe4,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,
62085 -0xe0,0xff,0xa3,0xe0,0x90,0x04,0x9c,0xcf,0xf0,0xa3,0xef,0xf0,0xe5,0x10,0x25,0xe0,
62086 -0x24,0x81,0xf5,0x82,0xe4,0x34,0x92,0xf5,0x83,0xe0,0xff,0xa3,0xe0,0x90,0x04,0x9e,
62087 -0xcf,0xf0,0xa3,0xef,0xf0,0xe5,0x10,0x75,0xf0,0x08,0xa4,0x24,0x69,0xf5,0x82,0xe4,
62088 -0x34,0x93,0xf5,0x83,0xe0,0xc4,0x33,0x54,0xe0,0x45,0x10,0x90,0x04,0xa0,0xf0,0x74,
62089 -0xc1,0x25,0x10,0xf5,0x82,0xe4,0x34,0x92,0xf5,0x83,0xe0,0x90,0x04,0xa1,0xf0,0x22,
62090 -0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,
62091 -0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x01,0xc4,
62092 -0x74,0xd0,0xf0,0x74,0x59,0xa3,0xf0,0x90,0x01,0x37,0xe0,0x55,0x2b,0xf5,0x2f,0x90,
62093 -0x01,0x34,0xe0,0x55,0x28,0xf5,0x2c,0x90,0x01,0x36,0xe0,0x55,0x2a,0xf5,0x2e,0xe5,
62094 -0x2c,0x20,0xe0,0x03,0x02,0x5b,0x82,0x90,0x01,0x34,0x74,0x01,0xf0,0x85,0xd1,0x4d,
62095 -0x85,0xd2,0x4e,0x85,0xd3,0x4f,0x85,0xd4,0x50,0x85,0xd5,0x51,0x85,0xd6,0x52,0x85,
62096 -0xd7,0x53,0x85,0xd9,0x54,0xe5,0x54,0x54,0x40,0xc3,0x13,0xff,0xe5,0x53,0x54,0x20,
62097 -0x6f,0x70,0x03,0x02,0x5b,0x2f,0xe5,0x54,0x30,0xe5,0x03,0x02,0x5b,0x2f,0xe5,0x52,
62098 -0x54,0x1f,0xf5,0x08,0xe5,0x4d,0x54,0x3f,0xf5,0x09,0xe5,0x51,0x54,0x1f,0xff,0xe5,
62099 -0x08,0x25,0xe0,0x24,0xe3,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,0x8f,0xf0,0x12,
62100 -0x65,0xc9,0xe5,0x53,0x54,0x1f,0xff,0xe5,0x08,0x25,0xe0,0x24,0xc0,0xf5,0x82,0xe4,
62101 -0x34,0x91,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x65,0xc9,0xe5,0x09,0xd3,0x94,0x04,0x40,
62102 -0x03,0x75,0x09,0x04,0x75,0xf0,0x0a,0xe5,0x08,0xa4,0x24,0x00,0xf5,0x82,0xe5,0xf0,
62103 -0x34,0x90,0xf5,0x83,0x75,0xf0,0x02,0xe5,0x09,0x12,0x66,0xb5,0xe0,0xfe,0xa3,0xe0,
62104 -0xff,0xe5,0x53,0x54,0x1f,0x2f,0xff,0xe4,0x3e,0xfe,0x75,0xf0,0x0a,0xe5,0x08,0xa4,
62105 -0x24,0x00,0xf5,0x82,0xe5,0xf0,0x34,0x90,0xf5,0x83,0x75,0xf0,0x02,0xe5,0x09,0x12,
62106 -0x66,0xb5,0xee,0xf0,0xa3,0xef,0xf0,0xe5,0x54,0x20,0xe6,0x24,0xe5,0x53,0x54,0x1f,
62107 -0xff,0xe5,0x08,0x25,0xe0,0x24,0x63,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,0x8f,
62108 -0xf0,0x12,0x65,0xc9,0xe5,0x4f,0x30,0xe7,0x36,0xaf,0x08,0x12,0x75,0x4c,0x80,0x2f,
62109 -0xe5,0x53,0x54,0x1f,0xff,0xe5,0x08,0x25,0xe0,0x24,0xa3,0xf5,0x82,0xe4,0x34,0x94,
62110 -0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x65,0xc9,0xe5,0x4f,0x30,0xe7,0x12,0xe5,0x4f,0x54,
62111 -0x7f,0xfd,0xe5,0x53,0x54,0x1f,0xf5,0x0d,0xab,0x09,0xaf,0x08,0x12,0x76,0x52,0xe5,
62112 -0x65,0x60,0x4f,0x90,0x97,0x8d,0xe0,0x60,0x35,0x90,0x01,0x5b,0xe4,0xf0,0x90,0x01,
62113 -0x3c,0x74,0x04,0xf0,0x90,0x04,0x1b,0xe0,0x54,0x7f,0x64,0x7f,0x70,0x34,0x75,0x48,
62114 -0x14,0xf5,0x49,0xfb,0xfd,0x7f,0x58,0x7e,0x01,0x12,0x38,0xec,0x90,0x01,0x5b,0x74,
62115 -0x05,0xf0,0x90,0x06,0x92,0x74,0x01,0xf0,0x90,0x97,0x87,0xf0,0x80,0x14,0x90,0x04,
62116 -0x1b,0xe0,0x54,0x7f,0xff,0xbf,0x7f,0x0a,0x90,0x97,0x8b,0xe0,0xff,0x7d,0x01,0x12,
62117 -0x6e,0xda,0xe5,0x2c,0x30,0xe1,0x21,0x90,0x01,0x34,0x74,0x02,0xf0,0x85,0xd1,0x56,
62118 -0x85,0xd2,0x57,0x85,0xd3,0x58,0x85,0xd4,0x59,0x85,0xd5,0x5a,0x85,0xd6,0x5b,0x85,
62119 -0xd7,0x5c,0x85,0xd9,0x5d,0x12,0x7d,0xc4,0xe5,0x2c,0x30,0xe3,0x06,0x90,0x01,0x34,
62120 -0x74,0x08,0xf0,0xe5,0x2c,0x30,0xe4,0x09,0x90,0x01,0x34,0x74,0x10,0xf0,0x43,0x55,
62121 -0x10,0xe5,0x2c,0x30,0xe5,0x21,0x90,0x01,0xcf,0xe0,0x30,0xe5,0x1a,0xe0,0x54,0xdf,
62122 -0xf0,0x90,0x01,0x34,0x74,0x20,0xf0,0x90,0x00,0x03,0xe0,0x54,0xfb,0xf0,0x7f,0x10,
62123 -0x7e,0x00,0x12,0x3a,0xa8,0x80,0xfe,0xe5,0x2c,0x30,0xe6,0x06,0x90,0x01,0x34,0x74,
62124 -0x40,0xf0,0xe5,0x2e,0x30,0xe1,0x09,0x90,0x01,0x36,0x74,0x02,0xf0,0x43,0x55,0x40,
62125 -0xe5,0x2e,0x30,0xe0,0x09,0x90,0x01,0x36,0x74,0x01,0xf0,0x12,0x76,0xd3,0xe5,0x2e,
62126 -0x30,0xe2,0x63,0x90,0x01,0x36,0x74,0x04,0xf0,0xe5,0x64,0x64,0x01,0x70,0x57,0xe5,
62127 -0x65,0x60,0x53,0xe5,0x65,0x64,0x02,0x70,0x27,0x90,0x06,0xab,0xe0,0x90,0x97,0x7f,
62128 -0xf0,0x90,0x06,0xaa,0xe0,0x90,0x97,0x8a,0xf0,0x90,0x97,0x7f,0xe0,0x70,0x07,0x90,
62129 -0x97,0x8a,0xe0,0xff,0x80,0x05,0x90,0x97,0x7f,0xe0,0xff,0x90,0x97,0x7f,0xef,0xf0,
62130 -0x90,0x97,0x81,0xe0,0x60,0x03,0xe0,0x14,0xf0,0x90,0x97,0x80,0xe4,0xf0,0x90,0x01,
62131 -0x57,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,0x97,0x8f,0xe0,0x54,0xfd,0xf0,0xe0,
62132 -0x54,0xef,0xf0,0x12,0x77,0x49,0xe5,0x2e,0x30,0xe3,0x31,0x90,0x01,0x36,0x74,0x08,
62133 -0xf0,0xe5,0x64,0x64,0x01,0x70,0x25,0xe5,0x65,0x60,0x21,0x90,0x01,0x57,0xe4,0xf0,
62134 -0x90,0x01,0x3c,0x74,0x02,0xf0,0x75,0x48,0x03,0x75,0x49,0x00,0xe4,0xfb,0xfd,0x7f,
62135 -0x54,0x7e,0x01,0x12,0x38,0xec,0x90,0x01,0x57,0x74,0x05,0xf0,0xe5,0x2e,0x30,0xe4,
62136 -0x3a,0x90,0x01,0x36,0x74,0x10,0xf0,0xe5,0x64,0x64,0x01,0x70,0x2e,0xe5,0x65,0x60,
62137 -0x2a,0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,0x97,0x8e,0xe4,
62138 -0xf0,0x90,0x97,0x8f,0xe0,0x54,0xfd,0xf0,0xe0,0x54,0x03,0x70,0x0e,0x90,0x97,0x89,
62139 -0xf0,0x90,0x97,0x8b,0xe0,0xff,0x7d,0x01,0x12,0x6e,0xda,0xe5,0x2e,0x30,0xe5,0x12,
62140 -0x90,0x01,0x36,0x74,0x20,0xf0,0xe5,0x64,0xb4,0x01,0x07,0xe5,0x65,0x60,0x03,0x12,
62141 -0x7e,0x7e,0xe5,0x2e,0x30,0xe6,0x2a,0x90,0x01,0x36,0x74,0x40,0xf0,0xe5,0x64,0x64,
62142 -0x01,0x70,0x1e,0xe5,0x65,0x60,0x1a,0x90,0x97,0x8f,0xe0,0x54,0xfe,0xf0,0xe0,0x54,
62143 -0x03,0x70,0x0e,0x90,0x97,0x89,0xf0,0x90,0x97,0x8b,0xe0,0xff,0x7d,0x01,0x12,0x6e,
62144 -0xda,0xe5,0x2f,0x30,0xe1,0x09,0x90,0x01,0x37,0x74,0x02,0xf0,0x12,0x7c,0xe8,0x74,
62145 -0xd0,0x04,0x90,0x01,0xc4,0xf0,0x74,0x59,0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,
62146 -0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,
62147 -0xd0,0xf0,0xd0,0xe0,0x32,0x74,0x5d,0x90,0x01,0xc4,0xf0,0xa3,0x74,0x65,0xf0,0x90,
62148 -0x04,0x44,0x74,0x11,0xf0,0xa3,0x74,0xf0,0xf0,0xa3,0x74,0x0f,0xf0,0xa3,0xe4,0xf0,
62149 -0x90,0x97,0x3a,0xf0,0x90,0x97,0x3a,0xe0,0xff,0xc3,0x94,0x10,0x50,0x14,0x74,0xa4,
62150 -0x2f,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe4,0xf0,0x90,0x97,0x3a,0xe0,0x04,0xf0,
62151 -0x80,0xe2,0xe4,0x90,0x97,0x3a,0xf0,0x90,0x97,0x3a,0xe0,0xfb,0xc3,0x94,0x20,0x40,
62152 -0x03,0x02,0x5f,0x6c,0xe0,0xff,0x75,0xf0,0x0a,0xa4,0x24,0x00,0xf5,0x82,0xe5,0xf0,
62153 -0x34,0x90,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xef,0xa4,0x24,0x02,0xf5,
62154 -0x82,0xe5,0xf0,0x34,0x90,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xef,0xa4,
62155 -0x24,0x04,0xf5,0x82,0xe5,0xf0,0x34,0x90,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,
62156 -0x0a,0xef,0xa4,0x24,0x06,0xf5,0x82,0xe5,0xf0,0x34,0x90,0xf5,0x83,0xe4,0xf0,0xa3,
62157 -0xf0,0x75,0xf0,0x0a,0xef,0xa4,0x24,0x08,0xf5,0x82,0xe5,0xf0,0x34,0x90,0xf5,0x83,
62158 -0xe4,0xf0,0xa3,0xf0,0x74,0x84,0x2f,0xf5,0x82,0xe4,0x34,0x96,0xf5,0x83,0x74,0x13,
62159 -0xf0,0x74,0x44,0x2f,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe4,0xf0,0xef,0x25,0xe0,
62160 -0x24,0xc0,0xf5,0x82,0xe4,0x34,0x91,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xef,0x25,0xe0,
62161 -0x24,0x63,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xef,0x25,0xe0,
62162 -0x24,0xe3,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xef,0x25,0xe0,
62163 -0x24,0xa3,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xef,0x25,0xe0,
62164 -0x24,0x64,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xef,0x25,0xe0,
62165 -0x24,0xa4,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0x74,0x44,0x2f,
62166 -0xf5,0x82,0xe4,0x34,0x96,0xf5,0x83,0xe4,0xf0,0x74,0x24,0x2f,0xf5,0x82,0xe4,0x34,
62167 -0x96,0xf5,0x83,0xe4,0xf0,0x74,0x64,0x2f,0xf5,0x82,0xe4,0x34,0x96,0xf5,0x83,0xe4,
62168 -0xf0,0x90,0x41,0xc4,0x93,0xfe,0x74,0x01,0x93,0xff,0x90,0x41,0x8c,0x74,0x01,0x93,
62169 -0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xe4,0xfc,0xfd,0xeb,0x25,
62170 -0xe0,0x25,0xe0,0x24,0xe1,0xf5,0x82,0xe4,0x34,0x92,0xf5,0x83,0x12,0x1d,0xa9,0xeb,
62171 -0x75,0xf0,0x08,0xa4,0x24,0x6a,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0x74,0x01,0xf0,
62172 -0xeb,0x75,0xf0,0x08,0xa4,0x24,0x69,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0x74,0x01,
62173 -0xf0,0x74,0xc1,0x2b,0xf5,0x82,0xe4,0x34,0x92,0xf5,0x83,0x74,0x0c,0xf0,0xeb,0x75,
62174 -0xf0,0x08,0xa4,0x24,0x65,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0x74,0xff,0xf0,0xa3,
62175 -0xf0,0xeb,0x75,0xf0,0x08,0xa4,0x24,0x63,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe4,
62176 -0xf0,0xa3,0x74,0x0f,0xf0,0xeb,0x75,0xf0,0x08,0xa4,0x24,0x67,0xf5,0x82,0xe4,0x34,
62177 -0x93,0xf5,0x83,0x74,0x13,0xf0,0xeb,0x75,0xf0,0x08,0xa4,0x24,0x68,0xf5,0x82,0xe4,
62178 -0x34,0x93,0xf5,0x83,0xe4,0xf0,0x74,0x84,0x2b,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,
62179 -0x74,0x13,0xf0,0x90,0x97,0x3a,0xe0,0x04,0xf0,0x02,0x5d,0xa7,0x22,0x8f,0x17,0x74,
62180 -0x5f,0x90,0x01,0xc4,0xf0,0xa3,0x74,0x6d,0xf0,0x74,0x84,0x25,0x17,0xf5,0x82,0xe4,
62181 -0x34,0x04,0xf5,0x83,0xe0,0x54,0x7f,0x90,0x97,0x54,0xf0,0xe0,0x54,0x1f,0xff,0x90,
62182 -0x97,0x57,0xf0,0xe5,0x17,0x75,0xf0,0x08,0xa4,0x24,0x68,0xf5,0x82,0xe4,0x34,0x93,
62183 -0xf5,0x83,0xe0,0x90,0x97,0x59,0xf0,0xe5,0x17,0x75,0xf0,0x08,0xa4,0x24,0x67,0xf5,
62184 -0x82,0xe4,0x34,0x93,0xf5,0x83,0xe0,0xfe,0x90,0x97,0x5a,0xf0,0xe5,0x17,0x25,0xe0,
62185 -0x24,0xe4,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x97,0x5b,
62186 -0xcb,0xf0,0xa3,0xeb,0xf0,0xe5,0x17,0x25,0xe0,0x24,0x81,0xf5,0x82,0xe4,0x34,0x92,
62187 -0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x97,0x5d,0xcb,0xf0,0xa3,0xeb,0xf0,0xef,0xd3,
62188 -0x9e,0x40,0x0c,0x90,0x97,0x5a,0xe0,0x90,0x97,0x57,0xf0,0x90,0x97,0x54,0xf0,0xed,
62189 -0x70,0x03,0x02,0x60,0xd9,0x90,0x97,0x58,0xed,0xf0,0x90,0x97,0x54,0xe0,0x30,0xe6,
62190 -0x0e,0x90,0x97,0x57,0xe0,0x90,0x97,0x54,0xf0,0x90,0x97,0x58,0xe0,0x14,0xf0,0x90,
62191 -0x97,0x58,0xe0,0x70,0x03,0x02,0x60,0xd9,0x90,0x97,0x57,0xe0,0xff,0xd3,0x94,0x00,
62192 -0x50,0x03,0x02,0x60,0xd9,0xe4,0x90,0x97,0x56,0xf0,0xef,0x14,0x90,0x97,0x55,0xf0,
62193 -0x90,0x97,0x59,0xe0,0xfd,0x90,0x97,0x55,0xe0,0xff,0xd3,0x9d,0x40,0x6f,0xef,0x94,
62194 -0x10,0x40,0x21,0xef,0x24,0xf0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,
62195 -0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x97,0x5d,0xe0,0x5e,0xfe,0xa3,0xe0,
62196 -0x5f,0x4e,0x70,0x27,0x90,0x97,0x55,0xe0,0xff,0xc3,0x94,0x10,0x50,0x37,0x74,0x01,
62197 -0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,
62198 -0x97,0x5b,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x1a,0x90,0x97,0x55,0xe0,0x90,
62199 -0x97,0x54,0xf0,0x90,0x97,0x56,0xe0,0x04,0xf0,0x90,0x97,0x58,0xe0,0xff,0x90,0x97,
62200 -0x56,0xe0,0x6f,0x60,0x08,0x90,0x97,0x55,0xe0,0x14,0xf0,0x80,0x83,0x90,0x97,0x58,
62201 -0xe0,0xff,0x90,0x97,0x56,0xe0,0xc3,0x9f,0x50,0x0f,0x90,0x97,0x55,0xe0,0xb5,0x05,
62202 -0x08,0x90,0x97,0x59,0xe0,0x90,0x97,0x54,0xf0,0x90,0x97,0x54,0xe0,0xff,0x25,0xe0,
62203 -0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfc,0x74,0x01,0x93,0xfd,
62204 -0xef,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2d,
62205 -0xff,0xe4,0x93,0x3c,0xc3,0x13,0xfe,0xef,0x13,0xff,0xe4,0xfc,0xfd,0xe5,0x17,0x25,
62206 -0xe0,0x25,0xe0,0x24,0xe1,0xf5,0x82,0xe4,0x34,0x92,0xf5,0x83,0x12,0x1d,0xa9,0x90,
62207 -0x97,0x54,0xe0,0xff,0x74,0x84,0x25,0x17,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xef,
62208 -0xf0,0x22,0x90,0x01,0xc4,0x74,0x32,0xf0,0x74,0x61,0xa3,0xf0,0x90,0x01,0xcc,0xe0,
62209 -0x54,0x0f,0x90,0x97,0x3a,0xf0,0x90,0x97,0x3a,0xe0,0xfd,0x70,0x03,0x02,0x62,0xd2,
62210 -0x90,0x97,0xb1,0xe0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,
62211 -0xce,0x33,0xce,0xd8,0xf9,0xff,0xef,0x5d,0x70,0x03,0x02,0x62,0xb3,0x90,0x97,0xb1,
62212 -0xe0,0x75,0xf0,0x04,0xa4,0x24,0xd0,0xf5,0x82,0xe5,0xf0,0x34,0x01,0xf5,0x83,0xe0,
62213 -0x90,0x97,0x3b,0xf0,0xa2,0xaf,0xe4,0x33,0xa3,0xf0,0xc2,0xaf,0x75,0x24,0x01,0x75,
62214 -0x25,0x97,0x75,0x26,0x3b,0x75,0x27,0x01,0x7b,0x01,0x7a,0x97,0x79,0x3d,0x12,0x79,
62215 -0x27,0x90,0x97,0x3c,0xe0,0x24,0xff,0x92,0xaf,0xa3,0xe0,0xff,0xc4,0x13,0x13,0x13,
62216 -0x54,0x01,0x90,0x97,0xb1,0x30,0xe0,0x70,0xe0,0x75,0xf0,0x02,0xa4,0x24,0x88,0xf5,
62217 -0x82,0xe4,0x35,0xf0,0xf5,0x83,0xe0,0x90,0x97,0x3e,0xf0,0x90,0x97,0xb1,0xe0,0x75,
62218 -0xf0,0x02,0xa4,0x24,0x89,0xf5,0x82,0xe4,0x35,0xf0,0xf5,0x83,0xe0,0x90,0x97,0x3f,
62219 -0xf0,0x90,0x97,0xb1,0xe0,0x75,0xf0,0x04,0xa4,0x24,0xd1,0xf5,0x82,0xe5,0xf0,0x34,
62220 -0x01,0xf5,0x83,0xe0,0x90,0x97,0x40,0xf0,0x90,0x97,0xb1,0xe0,0x75,0xf0,0x04,0xa4,
62221 -0x24,0xd2,0xf5,0x82,0xe5,0xf0,0x34,0x01,0xf5,0x83,0xe0,0x90,0x97,0x41,0xf0,0x90,
62222 -0x97,0xb1,0xe0,0x75,0xf0,0x04,0xa4,0x24,0xd3,0xf5,0x82,0xe5,0xf0,0x34,0x01,0xf5,
62223 -0x83,0xe0,0x90,0x97,0x42,0xf0,0x80,0x42,0xe0,0x75,0xf0,0x04,0xa4,0x24,0xd1,0xf5,
62224 -0x82,0xe5,0xf0,0x34,0x01,0xf5,0x83,0xe0,0x90,0x97,0x3e,0xf0,0x90,0x97,0xb1,0xe0,
62225 -0x75,0xf0,0x04,0xa4,0x24,0xd2,0xf5,0x82,0xe5,0xf0,0x34,0x01,0xf5,0x83,0xe0,0x90,
62226 -0x97,0x3f,0xf0,0x90,0x97,0xb1,0xe0,0x75,0xf0,0x04,0xa4,0x24,0xd3,0xf5,0x82,0xe5,
62227 -0xf0,0x34,0x01,0xf5,0x83,0xe0,0x90,0x97,0x40,0xf0,0xef,0x54,0x7f,0xff,0x7b,0x01,
62228 -0x7a,0x97,0x79,0x3e,0x12,0x6e,0x02,0x90,0x97,0x3a,0xe0,0xff,0x90,0x97,0xb1,0xe0,
62229 -0xfe,0x74,0x01,0xa8,0x06,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0x5f,0x90,0x97,
62230 -0x3a,0xf0,0x90,0x97,0xb1,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,
62231 -0xd8,0xfc,0x90,0x01,0xcc,0xf0,0x90,0x97,0xb1,0xe0,0x04,0xf0,0xe0,0x54,0x03,0xf0,
62232 -0x02,0x61,0x46,0xc2,0xaf,0x74,0x32,0x04,0x90,0x01,0xc4,0xf0,0x74,0x61,0xa3,0xf0,
62233 -0x90,0x97,0x3a,0xe0,0x90,0x01,0xc6,0xf0,0x90,0x97,0xb1,0xe0,0x90,0x01,0xc7,0xf0,
62234 -0x80,0xfe,0x22,0xe4,0x90,0x97,0x37,0xf0,0xa3,0xf0,0x12,0x7a,0x6c,0x90,0x00,0x02,
62235 -0xe0,0x54,0xe0,0x90,0x97,0x96,0x60,0x05,0x74,0x01,0xf0,0x80,0x03,0x74,0x02,0xf0,
62236 -0x90,0x00,0xf3,0xe0,0x30,0xe3,0x08,0x90,0x97,0x97,0x74,0x01,0xf0,0x80,0x05,0xe4,
62237 -0x90,0x97,0x97,0xf0,0x90,0x97,0x97,0xe0,0xb4,0x01,0x13,0x90,0x00,0xf2,0xe0,0x30,
62238 -0xe7,0x0c,0x90,0x97,0x90,0x74,0xfd,0xf0,0xa3,0x74,0x33,0xf0,0x80,0x0a,0x90,0x97,
62239 -0x90,0x74,0xfd,0xf0,0xa3,0x74,0x2f,0xf0,0xe4,0xf5,0x55,0x12,0x5d,0x65,0x12,0x7f,
62240 -0x60,0x12,0x79,0xce,0x12,0x36,0xd1,0x12,0x44,0xff,0x75,0x28,0x33,0xe4,0xf5,0x29,
62241 -0x75,0x2a,0x02,0xf5,0x2b,0x90,0x01,0x30,0xe5,0x28,0xf0,0xa3,0xe5,0x29,0xf0,0xa3,
62242 -0xe5,0x2a,0xf0,0xa3,0xe5,0x2b,0xf0,0x90,0x00,0xf3,0xe0,0x30,0xe2,0x0d,0x90,0x05,
62243 -0x41,0x74,0x10,0xf0,0x90,0x05,0x5a,0xf0,0xa3,0xe4,0xf0,0x90,0x01,0x64,0x74,0xa0,
62244 -0xf0,0x75,0x48,0xff,0xe4,0xf5,0x49,0xfb,0x7d,0x01,0x7f,0x50,0x7e,0x01,0x12,0x38,
62245 -0xec,0x75,0x30,0x1f,0x75,0x31,0x01,0xe4,0xf5,0x32,0x90,0x01,0x38,0xe5,0x30,0xf0,
62246 -0xa3,0xe5,0x31,0xf0,0xa3,0xe5,0x32,0xf0,0x12,0x78,0xd0,0x90,0x97,0x39,0xe5,0xd9,
62247 -0xf0,0x90,0x01,0x3c,0x74,0xff,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x01,0x34,0xf0,0xa3,
62248 -0xf0,0xa3,0xf0,0xa3,0xf0,0xc2,0xaf,0x90,0x00,0x80,0xe0,0x44,0x40,0xf0,0x7f,0x10,
62249 -0x7e,0x00,0x12,0x3a,0xa8,0x75,0xe8,0x03,0x43,0xa8,0x85,0xd2,0xaf,0x90,0x01,0xc0,
62250 -0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x01,0xc6,0xf0,0xa3,0xf0,0x90,0x97,
62251 -0x37,0xe0,0x64,0x01,0xf0,0x24,0xd3,0x90,0x01,0xc4,0xf0,0x74,0x62,0xa3,0xf0,0xe5,
62252 -0x55,0x30,0xe6,0x17,0xc2,0xaf,0x53,0x55,0xbf,0xd2,0xaf,0x12,0x45,0x09,0x90,0x97,
62253 -0x6d,0xe0,0xff,0x60,0x03,0xb4,0x01,0x03,0x12,0x6a,0x1f,0xe5,0x55,0x30,0xe7,0x07,
62254 -0xc2,0xaf,0x53,0x55,0x7f,0xd2,0xaf,0xe5,0x55,0x30,0xe4,0x0a,0xc2,0xaf,0x53,0x55,
62255 -0xef,0xd2,0xaf,0x12,0x61,0x32,0x90,0x97,0x6d,0xe0,0x70,0x03,0x12,0x6d,0x29,0x12,
62256 -0x7d,0x45,0x80,0xaa,0x90,0x00,0x02,0x12,0x1c,0xef,0x90,0x97,0x6b,0xf0,0x90,0x00,
62257 -0x01,0x12,0x1c,0xef,0x25,0xe0,0x25,0xe0,0x90,0x97,0x6a,0xf0,0x12,0x1c,0xd6,0x25,
62258 -0xe0,0x25,0xe0,0x90,0x97,0x6e,0xf0,0x90,0x97,0x6b,0xe0,0x90,0x04,0x98,0xf0,0x90,
62259 -0x97,0x6a,0xe0,0x13,0x13,0x54,0x3f,0x90,0x04,0x99,0xf0,0x90,0x97,0x6e,0xe0,0x13,
62260 -0x13,0x54,0x3f,0x90,0x04,0x9a,0xf0,0x90,0x05,0x60,0xe0,0x90,0x97,0x79,0xf0,0x90,
62261 -0x05,0x61,0xe0,0x90,0x97,0x7a,0xf0,0x90,0x05,0x62,0xe0,0x90,0x97,0x7b,0xf0,0x90,
62262 -0x05,0x63,0xe0,0x90,0x97,0x7c,0xf0,0xa2,0xaf,0xe4,0x33,0x90,0x97,0x49,0xf0,0xc2,
62263 -0xaf,0x90,0x97,0x6a,0xe0,0xff,0x12,0x79,0x7c,0x90,0x97,0x49,0xe0,0x24,0xff,0x92,
62264 -0xaf,0x90,0x97,0x6b,0xe0,0x70,0x03,0x02,0x65,0x61,0x90,0x97,0x6a,0xe0,0x70,0x03,
62265 -0x02,0x65,0x61,0x90,0x97,0x6e,0xe0,0x70,0x03,0x02,0x65,0x61,0xa2,0xaf,0xe4,0x33,
62266 -0x90,0x97,0x49,0xf0,0xc2,0xaf,0x90,0x97,0x7d,0x74,0x01,0xf0,0x90,0x97,0x49,0xe0,
62267 -0x24,0xff,0x92,0xaf,0x90,0x00,0x45,0xe0,0x54,0xfe,0xf0,0xa3,0xe0,0x44,0x01,0xf0,
62268 -0x90,0x97,0x63,0xe0,0x60,0x1d,0x90,0x97,0x6f,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,
62269 -0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x80,0x7e,0x08,0x12,0x33,
62270 -0xd8,0x80,0x06,0x90,0x05,0x22,0x74,0x7f,0xf0,0x90,0x00,0x45,0xe0,0x54,0xef,0xf0,
62271 -0x90,0x05,0x87,0xe0,0x64,0x80,0xf0,0x90,0x97,0x79,0xe0,0x90,0x05,0x84,0xf0,0x90,
62272 -0x97,0x7a,0xe0,0x90,0x05,0x85,0xf0,0x90,0x97,0x7b,0xe0,0x90,0x05,0x86,0xf0,0x90,
62273 -0x97,0x7c,0xe0,0x90,0x05,0x87,0xf0,0xa2,0xaf,0xe4,0x33,0x90,0x97,0x49,0xf0,0xc2,
62274 -0xaf,0x90,0x01,0x3c,0xe0,0x44,0x20,0xf0,0x7d,0x20,0xe4,0xff,0x12,0x3a,0x49,0x80,
62275 -0x2b,0x90,0x97,0x6b,0xe0,0x70,0x2d,0x90,0x97,0x7d,0xf0,0x90,0x00,0x45,0xe0,0x54,
62276 -0xfe,0xf0,0xa3,0xe0,0x54,0xfe,0xf0,0x90,0x05,0x22,0xe4,0xf0,0xa2,0xaf,0x33,0x90,
62277 -0x97,0x49,0xf0,0xc2,0xaf,0x7d,0x20,0xe4,0xff,0x12,0x39,0xdb,0x90,0x97,0x49,0xe0,
62278 -0x24,0xff,0x92,0xaf,0x22,0xbb,0x01,0x06,0x89,0x82,0x8a,0x83,0xf0,0x22,0x50,0x02,
62279 -0xf7,0x22,0xbb,0xfe,0x01,0xf3,0x22,0xf8,0xbb,0x01,0x0d,0xe5,0x82,0x29,0xf5,0x82,
62280 -0xe5,0x83,0x3a,0xf5,0x83,0xe8,0xf0,0x22,0x50,0x06,0xe9,0x25,0x82,0xc8,0xf6,0x22,
62281 -0xbb,0xfe,0x05,0xe9,0x25,0x82,0xc8,0xf2,0x22,0xc5,0xf0,0xf8,0xa3,0xe0,0x28,0xf0,
62282 -0xc5,0xf0,0xf8,0xe5,0x82,0x15,0x82,0x70,0x02,0x15,0x83,0xe0,0x38,0xf0,0x22,0xa3,
62283 -0xf8,0xe0,0xc5,0xf0,0x25,0xf0,0xf0,0xe5,0x82,0x15,0x82,0x70,0x02,0x15,0x83,0xe0,
62284 -0xc8,0x38,0xf0,0xe8,0x22,0xbb,0x01,0x0a,0x89,0x82,0x8a,0x83,0xe0,0xf5,0xf0,0xa3,
62285 -0xe0,0x22,0x50,0x06,0x87,0xf0,0x09,0xe7,0x19,0x22,0xbb,0xfe,0x07,0xe3,0xf5,0xf0,
62286 -0x09,0xe3,0x19,0x22,0x89,0x82,0x8a,0x83,0xe4,0x93,0xf5,0xf0,0x74,0x01,0x93,0x22,
62287 -0xbb,0x01,0x10,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe0,0xf5,0xf0,
62288 -0xa3,0xe0,0x22,0x50,0x09,0xe9,0x25,0x82,0xf8,0x86,0xf0,0x08,0xe6,0x22,0xbb,0xfe,
62289 -0x0a,0xe9,0x25,0x82,0xf8,0xe2,0xf5,0xf0,0x08,0xe2,0x22,0xe5,0x83,0x2a,0xf5,0x83,
62290 -0xe9,0x93,0xf5,0xf0,0xa3,0xe9,0x93,0x22,0xbb,0x01,0x0a,0x89,0x82,0x8a,0x83,0xf0,
62291 -0xe5,0xf0,0xa3,0xf0,0x22,0x50,0x06,0xf7,0x09,0xa7,0xf0,0x19,0x22,0xbb,0xfe,0x06,
62292 -0xf3,0xe5,0xf0,0x09,0xf3,0x19,0x22,0xf8,0xbb,0x01,0x11,0xe5,0x82,0x29,0xf5,0x82,
62293 -0xe5,0x83,0x3a,0xf5,0x83,0xe8,0xf0,0xe5,0xf0,0xa3,0xf0,0x22,0x50,0x09,0xe9,0x25,
62294 -0x82,0xc8,0xf6,0x08,0xa6,0xf0,0x22,0xbb,0xfe,0x09,0xe9,0x25,0x82,0xc8,0xf2,0xe5,
62295 -0xf0,0x08,0xf2,0x22,0xeb,0x9f,0xf5,0xf0,0xea,0x9e,0x42,0xf0,0xe9,0x9d,0x42,0xf0,
62296 -0xe8,0x9c,0x45,0xf0,0x22,0xa4,0x25,0x82,0xf5,0x82,0xe5,0xf0,0x35,0x83,0xf5,0x83,
62297 -0x22,0xd0,0x83,0xd0,0x82,0xf8,0xe4,0x93,0x70,0x12,0x74,0x01,0x93,0x70,0x0d,0xa3,
62298 -0xa3,0x93,0xf8,0x74,0x01,0x93,0xf5,0x82,0x88,0x83,0xe4,0x73,0x74,0x02,0x93,0x68,
62299 -0x60,0xef,0xa3,0xa3,0xa3,0x80,0xdf,0x90,0x97,0x46,0xeb,0xf0,0xa3,0xea,0xf0,0xa3,
62300 -0xe9,0xf0,0x90,0x97,0x46,0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,0x90,0x00,0x04,
62301 -0x12,0x1c,0xef,0xff,0x54,0x1f,0x90,0x97,0x49,0xf0,0x90,0x00,0x03,0x12,0x1c,0xef,
62302 -0x54,0xf0,0xc4,0x54,0x0f,0x90,0x97,0x4a,0xf0,0xef,0x54,0x20,0xc4,0x13,0x54,0x07,
62303 -0xa3,0xf0,0x90,0x97,0x49,0xe0,0xff,0x75,0xf0,0x08,0xa4,0x24,0x65,0xf5,0x82,0xe4,
62304 -0x34,0x93,0xad,0x82,0x90,0x97,0x4c,0xf0,0xa3,0xed,0xf0,0xef,0x75,0xf0,0x08,0xa4,
62305 -0x24,0x63,0xf9,0x74,0x93,0x35,0xf0,0xfa,0xa3,0x74,0x01,0xf0,0xa3,0xea,0xf0,0xa3,
62306 -0xe9,0xf0,0x90,0x97,0x46,0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,0x90,0x00,0x03,0x12,0x1c,
62307 -0xef,0x54,0x0f,0xff,0x90,0x97,0x4e,0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,0xef,
62308 -0x12,0x65,0x95,0x90,0x97,0x46,0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,0x90,0x00,
62309 -0x02,0x12,0x1c,0xef,0xff,0x90,0x97,0x4e,0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,
62310 -0x90,0x00,0x01,0xef,0x12,0x65,0xa7,0x90,0x97,0x46,0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,
62311 -0xe0,0xf9,0x90,0x00,0x01,0x12,0x1c,0xef,0xff,0x90,0x97,0x4c,0xe0,0xfc,0xa3,0xe0,
62312 -0xfd,0xf5,0x82,0x8c,0x83,0xef,0xf0,0x12,0x1c,0xd6,0x8d,0x82,0x8c,0x83,0xa3,0xf0,
62313 -0x90,0x97,0x4a,0xe0,0xfe,0x90,0x97,0x49,0xe0,0xff,0x24,0xc1,0xf5,0x82,0xe4,0x34,
62314 -0x92,0xf5,0x83,0xee,0xf0,0x90,0x97,0x4b,0xe0,0xfe,0xef,0x75,0xf0,0x08,0xa4,0x24,
62315 -0x69,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xee,0xf0,0xef,0x75,0xf0,0x08,0xa4,0x24,
62316 -0x6a,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0x74,0x01,0xf0,0x02,0x54,0xe6,0xc0,0xe0,
62317 -0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,0xc0,
62318 -0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x01,0xc4,0x74,0xfe,
62319 -0xf0,0x74,0x67,0xa3,0xf0,0x53,0x91,0xdf,0x90,0x01,0x3c,0xe0,0x55,0x30,0xf5,0x34,
62320 -0xa3,0xe0,0x55,0x31,0xf5,0x35,0xa3,0xe0,0x55,0x32,0xf5,0x36,0xe5,0x34,0x30,0xe0,
62321 -0x0f,0x90,0x01,0x3c,0x74,0x01,0xf0,0x90,0x01,0x53,0x74,0x07,0xf0,0x43,0x55,0x80,
62322 -0xe5,0x34,0x30,0xe1,0x09,0x90,0x01,0x3c,0x74,0x02,0xf0,0x12,0x7b,0x00,0xe5,0x34,
62323 -0x30,0xe2,0x3a,0x90,0x01,0x3c,0x74,0x04,0xf0,0x90,0x06,0x92,0xe0,0x30,0xe0,0x1e,
62324 -0x75,0x48,0x14,0x75,0x49,0x00,0xe4,0xfb,0xfd,0x7f,0x58,0x7e,0x01,0x12,0x38,0xec,
62325 -0x90,0x01,0x5b,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x01,0xf0,0x80,0x0f,0x90,0x97,
62326 -0x87,0xe4,0xf0,0x90,0x97,0x8b,0xe0,0xff,0x7d,0x01,0x12,0x6e,0xda,0xe5,0x34,0x30,
62327 -0xe3,0x06,0x90,0x01,0x3c,0x74,0x08,0xf0,0xe5,0x34,0x30,0xe4,0x09,0x90,0x01,0x3c,
62328 -0x74,0x10,0xf0,0x12,0x7e,0xdf,0xe5,0x34,0x30,0xe5,0x09,0x90,0x01,0x3c,0x74,0x20,
62329 -0xf0,0x12,0x6f,0xa2,0xe5,0x35,0x30,0xe0,0x15,0x90,0x01,0x3d,0x74,0x01,0xf0,0x90,
62330 -0x00,0x83,0xe0,0x90,0x97,0x8b,0xf0,0xe0,0xff,0x7d,0x01,0x12,0x6e,0xda,0xe5,0x36,
62331 -0x30,0xe3,0x06,0x90,0x01,0x3e,0x74,0x08,0xf0,0x74,0xfe,0x04,0x90,0x01,0xc4,0xf0,
62332 -0x74,0x67,0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,
62333 -0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,0x32,0x8b,
62334 -0x10,0x8a,0x11,0x89,0x12,0x90,0x00,0x02,0x12,0x1c,0xef,0x90,0x97,0x6c,0xf0,0xe0,
62335 -0x90,0x04,0x94,0xf0,0x90,0x00,0x01,0x12,0x1c,0xef,0x90,0x04,0x95,0xf0,0x90,0x97,
62336 -0x6c,0xe0,0x30,0xe0,0x74,0x90,0x97,0x63,0x74,0x01,0xf0,0x7f,0x80,0x7e,0x08,0x12,
62337 -0x2b,0x13,0x90,0x97,0x65,0x12,0x1d,0xa9,0xab,0x10,0xaa,0x11,0xa9,0x12,0x90,0x00,
62338 -0x01,0x12,0x1c,0xef,0xff,0xe4,0xfc,0xfd,0xfe,0x78,0x1a,0x12,0x1d,0x96,0xa8,0x04,
62339 -0xa9,0x05,0xaa,0x06,0xab,0x07,0x90,0x97,0x65,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,
62340 -0xfe,0xa3,0xe0,0xff,0xec,0x54,0x03,0xfc,0xeb,0x4f,0xff,0xea,0x4e,0xfe,0xe9,0x4d,
62341 -0xfd,0xe8,0x4c,0xfc,0x90,0x97,0x6f,0x12,0x1d,0xa9,0x90,0x05,0x22,0xe4,0xf0,0x90,
62342 -0x97,0x6f,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x78,0x18,0x12,
62343 -0x1d,0x83,0x90,0x04,0x96,0xef,0xf0,0x80,0x45,0xe4,0x90,0x97,0x63,0xf0,0x7f,0x80,
62344 -0x7e,0x08,0x12,0x2b,0x13,0x90,0x97,0x65,0x12,0x1d,0xa9,0x90,0x97,0x65,0xe0,0xfc,
62345 -0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0xec,0x44,0xc0,0xfc,0x90,0x97,0x65,
62346 -0x12,0x1d,0xa9,0x90,0x97,0x65,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,
62347 -0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x80,0x7e,0x08,0x12,0x33,0xd8,0x90,0x97,
62348 -0x6c,0xe0,0x90,0x00,0x47,0x30,0xe1,0x11,0x74,0x0c,0xf0,0xa3,0xe0,0x44,0x0c,0xf0,
62349 -0x90,0x00,0x46,0xe0,0x44,0x10,0xf0,0x80,0x10,0xe0,0x54,0xf3,0xf0,0xa3,0xe0,0x54,
62350 -0xf3,0xf0,0x90,0x00,0x46,0xe0,0x54,0xef,0xf0,0xe4,0x90,0x97,0x69,0xf0,0x22,0x90,
62351 -0x97,0x64,0xe0,0xc3,0x94,0x14,0x50,0x06,0xe0,0x04,0xf0,0x02,0x6a,0xd9,0x90,0x97,
62352 -0x64,0xe0,0x64,0x14,0x60,0x03,0x02,0x6a,0xd9,0x90,0x97,0x73,0xe0,0x70,0x25,0x90,
62353 -0x97,0x76,0xe0,0x70,0x1f,0x90,0x97,0x74,0xe0,0x70,0x19,0x90,0x97,0x77,0xe0,0x70,
62354 -0x13,0x90,0x97,0x75,0xe0,0x70,0x0d,0x90,0x97,0x78,0xe0,0x70,0x07,0x90,0x04,0xfd,
62355 -0xe0,0x54,0xfe,0xf0,0x90,0x97,0x73,0xe0,0x90,0x04,0x88,0xf0,0x90,0x97,0x74,0xe0,
62356 -0x90,0x04,0x89,0xf0,0x90,0x97,0x75,0xe0,0x90,0x04,0x8a,0xf0,0xa3,0xe4,0xf0,0x90,
62357 -0x97,0x76,0xe0,0x90,0x04,0x8c,0xf0,0x90,0x97,0x77,0xe0,0x90,0x04,0x8d,0xf0,0x90,
62358 -0x97,0x78,0xe0,0x90,0x04,0x8e,0xf0,0xa3,0xe4,0xf0,0x90,0x97,0x5f,0xe0,0x90,0x04,
62359 -0x90,0xf0,0x90,0x97,0x60,0xe0,0x90,0x04,0x91,0xf0,0x90,0x97,0x61,0xe0,0x90,0x04,
62360 -0x92,0xf0,0x90,0x97,0x62,0xe0,0x90,0x04,0x93,0xf0,0xe4,0x90,0x97,0x64,0xf0,0x90,
62361 -0x97,0x5f,0x04,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x97,0x73,0xf0,0xa3,
62362 -0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x97,0x64,0xe0,0x90,0x04,0x97,
62363 -0xf0,0x90,0x05,0x60,0xe0,0x90,0x97,0x3a,0xf0,0x90,0x05,0x61,0xe0,0x90,0x97,0x3b,
62364 -0xf0,0x90,0x05,0x62,0xe0,0x90,0x97,0x3c,0xf0,0x90,0x05,0x63,0xe0,0x90,0x97,0x3d,
62365 -0xf0,0x90,0x97,0x7c,0xe0,0xff,0x90,0x97,0x3d,0xe0,0xfe,0xd3,0x9f,0x50,0x0b,0x90,
62366 -0x97,0x7c,0xe0,0xc3,0x9e,0xd3,0x94,0x01,0x40,0x11,0x90,0x97,0x6a,0xe0,0xb4,0x01,
62367 -0x02,0x80,0x03,0x90,0x97,0x6e,0xe0,0xff,0x12,0x79,0x7c,0x22,0x90,0x97,0xb0,0xed,
62368 -0xf0,0x90,0x97,0xaf,0xef,0xf0,0xd3,0x94,0x07,0x50,0x6d,0xe0,0xff,0x74,0x01,0xa8,
62369 -0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x47,0xe0,0x5f,0xf0,
62370 -0x7f,0x10,0x7e,0x00,0x12,0x3a,0xa8,0x90,0x97,0xaf,0xe0,0xff,0x74,0x01,0xa8,0x07,
62371 -0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x46,0xe0,0x4f,0xf0,0x7f,0x10,
62372 -0x7e,0x00,0x12,0x3a,0xa8,0x90,0x97,0xb0,0xe0,0x60,0x16,0x90,0x97,0xaf,0xe0,0xff,
62373 -0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x45,0x80,
62374 -0x78,0x90,0x97,0xaf,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,
62375 -0xfc,0xf4,0xff,0x90,0x00,0x45,0x80,0x7d,0x90,0x97,0xaf,0xe0,0x24,0xf8,0xf0,0xe0,
62376 -0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0xf4,
62377 -0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0x7f,0x10,0x7e,0x00,0x12,0x3a,0xa8,0x90,0x97,
62378 -0xaf,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,
62379 -0x00,0x43,0xe0,0x4f,0xf0,0x7f,0x10,0x7e,0x00,0x12,0x3a,0xa8,0x90,0x97,0xb0,0xe0,
62380 -0x60,0x1b,0x90,0x97,0xaf,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,
62381 -0xd8,0xfc,0xc4,0x54,0xf0,0xff,0x90,0x00,0x42,0xe0,0x4f,0x80,0x1a,0x90,0x97,0xaf,
62382 -0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,
62383 -0xf4,0xff,0x90,0x00,0x42,0xe0,0x5f,0xf0,0x7f,0x10,0x7e,0x00,0x12,0x3a,0xa8,0x22,
62384 -0x90,0x01,0xc4,0x74,0x30,0xf0,0x74,0x6c,0xa3,0xf0,0x7f,0x78,0x7e,0x08,0x12,0x2b,
62385 -0x13,0x90,0x97,0x1d,0x12,0x1d,0xa9,0x7f,0x04,0x7e,0x0c,0x12,0x2b,0x13,0x90,0x97,
62386 -0x21,0x12,0x1d,0xa9,0x7f,0x00,0x7e,0x08,0x12,0x2b,0x13,0x90,0x97,0x25,0x12,0x1d,
62387 -0xa9,0x90,0x97,0x97,0xe0,0x90,0x97,0x1d,0xb4,0x01,0x13,0xe0,0xfc,0xa3,0xe0,0xfd,
62388 -0xa3,0xe0,0xfe,0xa3,0xe0,0x54,0xc7,0xff,0xed,0x54,0xc7,0xfd,0x80,0x0d,0xe0,0xfc,
62389 -0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0x54,0xc7,0xff,0xec,0x90,0x81,0x56,0x12,
62390 -0x1d,0xa9,0x7f,0x78,0x7e,0x08,0x12,0x33,0xd8,0x90,0x97,0x21,0xe0,0xfc,0xa3,0xe0,
62391 -0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0x54,0x0f,0xff,0xec,0x90,0x81,0x56,0x12,0x1d,0xa9,
62392 -0x7f,0x04,0x7e,0x0c,0x12,0x33,0xd8,0x90,0x97,0x25,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,
62393 -0xe0,0xfe,0xa3,0xe0,0x44,0x02,0xff,0xec,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x00,
62394 -0x7e,0x08,0x12,0x33,0xd8,0x7f,0x70,0x7e,0x0e,0x12,0x2b,0x13,0x90,0x97,0x29,0x12,
62395 -0x1d,0xa9,0x90,0x81,0x56,0x12,0x1d,0xb5,0x00,0x1b,0x25,0xa0,0x7f,0x70,0x7e,0x0e,
62396 -0x12,0x33,0xd8,0x90,0x81,0x24,0x12,0x1d,0xb5,0x00,0x00,0x00,0x00,0xe4,0xfd,0xff,
62397 -0x12,0x38,0xb6,0x90,0x97,0x97,0xe0,0xb4,0x01,0x11,0x90,0x81,0x24,0x12,0x1d,0xb5,
62398 -0x00,0x00,0x00,0x00,0xe4,0xfd,0x7f,0x01,0x12,0x38,0xb6,0x90,0x00,0x11,0xe0,0x54,
62399 -0xf6,0xf0,0x7f,0x10,0x7e,0x00,0x02,0x3a,0xa8,0x90,0x97,0x7d,0xe0,0x64,0x01,0x60,
62400 -0x09,0x90,0x97,0x6b,0xe0,0x60,0x03,0x02,0x6e,0x01,0x90,0x97,0x5f,0xe0,0xc3,0x94,
62401 -0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,0x3b,0x90,0x97,0x60,0xe0,0xc3,0x94,0xff,0x50,
62402 -0x06,0xe0,0x04,0xf0,0xe4,0x80,0x28,0x90,0x97,0x61,0xe0,0xc3,0x94,0xff,0x50,0x0a,
62403 -0xe0,0x04,0xf0,0xe4,0x90,0x97,0x60,0xf0,0x80,0x15,0x90,0x97,0x62,0xe0,0xc3,0x94,
62404 -0xff,0x50,0x10,0xe0,0x04,0xf0,0xe4,0x90,0x97,0x61,0xf0,0x90,0x97,0x60,0xf0,0x90,
62405 -0x97,0x5f,0xf0,0x90,0x00,0x44,0xe0,0x54,0x0c,0x60,0x76,0xe0,0x30,0xe2,0x32,0x90,
62406 -0x97,0x73,0xe0,0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,0x24,0x90,0x97,0x74,
62407 -0xe0,0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x11,0x90,0x97,0x75,0xe0,
62408 -0xc3,0x94,0xff,0x50,0x0c,0xe0,0x04,0xf0,0xe4,0x90,0x97,0x74,0xf0,0x90,0x97,0x73,
62409 -0xf0,0x90,0x00,0x44,0xe0,0x30,0xe3,0x32,0x90,0x97,0x76,0xe0,0xc3,0x94,0xff,0x50,
62410 -0x05,0xe0,0x04,0xf0,0x80,0x24,0x90,0x97,0x77,0xe0,0xc3,0x94,0xff,0x50,0x06,0xe0,
62411 -0x04,0xf0,0xe4,0x80,0x11,0x90,0x97,0x78,0xe0,0xc3,0x94,0xff,0x50,0x0c,0xe0,0x04,
62412 -0xf0,0xe4,0x90,0x97,0x77,0xf0,0x90,0x97,0x76,0xf0,0x90,0x04,0xfd,0xe0,0x44,0x01,
62413 -0xf0,0x22,0x90,0x97,0x43,0xeb,0xf0,0xa3,0xea,0xf0,0xa3,0xe9,0xf0,0xad,0x07,0x90,
62414 -0x01,0xc4,0x74,0x02,0xf0,0x74,0x6e,0xa3,0xf0,0xed,0x12,0x66,0xc1,0x6e,0x3f,0x01,
62415 -0x6e,0x4d,0x02,0x6e,0x5b,0x03,0x6e,0x69,0x05,0x6e,0x77,0x06,0x6e,0x85,0x07,0x6e,
62416 -0x93,0x09,0x6e,0xa1,0x0c,0x6e,0xaf,0x0d,0x6e,0xbd,0x0e,0x00,0x00,0x6e,0xcb,0x90,
62417 -0x97,0x43,0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,0x02,0x7d,0x9d,0x90,0x97,0x43,
62418 -0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,0x02,0x7f,0x77,0x90,0x97,0x43,0xe0,0xfb,
62419 -0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,0x02,0x7d,0x17,0x90,0x97,0x43,0xe0,0xfb,0xa3,0xe0,
62420 -0xfa,0xa3,0xe0,0xf9,0x02,0x7c,0x0b,0x90,0x97,0x43,0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,
62421 -0xe0,0xf9,0x02,0x66,0xe7,0x90,0x97,0x43,0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,
62422 -0x02,0x7f,0x28,0x90,0x97,0x43,0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,0x02,0x73,
62423 -0x14,0x90,0x97,0x43,0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,0x02,0x64,0x34,0x90,
62424 -0x97,0x43,0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,0x02,0x7c,0x7e,0x90,0x97,0x43,
62425 -0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,0x02,0x69,0x0f,0xc2,0xaf,0x74,0x02,0x04,
62426 -0x90,0x01,0xc4,0xf0,0x74,0x6e,0xa3,0xf0,0x80,0xfe,0x8f,0x62,0x8d,0x63,0x90,0x01,
62427 -0xc4,0x74,0xda,0xf0,0x74,0x6e,0xa3,0xf0,0xe5,0x62,0x54,0x0f,0xff,0x90,0x97,0x88,
62428 -0xe0,0x54,0x0f,0x6f,0x60,0x78,0xe5,0x62,0x30,0xe2,0x30,0x90,0x97,0x88,0xe0,0x20,
62429 -0xe2,0x05,0x7f,0x01,0x12,0x7e,0x08,0x90,0x97,0x88,0xe0,0x30,0xe3,0x0a,0xe5,0x62,
62430 -0x20,0xe3,0x05,0x12,0x7e,0x27,0x80,0x56,0x90,0x97,0x88,0xe0,0x20,0xe3,0x4f,0xe5,
62431 -0x62,0x30,0xe3,0x4a,0xaf,0x63,0x12,0x7d,0xe8,0x80,0x43,0x90,0x97,0x88,0xe0,0x54,
62432 -0x0f,0xff,0xbf,0x0c,0x0e,0xe5,0x62,0x20,0xe3,0x09,0x12,0x7d,0x72,0xef,0x60,0x2e,
62433 -0x12,0x7e,0x27,0x90,0x97,0x88,0xe0,0x54,0x0f,0xff,0xbf,0x04,0x0e,0xe5,0x62,0x20,
62434 -0xe2,0x09,0x12,0x7b,0x8a,0xef,0x60,0x16,0x12,0x7c,0x47,0x90,0x97,0x88,0xe0,0x54,
62435 -0x0f,0xff,0xbf,0x02,0x09,0x12,0x7a,0xb8,0xef,0x60,0x03,0x12,0x7e,0x44,0x90,0x97,
62436 -0x88,0xe0,0x54,0x0f,0xff,0x90,0x97,0x8b,0xe0,0x54,0x0f,0x6f,0x70,0x23,0xe0,0x30,
62437 -0xe6,0x1f,0x90,0x97,0x88,0xe0,0x54,0x0f,0xff,0x90,0x97,0x7e,0xe0,0xfe,0x4f,0x90,
62438 -0x01,0x2f,0xf0,0xee,0x64,0x80,0x90,0x97,0x7e,0xf0,0x90,0x97,0x8b,0xe0,0x54,0xbf,
62439 -0xf0,0x22,0x90,0x97,0x6b,0xe0,0x64,0x01,0x60,0x03,0x02,0x70,0x65,0x90,0x00,0x46,
62440 -0xe0,0x44,0x01,0xf0,0x90,0x97,0x7d,0xe0,0x70,0x40,0x90,0x97,0x63,0xe0,0x60,0x1d,
62441 -0x90,0x97,0x6f,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,
62442 -0x56,0x12,0x1d,0xa9,0x7f,0x80,0x7e,0x08,0x12,0x33,0xd8,0x80,0x06,0x90,0x05,0x22,
62443 -0x74,0x7f,0xf0,0x90,0x97,0x6a,0xe0,0xff,0x12,0x79,0x7c,0x90,0x97,0x7d,0x74,0x01,
62444 -0xf0,0x90,0x00,0x45,0xe0,0x54,0xfe,0xf0,0x80,0x44,0x90,0x97,0x7d,0xe0,0x64,0x01,
62445 -0x70,0x3c,0x90,0x97,0x6e,0xe0,0xff,0x12,0x79,0x7c,0xe4,0x90,0x97,0x7d,0xf0,0x90,
62446 -0x00,0x45,0xe0,0x44,0x01,0xf0,0x90,0x97,0x63,0xe0,0x60,0x1d,0x90,0x97,0x65,0xe0,
62447 -0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,
62448 -0x7f,0x80,0x7e,0x08,0x12,0x33,0xd8,0x80,0x05,0x90,0x05,0x22,0xe4,0xf0,0x90,0x05,
62449 -0x87,0xe0,0x64,0x80,0xf0,0x90,0x97,0x79,0xe0,0x90,0x05,0x84,0xf0,0x90,0x97,0x7a,
62450 -0xe0,0x90,0x05,0x85,0xf0,0x90,0x97,0x7b,0xe0,0x90,0x05,0x86,0xf0,0x90,0x97,0x7c,
62451 -0xe0,0x90,0x05,0x87,0xf0,0x22,0x90,0x97,0x30,0xeb,0xf0,0xa3,0xea,0xf0,0xa3,0xe9,
62452 -0xf0,0x90,0x97,0x96,0xe0,0x64,0x02,0x70,0x03,0x02,0x71,0x1b,0x90,0x01,0xaf,0xe0,
62453 -0x60,0x09,0x90,0x01,0xc7,0xe0,0x04,0xf0,0xf0,0x80,0xf1,0x90,0x97,0xb3,0xe0,0xff,
62454 -0x04,0xf0,0x90,0x97,0x30,0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,0x90,0x00,0x01,
62455 -0xef,0x12,0x65,0xa7,0xa2,0xaf,0xe4,0x33,0x90,0x97,0x36,0xf0,0xc2,0xaf,0x90,0x97,
62456 -0x30,0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,0xe0,0x8b,0x24,0x8a,0x25,0xf5,0x26,0x75,0x27,
62457 -0x02,0x7b,0x01,0x7a,0x01,0x79,0xa0,0x12,0x79,0x27,0x90,0x97,0x36,0xe0,0x24,0xff,
62458 -0x92,0xaf,0xa2,0xaf,0xe4,0x33,0xf0,0xc2,0xaf,0x90,0x97,0x33,0xe0,0xfb,0xa3,0xe0,
62459 -0xfa,0xa3,0xe0,0x8b,0x24,0x8a,0x25,0xf5,0x26,0x90,0x97,0x30,0xe0,0xfb,0xa3,0xe0,
62460 -0xfa,0xa3,0xe0,0xf9,0x12,0x1c,0xd6,0xff,0xc4,0x54,0x0f,0xf5,0x27,0x7b,0x01,0x7a,
62461 -0x01,0x79,0xa2,0x12,0x79,0x27,0x90,0x97,0x36,0xe0,0x24,0xff,0x92,0xaf,0x90,0x01,
62462 -0xaf,0x74,0xff,0xf0,0x90,0x01,0xcb,0xe0,0x64,0x80,0xf0,0x22,0x90,0x01,0xc4,0x74,
62463 -0x1c,0xf0,0x74,0x71,0xa3,0xf0,0x90,0x00,0x11,0xe0,0x44,0x09,0xf0,0x7f,0x10,0x7e,
62464 -0x00,0x12,0x3a,0xa8,0x90,0x97,0x1d,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,
62465 -0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x78,0x7e,0x08,0x12,0x33,0xd8,0x90,
62466 -0x97,0x21,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,
62467 -0x12,0x1d,0xa9,0x7f,0x04,0x7e,0x0c,0x12,0x33,0xd8,0x90,0x97,0x25,0xe0,0xfc,0xa3,
62468 -0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x00,
62469 -0x7e,0x08,0x12,0x33,0xd8,0x90,0x97,0x29,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,
62470 -0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x70,0x7e,0x0e,0x12,0x33,0xd8,
62471 -0x90,0x81,0x24,0x12,0x1d,0xb5,0x00,0x03,0x2d,0x95,0xe4,0xfd,0xff,0x12,0x38,0xb6,
62472 -0x90,0x97,0x97,0xe0,0xb4,0x01,0x11,0x90,0x81,0x24,0x12,0x1d,0xb5,0x00,0x03,0x2d,
62473 -0x95,0xe4,0xfd,0x7f,0x01,0x12,0x38,0xb6,0x22,0x90,0x97,0x9e,0xef,0xf0,0xa3,0xed,
62474 -0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xe5,0x65,0x60,0x05,0xe4,0xff,0x12,0x7e,0x99,0x90,
62475 -0x97,0x9e,0xe0,0x30,0xe0,0x09,0x90,0x97,0xa0,0xe4,0xf0,0xa3,0x74,0x80,0xf0,0x90,
62476 -0x04,0x1d,0xe0,0x60,0x1d,0x90,0x05,0x22,0xe0,0x90,0x97,0xa2,0xf0,0xe0,0xff,0x54,
62477 -0x90,0x60,0xec,0x90,0x01,0xc8,0x74,0xfc,0xf0,0xef,0x54,0x6f,0x90,0x05,0x22,0xf0,
62478 -0x80,0xdd,0x90,0x97,0x9e,0xe0,0xff,0xc3,0x13,0x90,0xfd,0x10,0xf0,0x90,0x04,0x25,
62479 -0xef,0xf0,0x90,0x97,0x9f,0xe0,0x60,0x10,0xa3,0xa3,0xe0,0x24,0x10,0xf5,0x82,0xe4,
62480 -0x34,0xfc,0xf5,0x83,0xe0,0x44,0x80,0xf0,0x90,0x97,0xa0,0xa3,0xe0,0xff,0xfd,0x24,
62481 -0x08,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe4,0xf0,0x74,0x09,0x2d,0xf5,0x82,0xe4,
62482 -0x34,0xfc,0xf5,0x83,0xe0,0x54,0xf0,0xf0,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,
62483 -0xf5,0x83,0xe0,0x54,0xf7,0xf0,0x90,0x97,0xa0,0xe0,0xfe,0xa3,0xe0,0xff,0x22,0x90,
62484 -0x97,0xb5,0xef,0xf0,0xd3,0x94,0x07,0x50,0x4a,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,
62485 -0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x46,0xe0,0x5f,0xf0,0x7f,0x10,
62486 -0x7e,0x00,0x12,0x3a,0xa8,0x90,0x97,0xb5,0xe0,0xfd,0x74,0x01,0x7e,0x00,0xa8,0x05,
62487 -0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,0x44,0xe0,0xfb,
62488 -0xe4,0xfe,0xef,0x5b,0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,0xd8,
62489 -0xf8,0xff,0x22,0x90,0x97,0xb5,0xe0,0x24,0xf8,0xf0,0xe0,0xff,0x74,0x01,0xa8,0x07,
62490 -0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0x7f,
62491 -0x10,0x7e,0x00,0x12,0x3a,0xa8,0x90,0x97,0xb5,0xe0,0xfd,0x74,0x01,0x7e,0x00,0xa8,
62492 -0x05,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,0x42,0xe0,
62493 -0xfb,0xe4,0xfe,0xef,0x5b,0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,
62494 -0xd8,0xf8,0xff,0x22,0x90,0x97,0x46,0xeb,0xf0,0xa3,0xea,0xf0,0xa3,0xe9,0xf0,0xa2,
62495 -0xaf,0xe4,0x33,0xa3,0xf0,0xc2,0xaf,0x90,0x97,0x46,0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,
62496 -0xe0,0xf9,0x90,0x00,0x01,0x12,0x66,0x20,0xfa,0xe5,0xf0,0x24,0x00,0xff,0xe4,0x3a,
62497 -0xfe,0x90,0x97,0x46,0xa3,0xe0,0xfa,0x90,0x00,0x01,0xee,0x8f,0xf0,0x12,0x66,0x77,
62498 -0x12,0x1c,0xd6,0xff,0x60,0x37,0xb5,0x5e,0x1b,0x90,0x97,0x46,0xe0,0xfb,0xa3,0xe0,
62499 -0xfa,0xa3,0xe0,0xf9,0x90,0x00,0x01,0x12,0x66,0x20,0x65,0x60,0x70,0x04,0xe5,0x5f,
62500 -0x65,0xf0,0x60,0x2e,0x90,0x97,0x46,0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,0x90,
62501 -0x00,0x01,0x12,0x66,0x20,0xff,0xae,0xf0,0x12,0x7c,0xb4,0x80,0x15,0x90,0x97,0x46,
62502 -0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,0x12,0x1c,0xd6,0x65,0x5e,0x60,0x03,0x12,
62503 -0x7f,0x56,0x90,0x97,0x49,0xe0,0x24,0xff,0x92,0xaf,0x22,0xc0,0xe0,0xc0,0xf0,0xc0,
62504 -0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,
62505 -0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x01,0xc4,0x74,0xab,0xf0,0x74,0x73,
62506 -0xa3,0xf0,0x53,0x91,0xef,0x90,0x00,0x51,0xe0,0xff,0x90,0x00,0x55,0xe0,0x5f,0xf5,
62507 -0x3d,0xe5,0x3d,0x30,0xe6,0x18,0x74,0x40,0xf0,0x90,0x97,0x6c,0xe0,0x54,0x03,0xff,
62508 -0xbf,0x03,0x0b,0x90,0x97,0x69,0xe0,0x60,0x05,0x7f,0x01,0x12,0x44,0x7b,0xe5,0x3d,
62509 -0x30,0xe7,0x15,0x90,0x00,0x55,0x74,0x80,0xf0,0x90,0x97,0x6c,0xe0,0x54,0x03,0xff,
62510 -0xbf,0x03,0x05,0x7f,0x02,0x12,0x44,0x7b,0x90,0x01,0xc4,0x74,0xab,0xf0,0x74,0x73,
62511 -0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,
62512 -0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,0x32,0xef,0x60,0x34,
62513 -0x7d,0x7d,0x7f,0x02,0x12,0x39,0xbe,0x7d,0x02,0x7f,0x03,0x12,0x39,0xbe,0x90,0x01,
62514 -0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x7d,0x01,0x7f,0x0c,0x12,0x6e,0xda,
62515 -0xe4,0xff,0x12,0x7e,0x99,0x90,0x06,0x04,0xe0,0x54,0x7f,0xf0,0x90,0x06,0x0a,0xe0,
62516 -0x54,0xf8,0xf0,0x22,0x90,0x01,0x36,0x74,0x7d,0xf0,0xa3,0x74,0x02,0xf0,0x7d,0x7d,
62517 -0xff,0x12,0x3a,0x2f,0x7d,0x02,0x7f,0x03,0x12,0x3a,0x2f,0x90,0x06,0x04,0xe0,0x44,
62518 -0x80,0xf0,0x90,0x06,0x0a,0xe0,0x44,0x07,0xf0,0x90,0x97,0x83,0xe0,0xa3,0xe0,0x90,
62519 -0x05,0x58,0xf0,0xe5,0x64,0x30,0xe0,0x1b,0x90,0x97,0x81,0xe0,0x70,0x1a,0xe0,0x04,
62520 -0xf0,0x90,0x97,0x88,0xe0,0x54,0x0f,0xc3,0x94,0x04,0x50,0x0c,0x7d,0x01,0x7f,0x04,
62521 -0x02,0x6e,0xda,0xe4,0x90,0x97,0x81,0xf0,0x22,0x02,0x75,0x07,0x02,0x62,0xd3,0xe4,
62522 -0x93,0xa3,0xf8,0xe4,0x93,0xa3,0x40,0x03,0xf6,0x80,0x01,0xf2,0x08,0xdf,0xf4,0x80,
62523 -0x29,0xe4,0x93,0xa3,0xf8,0x54,0x07,0x24,0x0c,0xc8,0xc3,0x33,0xc4,0x54,0x0f,0x44,
62524 -0x20,0xc8,0x83,0x40,0x04,0xf4,0x56,0x80,0x01,0x46,0xf6,0xdf,0xe4,0x80,0x0b,0x01,
62525 -0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x90,0x7f,0x0e,0xe4,0x7e,0x01,0x93,0x60,0xbc,
62526 -0xa3,0xff,0x54,0x3f,0x30,0xe5,0x09,0x54,0x1f,0xfe,0xe4,0x93,0xa3,0x60,0x01,0x0e,
62527 -0xcf,0x54,0xc0,0x25,0xe0,0x60,0xa8,0x40,0xb8,0xe4,0x93,0xa3,0xfa,0xe4,0x93,0xa3,
62528 -0xf8,0xe4,0x93,0xa3,0xc8,0xc5,0x82,0xc8,0xca,0xc5,0x83,0xca,0xf0,0xa3,0xc8,0xc5,
62529 -0x82,0xc8,0xca,0xc5,0x83,0xca,0xdf,0xe9,0xde,0xe7,0x80,0xbe,0x8f,0x0f,0x74,0x75,
62530 -0x90,0x01,0xc4,0xf0,0xa3,0x74,0x4c,0xf0,0xe5,0x0f,0x75,0xf0,0x08,0xa4,0x24,0x67,
62531 -0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe0,0xff,0x74,0xa5,0x25,0x0f,0xf5,0x82,0xe4,
62532 -0x34,0x96,0xf5,0x83,0xe0,0x54,0x1f,0xfb,0xd3,0x9f,0x40,0x02,0xab,0x07,0xeb,0x25,
62533 -0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,
62534 -0xff,0xeb,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,
62535 -0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xe4,0xfc,0xfd,0xe5,0x0f,
62536 -0x25,0xe0,0x25,0xe0,0x24,0xe1,0xf5,0x82,0xe4,0x34,0x92,0xf5,0x83,0x12,0x1d,0xa9,
62537 -0x74,0x84,0x25,0x0f,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xeb,0xf0,0xff,0x22,0x90,
62538 -0x97,0x4c,0xef,0xf0,0xd3,0x94,0x07,0x50,0x33,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,
62539 -0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x47,0xe0,0x5f,0xf0,0x7f,0x10,
62540 -0x7e,0x00,0x12,0x3a,0xa8,0x90,0x97,0x4c,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,
62541 -0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x46,0x80,0x3b,0x90,0x97,0x4c,0xe0,
62542 -0x24,0xf8,0xf0,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,
62543 -0xc4,0x54,0xf0,0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0x7f,0x10,0x7e,0x00,0x12,
62544 -0x3a,0xa8,0x90,0x97,0x4c,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,
62545 -0xd8,0xfc,0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0x7f,0x10,0x7e,0x00,0x12,0x3a,
62546 -0xa8,0x22,0x8f,0x0a,0x8d,0x0b,0xad,0x03,0x74,0x76,0x90,0x01,0xc4,0xf0,0xa3,0x74,
62547 -0x52,0xf0,0xe5,0x0b,0x54,0x1f,0xf9,0x74,0x01,0x25,0x0a,0xf5,0x82,0xe4,0x34,0x92,
62548 -0xf5,0x83,0xe0,0xff,0x90,0x04,0xfd,0xe0,0xb4,0x01,0x05,0x75,0x0e,0x03,0x80,0x03,
62549 -0x75,0x0e,0x01,0xed,0xd3,0x95,0x0e,0x40,0x05,0xaf,0x0a,0x02,0x75,0x4c,0x90,0x01,
62550 -0xc5,0x74,0x20,0xf0,0xe5,0x0d,0x2f,0xff,0xe9,0x90,0x41,0xd6,0x93,0xfe,0xef,0xd3,
62551 -0x9e,0x40,0x22,0x90,0x01,0xc5,0x74,0x40,0xf0,0x74,0x01,0x25,0x0a,0xf5,0x82,0xe4,
62552 -0x34,0x92,0xf5,0x83,0xe4,0xf0,0x74,0x84,0x25,0x0a,0xf5,0x82,0xe4,0x34,0x04,0xf5,
62553 -0x83,0xe5,0x0b,0xf0,0x22,0x74,0x01,0x25,0x0a,0xf5,0x82,0xe4,0x34,0x92,0xf5,0x83,
62554 -0xef,0xf0,0x22,0xe4,0x90,0x97,0x2e,0xf0,0xe5,0x65,0x60,0x6c,0xe5,0x64,0x64,0x01,
62555 -0x70,0x66,0xe5,0x65,0x64,0x02,0x60,0x06,0xe5,0x65,0x64,0x03,0x70,0x1d,0x90,0x97,
62556 -0x7f,0xe0,0x14,0xf0,0xe0,0x60,0x04,0xa3,0xe0,0x60,0x16,0x90,0x97,0x7f,0xe0,0x70,
62557 -0x0a,0x90,0x97,0x8a,0xe0,0x90,0x97,0x7f,0xf0,0x80,0x00,0x90,0x97,0x2e,0x74,0x01,
62558 -0xf0,0x90,0x97,0x2e,0xe0,0x60,0x31,0x90,0x97,0x8f,0xe0,0x44,0x10,0xf0,0x90,0x97,
62559 -0x85,0xe0,0xf5,0x48,0xe4,0xf5,0x49,0xfb,0xfd,0x7f,0x54,0x7e,0x01,0x12,0x38,0xec,
62560 -0x90,0x01,0x57,0x74,0x05,0xf0,0x90,0x97,0x88,0xe0,0x54,0x0f,0xc3,0x94,0x04,0x50,
62561 -0x07,0x7d,0x01,0x7f,0x04,0x12,0x6e,0xda,0x22,0x90,0x06,0xa9,0xe0,0xf5,0x0a,0x54,
62562 -0xc0,0x70,0x0e,0x90,0x97,0x89,0xf0,0x90,0x97,0x8b,0xe0,0xff,0x7d,0x01,0x02,0x6e,
62563 -0xda,0xe5,0x0a,0x30,0xe6,0x12,0x90,0x97,0x89,0x74,0x01,0xf0,0x90,0x97,0x8f,0xe0,
62564 -0x44,0x01,0xf0,0x12,0x7e,0x7e,0x80,0x07,0x90,0x97,0x8f,0xe0,0x54,0xfe,0xf0,0xe5,
62565 -0x0a,0x30,0xe7,0x29,0x90,0x97,0x89,0x74,0x01,0xf0,0x90,0x97,0x8f,0xe0,0x44,0x02,
62566 -0xf0,0x75,0x48,0x03,0xe4,0xf5,0x49,0xfb,0xfd,0x7f,0x54,0x7e,0x01,0x12,0x38,0xec,
62567 -0x90,0x01,0x57,0x74,0x05,0xf0,0x90,0x97,0x8e,0x74,0x01,0xf0,0x22,0x90,0x97,0x8f,
62568 -0xe0,0x54,0xfd,0xf0,0x22,0x90,0x00,0x2b,0xe0,0x44,0x01,0xf0,0x7f,0xe8,0x7e,0x03,
62569 -0x12,0x3a,0xa8,0x90,0x00,0x08,0xe0,0x44,0x10,0xf0,0x7f,0x10,0x7e,0x00,0x12,0x3a,
62570 -0xa8,0x90,0x00,0x09,0xe0,0x54,0xf7,0xf0,0x7f,0x10,0x7e,0x00,0x12,0x3a,0xa8,0x90,
62571 -0x00,0x28,0xe0,0x54,0xfe,0xf0,0x7f,0x10,0x7e,0x00,0x12,0x3a,0xa8,0x90,0x00,0x20,
62572 -0xe0,0x54,0xfe,0xf0,0x7f,0x10,0x7e,0x00,0x12,0x3a,0xa8,0x90,0x00,0x25,0xe0,0x44,
62573 -0x40,0xf0,0x7f,0x10,0x7e,0x00,0x12,0x3a,0xa8,0x90,0x00,0x09,0xe0,0x54,0xef,0xf0,
62574 -0x7f,0x10,0x7e,0x00,0x02,0x3a,0xa8,0x8b,0x10,0x8a,0x11,0x89,0x12,0x12,0x7e,0xcd,
62575 -0xab,0x10,0xaa,0x11,0xa9,0x12,0x12,0x1c,0xd6,0xf5,0x65,0x14,0x60,0x0e,0x14,0x60,
62576 -0x0f,0x14,0x60,0x1a,0x24,0x03,0x70,0x3c,0x7f,0x01,0x80,0x35,0xe4,0xff,0x80,0x31,
62577 -0x90,0x97,0x8a,0x74,0x01,0xf0,0x90,0x97,0x7f,0xf0,0xe4,0xff,0x80,0x23,0xab,0x10,
62578 -0xaa,0x11,0xa9,0x12,0x90,0x00,0x02,0x12,0x1c,0xef,0xff,0x90,0x97,0x8a,0x70,0x05,
62579 -0x74,0x05,0xf0,0x80,0x02,0xef,0xf0,0x90,0x97,0x8a,0xe0,0x90,0x97,0x7f,0xf0,0xe4,
62580 -0xff,0x12,0x74,0x3d,0x22,0x90,0x00,0x25,0xe0,0x54,0xbf,0xf0,0x7f,0x10,0x7e,0x00,
62581 -0x12,0x3a,0xa8,0x90,0x00,0x20,0xe0,0x44,0x01,0xf0,0x7f,0x10,0x7e,0x00,0x12,0x3a,
62582 -0xa8,0x90,0x00,0x28,0xe0,0x44,0x01,0xf0,0x7f,0x10,0x7e,0x00,0x12,0x3a,0xa8,0x90,
62583 -0x00,0xf0,0xe0,0x30,0xe1,0xf9,0x90,0x00,0x09,0xe0,0x44,0x08,0xf0,0x7f,0x10,0x7e,
62584 -0x00,0x12,0x3a,0xa8,0x90,0x00,0x08,0xe0,0x54,0xef,0xf0,0x7f,0x10,0x7e,0x00,0x12,
62585 -0x3a,0xa8,0x90,0x00,0x2b,0xe0,0x54,0xfe,0xf0,0x7f,0xe8,0x7e,0x03,0x02,0x3a,0xa8,
62586 -0x90,0x00,0x45,0xe4,0xf0,0x90,0x04,0xfd,0xf0,0xa3,0xf0,0x90,0x97,0x6d,0xf0,0x90,
62587 -0x97,0x73,0xf0,0x90,0x97,0x76,0xf0,0x90,0x97,0x74,0xf0,0x90,0x97,0x77,0xf0,0x90,
62588 -0x97,0x75,0xf0,0x90,0x97,0x78,0xf0,0x90,0x97,0x5f,0x04,0xf0,0xe4,0xa3,0xf0,0xa3,
62589 -0xf0,0xa3,0xf0,0x90,0x97,0x64,0xf0,0x90,0x97,0x69,0xf0,0x90,0x97,0x6b,0xf0,0x90,
62590 -0x97,0x7d,0xf0,0x90,0x97,0x6e,0xf0,0x90,0x97,0x6a,0xf0,0x90,0x97,0x63,0xf0,0x90,
62591 -0x00,0x51,0xe0,0x44,0xc0,0xf0,0x22,0x8b,0x21,0x8a,0x22,0x89,0x23,0x90,0x97,0x98,
62592 -0xeb,0xf0,0xa3,0xea,0xf0,0xa3,0xe9,0xf0,0xa3,0xe5,0x24,0xf0,0xa3,0xe5,0x25,0xf0,
62593 -0xa3,0xe5,0x26,0xf0,0xaf,0x27,0x15,0x27,0xef,0x60,0x2a,0x90,0x97,0x9b,0xe0,0xfb,
62594 -0xa3,0xe4,0x75,0xf0,0x01,0x12,0x65,0xdf,0xa9,0xf0,0xfa,0x12,0x1c,0xd6,0xff,0x90,
62595 -0x97,0x98,0xe0,0xfb,0xa3,0xe4,0x75,0xf0,0x01,0x12,0x65,0xdf,0xa9,0xf0,0xfa,0xef,
62596 -0x12,0x65,0x95,0x80,0xcf,0xab,0x21,0xaa,0x22,0xa9,0x23,0x22,0x90,0x05,0x60,0xe0,
62597 -0x90,0x97,0x79,0xf0,0x90,0x05,0x61,0xe0,0x90,0x97,0x7a,0xf0,0x90,0x05,0x62,0xe0,
62598 -0x90,0x97,0x7b,0xf0,0x90,0x05,0x63,0xe0,0x90,0x97,0x7c,0xf0,0xc3,0x74,0xff,0x9f,
62599 -0xfe,0x90,0x97,0x7a,0xe0,0xd3,0x9e,0x40,0x1e,0xe0,0x2f,0xf0,0xa3,0xe0,0xb4,0xff,
62600 -0x0f,0xe4,0xf0,0xa3,0xe0,0xb4,0xff,0x03,0xe4,0xf0,0x22,0x90,0x97,0x7c,0x80,0x03,
62601 -0x90,0x97,0x7b,0xe0,0x04,0xf0,0x22,0x90,0x97,0x7a,0xe0,0x2f,0xf0,0x22,0xe4,0xf5,
62602 -0x64,0x90,0x97,0x8f,0xf0,0xf5,0x65,0x90,0x97,0x8b,0x74,0x0c,0xf0,0x90,0x97,0x88,
62603 -0xf0,0xe4,0x90,0x97,0x8d,0xf0,0x90,0x97,0x87,0xf0,0x90,0x97,0x86,0xf0,0x90,0x97,
62604 -0x8a,0x04,0xf0,0x90,0x97,0x7f,0xf0,0xe4,0x90,0x97,0x8e,0xf0,0x90,0x97,0x89,0xf0,
62605 -0x90,0x97,0x81,0xf0,0x90,0x97,0x85,0x74,0x07,0xf0,0xe4,0x90,0x97,0x80,0xf0,0x90,
62606 -0x97,0x83,0xf0,0xa3,0x74,0x02,0xf0,0xe4,0x90,0x97,0x8c,0xf0,0x22,0xe4,0x90,0x97,
62607 -0xad,0xf0,0xa3,0xf0,0x90,0x01,0xc4,0x74,0x1d,0xf0,0x74,0x7a,0xa3,0xf0,0x90,0x05,
62608 -0xf8,0xe0,0x70,0x0f,0xa3,0xe0,0x70,0x0b,0xa3,0xe0,0x70,0x07,0xa3,0xe0,0x70,0x03,
62609 -0x7f,0x01,0x22,0xd3,0x90,0x97,0xae,0xe0,0x94,0xe8,0x90,0x97,0xad,0xe0,0x94,0x03,
62610 -0x40,0x03,0x7f,0x00,0x22,0x7f,0x32,0x7e,0x00,0x12,0x3a,0xa8,0x90,0x97,0xae,0xe0,
62611 -0x04,0xf0,0x70,0xca,0x90,0x97,0xad,0xe0,0x04,0xf0,0x80,0xc2,0xe4,0x90,0x97,0x95,
62612 -0xf0,0xa2,0xaf,0x33,0x90,0x97,0x3b,0xf0,0x90,0x00,0x80,0xe0,0x20,0xe1,0x1a,0x12,
62613 -0x3a,0xbe,0x12,0x3a,0xbe,0x90,0x97,0x3a,0xe0,0x64,0x01,0xf0,0xe0,0x24,0x6c,0x90,
62614 -0x01,0xc4,0xf0,0x74,0x7a,0xa3,0xf0,0x80,0xdf,0x90,0x06,0x30,0x74,0x01,0xf0,0xc2,
62615 -0xaf,0x90,0x00,0x80,0xe0,0x44,0x80,0xf0,0x7f,0x10,0x7e,0x00,0x12,0x3a,0xa8,0x90,
62616 -0x97,0x3b,0xe0,0x24,0xff,0x92,0xaf,0x22,0x90,0x01,0xc4,0x74,0xb8,0xf0,0x74,0x7a,
62617 -0xa3,0xf0,0xe5,0x55,0x70,0x37,0x90,0x97,0x8b,0xe0,0x54,0x0f,0xd3,0x94,0x01,0x50,
62618 -0x2c,0x90,0x02,0x87,0xe0,0x70,0x26,0x90,0x97,0x96,0xe0,0xb4,0x02,0x10,0x90,0x97,
62619 -0x90,0xe0,0xfe,0xa3,0xe0,0xf5,0x82,0x8e,0x83,0xe0,0x60,0x08,0x80,0x0f,0x90,0x01,
62620 -0xaf,0xe0,0x70,0x09,0x90,0x97,0x8c,0xe0,0x60,0x03,0x7f,0x01,0x22,0x7f,0x00,0x22,
62621 -0x90,0x97,0x8e,0xe0,0x60,0x12,0xe4,0xf0,0xa3,0xe0,0x54,0xfd,0xf0,0xe0,0x54,0x03,
62622 -0x70,0x33,0x90,0x97,0x89,0xf0,0x80,0x23,0x90,0x97,0x80,0xe0,0x04,0xf0,0x90,0x97,
62623 -0x8f,0xe0,0x54,0xef,0xf0,0x90,0x97,0x80,0xe0,0xd3,0x94,0x01,0x40,0x0d,0xe5,0x64,
62624 -0xb4,0x01,0x12,0xa3,0xe0,0x70,0x0e,0xe0,0x04,0xf0,0x22,0x90,0x97,0x8b,0xe0,0xff,
62625 -0x7d,0x01,0x12,0x6e,0xda,0x22,0xe4,0x90,0x97,0x3a,0xf0,0xef,0x90,0x00,0x31,0xf0,
62626 -0xee,0x54,0x03,0xff,0xa3,0xe0,0x54,0xfc,0x4f,0xf0,0xa3,0xe0,0x54,0x7f,0xf0,0x90,
62627 -0x00,0x30,0xe0,0x20,0xe7,0x0e,0x90,0x97,0x3a,0xe0,0xc3,0x94,0x64,0x50,0x05,0xe0,
62628 -0x04,0xf0,0x80,0xeb,0x90,0x97,0x3a,0xe0,0xc3,0x94,0x64,0x50,0x0a,0x90,0x00,0x30,
62629 -0xe0,0x12,0x65,0x95,0x7f,0x01,0x22,0x7f,0x00,0x22,0x90,0x01,0xc4,0x74,0x8a,0xf0,
62630 -0x74,0x7b,0xa3,0xf0,0x90,0x04,0x1b,0xe0,0x54,0x7f,0x64,0x7f,0x70,0x2b,0x90,0x97,
62631 -0x89,0xe0,0x64,0x01,0x60,0x23,0x90,0x97,0x8b,0xe0,0x54,0x0f,0xd3,0x94,0x02,0x50,
62632 -0x18,0x90,0x97,0x8f,0xe0,0x20,0xe4,0x11,0x90,0x97,0x87,0xe0,0x64,0x01,0x60,0x09,
62633 -0x90,0x97,0x81,0xe0,0x70,0x03,0x7f,0x01,0x22,0x7f,0x00,0x22,0x8f,0x66,0x90,0x01,
62634 -0xc4,0x74,0xcc,0xf0,0x74,0x7b,0xa3,0xf0,0x90,0x97,0x94,0xe0,0xff,0x7d,0x01,0x12,
62635 -0x71,0xc9,0xe5,0x66,0x60,0x10,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,
62636 -0xe0,0x44,0x10,0xf0,0x80,0x0e,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,
62637 -0xe0,0x54,0xef,0xf0,0x90,0x04,0x1f,0x74,0x01,0xf0,0x22,0x12,0x1c,0xd6,0xff,0xc3,
62638 -0x94,0x20,0x50,0x15,0x90,0x00,0x02,0x12,0x1c,0xef,0xfe,0x74,0x23,0x2f,0xf5,0x82,
62639 -0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0x80,0x0e,0xef,0xb4,0x20,0x0a,0x90,0x00,0x02,
62640 -0x12,0x1c,0xef,0x90,0x93,0x61,0xf0,0x74,0x23,0x2f,0xf5,0x82,0xe4,0x34,0x95,0xf5,
62641 -0x83,0xe0,0x90,0x04,0xb2,0xf0,0x22,0x90,0x01,0x37,0x74,0x02,0xf0,0x90,0x05,0x22,
62642 -0x74,0xff,0xf0,0x12,0x7a,0x1d,0xef,0x70,0x06,0x90,0x01,0xc8,0x74,0xfd,0xf0,0x7d,
62643 -0x02,0x7f,0x03,0x12,0x3a,0x2f,0xe5,0x65,0x60,0x05,0x7f,0x01,0x12,0x7e,0x99,0x12,
62644 -0x6c,0x30,0x90,0x97,0x88,0xe0,0x54,0xf0,0xf0,0xe0,0x44,0x02,0xf0,0x22,0x90,0x00,
62645 -0x02,0x12,0x1c,0xef,0x90,0x97,0x6d,0xf0,0xe0,0x90,0x04,0x9b,0xf0,0x90,0x97,0x6d,
62646 -0xe0,0x60,0x04,0xe0,0xb4,0xff,0x1c,0xa2,0xaf,0xe4,0x33,0xf5,0x10,0xc2,0xaf,0x90,
62647 -0x00,0x47,0xe0,0x54,0xfb,0xf0,0x7d,0x40,0x7f,0x01,0x12,0x39,0xf8,0xe5,0x10,0x24,
62648 -0xff,0x92,0xaf,0x22,0x90,0x97,0x4a,0xee,0xf0,0xa3,0xef,0xf0,0x75,0x5e,0x01,0x8e,
62649 -0x5f,0xf5,0x60,0x7f,0x0b,0x12,0x75,0xcf,0x12,0x7e,0x61,0xe4,0xff,0x12,0x7f,0x1b,
62650 -0x90,0x97,0x4a,0xe0,0xfc,0xa3,0xe0,0xfd,0xec,0xfb,0x8d,0x48,0xe4,0xf5,0x49,0x7d,
62651 -0x01,0x7f,0x60,0x7e,0x01,0x02,0x38,0xec,0x7d,0x02,0x7f,0x03,0x12,0x39,0xbe,0xe5,
62652 -0x65,0x60,0x23,0x90,0x97,0x8d,0xe0,0x60,0x06,0x7d,0x01,0x7f,0x0c,0x80,0x0f,0x90,
62653 -0x97,0x88,0xe0,0x54,0x0f,0xc3,0x94,0x04,0x50,0x07,0x7d,0x01,0x7f,0x04,0x12,0x6e,
62654 -0xda,0xe4,0xff,0x12,0x7e,0x99,0x22,0x90,0x02,0x09,0xe0,0xfd,0x12,0x1c,0xd6,0xfe,
62655 -0xaf,0x05,0xed,0x2e,0x90,0x97,0x92,0xf0,0x90,0x00,0x01,0x12,0x1c,0xef,0xff,0xed,
62656 -0x2f,0x90,0x97,0x93,0xf0,0x90,0x00,0x02,0x12,0x1c,0xef,0xff,0xae,0x05,0xed,0x2f,
62657 -0x90,0x97,0x94,0xf0,0x22,0x90,0x06,0x34,0xe0,0x60,0x26,0x14,0x70,0x1b,0x7b,0x01,
62658 -0x7a,0x06,0x79,0x35,0x7f,0xf9,0x7e,0x01,0x12,0x7b,0x46,0xbf,0x01,0x09,0x90,0x06,
62659 -0x35,0xe0,0x54,0x0f,0xf0,0x80,0x05,0x80,0x00,0x02,0x7f,0x00,0xe4,0x90,0x06,0x34,
62660 -0xf0,0x22,0x90,0x01,0xc4,0x74,0x72,0xf0,0x74,0x7d,0xa3,0xf0,0x90,0x04,0x1b,0xe0,
62661 -0x54,0x7f,0xff,0xbf,0x7f,0x14,0x90,0x97,0x87,0xe0,0x70,0x0e,0x90,0x97,0x8b,0xe0,
62662 -0x54,0x0f,0xd3,0x94,0x04,0x50,0x03,0x7f,0x01,0x22,0x7f,0x00,0x22,0x90,0x00,0x01,
62663 -0x12,0x1c,0xef,0x90,0x97,0x8d,0xf0,0x12,0x1c,0xd6,0x65,0x65,0x60,0x15,0xa2,0xaf,
62664 -0xe4,0x33,0x90,0x97,0x46,0xf0,0xc2,0xaf,0x12,0x78,0x17,0x90,0x97,0x46,0xe0,0x24,
62665 -0xff,0x92,0xaf,0x22,0x90,0x97,0x2e,0xe0,0x54,0xf0,0x44,0x03,0xf0,0x54,0x0f,0x44,
62666 -0x80,0xf0,0x90,0x97,0x33,0xe4,0xf0,0xa3,0x74,0x00,0xf0,0xa3,0x74,0x56,0xf0,0x7b,
62667 -0x01,0x7a,0x97,0x79,0x2e,0x02,0x70,0x66,0x90,0x06,0x04,0xe0,0x54,0xbf,0xf0,0xef,
62668 -0x60,0x0a,0xe5,0x64,0xb4,0x01,0x05,0xe4,0xff,0x12,0x7b,0xcc,0x90,0x97,0x88,0xe0,
62669 -0x54,0xf0,0xf0,0xe0,0x44,0x0c,0xf0,0x22,0x90,0x97,0xb2,0xef,0xf0,0x12,0x71,0x1c,
62670 -0x90,0x97,0xb2,0xe0,0x60,0x05,0x90,0x05,0x22,0xe4,0xf0,0x90,0x97,0x88,0xe0,0x54,
62671 -0xf0,0xf0,0xe0,0x44,0x04,0xf0,0x22,0x90,0x06,0x04,0xe0,0x44,0x40,0xf0,0xe5,0x64,
62672 -0xb4,0x01,0x05,0x7f,0x01,0x12,0x7b,0xcc,0x90,0x97,0x88,0xe0,0x54,0xf0,0xf0,0xe0,
62673 -0x44,0x04,0xf0,0x22,0x90,0x97,0x88,0xe0,0x54,0xf0,0xf0,0xe0,0x44,0x01,0xf0,0x12,
62674 -0x77,0xb5,0x12,0x78,0x75,0x90,0x97,0x88,0xe0,0x54,0xf0,0xf0,0xe0,0x44,0x02,0xf0,
62675 -0x22,0x7f,0x0b,0x12,0x72,0x6f,0xef,0x65,0x61,0x60,0x10,0xe5,0x61,0xb4,0x01,0x05,
62676 -0xe4,0xf5,0x61,0x80,0x03,0x75,0x61,0x01,0x7f,0x01,0x22,0x7f,0x00,0x22,0x90,0x01,
62677 -0xc4,0x74,0x7e,0xf0,0x74,0x7e,0xa3,0xf0,0x90,0x97,0x93,0xe0,0xff,0xe4,0xfd,0x12,
62678 -0x71,0xc9,0x90,0x04,0x1f,0x74,0x01,0xf0,0x22,0xef,0x60,0x0b,0x90,0x97,0x97,0xe0,
62679 -0xb4,0x01,0x10,0xe4,0xff,0x80,0x09,0x90,0x97,0x97,0xe0,0xb4,0x01,0x05,0x7f,0x01,
62680 -0x12,0x4e,0x3b,0x22,0x90,0x00,0x49,0xe0,0x90,0x97,0xb4,0xf0,0xe0,0x54,0x0f,0xf0,
62681 -0xe0,0xff,0x44,0xf0,0x90,0x00,0x49,0xf0,0xef,0x44,0xb0,0xf0,0x22,0xe4,0x90,0x97,
62682 -0x8e,0xf0,0x90,0x97,0x80,0xf0,0x90,0x97,0x89,0xf0,0x90,0x97,0x8f,0xf0,0x22,0xe5,
62683 -0x5e,0xb4,0x01,0x0b,0x12,0x7e,0x61,0xbf,0x01,0x05,0x7f,0x01,0x12,0x7f,0x1b,0x22,
62684 -0x90,0x09,0x28,0xef,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x22,
62685 -0x90,0x06,0x34,0x74,0xff,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x22,0x41,0x97,
62686 -0xb1,0x00,0x41,0x97,0x7e,0x80,0x41,0x97,0xb3,0x00,0x00,0x90,0x01,0xca,0xe5,0x61,
62687 -0xf0,0xef,0x60,0x03,0x12,0x7e,0xb4,0x22,0x90,0x97,0x46,0xeb,0xf0,0xa3,0xea,0xf0,
62688 -0xa3,0xe9,0xf0,0x22,0x90,0x97,0xa7,0xeb,0xf0,0xa3,0xea,0xf0,0xa3,0xe9,0xf0,0x22,
62689 -0x90,0x97,0xaa,0xeb,0xf0,0xa3,0xea,0xf0,0xa3,0xe9,0xf0,0x22,0x8f,0x82,0x8e,0x83,
62690 -0xa3,0xa3,0xa3,0xe4,0xf0,0x22,0xe4,0xf5,0x5e,0x7f,0x60,0x7e,0x01,0x02,0x7f,0x4c,
62691 -0x90,0x97,0x97,0xe0,0x90,0x97,0x2d,0xf0,0x22,0x8f,0x1b,0x8c,0x1c,0x8d,0x1d,0x22,
62692 -0x8f,0x1e,0x8c,0x1f,0x8d,0x20,0x22,0x12,0x1c,0xd6,0xf5,0x64,0x22,0x22,0x52,0x09,
62693 +// =================== v88 UMC B Cut P2PPS with CCX report C2H 2012-12-05 =====================
62694 +u8 Rtl8192CUFwUMCBCutImgArray[UMCBCutImgArrayLength] = {
62695 +0xC2, 0x88, 0x02, 0x05, 0x58, 0x00, 0x02, 0x00, 0x12, 0x05, 0x17, 0x10, 0xC0, 0x3E, 0x01, 0x00,
62696 +0x94, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
62697 +0x02, 0x46, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
62698 +0x00, 0x00, 0x00, 0x02, 0x60, 0xF3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
62699 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
62700 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
62701 +0x00, 0x00, 0x00, 0x02, 0x67, 0x5B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x4B, 0x87, 0x00, 0x00,
62702 +0x05, 0x04, 0x03, 0x02, 0x00, 0x03, 0x06, 0x05, 0x04, 0x03, 0x00, 0x04, 0x06, 0x05, 0x04, 0x02,
62703 +0x00, 0x04, 0x08, 0x07, 0x06, 0x04, 0x00, 0x06, 0x0A, 0x09, 0x08, 0x06, 0x00, 0x08, 0x0A, 0x09,
62704 +0x08, 0x04, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x02, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x00, 0x00, 0x08,
62705 +0x12, 0x11, 0x10, 0x08, 0x00, 0x10, 0x1A, 0x19, 0x18, 0x10, 0x00, 0x18, 0x22, 0x21, 0x20, 0x18,
62706 +0x00, 0x20, 0x22, 0x21, 0x20, 0x10, 0x00, 0x20, 0x22, 0x21, 0x20, 0x08, 0x00, 0x20, 0x22, 0x21,
62707 +0x1C, 0x08, 0x00, 0x20, 0x22, 0x21, 0x14, 0x08, 0x00, 0x20, 0x22, 0x20, 0x18, 0x08, 0x00, 0x20,
62708 +0x31, 0x30, 0x20, 0x10, 0x00, 0x30, 0x31, 0x30, 0x18, 0x00, 0x00, 0x30, 0x31, 0x2F, 0x10, 0x10,
62709 +0x00, 0x30, 0x31, 0x2C, 0x10, 0x10, 0x00, 0x30, 0x31, 0x28, 0x10, 0x00, 0x00, 0x30, 0x31, 0x20,
62710 +0x10, 0x00, 0x00, 0x30, 0x31, 0x10, 0x10, 0x00, 0x00, 0x30, 0x04, 0x04, 0x04, 0x05, 0x04, 0x04,
62711 +0x05, 0x07, 0x07, 0x07, 0x08, 0x0A, 0x04, 0x04, 0x04, 0x04, 0x06, 0x0A, 0x0B, 0x0D, 0x05, 0x05,
62712 +0x07, 0x07, 0x08, 0x0B, 0x0D, 0x0F, 0x04, 0x04, 0x04, 0x05, 0x07, 0x07, 0x09, 0x09, 0x0C, 0x0E,
62713 +0x10, 0x12, 0x06, 0x07, 0x09, 0x0A, 0x0C, 0x0E, 0x11, 0x13, 0x09, 0x09, 0x09, 0x09, 0x0C, 0x0E,
62714 +0x11, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x26, 0x2A, 0x18, 0x1A,
62715 +0x1D, 0x1F, 0x21, 0x27, 0x29, 0x2A, 0x00, 0x00, 0x00, 0x1F, 0x23, 0x28, 0x2A, 0x2C, 0x00, 0x04,
62716 +0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, 0x00, 0x48, 0x00, 0x60,
62717 +0x00, 0x90, 0x00, 0xC0, 0x00, 0xD8, 0x00, 0x50, 0x00, 0x78, 0x00, 0xA0, 0x00, 0xC8, 0x01, 0x40,
62718 +0x01, 0x90, 0x01, 0xE0, 0x02, 0x30, 0x01, 0x2C, 0x01, 0x40, 0x01, 0xE0, 0x02, 0xD0, 0x03, 0xE8,
62719 +0x04, 0xB0, 0x06, 0x40, 0x07, 0xD0, 0x00, 0x02, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x0C,
62720 +0x00, 0x12, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, 0x00, 0x48, 0x00, 0x60, 0x00, 0x6C, 0x00, 0x28,
62721 +0x00, 0x3C, 0x00, 0x50, 0x00, 0x64, 0x00, 0xA0, 0x00, 0xC8, 0x00, 0xF0, 0x01, 0x18, 0x00, 0x64,
62722 +0x00, 0xA0, 0x00, 0xF0, 0x01, 0x68, 0x01, 0xF4, 0x02, 0x58, 0x03, 0x20, 0x03, 0xE8, 0x02, 0x02,
62723 +0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x07, 0x02, 0x03, 0x04, 0x0A, 0x0C, 0x0E,
62724 +0x10, 0x12, 0x05, 0x07, 0x07, 0x08, 0x0B, 0x12, 0x24, 0x3C, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02,
62725 +0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x05, 0x06,
62726 +0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x20, 0x1E, 0x1C, 0x18, 0x10, 0x18, 0x00, 0x00, 0x00, 0x00,
62727 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
62728 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
62729 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
62730 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
62731 +0xBB, 0x01, 0x0C, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0, 0x22, 0x50,
62732 +0x06, 0xE9, 0x25, 0x82, 0xF8, 0xE6, 0x22, 0xBB, 0xFE, 0x06, 0xE9, 0x25, 0x82, 0xF8, 0xE2, 0x22,
62733 +0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE4, 0x93, 0x22, 0xBB, 0x01, 0x06,
62734 +0x89, 0x82, 0x8A, 0x83, 0xF0, 0x22, 0x50, 0x02, 0xF7, 0x22, 0xBB, 0xFE, 0x01, 0xF3, 0x22, 0xF8,
62735 +0xBB, 0x01, 0x0D, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0x22,
62736 +0x50, 0x06, 0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x22, 0xBB, 0xFE, 0x05, 0xE9, 0x25, 0x82, 0xC8, 0xF2,
62737 +0x22, 0xC5, 0xF0, 0xF8, 0xA3, 0xE0, 0x28, 0xF0, 0xC5, 0xF0, 0xF8, 0xE5, 0x82, 0x15, 0x82, 0x70,
62738 +0x02, 0x15, 0x83, 0xE0, 0x38, 0xF0, 0x22, 0xBB, 0x01, 0x0A, 0x89, 0x82, 0x8A, 0x83, 0xE0, 0xF5,
62739 +0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x06, 0x87, 0xF0, 0x09, 0xE7, 0x19, 0x22, 0xBB, 0xFE, 0x07, 0xE3,
62740 +0xF5, 0xF0, 0x09, 0xE3, 0x19, 0x22, 0x89, 0x82, 0x8A, 0x83, 0xE4, 0x93, 0xF5, 0xF0, 0x74, 0x01,
62741 +0x93, 0x22, 0xBB, 0x01, 0x10, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0,
62742 +0xF5, 0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x09, 0xE9, 0x25, 0x82, 0xF8, 0x86, 0xF0, 0x08, 0xE6, 0x22,
62743 +0xBB, 0xFE, 0x0A, 0xE9, 0x25, 0x82, 0xF8, 0xE2, 0xF5, 0xF0, 0x08, 0xE2, 0x22, 0xE5, 0x83, 0x2A,
62744 +0xF5, 0x83, 0xE9, 0x93, 0xF5, 0xF0, 0xA3, 0xE9, 0x93, 0x22, 0xBB, 0x01, 0x0A, 0x89, 0x82, 0x8A,
62745 +0x83, 0xF0, 0xE5, 0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x06, 0xF7, 0x09, 0xA7, 0xF0, 0x19, 0x22, 0xBB,
62746 +0xFE, 0x06, 0xF3, 0xE5, 0xF0, 0x09, 0xF3, 0x19, 0x22, 0xF8, 0xBB, 0x01, 0x11, 0xE5, 0x82, 0x29,
62747 +0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0xE5, 0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x09,
62748 +0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x08, 0xA6, 0xF0, 0x22, 0xBB, 0xFE, 0x09, 0xE9, 0x25, 0x82, 0xC8,
62749 +0xF2, 0xE5, 0xF0, 0x08, 0xF2, 0x22, 0xEF, 0x4B, 0xFF, 0xEE, 0x4A, 0xFE, 0xED, 0x49, 0xFD, 0xEC,
62750 +0x48, 0xFC, 0x22, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22, 0xA4,
62751 +0x25, 0x82, 0xF5, 0x82, 0xE5, 0xF0, 0x35, 0x83, 0xF5, 0x83, 0x22, 0xE0, 0xFB, 0xA3, 0xE0, 0xFA,
62752 +0xA3, 0xE0, 0xF9, 0x22, 0xF8, 0xE0, 0xFB, 0xA3, 0xA3, 0xE0, 0xF9, 0x25, 0xF0, 0xF0, 0xE5, 0x82,
62753 +0x15, 0x82, 0x70, 0x02, 0x15, 0x83, 0xE0, 0xFA, 0x38, 0xF0, 0x22, 0xEB, 0xF0, 0xA3, 0xEA, 0xF0,
62754 +0xA3, 0xE9, 0xF0, 0x22, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12, 0x74, 0x01, 0x93,
62755 +0x70, 0x0D, 0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83, 0xE4, 0x73, 0x74,
62756 +0x02, 0x93, 0x68, 0x60, 0xEF, 0xA3, 0xA3, 0xA3, 0x80, 0xDF, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4,
62757 +0x93, 0x70, 0x12, 0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5,
62758 +0x82, 0x88, 0x83, 0xE4, 0x73, 0x74, 0x02, 0x93, 0xB5, 0xF0, 0x06, 0x74, 0x03, 0x93, 0x68, 0x60,
62759 +0xE9, 0xA3, 0xA3, 0xA3, 0xA3, 0x80, 0xD8, 0xE4, 0x90, 0x8A, 0xC5, 0xF0, 0xE5, 0x24, 0x70, 0x03,
62760 +0x02, 0x44, 0x9D, 0xE5, 0x21, 0x64, 0x01, 0x60, 0x03, 0x02, 0x44, 0x9D, 0xE5, 0x24, 0x14, 0x60,
62761 +0x29, 0x24, 0xFD, 0x60, 0x25, 0x24, 0x02, 0x24, 0xFB, 0x50, 0x02, 0x80, 0x23, 0x90, 0x8B, 0x0B,
62762 +0xE0, 0x14, 0xF0, 0xE0, 0x60, 0x04, 0xA3, 0xE0, 0x60, 0x16, 0x90, 0x8B, 0x0B, 0xE0, 0x70, 0x0A,
62763 +0x90, 0x8B, 0x19, 0xE0, 0x90, 0x8B, 0x0B, 0xF0, 0x80, 0x00, 0x90, 0x8A, 0xC5, 0x74, 0x01, 0xF0,
62764 +0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x16, 0xA3, 0xE0, 0xB4, 0x06, 0x05, 0xE4, 0x90, 0x8A, 0xC5,
62765 +0xF0, 0xE4, 0xFF, 0x12, 0x4D, 0xE0, 0xEF, 0x70, 0x04, 0x90, 0x8A, 0xC5, 0xF0, 0x90, 0x8A, 0xC5,
62766 +0xE0, 0x60, 0x4A, 0x43, 0x25, 0x10, 0xE4, 0x90, 0x8B, 0x3D, 0xF0, 0x90, 0x8B, 0x0C, 0xE0, 0x75,
62767 +0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x8B, 0x15, 0xE0, 0x2F, 0x90, 0x8B, 0x3E, 0xF0, 0xE4, 0xFB, 0xFD,
62768 +0x7F, 0x54, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x22, 0x54,
62769 +0x0F, 0xC3, 0x94, 0x04, 0x50, 0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x45, 0xA2, 0x90, 0x8B, 0x2C,
62770 +0xE0, 0x30, 0xE0, 0x09, 0x12, 0x66, 0x20, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x22, 0xE4, 0xF5,
62771 +0x25, 0xF5, 0x24, 0x75, 0x23, 0x0C, 0x75, 0x22, 0x0C, 0x90, 0x8B, 0x1A, 0xF0, 0x90, 0x8B, 0x18,
62772 +0xF0, 0x90, 0x8B, 0x17, 0xF0, 0x90, 0x8B, 0x19, 0x04, 0xF0, 0x90, 0x8B, 0x0B, 0xF0, 0xE4, 0x90,
62773 +0x8B, 0x1B, 0xF0, 0x90, 0x8B, 0x0D, 0xF0, 0x90, 0x8B, 0x15, 0x74, 0x05, 0xF0, 0xE4, 0x90, 0x8B,
62774 +0x0C, 0xF0, 0x90, 0x8B, 0x13, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90, 0x8B, 0x10, 0xF0, 0xA3, 0x74,
62775 +0x05, 0xF0, 0x90, 0x8B, 0x0F, 0x74, 0x14, 0xF0, 0x90, 0x8B, 0x16, 0x74, 0x05, 0xF0, 0xE4, 0x90,
62776 +0x8B, 0x0E, 0xF0, 0x90, 0x8B, 0x0A, 0xF0, 0x90, 0x8B, 0x08, 0xF0, 0x90, 0x8B, 0x12, 0xF0, 0x22,
62777 +0x7F, 0x00, 0x22, 0x02, 0x45, 0x03, 0x02, 0x45, 0x06, 0x8E, 0x64, 0x8F, 0x65, 0xAD, 0x65, 0xAC,
62778 +0x64, 0xAF, 0x63, 0x12, 0x4A, 0x5B, 0xAF, 0x65, 0xAE, 0x64, 0x90, 0x04, 0x80, 0xE0, 0x54, 0x0F,
62779 +0xFD, 0xAC, 0x07, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x01,
62780 +0xF0, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xFB, 0xF0, 0xAC,
62781 +0x07, 0x74, 0x16, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0xFA, 0xF0, 0x74,
62782 +0x15, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x1F, 0xF0, 0xAC, 0x07, 0x74,
62783 +0x06, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x0F, 0xF0, 0x90, 0x04, 0x53,
62784 +0xE4, 0xF0, 0x90, 0x04, 0x52, 0xF0, 0x90, 0x04, 0x51, 0x74, 0xFF, 0xF0, 0x90, 0x04, 0x50, 0x74,
62785 +0xFD, 0xF0, 0x74, 0x14, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xC0, 0x4D,
62786 +0xFD, 0x74, 0x14, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xED, 0xF0, 0x22, 0x7D, 0x01,
62787 +0x7F, 0x0C, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x67, 0x8D, 0x68, 0xE5, 0x67, 0x54,
62788 +0x0F, 0xFF, 0xE5, 0x22, 0x54, 0x0F, 0x6F, 0x60, 0x72, 0xE5, 0x67, 0x30, 0xE2, 0x30, 0xE5, 0x22,
62789 +0x20, 0xE2, 0x05, 0x7F, 0x01, 0x12, 0x4A, 0xB2, 0xE5, 0x22, 0x30, 0xE3, 0x10, 0xE5, 0x67, 0x20,
62790 +0xE3, 0x0B, 0x12, 0x49, 0xD5, 0xEF, 0x60, 0x53, 0x12, 0x4A, 0xCC, 0x80, 0x4E, 0xE5, 0x22, 0x20,
62791 +0xE3, 0x49, 0xE5, 0x67, 0x30, 0xE3, 0x44, 0xAF, 0x68, 0x12, 0x4A, 0x7C, 0x80, 0x3D, 0xE5, 0x22,
62792 +0x54, 0x0F, 0xFF, 0xBF, 0x0C, 0x0E, 0xE5, 0x67, 0x20, 0xE3, 0x09, 0x12, 0x49, 0xD5, 0xEF, 0x60,
62793 +0x2A, 0x12, 0x4A, 0xCC, 0xE5, 0x22, 0x54, 0x0F, 0xFF, 0xBF, 0x04, 0x0E, 0xE5, 0x67, 0x20, 0xE2,
62794 +0x09, 0x12, 0x49, 0x93, 0xEF, 0x60, 0x14, 0x12, 0x4A, 0x32, 0xE5, 0x22, 0x54, 0x0F, 0xFF, 0xBF,
62795 +0x02, 0x09, 0x12, 0x45, 0x00, 0xEF, 0x60, 0x03, 0x12, 0x4B, 0x10, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
62796 +0x02, 0x46, 0x6E, 0x02, 0x51, 0x39, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0x40, 0x03, 0xF6,
62797 +0x80, 0x01, 0xF2, 0x08, 0xDF, 0xF4, 0x80, 0x29, 0xE4, 0x93, 0xA3, 0xF8, 0x54, 0x07, 0x24, 0x0C,
62798 +0xC8, 0xC3, 0x33, 0xC4, 0x54, 0x0F, 0x44, 0x20, 0xC8, 0x83, 0x40, 0x04, 0xF4, 0x56, 0x80, 0x01,
62799 +0x46, 0xF6, 0xDF, 0xE4, 0x80, 0x0B, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x90, 0x4B,
62800 +0x23, 0xE4, 0x7E, 0x01, 0x93, 0x60, 0xBC, 0xA3, 0xFF, 0x54, 0x3F, 0x30, 0xE5, 0x09, 0x54, 0x1F,
62801 +0xFE, 0xE4, 0x93, 0xA3, 0x60, 0x01, 0x0E, 0xCF, 0x54, 0xC0, 0x25, 0xE0, 0x60, 0xA8, 0x40, 0xB8,
62802 +0xE4, 0x93, 0xA3, 0xFA, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA,
62803 +0xC5, 0x83, 0xCA, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA, 0xDF, 0xE9, 0xDE,
62804 +0xE7, 0x80, 0xBE, 0xE5, 0x21, 0x64, 0x01, 0x70, 0x67, 0xE5, 0x24, 0x60, 0x63, 0xE5, 0x24, 0x64,
62805 +0x02, 0x60, 0x06, 0xE5, 0x24, 0x64, 0x05, 0x70, 0x27, 0x90, 0x06, 0xAB, 0xE0, 0x90, 0x8B, 0x0B,
62806 +0xF0, 0x90, 0x06, 0xAA, 0xE0, 0x90, 0x8B, 0x19, 0xF0, 0x90, 0x8B, 0x0B, 0xE0, 0x70, 0x07, 0x90,
62807 +0x8B, 0x19, 0xE0, 0xFF, 0x80, 0x05, 0x90, 0x8B, 0x0B, 0xE0, 0xFF, 0x90, 0x8B, 0x0B, 0xEF, 0xF0,
62808 +0x90, 0x8B, 0x0D, 0xE0, 0x60, 0x02, 0xE4, 0xF0, 0xE4, 0x90, 0x8B, 0x0C, 0xF0, 0x90, 0x05, 0x58,
62809 +0x74, 0x03, 0xF0, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x53, 0x25,
62810 +0xFD, 0x53, 0x25, 0xEF, 0xE5, 0x24, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x03, 0x12, 0x47, 0x8E,
62811 +0x22, 0xEF, 0x64, 0x01, 0x70, 0x35, 0x7D, 0x78, 0x7F, 0x02, 0x12, 0x36, 0x75, 0x7D, 0x02, 0x7F,
62812 +0x03, 0x12, 0x36, 0x75, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x12,
62813 +0x45, 0x9E, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x03, 0x12, 0x66, 0x20, 0x90, 0x06, 0x04, 0xE0,
62814 +0x54, 0x7F, 0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x54, 0xF8, 0xF0, 0x22, 0x90, 0x01, 0x36, 0x74, 0x7B,
62815 +0xF0, 0xA3, 0x74, 0x02, 0xF0, 0x7D, 0x7B, 0xFF, 0x12, 0x36, 0xE6, 0x7D, 0x02, 0x7F, 0x03, 0x12,
62816 +0x36, 0xE6, 0x90, 0x06, 0x04, 0xE0, 0x44, 0x80, 0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x44, 0x07, 0xF0,
62817 +0x12, 0x4B, 0x4F, 0xE5, 0x21, 0x20, 0xE0, 0x05, 0xE4, 0x90, 0x8B, 0x0D, 0xF0, 0x22, 0xE4, 0x90,
62818 +0x8A, 0xC5, 0xF0, 0x90, 0x06, 0xA9, 0xE0, 0x90, 0x8A, 0xC5, 0xF0, 0xE0, 0x54, 0xC0, 0x70, 0x09,
62819 +0x53, 0x25, 0xFE, 0x53, 0x25, 0xFD, 0x12, 0x4A, 0xFC, 0x90, 0x8A, 0xC5, 0xE0, 0x30, 0xE6, 0x15,
62820 +0x43, 0x25, 0x01, 0x90, 0x8B, 0x1A, 0xE0, 0x64, 0x02, 0x60, 0x05, 0x12, 0x4A, 0x97, 0x80, 0x08,
62821 +0x12, 0x49, 0x49, 0x80, 0x03, 0x53, 0x25, 0xFE, 0x90, 0x8A, 0xC5, 0xE0, 0x30, 0xE7, 0x27, 0x43,
62822 +0x25, 0x02, 0xE4, 0x90, 0x8B, 0x3D, 0xF0, 0x90, 0x8B, 0x11, 0xE0, 0x90, 0x8B, 0x3E, 0xF0, 0xE4,
62823 +0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0x90,
62824 +0x8B, 0x1B, 0x74, 0x01, 0xF0, 0x22, 0x53, 0x25, 0xFD, 0x22, 0x90, 0x8A, 0xDE, 0x12, 0x43, 0x8B,
62825 +0x12, 0x4B, 0x43, 0x90, 0x8A, 0xDE, 0x12, 0x43, 0x6B, 0x12, 0x29, 0xD9, 0xF5, 0x24, 0x14, 0x60,
62826 +0x0E, 0x14, 0x60, 0x1F, 0x14, 0x60, 0x31, 0x24, 0x03, 0x70, 0x44, 0x7F, 0x01, 0x80, 0x3D, 0x90,
62827 +0x8A, 0xDE, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFD, 0xE4, 0xFF, 0x12, 0x4A,
62828 +0x07, 0x80, 0x29, 0x90, 0x8A, 0xDE, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFD,
62829 +0x7F, 0x01, 0x12, 0x4A, 0x07, 0x1F, 0x80, 0x14, 0x90, 0x8A, 0xDE, 0x12, 0x43, 0x6B, 0x90, 0x00,
62830 +0x02, 0x12, 0x42, 0x20, 0xFD, 0x7F, 0x02, 0x12, 0x4A, 0x07, 0xE4, 0xFF, 0x12, 0x47, 0x21, 0x22,
62831 +0xE4, 0x90, 0x8A, 0xCB, 0xF0, 0xE5, 0x24, 0x60, 0x49, 0x90, 0x8B, 0x1B, 0xE0, 0x60, 0x0D, 0xE4,
62832 +0xF0, 0x53, 0x25, 0xFD, 0xE5, 0x25, 0x54, 0x07, 0x70, 0x38, 0x80, 0x33, 0x90, 0x8B, 0x0C, 0xE0,
62833 +0x04, 0xF0, 0x53, 0x25, 0xEF, 0x90, 0x8A, 0xCB, 0xE0, 0xFF, 0x90, 0x8B, 0x10, 0xE0, 0x2F, 0xFF,
62834 +0xE4, 0x33, 0xFE, 0x90, 0x8B, 0x0C, 0xE0, 0xD3, 0x9F, 0xEE, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98,
62835 +0x40, 0x0D, 0xE5, 0x21, 0xB4, 0x01, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xE0, 0x04, 0xF0, 0x22, 0x12,
62836 +0x4A, 0xFC, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x63, 0x90, 0x04, 0x1D, 0xE0,
62837 +0x60, 0x24, 0x90, 0x05, 0x22, 0xE0, 0xF5, 0x66, 0x74, 0xFF, 0xF0, 0x12, 0x7E, 0x2D, 0xBF, 0x01,
62838 +0x0D, 0x90, 0x8A, 0xF9, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x5F, 0xDE, 0x12, 0x45, 0x09, 0x90, 0x05,
62839 +0x22, 0xE5, 0x66, 0xF0, 0x80, 0x0D, 0x90, 0x8A, 0xF9, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x5F, 0xDE,
62840 +0x12, 0x45, 0x09, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE5, 0x24,
62841 +0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x41, 0x90, 0x8B, 0x1A, 0xE0, 0x60, 0x2B, 0x12, 0x45, 0x9E,
62842 +0xE4, 0x90, 0x8B, 0x3D, 0xF0, 0x90, 0x8B, 0x0F, 0xE0, 0x90, 0x8B, 0x3E, 0xF0, 0xE4, 0xFB, 0xFD,
62843 +0x7F, 0x58, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92,
62844 +0x74, 0x01, 0xF0, 0x90, 0x8B, 0x18, 0xF0, 0x22, 0xE5, 0x22, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50,
62845 +0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x45, 0xA2, 0x22, 0x90, 0x01, 0x5F, 0xE4, 0xF0, 0x90, 0x01,
62846 +0x3C, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0x8B, 0x3D, 0xF0, 0x90, 0x8B, 0x0F, 0xE0, 0x90, 0x8B, 0x3E,
62847 +0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x5C, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x5F, 0x74, 0x05,
62848 +0xF0, 0x90, 0x06, 0x92, 0x74, 0x02, 0xF0, 0x90, 0x8B, 0x17, 0x14, 0xF0, 0xE5, 0x22, 0x54, 0x0F,
62849 +0xC3, 0x94, 0x0C, 0x50, 0x0D, 0x12, 0x45, 0x9E, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x03, 0x12,
62850 +0x66, 0x20, 0x22, 0x12, 0x4B, 0x34, 0xEF, 0x64, 0x01, 0x70, 0x37, 0xE5, 0x25, 0x54, 0x03, 0x70,
62851 +0x31, 0xE5, 0x23, 0x54, 0x0F, 0xD3, 0x94, 0x02, 0x50, 0x28, 0xE5, 0x25, 0x20, 0xE2, 0x23, 0xE5,
62852 +0x25, 0x20, 0xE4, 0x1E, 0x90, 0x8B, 0x0D, 0xE0, 0x70, 0x18, 0x90, 0x8B, 0x12, 0xE0, 0x70, 0x12,
62853 +0xE5, 0x26, 0x70, 0x0E, 0x90, 0x01, 0xB9, 0xE4, 0xF0, 0x90, 0x01, 0xB8, 0x74, 0x04, 0xF0, 0x7F,
62854 +0x01, 0x22, 0x7F, 0x00, 0x22, 0x12, 0x4B, 0x34, 0xEF, 0x64, 0x01, 0x70, 0x27, 0x90, 0x8B, 0x18,
62855 +0xE0, 0x70, 0x21, 0x90, 0x8B, 0x17, 0xE0, 0x70, 0x1B, 0xE5, 0x23, 0x54, 0x0F, 0xD3, 0x94, 0x04,
62856 +0x50, 0x12, 0xE5, 0x26, 0x70, 0x0E, 0x90, 0x01, 0xB9, 0xE4, 0xF0, 0x90, 0x01, 0xB8, 0x74, 0x08,
62857 +0xF0, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0xEF, 0x24, 0xFE, 0x60, 0x0B, 0x04, 0x70, 0x22, 0x90,
62858 +0x8B, 0x19, 0x74, 0x01, 0xF0, 0x80, 0x16, 0xED, 0x70, 0x0A, 0x90, 0x8B, 0x16, 0xE0, 0x90, 0x8B,
62859 +0x19, 0xF0, 0x80, 0x05, 0x90, 0x8B, 0x19, 0xED, 0xF0, 0x90, 0x8B, 0x19, 0xE0, 0x90, 0x8B, 0x0B,
62860 +0xF0, 0x22, 0x90, 0x01, 0x37, 0x74, 0x02, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12, 0x7E,
62861 +0x2D, 0xEF, 0x70, 0x06, 0x90, 0x01, 0xC8, 0x74, 0xFD, 0xF0, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x36,
62862 +0xE6, 0x12, 0x7A, 0x6D, 0x53, 0x22, 0xF0, 0x43, 0x22, 0x02, 0x22, 0xEF, 0x60, 0x0F, 0x74, 0x21,
62863 +0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x22, 0x74, 0x21, 0x2D,
62864 +0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0x22, 0x90, 0x06, 0x04, 0xE0,
62865 +0x54, 0xBF, 0xF0, 0xEF, 0x60, 0x0A, 0xE5, 0x21, 0xB4, 0x01, 0x05, 0xE4, 0xFF, 0x12, 0x48, 0xB3,
62866 +0x53, 0x22, 0xF0, 0x43, 0x22, 0x0C, 0x22, 0x90, 0x04, 0x1D, 0xE0, 0x70, 0x14, 0x90, 0x8A, 0xF8,
62867 +0xE0, 0xFF, 0xE4, 0xFD, 0x12, 0x5F, 0xDE, 0x8E, 0x69, 0x8F, 0x6A, 0x90, 0x04, 0x1F, 0x74, 0x20,
62868 +0xF0, 0x22, 0x90, 0x8B, 0x52, 0xEF, 0xF0, 0x12, 0x4F, 0xED, 0x90, 0x8B, 0x52, 0xE0, 0x60, 0x05,
62869 +0x90, 0x05, 0x22, 0xE4, 0xF0, 0x53, 0x22, 0xF0, 0x43, 0x22, 0x04, 0x22, 0x90, 0x06, 0x04, 0xE0,
62870 +0x44, 0x40, 0xF0, 0xE5, 0x21, 0xB4, 0x01, 0x05, 0x7F, 0x01, 0x12, 0x48, 0xB3, 0x53, 0x22, 0xF0,
62871 +0x43, 0x22, 0x04, 0x22, 0xE5, 0x23, 0x30, 0xE6, 0x12, 0xE5, 0x23, 0x54, 0x0F, 0xFF, 0x90, 0x01,
62872 +0x2F, 0xE0, 0x54, 0x80, 0x4F, 0x64, 0x80, 0xF0, 0x53, 0x23, 0xBF, 0x22, 0x90, 0x8B, 0x2C, 0xE0,
62873 +0x30, 0xE0, 0x05, 0xAF, 0x23, 0x02, 0x66, 0x65, 0x7D, 0x01, 0xAF, 0x23, 0x12, 0x45, 0xA2, 0x22,
62874 +0x53, 0x22, 0xF0, 0x43, 0x22, 0x01, 0x12, 0x4B, 0x5A, 0x12, 0x4B, 0x5B, 0x53, 0x22, 0xF0, 0x43,
62875 +0x22, 0x02, 0x22, 0x41, 0x8A, 0xF6, 0x00, 0x41, 0x8B, 0x05, 0x00, 0x41, 0x8B, 0x51, 0x00, 0x41,
62876 +0x8B, 0x53, 0x00, 0x00, 0x90, 0x04, 0x1B, 0xE0, 0x54, 0x7F, 0x64, 0x7F, 0x7F, 0x01, 0x60, 0x02,
62877 +0x7F, 0x00, 0x22, 0xE4, 0x90, 0x8B, 0x1B, 0xF0, 0x90, 0x8B, 0x0C, 0xF0, 0xF5, 0x25, 0x22, 0x90,
62878 +0x8B, 0x13, 0xE0, 0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22, 0x22, 0x22, 0xF0, 0x90, 0x8B, 0x0F,
62879 +0xE0, 0x90, 0x8B, 0x3E, 0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0xD3, 0x10, 0xAF, 0x01,
62880 +0xC3, 0xC0, 0xD0, 0x90, 0x8B, 0x3D, 0xE0, 0xFB, 0xA3, 0xE0, 0xF5, 0x44, 0xE4, 0xF5, 0x45, 0x12,
62881 +0x35, 0xAB, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0,
62882 +0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05,
62883 +0xC0, 0x06, 0xC0, 0x07, 0x75, 0x0E, 0x00, 0x90, 0x01, 0xC4, 0x74, 0x87, 0xF0, 0x74, 0x4B, 0xA3,
62884 +0xF0, 0x53, 0x91, 0xDF, 0x90, 0x01, 0x3C, 0xE0, 0x55, 0x30, 0xF5, 0x34, 0xA3, 0xE0, 0x55, 0x31,
62885 +0xF5, 0x35, 0xA3, 0xE0, 0x55, 0x32, 0xF5, 0x36, 0xA3, 0xE0, 0x55, 0x33, 0xF5, 0x37, 0xE5, 0x34,
62886 +0x30, 0xE0, 0x51, 0x90, 0x01, 0x3C, 0x74, 0x01, 0xF0, 0x90, 0x8B, 0x32, 0xE0, 0x30, 0xE0, 0x1F,
62887 +0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x18, 0x90, 0x8B, 0x34, 0xE4, 0xF0, 0x90, 0x8B, 0x33, 0xE0,
62888 +0x64, 0x03, 0x60, 0x0B, 0x7F, 0x01, 0xB1, 0xE0, 0xEF, 0x70, 0x04, 0x7F, 0x02, 0xD1, 0x89, 0x90,
62889 +0x8B, 0x2C, 0xE0, 0xFF, 0x30, 0xE0, 0x1D, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x16, 0x90, 0x8B,
62890 +0x2E, 0xE4, 0xF0, 0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x06, 0x60, 0x09, 0xE4, 0xFF, 0xB1, 0xE0, 0xEF,
62891 +0x70, 0x02, 0xD1, 0x56, 0xE5, 0x34, 0x30, 0xE1, 0x08, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x11,
62892 +0x60, 0xE5, 0x34, 0x30, 0xE2, 0x28, 0x90, 0x01, 0x3C, 0x74, 0x04, 0xF0, 0x90, 0x06, 0x92, 0xE0,
62893 +0x30, 0xE0, 0x14, 0x90, 0x8B, 0x3D, 0xE4, 0x71, 0x5C, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90,
62894 +0x06, 0x92, 0x74, 0x01, 0xF0, 0x80, 0x07, 0x90, 0x8B, 0x18, 0xE4, 0xF0, 0x51, 0xFC, 0xE5, 0x34,
62895 +0x30, 0xE3, 0x38, 0x90, 0x01, 0x3C, 0x74, 0x08, 0xF0, 0x90, 0x06, 0x92, 0xE0, 0x30, 0xE1, 0x24,
62896 +0x90, 0x8B, 0x3D, 0xE4, 0xF0, 0x90, 0x8B, 0x0F, 0xE0, 0x90, 0x8B, 0x3E, 0xF0, 0xE4, 0xFB, 0xFD,
62897 +0x7F, 0x5C, 0x7E, 0x01, 0x71, 0x6C, 0x90, 0x01, 0x5F, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74,
62898 +0x02, 0xF0, 0x80, 0x07, 0x90, 0x8B, 0x17, 0xE4, 0xF0, 0x51, 0xFC, 0xE5, 0x34, 0x30, 0xE4, 0x09,
62899 +0x90, 0x01, 0x3C, 0x74, 0x10, 0xF0, 0x12, 0x52, 0x3C, 0xE5, 0x34, 0x30, 0xE5, 0x06, 0x90, 0x01,
62900 +0x3C, 0x74, 0x20, 0xF0, 0xE5, 0x35, 0x30, 0xE0, 0x10, 0x90, 0x01, 0x3D, 0x74, 0x01, 0xF0, 0x90,
62901 +0x00, 0x83, 0xE0, 0xF5, 0x23, 0x51, 0xE4, 0x51, 0xFC, 0xE5, 0x35, 0x30, 0xE2, 0x06, 0x90, 0x01,
62902 +0x3D, 0x74, 0x04, 0xF0, 0xE5, 0x35, 0x30, 0xE4, 0x1B, 0x90, 0x01, 0x3D, 0x74, 0x10, 0xF0, 0x90,
62903 +0x8B, 0x05, 0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x05,
62904 +0xFD, 0xE0, 0x04, 0xF0, 0xE5, 0x36, 0x30, 0xE0, 0x75, 0x90, 0x01, 0x3E, 0x74, 0x01, 0xF0, 0x90,
62905 +0x8B, 0x32, 0xE0, 0x30, 0xE0, 0x18, 0x90, 0x8B, 0x36, 0xE4, 0xF0, 0x90, 0x8B, 0x33, 0xE0, 0x64,
62906 +0x03, 0x60, 0x0B, 0x7F, 0x01, 0xB1, 0xE0, 0xEF, 0x60, 0x04, 0x7F, 0x01, 0xD1, 0x89, 0x90, 0x8B,
62907 +0x2C, 0xE0, 0x30, 0xE0, 0x49, 0x90, 0x8B, 0x30, 0xE4, 0xF0, 0xFF, 0xB1, 0xE0, 0xEF, 0x60, 0x3E,
62908 +0x12, 0x65, 0xF0, 0x90, 0x8B, 0x2D, 0xE0, 0xFF, 0x64, 0x06, 0x60, 0x32, 0xEF, 0xB4, 0x04, 0x02,
62909 +0x80, 0x07, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05, 0x04, 0xE4, 0xFF, 0x80, 0x14, 0x90, 0x8B, 0x2D,
62910 +0xE0, 0xB4, 0x03, 0x04, 0x7F, 0x01, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x02, 0x05, 0x7F,
62911 +0x01, 0x12, 0x7B, 0x49, 0x7D, 0x01, 0xAF, 0x23, 0x12, 0x45, 0xA2, 0x12, 0x66, 0x20, 0xE5, 0x36,
62912 +0x30, 0xE1, 0x47, 0x90, 0x01, 0x3E, 0x74, 0x02, 0xF0, 0x90, 0x8B, 0x32, 0xE0, 0x30, 0xE0, 0x19,
62913 +0x90, 0x8B, 0x36, 0x74, 0x01, 0xF0, 0x90, 0x8B, 0x33, 0xE0, 0x64, 0x03, 0x60, 0x0B, 0x7F, 0x01,
62914 +0xB1, 0xE0, 0xEF, 0x70, 0x04, 0x7F, 0x02, 0xD1, 0x89, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x1A,
62915 +0x90, 0x8B, 0x30, 0x74, 0x01, 0xF0, 0x12, 0x7D, 0xBE, 0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x06, 0x60,
62916 +0x09, 0xE4, 0xFF, 0xB1, 0xE0, 0xEF, 0x70, 0x02, 0xD1, 0x56, 0x74, 0x87, 0x04, 0x90, 0x01, 0xC4,
62917 +0xF0, 0x74, 0x4B, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0,
62918 +0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32,
62919 +0xEF, 0x64, 0x01, 0x70, 0x3D, 0x90, 0x8B, 0x35, 0xE0, 0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x8B,
62920 +0x08, 0xE0, 0x60, 0x03, 0x7F, 0x01, 0x22, 0x90, 0x8B, 0x34, 0xE0, 0x60, 0x03, 0x7F, 0x01, 0x22,
62921 +0x90, 0x8B, 0x32, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x0B, 0xEF, 0xC4, 0x13, 0x54,
62922 +0x07, 0x30, 0xE0, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x8B, 0x36, 0xE0, 0x7F, 0x01, 0x60, 0x36, 0x7F,
62923 +0x00, 0x22, 0x90, 0x8B, 0x2F, 0xE0, 0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x8B, 0x08, 0xE0, 0x60,
62924 +0x03, 0x7F, 0x01, 0x22, 0x90, 0x8B, 0x2E, 0xE0, 0x60, 0x03, 0x7F, 0x01, 0x22, 0x90, 0x8B, 0x2C,
62925 +0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x8B, 0x30, 0xE0, 0x7F,
62926 +0x01, 0x60, 0x02, 0x7F, 0x00, 0x22, 0x90, 0x8B, 0x0D, 0xE0, 0x60, 0x16, 0x90, 0x8B, 0x2D, 0xE0,
62927 +0x70, 0x04, 0x7F, 0x05, 0x80, 0x1F, 0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x01, 0x70, 0x1A, 0x7F, 0x02,
62928 +0x80, 0x13, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x01, 0x04, 0x7F, 0x03, 0x80, 0x08, 0x90, 0x8B, 0x2D,
62929 +0xE0, 0x70, 0x05, 0x7F, 0x04, 0x12, 0x7B, 0x49, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
62930 +0x90, 0x8B, 0x33, 0xE0, 0x90, 0x8B, 0x55, 0xF0, 0x6F, 0x70, 0x02, 0xE1, 0x55, 0xEF, 0x14, 0x60,
62931 +0x3B, 0x14, 0x60, 0x5F, 0x14, 0x70, 0x02, 0xE1, 0x30, 0x24, 0x03, 0x60, 0x02, 0xE1, 0x55, 0x90,
62932 +0x8B, 0x55, 0xE0, 0xB4, 0x03, 0x04, 0xF1, 0xC0, 0xE1, 0x55, 0x90, 0x8B, 0x55, 0xE0, 0xB4, 0x02,
62933 +0x04, 0xF1, 0xAD, 0xE1, 0x55, 0x90, 0x8B, 0x55, 0xE0, 0xB4, 0x04, 0x04, 0xF1, 0xC4, 0xE1, 0x55,
62934 +0x90, 0x8B, 0x55, 0xE0, 0x64, 0x01, 0x70, 0x7D, 0xF1, 0xAF, 0x80, 0x79, 0x90, 0x8B, 0x55, 0xE0,
62935 +0xFF, 0xB4, 0x03, 0x04, 0xF1, 0xC8, 0x80, 0x6D, 0xEF, 0xB4, 0x02, 0x04, 0xF1, 0xA0, 0x80, 0x65,
62936 +0x90, 0x8B, 0x55, 0xE0, 0xFF, 0xB4, 0x04, 0x04, 0xF1, 0xD3, 0x80, 0x59, 0xEF, 0x70, 0x56, 0xF1,
62937 +0x8D, 0x80, 0x52, 0x90, 0x8B, 0x55, 0xE0, 0xB4, 0x03, 0x05, 0x12, 0x7A, 0x5E, 0x80, 0x46, 0x90,
62938 +0x8B, 0x55, 0xE0, 0xB4, 0x01, 0x04, 0xF1, 0x71, 0x80, 0x3B, 0x90, 0x8B, 0x55, 0xE0, 0xB4, 0x04,
62939 +0x05, 0x12, 0x7B, 0x37, 0x80, 0x2F, 0x90, 0x8B, 0x55, 0xE0, 0x70, 0x29, 0xF1, 0x6F, 0x80, 0x25,
62940 +0x90, 0x8B, 0x55, 0xE0, 0xFF, 0xB4, 0x01, 0x04, 0xF1, 0x5A, 0x80, 0x19, 0xEF, 0xB4, 0x02, 0x04,
62941 +0xF1, 0x6B, 0x80, 0x11, 0x90, 0x8B, 0x55, 0xE0, 0xFF, 0xB4, 0x04, 0x04, 0xF1, 0x5A, 0x80, 0x05,
62942 +0xEF, 0x70, 0x02, 0xF1, 0x67, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0,
62943 +0x90, 0x8B, 0x33, 0x74, 0x03, 0xF0, 0x22, 0xF1, 0x8D, 0x80, 0xEF, 0xF1, 0xED, 0x80, 0xEB, 0xF1,
62944 +0x8D, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12, 0x7E, 0x2D, 0xEF, 0x70, 0x06, 0x90, 0x01, 0xC8,
62945 +0x74, 0xFD, 0xF0, 0x12, 0x7A, 0x6D, 0x90, 0x8B, 0x33, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x01, 0x3E,
62946 +0x74, 0x03, 0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x37, 0x00, 0x90, 0x8B, 0x33, 0x74, 0x01, 0xF0, 0x22,
62947 +0xF1, 0xED, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x8B, 0x33, 0x04, 0xF0, 0x22, 0xF1, 0xA0, 0x7D,
62948 +0x03, 0x7F, 0x02, 0x12, 0x36, 0x92, 0x90, 0x05, 0x27, 0xE4, 0xF0, 0x90, 0x8B, 0x33, 0xF0, 0x22,
62949 +0xF1, 0xC8, 0x80, 0xEB, 0xF1, 0xD3, 0x80, 0xE7, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x8B, 0x33,
62950 +0x04, 0xF0, 0x22, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x8B, 0x33, 0x04, 0xF0, 0x22, 0xF1, 0x8D,
62951 +0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x8B, 0x33, 0x74, 0x04, 0xF0, 0x22, 0x90, 0x8B, 0x1C,
62952 +0x12, 0x43, 0x53, 0x90, 0x80, 0x85, 0x12, 0x2A, 0x7F, 0x7F, 0x78, 0x7E, 0x08, 0x12, 0x2F, 0xD9,
62953 +0x90, 0x8B, 0x20, 0x12, 0x43, 0x53, 0x90, 0x80, 0x85, 0x12, 0x2A, 0x7F, 0x7F, 0x04, 0x7E, 0x0C,
62954 +0x12, 0x2F, 0xD9, 0x90, 0x8B, 0x24, 0x12, 0x43, 0x53, 0x90, 0x80, 0x85, 0x12, 0x2A, 0x7F, 0x7F,
62955 +0x00, 0x7E, 0x08, 0x12, 0x2F, 0xD9, 0x90, 0x8B, 0x28, 0x12, 0x43, 0x53, 0x90, 0x80, 0x85, 0x12,
62956 +0x2A, 0x7F, 0x7F, 0x70, 0x7E, 0x0E, 0x12, 0x2F, 0xD9, 0x90, 0x80, 0x59, 0x12, 0x2A, 0x8B, 0x00,
62957 +0x03, 0x2D, 0x95, 0xE4, 0xFD, 0xFF, 0x12, 0x34, 0x81, 0x90, 0x8B, 0x09, 0xE0, 0xB4, 0x01, 0x11,
62958 +0x90, 0x80, 0x59, 0x12, 0x2A, 0x8B, 0x00, 0x03, 0x2D, 0x95, 0xE4, 0xFD, 0x7F, 0x01, 0x12, 0x34,
62959 +0x81, 0x22, 0x90, 0x02, 0x84, 0xEF, 0xF0, 0xA3, 0xEE, 0xF0, 0xA3, 0x74, 0x05, 0xF0, 0x22, 0xEF,
62960 +0x8E, 0xF0, 0x12, 0x43, 0xBA, 0x50, 0x8D, 0x00, 0x40, 0x50, 0xB5, 0x00, 0x80, 0x50, 0xE0, 0x01,
62961 +0x00, 0x50, 0xF4, 0x02, 0x00, 0x51, 0x0C, 0x04, 0x00, 0x00, 0x00, 0x51, 0x29, 0xED, 0x54, 0x3F,
62962 +0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x40, 0xEF, 0x2D, 0xFF, 0xEE, 0x3C, 0xFE,
62963 +0xEF, 0x78, 0x06, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78, 0x06, 0xC3, 0x33, 0xCE, 0x33,
62964 +0xCE, 0xD8, 0xF9, 0x80, 0x26, 0xED, 0x54, 0x7F, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x00,
62965 +0x7F, 0x80, 0xEF, 0x2D, 0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x07, 0xCE, 0xC3, 0x13, 0xCE, 0x13,
62966 +0xD8, 0xF9, 0x78, 0x07, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFD, 0xAC, 0x06, 0x80, 0x49,
62967 +0xED, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x01, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x7D,
62968 +0x00, 0xFC, 0x80, 0x35, 0xEC, 0x54, 0x01, 0x4D, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x02,
62969 +0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0xC3, 0x13, 0x7D, 0x00, 0x80, 0x1A, 0xEC, 0x54, 0x03, 0x4D,
62970 +0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x04, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x13, 0x13,
62971 +0x54, 0x3F, 0x7D, 0x00, 0x25, 0xE0, 0x25, 0xE0, 0xFC, 0xAE, 0x04, 0xAF, 0x05, 0x22, 0x90, 0x01,
62972 +0xE4, 0x74, 0x58, 0xF0, 0xA3, 0x74, 0x02, 0xF0, 0x22, 0xE4, 0x90, 0x8A, 0xCC, 0xF0, 0xA3, 0xF0,
62973 +0x75, 0x8E, 0x02, 0x91, 0x81, 0x12, 0x67, 0x0E, 0x90, 0x8B, 0x07, 0xEF, 0xF0, 0x12, 0x67, 0x1B,
62974 +0x90, 0x8B, 0x09, 0xEF, 0xF0, 0x12, 0x67, 0x27, 0x90, 0x8A, 0xF4, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0,
62975 +0xE4, 0xF5, 0x55, 0xF5, 0x21, 0x12, 0x71, 0x16, 0x12, 0x44, 0x9E, 0x12, 0x32, 0x3D, 0x7F, 0x03,
62976 +0x12, 0x76, 0xAB, 0x12, 0x7A, 0x5A, 0x12, 0x66, 0xD4, 0x12, 0x67, 0x3F, 0x12, 0x67, 0x54, 0x12,
62977 +0x66, 0xF2, 0x12, 0x67, 0x0D, 0x90, 0x8A, 0xCE, 0xE5, 0xD9, 0xF0, 0x31, 0xD2, 0xC2, 0xAF, 0x90,
62978 +0x00, 0x80, 0xE0, 0x44, 0x40, 0xF0, 0x51, 0x81, 0x75, 0xE8, 0x03, 0x43, 0xA8, 0x85, 0xD2, 0xAF,
62979 +0x31, 0x2E, 0x90, 0x8A, 0xCC, 0xE0, 0x64, 0x01, 0xF0, 0x24, 0x39, 0x90, 0x01, 0xC4, 0xF0, 0x74,
62980 +0x51, 0xA3, 0xF0, 0xE5, 0x55, 0x30, 0xE4, 0x09, 0xC2, 0xAF, 0x53, 0x55, 0xEF, 0xD2, 0xAF, 0xB1,
62981 +0xCC, 0xE5, 0x55, 0x30, 0xE6, 0xDC, 0xC2, 0xAF, 0x53, 0x55, 0xBF, 0xD2, 0xAF, 0x12, 0x68, 0x42,
62982 +0x80, 0xD0, 0x90, 0x01, 0x3C, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x34, 0xF0,
62983 +0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xFD, 0x7F, 0x54, 0x31, 0xFB, 0x7D, 0xFF, 0x7F, 0x55, 0x31,
62984 +0xFB, 0x7D, 0xFF, 0x7F, 0x56, 0x31, 0xFB, 0x7D, 0xFF, 0x7F, 0x57, 0xD3, 0x10, 0xAF, 0x01, 0xC3,
62985 +0xC0, 0xD0, 0x8F, 0x82, 0x75, 0x83, 0x00, 0xED, 0xF0, 0x51, 0x81, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
62986 +0x90, 0x01, 0x30, 0xE4, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x38, 0xF0, 0xA3,
62987 +0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xFD, 0x7F, 0x50, 0x31, 0xFB, 0xE4, 0xFD, 0x7F, 0x51, 0x31, 0xFB,
62988 +0xE4, 0xFD, 0x7F, 0x52, 0x31, 0xFB, 0xE4, 0xFD, 0x7F, 0x53, 0x80, 0xBF, 0xE5, 0x5E, 0x64, 0x01,
62989 +0x70, 0x3B, 0x71, 0xC1, 0xBF, 0x01, 0x04, 0x7F, 0x01, 0x71, 0xB5, 0x90, 0x00, 0x46, 0xE0, 0x44,
62990 +0x04, 0xFD, 0x7F, 0x46, 0x31, 0xFB, 0x90, 0x00, 0x44, 0xE0, 0x54, 0xFB, 0xFD, 0x7F, 0x44, 0x31,
62991 +0xFB, 0x90, 0x00, 0x46, 0xE0, 0x54, 0xFB, 0xFD, 0x7F, 0x46, 0x31, 0xFB, 0x7F, 0x02, 0x71, 0xDD,
62992 +0x8F, 0x62, 0x90, 0x01, 0xC9, 0xE5, 0x62, 0xF0, 0xB4, 0x01, 0x02, 0x71, 0x55, 0x22, 0xE0, 0x5F,
62993 +0xF0, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F, 0x10, 0xDF, 0xFE, 0xD0, 0xD0, 0x92, 0xAF,
62994 +0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x8A, 0xE0, 0xED, 0xF0, 0x90, 0x8A, 0xDF,
62995 +0xEF, 0xF0, 0xD3, 0x94, 0x07, 0x50, 0x4E, 0xA3, 0xE0, 0x70, 0x1A, 0x90, 0x8A, 0xDF, 0xE0, 0xFF,
62996 +0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x47,
62997 +0xE0, 0x5F, 0xF0, 0x80, 0x17, 0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80,
62998 +0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xFF, 0x90, 0x00, 0x47, 0xE0, 0x4F, 0xF0, 0x51, 0x81, 0x90, 0x8A,
62999 +0xDF, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF,
63000 +0x90, 0x00, 0x46, 0x80, 0x59, 0x90, 0x8A, 0xDF, 0xE0, 0x24, 0xF8, 0xF0, 0xA3, 0xE0, 0x70, 0x1D,
63001 +0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC,
63002 +0xC4, 0x54, 0xF0, 0xF4, 0xFF, 0x90, 0x00, 0x43, 0xE0, 0x5F, 0xF0, 0x80, 0x1A, 0x90, 0x8A, 0xDF,
63003 +0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xC4, 0x54, 0xF0,
63004 +0xFF, 0x90, 0x00, 0x43, 0xE0, 0x4F, 0xF0, 0x51, 0x81, 0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0x74, 0x01,
63005 +0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x43, 0x51, 0x7E,
63006 +0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x00, 0x49, 0xE0, 0x90, 0x8B, 0x54, 0xF0, 0xE0, 0x54, 0x0F,
63007 +0xF0, 0x44, 0xF0, 0xFD, 0x7F, 0x49, 0x31, 0xFB, 0x90, 0x8B, 0x54, 0xE0, 0x44, 0xB0, 0xFD, 0x7F,
63008 +0x49, 0x21, 0xFB, 0x90, 0x8A, 0xDD, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x75, 0x5E, 0x01, 0x8E, 0x5F,
63009 +0xF5, 0x60, 0xE4, 0xFD, 0x7F, 0x0B, 0x51, 0x91, 0xE4, 0xFD, 0x7F, 0x02, 0x51, 0x91, 0x71, 0xC1,
63010 +0xE4, 0xFF, 0x71, 0xB5, 0xE4, 0xF5, 0x62, 0x90, 0x01, 0xC9, 0xE5, 0x62, 0xF0, 0x90, 0x8A, 0xDD,
63011 +0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEC, 0xFB, 0x8D, 0x44, 0xE4, 0xF5, 0x45, 0x7D, 0x01, 0x7F, 0x60,
63012 +0x7E, 0x01, 0x02, 0x35, 0xAB, 0x90, 0x01, 0xCA, 0xE5, 0x61, 0xF0, 0xEF, 0x60, 0x02, 0x71, 0x55,
63013 +0x22, 0x7F, 0x0B, 0x71, 0xDD, 0xEF, 0x65, 0x61, 0x60, 0x10, 0xE5, 0x61, 0xB4, 0x01, 0x05, 0xE4,
63014 +0xF5, 0x61, 0x80, 0x03, 0x75, 0x61, 0x01, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0xD3, 0x10, 0xAF,
63015 +0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x8B, 0x57, 0xEF, 0xF0, 0xD3, 0x94, 0x07, 0x50, 0x43, 0xE0, 0xFF,
63016 +0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x46,
63017 +0x51, 0x7E, 0x90, 0x8B, 0x57, 0xE0, 0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x05, 0x08, 0x80, 0x05,
63018 +0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x00, 0x44, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF,
63019 +0x5B, 0xA8, 0x05, 0x08, 0x80, 0x06, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, 0x80,
63020 +0x4B, 0x90, 0x8B, 0x57, 0xE0, 0x24, 0xF8, 0xF0, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80,
63021 +0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x43, 0xE0, 0x5F, 0xF0, 0x51, 0x81, 0x90,
63022 +0x8B, 0x57, 0xE0, 0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x05, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE,
63023 +0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x00, 0x42, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x5B, 0xA8, 0x05,
63024 +0x08, 0x80, 0x06, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, 0xD0, 0xD0, 0x92, 0xAF,
63025 +0x22, 0xE4, 0x90, 0x8B, 0x04, 0xF0, 0x90, 0x00, 0x80, 0xE0, 0x44, 0x80, 0xFD, 0x7F, 0x80, 0x21,
63026 +0xFB, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x8B, 0x90, 0x8A,
63027 +0xDA, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x01, 0x12, 0x42, 0xC2, 0xFA, 0xE5, 0xF0, 0x24, 0x00, 0xFF,
63028 +0xE4, 0x3A, 0xFE, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x01, 0xEE, 0x8F, 0xF0, 0x12,
63029 +0x43, 0x19, 0x12, 0x29, 0xD9, 0xFF, 0x60, 0x2C, 0xB5, 0x5E, 0x16, 0x90, 0x8A, 0xDA, 0x12, 0x43,
63030 +0x6B, 0x90, 0x00, 0x01, 0x12, 0x42, 0xC2, 0x65, 0x60, 0x70, 0x04, 0xE5, 0x5F, 0x65, 0xF0, 0x60,
63031 +0x22, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x01, 0x12, 0x42, 0xC2, 0xFF, 0xAE, 0xF0,
63032 +0x71, 0x73, 0x80, 0x0F, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x6B, 0x12, 0x29, 0xD9, 0x65, 0x5E, 0x60,
63033 +0x02, 0xB1, 0x08, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0xF5, 0x5E, 0x7F, 0x60, 0x7E, 0x01, 0x8F,
63034 +0x82, 0x8E, 0x83, 0xA3, 0xA3, 0xA3, 0xE4, 0xF0, 0x22, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x8B, 0xEF,
63035 +0x12, 0x43, 0x94, 0x55, 0x5A, 0x01, 0x55, 0x51, 0x02, 0x55, 0x7E, 0x03, 0x55, 0x87, 0x05, 0x55,
63036 +0x90, 0x06, 0x55, 0xCB, 0x07, 0x55, 0x98, 0x08, 0x55, 0xA1, 0x09, 0x55, 0xA9, 0x20, 0x55, 0xB2,
63037 +0x2C, 0x55, 0x63, 0x2D, 0x55, 0x6C, 0x2E, 0x55, 0x75, 0x3B, 0x55, 0xBB, 0x4B, 0x00, 0x00, 0x55,
63038 +0xC4, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x72, 0xFC, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B,
63039 +0x02, 0x73, 0x02, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x73, 0x2F, 0x90, 0x8A, 0xD7, 0x12,
63040 +0x43, 0x6B, 0x02, 0x73, 0x77, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x73, 0xB0, 0x90, 0x8A,
63041 +0xD7, 0x12, 0x43, 0x6B, 0x02, 0x73, 0xC9, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x72, 0xD0,
63042 +0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0xE1, 0x19, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x74,
63043 +0x11, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x81, 0x91, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02,
63044 +0x76, 0xEA, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x78, 0xDE, 0x90, 0x8A, 0xD7, 0x12, 0x43,
63045 +0x6B, 0x02, 0x7A, 0x48, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01,
63046 +0xC3, 0xC0, 0xD0, 0x90, 0x01, 0xCC, 0xE0, 0x54, 0x0F, 0x90, 0x8A, 0xCF, 0xF0, 0x90, 0x8A, 0xCF,
63047 +0xE0, 0xFD, 0x70, 0x02, 0xE1, 0x14, 0x90, 0x8B, 0x51, 0xE0, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8,
63048 +0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEF, 0x5D, 0x70, 0x02,
63049 +0xE1, 0x0D, 0x90, 0x8B, 0x51, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD0, 0x12, 0x43, 0x5F, 0xE0,
63050 +0x90, 0x8A, 0xD0, 0xF0, 0x75, 0x1D, 0x01, 0x75, 0x1E, 0x8A, 0x75, 0x1F, 0xD0, 0x75, 0x20, 0x01,
63051 +0x7B, 0x01, 0x7A, 0x8A, 0x79, 0xD1, 0x12, 0x5F, 0x57, 0x90, 0x8A, 0xD1, 0xE0, 0xFF, 0xC4, 0x13,
63052 +0x13, 0x13, 0x54, 0x01, 0x90, 0x8B, 0x51, 0x30, 0xE0, 0x59, 0xE0, 0x75, 0xF0, 0x02, 0x90, 0x00,
63053 +0x88, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD2, 0xF0, 0x90, 0x8B, 0x51, 0xE0, 0x75, 0xF0, 0x02,
63054 +0x90, 0x00, 0x89, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD3, 0xF0, 0x90, 0x8B, 0x51, 0xE0, 0x75,
63055 +0xF0, 0x04, 0x90, 0x01, 0xD1, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD4, 0xF0, 0x90, 0x8B, 0x51,
63056 +0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD2, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD5, 0xF0, 0x90,
63057 +0x8B, 0x51, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD3, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD6,
63058 +0xF0, 0x80, 0x33, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD1, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A,
63059 +0xD2, 0xF0, 0x90, 0x8B, 0x51, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD2, 0x12, 0x43, 0x5F, 0xE0,
63060 +0x90, 0x8A, 0xD3, 0xF0, 0x90, 0x8B, 0x51, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD3, 0x12, 0x43,
63061 +0x5F, 0xE0, 0x90, 0x8A, 0xD4, 0xF0, 0xEF, 0x54, 0x7F, 0xFF, 0x7B, 0x01, 0x7A, 0x8A, 0x79, 0xD2,
63062 +0xB1, 0x19, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0x90, 0x8B, 0x51, 0xE0, 0xFE, 0x74, 0x01, 0xA8, 0x06,
63063 +0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0x90, 0x8A, 0xCF, 0xF0, 0x90, 0x8B, 0x51,
63064 +0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x90, 0x01, 0xCC,
63065 +0xF0, 0x90, 0x8B, 0x51, 0xE0, 0x04, 0xF0, 0xE0, 0x54, 0x03, 0xF0, 0xA1, 0xDD, 0x90, 0x01, 0xC6,
63066 +0xE0, 0x44, 0x02, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x00, 0x04, 0x12, 0x42, 0x20, 0xFF,
63067 +0x54, 0x1F, 0xFE, 0xEF, 0x54, 0x20, 0xC4, 0x13, 0x54, 0x07, 0xFD, 0xAF, 0x06, 0x90, 0x8A, 0xDA,
63068 +0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xA3, 0x12, 0x43, 0x8B, 0x90, 0x8A, 0xDC, 0x12, 0x43, 0x6B, 0x90,
63069 +0x00, 0x03, 0x12, 0x42, 0x20, 0x54, 0xF0, 0xC4, 0x54, 0x0F, 0x90, 0x8A, 0xDF, 0xF0, 0x90, 0x00,
63070 +0x04, 0x12, 0x42, 0x20, 0x54, 0x40, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x90, 0x8A, 0xE0, 0xF0, 0x90,
63071 +0x8A, 0xDA, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0x90, 0x87, 0x25, 0x12, 0x43, 0x5F, 0xAD, 0x82, 0xAC,
63072 +0x83, 0x90, 0x8A, 0xE1, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x75, 0xF0, 0x09, 0xA4, 0x24, 0x23,
63073 +0xF9, 0x74, 0x87, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xA3, 0x12, 0x43, 0x8B, 0x90, 0x8A, 0xDC, 0x12,
63074 +0x43, 0x6B, 0x90, 0x00, 0x03, 0x12, 0x42, 0x20, 0x54, 0x0F, 0xFF, 0x90, 0x8A, 0xE3, 0x12, 0x43,
63075 +0x6B, 0xEF, 0x12, 0x42, 0x4D, 0x90, 0x8A, 0xDC, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x02, 0x12, 0x42,
63076 +0x20, 0xFF, 0x90, 0x8A, 0xE3, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x01, 0xEF, 0x12, 0x42, 0x5F, 0x90,
63077 +0x8A, 0xDC, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x01, 0x12, 0x42, 0x20, 0xFF, 0x90, 0x8A, 0xE1, 0xE0,
63078 +0xFC, 0xA3, 0xE0, 0xFD, 0xF5, 0x82, 0x8C, 0x83, 0xEF, 0xF0, 0x12, 0x29, 0xD9, 0x8D, 0x82, 0x8C,
63079 +0x83, 0xA3, 0xF0, 0x90, 0x8A, 0xDF, 0xE0, 0xFE, 0x90, 0x8A, 0xDA, 0xE0, 0xFF, 0x24, 0xC1, 0xF5,
63080 +0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x8A, 0xDB, 0xE0, 0xFE, 0x75, 0xF0, 0x09,
63081 +0xEF, 0x90, 0x87, 0x29, 0x12, 0x43, 0x5F, 0xEE, 0xF0, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x87, 0x2A,
63082 +0x12, 0x43, 0x5F, 0x74, 0x01, 0xF0, 0x90, 0x8A, 0xE0, 0xE0, 0xFE, 0x75, 0xF0, 0x09, 0xEF, 0x90,
63083 +0x87, 0x2B, 0x12, 0x43, 0x5F, 0xEE, 0xF0, 0x8F, 0x0F, 0xEF, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82,
63084 +0xE4, 0x34, 0x89, 0xAF, 0x82, 0xF5, 0x10, 0x8F, 0x11, 0xE5, 0x0F, 0x75, 0xF0, 0x02, 0xA4, 0x24,
63085 +0x81, 0xF9, 0x74, 0x86, 0x35, 0xF0, 0x75, 0x12, 0x01, 0xF5, 0x13, 0x89, 0x14, 0x75, 0xF0, 0x09,
63086 +0xE5, 0x0F, 0x90, 0x87, 0x25, 0x12, 0x43, 0x5F, 0xAF, 0x82, 0x85, 0x83, 0x15, 0x8F, 0x16, 0xE5,
63087 +0x0F, 0x75, 0xF0, 0x09, 0xA4, 0x24, 0x23, 0xF9, 0x74, 0x87, 0x35, 0xF0, 0x75, 0x17, 0x01, 0xF5,
63088 +0x18, 0x89, 0x19, 0x74, 0xC1, 0x25, 0x0F, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0x12,
63089 +0x43, 0x94, 0x58, 0xA7, 0x00, 0x58, 0xBC, 0x01, 0x58, 0xD1, 0x02, 0x58, 0xE6, 0x03, 0x59, 0x0F,
63090 +0x04, 0x59, 0x24, 0x05, 0x59, 0x39, 0x06, 0x59, 0x5F, 0x0C, 0x59, 0x8C, 0x0D, 0x59, 0xB9, 0x0E,
63091 +0x59, 0xE6, 0x0F, 0x00, 0x00, 0x5A, 0x1A, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4,
63092 +0x34, 0x89, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x15, 0x80, 0x3C, 0xE5, 0x0F, 0x25, 0xE0,
63093 +0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x10, 0x80,
63094 +0x27, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0xF0,
63095 +0xF0, 0xA3, 0x74, 0x05, 0x80, 0x12, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34,
63096 +0x89, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0xE4, 0xF0, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0x81, 0xF5,
63097 +0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0x8F, 0xF0, 0x41, 0x1A, 0xE5,
63098 +0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3,
63099 +0x74, 0xF5, 0x80, 0x27, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5,
63100 +0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0xF0, 0x80, 0x12, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5,
63101 +0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0x74, 0x0D, 0xF0, 0xE5, 0x0F, 0x25, 0xE0,
63102 +0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x41, 0x1A, 0x90,
63103 +0x04, 0x47, 0xE0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x12, 0x42, 0x4D, 0x90, 0x04, 0x46, 0xE0,
63104 +0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x90, 0x00, 0x01, 0x12, 0x42, 0x5F, 0x90, 0x04, 0x45, 0xE0,
63105 +0x85, 0x11, 0x82, 0x85, 0x10, 0x83, 0xF0, 0x90, 0x04, 0x44, 0x41, 0x11, 0x90, 0x04, 0x4B, 0xE0,
63106 +0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x12, 0x42, 0x4D, 0x90, 0x04, 0x4A, 0xE0, 0xAB, 0x12, 0xAA,
63107 +0x13, 0xA9, 0x14, 0x90, 0x00, 0x01, 0x12, 0x42, 0x5F, 0x90, 0x04, 0x49, 0xE0, 0x85, 0x11, 0x82,
63108 +0x85, 0x10, 0x83, 0xF0, 0x90, 0x04, 0x48, 0x80, 0x58, 0x90, 0x04, 0x4F, 0xE0, 0xAB, 0x12, 0xAA,
63109 +0x13, 0xA9, 0x14, 0x12, 0x42, 0x4D, 0x90, 0x04, 0x4E, 0xE0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14,
63110 +0x90, 0x00, 0x01, 0x12, 0x42, 0x5F, 0x90, 0x04, 0x4D, 0xE0, 0x85, 0x11, 0x82, 0x85, 0x10, 0x83,
63111 +0xF0, 0x90, 0x04, 0x4C, 0x80, 0x2B, 0x90, 0x04, 0x53, 0xE0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14,
63112 +0x12, 0x42, 0x4D, 0x90, 0x04, 0x52, 0xE0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x90, 0x00, 0x01,
63113 +0x12, 0x42, 0x5F, 0x90, 0x04, 0x51, 0xE0, 0x85, 0x11, 0x82, 0x85, 0x10, 0x83, 0xF0, 0x90, 0x04,
63114 +0x50, 0xE0, 0x85, 0x11, 0x82, 0x85, 0x10, 0x83, 0xA3, 0xF0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14,
63115 +0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x12, 0x29, 0xD9, 0xFF, 0xAB, 0x17, 0xAA, 0x18, 0xA9, 0x19,
63116 +0x12, 0x29, 0xD9, 0x5F, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x42, 0x4D, 0xAB, 0x12, 0xE5,
63117 +0x14, 0x24, 0x01, 0xF9, 0xE4, 0x35, 0x13, 0xFA, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x12, 0x29,
63118 +0xD9, 0xFF, 0xAB, 0x17, 0xAA, 0x18, 0xA9, 0x19, 0x90, 0x00, 0x01, 0x12, 0x42, 0x20, 0x5F, 0xD0,
63119 +0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x42, 0x4D, 0x85, 0x11, 0x82, 0x85, 0x10, 0x83, 0xC0, 0x83,
63120 +0xC0, 0x82, 0xE0, 0xFF, 0x85, 0x16, 0x82, 0x85, 0x15, 0x83, 0xE0, 0xFE, 0xEF, 0x5E, 0xD0, 0x82,
63121 +0xD0, 0x83, 0xF0, 0x85, 0x11, 0x82, 0x85, 0x10, 0x83, 0xA3, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFF,
63122 +0x85, 0x16, 0x82, 0x85, 0x15, 0x83, 0xA3, 0xE0, 0xFE, 0xEF, 0x5E, 0xD0, 0x82, 0xD0, 0x83, 0xF0,
63123 +0xE5, 0x0F, 0x25, 0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0xFE, 0xA3,
63124 +0xE0, 0x4E, 0x60, 0x4B, 0x90, 0x8A, 0xE6, 0x74, 0x0B, 0xF0, 0x90, 0x8A, 0xE6, 0xE0, 0xFF, 0xC3,
63125 +0x94, 0x00, 0x50, 0x02, 0x61, 0x5F, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3,
63126 +0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4,
63127 +0x34, 0x86, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x0A, 0x90, 0x8A, 0xE6,
63128 +0xE0, 0x24, 0x10, 0xA3, 0xF0, 0x80, 0x68, 0x90, 0x8A, 0xE6, 0xE0, 0x14, 0xF0, 0x80, 0xBB, 0xE5,
63129 +0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0,
63130 +0x4E, 0x60, 0x47, 0x90, 0x8A, 0xE6, 0x74, 0x0F, 0xF0, 0x90, 0x8A, 0xE6, 0xE0, 0xFF, 0xC3, 0x94,
63131 +0x00, 0x40, 0x3C, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33,
63132 +0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5,
63133 +0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x08, 0x90, 0x8A, 0xE6, 0xE0, 0xA3, 0xF0,
63134 +0x80, 0x0D, 0x90, 0x8A, 0xE6, 0xE0, 0x14, 0xF0, 0x80, 0xBF, 0xE4, 0x90, 0x8A, 0xE7, 0xF0, 0xE5,
63135 +0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0,
63136 +0x4E, 0x60, 0x46, 0xE4, 0x90, 0x8A, 0xE6, 0xF0, 0x90, 0x8A, 0xE6, 0xE0, 0xFF, 0xC3, 0x94, 0x10,
63137 +0x40, 0x02, 0x81, 0x18, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE,
63138 +0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89,
63139 +0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x06, 0x90, 0x8A, 0xE6, 0xE0, 0x80,
63140 +0x63, 0x90, 0x8A, 0xE6, 0xE0, 0x04, 0xF0, 0x80, 0xBF, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0x81, 0xF5,
63141 +0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x46, 0xE4, 0x90, 0x8A,
63142 +0xE6, 0xF0, 0x90, 0x8A, 0xE6, 0xE0, 0xFF, 0xC3, 0x94, 0x0C, 0x50, 0x3C, 0x74, 0x01, 0x7E, 0x00,
63143 +0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x0F, 0x25,
63144 +0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F,
63145 +0x4E, 0x60, 0x08, 0x90, 0x8A, 0xE6, 0xE0, 0x24, 0x10, 0x80, 0x09, 0x90, 0x8A, 0xE6, 0xE0, 0x04,
63146 +0xF0, 0x80, 0xBF, 0xE4, 0x90, 0x8A, 0xE8, 0xF0, 0x90, 0x8A, 0xE7, 0xE0, 0xFF, 0x75, 0xF0, 0x09,
63147 +0xE5, 0x0F, 0x90, 0x87, 0x27, 0x12, 0x43, 0x5F, 0xEF, 0xF0, 0x90, 0x8A, 0xE8, 0xE0, 0xFE, 0x75,
63148 +0xF0, 0x09, 0xE5, 0x0F, 0x90, 0x87, 0x28, 0x12, 0x43, 0x5F, 0xEE, 0xF0, 0xE5, 0x0F, 0xC3, 0x94,
63149 +0x20, 0x50, 0x32, 0x74, 0x84, 0x25, 0x0F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0xD3,
63150 +0x9F, 0x40, 0x02, 0x80, 0x18, 0x74, 0x84, 0x25, 0x0F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83,
63151 +0xE0, 0xC3, 0x9E, 0x50, 0x08, 0x90, 0x8A, 0xE8, 0xE0, 0xA3, 0xF0, 0x80, 0x08, 0x90, 0x8A, 0xE7,
63152 +0xE0, 0x90, 0x8A, 0xE9, 0xF0, 0x90, 0x8A, 0xE9, 0xE0, 0xFD, 0xAF, 0x0F, 0x91, 0xC1, 0x90, 0x8A,
63153 +0xE9, 0xE0, 0xFF, 0x74, 0x84, 0x25, 0x0F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEF, 0xF0,
63154 +0x90, 0x8A, 0xE7, 0xE0, 0xFF, 0xD3, 0x94, 0x13, 0x40, 0x07, 0x90, 0x87, 0x22, 0x74, 0x03, 0xF0,
63155 +0x22, 0xEF, 0xD3, 0x94, 0x0B, 0x40, 0x07, 0x90, 0x87, 0x22, 0x74, 0x02, 0xF0, 0x22, 0xEF, 0xD3,
63156 +0x94, 0x03, 0x40, 0x07, 0x90, 0x87, 0x22, 0x74, 0x01, 0xF0, 0x22, 0xE4, 0x90, 0x87, 0x22, 0xF0,
63157 +0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x74, 0x84, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04,
63158 +0xF5, 0x83, 0xED, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xAC, 0x07, 0xED, 0x54, 0x1F, 0x90, 0x8A,
63159 +0xC7, 0xF0, 0x74, 0x01, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0x90, 0x8A, 0xC5,
63160 +0xF0, 0x90, 0x8A, 0xC8, 0x74, 0x01, 0xF0, 0xEB, 0xC3, 0x94, 0x01, 0x40, 0x02, 0x80, 0x37, 0x90,
63161 +0x8A, 0xC5, 0xE0, 0x25, 0x0D, 0xFF, 0xA3, 0xF0, 0xA3, 0xE0, 0x90, 0x41, 0x9E, 0x93, 0xFE, 0xEF,
63162 +0xD3, 0x9E, 0x40, 0x10, 0x74, 0x01, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE4, 0xF0,
63163 +0xAF, 0x04, 0x80, 0x9D, 0x90, 0x8A, 0xC6, 0xE0, 0xFF, 0x74, 0x01, 0x2C, 0xF5, 0x82, 0xE4, 0x34,
63164 +0x86, 0xF5, 0x83, 0xEF, 0xF0, 0x22, 0xAD, 0x07, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x27, 0x12,
63165 +0x43, 0x5F, 0xE0, 0xFF, 0x90, 0x8A, 0xCA, 0xF0, 0x74, 0xA5, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8A,
63166 +0xF5, 0x83, 0xE0, 0x54, 0x1F, 0x90, 0x8A, 0xC9, 0xF0, 0xD3, 0x9F, 0x40, 0x06, 0xA3, 0xE0, 0x90,
63167 +0x8A, 0xC9, 0xF0, 0x90, 0x8A, 0xC9, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34,
63168 +0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x2E, 0xF5,
63169 +0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13,
63170 +0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83,
63171 +0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0x05, 0x90, 0x8A, 0xC9, 0xE0, 0xFD, 0x91, 0xC1, 0x90, 0x8A,
63172 +0xC9, 0xE0, 0xFF, 0x22, 0xAC, 0x07, 0x74, 0x84, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83,
63173 +0xE0, 0x54, 0x7F, 0x90, 0x8A, 0xDE, 0xF0, 0xE0, 0x54, 0x1F, 0xFF, 0x90, 0x8A, 0xE1, 0xF0, 0x75,
63174 +0xF0, 0x09, 0xEC, 0x90, 0x87, 0x28, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xE3, 0xF0, 0x75, 0xF0,
63175 +0x09, 0xEC, 0x90, 0x87, 0x27, 0x12, 0x43, 0x5F, 0xE0, 0xFE, 0x90, 0x8A, 0xE4, 0xF0, 0xEC, 0x25,
63176 +0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x8A,
63177 +0xE5, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x86,
63178 +0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x8A, 0xE7, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0xEF, 0xD3,
63179 +0x9E, 0x40, 0x0C, 0x90, 0x8A, 0xE4, 0xE0, 0x90, 0x8A, 0xE1, 0xF0, 0x90, 0x8A, 0xDE, 0xF0, 0xED,
63180 +0x70, 0x02, 0xE1, 0x06, 0x90, 0x8A, 0xE2, 0xED, 0xF0, 0x90, 0x8A, 0xDE, 0xE0, 0x30, 0xE6, 0x0E,
63181 +0x90, 0x8A, 0xE1, 0xE0, 0x90, 0x8A, 0xDE, 0xF0, 0x90, 0x8A, 0xE2, 0xE0, 0x14, 0xF0, 0x90, 0x8A,
63182 +0xE2, 0xE0, 0x70, 0x02, 0xE1, 0x06, 0x90, 0x8A, 0xE1, 0xE0, 0xFF, 0xD3, 0x94, 0x00, 0x50, 0x02,
63183 +0xE1, 0x06, 0xE4, 0x90, 0x8A, 0xE0, 0xF0, 0xEF, 0x14, 0x90, 0x8A, 0xDF, 0xF0, 0x90, 0x8A, 0xE3,
63184 +0xE0, 0xFD, 0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0xD3, 0x9D, 0x40, 0x6F, 0xEF, 0x94, 0x10, 0x40, 0x21,
63185 +0xEF, 0x24, 0xF0, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE,
63186 +0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x8A, 0xE7, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x70,
63187 +0x27, 0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x37, 0x74, 0x01, 0x7E, 0x00, 0xA8,
63188 +0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x8A, 0xE5, 0xE0,
63189 +0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x1A, 0x90, 0x8A, 0xDF, 0xE0, 0x90, 0x8A, 0xDE, 0xF0,
63190 +0x90, 0x8A, 0xE0, 0xE0, 0x04, 0xF0, 0x90, 0x8A, 0xE2, 0xE0, 0xFF, 0x90, 0x8A, 0xE0, 0xE0, 0x6F,
63191 +0x60, 0x08, 0x90, 0x8A, 0xDF, 0xE0, 0x14, 0xF0, 0x80, 0x83, 0x90, 0x8A, 0xE2, 0xE0, 0xFF, 0x90,
63192 +0x8A, 0xE0, 0xE0, 0xC3, 0x9F, 0x50, 0x0F, 0x90, 0x8A, 0xDF, 0xE0, 0xB5, 0x05, 0x08, 0x90, 0x8A,
63193 +0xE3, 0xE0, 0x90, 0x8A, 0xDE, 0xF0, 0x90, 0x8A, 0xDE, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x66, 0xF5,
63194 +0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0,
63195 +0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93,
63196 +0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xEC, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34,
63197 +0x86, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0x04, 0x90, 0x8A, 0xDE, 0xE0, 0xFD, 0x91,
63198 +0xC1, 0x90, 0x8A, 0xDE, 0xE0, 0xFF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8B, 0x1A,
63199 +0x8A, 0x1B, 0x89, 0x1C, 0x90, 0x8B, 0x3F, 0x12, 0x43, 0x8B, 0xAB, 0x1D, 0xAA, 0x1E, 0xA9, 0x1F,
63200 +0x90, 0x8B, 0x42, 0x12, 0x43, 0x8B, 0xAF, 0x20, 0x15, 0x20, 0xEF, 0x60, 0x1E, 0x90, 0x8B, 0x42,
63201 +0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43, 0x74, 0x12, 0x29, 0xD9, 0xFF, 0x90, 0x8B, 0x3F, 0xE4, 0x75,
63202 +0xF0, 0x01, 0x12, 0x43, 0x74, 0xEF, 0x12, 0x42, 0x4D, 0x80, 0xDB, 0xAB, 0x1A, 0xAA, 0x1B, 0xA9,
63203 +0x1C, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x01, 0xC4,
63204 +0x74, 0xA6, 0xF0, 0x74, 0x5F, 0xA3, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x1A, 0x90, 0x05, 0x22,
63205 +0xE0, 0x54, 0x90, 0x60, 0x07, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x01, 0xC7, 0xE0,
63206 +0x30, 0xE1, 0xE4, 0x7F, 0x00, 0x80, 0x02, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10,
63207 +0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFB, 0xFA, 0xEF, 0x30, 0xE0, 0x02, 0x7B, 0x80, 0xEF, 0xC3,
63208 +0x13, 0x90, 0xFD, 0x10, 0xF0, 0x90, 0x04, 0x25, 0xEF, 0xF0, 0xED, 0x60, 0x1E, 0xAF, 0x03, 0x74,
63209 +0x0F, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0x74, 0x10, 0x2F,
63210 +0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0xAF, 0x03, 0x74, 0x08, 0x2F,
63211 +0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x09, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
63212 +0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xF0, 0xF0, 0x74, 0x21, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5,
63213 +0x83, 0xE0, 0x54, 0xF7, 0xF0, 0xAE, 0x02, 0xAF, 0x03, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10,
63214 +0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFD, 0xFC, 0xEF, 0x30, 0xE0, 0x02, 0x7D, 0x80, 0xEF, 0xC3,
63215 +0x13, 0x90, 0xFD, 0x10, 0xF0, 0xAE, 0x04, 0xAF, 0x05, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x5F,
63216 +0xA6, 0xBF, 0x01, 0x10, 0x90, 0x02, 0x09, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x5F, 0xDE, 0x90, 0x04,
63217 +0x1F, 0x74, 0x20, 0xF0, 0x22, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0xFF, 0xE0, 0x54, 0x0C, 0x13,
63218 +0x13, 0x54, 0x3F, 0xFE, 0xEF, 0x64, 0x01, 0x60, 0x04, 0xEF, 0xB4, 0x03, 0x0E, 0x90, 0x8A, 0xC5,
63219 +0x74, 0x01, 0xF0, 0xA3, 0x74, 0x37, 0xF0, 0x79, 0x01, 0x80, 0x18, 0xEE, 0x64, 0x01, 0x60, 0x07,
63220 +0xAF, 0x06, 0xEE, 0x64, 0x03, 0x70, 0x3B, 0x90, 0x8A, 0xC5, 0x74, 0x01, 0xF0, 0xA3, 0x74, 0x3D,
63221 +0xF0, 0x79, 0x40, 0x90, 0x8A, 0xC5, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xF5, 0x82, 0x8E, 0x83, 0xE0,
63222 +0x59, 0x60, 0x08, 0xE9, 0xF0, 0xE4, 0x90, 0x8A, 0xF6, 0xF0, 0x22, 0x90, 0x8A, 0xF6, 0xE0, 0x04,
63223 +0xF0, 0xE0, 0xC3, 0x94, 0x0A, 0x40, 0x0B, 0xE4, 0xF0, 0x90, 0x04, 0x19, 0xE0, 0x30, 0xE0, 0x02,
63224 +0x11, 0x6E, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00,
63225 +0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07,
63226 +0x90, 0x01, 0xC4, 0x74, 0xF3, 0xF0, 0x74, 0x60, 0xA3, 0xF0, 0x90, 0x01, 0x34, 0xE0, 0x55, 0x28,
63227 +0xF5, 0x2C, 0xA3, 0xE0, 0x55, 0x29, 0xF5, 0x2D, 0xA3, 0xE0, 0x55, 0x2A, 0xF5, 0x2E, 0xA3, 0xE0,
63228 +0x55, 0x2B, 0xF5, 0x2F, 0xE5, 0x2C, 0x20, 0xE0, 0x02, 0x41, 0x8A, 0x90, 0x01, 0x34, 0x74, 0x01,
63229 +0xF0, 0x85, 0xD1, 0x4D, 0x85, 0xD2, 0x4E, 0x85, 0xD3, 0x4F, 0x85, 0xD4, 0x50, 0x85, 0xD5, 0x51,
63230 +0x85, 0xD6, 0x52, 0x85, 0xD7, 0x53, 0x85, 0xD9, 0x54, 0xE5, 0x54, 0x54, 0x40, 0xC3, 0x13, 0xFF,
63231 +0xE5, 0x53, 0x54, 0x20, 0x6F, 0x70, 0x02, 0x41, 0x47, 0xE5, 0x54, 0x30, 0xE5, 0x02, 0x41, 0x47,
63232 +0xE5, 0x52, 0x54, 0x1F, 0xF5, 0x08, 0xE5, 0x4D, 0x54, 0x3F, 0xF5, 0x09, 0xE5, 0x51, 0x54, 0x1F,
63233 +0xFF, 0xE5, 0x08, 0x25, 0xE0, 0x24, 0xE3, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0x8F,
63234 +0xF0, 0x12, 0x42, 0x81, 0xE5, 0x53, 0x54, 0x1F, 0xFF, 0xE5, 0x08, 0x25, 0xE0, 0x24, 0xC0, 0xF5,
63235 +0x82, 0xE4, 0x34, 0x85, 0xF5, 0x83, 0xE4, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0xE5, 0x09, 0xD3, 0x94,
63236 +0x04, 0x40, 0x03, 0x75, 0x09, 0x04, 0x75, 0xF0, 0x0A, 0xE5, 0x08, 0x90, 0x84, 0x00, 0x12, 0x43,
63237 +0x5F, 0x75, 0xF0, 0x02, 0xE5, 0x09, 0x12, 0x43, 0x5F, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xE5, 0x53,
63238 +0x54, 0x1F, 0x2F, 0xFF, 0xE4, 0x3E, 0xFE, 0x75, 0xF0, 0x0A, 0xE5, 0x08, 0x90, 0x84, 0x00, 0x12,
63239 +0x43, 0x5F, 0x75, 0xF0, 0x02, 0xE5, 0x09, 0x12, 0x43, 0x5F, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE5,
63240 +0x54, 0x20, 0xE6, 0x24, 0xE5, 0x53, 0x54, 0x1F, 0xFF, 0xE5, 0x08, 0x25, 0xE0, 0x24, 0x63, 0xF5,
63241 +0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0xE5, 0x4F, 0x30, 0xE7,
63242 +0x36, 0xAF, 0x08, 0x12, 0x5D, 0x36, 0x80, 0x2F, 0xE5, 0x53, 0x54, 0x1F, 0xFF, 0xE5, 0x08, 0x25,
63243 +0xE0, 0x24, 0xA3, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0x8F, 0xF0, 0x12, 0x42, 0x81,
63244 +0xE5, 0x4F, 0x30, 0xE7, 0x12, 0xE5, 0x4F, 0x54, 0x7F, 0xFD, 0xE5, 0x53, 0x54, 0x1F, 0xF5, 0x0D,
63245 +0xAB, 0x09, 0xAF, 0x08, 0x12, 0x5C, 0xD9, 0xE5, 0x24, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x3A,
63246 +0x90, 0x8B, 0x1A, 0xE0, 0x60, 0x2B, 0x90, 0x01, 0x5B, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x04,
63247 +0xF0, 0x12, 0x4B, 0x34, 0xEF, 0x64, 0x01, 0x70, 0x21, 0x90, 0x8B, 0x3D, 0x12, 0x4B, 0x5C, 0x90,
63248 +0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0, 0x90, 0x8B, 0x18, 0xF0, 0x80,
63249 +0x09, 0x12, 0x4B, 0x34, 0xBF, 0x01, 0x03, 0x12, 0x4A, 0xFC, 0xE5, 0x2C, 0x30, 0xE1, 0x20, 0x90,
63250 +0x01, 0x34, 0x74, 0x02, 0xF0, 0x85, 0xD1, 0x56, 0x85, 0xD2, 0x57, 0x85, 0xD3, 0x58, 0x85, 0xD4,
63251 +0x59, 0x85, 0xD5, 0x5A, 0x85, 0xD6, 0x5B, 0x85, 0xD7, 0x5C, 0x85, 0xD9, 0x5D, 0xB1, 0x5F, 0xE5,
63252 +0x2C, 0x30, 0xE3, 0x06, 0x90, 0x01, 0x34, 0x74, 0x08, 0xF0, 0xE5, 0x2C, 0x30, 0xE4, 0x09, 0x90,
63253 +0x01, 0x34, 0x74, 0x10, 0xF0, 0x43, 0x55, 0x10, 0xE5, 0x2C, 0x30, 0xE5, 0x26, 0x90, 0x01, 0xCF,
63254 +0xE0, 0x30, 0xE5, 0x1F, 0xE0, 0x54, 0xDF, 0xF0, 0x90, 0x01, 0x34, 0x74, 0x20, 0xF0, 0x75, 0xA8,
63255 +0x00, 0x75, 0xE8, 0x00, 0x12, 0x52, 0x10, 0x90, 0x00, 0x03, 0xE0, 0x54, 0xFB, 0xF0, 0x12, 0x52,
63256 +0x81, 0x80, 0xFE, 0xE5, 0x2C, 0x30, 0xE6, 0x2D, 0x90, 0x01, 0x34, 0x74, 0x40, 0xF0, 0x90, 0x8B,
63257 +0x32, 0xE0, 0x30, 0xE0, 0x0C, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x05, 0x90, 0x8B, 0x34, 0xE4,
63258 +0xF0, 0x90, 0x8B, 0x2C, 0xE0, 0xFF, 0x30, 0xE0, 0x0C, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x05,
63259 +0x90, 0x8B, 0x2E, 0xE4, 0xF0, 0xE5, 0x2E, 0x20, 0xE0, 0x02, 0x61, 0xE7, 0x90, 0x8B, 0x08, 0x74,
63260 +0x01, 0xF0, 0x90, 0x01, 0x36, 0xF0, 0x90, 0x8B, 0x06, 0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90, 0x05,
63261 +0x53, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x05, 0xFC, 0xE0, 0x04, 0xF0, 0x90, 0x8B, 0x32, 0xE0, 0x30,
63262 +0xE0, 0x2F, 0x90, 0x8B, 0x37, 0x74, 0x01, 0xF0, 0x90, 0x8B, 0x32, 0xE0, 0xFF, 0x13, 0x13, 0x54,
63263 +0x3F, 0x30, 0xE0, 0x1D, 0x90, 0x8B, 0x34, 0x74, 0x01, 0xF0, 0xB1, 0x39, 0x90, 0x8B, 0x33, 0xE0,
63264 +0x64, 0x03, 0x60, 0x0D, 0x7F, 0x01, 0x12, 0x4D, 0xE0, 0xEF, 0x60, 0x05, 0x7F, 0x04, 0x12, 0x4E,
63265 +0x89, 0x90, 0x8B, 0x2C, 0xE0, 0xFF, 0x30, 0xE0, 0x56, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x4F,
63266 +0x90, 0x8B, 0x2E, 0x74, 0x01, 0xF0, 0xB1, 0x39, 0xE4, 0xFF, 0x12, 0x4D, 0xE0, 0xEF, 0x60, 0x3F,
63267 +0xB1, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x8B, 0x2D, 0xE0, 0xFF, 0x64, 0x06, 0x60,
63268 +0x2E, 0xEF, 0xB4, 0x04, 0x02, 0x80, 0x07, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05, 0x04, 0xE4, 0xFF,
63269 +0x80, 0x14, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x03, 0x04, 0x7F, 0x01, 0x80, 0x09, 0x90, 0x8B, 0x2D,
63270 +0xE0, 0xB4, 0x02, 0x05, 0x7F, 0x01, 0x12, 0x7B, 0x49, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12,
63271 +0x43, 0xE7, 0x90, 0x8B, 0x08, 0xE4, 0xF0, 0xE5, 0x2E, 0x30, 0xE1, 0x2F, 0x90, 0x01, 0x36, 0x74,
63272 +0x02, 0xF0, 0x43, 0x55, 0x40, 0x11, 0x85, 0x90, 0x8B, 0x37, 0xE0, 0xB4, 0x01, 0x09, 0x90, 0x05,
63273 +0x22, 0xE4, 0xF0, 0x90, 0x8B, 0x37, 0xF0, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x0D, 0xE4, 0xFF,
63274 +0x12, 0x4D, 0xE0, 0xEF, 0x60, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0xE5, 0x2E, 0x30, 0xE2, 0x16,
63275 +0x90, 0x01, 0x36, 0x74, 0x04, 0xF0, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x06, 0xA3, 0xE0, 0x64,
63276 +0x06, 0x60, 0x03, 0x12, 0x46, 0xB3, 0xE5, 0x2E, 0x30, 0xE3, 0x38, 0x90, 0x01, 0x36, 0x74, 0x08,
63277 +0xF0, 0xE5, 0x21, 0x64, 0x01, 0x70, 0x2C, 0xE5, 0x24, 0x60, 0x28, 0x90, 0x01, 0x57, 0xE4, 0xF0,
63278 +0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90, 0x8B, 0x3D, 0xE4, 0xF0, 0x90, 0x8B, 0x11, 0xE0, 0x90,
63279 +0x8B, 0x3E, 0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x57,
63280 +0x74, 0x05, 0xF0, 0xE5, 0x2E, 0x30, 0xE4, 0x2B, 0x90, 0x01, 0x36, 0x74, 0x10, 0xF0, 0xE5, 0x21,
63281 +0xB4, 0x01, 0x20, 0xE5, 0x24, 0x60, 0x1C, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74,
63282 +0x02, 0xF0, 0x90, 0x8B, 0x1B, 0xE4, 0xF0, 0x53, 0x25, 0xFD, 0xE5, 0x25, 0x54, 0x07, 0x70, 0x03,
63283 +0x12, 0x4A, 0xFC, 0xE5, 0x2E, 0x30, 0xE5, 0x1F, 0x90, 0x01, 0x36, 0x74, 0x20, 0xF0, 0xE5, 0x21,
63284 +0xB4, 0x01, 0x14, 0xE5, 0x24, 0x60, 0x10, 0x90, 0x8B, 0x1A, 0xE0, 0x64, 0x02, 0x60, 0x05, 0x12,
63285 +0x4A, 0x97, 0x80, 0x03, 0x12, 0x49, 0x49, 0xE5, 0x2E, 0x30, 0xE6, 0x1B, 0x90, 0x01, 0x36, 0x74,
63286 +0x40, 0xF0, 0xE5, 0x21, 0xB4, 0x01, 0x10, 0xE5, 0x24, 0x60, 0x0C, 0x53, 0x25, 0xFE, 0xE5, 0x25,
63287 +0x54, 0x07, 0x70, 0x03, 0x12, 0x4A, 0xFC, 0xE5, 0x2F, 0x30, 0xE1, 0x27, 0x90, 0x01, 0x37, 0x74,
63288 +0x02, 0xF0, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x17, 0xE4, 0xFF, 0x12, 0x4D, 0xE0, 0xEF, 0x60,
63289 +0x07, 0x12, 0x48, 0xFE, 0xD1, 0x20, 0x80, 0x0B, 0x90, 0x8B, 0x31, 0x74, 0x01, 0xF0, 0x80, 0x03,
63290 +0x12, 0x48, 0xFE, 0x74, 0xF3, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x60, 0xA3, 0xF0, 0xD0, 0x07,
63291 +0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0,
63292 +0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0xE4, 0x90, 0x8B, 0x3D, 0xF0, 0x90, 0x05,
63293 +0x58, 0xE0, 0xFF, 0x90, 0x8B, 0x38, 0xE0, 0x2F, 0x24, 0xFE, 0x90, 0x8B, 0x3E, 0xF0, 0xE4, 0xFB,
63294 +0xFD, 0x7F, 0x50, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x53, 0x74, 0x05, 0xF0, 0x22, 0x90,
63295 +0x8A, 0xC5, 0xE0, 0x54, 0xF0, 0x44, 0x03, 0xF0, 0x54, 0x0F, 0x44, 0x80, 0xF0, 0x7B, 0x00, 0x7A,
63296 +0x00, 0x79, 0x56, 0x90, 0x8B, 0x48, 0x12, 0x43, 0x8B, 0x0B, 0x7A, 0x8A, 0x79, 0xC5, 0xD3, 0x10,
63297 +0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x8B, 0x45, 0x12, 0x43, 0x8B, 0x90, 0x8B, 0x53, 0xE0, 0xFF,
63298 +0x04, 0xF0, 0x90, 0x00, 0x01, 0xEF, 0x12, 0x42, 0x5F, 0x7F, 0xAF, 0x7E, 0x01, 0xD1, 0x8A, 0xEF,
63299 +0x60, 0x49, 0x90, 0x8B, 0x45, 0x12, 0x43, 0x6B, 0x8B, 0x1D, 0x8A, 0x1E, 0x89, 0x1F, 0x75, 0x20,
63300 +0x02, 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA0, 0x12, 0x5F, 0x57, 0x90, 0x8B, 0x48, 0x12, 0x43, 0x6B,
63301 +0x8B, 0x1D, 0x8A, 0x1E, 0x89, 0x1F, 0x90, 0x8B, 0x45, 0x12, 0x43, 0x6B, 0x12, 0x29, 0xD9, 0xFF,
63302 +0xC4, 0x54, 0x0F, 0xF5, 0x20, 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA2, 0x12, 0x5F, 0x57, 0x90, 0x01,
63303 +0xAF, 0x74, 0xFF, 0xF0, 0x90, 0x01, 0xCB, 0xE0, 0x64, 0x80, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
63304 +0x90, 0x8B, 0x2C, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x0B, 0xA3, 0xE0, 0x64,
63305 +0x06, 0x60, 0x05, 0x7F, 0x06, 0x12, 0x7B, 0x49, 0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x06, 0x60, 0x02,
63306 +0xD1, 0x13, 0x22, 0x90, 0x8B, 0x31, 0xE0, 0xB4, 0x01, 0x05, 0xE4, 0xF0, 0x12, 0x48, 0xFE, 0x22,
63307 +0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x06, 0x60, 0x3C, 0xE5, 0x22, 0x54, 0x0F, 0x14, 0x60, 0x2E, 0x14,
63308 +0x60, 0x1E, 0x24, 0xFE, 0x60, 0x0E, 0x24, 0xF8, 0x70, 0x2A, 0xE4, 0x90, 0x8B, 0x2D, 0xF0, 0x90,
63309 +0x05, 0x22, 0xF0, 0x22, 0x90, 0x8B, 0x2D, 0x74, 0x01, 0xF0, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x22,
63310 +0x90, 0x8B, 0x2D, 0x74, 0x03, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x22, 0x90, 0x01, 0xC6,
63311 +0xE0, 0x44, 0x08, 0xF0, 0x22, 0xAE, 0x07, 0xE4, 0xFF, 0x12, 0x4D, 0xE0, 0xEF, 0x60, 0x18, 0x90,
63312 +0x8B, 0x2C, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x0C, 0xAF, 0x06, 0x7D, 0x01, 0x12,
63313 +0x45, 0xA2, 0xD1, 0x20, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0x90, 0x8B, 0x4B, 0xEE, 0xF0, 0xA3,
63314 +0xEF, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x8B, 0x4B, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5, 0x82,
63315 +0x8E, 0x83, 0xE0, 0x60, 0x2C, 0xC3, 0x90, 0x8B, 0x4E, 0xE0, 0x94, 0xE8, 0x90, 0x8B, 0x4D, 0xE0,
63316 +0x94, 0x03, 0x40, 0x0A, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x10, 0xF0, 0x7F, 0x00, 0x22, 0x90, 0x8B,
63317 +0x4D, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x81, 0x7F, 0x0A, 0x7E, 0x00, 0x12, 0x37, 0x54, 0x80,
63318 +0xC6, 0x7F, 0x01, 0x22, 0x75, 0x28, 0x33, 0xE4, 0xF5, 0x29, 0x75, 0x2A, 0x07, 0xF5, 0x2B, 0x90,
63319 +0x01, 0x30, 0xE5, 0x28, 0xF0, 0xA3, 0xE5, 0x29, 0xF0, 0xA3, 0xE5, 0x2A, 0xF0, 0xA3, 0xE5, 0x2B,
63320 +0xF0, 0x22, 0x75, 0x30, 0x1F, 0x75, 0x31, 0x01, 0x43, 0x31, 0x10, 0xE4, 0xF5, 0x32, 0x90, 0x01,
63321 +0x38, 0xE5, 0x30, 0xF0, 0xA3, 0xE5, 0x31, 0xF0, 0xA3, 0xE5, 0x32, 0xF0, 0x22, 0x22, 0x90, 0x00,
63322 +0x02, 0xE0, 0x54, 0xE0, 0x7F, 0x01, 0x60, 0x02, 0x7F, 0x00, 0x22, 0x90, 0x00, 0xF3, 0xE0, 0x7F,
63323 +0x00, 0x30, 0xE3, 0x02, 0x7F, 0x01, 0x22, 0x90, 0x8B, 0x09, 0xE0, 0xB4, 0x01, 0x0C, 0x90, 0x00,
63324 +0xF2, 0xE0, 0x30, 0xE7, 0x05, 0x7E, 0xFD, 0x7F, 0x33, 0x22, 0x7E, 0xFD, 0x7F, 0x2F, 0x22, 0x90,
63325 +0x00, 0xF3, 0xE0, 0x30, 0xE2, 0x0D, 0x90, 0x05, 0x41, 0x74, 0x10, 0xF0, 0x90, 0x05, 0x5A, 0xF0,
63326 +0xA3, 0xE4, 0xF0, 0x22, 0x90, 0x01, 0x64, 0x74, 0xA0, 0xF0, 0x22, 0xC0, 0xE0, 0xC0, 0x83, 0xC0,
63327 +0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x7D, 0x5B, 0x90, 0x01,
63328 +0xC4, 0xED, 0xF0, 0x74, 0x67, 0xFF, 0xA3, 0xF0, 0x53, 0x91, 0xEF, 0x90, 0x00, 0x51, 0xE0, 0xFE,
63329 +0x90, 0x00, 0x55, 0xE0, 0x5E, 0xF5, 0x3D, 0x90, 0x00, 0x52, 0xE0, 0xFE, 0x90, 0x00, 0x56, 0xE0,
63330 +0x5E, 0xF5, 0x3E, 0xE5, 0x3D, 0x30, 0xE4, 0x06, 0x90, 0x00, 0x55, 0x74, 0x10, 0xF0, 0xE5, 0x3D,
63331 +0x30, 0xE5, 0x06, 0x90, 0x00, 0x55, 0x74, 0x20, 0xF0, 0xE5, 0x3D, 0x30, 0xE6, 0x06, 0x90, 0x00,
63332 +0x55, 0x74, 0x40, 0xF0, 0xE5, 0x3D, 0x30, 0xE7, 0x06, 0x90, 0x00, 0x55, 0x74, 0x80, 0xF0, 0xE5,
63333 +0x3E, 0x30, 0xE0, 0x06, 0x90, 0x00, 0x56, 0x74, 0x01, 0xF0, 0xE5, 0x3E, 0x30, 0xE1, 0x06, 0x90,
63334 +0x00, 0x56, 0x74, 0x02, 0xF0, 0xE5, 0x3E, 0x30, 0xE2, 0x06, 0x90, 0x00, 0x56, 0x74, 0x04, 0xF0,
63335 +0xE5, 0x3E, 0x30, 0xE3, 0x06, 0x90, 0x00, 0x56, 0x74, 0x08, 0xF0, 0x90, 0x01, 0xC4, 0xED, 0xF0,
63336 +0xA3, 0xEF, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0,
63337 +0xE0, 0x32, 0xEF, 0xC3, 0x94, 0x20, 0x50, 0x39, 0xEF, 0x30, 0xE0, 0x17, 0xED, 0xC4, 0x54, 0xF0,
63338 +0xFD, 0xEF, 0xC3, 0x13, 0xFE, 0x24, 0xA4, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54,
63339 +0x0F, 0x80, 0x10, 0xEF, 0xC3, 0x13, 0xFE, 0x24, 0xA4, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83,
63340 +0xE0, 0x54, 0xF0, 0xF0, 0x74, 0xA4, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x4D,
63341 +0xF0, 0x22, 0xE4, 0x90, 0x8A, 0xCF, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0xC3, 0x94, 0x20, 0x40,
63342 +0x02, 0xC1, 0xCD, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x87, 0x2A, 0x12, 0x43, 0x5F, 0xE0, 0x64, 0x01,
63343 +0x60, 0x02, 0xC1, 0xC5, 0x90, 0x8A, 0xCF, 0xE0, 0x25, 0xE0, 0x24, 0xC0, 0xF5, 0x82, 0xE4, 0x34,
63344 +0x85, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xD3, 0x94, 0x00, 0xEC, 0x94, 0x00, 0x50, 0x02, 0xC1,
63345 +0xC5, 0xEF, 0x75, 0xF0, 0x0A, 0xA4, 0x24, 0x00, 0xF9, 0x74, 0x84, 0x35, 0xF0, 0x75, 0x12, 0x01,
63346 +0xF5, 0x13, 0x89, 0x14, 0x90, 0x8A, 0xCF, 0xE0, 0x25, 0xE0, 0x24, 0xC0, 0xF5, 0x82, 0xE4, 0x34,
63347 +0x85, 0xF5, 0x83, 0xE0, 0xFD, 0xA3, 0xE0, 0x90, 0x8A, 0xD4, 0xCD, 0xF0, 0xA3, 0xED, 0xF0, 0xEF,
63348 +0x25, 0xE0, 0x24, 0x63, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90,
63349 +0x8A, 0xD6, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0xFE, 0x24, 0x84, 0xF5, 0x82,
63350 +0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x3F, 0x90, 0x8A, 0xD0, 0xF0, 0xE0, 0xFD, 0x54, 0x1F,
63351 +0xA3, 0xF0, 0x75, 0xF0, 0x09, 0xEE, 0x90, 0x87, 0x27, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD9,
63352 +0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0xFB, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0,
63353 +0xC3, 0x94, 0x05, 0x40, 0x02, 0x61, 0x1A, 0x90, 0x8A, 0xD9, 0xE0, 0xFE, 0x90, 0x8A, 0xD1, 0xE0,
63354 +0x9E, 0x40, 0x13, 0x90, 0x8A, 0xD9, 0xE0, 0x90, 0x8A, 0xD1, 0xF0, 0xED, 0x54, 0x40, 0xFD, 0x90,
63355 +0x8A, 0xD0, 0xF0, 0xEE, 0x4D, 0xF0, 0x90, 0x8A, 0xD1, 0xE0, 0xFF, 0x90, 0x41, 0x12, 0x93, 0xFE,
63356 +0x74, 0x23, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xC3, 0x9E, 0x40, 0x06, 0xEF,
63357 +0x90, 0x40, 0xDA, 0x80, 0x07, 0x90, 0x8A, 0xD1, 0xE0, 0x90, 0x40, 0xF6, 0x93, 0x90, 0x8A, 0xD8,
63358 +0xF0, 0x90, 0x8A, 0xD8, 0xE0, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x50, 0xF9, 0x74, 0x40, 0x35, 0xF0,
63359 +0x75, 0x0F, 0xFF, 0xF5, 0x10, 0x89, 0x11, 0x90, 0x8A, 0xD0, 0xE0, 0x90, 0x41, 0xBA, 0x93, 0xFF,
63360 +0xD3, 0x90, 0x8A, 0xD7, 0xE0, 0x9F, 0x90, 0x8A, 0xD6, 0xE0, 0x94, 0x00, 0x40, 0x0C, 0x90, 0x8A,
63361 +0xCF, 0xE0, 0xFF, 0xE4, 0xFD, 0x12, 0x5D, 0xB4, 0xC1, 0x5B, 0x90, 0x8A, 0xCF, 0xE0, 0x25, 0xE0,
63362 +0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x8A, 0xD2,
63363 +0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0xAB, 0x0F, 0xAA, 0x10, 0xA9, 0x11, 0x12, 0x29, 0xD9, 0xFF, 0x7E,
63364 +0x00, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x12, 0x42, 0x97, 0xFD, 0xAC, 0xF0, 0x12, 0x29, 0xF2,
63365 +0x90, 0x8A, 0xD2, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0xAB, 0x0F, 0xAA, 0x10, 0xA9, 0x11, 0x90,
63366 +0x00, 0x01, 0x12, 0x42, 0x20, 0xFF, 0x7E, 0x00, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x90, 0x00,
63367 +0x02, 0x12, 0x42, 0xC2, 0xFD, 0xAC, 0xF0, 0x12, 0x29, 0xF2, 0x90, 0x8A, 0xD2, 0xEE, 0x8F, 0xF0,
63368 +0x12, 0x42, 0x81, 0xAB, 0x0F, 0xAA, 0x10, 0xA9, 0x11, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFF,
63369 +0x7E, 0x00, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x90, 0x00, 0x04, 0x12, 0x42, 0xC2, 0xFD, 0xAC,
63370 +0xF0, 0x12, 0x29, 0xF2, 0x90, 0x8A, 0xD2, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0xAB, 0x0F, 0xAA,
63371 +0x10, 0xA9, 0x11, 0x90, 0x00, 0x03, 0x12, 0x42, 0x20, 0xFF, 0x7E, 0x00, 0xAB, 0x12, 0xAA, 0x13,
63372 +0xA9, 0x14, 0x90, 0x00, 0x06, 0x12, 0x42, 0xC2, 0xFD, 0xAC, 0xF0, 0x12, 0x29, 0xF2, 0x90, 0x8A,
63373 +0xD2, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0xAB, 0x0F, 0xAA, 0x10, 0xA9, 0x11, 0x90, 0x00, 0x04,
63374 +0x12, 0x42, 0x20, 0xFF, 0x7E, 0x00, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x90, 0x00, 0x08, 0x12,
63375 +0x42, 0xC2, 0xFD, 0xAC, 0xF0, 0x12, 0x29, 0xF2, 0x90, 0x8A, 0xD2, 0xEE, 0x8F, 0xF0, 0x12, 0x42,
63376 +0x81, 0xAB, 0x0F, 0xAA, 0x10, 0xA9, 0x11, 0x90, 0x00, 0x05, 0x12, 0x42, 0x20, 0xFF, 0x7E, 0x00,
63377 +0x90, 0x8A, 0xD4, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x12, 0x29, 0xF2, 0xD3, 0x90, 0x8A, 0xD3, 0xE0,
63378 +0x9F, 0x90, 0x8A, 0xD2, 0xE0, 0x9E, 0x40, 0x0C, 0xA3, 0xE0, 0x9F, 0xF0, 0x90, 0x8A, 0xD2, 0xE0,
63379 +0x9E, 0xF0, 0x80, 0x07, 0xE4, 0x90, 0x8A, 0xD2, 0xF0, 0xA3, 0xF0, 0x90, 0x8A, 0xD2, 0xE0, 0xFC,
63380 +0xA3, 0xE0, 0xFD, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34,
63381 +0x86, 0xF5, 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x8A, 0xD0, 0xE0, 0x25, 0xE0, 0x24, 0x2E,
63382 +0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xD3, 0xED,
63383 +0x9B, 0xEC, 0x9A, 0x40, 0x04, 0xD1, 0xCE, 0xC1, 0x29, 0x90, 0x8A, 0xD0, 0xE0, 0x25, 0xE0, 0x24,
63384 +0x66, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFE, 0x74, 0x01, 0x93, 0xFF, 0xC3,
63385 +0x90, 0x8A, 0xD3, 0xE0, 0x9F, 0x90, 0x8A, 0xD2, 0xE0, 0x9E, 0x40, 0x02, 0xC1, 0x29, 0x90, 0x8A,
63386 +0xCF, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x5D, 0xB4, 0xC1, 0x29, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0x24,
63387 +0x64, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xFC, 0x64, 0x05, 0x60, 0x02, 0x81, 0xF8,
63388 +0x90, 0x87, 0x22, 0xE0, 0xFE, 0xB4, 0x03, 0x0B, 0x90, 0x8A, 0xD1, 0xE0, 0xC3, 0x94, 0x19, 0x40,
63389 +0x3D, 0x80, 0x2E, 0xEE, 0xB4, 0x02, 0x0B, 0x90, 0x8A, 0xD1, 0xE0, 0xC3, 0x94, 0x11, 0x40, 0x2E,
63390 +0x80, 0x1F, 0x90, 0x87, 0x22, 0xE0, 0xFE, 0xB4, 0x01, 0x0B, 0x90, 0x8A, 0xD1, 0xE0, 0xC3, 0x94,
63391 +0x0A, 0x40, 0x1B, 0x80, 0x0C, 0xEE, 0x70, 0x11, 0x90, 0x8A, 0xD1, 0xE0, 0xC3, 0x94, 0x03, 0x40,
63392 +0x0D, 0x90, 0x89, 0x43, 0x74, 0x01, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x89, 0x43, 0xF0, 0x90, 0x8A,
63393 +0xCF, 0xE0, 0xFE, 0x24, 0x43, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0x90, 0x8A, 0xDD,
63394 +0xF0, 0x74, 0x23, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xC3, 0x94, 0x30,
63395 +0x50, 0x0A, 0xE4, 0x90, 0x8A, 0xDD, 0xF0, 0x74, 0x64, 0x2F, 0x81, 0xA3, 0x90, 0x89, 0x43, 0xE0,
63396 +0x64, 0x01, 0x60, 0x02, 0x81, 0x98, 0x90, 0x8A, 0xCF, 0xE0, 0x24, 0x44, 0xF5, 0x82, 0xE4, 0x34,
63397 +0x89, 0xF5, 0x83, 0xE0, 0x64, 0x0A, 0x60, 0x5B, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0xEE, 0x24, 0x05,
63398 +0xFB, 0xE4, 0x33, 0xFA, 0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0xFF,
63399 +0xD3, 0x9B, 0xEA, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x38, 0x90, 0x8A, 0xCF, 0xE0, 0xFE,
63400 +0xEF, 0x24, 0x05, 0xFB, 0xE4, 0x33, 0xFA, 0x74, 0x23, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5,
63401 +0x83, 0xE0, 0xD3, 0x9B, 0xEA, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x16, 0x90, 0x8A, 0xCF,
63402 +0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x8A, 0xD1, 0xE0,
63403 +0x6F, 0x60, 0x56, 0x90, 0x8A, 0xCF, 0xE0, 0x24, 0x23, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83,
63404 +0xE0, 0xFF, 0xD3, 0x94, 0x42, 0x40, 0x08, 0x90, 0x8A, 0xDD, 0x74, 0x05, 0xF0, 0x80, 0x11, 0xEF,
63405 +0xD3, 0x94, 0x39, 0x90, 0x8A, 0xDD, 0x40, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03, 0x74, 0x01, 0xF0,
63406 +0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0x24, 0x23, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE,
63407 +0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x8A, 0xCF, 0xE0,
63408 +0x24, 0x44, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0x80, 0x2F, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0x24, 0x64,
63409 +0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x44, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
63410 +0x89, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x80, 0x14, 0xE4, 0x90, 0x8A, 0xDD, 0xF0, 0x90, 0x8A, 0xCF,
63411 +0xE0, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x8A, 0xD1, 0xE0,
63412 +0xFE, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE,
63413 +0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0xFE, 0x74, 0x43, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83,
63414 +0xEE, 0xF0, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x87, 0x2B, 0x12, 0x43, 0x5F, 0xE0, 0xB4, 0x01, 0x11,
63415 +0xE4, 0x90, 0x8A, 0xDD, 0xF0, 0x74, 0x64, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4,
63416 +0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0xFD, 0xC1, 0x27, 0xEC, 0x64, 0x06, 0x60, 0x02, 0xC1, 0x29, 0x90,
63417 +0x8A, 0xD2, 0xF0, 0xA3, 0xF0, 0x90, 0x41, 0xDB, 0x93, 0xFF, 0x7E, 0x00, 0x90, 0x8A, 0xD4, 0xE0,
63418 +0xFC, 0xA3, 0xE0, 0xFD, 0x12, 0x29, 0xF2, 0x90, 0x8A, 0xDB, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90,
63419 +0x8A, 0xCF, 0xE0, 0x24, 0x43, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0x90, 0x8A, 0xDD,
63420 +0xF0, 0xE4, 0x90, 0x8A, 0xDA, 0xF0, 0x90, 0x8A, 0xDA, 0xE0, 0xFF, 0xD3, 0x94, 0x04, 0x50, 0x47,
63421 +0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x75, 0xF0, 0x02, 0xEF, 0xA4, 0xF5, 0x82, 0x85, 0xF0, 0x83,
63422 +0x12, 0x42, 0xC2, 0xFD, 0xAC, 0xF0, 0xEF, 0x90, 0x41, 0xD6, 0x93, 0xFF, 0x7E, 0x00, 0x12, 0x29,
63423 +0xF2, 0x90, 0x8A, 0xD2, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0x90, 0x8A, 0xDB, 0xE0, 0xFE, 0xA3,
63424 +0xE0, 0xFF, 0xD3, 0x90, 0x8A, 0xD3, 0xE0, 0x9F, 0x90, 0x8A, 0xD2, 0xE0, 0x9E, 0x50, 0x08, 0x90,
63425 +0x8A, 0xDA, 0xE0, 0x04, 0xF0, 0x80, 0xAF, 0x90, 0x8A, 0xDA, 0xE0, 0xC3, 0x13, 0xF0, 0x90, 0x8A,
63426 +0xDD, 0xE0, 0xFF, 0xB4, 0x01, 0x0D, 0x90, 0x8A, 0xDA, 0xE0, 0x70, 0x5D, 0x90, 0x8A, 0xDD, 0x04,
63427 +0xF0, 0x80, 0x5B, 0xEF, 0xB4, 0x03, 0x1D, 0x90, 0x8A, 0xDA, 0xE0, 0xFF, 0x70, 0x08, 0x90, 0x8A,
63428 +0xDD, 0x74, 0x03, 0xF0, 0x80, 0x48, 0xEF, 0xB4, 0x01, 0x08, 0x90, 0x8A, 0xDD, 0x74, 0x01, 0xF0,
63429 +0x80, 0x3C, 0x80, 0x35, 0x90, 0x8A, 0xDD, 0xE0, 0x64, 0x05, 0x70, 0x32, 0x90, 0x8A, 0xDA, 0xE0,
63430 +0xFF, 0x70, 0x08, 0x90, 0x8A, 0xDD, 0x74, 0x05, 0xF0, 0x80, 0x0F, 0xEF, 0x90, 0x8A, 0xDD, 0xB4,
63431 +0x01, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03, 0x74, 0x01, 0xF0, 0xD3, 0x90, 0x8A, 0xD7, 0xE0, 0x94,
63432 +0x03, 0x90, 0x8A, 0xD6, 0xE0, 0x94, 0x00, 0x40, 0x05, 0xE4, 0x90, 0x8A, 0xDD, 0xF0, 0xD3, 0x90,
63433 +0x8A, 0xD7, 0xE0, 0x94, 0x03, 0x90, 0x8A, 0xD6, 0xE0, 0x94, 0x00, 0x40, 0x05, 0xE4, 0x90, 0x8A,
63434 +0xDD, 0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0xFD, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0x24, 0x43, 0xF5, 0x82,
63435 +0xE4, 0x34, 0x88, 0xF5, 0x83, 0xED, 0xF0, 0x11, 0x02, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0x24, 0x64,
63436 +0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0x05, 0x50, 0x0F, 0x74, 0x64, 0x2F,
63437 +0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x80, 0x0F, 0x90, 0x8A, 0xCF, 0xE0,
63438 +0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4, 0xF0, 0xAB, 0x12, 0xAA, 0x13, 0xA9,
63439 +0x14, 0xE4, 0xF5, 0xF0, 0x12, 0x42, 0xFA, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x90, 0x00, 0x02,
63440 +0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x19, 0x90, 0x00, 0x04, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x19, 0x90,
63441 +0x00, 0x06, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x19, 0x90, 0x00, 0x08, 0xE4, 0xF5, 0xF0, 0x12, 0x43,
63442 +0x19, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0xC0, 0xF5, 0x82, 0xE4, 0x34, 0x85, 0xF5,
63443 +0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x63, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5,
63444 +0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xA3, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5,
63445 +0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0x04, 0xF0, 0x01, 0x47, 0x22, 0xAD, 0x07,
63446 +0x74, 0x84, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x8A, 0xDE,
63447 +0xF0, 0xE0, 0xF9, 0x54, 0x1F, 0xA3, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x27, 0x12, 0x43,
63448 +0x5F, 0xE0, 0xFF, 0x90, 0x8A, 0xE1, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34,
63449 +0x86, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x8A, 0xE2, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0xED,
63450 +0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90,
63451 +0x8A, 0xE4, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0x90, 0x8A, 0xDF, 0xE0, 0xFE, 0x25, 0xE0, 0x24, 0x2E,
63452 +0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xED, 0x25,
63453 +0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xEA, 0xF0, 0xA3, 0xEB, 0xF0, 0xEE,
63454 +0xC3, 0x9F, 0x40, 0x03, 0x02, 0x70, 0x12, 0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0x74, 0xA5, 0x2D, 0xF5,
63455 +0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEF, 0xF0, 0xEF, 0x04, 0x90, 0x8A, 0xE0, 0xF0, 0x90, 0x8A,
63456 +0xE1, 0xE0, 0xFF, 0x90, 0x8A, 0xE0, 0xE0, 0xFE, 0xD3, 0x9F, 0x40, 0x03, 0x02, 0x70, 0x4C, 0xEE,
63457 +0xC3, 0x94, 0x10, 0x40, 0x21, 0xEE, 0x24, 0xF0, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08,
63458 +0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x8A, 0xE2, 0xE0, 0x5E, 0xFE,
63459 +0xA3, 0xE0, 0x5F, 0x4E, 0x70, 0x27, 0x90, 0x8A, 0xE0, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x59,
63460 +0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9,
63461 +0xFF, 0x90, 0x8A, 0xE4, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x3C, 0x90, 0x8A, 0xE0,
63462 +0xE0, 0xB4, 0x11, 0x0D, 0x90, 0x8A, 0xE3, 0xE0, 0x30, 0xE7, 0x06, 0x90, 0x8A, 0xE0, 0x74, 0x17,
63463 +0xF0, 0x90, 0x8A, 0xE0, 0xE0, 0xFF, 0x64, 0x13, 0x60, 0x04, 0xEF, 0xB4, 0x12, 0x0D, 0x90, 0x8A,
63464 +0xE2, 0xE0, 0x30, 0xE0, 0x06, 0x90, 0x8A, 0xE0, 0x74, 0x18, 0xF0, 0x90, 0x8A, 0xE0, 0xE0, 0x90,
63465 +0x8A, 0xDF, 0xF0, 0x90, 0x8A, 0xDE, 0xF0, 0x80, 0x43, 0x90, 0x8A, 0xE0, 0xE0, 0x04, 0xF0, 0x02,
63466 +0x6F, 0x6E, 0x90, 0x8A, 0xE1, 0xE0, 0xFC, 0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0x6C, 0x70, 0x71, 0x74,
63467 +0xA5, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEF, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90,
63468 +0x87, 0x29, 0x12, 0x43, 0x5F, 0xE0, 0xB4, 0x01, 0x10, 0xE9, 0x20, 0xE6, 0x0C, 0x90, 0x8A, 0xDF,
63469 +0xE0, 0x44, 0x40, 0x90, 0x8A, 0xDE, 0xF0, 0x80, 0x03, 0xAF, 0x01, 0x22, 0x90, 0x8A, 0xDF, 0xE0,
63470 +0xFF, 0x25, 0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74,
63471 +0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74,
63472 +0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0,
63473 +0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x66,
63474 +0x90, 0x8A, 0xDF, 0xE0, 0xD3, 0x9C, 0x40, 0x5E, 0x90, 0x8A, 0xE1, 0xE0, 0xFF, 0x74, 0xA5, 0x2D,
63475 +0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x8A, 0xDF, 0xEF, 0xF0, 0x90, 0x8A,
63476 +0xDE, 0xF0, 0xFC, 0xA3, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5,
63477 +0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x2E, 0xF5, 0x82, 0xE4,
63478 +0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF,
63479 +0x13, 0xFF, 0xED, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xEE, 0xF0,
63480 +0xA3, 0xEF, 0xF0, 0xAF, 0x04, 0x22, 0x74, 0x01, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83,
63481 +0xE4, 0xF0, 0xAF, 0x05, 0x90, 0x8A, 0xDE, 0xE0, 0x44, 0x80, 0xFD, 0x12, 0x5C, 0xC1, 0x90, 0x8A,
63482 +0xDE, 0xE0, 0x44, 0x80, 0xFF, 0x22, 0xE4, 0x90, 0x8A, 0xCF, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0xFF,
63483 +0xC3, 0x94, 0x10, 0x50, 0x14, 0x74, 0xA4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE4,
63484 +0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0x04, 0xF0, 0x80, 0xE2, 0xE4, 0x90, 0x8A, 0xCF, 0xF0, 0x90, 0x8A,
63485 +0xCF, 0xE0, 0xFF, 0xC3, 0x94, 0x20, 0x40, 0x02, 0x41, 0xCF, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84,
63486 +0x00, 0x12, 0x43, 0x5F, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x02, 0x12,
63487 +0x43, 0x5F, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x04, 0x12, 0x43, 0x5F,
63488 +0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x06, 0x12, 0x43, 0x5F, 0xE4, 0xF0,
63489 +0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x08, 0x12, 0x43, 0x5F, 0xE4, 0xF0, 0xA3, 0xF0,
63490 +0x74, 0x84, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x74, 0x44, 0x2F,
63491 +0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x43, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
63492 +0x88, 0xF5, 0x83, 0xE4, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xC0, 0xF5, 0x82, 0xE4, 0x34, 0x85, 0xF5,
63493 +0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x63, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5,
63494 +0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xE3, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5,
63495 +0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xA3, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5,
63496 +0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5,
63497 +0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xA4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5,
63498 +0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x74, 0x44, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4,
63499 +0xF0, 0x74, 0x24, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x64, 0x2F,
63500 +0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x41, 0x8C, 0x93, 0xFE, 0x74, 0x01,
63501 +0x93, 0xFF, 0x90, 0x41, 0x54, 0x74, 0x01, 0x93, 0x2F, 0xFF, 0xE4, 0x93, 0x3E, 0xC3, 0x13, 0xFE,
63502 +0xEF, 0x13, 0xFF, 0x90, 0x8A, 0xCF, 0xE0, 0xFD, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34,
63503 +0x86, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x29, 0x12,
63504 +0x43, 0x5F, 0x74, 0x01, 0xF0, 0x74, 0xC1, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0x74,
63505 +0x0C, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x25, 0x12, 0x43, 0x5F, 0x74, 0xFF, 0xF0, 0xA3,
63506 +0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x23, 0x12, 0x43, 0x5F, 0xE4, 0xF0, 0xA3, 0x74, 0x0F,
63507 +0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x27, 0x12, 0x43, 0x5F, 0x74, 0x13, 0xF0, 0x75, 0xF0,
63508 +0x09, 0xED, 0x90, 0x87, 0x28, 0x12, 0x43, 0x5F, 0xE4, 0xF0, 0x74, 0x84, 0x2D, 0xF5, 0x82, 0xE4,
63509 +0x34, 0x04, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0x04, 0xF0, 0x21, 0x3E, 0x22,
63510 +0x12, 0x29, 0xD9, 0xFF, 0xC3, 0x94, 0x20, 0x50, 0x14, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFE,
63511 +0x74, 0x23, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0x22, 0xEF, 0xB4, 0x20,
63512 +0x0A, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0x90, 0x87, 0x21, 0xF0, 0x22, 0x12, 0x29, 0xD9, 0xF5,
63513 +0x21, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x8A, 0xDA, 0x12, 0x2A, 0x8B, 0x00,
63514 +0x00, 0x00, 0x00, 0x90, 0x00, 0x01, 0x12, 0x42, 0x20, 0x90, 0x8B, 0x1A, 0xF0, 0x90, 0x00, 0x03,
63515 +0x12, 0x42, 0x20, 0x90, 0x8B, 0x0A, 0xF0, 0x12, 0x47, 0xFA, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90,
63516 +0x00, 0x02, 0x12, 0x42, 0x20, 0xFF, 0x30, 0xE0, 0x25, 0x12, 0x29, 0xD9, 0x90, 0x8B, 0x10, 0xF0,
63517 +0x90, 0x00, 0x01, 0x12, 0x42, 0x20, 0x90, 0x8B, 0x11, 0xF0, 0xEF, 0xC3, 0x13, 0x54, 0x7F, 0x90,
63518 +0x8B, 0x0F, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x42, 0x20, 0x90, 0x8B, 0x16, 0xF0, 0x22, 0x90, 0x8B,
63519 +0x10, 0x74, 0x03, 0xF0, 0x90, 0x8B, 0x11, 0x74, 0x05, 0xF0, 0x90, 0x8B, 0x0F, 0x74, 0x14, 0xF0,
63520 +0x90, 0x8B, 0x16, 0x74, 0x05, 0xF0, 0x22, 0x12, 0x29, 0xD9, 0x30, 0xE0, 0x19, 0xC3, 0x13, 0x54,
63521 +0x7F, 0x90, 0x8B, 0x15, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x42, 0x20, 0xFF, 0x90, 0x8B, 0x13, 0xE4,
63522 +0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x0F, 0x90, 0x8B, 0x15, 0x74, 0x05, 0xF0, 0x90, 0x8B, 0x13, 0xE4,
63523 +0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90, 0x8B, 0x13, 0xE0, 0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22,
63524 +0x12, 0x29, 0xD9, 0x90, 0x8B, 0x12, 0xF0, 0x60, 0x07, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x45, 0xA2,
63525 +0x90, 0x8B, 0x12, 0xE0, 0x90, 0x01, 0xE7, 0xF0, 0x22, 0x90, 0x02, 0x09, 0xE0, 0xFD, 0x12, 0x29,
63526 +0xD9, 0xFE, 0xAF, 0x05, 0xED, 0x2E, 0x90, 0x8A, 0xF7, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x42, 0x20,
63527 +0xFF, 0xED, 0x2F, 0x90, 0x8A, 0xF8, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFF, 0xED, 0x2F,
63528 +0x90, 0x8A, 0xF9, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x42, 0x20, 0xFF, 0xED, 0x2F, 0x90, 0x8A, 0xFA,
63529 +0xF0, 0x90, 0x00, 0x04, 0x12, 0x42, 0x20, 0xFF, 0xAE, 0x05, 0xED, 0x2F, 0x90, 0x8A, 0xFB, 0xF0,
63530 +0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x8B, 0xE4, 0x90,
63531 +0x8A, 0xDD, 0xF0, 0x12, 0x29, 0xD9, 0xC3, 0x13, 0x20, 0xE0, 0x02, 0xA1, 0x62, 0x90, 0x8A, 0xDA,
63532 +0x12, 0x43, 0x6B, 0x12, 0x29, 0xD9, 0xFF, 0x54, 0x02, 0xFE, 0x90, 0x8B, 0x32, 0xE0, 0x54, 0xFD,
63533 +0x4E, 0xFE, 0xF0, 0xEF, 0x54, 0x01, 0xFF, 0xEE, 0x54, 0xFE, 0x4F, 0xFF, 0xF0, 0x12, 0x29, 0xD9,
63534 +0xFE, 0x54, 0x08, 0xFD, 0xEF, 0x54, 0xF7, 0x4D, 0xFF, 0x90, 0x8B, 0x32, 0xF0, 0xEE, 0x54, 0x10,
63535 +0xFE, 0xEF, 0x54, 0xEF, 0x4E, 0xFF, 0xF0, 0x12, 0x29, 0xD9, 0xFE, 0x54, 0x20, 0xFD, 0xEF, 0x54,
63536 +0xDF, 0x4D, 0xFF, 0x90, 0x8B, 0x32, 0xF0, 0xEE, 0x54, 0x40, 0xFE, 0xEF, 0x54, 0xBF, 0x4E, 0xF0,
63537 +0x20, 0xE0, 0x02, 0xA1, 0x4F, 0x90, 0x8A, 0xDD, 0x74, 0x21, 0xF0, 0x90, 0x8A, 0xDA, 0x12, 0x43,
63538 +0x6B, 0x12, 0x29, 0xD9, 0xFF, 0x13, 0x13, 0x54, 0x01, 0xFE, 0x90, 0x8B, 0x32, 0xE0, 0xFD, 0x13,
63539 +0x13, 0x54, 0x01, 0x6E, 0x60, 0x2A, 0xEF, 0x54, 0x04, 0xFF, 0xED, 0x54, 0xFB, 0x4F, 0xF0, 0xE0,
63540 +0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x0E, 0x90, 0x01, 0x34, 0x74, 0x40, 0xF0, 0xFD, 0xE4, 0xFF,
63541 +0x12, 0x36, 0xE6, 0x80, 0x0B, 0xE4, 0x90, 0x8B, 0x34, 0xF0, 0x7D, 0x40, 0xFF, 0x12, 0x36, 0x75,
63542 +0x90, 0x8B, 0x32, 0xE0, 0xFD, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x07, 0x90, 0x8A, 0xDD,
63543 +0xE0, 0x44, 0x12, 0xF0, 0xED, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x07, 0x90, 0x8A, 0xDD, 0xE0, 0x44,
63544 +0x14, 0xF0, 0x90, 0x8B, 0x32, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x07, 0x90, 0x8A, 0xDD,
63545 +0xE0, 0x44, 0x80, 0xF0, 0x90, 0x8B, 0x32, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x07,
63546 +0x90, 0x8A, 0xDD, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0x90, 0x05, 0x27, 0xF0, 0x90,
63547 +0x8B, 0x33, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x4E, 0x89, 0x90, 0x8B, 0x32, 0xE0, 0xC4, 0x13,
63548 +0x13, 0x54, 0x03, 0x30, 0xE0, 0x04, 0x7F, 0x03, 0x80, 0x0E, 0x7F, 0x01, 0x12, 0x4D, 0xE0, 0xEF,
63549 +0x60, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x02, 0x12, 0x4E, 0x89, 0x7F, 0x02, 0xC1, 0xA4, 0x90,
63550 +0x8A, 0xDD, 0x74, 0x01, 0xF0, 0x90, 0x05, 0x27, 0xF0, 0xE4, 0xFF, 0x12, 0x4E, 0x89, 0x7F, 0x03,
63551 +0xC1, 0xA4, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x6B, 0x12, 0x29, 0xD9, 0xFF, 0x54, 0x02, 0xFE, 0x90,
63552 +0x8B, 0x2C, 0xE0, 0x54, 0xFD, 0x4E, 0xFE, 0xF0, 0xEF, 0x54, 0x01, 0xFF, 0xEE, 0x54, 0xFE, 0x4F,
63553 +0xFF, 0xF0, 0x12, 0x29, 0xD9, 0xFE, 0x54, 0x08, 0xFD, 0xEF, 0x54, 0xF7, 0x4D, 0xFF, 0x90, 0x8B,
63554 +0x2C, 0xF0, 0xEE, 0x54, 0x10, 0xFE, 0xEF, 0x54, 0xEF, 0x4E, 0xFF, 0xF0, 0x12, 0x29, 0xD9, 0xFE,
63555 +0x54, 0x40, 0xFD, 0xEF, 0x54, 0xBF, 0x4D, 0xFF, 0x90, 0x8B, 0x2C, 0xF0, 0xEE, 0x54, 0x04, 0xFE,
63556 +0xEF, 0x54, 0xFB, 0x4E, 0xF0, 0x20, 0xE0, 0x02, 0xC1, 0x57, 0x90, 0x8A, 0xDD, 0x74, 0x31, 0xF0,
63557 +0x90, 0x8B, 0x2C, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x20, 0xE0, 0x0B, 0xE4, 0x90, 0x8B, 0x2E, 0xF0,
63558 +0x7D, 0x40, 0xFF, 0x12, 0x36, 0x75, 0x90, 0x8B, 0x2C, 0xE0, 0xFD, 0x13, 0x13, 0x13, 0x54, 0x1F,
63559 +0x30, 0xE0, 0x07, 0x90, 0x8A, 0xDD, 0xE0, 0x44, 0x02, 0xF0, 0xED, 0xC4, 0x54, 0x0F, 0x30, 0xE0,
63560 +0x07, 0x90, 0x8A, 0xDD, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0x54, 0x06, 0x60, 0x0C,
63561 +0x90, 0x01, 0x3E, 0x74, 0x03, 0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x37, 0x00, 0x90, 0x8A, 0xDD, 0xE0,
63562 +0x90, 0x05, 0x27, 0xF0, 0x90, 0x8B, 0x2C, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0,
63563 +0x0D, 0xA3, 0xE0, 0x64, 0x06, 0x60, 0x2C, 0x7F, 0x06, 0x12, 0x7B, 0x49, 0x80, 0x25, 0x90, 0x8B,
63564 +0x2D, 0xE0, 0xB4, 0x06, 0x1B, 0x7F, 0x01, 0x12, 0x7B, 0x49, 0xE4, 0xFF, 0x12, 0x4D, 0xE0, 0xEF,
63565 +0x60, 0x09, 0x7D, 0x01, 0xAF, 0x23, 0x12, 0x45, 0xA2, 0x80, 0x05, 0x12, 0x4E, 0x56, 0x80, 0x03,
63566 +0x12, 0x66, 0x20, 0x7F, 0x01, 0x80, 0x4D, 0x90, 0x8A, 0xDD, 0x74, 0x01, 0xF0, 0x90, 0x05, 0x27,
63567 +0xF0, 0x7D, 0x03, 0x7F, 0x02, 0x12, 0x36, 0x92, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x06, 0x02, 0x80,
63568 +0x1B, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x04, 0x02, 0x80, 0x07, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05,
63569 +0x04, 0xE4, 0xFF, 0x80, 0x14, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x03, 0x04, 0x7F, 0x01, 0x80, 0x09,
63570 +0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x02, 0x05, 0x7F, 0x01, 0x12, 0x7B, 0x49, 0x12, 0x66, 0x13, 0x12,
63571 +0x4A, 0xFC, 0x7F, 0x03, 0xD1, 0xAB, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xAD, 0x07, 0xEF, 0x64, 0x01,
63572 +0x60, 0x04, 0xEF, 0xB4, 0x03, 0x15, 0x90, 0x8B, 0x32, 0xE0, 0x54, 0xFE, 0xF0, 0x54, 0xFB, 0xF0,
63573 +0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xED, 0x64, 0x02, 0x60, 0x04,
63574 +0xED, 0xB4, 0x03, 0x15, 0x90, 0x8B, 0x2C, 0xE0, 0x54, 0xFE, 0xF0, 0x54, 0xFB, 0xF0, 0xE4, 0xA3,
63575 +0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x22, 0x12, 0x29, 0xD9, 0x90, 0x8B, 0x38,
63576 +0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x8A, 0xFD, 0xE0, 0x90, 0x8A, 0xE8,
63577 +0xF0, 0x90, 0x8A, 0xFE, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x8A, 0xE9, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0,
63578 +0xE4, 0x90, 0x8A, 0xE4, 0xF0, 0x90, 0x8A, 0xE4, 0xE0, 0xFF, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34,
63579 +0x8B, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0xEB, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE,
63580 +0xF0, 0x90, 0x8A, 0xE4, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x04, 0xDA, 0x90, 0x8A, 0xE8, 0xE0, 0x12,
63581 +0x43, 0x94, 0x77, 0x61, 0x00, 0x78, 0xD7, 0x01, 0x77, 0x6C, 0x02, 0x77, 0x6C, 0x03, 0x77, 0x6C,
63582 +0x04, 0x78, 0xD7, 0x05, 0x78, 0xA1, 0x80, 0x78, 0xBA, 0x81, 0x78, 0xD7, 0x82, 0x00, 0x00, 0x78,
63583 +0xD3, 0x90, 0x8A, 0xEE, 0xE0, 0xFF, 0x12, 0x7E, 0x6E, 0x02, 0x78, 0xD7, 0x90, 0x8A, 0xE8, 0xE0,
63584 +0xFF, 0xB4, 0x02, 0x08, 0x90, 0x8A, 0xE5, 0x74, 0x01, 0xF0, 0x80, 0x0F, 0xEF, 0x90, 0x8A, 0xE5,
63585 +0xB4, 0x03, 0x05, 0x74, 0x02, 0xF0, 0x80, 0x03, 0x74, 0x04, 0xF0, 0xC3, 0x90, 0x8A, 0xE9, 0xE0,
63586 +0x94, 0x08, 0x50, 0x79, 0xE4, 0x90, 0x8A, 0xE4, 0xF0, 0x90, 0x8A, 0xE5, 0xE0, 0xFF, 0x90, 0x8A,
63587 +0xE4, 0xE0, 0xC3, 0x9F, 0x40, 0x03, 0x02, 0x78, 0xD7, 0x90, 0x8A, 0xE9, 0xE0, 0xFE, 0xA3, 0xE0,
63588 +0xFF, 0xC3, 0xEE, 0x94, 0x01, 0x90, 0x8A, 0xE4, 0xE0, 0x50, 0x1F, 0xFE, 0x2F, 0xFF, 0xEE, 0xFD,
63589 +0xC3, 0x74, 0x03, 0x9D, 0xFD, 0xE4, 0x94, 0x00, 0xFC, 0x74, 0xEB, 0x2D, 0xF5, 0x82, 0x74, 0x8A,
63590 +0x3C, 0xF5, 0x83, 0xE0, 0xFD, 0x12, 0x51, 0xFB, 0x80, 0x2B, 0xFF, 0xFD, 0xC3, 0x74, 0x03, 0x9D,
63591 +0xFD, 0xE4, 0x94, 0x00, 0xFC, 0x74, 0xEB, 0x2D, 0xF5, 0x82, 0x74, 0x8A, 0x3C, 0xF5, 0x83, 0xE0,
63592 +0xFE, 0xEF, 0xFD, 0x90, 0x8A, 0xEA, 0xE0, 0x2D, 0xFD, 0x90, 0x8A, 0xE9, 0xE0, 0x34, 0x00, 0x8D,
63593 +0x82, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x8A, 0xE4, 0xE0, 0x04, 0xF0, 0x80, 0x8C, 0xC3, 0x90, 0x8A,
63594 +0xE9, 0xE0, 0x94, 0x10, 0x40, 0x02, 0x01, 0xD7, 0x90, 0x8A, 0xE8, 0xE0, 0x64, 0x04, 0x60, 0x02,
63595 +0x01, 0xD7, 0x90, 0x8A, 0xEC, 0xE0, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x10, 0x12, 0x2A, 0x6C,
63596 +0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x8A, 0xEB, 0xE0, 0xFF, 0xE4, 0xFC, 0xFD,
63597 +0xFE, 0x78, 0x18, 0x12, 0x2A, 0x6C, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x43,
63598 +0x46, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x8A, 0xED, 0xE0, 0xFF, 0xE4, 0xFC,
63599 +0xFD, 0xFE, 0x78, 0x08, 0x12, 0x2A, 0x6C, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12,
63600 +0x43, 0x46, 0xA8, 0x04, 0xA9, 0x05, 0xAA, 0x06, 0xAB, 0x07, 0xA3, 0xE0, 0xFF, 0xE4, 0xFC, 0xFD,
63601 +0xFE, 0x12, 0x43, 0x46, 0xA3, 0x12, 0x2A, 0x7F, 0x90, 0x8A, 0xEF, 0x12, 0x43, 0x53, 0x90, 0x80,
63602 +0x85, 0x12, 0x2A, 0x7F, 0x90, 0x8A, 0xE9, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x12, 0x2F, 0xD9, 0x80,
63603 +0x36, 0x90, 0x8A, 0xED, 0xE0, 0xFE, 0xA3, 0xE0, 0x24, 0x00, 0xFF, 0xE4, 0x3E, 0xFE, 0x90, 0x8A,
63604 +0xE6, 0xF0, 0xA3, 0xEF, 0xF0, 0x12, 0x37, 0x54, 0x80, 0x1D, 0x90, 0x8A, 0xED, 0xE0, 0xFE, 0xA3,
63605 +0xE0, 0x24, 0x00, 0xFF, 0xE4, 0x3E, 0xFE, 0x90, 0x8A, 0xE6, 0xF0, 0xA3, 0xEF, 0xF0, 0x12, 0x36,
63606 +0xCB, 0x80, 0x04, 0x7F, 0x00, 0x80, 0x02, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10,
63607 +0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0x90, 0x8A, 0xDD, 0xF0, 0xA3, 0x74, 0x04, 0xF0, 0xA3, 0xE4,
63608 +0xF0, 0x90, 0x8A, 0xE2, 0xF0, 0xA3, 0xF0, 0x90, 0x02, 0x09, 0xE0, 0x90, 0x8A, 0xE1, 0xF0, 0x12,
63609 +0x29, 0xD9, 0xFF, 0x90, 0x8A, 0xE1, 0xE0, 0x2F, 0x90, 0x8A, 0xE0, 0xF0, 0x30, 0xE0, 0x0B, 0x90,
63610 +0x8A, 0xDB, 0xE4, 0xF0, 0xA3, 0x74, 0x80, 0xF0, 0x80, 0x07, 0xE4, 0x90, 0x8A, 0xDB, 0xF0, 0xA3,
63611 +0xF0, 0x90, 0x8A, 0xE0, 0xE0, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0x24,
63612 +0x20, 0xF0, 0x90, 0x8A, 0xDB, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFC, 0x2D, 0xFF, 0x24, 0x01, 0xF5,
63613 +0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0x8A, 0xFD, 0xF0, 0x74, 0x02, 0x2F, 0xF5, 0x82,
63614 +0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFE, 0xEC, 0x2D, 0x24, 0x03, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
63615 +0xF5, 0x83, 0xE0, 0x24, 0x00, 0xFF, 0xE4, 0x3E, 0x90, 0x8A, 0xFE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90,
63616 +0x8A, 0xDA, 0x74, 0x04, 0xF0, 0x90, 0x8A, 0xDB, 0xA3, 0xE0, 0xFF, 0xA3, 0xE0, 0x2F, 0xFF, 0x90,
63617 +0x8A, 0xDA, 0xE0, 0xFE, 0x2F, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFF,
63618 +0x74, 0xFC, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x8A, 0xDA, 0xE0,
63619 +0x04, 0xF0, 0xE0, 0xB4, 0x08, 0xCF, 0x12, 0x76, 0xF2, 0xEF, 0x70, 0x45, 0x90, 0x01, 0xC3, 0xE0,
63620 +0x60, 0x2B, 0xC3, 0x90, 0x8A, 0xE3, 0xE0, 0x94, 0xE8, 0x90, 0x8A, 0xE2, 0xE0, 0x94, 0x03, 0x40,
63621 +0x09, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x10, 0xF0, 0x80, 0x79, 0x90, 0x8A, 0xE2, 0xE4, 0x75, 0xF0,
63622 +0x01, 0x12, 0x42, 0x81, 0x7F, 0x0A, 0x7E, 0x00, 0x12, 0x37, 0x54, 0x80, 0xCF, 0x90, 0x01, 0xC6,
63623 +0xE0, 0x90, 0x01, 0xC3, 0x30, 0xE2, 0x05, 0x74, 0xFE, 0xF0, 0x80, 0x57, 0x74, 0xFF, 0xF0, 0x80,
63624 +0x52, 0x90, 0x8A, 0xDD, 0xE0, 0xB4, 0x78, 0x2E, 0xE4, 0xF0, 0x90, 0x8A, 0xE0, 0xE0, 0x04, 0xF0,
63625 +0x90, 0x8A, 0xDB, 0xE0, 0x70, 0x04, 0xA3, 0xE0, 0x64, 0x80, 0x90, 0x8A, 0xDB, 0x70, 0x05, 0xF0,
63626 +0xA3, 0xF0, 0x80, 0x06, 0xE4, 0xF0, 0xA3, 0x74, 0x80, 0xF0, 0x90, 0x8A, 0xE0, 0xE0, 0xC3, 0x13,
63627 +0x90, 0xFD, 0x10, 0xF0, 0x80, 0x07, 0x90, 0x8A, 0xDD, 0xE0, 0x24, 0x08, 0xF0, 0x90, 0x8A, 0xDE,
63628 +0x74, 0xFF, 0xF5, 0xF0, 0x12, 0x42, 0x81, 0x90, 0x8A, 0xDE, 0xE0, 0x70, 0x02, 0xA3, 0xE0, 0x60,
63629 +0x02, 0x21, 0x32, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x29, 0xD9, 0x90, 0x8B, 0x05, 0xF0, 0x90,
63630 +0x00, 0x01, 0x12, 0x42, 0x20, 0x90, 0x8B, 0x06, 0xF0, 0x22, 0xE4, 0xF5, 0x61, 0x22, 0x51, 0x67,
63631 +0x90, 0x8B, 0x33, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x7F, 0x78, 0x7E,
63632 +0x08, 0x12, 0x27, 0xDE, 0x90, 0x8B, 0x1C, 0x12, 0x2A, 0x7F, 0x7F, 0x04, 0x7E, 0x0C, 0x12, 0x27,
63633 +0xDE, 0x90, 0x8B, 0x20, 0x12, 0x2A, 0x7F, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x27, 0xDE, 0x90, 0x8B,
63634 +0x24, 0x12, 0x2A, 0x7F, 0x90, 0x8B, 0x09, 0xE0, 0x90, 0x8B, 0x1C, 0xB4, 0x01, 0x0D, 0x12, 0x43,
63635 +0x53, 0xEF, 0x54, 0xC7, 0xFF, 0xED, 0x54, 0xC7, 0xFD, 0x80, 0x07, 0x12, 0x43, 0x53, 0xEF, 0x54,
63636 +0xC7, 0xFF, 0xEC, 0x90, 0x80, 0x85, 0x12, 0x2A, 0x7F, 0x7F, 0x78, 0x7E, 0x08, 0x12, 0x2F, 0xD9,
63637 +0x90, 0x8B, 0x20, 0x12, 0x43, 0x53, 0xEF, 0x54, 0x0F, 0xFF, 0xEC, 0x90, 0x80, 0x85, 0x12, 0x2A,
63638 +0x7F, 0x7F, 0x04, 0x7E, 0x0C, 0x12, 0x2F, 0xD9, 0x90, 0x8B, 0x24, 0x12, 0x43, 0x53, 0xEF, 0x44,
63639 +0x02, 0xFF, 0xEC, 0x90, 0x80, 0x85, 0x12, 0x2A, 0x7F, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x2F, 0xD9,
63640 +0x7F, 0x70, 0x7E, 0x0E, 0x12, 0x27, 0xDE, 0x90, 0x8B, 0x28, 0x12, 0x2A, 0x7F, 0x90, 0x80, 0x85,
63641 +0x12, 0x2A, 0x8B, 0x00, 0x1B, 0x25, 0xA0, 0x7F, 0x70, 0x7E, 0x0E, 0x12, 0x2F, 0xD9, 0x90, 0x80,
63642 +0x59, 0x12, 0x2A, 0x8B, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xFD, 0xFF, 0x12, 0x34, 0x81, 0x90, 0x8B,
63643 +0x09, 0xE0, 0xB4, 0x01, 0x11, 0x90, 0x80, 0x59, 0x12, 0x2A, 0x8B, 0x00, 0x00, 0x00, 0x00, 0xE4,
63644 +0xFD, 0x7F, 0x01, 0x12, 0x34, 0x81, 0x22, 0x51, 0x6D, 0x90, 0x8B, 0x33, 0x74, 0x02, 0xF0, 0x22,
63645 +0x51, 0x67, 0x90, 0x8B, 0x2D, 0x74, 0x04, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
63646 +0x90, 0x8B, 0x2D, 0xE0, 0xFE, 0x6F, 0x70, 0x02, 0xA1, 0x15, 0xEF, 0x12, 0x43, 0x94, 0x7B, 0x77,
63647 +0x00, 0x7B, 0xB1, 0x01, 0x7B, 0xF7, 0x02, 0x7C, 0x31, 0x03, 0x7C, 0x69, 0x04, 0x7C, 0xA2, 0x05,
63648 +0x7C, 0xDD, 0x06, 0x00, 0x00, 0x7D, 0x15, 0xEE, 0xB4, 0x04, 0x06, 0x7F, 0x01, 0xB1, 0x48, 0xA1,
63649 +0x15, 0x90, 0x8B, 0x2D, 0xE0, 0xFF, 0xB4, 0x05, 0x04, 0xB1, 0x24, 0xA1, 0x15, 0xEF, 0xB4, 0x06,
63650 +0x06, 0x7F, 0x01, 0xB1, 0x39, 0x80, 0x16, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x03, 0x06, 0x7F, 0x01,
63651 +0xB1, 0x1A, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x02, 0x02, 0xB1, 0x2E, 0xB1, 0x6B, 0xA1,
63652 +0x15, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x04, 0x06, 0x7F, 0x01, 0xB1, 0x48, 0x80, 0x09, 0x90, 0x8B,
63653 +0x2D, 0xE0, 0xB4, 0x05, 0x02, 0xB1, 0x24, 0x90, 0x8B, 0x2D, 0xE0, 0x70, 0x04, 0xB1, 0x61, 0xA1,
63654 +0x15, 0x90, 0x8B, 0x2D, 0xE0, 0xFE, 0xB4, 0x06, 0x06, 0x7F, 0x01, 0xB1, 0x39, 0xA1, 0x15, 0xEE,
63655 +0xB4, 0x03, 0x06, 0x7F, 0x01, 0xB1, 0x1A, 0xA1, 0x15, 0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x02, 0x60,
63656 +0x02, 0xA1, 0x15, 0xB1, 0x2E, 0xA1, 0x15, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x04, 0x06, 0x7F, 0x01,
63657 +0xB1, 0x48, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05, 0x02, 0xB1, 0x24, 0x90, 0x8B, 0x2D,
63658 +0xE0, 0x70, 0x04, 0xB1, 0x61, 0x80, 0x16, 0x90, 0x8B, 0x2D, 0xE0, 0xFE, 0xB4, 0x06, 0x06, 0x7F,
63659 +0x01, 0xB1, 0x39, 0x80, 0x08, 0xEE, 0xB4, 0x03, 0x04, 0x7F, 0x01, 0xB1, 0x1A, 0xB1, 0x8D, 0xA1,
63660 +0x15, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x04, 0x06, 0x7F, 0x01, 0xB1, 0x48, 0x80, 0x09, 0x90, 0x8B,
63661 +0x2D, 0xE0, 0xB4, 0x05, 0x02, 0xB1, 0x24, 0x90, 0x8B, 0x2D, 0xE0, 0x70, 0x04, 0xB1, 0x61, 0x80,
63662 +0x14, 0x90, 0x8B, 0x2D, 0xE0, 0xFE, 0xB4, 0x06, 0x06, 0xE4, 0xFF, 0xB1, 0x39, 0x80, 0x06, 0xEE,
63663 +0xB4, 0x02, 0x02, 0xB1, 0x2E, 0xB1, 0x76, 0xA1, 0x15, 0x90, 0x8B, 0x2D, 0xE0, 0xFE, 0xB4, 0x06,
63664 +0x06, 0xE4, 0xFF, 0xB1, 0x39, 0x80, 0x13, 0xEE, 0xB4, 0x03, 0x06, 0x7F, 0x01, 0xB1, 0x1A, 0x80,
63665 +0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x02, 0x02, 0xB1, 0x2E, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x01,
63666 +0x04, 0xB1, 0x6B, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05, 0x02, 0xB1, 0x24, 0x71, 0x40,
63667 +0x80, 0x73, 0x90, 0x8B, 0x2D, 0xE0, 0xFE, 0xB4, 0x06, 0x06, 0xE4, 0xFF, 0xB1, 0x39, 0x80, 0x13,
63668 +0xEE, 0xB4, 0x03, 0x06, 0x7F, 0x01, 0xB1, 0x1A, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x02,
63669 +0x02, 0xB1, 0x2E, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x01, 0x04, 0xB1, 0x6B, 0x80, 0x0B, 0x90, 0x8B,
63670 +0x2D, 0xE0, 0xB4, 0x04, 0x04, 0x7F, 0x01, 0xB1, 0x48, 0xB1, 0x80, 0x80, 0x38, 0x90, 0x8B, 0x2D,
63671 +0xE0, 0xB4, 0x04, 0x06, 0x7F, 0x01, 0xB1, 0x48, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05,
63672 +0x02, 0xB1, 0x24, 0x90, 0x8B, 0x2D, 0xE0, 0x70, 0x04, 0xB1, 0x61, 0x80, 0x16, 0x90, 0x8B, 0x2D,
63673 +0xE0, 0xB4, 0x03, 0x06, 0xE4, 0xFF, 0xB1, 0x1A, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x02,
63674 +0x02, 0xB1, 0x2E, 0xB1, 0x9A, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x4A, 0xB2, 0x90, 0x8B, 0x2D,
63675 +0x74, 0x01, 0xF0, 0x22, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x8B, 0x2D, 0xF0, 0x22, 0x90, 0x05,
63676 +0x22, 0xE4, 0xF0, 0x90, 0x8B, 0x2D, 0x04, 0xF0, 0x22, 0xEF, 0x60, 0x05, 0x90, 0x05, 0x22, 0xE4,
63677 +0xF0, 0x90, 0x8B, 0x2D, 0x74, 0x01, 0xF0, 0x22, 0x90, 0x8B, 0x56, 0xEF, 0xF0, 0x12, 0x4F, 0xED,
63678 +0x90, 0x8B, 0x56, 0xE0, 0x60, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0xE4, 0x90, 0x8B, 0x2D, 0xF0,
63679 +0x22, 0x12, 0x4A, 0xCC, 0x90, 0x8B, 0x2D, 0x74, 0x01, 0xF0, 0x22, 0x7F, 0x01, 0x12, 0x4A, 0x7C,
63680 +0xE4, 0x90, 0x8B, 0x2D, 0xF0, 0x22, 0x12, 0x4A, 0x32, 0x90, 0x8B, 0x2D, 0x74, 0x03, 0xF0, 0x22,
63681 +0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x8B, 0x2D, 0x74, 0x05, 0xF0, 0x22, 0x90, 0x05, 0x22,
63682 +0x74, 0xFF, 0xF0, 0x90, 0x8B, 0x2D, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0,
63683 +0x90, 0x8B, 0x2D, 0x74, 0x06, 0xF0, 0x22, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x8B, 0x33,
63684 +0x74, 0x04, 0xF0, 0x22, 0x12, 0x4F, 0xED, 0x90, 0x8B, 0x33, 0x74, 0x04, 0xF0, 0x22, 0x90, 0x01,
63685 +0x57, 0xE0, 0x60, 0x3C, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90,
63686 +0x8B, 0x1B, 0xE0, 0x60, 0x07, 0xE4, 0xF0, 0x53, 0x25, 0xFD, 0x80, 0x24, 0x90, 0x8B, 0x0C, 0xE0,
63687 +0x04, 0xF0, 0x53, 0x25, 0xEF, 0x90, 0x8B, 0x10, 0xE0, 0xFF, 0x90, 0x8B, 0x0C, 0xE0, 0xD3, 0x9F,
63688 +0x40, 0x0E, 0xE5, 0x21, 0xB4, 0x01, 0x09, 0x90, 0x8B, 0x0D, 0xE0, 0x70, 0x03, 0xE0, 0x04, 0xF0,
63689 +0x90, 0x01, 0x5B, 0xE0, 0x60, 0x10, 0x90, 0x01, 0x5B, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x04,
63690 +0xF0, 0xE4, 0x90, 0x8B, 0x18, 0xF0, 0x90, 0x01, 0x5F, 0xE0, 0x60, 0x10, 0x90, 0x01, 0x5F, 0xE4,
63691 +0xF0, 0x90, 0x01, 0x3C, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0x8B, 0x17, 0xF0, 0x22, 0xE4, 0x90, 0x8B,
63692 +0x4F, 0xF0, 0xA3, 0xF0, 0x90, 0x05, 0xF8, 0xE0, 0x70, 0x0F, 0xA3, 0xE0, 0x70, 0x0B, 0xA3, 0xE0,
63693 +0x70, 0x07, 0xA3, 0xE0, 0x70, 0x03, 0x7F, 0x01, 0x22, 0xD3, 0x90, 0x8B, 0x50, 0xE0, 0x94, 0xE8,
63694 +0x90, 0x8B, 0x4F, 0xE0, 0x94, 0x03, 0x40, 0x03, 0x7F, 0x00, 0x22, 0x7F, 0x32, 0x7E, 0x00, 0x12,
63695 +0x37, 0x54, 0x90, 0x8B, 0x4F, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x81, 0x80, 0xC6, 0x8F, 0x0F,
63696 +0xE4, 0x90, 0x8A, 0xF3, 0xF0, 0xE5, 0x0F, 0x14, 0xFE, 0x90, 0x8A, 0xF3, 0xE0, 0xFF, 0xC3, 0x9E,
63697 +0x50, 0x0E, 0xEF, 0x04, 0xFD, 0x12, 0x34, 0xB7, 0x90, 0x8A, 0xF3, 0xE0, 0x04, 0xF0, 0x80, 0xE5,
63698 +0xE5, 0x0F, 0x14, 0xFF, 0x7D, 0xFF, 0x12, 0x34, 0xB7, 0x90, 0x8A, 0xF3, 0xE5, 0x0F, 0xF0, 0x90,
63699 +0x8A, 0xF3, 0xE0, 0xC3, 0x94, 0xFF, 0x50, 0x0F, 0xE0, 0xFF, 0x04, 0xFD, 0x12, 0x34, 0xB7, 0x90,
63700 +0x8A, 0xF3, 0xE0, 0x04, 0xF0, 0x80, 0xE8, 0xAD, 0x0F, 0x7F, 0xFF, 0x02, 0x34, 0xB7, 0xDC, 0xD3,
63701 };
63702 +#endif
63703 +
63704 +//8188C_Formal_All_PHYforMP_111117 2011-11-23
63705 +//8192C_Formal_92CU_PHYforMP_110817 2011-11-23
63706
63707 u32 Rtl8192CUPHY_REG_2TArray[PHY_REG_2TArrayLength] = {
63708 0x024,0x0011800f,
63709 @@ -7146,7 +6055,7 @@ u32 Rtl8192CUPHY_REG_2TArray[PHY_REG_2TA
63710 0x804,0x00000003,
63711 0x808,0x0000fc00,
63712 0x80c,0x0000000a,
63713 -0x810,0x10005388,
63714 +0x810,0x10000330, //for Broadcom AP IOT
63715 0x814,0x020c3d10,
63716 0x818,0x02200385,
63717 0x81c,0x00000000,
63718 @@ -7220,22 +6129,22 @@ u32 Rtl8192CUPHY_REG_2TArray[PHY_REG_2TA
63719 0xc44,0x000100b7,
63720 0xc48,0xec020107,
63721 0xc4c,0x007f037f,
63722 -0xc50,0x6954341e,
63723 +0xc50,0x69543420,
63724 0xc54,0x43bc0094,
63725 -0xc58,0x6954341e,
63726 +0xc58,0x69543420,
63727 0xc5c,0x433c0094,
63728 0xc60,0x00000000,
63729 0xc64,0x5116848b,
63730 0xc68,0x47c00bff,
63731 0xc6c,0x00000036,
63732 0xc70,0x2c7f000d,
63733 -0xc74,0x0186115b,
63734 +0xc74,0x2186115b,
63735 0xc78,0x0000001f,
63736 0xc7c,0x00b99612,
63737 0xc80,0x40000100,
63738 0xc84,0x20f60000,
63739 0xc88,0x40000100,
63740 -0xc8c,0x20200000,
63741 +0xc8c,0xa0e40000,
63742 0xc90,0x00121820,
63743 0xc94,0x00000000,
63744 0xc98,0x00121820,
63745 @@ -7336,7 +6245,7 @@ u32 Rtl8192CUPHY_REG_1TArray[PHY_REG_1TA
63746 0x804,0x00000001,
63747 0x808,0x0000fc00,
63748 0x80c,0x0000000a,
63749 -0x810,0x10005388,
63750 +0x810,0x10000330, //for Broadcom AP IOT
63751 0x814,0x020c3d10,
63752 0x818,0x02200385,
63753 0x81c,0x00000000,
63754 @@ -7410,9 +6319,9 @@ u32 Rtl8192CUPHY_REG_1TArray[PHY_REG_1TA
63755 0xc44,0x000100b7,
63756 0xc48,0xec020107,
63757 0xc4c,0x007f037f,
63758 -0xc50,0x6954341e,
63759 +0xc50,0x69543420,
63760 0xc54,0x43bc0094,
63761 -0xc58,0x6954341e,
63762 +0xc58,0x69543420,
63763 0xc5c,0x433c0094,
63764 0xc60,0x00000000,
63765 0xc64,0x5116848b,
63766 @@ -7450,7 +6359,7 @@ u32 Rtl8192CUPHY_REG_1TArray[PHY_REG_1TA
63767 0xce4,0x00000000,
63768 0xce8,0x37644302,
63769 0xcec,0x2f97d40c,
63770 -0xd00,0x00080740,
63771 +0xd00,0x00000740,
63772 0xd04,0x00020401,
63773 0xd08,0x0000907f,
63774 0xd0c,0x20010201,
63775 @@ -7771,7 +6680,7 @@ u32 Rtl8192CUPHY_REG_1T_HPArray[PHY_REG_
63776 0x804,0x00000001,
63777 0x808,0x0000fc00,
63778 0x80c,0x0000000a,
63779 -0x810,0x10005388,
63780 +0x810,0x10000330, //for Broadcom AP IOT
63781 0x814,0x020c3d10,
63782 0x818,0x02200385,
63783 0x81c,0x00000000,
63784 @@ -7885,7 +6794,7 @@ u32 Rtl8192CUPHY_REG_1T_HPArray[PHY_REG_
63785 0xce4,0x00000000,
63786 0xce8,0x37644302,
63787 0xcec,0x2f97d40c,
63788 -0xd00,0x00080740,
63789 +0xd00,0x00000740,
63790 0xd04,0x00020401,
63791 0xd08,0x0000907f,
63792 0xd0c,0x20010201,
63793 @@ -7962,7 +6871,7 @@ u32 Rtl8192CUPHY_REG_1T_mCardArray[PHY_R
63794 0x804,0x00000001,
63795 0x808,0x0000fc00,
63796 0x80c,0x0000000a,
63797 -0x810,0x10005388,
63798 +0x810,0x10000330, //for Broadcom AP IOT
63799 0x814,0x020c3d10,
63800 0x818,0x02200385,
63801 0x81c,0x00000000,
63802 @@ -8036,9 +6945,9 @@ u32 Rtl8192CUPHY_REG_1T_mCardArray[PHY_R
63803 0xc44,0x000100b7,
63804 0xc48,0xec020107,
63805 0xc4c,0x007f037f,
63806 -0xc50,0x6954341e,
63807 +0xc50,0x69543420,
63808 0xc54,0x43bc0094,
63809 -0xc58,0x6954341e,
63810 +0xc58,0x69543420,
63811 0xc5c,0x433c0094,
63812 0xc60,0x00000000,
63813 0xc64,0x5116848b,
63814 @@ -8076,7 +6985,7 @@ u32 Rtl8192CUPHY_REG_1T_mCardArray[PHY_R
63815 0xce4,0x00000000,
63816 0xce8,0x37644302,
63817 0xcec,0x2f97d40c,
63818 -0xd00,0x00080740,
63819 +0xd00,0x00000740,
63820 0xd04,0x00020401,
63821 0xd08,0x0000907f,
63822 0xd0c,0x20010201,
63823 @@ -8152,7 +7061,7 @@ u32 Rtl8192CUPHY_REG_2T_mCardArray[PHY_R
63824 0x804,0x00000003,
63825 0x808,0x0000fc00,
63826 0x80c,0x0000000a,
63827 -0x810,0x10005388,
63828 +0x810,0x10000330, //for Broadcom AP IOT
63829 0x814,0x020c3d10,
63830 0x818,0x02200385,
63831 0x81c,0x00000000,
63832 @@ -8226,22 +7135,22 @@ u32 Rtl8192CUPHY_REG_2T_mCardArray[PHY_R
63833 0xc44,0x000100b7,
63834 0xc48,0xec020107,
63835 0xc4c,0x007f037f,
63836 -0xc50,0x6954341e,
63837 +0xc50,0x69543420,
63838 0xc54,0x43bc0094,
63839 -0xc58,0x6954341e,
63840 +0xc58,0x69543420,
63841 0xc5c,0x433c0094,
63842 0xc60,0x00000000,
63843 0xc64,0x5116848b,
63844 0xc68,0x47c00bff,
63845 0xc6c,0x00000036,
63846 0xc70,0x2c7f000d,
63847 -0xc74,0x018610db,
63848 +0xc74,0x218610db,
63849 0xc78,0x0000001f,
63850 0xc7c,0x00b91612,
63851 0xc80,0x40000100,
63852 0xc84,0x20f60000,
63853 0xc88,0x40000100,
63854 -0xc8c,0x20200000,
63855 +0xc8c,0xa0e40000,
63856 0xc90,0x00121820,
63857 0xc94,0x00000000,
63858 0xc98,0x00121820,
63859 @@ -8784,6 +7693,192 @@ u32 Rtl8192CURadioB_1TArray[RadioB_1TArr
63860 0x0, };
63861
63862
63863 +u32 Rtl8192CURadioA_2T_mCardArray[RadioA_2T_mCardArrayLength] = {
63864 +0x000,0x00030159,
63865 +0x001,0x00031284,
63866 +0x002,0x00098000,
63867 +0x003,0x00018c63,
63868 +0x004,0x000210e7,
63869 +0x009,0x0002044f,
63870 +0x00a,0x0001adb1,
63871 +0x00b,0x00054867,
63872 +0x00c,0x0008992e,
63873 +0x00d,0x0000e52c,
63874 +0x00e,0x00039ce7,
63875 +0x00f,0x00000451,
63876 +0x019,0x00000000,
63877 +0x01a,0x00010255,
63878 +0x01b,0x00060a00,
63879 +0x01c,0x000fc378,
63880 +0x01d,0x000a1250,
63881 +0x01e,0x0004445f,
63882 +0x01f,0x00080001,
63883 +0x020,0x0000b614,
63884 +0x021,0x0006c000,
63885 +0x022,0x00000000,
63886 +0x023,0x00001558,
63887 +0x024,0x00000060,
63888 +0x025,0x00000483,
63889 +0x026,0x0004f000,
63890 +0x027,0x000ec7d9,
63891 +0x028,0x000577c0,
63892 +0x029,0x00004783,
63893 +0x02a,0x00000001,
63894 +0x02b,0x00021334,
63895 +0x02a,0x00000000,
63896 +0x02b,0x00000054,
63897 +0x02a,0x00000001,
63898 +0x02b,0x00000808,
63899 +0x02b,0x00053333,
63900 +0x02c,0x0000000c,
63901 +0x02a,0x00000002,
63902 +0x02b,0x00000808,
63903 +0x02b,0x0005b333,
63904 +0x02c,0x0000000d,
63905 +0x02a,0x00000003,
63906 +0x02b,0x00000808,
63907 +0x02b,0x00063333,
63908 +0x02c,0x0000000d,
63909 +0x02a,0x00000004,
63910 +0x02b,0x00000808,
63911 +0x02b,0x0006b333,
63912 +0x02c,0x0000000d,
63913 +0x02a,0x00000005,
63914 +0x02b,0x00000808,
63915 +0x02b,0x00073333,
63916 +0x02c,0x0000000d,
63917 +0x02a,0x00000006,
63918 +0x02b,0x00000709,
63919 +0x02b,0x0005b333,
63920 +0x02c,0x0000000d,
63921 +0x02a,0x00000007,
63922 +0x02b,0x00000709,
63923 +0x02b,0x00063333,
63924 +0x02c,0x0000000d,
63925 +0x02a,0x00000008,
63926 +0x02b,0x0000060a,
63927 +0x02b,0x0004b333,
63928 +0x02c,0x0000000d,
63929 +0x02a,0x00000009,
63930 +0x02b,0x0000060a,
63931 +0x02b,0x00053333,
63932 +0x02c,0x0000000d,
63933 +0x02a,0x0000000a,
63934 +0x02b,0x0000060a,
63935 +0x02b,0x0005b333,
63936 +0x02c,0x0000000d,
63937 +0x02a,0x0000000b,
63938 +0x02b,0x0000060a,
63939 +0x02b,0x00063333,
63940 +0x02c,0x0000000d,
63941 +0x02a,0x0000000c,
63942 +0x02b,0x0000060a,
63943 +0x02b,0x0006b333,
63944 +0x02c,0x0000000d,
63945 +0x02a,0x0000000d,
63946 +0x02b,0x0000060a,
63947 +0x02b,0x00073333,
63948 +0x02c,0x0000000d,
63949 +0x02a,0x0000000e,
63950 +0x02b,0x0000050b,
63951 +0x02b,0x00066666,
63952 +0x02c,0x0000001a,
63953 +0x02a,0x000e0000,
63954 +0x010,0x0004000f,
63955 +0x011,0x000e31fc,
63956 +0x010,0x0006000f,
63957 +0x011,0x000ff9f8,
63958 +0x010,0x0002000f,
63959 +0x011,0x000203f9,
63960 +0x010,0x0003000f,
63961 +0x011,0x000ff500,
63962 +0x010,0x00000000,
63963 +0x011,0x00000000,
63964 +0x010,0x0008000f,
63965 +0x011,0x0003f100,
63966 +0x010,0x0009000f,
63967 +0x011,0x00023100,
63968 +0x012,0x00032000,
63969 +0x012,0x00071000,
63970 +0x012,0x000b0000,
63971 +0x012,0x000fc000,
63972 +0x013,0x000287b3,
63973 +0x013,0x000244b7,
63974 +0x013,0x000204ab,
63975 +0x013,0x0001c49f,
63976 +0x013,0x00018493,
63977 +0x013,0x0001429b,
63978 +0x013,0x00010299,
63979 +0x013,0x0000c29c,
63980 +0x013,0x000081a0,
63981 +0x013,0x000040ac,
63982 +0x013,0x00000020,
63983 +0x014,0x0001944c,
63984 +0x014,0x00059444,
63985 +0x014,0x0009944c,
63986 +0x014,0x000d9444,
63987 +0x015,0x0000f424,
63988 +0x015,0x0004f424,
63989 +0x015,0x0008f424,
63990 +0x015,0x000cf424,
63991 +0x016,0x000e0330,
63992 +0x016,0x000a0330,
63993 +0x016,0x00060330,
63994 +0x016,0x00020330,
63995 +0x000,0x00010159,
63996 +0x018,0x0000f401,
63997 +0x0fe,0x00000000,
63998 +0x0fe,0x00000000,
63999 +0x01f,0x00080003,
64000 +0x0fe,0x00000000,
64001 +0x0fe,0x00000000,
64002 +0x01e,0x00044457,
64003 +0x01f,0x00080000,
64004 +0x000,0x00030159,
64005 +};
64006 +
64007 +u32 Rtl8192CURadioB_2T_mCardArray[RadioB_2T_mCardArrayLength] = {
64008 +0x000,0x00030159,
64009 +0x001,0x00031284,
64010 +0x002,0x00098000,
64011 +0x003,0x00018c63,
64012 +0x004,0x000210e7,
64013 +0x009,0x0002044f,
64014 +0x00a,0x0001adb1,
64015 +0x00b,0x00054867,
64016 +0x00c,0x0008992e,
64017 +0x00d,0x0000e52c,
64018 +0x00e,0x00039ce7,
64019 +0x00f,0x00000451,
64020 +0x012,0x00032000,
64021 +0x012,0x00071000,
64022 +0x012,0x000b0000,
64023 +0x012,0x000fc000,
64024 +0x013,0x000287af,
64025 +0x013,0x000244b7,
64026 +0x013,0x000204ab,
64027 +0x013,0x0001c49f,
64028 +0x013,0x00018493,
64029 +0x013,0x00014297,
64030 +0x013,0x00010295,
64031 +0x013,0x0000c298,
64032 +0x013,0x0000819c,
64033 +0x013,0x000040a8,
64034 +0x013,0x0000001c,
64035 +0x014,0x0001944c,
64036 +0x014,0x00059444,
64037 +0x014,0x0009944c,
64038 +0x014,0x000d9444,
64039 +0x015,0x0000f424,
64040 +0x015,0x0004f424,
64041 +0x015,0x0008f424,
64042 +0x015,0x000cf424,
64043 +0x016,0x000e0330,
64044 +0x016,0x000a0330,
64045 +0x016,0x00060330,
64046 +0x016,0x00020330,
64047 +};
64048 +
64049 u32 Rtl8192CURadioA_1T_mCardArray[RadioA_1T_mCardArrayLength] = {
64050 0x000,0x00030159,
64051 0x001,0x00031284,
64052 @@ -9043,7 +8138,7 @@ u32 Rtl8192CURadioA_1T_HPArray[RadioA_1T
64053 0x013,0x00028fb4,
64054 0x013,0x00024fa8,
64055 0x013,0x000207a4,
64056 -0x013,0x0001c798,
64057 +0x013,0x0001c3b0,
64058 0x013,0x000183a4,
64059 0x013,0x00014398,
64060 0x013,0x000101a4,
64061 @@ -9078,7 +8173,7 @@ u32 Rtl8192CURadioA_1T_HPArray[RadioA_1T
64062 u32 Rtl8192CURadioB_GM_Array[RadioB_GM_ArrayLength] = {
64063 0x0, };
64064
64065 -// MAC reg V13 - 2010-12-07
64066 +// MAC reg V14 - 2011-11-23
64067 u32 Rtl8192CUMAC_2T_Array[MAC_2T_ArrayLength] = {
64068 0x420,0x00000080,
64069 0x423,0x00000000,
64070 @@ -9153,10 +8248,11 @@ u32 Rtl8192CUMAC_2T_Array[MAC_2T_ArrayLe
64071 0x608,0x0000000e,
64072 0x609,0x0000002a,
64073 0x652,0x00000020,
64074 -0x63c,0x0000000a,
64075 -0x63d,0x0000000e,
64076 -0x63e,0x0000000a,
64077 -0x63f,0x0000000e,
64078 +0x652,0x00000020,
64079 +0x63c,0x00000008,
64080 +0x63d,0x00000008,
64081 +0x63e,0x0000000c,
64082 +0x63f,0x0000000c,
64083 0x66e,0x00000005,
64084 0x700,0x00000021,
64085 0x701,0x00000043,
64086 --- a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_led.c
64087 +++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_led.c
64088 @@ -16,8 +16,7 @@
64089 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
64090 *
64091 *
64092 -
64093 -******************************************************************************/
64094 + ******************************************************************************/
64095
64096 #include "drv_types.h"
64097 #include "rtl8192c_hal.h"
64098 @@ -65,7 +64,7 @@ BlinkWorkItemCallback(
64099 //
64100 static void
64101 ResetLedStatus(PLED_871x pLed) {
64102 - pLed->CurrLedState = LED_OFF; // Current LED state.
64103 + pLed->CurrLedState = RTW_LED_OFF; // Current LED state.
64104 pLed->bLedOn = _FALSE; // true if LED is ON, false if LED is OFF.
64105
64106 pLed->bLedBlinkInProgress = _FALSE; // true if it is blinking, false o.w..
64107 @@ -75,7 +74,7 @@ ResetLedStatus(PLED_871x pLed) {
64108 pLed->bLedScanBlinkInProgress = _FALSE;
64109 pLed->bLedWPSBlinkInProgress = _FALSE;
64110 pLed->BlinkTimes = 0; // Number of times to toggle led state for blinking.
64111 - pLed->BlinkingLedState = LED_UNKNOWN; // Next state for blinking, either LED_ON or LED_OFF are.
64112 + pLed->BlinkingLedState = LED_UNKNOWN; // Next state for blinking, either RTW_LED_ON or RTW_LED_OFF are.
64113 }
64114
64115 //================================================================================
64116 @@ -112,7 +111,15 @@ DeInitLed871x(
64117 PLED_871x pLed
64118 )
64119 {
64120 + //call _cancel_workitem_sync(&(pLed->BlinkWorkItem))
64121 + //before _cancel_timer_ex(&(pLed->BlinkTimer)) to
64122 + //avoid led timer restarting when driver is removed
64123 +
64124 + _cancel_workitem_sync(&(pLed->BlinkWorkItem));
64125 +
64126 _cancel_timer_ex(&(pLed->BlinkTimer));
64127 +
64128 + // We should reset bLedBlinkInProgress if we cancel the LedControlTimer, 2005.03.10, by rcnjko.
64129 ResetLedStatus(pLed);
64130 }
64131
64132 @@ -318,7 +325,7 @@ SwLedBlink(
64133 u8 bStopBlinking = _FALSE;
64134
64135 // Change LED according to BlinkingLedState specified.
64136 - if( pLed->BlinkingLedState == LED_ON )
64137 + if( pLed->BlinkingLedState == RTW_LED_ON )
64138 {
64139 SwLedOn(padapter, pLed);
64140 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
64141 @@ -393,10 +400,10 @@ SwLedBlink(
64142 else
64143 {
64144 // Assign LED state to toggle.
64145 - if( pLed->BlinkingLedState == LED_ON )
64146 - pLed->BlinkingLedState = LED_OFF;
64147 + if( pLed->BlinkingLedState == RTW_LED_ON )
64148 + pLed->BlinkingLedState = RTW_LED_OFF;
64149 else
64150 - pLed->BlinkingLedState = LED_ON;
64151 + pLed->BlinkingLedState = RTW_LED_ON;
64152
64153 // Schedule a timer to toggle LED state.
64154 switch( pLed->CurrLedState )
64155 @@ -412,7 +419,7 @@ SwLedBlink(
64156
64157 case LED_BLINK_WPS:
64158 {
64159 - if( pLed->BlinkingLedState == LED_ON )
64160 + if( pLed->BlinkingLedState == RTW_LED_ON )
64161 _set_timer(&(pLed->BlinkTimer), LED_BLINK_LONG_INTERVAL);
64162 else
64163 _set_timer(&(pLed->BlinkTimer), LED_BLINK_LONG_INTERVAL);
64164 @@ -443,7 +450,7 @@ SwLedBlink1(
64165 pLed = &(ledpriv->SwLed1);
64166
64167 // Change LED according to BlinkingLedState specified.
64168 - if( pLed->BlinkingLedState == LED_ON )
64169 + if( pLed->BlinkingLedState == RTW_LED_ON )
64170 {
64171 SwLedOn(padapter, pLed);
64172 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,( "Blinktimes (%d): turn on\n", pLed->BlinkTimes));
64173 @@ -494,17 +501,17 @@ SwLedBlink1(
64174 {
64175 case LED_BLINK_SLOWLY:
64176 if( pLed->bLedOn )
64177 - pLed->BlinkingLedState = LED_OFF;
64178 + pLed->BlinkingLedState = RTW_LED_OFF;
64179 else
64180 - pLed->BlinkingLedState = LED_ON;
64181 + pLed->BlinkingLedState = RTW_LED_ON;
64182 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
64183 break;
64184
64185 case LED_BLINK_NORMAL:
64186 if( pLed->bLedOn )
64187 - pLed->BlinkingLedState = LED_OFF;
64188 + pLed->BlinkingLedState = RTW_LED_OFF;
64189 else
64190 - pLed->BlinkingLedState = LED_ON;
64191 + pLed->BlinkingLedState = RTW_LED_ON;
64192 _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);
64193 break;
64194
64195 @@ -522,9 +529,9 @@ SwLedBlink1(
64196 pLed->bLedLinkBlinkInProgress = _TRUE;
64197 pLed->CurrLedState = LED_BLINK_NORMAL;
64198 if( pLed->bLedOn )
64199 - pLed->BlinkingLedState = LED_OFF;
64200 + pLed->BlinkingLedState = RTW_LED_OFF;
64201 else
64202 - pLed->BlinkingLedState = LED_ON;
64203 + pLed->BlinkingLedState = RTW_LED_ON;
64204 _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);
64205 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
64206
64207 @@ -534,9 +541,9 @@ SwLedBlink1(
64208 pLed->bLedNoLinkBlinkInProgress = _TRUE;
64209 pLed->CurrLedState = LED_BLINK_SLOWLY;
64210 if( pLed->bLedOn )
64211 - pLed->BlinkingLedState = LED_OFF;
64212 + pLed->BlinkingLedState = RTW_LED_OFF;
64213 else
64214 - pLed->BlinkingLedState = LED_ON;
64215 + pLed->BlinkingLedState = RTW_LED_ON;
64216 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
64217 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
64218 }
64219 @@ -545,9 +552,9 @@ SwLedBlink1(
64220 else
64221 {
64222 if( pLed->bLedOn )
64223 - pLed->BlinkingLedState = LED_OFF;
64224 + pLed->BlinkingLedState = RTW_LED_OFF;
64225 else
64226 - pLed->BlinkingLedState = LED_ON;
64227 + pLed->BlinkingLedState = RTW_LED_ON;
64228 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
64229 }
64230 break;
64231 @@ -565,9 +572,9 @@ SwLedBlink1(
64232 pLed->bLedLinkBlinkInProgress = _TRUE;
64233 pLed->CurrLedState = LED_BLINK_NORMAL;
64234 if( pLed->bLedOn )
64235 - pLed->BlinkingLedState = LED_OFF;
64236 + pLed->BlinkingLedState = RTW_LED_OFF;
64237 else
64238 - pLed->BlinkingLedState = LED_ON;
64239 + pLed->BlinkingLedState = RTW_LED_ON;
64240 _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);
64241 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
64242 }
64243 @@ -576,9 +583,9 @@ SwLedBlink1(
64244 pLed->bLedNoLinkBlinkInProgress = _TRUE;
64245 pLed->CurrLedState = LED_BLINK_SLOWLY;
64246 if( pLed->bLedOn )
64247 - pLed->BlinkingLedState = LED_OFF;
64248 + pLed->BlinkingLedState = RTW_LED_OFF;
64249 else
64250 - pLed->BlinkingLedState = LED_ON;
64251 + pLed->BlinkingLedState = RTW_LED_ON;
64252 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
64253 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
64254 }
64255 @@ -588,23 +595,23 @@ SwLedBlink1(
64256 else
64257 {
64258 if( pLed->bLedOn )
64259 - pLed->BlinkingLedState = LED_OFF;
64260 + pLed->BlinkingLedState = RTW_LED_OFF;
64261 else
64262 - pLed->BlinkingLedState = LED_ON;
64263 + pLed->BlinkingLedState = RTW_LED_ON;
64264 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
64265 }
64266 break;
64267
64268 case LED_BLINK_WPS:
64269 if( pLed->bLedOn )
64270 - pLed->BlinkingLedState = LED_OFF;
64271 + pLed->BlinkingLedState = RTW_LED_OFF;
64272 else
64273 - pLed->BlinkingLedState = LED_ON;
64274 + pLed->BlinkingLedState = RTW_LED_ON;
64275 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
64276 break;
64277
64278 case LED_BLINK_WPS_STOP: //WPS success
64279 - if(pLed->BlinkingLedState == LED_ON)
64280 + if(pLed->BlinkingLedState == RTW_LED_ON)
64281 bStopBlinking = _FALSE;
64282 else
64283 bStopBlinking = _TRUE;
64284 @@ -614,9 +621,9 @@ SwLedBlink1(
64285 pLed->bLedLinkBlinkInProgress = _TRUE;
64286 pLed->CurrLedState = LED_BLINK_NORMAL;
64287 if( pLed->bLedOn )
64288 - pLed->BlinkingLedState = LED_OFF;
64289 + pLed->BlinkingLedState = RTW_LED_OFF;
64290 else
64291 - pLed->BlinkingLedState = LED_ON;
64292 + pLed->BlinkingLedState = RTW_LED_ON;
64293 _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);
64294 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
64295
64296 @@ -624,7 +631,7 @@ SwLedBlink1(
64297 }
64298 else
64299 {
64300 - pLed->BlinkingLedState = LED_OFF;
64301 + pLed->BlinkingLedState = RTW_LED_OFF;
64302 _set_timer(&(pLed->BlinkTimer), LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA);
64303 }
64304 break;
64305 @@ -645,7 +652,7 @@ SwLedBlink2(
64306 u8 bStopBlinking = _FALSE;
64307
64308 // Change LED according to BlinkingLedState specified.
64309 - if( pLed->BlinkingLedState == LED_ON)
64310 + if( pLed->BlinkingLedState == RTW_LED_ON)
64311 {
64312 SwLedOn(padapter, pLed);
64313 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
64314 @@ -673,16 +680,16 @@ SwLedBlink2(
64315 }
64316 else if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)
64317 {
64318 - pLed->CurrLedState = LED_ON;
64319 - pLed->BlinkingLedState = LED_ON;
64320 + pLed->CurrLedState = RTW_LED_ON;
64321 + pLed->BlinkingLedState = RTW_LED_ON;
64322 SwLedOn(padapter, pLed);
64323 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("stop scan blink CurrLedState %d\n", pLed->CurrLedState));
64324
64325 }
64326 else if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)
64327 {
64328 - pLed->CurrLedState = LED_OFF;
64329 - pLed->BlinkingLedState = LED_OFF;
64330 + pLed->CurrLedState = RTW_LED_OFF;
64331 + pLed->BlinkingLedState = RTW_LED_OFF;
64332 SwLedOff(padapter, pLed);
64333 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("stop scan blink CurrLedState %d\n", pLed->CurrLedState));
64334 }
64335 @@ -697,9 +704,9 @@ SwLedBlink2(
64336 else
64337 {
64338 if( pLed->bLedOn )
64339 - pLed->BlinkingLedState = LED_OFF;
64340 + pLed->BlinkingLedState = RTW_LED_OFF;
64341 else
64342 - pLed->BlinkingLedState = LED_ON;
64343 + pLed->BlinkingLedState = RTW_LED_ON;
64344 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
64345 }
64346 }
64347 @@ -719,16 +726,16 @@ SwLedBlink2(
64348 }
64349 else if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)
64350 {
64351 - pLed->CurrLedState = LED_ON;
64352 - pLed->BlinkingLedState = LED_ON;
64353 + pLed->CurrLedState = RTW_LED_ON;
64354 + pLed->BlinkingLedState = RTW_LED_ON;
64355 SwLedOn(padapter, pLed);
64356 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("stop CurrLedState %d\n", pLed->CurrLedState));
64357
64358 }
64359 else if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)
64360 {
64361 - pLed->CurrLedState = LED_OFF;
64362 - pLed->BlinkingLedState = LED_OFF;
64363 + pLed->CurrLedState = RTW_LED_OFF;
64364 + pLed->BlinkingLedState = RTW_LED_OFF;
64365 SwLedOff(padapter, pLed);
64366 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("stop CurrLedState %d\n", pLed->CurrLedState));
64367 }
64368 @@ -743,9 +750,9 @@ SwLedBlink2(
64369 else
64370 {
64371 if( pLed->bLedOn )
64372 - pLed->BlinkingLedState = LED_OFF;
64373 + pLed->BlinkingLedState = RTW_LED_OFF;
64374 else
64375 - pLed->BlinkingLedState = LED_ON;
64376 + pLed->BlinkingLedState = RTW_LED_ON;
64377 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
64378 }
64379 }
64380 @@ -767,7 +774,7 @@ SwLedBlink3(
64381 u8 bStopBlinking = _FALSE;
64382
64383 // Change LED according to BlinkingLedState specified.
64384 - if( pLed->BlinkingLedState == LED_ON )
64385 + if( pLed->BlinkingLedState == RTW_LED_ON )
64386 {
64387 SwLedOn(padapter, pLed);
64388 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
64389 @@ -796,8 +803,8 @@ SwLedBlink3(
64390 }
64391 else if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)
64392 {
64393 - pLed->CurrLedState = LED_ON;
64394 - pLed->BlinkingLedState = LED_ON;
64395 + pLed->CurrLedState = RTW_LED_ON;
64396 + pLed->BlinkingLedState = RTW_LED_ON;
64397 if( !pLed->bLedOn )
64398 SwLedOn(padapter, pLed);
64399
64400 @@ -805,8 +812,8 @@ SwLedBlink3(
64401 }
64402 else if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)
64403 {
64404 - pLed->CurrLedState = LED_OFF;
64405 - pLed->BlinkingLedState = LED_OFF;
64406 + pLed->CurrLedState = RTW_LED_OFF;
64407 + pLed->BlinkingLedState = RTW_LED_OFF;
64408 if( pLed->bLedOn )
64409 SwLedOff(padapter, pLed);
64410
64411 @@ -823,9 +830,9 @@ SwLedBlink3(
64412 else
64413 {
64414 if( pLed->bLedOn )
64415 - pLed->BlinkingLedState = LED_OFF;
64416 + pLed->BlinkingLedState = RTW_LED_OFF;
64417 else
64418 - pLed->BlinkingLedState = LED_ON;
64419 + pLed->BlinkingLedState = RTW_LED_ON;
64420 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
64421 }
64422 }
64423 @@ -845,8 +852,8 @@ SwLedBlink3(
64424 }
64425 else if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)
64426 {
64427 - pLed->CurrLedState = LED_ON;
64428 - pLed->BlinkingLedState = LED_ON;
64429 + pLed->CurrLedState = RTW_LED_ON;
64430 + pLed->BlinkingLedState = RTW_LED_ON;
64431
64432 if( !pLed->bLedOn )
64433 SwLedOn(padapter, pLed);
64434 @@ -855,8 +862,8 @@ SwLedBlink3(
64435 }
64436 else if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)
64437 {
64438 - pLed->CurrLedState = LED_OFF;
64439 - pLed->BlinkingLedState = LED_OFF;
64440 + pLed->CurrLedState = RTW_LED_OFF;
64441 + pLed->BlinkingLedState = RTW_LED_OFF;
64442
64443 if( pLed->bLedOn )
64444 SwLedOff(padapter, pLed);
64445 @@ -875,9 +882,9 @@ SwLedBlink3(
64446 else
64447 {
64448 if( pLed->bLedOn )
64449 - pLed->BlinkingLedState = LED_OFF;
64450 + pLed->BlinkingLedState = RTW_LED_OFF;
64451 else
64452 - pLed->BlinkingLedState = LED_ON;
64453 + pLed->BlinkingLedState = RTW_LED_ON;
64454 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
64455 }
64456 }
64457 @@ -885,16 +892,16 @@ SwLedBlink3(
64458
64459 case LED_BLINK_WPS:
64460 if( pLed->bLedOn )
64461 - pLed->BlinkingLedState = LED_OFF;
64462 + pLed->BlinkingLedState = RTW_LED_OFF;
64463 else
64464 - pLed->BlinkingLedState = LED_ON;
64465 + pLed->BlinkingLedState = RTW_LED_ON;
64466 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
64467 break;
64468
64469 case LED_BLINK_WPS_STOP: //WPS success
64470 - if(pLed->BlinkingLedState == LED_ON)
64471 + if(pLed->BlinkingLedState == RTW_LED_ON)
64472 {
64473 - pLed->BlinkingLedState = LED_OFF;
64474 + pLed->BlinkingLedState = RTW_LED_OFF;
64475 _set_timer(&(pLed->BlinkTimer), LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA);
64476 bStopBlinking = _FALSE;
64477 }
64478 @@ -911,8 +918,8 @@ SwLedBlink3(
64479 }
64480 else
64481 {
64482 - pLed->CurrLedState = LED_ON;
64483 - pLed->BlinkingLedState = LED_ON;
64484 + pLed->CurrLedState = RTW_LED_ON;
64485 + pLed->BlinkingLedState = RTW_LED_ON;
64486 SwLedOn(padapter, pLed);
64487 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
64488 }
64489 @@ -940,7 +947,7 @@ SwLedBlink4(
64490 u8 bStopBlinking = _FALSE;
64491
64492 // Change LED according to BlinkingLedState specified.
64493 - if( pLed->BlinkingLedState == LED_ON )
64494 + if( pLed->BlinkingLedState == RTW_LED_ON )
64495 {
64496 SwLedOn(padapter, pLed);
64497 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
64498 @@ -953,8 +960,8 @@ SwLedBlink4(
64499
64500 if(!pLed1->bLedWPSBlinkInProgress && pLed1->BlinkingLedState == LED_UNKNOWN)
64501 {
64502 - pLed1->BlinkingLedState = LED_OFF;
64503 - pLed1->CurrLedState = LED_OFF;
64504 + pLed1->BlinkingLedState = RTW_LED_OFF;
64505 + pLed1->CurrLedState = RTW_LED_OFF;
64506 SwLedOff(padapter, pLed1);
64507 }
64508
64509 @@ -962,21 +969,21 @@ SwLedBlink4(
64510 {
64511 case LED_BLINK_SLOWLY:
64512 if( pLed->bLedOn )
64513 - pLed->BlinkingLedState = LED_OFF;
64514 + pLed->BlinkingLedState = RTW_LED_OFF;
64515 else
64516 - pLed->BlinkingLedState = LED_ON;
64517 + pLed->BlinkingLedState = RTW_LED_ON;
64518 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
64519 break;
64520
64521 case LED_BLINK_StartToBlink:
64522 if( pLed->bLedOn )
64523 {
64524 - pLed->BlinkingLedState = LED_OFF;
64525 + pLed->BlinkingLedState = RTW_LED_OFF;
64526 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);
64527 }
64528 else
64529 {
64530 - pLed->BlinkingLedState = LED_ON;
64531 + pLed->BlinkingLedState = RTW_LED_ON;
64532 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
64533 }
64534 break;
64535 @@ -999,9 +1006,9 @@ SwLedBlink4(
64536 pLed->bLedNoLinkBlinkInProgress = _FALSE;
64537 pLed->CurrLedState = LED_BLINK_SLOWLY;
64538 if( pLed->bLedOn )
64539 - pLed->BlinkingLedState = LED_OFF;
64540 + pLed->BlinkingLedState = RTW_LED_OFF;
64541 else
64542 - pLed->BlinkingLedState = LED_ON;
64543 + pLed->BlinkingLedState = RTW_LED_ON;
64544 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
64545 }
64546 pLed->bLedScanBlinkInProgress = _FALSE;
64547 @@ -1015,9 +1022,9 @@ SwLedBlink4(
64548 else
64549 {
64550 if( pLed->bLedOn )
64551 - pLed->BlinkingLedState = LED_OFF;
64552 + pLed->BlinkingLedState = RTW_LED_OFF;
64553 else
64554 - pLed->BlinkingLedState = LED_ON;
64555 + pLed->BlinkingLedState = RTW_LED_ON;
64556 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
64557 }
64558 }
64559 @@ -1040,9 +1047,9 @@ SwLedBlink4(
64560 pLed->bLedNoLinkBlinkInProgress = _TRUE;
64561 pLed->CurrLedState = LED_BLINK_SLOWLY;
64562 if( pLed->bLedOn )
64563 - pLed->BlinkingLedState = LED_OFF;
64564 + pLed->BlinkingLedState = RTW_LED_OFF;
64565 else
64566 - pLed->BlinkingLedState = LED_ON;
64567 + pLed->BlinkingLedState = RTW_LED_ON;
64568 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
64569 }
64570 pLed->bLedBlinkInProgress = _FALSE;
64571 @@ -1056,9 +1063,9 @@ SwLedBlink4(
64572 else
64573 {
64574 if( pLed->bLedOn )
64575 - pLed->BlinkingLedState = LED_OFF;
64576 + pLed->BlinkingLedState = RTW_LED_OFF;
64577 else
64578 - pLed->BlinkingLedState = LED_ON;
64579 + pLed->BlinkingLedState = RTW_LED_ON;
64580 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
64581 }
64582 }
64583 @@ -1067,21 +1074,21 @@ SwLedBlink4(
64584 case LED_BLINK_WPS:
64585 if( pLed->bLedOn )
64586 {
64587 - pLed->BlinkingLedState = LED_OFF;
64588 + pLed->BlinkingLedState = RTW_LED_OFF;
64589 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);
64590 }
64591 else
64592 {
64593 - pLed->BlinkingLedState = LED_ON;
64594 + pLed->BlinkingLedState = RTW_LED_ON;
64595 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
64596 }
64597 break;
64598
64599 case LED_BLINK_WPS_STOP: //WPS authentication fail
64600 if( pLed->bLedOn )
64601 - pLed->BlinkingLedState = LED_OFF;
64602 + pLed->BlinkingLedState = RTW_LED_OFF;
64603 else
64604 - pLed->BlinkingLedState = LED_ON;
64605 + pLed->BlinkingLedState = RTW_LED_ON;
64606
64607 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
64608 break;
64609 @@ -1103,15 +1110,15 @@ SwLedBlink4(
64610 if(bStopBlinking)
64611 {
64612 pLed->BlinkTimes = 10;
64613 - pLed->BlinkingLedState = LED_ON;
64614 + pLed->BlinkingLedState = RTW_LED_ON;
64615 _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);
64616 }
64617 else
64618 {
64619 if( pLed->bLedOn )
64620 - pLed->BlinkingLedState = LED_OFF;
64621 + pLed->BlinkingLedState = RTW_LED_OFF;
64622 else
64623 - pLed->BlinkingLedState = LED_ON;
64624 + pLed->BlinkingLedState = RTW_LED_ON;
64625
64626 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
64627 }
64628 @@ -1137,7 +1144,7 @@ SwLedBlink5(
64629 u8 bStopBlinking = _FALSE;
64630
64631 // Change LED according to BlinkingLedState specified.
64632 - if( pLed->BlinkingLedState == LED_ON )
64633 + if( pLed->BlinkingLedState == RTW_LED_ON )
64634 {
64635 SwLedOn(padapter, pLed);
64636 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
64637 @@ -1161,14 +1168,14 @@ SwLedBlink5(
64638 {
64639 if( padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS)
64640 {
64641 - pLed->CurrLedState = LED_OFF;
64642 - pLed->BlinkingLedState = LED_OFF;
64643 + pLed->CurrLedState = RTW_LED_OFF;
64644 + pLed->BlinkingLedState = RTW_LED_OFF;
64645 if(pLed->bLedOn)
64646 SwLedOff(padapter, pLed);
64647 }
64648 else
64649 - { pLed->CurrLedState = LED_ON;
64650 - pLed->BlinkingLedState = LED_ON;
64651 + { pLed->CurrLedState = RTW_LED_ON;
64652 + pLed->BlinkingLedState = RTW_LED_ON;
64653 if(!pLed->bLedOn)
64654 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
64655 }
64656 @@ -1184,9 +1191,9 @@ SwLedBlink5(
64657 else
64658 {
64659 if( pLed->bLedOn )
64660 - pLed->BlinkingLedState = LED_OFF;
64661 + pLed->BlinkingLedState = RTW_LED_OFF;
64662 else
64663 - pLed->BlinkingLedState = LED_ON;
64664 + pLed->BlinkingLedState = RTW_LED_ON;
64665 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
64666 }
64667 }
64668 @@ -1204,15 +1211,15 @@ SwLedBlink5(
64669 {
64670 if( padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS)
64671 {
64672 - pLed->CurrLedState = LED_OFF;
64673 - pLed->BlinkingLedState = LED_OFF;
64674 + pLed->CurrLedState = RTW_LED_OFF;
64675 + pLed->BlinkingLedState = RTW_LED_OFF;
64676 if(pLed->bLedOn)
64677 SwLedOff(padapter, pLed);
64678 }
64679 else
64680 {
64681 - pLed->CurrLedState = LED_ON;
64682 - pLed->BlinkingLedState = LED_ON;
64683 + pLed->CurrLedState = RTW_LED_ON;
64684 + pLed->BlinkingLedState = RTW_LED_ON;
64685 if(!pLed->bLedOn)
64686 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
64687 }
64688 @@ -1228,9 +1235,9 @@ SwLedBlink5(
64689 else
64690 {
64691 if( pLed->bLedOn )
64692 - pLed->BlinkingLedState = LED_OFF;
64693 + pLed->BlinkingLedState = RTW_LED_OFF;
64694 else
64695 - pLed->BlinkingLedState = LED_ON;
64696 + pLed->BlinkingLedState = RTW_LED_ON;
64697 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
64698 }
64699 }
64700 @@ -1255,7 +1262,7 @@ SwLedBlink6(
64701 u8 bStopBlinking = _FALSE;
64702
64703 // Change LED according to BlinkingLedState specified.
64704 - if( pLed->BlinkingLedState == LED_ON )
64705 + if( pLed->BlinkingLedState == RTW_LED_ON )
64706 {
64707 SwLedOn(padapter, pLed);
64708 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
64709 @@ -1397,9 +1404,9 @@ SwLedControlMode0(
64710 pLed->BlinkTimes = 2;
64711
64712 if( pLed->bLedOn )
64713 - pLed->BlinkingLedState = LED_OFF;
64714 + pLed->BlinkingLedState = RTW_LED_OFF;
64715 else
64716 - pLed->BlinkingLedState = LED_ON;
64717 + pLed->BlinkingLedState = RTW_LED_ON;
64718 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
64719 }
64720 break;
64721 @@ -1413,9 +1420,9 @@ SwLedControlMode0(
64722 pLed->BlinkTimes = 24;
64723
64724 if( pLed->bLedOn )
64725 - pLed->BlinkingLedState = LED_OFF;
64726 + pLed->BlinkingLedState = RTW_LED_OFF;
64727 else
64728 - pLed->BlinkingLedState = LED_ON;
64729 + pLed->BlinkingLedState = RTW_LED_ON;
64730 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);
64731 }
64732 else
64733 @@ -1425,7 +1432,7 @@ SwLedControlMode0(
64734 break;
64735
64736 case LED_CTL_LINK:
64737 - pLed->CurrLedState = LED_ON;
64738 + pLed->CurrLedState = RTW_LED_ON;
64739 if( pLed->bLedBlinkInProgress == _FALSE )
64740 {
64741 SwLedOn(padapter, pLed);
64742 @@ -1433,7 +1440,7 @@ SwLedControlMode0(
64743 break;
64744
64745 case LED_CTL_NO_LINK:
64746 - pLed->CurrLedState = LED_OFF;
64747 + pLed->CurrLedState = RTW_LED_OFF;
64748 if( pLed->bLedBlinkInProgress == _FALSE )
64749 {
64750 SwLedOff(padapter, pLed);
64751 @@ -1441,7 +1448,7 @@ SwLedControlMode0(
64752 break;
64753
64754 case LED_CTL_POWER_OFF:
64755 - pLed->CurrLedState = LED_OFF;
64756 + pLed->CurrLedState = RTW_LED_OFF;
64757 if(pLed->bLedBlinkInProgress)
64758 {
64759 _cancel_timer_ex(&(pLed->BlinkTimer));
64760 @@ -1451,7 +1458,7 @@ SwLedControlMode0(
64761 break;
64762
64763 case LED_CTL_START_WPS:
64764 - if( pLed->bLedBlinkInProgress == _FALSE || pLed->CurrLedState == LED_ON)
64765 + if( pLed->bLedBlinkInProgress == _FALSE || pLed->CurrLedState == RTW_LED_ON)
64766 {
64767 pLed->bLedBlinkInProgress = _TRUE;
64768
64769 @@ -1460,12 +1467,12 @@ SwLedControlMode0(
64770
64771 if( pLed->bLedOn )
64772 {
64773 - pLed->BlinkingLedState = LED_OFF;
64774 + pLed->BlinkingLedState = RTW_LED_OFF;
64775 _set_timer(&(pLed->BlinkTimer), LED_BLINK_LONG_INTERVAL);
64776 }
64777 else
64778 {
64779 - pLed->BlinkingLedState = LED_ON;
64780 + pLed->BlinkingLedState = RTW_LED_ON;
64781 _set_timer(&(pLed->BlinkTimer), LED_BLINK_LONG_INTERVAL);
64782 }
64783 }
64784 @@ -1474,7 +1481,7 @@ SwLedControlMode0(
64785 case LED_CTL_STOP_WPS:
64786 if(pLed->bLedBlinkInProgress)
64787 {
64788 - pLed->CurrLedState = LED_OFF;
64789 + pLed->CurrLedState = RTW_LED_OFF;
64790 _cancel_timer_ex(&(pLed->BlinkTimer));
64791 pLed->bLedBlinkInProgress = _FALSE;
64792 }
64793 @@ -1529,9 +1536,9 @@ SwLedControlMode1(
64794 pLed->bLedNoLinkBlinkInProgress = _TRUE;
64795 pLed->CurrLedState = LED_BLINK_SLOWLY;
64796 if( pLed->bLedOn )
64797 - pLed->BlinkingLedState = LED_OFF;
64798 + pLed->BlinkingLedState = RTW_LED_OFF;
64799 else
64800 - pLed->BlinkingLedState = LED_ON;
64801 + pLed->BlinkingLedState = RTW_LED_ON;
64802 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
64803 }
64804 break;
64805 @@ -1556,9 +1563,9 @@ SwLedControlMode1(
64806 pLed->bLedLinkBlinkInProgress = _TRUE;
64807 pLed->CurrLedState = LED_BLINK_NORMAL;
64808 if( pLed->bLedOn )
64809 - pLed->BlinkingLedState = LED_OFF;
64810 + pLed->BlinkingLedState = RTW_LED_OFF;
64811 else
64812 - pLed->BlinkingLedState = LED_ON;
64813 + pLed->BlinkingLedState = RTW_LED_ON;
64814 _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);
64815 }
64816 break;
64817 @@ -1590,9 +1597,9 @@ SwLedControlMode1(
64818 pLed->CurrLedState = LED_SCAN_BLINK;
64819 pLed->BlinkTimes = 24;
64820 if( pLed->bLedOn )
64821 - pLed->BlinkingLedState = LED_OFF;
64822 + pLed->BlinkingLedState = RTW_LED_OFF;
64823 else
64824 - pLed->BlinkingLedState = LED_ON;
64825 + pLed->BlinkingLedState = RTW_LED_ON;
64826 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
64827 }
64828 break;
64829 @@ -1619,9 +1626,9 @@ SwLedControlMode1(
64830 pLed->CurrLedState = LED_TXRX_BLINK;
64831 pLed->BlinkTimes = 2;
64832 if( pLed->bLedOn )
64833 - pLed->BlinkingLedState = LED_OFF;
64834 + pLed->BlinkingLedState = RTW_LED_OFF;
64835 else
64836 - pLed->BlinkingLedState = LED_ON;
64837 + pLed->BlinkingLedState = RTW_LED_ON;
64838 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
64839 }
64840 break;
64841 @@ -1653,9 +1660,9 @@ SwLedControlMode1(
64842 pLed->bLedWPSBlinkInProgress = _TRUE;
64843 pLed->CurrLedState = LED_BLINK_WPS;
64844 if( pLed->bLedOn )
64845 - pLed->BlinkingLedState = LED_OFF;
64846 + pLed->BlinkingLedState = RTW_LED_OFF;
64847 else
64848 - pLed->BlinkingLedState = LED_ON;
64849 + pLed->BlinkingLedState = RTW_LED_ON;
64850 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
64851 }
64852 break;
64853 @@ -1694,12 +1701,12 @@ SwLedControlMode1(
64854 pLed->CurrLedState = LED_BLINK_WPS_STOP;
64855 if(pLed->bLedOn)
64856 {
64857 - pLed->BlinkingLedState = LED_OFF;
64858 + pLed->BlinkingLedState = RTW_LED_OFF;
64859 _set_timer(&(pLed->BlinkTimer), LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA);
64860 }
64861 else
64862 {
64863 - pLed->BlinkingLedState = LED_ON;
64864 + pLed->BlinkingLedState = RTW_LED_ON;
64865 _set_timer(&(pLed->BlinkTimer), 0);
64866 }
64867 break;
64868 @@ -1714,15 +1721,15 @@ SwLedControlMode1(
64869 pLed->bLedNoLinkBlinkInProgress = _TRUE;
64870 pLed->CurrLedState = LED_BLINK_SLOWLY;
64871 if( pLed->bLedOn )
64872 - pLed->BlinkingLedState = LED_OFF;
64873 + pLed->BlinkingLedState = RTW_LED_OFF;
64874 else
64875 - pLed->BlinkingLedState = LED_ON;
64876 + pLed->BlinkingLedState = RTW_LED_ON;
64877 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
64878 break;
64879
64880 case LED_CTL_POWER_OFF:
64881 - pLed->CurrLedState = LED_OFF;
64882 - pLed->BlinkingLedState = LED_OFF;
64883 + pLed->CurrLedState = RTW_LED_OFF;
64884 + pLed->BlinkingLedState = RTW_LED_OFF;
64885 if( pLed->bLedNoLinkBlinkInProgress)
64886 {
64887 _cancel_timer_ex(&(pLed->BlinkTimer));
64888 @@ -1790,9 +1797,9 @@ SwLedControlMode2(
64889 pLed->CurrLedState = LED_SCAN_BLINK;
64890 pLed->BlinkTimes = 24;
64891 if( pLed->bLedOn )
64892 - pLed->BlinkingLedState = LED_OFF;
64893 + pLed->BlinkingLedState = RTW_LED_OFF;
64894 else
64895 - pLed->BlinkingLedState = LED_ON;
64896 + pLed->BlinkingLedState = RTW_LED_ON;
64897 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
64898 }
64899 break;
64900 @@ -1810,16 +1817,16 @@ SwLedControlMode2(
64901 pLed->CurrLedState = LED_TXRX_BLINK;
64902 pLed->BlinkTimes = 2;
64903 if( pLed->bLedOn )
64904 - pLed->BlinkingLedState = LED_OFF;
64905 + pLed->BlinkingLedState = RTW_LED_OFF;
64906 else
64907 - pLed->BlinkingLedState = LED_ON;
64908 + pLed->BlinkingLedState = RTW_LED_ON;
64909 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
64910 }
64911 break;
64912
64913 case LED_CTL_LINK:
64914 - pLed->CurrLedState = LED_ON;
64915 - pLed->BlinkingLedState = LED_ON;
64916 + pLed->CurrLedState = RTW_LED_ON;
64917 + pLed->BlinkingLedState = RTW_LED_ON;
64918 if( pLed->bLedBlinkInProgress)
64919 {
64920 _cancel_timer_ex(&(pLed->BlinkTimer));
64921 @@ -1849,8 +1856,8 @@ SwLedControlMode2(
64922 pLed->bLedScanBlinkInProgress = _FALSE;
64923 }
64924 pLed->bLedWPSBlinkInProgress = _TRUE;
64925 - pLed->CurrLedState = LED_ON;
64926 - pLed->BlinkingLedState = LED_ON;
64927 + pLed->CurrLedState = RTW_LED_ON;
64928 + pLed->BlinkingLedState = RTW_LED_ON;
64929 _set_timer(&(pLed->BlinkTimer), 0);
64930 }
64931 break;
64932 @@ -1863,8 +1870,8 @@ SwLedControlMode2(
64933 }
64934 else
64935 {
64936 - pLed->CurrLedState = LED_ON;
64937 - pLed->BlinkingLedState = LED_ON;
64938 + pLed->CurrLedState = RTW_LED_ON;
64939 + pLed->BlinkingLedState = RTW_LED_ON;
64940 _set_timer(&(pLed->BlinkTimer), 0);
64941 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
64942 }
64943 @@ -1878,8 +1885,8 @@ SwLedControlMode2(
64944 }
64945 else
64946 {
64947 - pLed->CurrLedState = LED_OFF;
64948 - pLed->BlinkingLedState = LED_OFF;
64949 + pLed->CurrLedState = RTW_LED_OFF;
64950 + pLed->BlinkingLedState = RTW_LED_OFF;
64951 _set_timer(&(pLed->BlinkTimer), 0);
64952 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
64953 }
64954 @@ -1889,15 +1896,15 @@ SwLedControlMode2(
64955 case LED_CTL_NO_LINK:
64956 if(!IS_LED_BLINKING(pLed))
64957 {
64958 - pLed->CurrLedState = LED_OFF;
64959 - pLed->BlinkingLedState = LED_OFF;
64960 + pLed->CurrLedState = RTW_LED_OFF;
64961 + pLed->BlinkingLedState = RTW_LED_OFF;
64962 _set_timer(&(pLed->BlinkTimer), 0);
64963 }
64964 break;
64965
64966 case LED_CTL_POWER_OFF:
64967 - pLed->CurrLedState = LED_OFF;
64968 - pLed->BlinkingLedState = LED_OFF;
64969 + pLed->CurrLedState = RTW_LED_OFF;
64970 + pLed->BlinkingLedState = RTW_LED_OFF;
64971 if( pLed->bLedBlinkInProgress)
64972 {
64973 _cancel_timer_ex(&(pLed->BlinkTimer));
64974 @@ -1955,9 +1962,9 @@ SwLedControlMode2(
64975 pLed->CurrLedState = LED_SCAN_BLINK;
64976 pLed->BlinkTimes = 24;
64977 if( pLed->bLedOn )
64978 - pLed->BlinkingLedState = LED_OFF;
64979 + pLed->BlinkingLedState = RTW_LED_OFF;
64980 else
64981 - pLed->BlinkingLedState = LED_ON;
64982 + pLed->BlinkingLedState = RTW_LED_ON;
64983 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
64984 }
64985 break;
64986 @@ -1975,9 +1982,9 @@ SwLedControlMode2(
64987 pLed->CurrLedState = LED_TXRX_BLINK;
64988 pLed->BlinkTimes = 2;
64989 if( pLed->bLedOn )
64990 - pLed->BlinkingLedState = LED_OFF;
64991 + pLed->BlinkingLedState = RTW_LED_OFF;
64992 else
64993 - pLed->BlinkingLedState = LED_ON;
64994 + pLed->BlinkingLedState = RTW_LED_ON;
64995 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
64996 }
64997 break;
64998 @@ -1986,8 +1993,8 @@ SwLedControlMode2(
64999 if(IS_LED_WPS_BLINKING(pLed))
65000 return;
65001
65002 - pLed->CurrLedState = LED_ON;
65003 - pLed->BlinkingLedState = LED_ON;
65004 + pLed->CurrLedState = RTW_LED_ON;
65005 + pLed->BlinkingLedState = RTW_LED_ON;
65006 if( pLed->bLedBlinkInProgress)
65007 {
65008 _cancel_timer_ex(&(pLed->BlinkTimer));
65009 @@ -2019,9 +2026,9 @@ SwLedControlMode2(
65010 pLed->bLedWPSBlinkInProgress = _TRUE;
65011 pLed->CurrLedState = LED_BLINK_WPS;
65012 if( pLed->bLedOn )
65013 - pLed->BlinkingLedState = LED_OFF;
65014 + pLed->BlinkingLedState = RTW_LED_OFF;
65015 else
65016 - pLed->BlinkingLedState = LED_ON;
65017 + pLed->BlinkingLedState = RTW_LED_ON;
65018 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
65019 }
65020 break;
65021 @@ -2040,12 +2047,12 @@ SwLedControlMode2(
65022 pLed->CurrLedState = LED_BLINK_WPS_STOP;
65023 if(pLed->bLedOn)
65024 {
65025 - pLed->BlinkingLedState = LED_OFF;
65026 + pLed->BlinkingLedState = RTW_LED_OFF;
65027 _set_timer(&(pLed->BlinkTimer), LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA);
65028 }
65029 else
65030 {
65031 - pLed->BlinkingLedState = LED_ON;
65032 + pLed->BlinkingLedState = RTW_LED_ON;
65033 _set_timer(&(pLed->BlinkTimer), 0);
65034 }
65035
65036 @@ -2058,8 +2065,8 @@ SwLedControlMode2(
65037 pLed->bLedWPSBlinkInProgress = _FALSE;
65038 }
65039
65040 - pLed->CurrLedState = LED_OFF;
65041 - pLed->BlinkingLedState = LED_OFF;
65042 + pLed->CurrLedState = RTW_LED_OFF;
65043 + pLed->BlinkingLedState = RTW_LED_OFF;
65044 _set_timer(&(pLed->BlinkTimer), 0);
65045 break;
65046
65047 @@ -2067,15 +2074,15 @@ SwLedControlMode2(
65048 case LED_CTL_NO_LINK:
65049 if(!IS_LED_BLINKING(pLed))
65050 {
65051 - pLed->CurrLedState = LED_OFF;
65052 - pLed->BlinkingLedState = LED_OFF;
65053 + pLed->CurrLedState = RTW_LED_OFF;
65054 + pLed->BlinkingLedState = RTW_LED_OFF;
65055 _set_timer(&(pLed->BlinkTimer), 0);
65056 }
65057 break;
65058
65059 case LED_CTL_POWER_OFF:
65060 - pLed->CurrLedState = LED_OFF;
65061 - pLed->BlinkingLedState = LED_OFF;
65062 + pLed->CurrLedState = RTW_LED_OFF;
65063 + pLed->BlinkingLedState = RTW_LED_OFF;
65064 if( pLed->bLedBlinkInProgress)
65065 {
65066 _cancel_timer_ex(&(pLed->BlinkTimer));
65067 @@ -2124,8 +2131,8 @@ SwLedControlMode4(
65068 pLed1->bLedWPSBlinkInProgress = _FALSE;
65069 _cancel_timer_ex(&(pLed1->BlinkTimer));
65070
65071 - pLed1->BlinkingLedState = LED_OFF;
65072 - pLed1->CurrLedState = LED_OFF;
65073 + pLed1->BlinkingLedState = RTW_LED_OFF;
65074 + pLed1->CurrLedState = RTW_LED_OFF;
65075
65076 if(pLed1->bLedOn)
65077 _set_timer(&(pLed->BlinkTimer), 0);
65078 @@ -2152,12 +2159,12 @@ SwLedControlMode4(
65079 pLed->CurrLedState = LED_BLINK_StartToBlink;
65080 if( pLed->bLedOn )
65081 {
65082 - pLed->BlinkingLedState = LED_OFF;
65083 + pLed->BlinkingLedState = RTW_LED_OFF;
65084 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);
65085 }
65086 else
65087 {
65088 - pLed->BlinkingLedState = LED_ON;
65089 + pLed->BlinkingLedState = RTW_LED_ON;
65090 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
65091 }
65092 }
65093 @@ -2173,8 +2180,8 @@ SwLedControlMode4(
65094 pLed1->bLedWPSBlinkInProgress = _FALSE;
65095 _cancel_timer_ex(&(pLed1->BlinkTimer));
65096
65097 - pLed1->BlinkingLedState = LED_OFF;
65098 - pLed1->CurrLedState = LED_OFF;
65099 + pLed1->BlinkingLedState = RTW_LED_OFF;
65100 + pLed1->CurrLedState = RTW_LED_OFF;
65101
65102 if(pLed1->bLedOn)
65103 _set_timer(&(pLed->BlinkTimer), 0);
65104 @@ -2196,9 +2203,9 @@ SwLedControlMode4(
65105 pLed->bLedNoLinkBlinkInProgress = _TRUE;
65106 pLed->CurrLedState = LED_BLINK_SLOWLY;
65107 if( pLed->bLedOn )
65108 - pLed->BlinkingLedState = LED_OFF;
65109 + pLed->BlinkingLedState = RTW_LED_OFF;
65110 else
65111 - pLed->BlinkingLedState = LED_ON;
65112 + pLed->BlinkingLedState = RTW_LED_ON;
65113 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
65114 }
65115 break;
65116 @@ -2225,9 +2232,9 @@ SwLedControlMode4(
65117 pLed->CurrLedState = LED_SCAN_BLINK;
65118 pLed->BlinkTimes = 24;
65119 if( pLed->bLedOn )
65120 - pLed->BlinkingLedState = LED_OFF;
65121 + pLed->BlinkingLedState = RTW_LED_OFF;
65122 else
65123 - pLed->BlinkingLedState = LED_ON;
65124 + pLed->BlinkingLedState = RTW_LED_ON;
65125 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
65126 }
65127 break;
65128 @@ -2249,9 +2256,9 @@ SwLedControlMode4(
65129 pLed->CurrLedState = LED_TXRX_BLINK;
65130 pLed->BlinkTimes = 2;
65131 if( pLed->bLedOn )
65132 - pLed->BlinkingLedState = LED_OFF;
65133 + pLed->BlinkingLedState = RTW_LED_OFF;
65134 else
65135 - pLed->BlinkingLedState = LED_ON;
65136 + pLed->BlinkingLedState = RTW_LED_ON;
65137 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
65138 }
65139 break;
65140 @@ -2263,8 +2270,8 @@ SwLedControlMode4(
65141 pLed1->bLedWPSBlinkInProgress = _FALSE;
65142 _cancel_timer_ex(&(pLed1->BlinkTimer));
65143
65144 - pLed1->BlinkingLedState = LED_OFF;
65145 - pLed1->CurrLedState = LED_OFF;
65146 + pLed1->BlinkingLedState = RTW_LED_OFF;
65147 + pLed1->CurrLedState = RTW_LED_OFF;
65148
65149 if(pLed1->bLedOn)
65150 _set_timer(&(pLed->BlinkTimer), 0);
65151 @@ -2291,12 +2298,12 @@ SwLedControlMode4(
65152 pLed->CurrLedState = LED_BLINK_WPS;
65153 if( pLed->bLedOn )
65154 {
65155 - pLed->BlinkingLedState = LED_OFF;
65156 + pLed->BlinkingLedState = RTW_LED_OFF;
65157 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);
65158 }
65159 else
65160 {
65161 - pLed->BlinkingLedState = LED_ON;
65162 + pLed->BlinkingLedState = RTW_LED_ON;
65163 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
65164 }
65165 }
65166 @@ -2312,9 +2319,9 @@ SwLedControlMode4(
65167 pLed->bLedNoLinkBlinkInProgress = _TRUE;
65168 pLed->CurrLedState = LED_BLINK_SLOWLY;
65169 if( pLed->bLedOn )
65170 - pLed->BlinkingLedState = LED_OFF;
65171 + pLed->BlinkingLedState = RTW_LED_OFF;
65172 else
65173 - pLed->BlinkingLedState = LED_ON;
65174 + pLed->BlinkingLedState = RTW_LED_ON;
65175 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
65176
65177 break;
65178 @@ -2329,9 +2336,9 @@ SwLedControlMode4(
65179 pLed->bLedNoLinkBlinkInProgress = _TRUE;
65180 pLed->CurrLedState = LED_BLINK_SLOWLY;
65181 if( pLed->bLedOn )
65182 - pLed->BlinkingLedState = LED_OFF;
65183 + pLed->BlinkingLedState = RTW_LED_OFF;
65184 else
65185 - pLed->BlinkingLedState = LED_ON;
65186 + pLed->BlinkingLedState = RTW_LED_ON;
65187 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
65188
65189 //LED1 settings
65190 @@ -2342,9 +2349,9 @@ SwLedControlMode4(
65191
65192 pLed1->CurrLedState = LED_BLINK_WPS_STOP;
65193 if( pLed1->bLedOn )
65194 - pLed1->BlinkingLedState = LED_OFF;
65195 + pLed1->BlinkingLedState = RTW_LED_OFF;
65196 else
65197 - pLed1->BlinkingLedState = LED_ON;
65198 + pLed1->BlinkingLedState = RTW_LED_ON;
65199 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
65200
65201 break;
65202 @@ -2359,9 +2366,9 @@ SwLedControlMode4(
65203 pLed->bLedNoLinkBlinkInProgress = _TRUE;
65204 pLed->CurrLedState = LED_BLINK_SLOWLY;
65205 if( pLed->bLedOn )
65206 - pLed->BlinkingLedState = LED_OFF;
65207 + pLed->BlinkingLedState = RTW_LED_OFF;
65208 else
65209 - pLed->BlinkingLedState = LED_ON;
65210 + pLed->BlinkingLedState = RTW_LED_ON;
65211 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
65212
65213 //LED1 settings
65214 @@ -2373,16 +2380,16 @@ SwLedControlMode4(
65215 pLed1->CurrLedState = LED_BLINK_WPS_STOP_OVERLAP;
65216 pLed1->BlinkTimes = 10;
65217 if( pLed1->bLedOn )
65218 - pLed1->BlinkingLedState = LED_OFF;
65219 + pLed1->BlinkingLedState = RTW_LED_OFF;
65220 else
65221 - pLed1->BlinkingLedState = LED_ON;
65222 + pLed1->BlinkingLedState = RTW_LED_ON;
65223 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
65224
65225 break;
65226
65227 case LED_CTL_POWER_OFF:
65228 - pLed->CurrLedState = LED_OFF;
65229 - pLed->BlinkingLedState = LED_OFF;
65230 + pLed->CurrLedState = RTW_LED_OFF;
65231 + pLed->BlinkingLedState = RTW_LED_OFF;
65232
65233 if( pLed->bLedNoLinkBlinkInProgress)
65234 {
65235 @@ -2456,8 +2463,8 @@ SwLedControlMode5(
65236 case LED_CTL_POWER_ON:
65237 case LED_CTL_NO_LINK:
65238 case LED_CTL_LINK: //solid blue
65239 - pLed->CurrLedState = LED_ON;
65240 - pLed->BlinkingLedState = LED_ON;
65241 + pLed->CurrLedState = RTW_LED_ON;
65242 + pLed->BlinkingLedState = RTW_LED_ON;
65243
65244 _set_timer(&(pLed->BlinkTimer), 0);
65245 break;
65246 @@ -2476,9 +2483,9 @@ SwLedControlMode5(
65247 pLed->CurrLedState = LED_SCAN_BLINK;
65248 pLed->BlinkTimes = 24;
65249 if( pLed->bLedOn )
65250 - pLed->BlinkingLedState = LED_OFF;
65251 + pLed->BlinkingLedState = RTW_LED_OFF;
65252 else
65253 - pLed->BlinkingLedState = LED_ON;
65254 + pLed->BlinkingLedState = RTW_LED_ON;
65255 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
65256 }
65257 break;
65258 @@ -2495,16 +2502,16 @@ SwLedControlMode5(
65259 pLed->CurrLedState = LED_TXRX_BLINK;
65260 pLed->BlinkTimes = 2;
65261 if( pLed->bLedOn )
65262 - pLed->BlinkingLedState = LED_OFF;
65263 + pLed->BlinkingLedState = RTW_LED_OFF;
65264 else
65265 - pLed->BlinkingLedState = LED_ON;
65266 + pLed->BlinkingLedState = RTW_LED_ON;
65267 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
65268 }
65269 break;
65270
65271 case LED_CTL_POWER_OFF:
65272 - pLed->CurrLedState = LED_OFF;
65273 - pLed->BlinkingLedState = LED_OFF;
65274 + pLed->CurrLedState = RTW_LED_OFF;
65275 + pLed->BlinkingLedState = RTW_LED_OFF;
65276
65277 if( pLed->bLedBlinkInProgress)
65278 {
65279 @@ -2540,8 +2547,8 @@ SwLedControlMode6(
65280 case LED_CTL_LINK:
65281 case LED_CTL_NO_LINK:
65282 _cancel_timer_ex(&(pLed0->BlinkTimer));
65283 - pLed0->CurrLedState = LED_ON;
65284 - pLed0->BlinkingLedState = LED_ON;
65285 + pLed0->CurrLedState = RTW_LED_ON;
65286 + pLed0->BlinkingLedState = RTW_LED_ON;
65287 _set_timer(&(pLed0->BlinkTimer), 0);
65288 break;
65289
65290 @@ -2553,7 +2560,7 @@ SwLedControlMode6(
65291 break;
65292 }
65293
65294 - RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("ledcontrol 6 Led %d\n", pLed->CurrLedState));
65295 + RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("ledcontrol 6 Led %d\n", pLed0->CurrLedState));
65296 }
65297
65298
65299 --- a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_recv.c
65300 +++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_recv.c
65301 @@ -16,8 +16,7 @@
65302 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
65303 *
65304 *
65305 -
65306 -******************************************************************************/
65307 + ******************************************************************************/
65308 #define _RTL8192CU_RECV_C_
65309 #include <drv_conf.h>
65310 #include <osdep_service.h>
65311 @@ -150,12 +149,7 @@ int rtl8192cu_init_recv_priv(_adapter *p
65312
65313 for(i=0; i<NR_PREALLOC_RECV_SKB; i++)
65314 {
65315 -
65316 - #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)) // http://www.mail-archive.com/netdev@vger.kernel.org/msg17214.html
65317 - pskb = dev_alloc_skb(MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);
65318 - #else
65319 - pskb = netdev_alloc_skb(padapter->pnetdev, MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);
65320 - #endif
65321 + pskb = rtw_skb_alloc(MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);
65322
65323 if(pskb)
65324 {
65325 @@ -216,7 +210,7 @@ void rtl8192cu_free_recv_priv (_adapter
65326 DBG_8192C(KERN_WARNING "rx_skb_queue not empty\n");
65327 }
65328
65329 - skb_queue_purge(&precvpriv->rx_skb_queue);
65330 + rtw_skb_queue_purge(&precvpriv->rx_skb_queue);
65331
65332 #ifdef CONFIG_PREALLOC_RECV_SKB
65333
65334 @@ -224,7 +218,7 @@ void rtl8192cu_free_recv_priv (_adapter
65335 DBG_8192C(KERN_WARNING "free_recv_skb_queue not empty, %d\n", skb_queue_len(&precvpriv->free_recv_skb_queue));
65336 }
65337
65338 - skb_queue_purge(&precvpriv->free_recv_skb_queue);
65339 + rtw_skb_queue_purge(&precvpriv->free_recv_skb_queue);
65340
65341 #endif
65342
65343 @@ -232,149 +226,4 @@ void rtl8192cu_free_recv_priv (_adapter
65344
65345 }
65346
65347 -void rtl8192cu_update_recvframe_attrib_from_recvstat(union recv_frame *precvframe, struct recv_stat *prxstat)
65348 -{
65349 - u8 physt, qos, shift, icverr, htc, crcerr;
65350 - u16 drvinfo_sz=0;
65351 - struct phy_stat *pphy_info;
65352 - struct rx_pkt_attrib *pattrib = &precvframe->u.hdr.attrib;
65353 - _adapter *padapter = precvframe->u.hdr.adapter;
65354 - u8 bPacketMatchBSSID =_FALSE;
65355 - u8 bPacketToSelf = _FALSE;
65356 - u8 bPacketBeacon = _FALSE;
65357 -
65358 -
65359 - //Offset 0
65360 - drvinfo_sz = (le32_to_cpu(prxstat->rxdw0)&0x000f0000)>>16;
65361 - drvinfo_sz = drvinfo_sz<<3;
65362 -
65363 - pattrib->bdecrypted = ((le32_to_cpu(prxstat->rxdw0) & BIT(27)) >> 27)? 0:1;
65364 -
65365 - physt = ((le32_to_cpu(prxstat->rxdw0) & BIT(26)) >> 26)? 1:0;
65366 -
65367 - shift = (le32_to_cpu(prxstat->rxdw0)&0x03000000)>>24;
65368 -
65369 - qos = ((le32_to_cpu(prxstat->rxdw0) & BIT(23)) >> 23)? 1:0;
65370 -
65371 - icverr = ((le32_to_cpu(prxstat->rxdw0) & BIT(15)) >> 15)? 1:0;
65372 -
65373 - pattrib->crc_err = crcerr = ((le32_to_cpu(prxstat->rxdw0) & BIT(14)) >> 14 )? 1:0;
65374 -
65375 -
65376 - //Offset 4
65377 -
65378 - //Offset 8
65379 -
65380 - //Offset 12
65381 -#ifdef CONFIG_TCP_CSUM_OFFLOAD_RX
65382 - if ( le32_to_cpu(prxstat->rxdw3) & BIT(13)) {
65383 - pattrib->tcpchk_valid = 1; // valid
65384 - if ( le32_to_cpu(prxstat->rxdw3) & BIT(11) ) {
65385 - pattrib->tcp_chkrpt = 1; // correct
65386 - //DBG_8192C("tcp csum ok\n");
65387 - } else
65388 - pattrib->tcp_chkrpt = 0; // incorrect
65389 -
65390 - if ( le32_to_cpu(prxstat->rxdw3) & BIT(12) )
65391 - pattrib->ip_chkrpt = 1; // correct
65392 - else
65393 - pattrib->ip_chkrpt = 0; // incorrect
65394 -
65395 - } else {
65396 - pattrib->tcpchk_valid = 0; // invalid
65397 - }
65398 -
65399 -#endif
65400 -
65401 - pattrib->mcs_rate=(u8)((le32_to_cpu(prxstat->rxdw3))&0x3f);
65402 - pattrib->rxht=(u8)((le32_to_cpu(prxstat->rxdw3) >>6)&0x1);
65403 -
65404 - htc = (u8)((le32_to_cpu(prxstat->rxdw3) >>10)&0x1);
65405 -
65406 - //Offset 16
65407 - //Offset 20
65408 -
65409 -
65410 -#if 0 //dump rxdesc for debug
65411 - DBG_8192C("drvinfo_sz=%d\n", drvinfo_sz);
65412 - DBG_8192C("physt=%d\n", physt);
65413 - DBG_8192C("shift=%d\n", shift);
65414 - DBG_8192C("qos=%d\n", qos);
65415 - DBG_8192C("icverr=%d\n", icverr);
65416 - DBG_8192C("htc=%d\n", htc);
65417 - DBG_8192C("bdecrypted=%d\n", pattrib->bdecrypted);
65418 - DBG_8192C("mcs_rate=%d\n", pattrib->mcs_rate);
65419 - DBG_8192C("rxht=%d\n", pattrib->rxht);
65420 -#endif
65421 -
65422 - //phy_info
65423 - if(drvinfo_sz && physt)
65424 - {
65425 - bPacketMatchBSSID = ((!IsFrameTypeCtrl(precvframe->u.hdr.rx_data)) && !icverr && !crcerr &&
65426 - _rtw_memcmp(get_hdr_bssid(precvframe->u.hdr.rx_data), get_bssid(&padapter->mlmepriv), ETH_ALEN));
65427 -
65428 - bPacketToSelf = bPacketMatchBSSID && (_rtw_memcmp(get_da(precvframe->u.hdr.rx_data), myid(&padapter->eeprompriv), ETH_ALEN));
65429 -
65430 - bPacketBeacon = (GetFrameSubType(precvframe->u.hdr.rx_data) == WIFI_BEACON);
65431 -
65432 -
65433 - pphy_info = (struct phy_stat *)(prxstat+1);
65434 -
65435 - //DBG_8192C("pphy_info, of0=0x%08x\n", *pphy_info);
65436 - //DBG_8192C("pphy_info, of1=0x%08x\n", *(pphy_info+1));
65437 - //DBG_8192C("pphy_info, of2=0x%08x\n", *(pphy_info+2));
65438 - //DBG_8192C("pphy_info, of3=0x%08x\n", *(pphy_info+3));
65439 - //DBG_8192C("pphy_info, of4=0x%08x\n", *(pphy_info+4));
65440 - //DBG_8192C("pphy_info, of5=0x%08x\n", *(pphy_info+5));
65441 - //DBG_8192C("pphy_info, of6=0x%08x\n", *(pphy_info+6));
65442 - //DBG_8192C("pphy_info, of7=0x%08x\n", *(pphy_info+7));
65443 -
65444 - rtl8192c_query_rx_phy_status(precvframe, pphy_info);
65445 -
65446 - precvframe->u.hdr.psta = NULL;
65447 - if(bPacketMatchBSSID && check_fwstate(&padapter->mlmepriv, WIFI_AP_STATE) == _TRUE)
65448 - {
65449 - u8 *sa;
65450 - struct sta_info *psta=NULL;
65451 - struct sta_priv *pstapriv = &padapter->stapriv;
65452 -
65453 - sa = get_sa(precvframe->u.hdr.rx_data);
65454 -
65455 - psta = rtw_get_stainfo(pstapriv, sa);
65456 - if(psta)
65457 - {
65458 - precvframe->u.hdr.psta = psta;
65459 - rtl8192c_process_phy_info(padapter, precvframe);
65460 - }
65461 - }
65462 - else if( bPacketToSelf || (bPacketBeacon && bPacketMatchBSSID) )
65463 - {
65464 - if(check_fwstate(&padapter->mlmepriv, WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE) == _TRUE)
65465 - {
65466 - u8 *sa;
65467 - struct sta_info *psta=NULL;
65468 - struct sta_priv *pstapriv = &padapter->stapriv;
65469 -
65470 - sa = get_sa(precvframe->u.hdr.rx_data);
65471 -
65472 - psta = rtw_get_stainfo(pstapriv, sa);
65473 - if(psta)
65474 - {
65475 - precvframe->u.hdr.psta = psta;
65476 - }
65477 - }
65478 -
65479 - rtl8192c_process_phy_info(padapter, precvframe);
65480 - }
65481 -
65482 -#if 0 //dump phy_status for debug
65483 -
65484 - DBG_8192C("signal_qual=%d\n", pattrib->signal_qual);
65485 - DBG_8192C("signal_strength=%d\n", pattrib->signal_strength);
65486 -#endif
65487 -
65488 - }
65489 -
65490 -
65491 -}
65492
65493 --- a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_xmit.c
65494 +++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_xmit.c
65495 @@ -16,8 +16,7 @@
65496 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
65497 *
65498 *
65499 -
65500 -******************************************************************************/
65501 + ******************************************************************************/
65502 #define _RTL8192C_XMIT_C_
65503 #include <drv_conf.h>
65504 #include <osdep_service.h>
65505 @@ -95,7 +94,7 @@ u32 rtw_get_ff_hwaddr(struct xmit_frame
65506 int urb_zero_packet_chk(_adapter *padapter, int sz)
65507 {
65508 int blnSetTxDescOffset;
65509 - struct dvobj_priv *pdvobj = (struct dvobj_priv*)&padapter->dvobjpriv;
65510 + struct dvobj_priv *pdvobj = adapter_to_dvobj(padapter);
65511
65512 if ( pdvobj->ishighspeed )
65513 {
65514 @@ -165,7 +164,7 @@ void fill_txdesc_sectype(struct pkt_attr
65515
65516 }
65517
65518 -void fill_txdesc_vcs(struct pkt_attrib *pattrib, u32 *pdw)
65519 +static void fill_txdesc_vcs(struct pkt_attrib *pattrib, u32 *pdw)
65520 {
65521 //DBG_8192C("cvs_mode=%d\n", pattrib->vcs_mode);
65522
65523 @@ -182,14 +181,27 @@ void fill_txdesc_vcs(struct pkt_attrib *
65524 break;
65525 }
65526
65527 - if(pattrib->vcs_mode)
65528 - {
65529 - *pdw |= cpu_to_le32(BIT(13));//ENABLE HW RTS
65530 - }
65531 + if(pattrib->vcs_mode) {
65532 + *pdw |= cpu_to_le32(BIT(13));
65533 +
65534 + // Set RTS BW
65535 + if(pattrib->ht_en)
65536 + {
65537 + *pdw |= (pattrib->bwmode&HT_CHANNEL_WIDTH_40)? cpu_to_le32(BIT(27)):0;
65538
65539 + if(pattrib->ch_offset == HAL_PRIME_CHNL_OFFSET_LOWER)
65540 + *pdw |= cpu_to_le32((0x01<<28)&0x30000000);
65541 + else if(pattrib->ch_offset == HAL_PRIME_CHNL_OFFSET_UPPER)
65542 + *pdw |= cpu_to_le32((0x02<<28)&0x30000000);
65543 + else if(pattrib->ch_offset == HAL_PRIME_CHNL_OFFSET_DONT_CARE)
65544 + *pdw |= 0;
65545 + else
65546 + *pdw |= cpu_to_le32((0x03<<28)&0x30000000);
65547 + }
65548 + }
65549 }
65550
65551 -void fill_txdesc_phy(struct pkt_attrib *pattrib, u32 *pdw)
65552 +static void fill_txdesc_phy(struct pkt_attrib *pattrib, u32 *pdw)
65553 {
65554 //DBG_8192C("bwmode=%d, ch_off=%d\n", pattrib->bwmode, pattrib->ch_offset);
65555
65556 @@ -198,220 +210,17 @@ void fill_txdesc_phy(struct pkt_attrib *
65557 *pdw |= (pattrib->bwmode&HT_CHANNEL_WIDTH_40)? cpu_to_le32(BIT(25)):0;
65558
65559 if(pattrib->ch_offset == HAL_PRIME_CHNL_OFFSET_LOWER)
65560 - *pdw |= cpu_to_le32((0x01<<20)&0x003f0000);
65561 + *pdw |= cpu_to_le32((0x01<<20)&0x00300000);
65562 else if(pattrib->ch_offset == HAL_PRIME_CHNL_OFFSET_UPPER)
65563 - *pdw |= cpu_to_le32((0x02<<20)&0x003f0000);
65564 + *pdw |= cpu_to_le32((0x02<<20)&0x00300000);
65565 else if(pattrib->ch_offset == HAL_PRIME_CHNL_OFFSET_DONT_CARE)
65566 *pdw |= 0;
65567 else
65568 - *pdw |= cpu_to_le32((0x03<<20)&0x003f0000);
65569 + *pdw |= cpu_to_le32((0x03<<20)&0x00300000);
65570 }
65571 }
65572
65573 -#ifdef CONFIG_USB_TX_AGGREGATION
65574 -static void _update_txdesc(struct xmit_frame *pxmitframe, u8 *pmem, int sz)
65575 -{
65576 - uint qsel;
65577 - _adapter *padapter = pxmitframe->padapter;
65578 - struct ht_priv *phtpriv = &padapter->mlmepriv.htpriv;
65579 - struct mlme_ext_info *pmlmeinfo = &padapter->mlmeextpriv.mlmext_info;
65580 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
65581 - struct dm_priv *pdmpriv = &pHalData->dmpriv;
65582 - struct pkt_attrib *pattrib = &pxmitframe->attrib;
65583 - sint bmcst = IS_MCAST(pattrib->ra);
65584 - struct tx_desc *ptxdesc = (struct tx_desc*)pmem;
65585 -
65586 -
65587 - _rtw_memset(ptxdesc, 0, sizeof(struct tx_desc));
65588 -
65589 - //4 offset 0
65590 - ptxdesc->txdw0 |= cpu_to_le32(sz & 0x0000ffff);
65591 - ptxdesc->txdw0 |= cpu_to_le32(OWN | FSG | LSG);
65592 - ptxdesc->txdw0 |= cpu_to_le32(((TXDESC_SIZE + OFFSET_SZ) << OFFSET_SHT) & 0x00ff0000);//32 bytes for TX Desc
65593 -
65594 - if (bmcst) ptxdesc->txdw0 |= cpu_to_le32(BIT(24));
65595 -
65596 - RT_TRACE(_module_rtl871x_xmit_c_, _drv_info_,
65597 - ("update_txdesc: offset0=0x%08x\n", ptxdesc->txdw0));
65598 -
65599 - //4 offset 4
65600 - // pkt_offset, unit:8 bytes padding
65601 - if (pxmitframe->pkt_offset > 0)
65602 - ptxdesc->txdw1 |= cpu_to_le32((pxmitframe->pkt_offset << 26) & 0x7c000000);
65603 -
65604 -#ifdef CONFIG_USB_TX_AGGREGATION
65605 - if (pxmitframe->agg_num > 1)
65606 - ptxdesc->txdw5 |= cpu_to_le32((pxmitframe->agg_num << 24) & 0xff000000);
65607 -#endif
65608 -
65609 - if (pxmitframe->frame_tag == DATA_FRAMETAG)
65610 - {
65611 - //4 offset 4
65612 - ptxdesc->txdw1 |= cpu_to_le32(pattrib->mac_id&0x1f);
65613 -
65614 - qsel = (uint)(pattrib->qsel & 0x0000001f);
65615 - ptxdesc->txdw1 |= cpu_to_le32((qsel << QSEL_SHT) & 0x00001f00);
65616 -
65617 - ptxdesc->txdw1 |= cpu_to_le32((pattrib->raid << 16) & 0x000f0000);
65618 -
65619 - fill_txdesc_sectype(pattrib, ptxdesc);
65620 -
65621 - if(pattrib->ampdu_en==_TRUE)
65622 - ptxdesc->txdw1 |= cpu_to_le32(BIT(5));//AGG EN
65623 - else
65624 - ptxdesc->txdw1 |= cpu_to_le32(BIT(6));//AGG BK
65625 -
65626 -
65627 - //4 offset 8
65628 -
65629 -
65630 - //4 offset 12
65631 - ptxdesc->txdw3 |= cpu_to_le32((pattrib->seqnum << 16) & 0xffff0000);
65632 -
65633 -
65634 - //4 offset 16 , offset 20
65635 - if (pattrib->qos_en)
65636 - ptxdesc->txdw4 |= cpu_to_le32(BIT(6));//QoS
65637 -
65638 - if ((pattrib->ether_type != 0x888e) &&
65639 - (pattrib->ether_type != 0x0806) &&
65640 - (pattrib->dhcp_pkt != 1))
65641 - {
65642 - //Non EAP & ARP & DHCP type data packet
65643 -
65644 - fill_txdesc_vcs(pattrib, &ptxdesc->txdw4);
65645 - fill_txdesc_phy(pattrib, &ptxdesc->txdw4);
65646 -
65647 - ptxdesc->txdw4 |= cpu_to_le32(0x00000008);//RTS Rate=24M
65648 - ptxdesc->txdw5 |= cpu_to_le32(0x0001ff00);
65649 - //ptxdesc->txdw5 |= cpu_to_le32(0x0000000b);//DataRate - 54M
65650 -
65651 - #ifdef SUPPORT_64_STA
65652 - if(pattrib->mac_id>FW_CTRL_MACID ){
65653 - ptxdesc->txdw5 |= cpu_to_le32(pattrib->psta->init_rate);
65654 - ptxdesc->txdw4 |=cpu_to_le32(0x00000100); //USE RATE
65655 - ptxdesc->txdw3 |=cpu_to_le32(BIT(28)); //PKT_ID
65656 - //printk("%s pattrib->mac_id=%d ptxdesc->txdw3=0x%x,ptxdesc->txdw4=0x%x,ptxdesc->txdw5=0x%x\n",__FUNCTION__,pattrib->mac_id,ptxdesc->txdw3,ptxdesc->txdw4,ptxdesc->txdw5);
65657 - }
65658 - else //use REG_INIDATA_RATE_SEL value
65659 - ptxdesc->txdw5 |= cpu_to_le32(pdmpriv->INIDATA_RATE[pattrib->mac_id]);
65660 - if(pattrib->mac_id==1){
65661 - //bcmc sta
65662 - ptxdesc->txdw5 |= cpu_to_le32(padapter->registrypriv.bcmc_rate);
65663 - ptxdesc->txdw4 |=cpu_to_le32(0x00000100); //USE RATE
65664 - }
65665 - #else //SUPPORT_64_STA
65666 -
65667 - //use REG_INIDATA_RATE_SEL value
65668 - ptxdesc->txdw5 |= cpu_to_le32(pdmpriv->INIDATA_RATE[pattrib->mac_id]);
65669 - #endif //SUPPORT_64_STA
65670 -
65671 - if (0)//for driver dbg
65672 - {
65673 - ptxdesc->txdw4 |= cpu_to_le32(BIT(8));//driver uses rate
65674 -
65675 - if (pattrib->ht_en)
65676 - ptxdesc->txdw5 |= cpu_to_le32(BIT(6));//SGI
65677 -
65678 - ptxdesc->txdw5 |= cpu_to_le32(0x00000013);//init rate - mcs7
65679 - }
65680 - }
65681 - else
65682 - {
65683 - // EAP data packet and ARP packet.
65684 - // Use the 1M data rate to send the EAP/ARP packet.
65685 - // This will maybe make the handshake smooth.
65686 -
65687 - ptxdesc->txdw1 |= cpu_to_le32(BIT(6));//AGG BK
65688 - ptxdesc->txdw4 |= cpu_to_le32(BIT(8));//driver uses rate
65689 - }
65690 -
65691 -
65692 - //4 offset 24
65693 -#ifdef CONFIG_TCP_CSUM_OFFLOAD_TX
65694 - if (pattrib->hw_tcp_csum == 1) {
65695 - // ptxdesc->txdw6 = 0; // clear TCP_CHECKSUM and IP_CHECKSUM. It's zero already!!
65696 - u8 ip_hdr_offset = 32 + pattrib->hdrlen + pattrib->iv_len + 8;
65697 - ptxdesc->txdw7 = (1 << 31) | (ip_hdr_offset << 16);
65698 - DBG_8192C("ptxdesc->txdw7 = %08x\n", ptxdesc->txdw7);
65699 - }
65700 -#endif
65701 - }
65702 - else if(pxmitframe->frame_tag == MGNT_FRAMETAG)
65703 - {
65704 - //DBG_8192C("pxmitframe->frame_tag == MGNT_FRAMETAG\n");
65705 -
65706 - //4 offset 4
65707 - ptxdesc->txdw1 |= cpu_to_le32(pattrib->mac_id&0x1f);
65708 -
65709 - qsel = (uint)(pattrib->qsel&0x0000001f);
65710 - ptxdesc->txdw1 |= cpu_to_le32((qsel << QSEL_SHT) & 0x00001f00);
65711 -
65712 - ptxdesc->txdw1 |= cpu_to_le32((pattrib->raid<< 16) & 0x000f0000);
65713 -
65714 - //fill_txdesc_sectype(pattrib, ptxdesc);
65715 -
65716 -
65717 - //4 offset 8
65718 -
65719 -
65720 - //4 offset 12
65721 - ptxdesc->txdw3 |= cpu_to_le32((pattrib->seqnum<<16)&0xffff0000);
65722 -
65723 -
65724 - //4 offset 16
65725 - ptxdesc->txdw4 |= cpu_to_le32(BIT(8));//driver uses rate
65726 -
65727 -
65728 - //4 offset 20
65729 - }
65730 - else if(pxmitframe->frame_tag == TXAGG_FRAMETAG)
65731 - {
65732 - DBG_8192C("pxmitframe->frame_tag == TXAGG_FRAMETAG\n");
65733 - }
65734 - else
65735 - {
65736 - DBG_8192C("pxmitframe->frame_tag = %d\n", pxmitframe->frame_tag);
65737 -
65738 - //4 offset 4
65739 - ptxdesc->txdw1 |= cpu_to_le32((4)&0x1f);//CAM_ID(MAC_ID)
65740 -
65741 - ptxdesc->txdw1 |= cpu_to_le32((6<< 16) & 0x000f0000);//raid
65742 -
65743 -
65744 - //4 offset 8
65745 -
65746 -
65747 - //4 offset 12
65748 - ptxdesc->txdw3 |= cpu_to_le32((pattrib->seqnum << 16) & 0xffff0000);
65749 -
65750 -
65751 - //4 offset 16
65752 - ptxdesc->txdw4 |= cpu_to_le32(BIT(8));//driver uses rate
65753 -
65754 -
65755 - //4 offset 20
65756 - }
65757 -
65758 - // 2009.11.05. tynli_test. Suggested by SD4 Filen for FW LPS.
65759 - // (1) The sequence number of each non-Qos frame / broadcast / multicast /
65760 - // mgnt frame should be controled by Hw because Fw will also send null data
65761 - // which we cannot control when Fw LPS enable.
65762 - // --> default enable non-Qos data sequense number. 2010.06.23. by tynli.
65763 - // (2) Enable HW SEQ control for beacon packet, because we use Hw beacon.
65764 - // (3) Use HW Qos SEQ to control the seq num of Ext port non-Qos packets.
65765 - // 2010.06.23. Added by tynli.
65766 - if(!pattrib->qos_en)
65767 - {
65768 - ptxdesc->txdw4 |= cpu_to_le32(BIT(7)); // Hw set sequence number
65769 - ptxdesc->txdw3 |= cpu_to_le32((8 <<28)); //set bit3 to 1. Suugested by TimChen. 2009.12.29.
65770 - }
65771 -
65772 - rtl8192cu_cal_txdesc_chksum(ptxdesc);
65773 -}
65774 -#endif
65775 -
65776 -static s32 update_txdesc(struct xmit_frame *pxmitframe, u8 *pmem, s32 sz)
65777 +static s32 update_txdesc(struct xmit_frame *pxmitframe, u8 *pmem, s32 sz, u8 bagg_pkt)
65778 {
65779 int pull=0;
65780 uint qsel;
65781 @@ -422,17 +231,19 @@ static s32 update_txdesc(struct xmit_fra
65782 struct dm_priv *pdmpriv = &pHalData->dmpriv;
65783 struct tx_desc *ptxdesc = (struct tx_desc *)pmem;
65784 struct ht_priv *phtpriv = &pmlmepriv->htpriv;
65785 - struct mlme_ext_info *pmlmeinfo = &padapter->mlmeextpriv.mlmext_info;
65786 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
65787 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
65788 sint bmcst = IS_MCAST(pattrib->ra);
65789 #ifdef CONFIG_P2P
65790 struct wifidirect_info* pwdinfo = &padapter->wdinfo;
65791 #endif //CONFIG_P2P
65792
65793 #ifndef CONFIG_USE_USB_BUFFER_ALLOC_TX
65794 - if(urb_zero_packet_chk(padapter, sz)==0)
65795 + if((_FALSE == bagg_pkt) && (urb_zero_packet_chk(padapter, sz)==0))
65796 {
65797 ptxdesc = (struct tx_desc *)(pmem+PACKET_OFFSET_SZ);
65798 pull = 1;
65799 + pxmitframe->pkt_offset --;
65800 }
65801 #endif // CONFIG_USE_USB_BUFFER_ALLOC_TX
65802
65803 @@ -452,14 +263,13 @@ static s32 update_txdesc(struct xmit_fra
65804
65805 fill_txdesc_sectype(pattrib, ptxdesc);
65806
65807 -
65808 if(pattrib->ampdu_en==_TRUE)
65809 ptxdesc->txdw1 |= cpu_to_le32(BIT(5));//AGG EN
65810 else
65811 ptxdesc->txdw1 |= cpu_to_le32(BIT(6));//AGG BK
65812
65813 //offset 8
65814 -
65815 +
65816
65817 //offset 12
65818 ptxdesc->txdw3 |= cpu_to_le32((pattrib->seqnum<<16)&0xffff0000);
65819 @@ -480,26 +290,9 @@ static s32 update_txdesc(struct xmit_fra
65820 ptxdesc->txdw5 |= cpu_to_le32(0x0001ff00);//
65821 //ptxdesc->txdw5 |= cpu_to_le32(0x0000000b);//DataRate - 54M
65822
65823 -
65824 - #ifdef SUPPORT_64_STA
65825 - if(pattrib->mac_id>=FW_CTRL_MACID ){
65826 - ptxdesc->txdw5 |= cpu_to_le32(pattrib->psta->init_rate);
65827 - ptxdesc->txdw4 |=cpu_to_le32(0x00000100); //USE RATE
65828 - ptxdesc->txdw3 |=cpu_to_le32(BIT(28)); //PKT_ID
65829 - //printk("%s pattrib->mac_id=%d\n",__FUNCTION__,pattrib->mac_id);
65830 - //printk("%s pattrib->mac_id=%d ptxdesc->txdw1=0x%x,ptxdesc->txdw3=0x%x,\nptxdesc->txdw4=0x%x,ptxdesc->txdw5=0x%x\n",__FUNCTION__,pattrib->mac_id,ptxdesc->txdw1,ptxdesc->txdw3,ptxdesc->txdw4,ptxdesc->txdw5);
65831 - }
65832 - else //use REG_INIDATA_RATE_SEL value
65833 - ptxdesc->txdw5 |= cpu_to_le32(pdmpriv->INIDATA_RATE[pattrib->mac_id]);
65834 - if(pattrib->mac_id==1){
65835 - //bcmc sta
65836 - ptxdesc->txdw5 |= cpu_to_le32(padapter->registrypriv.bcmc_rate);
65837 - ptxdesc->txdw4 |=cpu_to_le32(0x00000100); //USE RATE
65838 - }
65839 - #else //SUPPORT_64_STA
65840 //use REG_INIDATA_RATE_SEL value
65841 ptxdesc->txdw5 |= cpu_to_le32(pdmpriv->INIDATA_RATE[pattrib->mac_id]);
65842 - #endif //SUPPORT_64_STA
65843 +
65844 if(0)//for driver dbg
65845 {
65846 ptxdesc->txdw4 |= cpu_to_le32(BIT(8));//driver uses rate
65847 @@ -521,20 +314,13 @@ static s32 update_txdesc(struct xmit_fra
65848
65849 ptxdesc->txdw4 |= cpu_to_le32(BIT(8));//driver uses rate
65850
65851 -#ifdef CONFIG_P2P
65852 - // Added by Albert 2011/03/22
65853 - // In the P2P mode, the driver should not support the b mode.
65854 - // So, the Tx packet shouldn't use the CCK rate
65855 - if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
65856 - {
65857 - ptxdesc->txdw5 |= cpu_to_le32( 0x04 ); // Use the 6M data rate.
65858 - }
65859 -#endif //CONFIG_P2P
65860 + if (pmlmeinfo->preamble_mode == PREAMBLE_SHORT)
65861 + ptxdesc->txdw4 |= cpu_to_le32(BIT(24));// DATA_SHORT
65862
65863 + ptxdesc->txdw5 |= cpu_to_le32(MRateToHwRate(pmlmeext->tx_rate));
65864 }
65865
65866 //offset 24
65867 -
65868 #ifdef CONFIG_TCP_CSUM_OFFLOAD_TX
65869 if ( pattrib->hw_tcp_csum == 1 ) {
65870 // ptxdesc->txdw6 = 0; // clear TCP_CHECKSUM and IP_CHECKSUM. It's zero already!!
65871 @@ -559,6 +345,15 @@ static s32 update_txdesc(struct xmit_fra
65872 //fill_txdesc_sectype(pattrib, ptxdesc);
65873
65874 //offset 8
65875 +#ifdef CONFIG_XMIT_ACK
65876 + //CCX-TXRPT ack for xmit mgmt frames.
65877 + if (pxmitframe->ack_report) {
65878 + ptxdesc->txdw2 |= cpu_to_le32(BIT(19));
65879 + #ifdef DBG_CCX
65880 + DBG_871X("%s set ccx\n", __func__);
65881 + #endif
65882 + }
65883 +#endif //CONFIG_XMIT_ACK
65884
65885 //offset 12
65886 ptxdesc->txdw3 |= cpu_to_le32((pattrib->seqnum<<16)&0xffff0000);
65887 @@ -569,26 +364,34 @@ static s32 update_txdesc(struct xmit_fra
65888 //offset 20
65889 ptxdesc->txdw5 |= cpu_to_le32(BIT(17));//retry limit enable
65890 if(pattrib->retry_ctrl == _TRUE)
65891 - ptxdesc->txdw5 |= cpu_to_le32(0x00180000);//retry limit = 6
65892 - else
65893 - ptxdesc->txdw5 |= cpu_to_le32(0x00300000);//retry limit = 12
65894 -
65895 -#ifdef CONFIG_P2P
65896 - // Added by Albert 2011/03/17
65897 - // In the P2P mode, the driver should not support the b mode.
65898 - // So, the Tx packet shouldn't use the CCK rate
65899 - if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
65900 {
65901 - ptxdesc->txdw5 |= cpu_to_le32( 0x04 ); // Use the 6M data rate.
65902 - }
65903 +#ifdef CONFIG_P2P
65904 + if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
65905 + {
65906 +#ifdef CONFIG_INTEL_WIDI
65907 + if(padapter->mlmepriv.widi_enable == _TRUE)
65908 + ptxdesc->txdw5 |= cpu_to_le32(0x00180000);//retry limit = 6
65909 + else
65910 +#endif //CONFIG_INTEL_WIDI
65911 + ptxdesc->txdw5 |= cpu_to_le32(0x00080000);//retry limit = 2
65912 + }
65913 + else
65914 #endif //CONFIG_P2P
65915 + ptxdesc->txdw5 |= cpu_to_le32(0x00180000);//retry limit = 6
65916 + }
65917 + else
65918 + ptxdesc->txdw5 |= cpu_to_le32(0x00300000);//retry limit = 12
65919
65920 #ifdef CONFIG_INTEL_PROXIM
65921 if((padapter->proximity.proxim_on==_TRUE)&&(pattrib->intel_proxim==_TRUE)){
65922 printk("\n %s pattrib->rate=%d\n",__FUNCTION__,pattrib->rate);
65923 ptxdesc->txdw5 |= cpu_to_le32( pattrib->rate);
65924 }
65925 + else
65926 #endif
65927 + {
65928 + ptxdesc->txdw5 |= cpu_to_le32(MRateToHwRate(pmlmeext->tx_rate));
65929 + }
65930 }
65931 else if((pxmitframe->frame_tag&0x0f) == TXAGG_FRAMETAG)
65932 {
65933 @@ -618,6 +421,7 @@ static s32 update_txdesc(struct xmit_fra
65934 ptxdesc->txdw4 |= cpu_to_le32(BIT(8));//driver uses rate
65935
65936 //offset 20
65937 + ptxdesc->txdw5 |= cpu_to_le32(MRateToHwRate(pmlmeext->tx_rate));
65938 }
65939
65940 // 2009.11.05. tynli_test. Suggested by SD4 Filen for FW LPS.
65941 @@ -647,7 +451,14 @@ static s32 update_txdesc(struct xmit_fra
65942 RT_TRACE(_module_rtl871x_xmit_c_,_drv_info_,("offset0-txdesc=0x%x\n", ptxdesc->txdw0));
65943
65944 //offset 4
65945 - if(!pull) ptxdesc->txdw1 |= cpu_to_le32((0x01<<26)&0xff000000);//pkt_offset, unit:8 bytes padding
65946 + // pkt_offset, unit:8 bytes padding
65947 + if (pxmitframe->pkt_offset > 0)
65948 + ptxdesc->txdw1 |= cpu_to_le32((pxmitframe->pkt_offset << 26) & 0x7c000000);
65949 +
65950 +#ifdef CONFIG_USB_TX_AGGREGATION
65951 + if (pxmitframe->agg_num > 1)
65952 + ptxdesc->txdw5 |= cpu_to_le32((pxmitframe->agg_num << 24) & 0xff000000);
65953 +#endif
65954
65955 rtl8192cu_cal_txdesc_chksum(ptxdesc);
65956
65957 @@ -655,8 +466,10 @@ static s32 update_txdesc(struct xmit_fra
65958
65959 }
65960
65961 -static void _rtw_dump_xframe(_adapter *padapter, struct xmit_frame *pxmitframe, u8 sync)
65962 +static s32 rtw_dump_xframe(_adapter *padapter, struct xmit_frame *pxmitframe)
65963 {
65964 + s32 ret = _SUCCESS;
65965 + s32 inner_ret = _SUCCESS;
65966 int t, sz, w_sz, pull=0;
65967 u8 *mem_addr;
65968 u32 ff_hwaddr;
65969 @@ -679,6 +492,9 @@ static void _rtw_dump_xframe(_adapter *p
65970
65971 for (t = 0; t < pattrib->nr_frags; t++)
65972 {
65973 + if (inner_ret != _SUCCESS && ret == _SUCCESS)
65974 + ret = _FAIL;
65975 +
65976 if (t != (pattrib->nr_frags - 1))
65977 {
65978 RT_TRACE(_module_rtl871x_xmit_c_,_drv_err_,("pattrib->nr_frags=%d\n", pattrib->nr_frags));
65979 @@ -691,7 +507,7 @@ static void _rtw_dump_xframe(_adapter *p
65980 sz = pattrib->last_txcmdsz;
65981 }
65982
65983 - pull = update_txdesc(pxmitframe, mem_addr, sz);
65984 + pull = update_txdesc(pxmitframe, mem_addr, sz, _FALSE);
65985
65986 if(pull)
65987 {
65988 @@ -709,10 +525,7 @@ static void _rtw_dump_xframe(_adapter *p
65989
65990 ff_hwaddr = rtw_get_ff_hwaddr(pxmitframe);
65991
65992 - if(sync == _TRUE)
65993 - rtw_write_port_sync(padapter, ff_hwaddr, w_sz, (unsigned char*)pxmitbuf);
65994 - else
65995 - rtw_write_port(padapter, ff_hwaddr, w_sz, (unsigned char*)pxmitbuf);
65996 + inner_ret = rtw_write_port(padapter, ff_hwaddr, w_sz, (unsigned char*)pxmitbuf);
65997
65998 rtw_count_tx_stats(padapter, pxmitframe, sz);
65999
66000 @@ -726,18 +539,12 @@ static void _rtw_dump_xframe(_adapter *p
66001
66002 }
66003
66004 - rtw_free_xmitframe_ex(pxmitpriv, pxmitframe);
66005 -
66006 -}
66007 + rtw_free_xmitframe(pxmitpriv, pxmitframe);
66008
66009 -inline void rtw_dump_xframe(_adapter *padapter, struct xmit_frame *pxmitframe)
66010 -{
66011 - _rtw_dump_xframe(padapter, pxmitframe, _FALSE);
66012 -}
66013 + if (ret != _SUCCESS)
66014 + rtw_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_UNKNOWN);
66015
66016 -inline void rtw_dump_xframe_sync(_adapter *padapter, struct xmit_frame *pxmitframe)
66017 -{
66018 - _rtw_dump_xframe(padapter, pxmitframe, _TRUE);
66019 + return ret;
66020 }
66021
66022 #ifdef CONFIG_USB_TX_AGGREGATION
66023 @@ -767,7 +574,7 @@ s32 rtl8192cu_xmitframe_complete(_adapte
66024 struct xmit_frame *pfirstframe = NULL;
66025
66026 // aggregate variable
66027 -// struct hw_xmit *phwxmit;
66028 + struct hw_xmit *phwxmit;
66029 struct sta_info *psta = NULL;
66030 struct tx_servq *ptxservq = NULL;
66031
66032 @@ -801,7 +608,7 @@ s32 rtl8192cu_xmitframe_complete(_adapte
66033
66034 //3 1. pick up first frame
66035 do {
66036 - rtw_free_xmitframe_ex(pxmitpriv, pxmitframe);
66037 + rtw_free_xmitframe(pxmitpriv, pxmitframe);
66038
66039 pxmitframe = rtw_dequeue_xframe(pxmitpriv, pxmitpriv->hwxmits, pxmitpriv->hwxmit_entry);
66040 if (pxmitframe == NULL) {
66041 @@ -816,7 +623,7 @@ s32 rtl8192cu_xmitframe_complete(_adapte
66042 RT_TRACE(_module_rtl8192c_xmit_c_, _drv_err_,
66043 ("xmitframe_complete: frame tag(%d) is not DATA_FRAMETAG(%d)!\n",
66044 pxmitframe->frame_tag, DATA_FRAMETAG));
66045 -// rtw_free_xmitframe_ex(pxmitpriv, pxmitframe);
66046 +// rtw_free_xmitframe(pxmitpriv, pxmitframe);
66047 continue;
66048 }
66049
66050 @@ -826,7 +633,7 @@ s32 rtl8192cu_xmitframe_complete(_adapte
66051 RT_TRACE(_module_rtl8192c_xmit_c_, _drv_err_,
66052 ("xmitframe_complete: TID(%d) should be 0~15!\n",
66053 pxmitframe->attrib.priority));
66054 -// rtw_free_xmitframe_ex(pxmitpriv, pxmitframe);
66055 +// rtw_free_xmitframe(pxmitpriv, pxmitframe);
66056 continue;
66057 }
66058 #endif
66059 @@ -838,15 +645,12 @@ s32 rtl8192cu_xmitframe_complete(_adapte
66060 //pxmitframe->agg_num = 1; // alloc xmitframe should assign to 1.
66061 pxmitframe->pkt_offset = 1; // first frame of aggregation, reserve offset
66062
66063 -#ifdef IDEA_CONDITION
66064 - rtw_xmitframe_coalesce(padapter, pxmitframe->pkt, pxmitframe);
66065 -#else
66066 - res = rtw_xmitframe_coalesce(padapter, pxmitframe->pkt, pxmitframe);
66067 - if (res == _FALSE) {
66068 -// rtw_free_xmitframe_ex(pxmitpriv, pxmitframe);
66069 +
66070 + if (rtw_xmitframe_coalesce(padapter, pxmitframe->pkt, pxmitframe) == _FALSE) {
66071 + DBG_871X("%s coalesce 1st xmitframe failed \n",__FUNCTION__);
66072 continue;
66073 }
66074 -#endif
66075 +
66076
66077 // always return ndis_packet after rtw_xmitframe_coalesce
66078 rtw_os_xmit_complete(padapter, pxmitframe);
66079 @@ -876,26 +680,26 @@ s32 rtl8192cu_xmitframe_complete(_adapte
66080 case 1:
66081 case 2:
66082 ptxservq = &(psta->sta_xmitpriv.bk_q);
66083 -// phwxmit = pxmitpriv->hwxmits + 3;
66084 + phwxmit = pxmitpriv->hwxmits + 3;
66085 break;
66086
66087 case 4:
66088 case 5:
66089 ptxservq = &(psta->sta_xmitpriv.vi_q);
66090 -// phwxmit = pxmitpriv->hwxmits + 1;
66091 + phwxmit = pxmitpriv->hwxmits + 1;
66092 break;
66093
66094 case 6:
66095 case 7:
66096 ptxservq = &(psta->sta_xmitpriv.vo_q);
66097 -// phwxmit = pxmitpriv->hwxmits;
66098 + phwxmit = pxmitpriv->hwxmits;
66099 break;
66100
66101 case 0:
66102 case 3:
66103 default:
66104 ptxservq = &(psta->sta_xmitpriv.be_q);
66105 -// phwxmit = pxmitpriv->hwxmits + 2;
66106 + phwxmit = pxmitpriv->hwxmits + 2;
66107 break;
66108 }
66109
66110 @@ -913,6 +717,7 @@ s32 rtl8192cu_xmitframe_complete(_adapte
66111
66112 rtw_list_delete(&pxmitframe->list);
66113 ptxservq->qcnt--;
66114 + phwxmit->accnt--;
66115
66116 #ifndef IDEA_CONDITION
66117 // suppose only data frames would be in queue
66118 @@ -920,7 +725,7 @@ s32 rtl8192cu_xmitframe_complete(_adapte
66119 RT_TRACE(_module_rtl8192c_xmit_c_, _drv_err_,
66120 ("xmitframe_complete: frame tag(%d) is not DATA_FRAMETAG(%d)!\n",
66121 pxmitframe->frame_tag, DATA_FRAMETAG));
66122 - rtw_free_xmitframe_ex(pxmitpriv, pxmitframe);
66123 + rtw_free_xmitframe(pxmitpriv, pxmitframe);
66124 continue;
66125 }
66126
66127 @@ -930,7 +735,7 @@ s32 rtl8192cu_xmitframe_complete(_adapte
66128 RT_TRACE(_module_rtl8192c_xmit_c_, _drv_err_,
66129 ("xmitframe_complete: TID(%d) should be 0~15!\n",
66130 pxmitframe->attrib.priority));
66131 - rtw_free_xmitframe_ex(pxmitpriv, pxmitframe);
66132 + rtw_free_xmitframe(pxmitpriv, pxmitframe);
66133 continue;
66134 }
66135 #endif
66136 @@ -941,24 +746,20 @@ s32 rtl8192cu_xmitframe_complete(_adapte
66137 pxmitframe->agg_num = 0; // not first frame of aggregation
66138 pxmitframe->pkt_offset = 0; // not first frame of aggregation, no need to reserve offset
66139
66140 -#ifdef IDEA_CONDITION
66141 - rtw_xmitframe_coalesce(padapter, pxmitframe->pkt, pxmitframe);
66142 -#else
66143 - res = rtw_xmitframe_coalesce(padapter, pxmitframe->pkt, pxmitframe);
66144 - if (res == _FALSE) {
66145 - rtw_free_xmitframe_ex(pxmitpriv, pxmitframe);
66146 + if (rtw_xmitframe_coalesce(padapter, pxmitframe->pkt, pxmitframe) == _FALSE) {
66147 + DBG_871X("%s coalesce failed \n",__FUNCTION__);
66148 + rtw_free_xmitframe(pxmitpriv, pxmitframe);
66149 continue;
66150 }
66151 -#endif
66152
66153 // always return ndis_packet after rtw_xmitframe_coalesce
66154 rtw_os_xmit_complete(padapter, pxmitframe);
66155
66156 // (len - TXDESC_SIZE) == pxmitframe->attrib.last_txcmdsz
66157 - _update_txdesc(pxmitframe, pxmitframe->buf_addr, pxmitframe->attrib.last_txcmdsz);
66158 + update_txdesc(pxmitframe, pxmitframe->buf_addr, pxmitframe->attrib.last_txcmdsz, _TRUE);
66159
66160 // don't need xmitframe any more
66161 - rtw_free_xmitframe_ex(pxmitpriv, pxmitframe);
66162 + rtw_free_xmitframe(pxmitpriv, pxmitframe);
66163
66164 // handle pointer and stop condition
66165 pbuf_tail = pbuf + len;
66166 @@ -998,7 +799,7 @@ s32 rtl8192cu_xmitframe_complete(_adapte
66167 pfirstframe->pkt_offset = 0;
66168 }
66169 #endif // CONFIG_USE_USB_BUFFER_ALLOC_TX
66170 - _update_txdesc(pfirstframe, pfirstframe->buf_addr, pfirstframe->attrib.last_txcmdsz);
66171 + update_txdesc(pfirstframe, pfirstframe->buf_addr, pfirstframe->attrib.last_txcmdsz, _TRUE);
66172
66173 //3 4. write xmit buffer to USB FIFO
66174 ff_hwaddr = rtw_get_ff_hwaddr(pfirstframe);
66175 @@ -1013,7 +814,7 @@ s32 rtl8192cu_xmitframe_complete(_adapte
66176
66177 rtw_count_tx_stats(padapter, pfirstframe, pbuf_tail);
66178
66179 - rtw_free_xmitframe_ex(pxmitpriv, pfirstframe);
66180 + rtw_free_xmitframe(pxmitpriv, pfirstframe);
66181
66182 return _TRUE;
66183 }
66184 @@ -1063,7 +864,7 @@ s32 rtl8192cu_xmitframe_complete(_adapte
66185 }
66186
66187 rtw_os_xmit_complete(padapter, pxmitframe);//always return ndis_packet after rtw_xmitframe_coalesce
66188 - }
66189 + }
66190
66191
66192 RT_TRACE(_module_rtl871x_xmit_c_,_drv_info_,("xmitframe_complete(): rtw_dump_xframe\n"));
66193 @@ -1071,12 +872,12 @@ s32 rtl8192cu_xmitframe_complete(_adapte
66194
66195 if(res == _SUCCESS)
66196 {
66197 - rtw_dump_xframe(padapter, pxmitframe);
66198 + rtw_dump_xframe(padapter, pxmitframe);
66199 }
66200 else
66201 {
66202 rtw_free_xmitbuf(pxmitpriv, pxmitbuf);
66203 - rtw_free_xmitframe_ex(pxmitpriv, pxmitframe);
66204 + rtw_free_xmitframe(pxmitpriv, pxmitframe);
66205 }
66206
66207 xcnt++;
66208 @@ -1125,15 +926,22 @@ static s32 pre_xmitframe(_adapter *padap
66209 struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
66210 struct pkt_attrib *pattrib = &pxmitframe->attrib;
66211 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
66212 -
66213 +
66214 +
66215 _enter_critical_bh(&pxmitpriv->lock, &irqL);
66216
66217 +
66218 if (rtw_txframes_sta_ac_pending(padapter, pattrib) > 0)
66219 goto enqueue;
66220
66221 - if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY) == _TRUE)
66222 +
66223 + if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY|_FW_UNDER_LINKING) == _TRUE)
66224 goto enqueue;
66225
66226 +#ifdef CONFIG_CONCURRENT_MODE
66227 + if (check_buddy_fwstate(padapter, _FW_UNDER_SURVEY|_FW_UNDER_LINKING) == _TRUE)
66228 + goto enqueue;
66229 +#endif
66230
66231 pxmitbuf = rtw_alloc_xmitbuf(pxmitpriv);
66232 if (pxmitbuf == NULL)
66233 @@ -1147,7 +955,7 @@ static s32 pre_xmitframe(_adapter *padap
66234
66235 if (xmitframe_direct(padapter, pxmitframe) != _SUCCESS) {
66236 rtw_free_xmitbuf(pxmitpriv, pxmitbuf);
66237 - rtw_free_xmitframe_ex(pxmitpriv, pxmitframe);
66238 + rtw_free_xmitframe(pxmitpriv, pxmitframe);
66239 }
66240
66241 return _TRUE;
66242 @@ -1158,7 +966,7 @@ enqueue:
66243
66244 if (res != _SUCCESS) {
66245 RT_TRACE(_module_xmit_osdep_c_, _drv_err_, ("pre_xmitframe: enqueue xmitframe fail\n"));
66246 - rtw_free_xmitframe_ex(pxmitpriv, pxmitframe);
66247 + rtw_free_xmitframe(pxmitpriv, pxmitframe);
66248
66249 // Trick, make the statistics correct
66250 pxmitpriv->tx_pkts--;
66251 @@ -1169,9 +977,9 @@ enqueue:
66252 return _FALSE;
66253 }
66254
66255 -void rtl8192cu_mgnt_xmit(_adapter *padapter, struct xmit_frame *pmgntframe)
66256 +s32 rtl8192cu_mgnt_xmit(_adapter *padapter, struct xmit_frame *pmgntframe)
66257 {
66258 - rtw_dump_xframe(padapter, pmgntframe);
66259 + return rtw_dump_xframe(padapter, pmgntframe);
66260 }
66261
66262 /*
66263 @@ -1184,6 +992,30 @@ s32 rtl8192cu_hal_xmit(_adapter *padapte
66264 return pre_xmitframe(padapter, pxmitframe);
66265 }
66266
66267 +s32 rtl8192cu_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe)
66268 +{
66269 + struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
66270 + s32 err;
66271 +
66272 + if ((err=rtw_xmitframe_enqueue(padapter, pxmitframe)) != _SUCCESS)
66273 + {
66274 + rtw_free_xmitframe(pxmitpriv, pxmitframe);
66275 +
66276 + // Trick, make the statistics correct
66277 + pxmitpriv->tx_pkts--;
66278 + pxmitpriv->tx_drop++;
66279 + }
66280 + else
66281 + {
66282 +#ifdef PLATFORM_LINUX
66283 + tasklet_hi_schedule(&pxmitpriv->xmit_tasklet);
66284 +#endif
66285 + }
66286 +
66287 + return err;
66288 +
66289 +}
66290 +
66291 #ifdef CONFIG_HOSTAPD_MLME
66292
66293 static void rtl8192cu_hostap_mgnt_xmit_cb(struct urb *urb)
66294 @@ -1193,7 +1025,7 @@ static void rtl8192cu_hostap_mgnt_xmit_c
66295
66296 //DBG_8192C("%s\n", __FUNCTION__);
66297
66298 - dev_kfree_skb_any(skb);
66299 + rtw_skb_free(skb);
66300 #endif
66301 }
66302
66303 @@ -1211,7 +1043,7 @@ s32 rtl8192cu_hostap_mgnt_xmit_entry(_ad
66304 struct hostapd_priv *phostapdpriv = padapter->phostapdpriv;
66305 struct net_device *pnetdev = padapter->pnetdev;
66306 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
66307 - struct dvobj_priv *pdvobj = &padapter->dvobjpriv;
66308 + struct dvobj_priv *pdvobj = adapter_to_dvobj(padapter);
66309
66310
66311 //DBG_8192C("%s\n", __FUNCTION__);
66312 @@ -1226,11 +1058,7 @@ s32 rtl8192cu_hostap_mgnt_xmit_entry(_ad
66313 if ((fc & RTW_IEEE80211_FCTL_FTYPE) != RTW_IEEE80211_FTYPE_MGMT)
66314 goto _exit;
66315
66316 -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)) // http://www.mail-archive.com/netdev@vger.kernel.org/msg17214.html
66317 - pxmit_skb = dev_alloc_skb(len + TXDESC_SIZE);
66318 -#else
66319 - pxmit_skb = netdev_alloc_skb(pnetdev, len + TXDESC_SIZE);
66320 -#endif
66321 + pxmit_skb = rtw_skb_alloc(len + TXDESC_SIZE);
66322
66323 if(!pxmit_skb)
66324 goto _exit;
66325 @@ -1311,7 +1139,7 @@ s32 rtl8192cu_hostap_mgnt_xmit_entry(_ad
66326
66327 _exit:
66328
66329 - dev_kfree_skb_any(skb);
66330 + rtw_skb_free(skb);
66331
66332 #endif
66333
66334 --- a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_halinit.c
66335 +++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_halinit.c
66336 @@ -16,7 +16,7 @@
66337 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
66338 *
66339 *
66340 -******************************************************************************/
66341 + ******************************************************************************/
66342 #define _HCI_HAL_INIT_C_
66343
66344 #include <drv_conf.h>
66345 @@ -90,7 +90,6 @@ _OneOutEpMapping(
66346
66347 static VOID
66348 _TwoOutEpMapping(
66349 - IN BOOLEAN IsTestChip,
66350 IN HAL_DATA_TYPE *pHalData,
66351 IN BOOLEAN bWIFICfg
66352 )
66353 @@ -106,25 +105,7 @@ _TwoOutEpMapping(
66354 #define HIGH_QUEUE_INX 6
66355 #define TXCMD_QUEUE_INX 7
66356 */
66357 -
66358 - if(IsTestChip && bWIFICfg){ // test chip && wmm
66359 -
66360 -
66361 - // BK, BE, VI, VO, BCN, CMD,MGT,HIGH,HCCA
66362 - //{ 1, 0, 1, 0, 0, 0, 0, 0, 0 };
66363 - //0:H(end_number=0x02), 1:L (end_number=0x03)
66364 -
66365 - pHalData->Queue2EPNum[0] = pHalData->RtBulkOutPipe[0];//VO
66366 - pHalData->Queue2EPNum[1] = pHalData->RtBulkOutPipe[1];//VI
66367 - pHalData->Queue2EPNum[2] = pHalData->RtBulkOutPipe[0];//BE
66368 - pHalData->Queue2EPNum[3] = pHalData->RtBulkOutPipe[1];//BK
66369 -
66370 - pHalData->Queue2EPNum[4] = pHalData->RtBulkOutPipe[0];//BCN
66371 - pHalData->Queue2EPNum[5] = pHalData->RtBulkOutPipe[0];//MGT
66372 - pHalData->Queue2EPNum[6] = pHalData->RtBulkOutPipe[0];//HIGH
66373 - pHalData->Queue2EPNum[7] = pHalData->RtBulkOutPipe[0];//TXCMD
66374 - }
66375 - else if(!IsTestChip && bWIFICfg){ // Normal chip && wmm
66376 + if(bWIFICfg){ // Normal chip && wmm
66377
66378 // BK, BE, VI, VO, BCN, CMD,MGT,HIGH,HCCA
66379 //{ 0, 1, 0, 1, 0, 0, 0, 0, 0 };
66380 @@ -202,8 +183,7 @@ static VOID _ThreeOutEpMapping(
66381 static BOOLEAN
66382 _MappingOutEP(
66383 IN PADAPTER pAdapter,
66384 - IN u8 NumOutPipe,
66385 - IN BOOLEAN IsTestChip
66386 + IN u8 NumOutPipe
66387 )
66388 {
66389 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
66390 @@ -216,13 +196,9 @@ _MappingOutEP(
66391 switch(NumOutPipe)
66392 {
66393 case 2:
66394 - _TwoOutEpMapping(IsTestChip, pHalData, bWIFICfg);
66395 + _TwoOutEpMapping(pHalData, bWIFICfg);
66396 break;
66397 - case 3:
66398 - // Test chip doesn't support three out EPs.
66399 - if(IsTestChip){
66400 - return _FALSE;
66401 - }
66402 + case 3:
66403 _ThreeOutEpMapping(pHalData, bWIFICfg);
66404 break;
66405 case 1:
66406 @@ -238,53 +214,7 @@ _MappingOutEP(
66407 }
66408
66409 static VOID
66410 -_ConfigTestChipOutEP(
66411 - IN PADAPTER pAdapter,
66412 - IN u8 NumOutPipe
66413 - )
66414 -{
66415 - u8 value8,txqsele;
66416 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
66417 -
66418 - pHalData->OutEpQueueSel = 0;
66419 - pHalData->OutEpNumber = 0;
66420 -
66421 - value8 = rtw_read8(pAdapter, REG_TEST_SIE_OPTIONAL);
66422 - value8 = (value8 & USB_TEST_EP_MASK) >> USB_TEST_EP_SHIFT;
66423 -
66424 - switch(value8)
66425 - {
66426 - case 0: // 2 bulk OUT, 1 bulk IN
66427 - case 3:
66428 - pHalData->OutEpQueueSel = TX_SELE_HQ | TX_SELE_LQ;
66429 - pHalData->OutEpNumber = 2;
66430 - //RT_TRACE(COMP_INIT, DBG_LOUD, ("EP Config: 2 bulk OUT, 1 bulk IN\n"));
66431 - break;
66432 - case 1: // 1 bulk IN/OUT => map all endpoint to Low queue
66433 - case 2: // 1 bulk IN, 1 bulk OUT => map all endpoint to High queue
66434 - txqsele = rtw_read8(pAdapter, REG_TEST_USB_TXQS);
66435 - if(txqsele & 0x0F){//map all endpoint to High queue
66436 - pHalData->OutEpQueueSel = TX_SELE_HQ;
66437 - }
66438 - else if(txqsele&0xF0){//map all endpoint to Low queue
66439 - pHalData->OutEpQueueSel = TX_SELE_LQ;
66440 - }
66441 - pHalData->OutEpNumber = 1;
66442 - //RT_TRACE(COMP_INIT, DBG_LOUD, ("%s\n", ((1 == value8) ? "1 bulk IN/OUT" : "1 bulk IN, 1 bulk OUT")));
66443 - break;
66444 - default:
66445 - break;
66446 - }
66447 -
66448 - // TODO: Error recovery for this case
66449 - //RT_ASSERT((NumOutPipe == pHalData->OutEpNumber), ("Out EP number isn't match! %d(Descriptor) != %d (SIE reg)\n", (u4Byte)NumOutPipe, (u4Byte)pHalData->OutEpNumber));
66450 -
66451 -}
66452 -
66453 -
66454 -
66455 -static VOID
66456 -_ConfigNormalChipOutEP(
66457 +_ConfigChipOutEP(
66458 IN PADAPTER pAdapter,
66459 IN u8 NumOutPipe
66460 )
66461 @@ -302,7 +232,11 @@ _ConfigNormalChipOutEP(
66462 pHalData->OutEpQueueSel |= TX_SELE_HQ;
66463 pHalData->OutEpNumber++;
66464 }
66465 -
66466 +
66467 +#ifdef CONFIG_USB_ONE_OUT_EP
66468 + return;
66469 +#endif
66470 +
66471 if((value8 >> USB_NORMAL_SIE_EP_SHIFT) & USB_NORMAL_SIE_EP_MASK){
66472 pHalData->OutEpQueueSel |= TX_SELE_NQ;
66473 pHalData->OutEpNumber++;
66474 @@ -328,38 +262,18 @@ static BOOLEAN HalUsbSetQueuePipeMapping
66475 {
66476 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
66477 BOOLEAN result = _FALSE;
66478 - BOOLEAN isNormalChip;
66479 -
66480 - //may be update UPHY Parameter == georgia
66481 -
66482
66483 - // ReadAdapterInfo8192C also call _ReadChipVersion too.
66484 - // Since we need dynamic config EP mapping, so we call this function to get chip version.
66485 - // We can remove _ReadChipVersion from ReadAdapterInfo8192C later.
66486 - //pHalData->VersionID = rtl8192c_ReadChipVersion(pAdapter);
66487 -
66488 - isNormalChip = IS_NORMAL_CHIP(pHalData->VersionID);
66489 -
66490 - if(isNormalChip){
66491 - _ConfigNormalChipOutEP(pAdapter, NumOutPipe);
66492 - }
66493 - else{
66494 - _ConfigTestChipOutEP(pAdapter, NumOutPipe);
66495 - }
66496 + _ConfigChipOutEP(pAdapter, NumOutPipe);
66497
66498 + #ifndef CONFIG_USB_ONE_OUT_EP
66499 // Normal chip with one IN and one OUT doesn't have interrupt IN EP.
66500 - if(isNormalChip && (1 == pHalData->OutEpNumber)){
66501 + if(1 == pHalData->OutEpNumber){
66502 if(1 != NumInPipe){
66503 return result;
66504 }
66505 }
66506 -
66507 - // All config other than above support one Bulk IN and one Interrupt IN.
66508 - //if(2 != NumInPipe){
66509 - // return result;
66510 - //}
66511 -
66512 - result = _MappingOutEP(pAdapter, NumOutPipe, !isNormalChip);
66513 + #endif
66514 + result = _MappingOutEP(pAdapter, NumOutPipe);
66515
66516 return result;
66517
66518 @@ -368,7 +282,7 @@ static BOOLEAN HalUsbSetQueuePipeMapping
66519 void rtl8192cu_interface_configure(_adapter *padapter)
66520 {
66521 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
66522 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
66523 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
66524
66525 if (pdvobjpriv->ishighspeed == _TRUE)
66526 {
66527 @@ -399,8 +313,13 @@ void rtl8192cu_interface_configure(_adap
66528 pHalData->UsbRxAggPageTimeout = 0x4; //6, absolute time = 34ms/(2^6)
66529 #endif
66530
66531 - HalUsbSetQueuePipeMapping8192CUsb(padapter,
66532 - pdvobjpriv->RtNumInPipes, pdvobjpriv->RtNumOutPipes);
66533 + HalUsbSetQueuePipeMapping8192CUsb(padapter, pdvobjpriv->RtNumInPipes,
66534 + #ifdef CONFIG_USB_ONE_OUT_EP
66535 + 1
66536 + #else
66537 + pdvobjpriv->RtNumOutPipes
66538 + #endif
66539 + );
66540
66541 }
66542
66543 @@ -570,7 +489,6 @@ static void _InitPABias(_adapter *padapt
66544 {
66545 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
66546 u8 pa_setting;
66547 - BOOLEAN isNormal = IS_NORMAL_CHIP(pHalData->VersionID);
66548 BOOLEAN is92C = IS_92C_SERIAL(pHalData->VersionID);
66549
66550 //FIXED PA current issue
66551 @@ -581,19 +499,19 @@ static void _InitPABias(_adapter *padapt
66552
66553 if(!(pa_setting & BIT0))
66554 {
66555 - PHY_SetRFReg(padapter, RF90_PATH_A, 0x15, 0x0FFFFF, 0x0F406);
66556 - PHY_SetRFReg(padapter, RF90_PATH_A, 0x15, 0x0FFFFF, 0x4F406);
66557 - PHY_SetRFReg(padapter, RF90_PATH_A, 0x15, 0x0FFFFF, 0x8F406);
66558 - PHY_SetRFReg(padapter, RF90_PATH_A, 0x15, 0x0FFFFF, 0xCF406);
66559 + PHY_SetRFReg(padapter, RF_PATH_A, 0x15, 0x0FFFFF, 0x0F406);
66560 + PHY_SetRFReg(padapter, RF_PATH_A, 0x15, 0x0FFFFF, 0x4F406);
66561 + PHY_SetRFReg(padapter, RF_PATH_A, 0x15, 0x0FFFFF, 0x8F406);
66562 + PHY_SetRFReg(padapter, RF_PATH_A, 0x15, 0x0FFFFF, 0xCF406);
66563 //RT_TRACE(COMP_INIT, DBG_LOUD, ("PA BIAS path A\n"));
66564 }
66565
66566 - if(!(pa_setting & BIT1) && isNormal && is92C)
66567 + if(!(pa_setting & BIT1) && is92C)
66568 {
66569 - PHY_SetRFReg(padapter,RF90_PATH_B, 0x15, 0x0FFFFF, 0x0F406);
66570 - PHY_SetRFReg(padapter,RF90_PATH_B, 0x15, 0x0FFFFF, 0x4F406);
66571 - PHY_SetRFReg(padapter,RF90_PATH_B, 0x15, 0x0FFFFF, 0x8F406);
66572 - PHY_SetRFReg(padapter,RF90_PATH_B, 0x15, 0x0FFFFF, 0xCF406);
66573 + PHY_SetRFReg(padapter,RF_PATH_B, 0x15, 0x0FFFFF, 0x0F406);
66574 + PHY_SetRFReg(padapter,RF_PATH_B, 0x15, 0x0FFFFF, 0x4F406);
66575 + PHY_SetRFReg(padapter,RF_PATH_B, 0x15, 0x0FFFFF, 0x8F406);
66576 + PHY_SetRFReg(padapter,RF_PATH_B, 0x15, 0x0FFFFF, 0xCF406);
66577 //RT_TRACE(COMP_INIT, DBG_LOUD, ("PA BIAS path B\n"));
66578 }
66579
66580 @@ -788,6 +706,11 @@ _SetMacID(
66581 {
66582 u32 i;
66583 for(i=0 ; i< MAC_ADDR_LEN ; i++){
66584 +#ifdef CONFIG_CONCURRENT_MODE
66585 + if(Adapter->iface_type == IFACE_PORT1)
66586 + rtw_write32(Adapter, REG_MACID1+i, MacID[i]);
66587 + else
66588 +#endif
66589 rtw_write32(Adapter, REG_MACID+i, MacID[i]);
66590 }
66591 }
66592 @@ -799,6 +722,11 @@ _SetBSSID(
66593 {
66594 u32 i;
66595 for(i=0 ; i< MAC_ADDR_LEN ; i++){
66596 +#ifdef CONFIG_CONCURRENT_MODE
66597 + if(Adapter->iface_type == IFACE_PORT1)
66598 + rtw_write32(Adapter, REG_BSSID1+i, BSSID[i]);
66599 + else
66600 +#endif
66601 rtw_write32(Adapter, REG_BSSID+i, BSSID[i]);
66602 }
66603 }
66604 @@ -828,7 +756,6 @@ _InitQueueReservedPage(
66605 {
66606 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
66607 struct registry_priv *pregistrypriv = &Adapter->registrypriv;
66608 - BOOLEAN isNormalChip = IS_NORMAL_CHIP(pHalData->VersionID);
66609
66610 u32 outEPNum = (u32)pHalData->OutEpNumber;
66611 u32 numHQ = 0;
66612 @@ -840,64 +767,27 @@ _InitQueueReservedPage(
66613 BOOLEAN bWiFiConfig = pregistrypriv->wifi_spec;
66614 //u32 txQPageNum, txQPageUnit,txQRemainPage;
66615
66616 -#if 0
66617 - if(!pregistrypriv->wifi_spec){
66618 - numPubQ = (isNormalChip) ? NORMAL_PAGE_NUM_PUBQ : TEST_PAGE_NUM_PUBQ;
66619 - //RT_ASSERT((numPubQ < TX_TOTAL_PAGE_NUMBER), ("Public queue page number is great than total tx page number.\n"));
66620 - txQPageNum = TX_TOTAL_PAGE_NUMBER - numPubQ;
66621 -
66622 - //RT_ASSERT((0 == txQPageNum%txQPageNum), ("Total tx page number is not dividable!\n"));
66623 -
66624 - txQPageUnit = txQPageNum/outEPNum;
66625 - txQRemainPage = txQPageNum % outEPNum;
66626 -
66627 - if(pHalData->OutEpQueueSel & TX_SELE_HQ){
66628 - numHQ = txQPageUnit;
66629 - }
66630 - if(pHalData->OutEpQueueSel & TX_SELE_LQ){
66631 - numLQ = txQPageUnit;
66632 - }
66633 - // HIGH priority queue always present in the configuration of 2 or 3 out-ep
66634 - // so ,remainder pages have assigned to High queue
66635 - if((outEPNum>1) && (txQRemainPage)){
66636 - numHQ += txQRemainPage;
66637 - }
66638 -
66639 - // NOTE: This step shall be proceed before writting REG_RQPN.
66640 - if(isNormalChip){
66641 - if(pHalData->OutEpQueueSel & TX_SELE_NQ){
66642 - numNQ = txQPageUnit;
66643 - }
66644 - value8 = (u8)_NPQ(numNQ);
66645 - rtw_write8(Adapter, REG_RQPN_NPQ, value8);
66646 - }
66647 - //RT_ASSERT(((numHQ + numLQ + numNQ + numPubQ) < TX_PAGE_BOUNDARY), ("Total tx page number is greater than tx boundary!\n"));
66648 - }
66649 - else
66650 -#endif
66651 { //for WMM
66652 //RT_ASSERT((outEPNum>=2), ("for WMM ,number of out-ep must more than or equal to 2!\n"));
66653
66654 - numPubQ = (isNormalChip) ? ((bWiFiConfig)?WMM_NORMAL_PAGE_NUM_PUBQ:NORMAL_PAGE_NUM_PUBQ)
66655 - :WMM_TEST_PAGE_NUM_PUBQ;
66656 -
66657 if(pHalData->OutEpQueueSel & TX_SELE_HQ){
66658 - numHQ = (isNormalChip)?((bWiFiConfig)?WMM_NORMAL_PAGE_NUM_HPQ:NORMAL_PAGE_NUM_HPQ)
66659 - :WMM_TEST_PAGE_NUM_HPQ;
66660 + numHQ = (bWiFiConfig)?WMM_NORMAL_PAGE_NUM_HPQ:NORMAL_PAGE_NUM_HPQ;
66661 }
66662
66663 if(pHalData->OutEpQueueSel & TX_SELE_LQ){
66664 - numLQ = (isNormalChip)?((bWiFiConfig)?WMM_NORMAL_PAGE_NUM_LPQ:NORMAL_PAGE_NUM_LPQ)
66665 - :WMM_TEST_PAGE_NUM_LPQ;
66666 + numLQ = (bWiFiConfig)?WMM_NORMAL_PAGE_NUM_LPQ:NORMAL_PAGE_NUM_LPQ;
66667 }
66668 - // NOTE: This step shall be proceed before writting REG_RQPN.
66669 - if(isNormalChip){
66670 - if(pHalData->OutEpQueueSel & TX_SELE_NQ){
66671 - numNQ = (bWiFiConfig)?WMM_NORMAL_PAGE_NUM_NPQ:NORMAL_PAGE_NUM_NPQ;
66672 - }
66673 - value8 = (u8)_NPQ(numNQ);
66674 - rtw_write8(Adapter, REG_RQPN_NPQ, value8);
66675 + // NOTE: This step shall be proceed before writting REG_RQPN.
66676 + if(pHalData->OutEpQueueSel & TX_SELE_NQ){
66677 + numNQ = (bWiFiConfig)?WMM_NORMAL_PAGE_NUM_NPQ:NORMAL_PAGE_NUM_NPQ;
66678 }
66679 + value8 = (u8)_NPQ(numNQ);
66680 + rtw_write8(Adapter, REG_RQPN_NPQ, value8);
66681 +
66682 + if (bWiFiConfig)
66683 + numPubQ = WMM_NORMAL_TX_TOTAL_PAGE_NUMBER - numHQ - numLQ - numNQ;
66684 + else
66685 + numPubQ = TX_TOTAL_PAGE_NUMBER - numHQ - numLQ - numNQ;
66686 }
66687
66688 // TX DMA
66689 @@ -905,48 +795,6 @@ _InitQueueReservedPage(
66690 rtw_write32(Adapter, REG_RQPN, value32);
66691 }
66692
66693 -static void _InitID(IN PADAPTER Adapter)
66694 -{
66695 - int i;
66696 - EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(Adapter);
66697 -
66698 - for(i=0; i<6; i++)
66699 - {
66700 - rtw_write8(Adapter, (REG_MACID+i), pEEPROM->mac_addr[i]);
66701 - }
66702 -
66703 -/*
66704 - NicIFSetMacAddress(Adapter, Adapter->PermanentAddress);
66705 - //Ziv test
66706 -#if 1
66707 - {
66708 - u1Byte sMacAddr[6] = {0};
66709 - u4Byte i;
66710 -
66711 - for(i = 0 ; i < MAC_ADDR_LEN ; i++){
66712 - sMacAddr[i] = PlatformIORead1Byte(Adapter, (REG_MACID + i));
66713 - }
66714 - RT_PRINT_ADDR(COMP_INIT|COMP_EFUSE, DBG_LOUD, "Read back MAC Addr: ", sMacAddr);
66715 - }
66716 -#endif
66717 -
66718 -#if 0
66719 - u4Byte nMAR = 0xFFFFFFFF;
66720 - u8 m_MacID[] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06};
66721 - u8 m_BSSID[] = {0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f};
66722 - int i;
66723 -
66724 - _SetMacID(Adapter, Adapter->PermanentAddress);
66725 - _SetBSSID(Adapter, m_BSSID);
66726 -
66727 - //set MAR
66728 - PlatformIOWrite4Byte(Adapter, REG_MAR, nMAR);
66729 - PlatformIOWrite4Byte(Adapter, REG_MAR+4, nMAR);
66730 -#endif
66731 -*/
66732 -}
66733 -
66734 -
66735 static VOID
66736 _InitTxBufferBoundary(
66737 IN PADAPTER Adapter
66738 @@ -961,8 +809,7 @@ _InitTxBufferBoundary(
66739 txpktbuf_bndy = TX_PAGE_BOUNDARY;
66740 }
66741 else{//for WMM
66742 - txpktbuf_bndy = ( IS_NORMAL_CHIP( pHalData->VersionID))?WMM_NORMAL_TX_PAGE_BOUNDARY
66743 - :WMM_TEST_TX_PAGE_BOUNDARY;
66744 + txpktbuf_bndy = WMM_NORMAL_TX_PAGE_BOUNDARY;
66745 }
66746
66747 rtw_write8(Adapter, REG_TXPKTBUF_BCNQ_BDNY, txpktbuf_bndy);
66748 @@ -1156,51 +1003,11 @@ _InitNormalChipQueuePriority(
66749 }
66750
66751 static VOID
66752 -_InitTestChipQueuePriority(
66753 - IN PADAPTER Adapter
66754 - )
66755 -{
66756 - u8 hq_sele ;
66757 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
66758 - struct registry_priv *pregistrypriv = &Adapter->registrypriv;
66759 -
66760 - switch(pHalData->OutEpNumber)
66761 - {
66762 - case 2: // (TX_SELE_HQ|TX_SELE_LQ)
66763 - if(!pregistrypriv->wifi_spec)//typical setting
66764 - hq_sele = HQSEL_VOQ | HQSEL_VIQ | HQSEL_MGTQ | HQSEL_HIQ ;
66765 - else //for WMM
66766 - hq_sele = HQSEL_VOQ | HQSEL_BEQ | HQSEL_MGTQ | HQSEL_HIQ ;
66767 - break;
66768 - case 1:
66769 - if(TX_SELE_LQ == pHalData->OutEpQueueSel ){//map all endpoint to Low queue
66770 - hq_sele = 0;
66771 - }
66772 - else if(TX_SELE_HQ == pHalData->OutEpQueueSel){//map all endpoint to High queue
66773 - hq_sele = HQSEL_VOQ | HQSEL_VIQ | HQSEL_BEQ | HQSEL_BKQ | HQSEL_MGTQ | HQSEL_HIQ ;
66774 - }
66775 - break;
66776 - default:
66777 - //RT_ASSERT(FALSE,("Shall not reach here!\n"));
66778 - break;
66779 - }
66780 - rtw_write8(Adapter, (REG_TRXDMA_CTRL+1), hq_sele);
66781 -}
66782 -
66783 -
66784 -static VOID
66785 _InitQueuePriority(
66786 IN PADAPTER Adapter
66787 )
66788 {
66789 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
66790 -
66791 - if(IS_NORMAL_CHIP( pHalData->VersionID)){
66792 - _InitNormalChipQueuePriority(Adapter);
66793 - }
66794 - else{
66795 - _InitTestChipQueuePriority(Adapter);
66796 - }
66797 + _InitNormalChipQueuePriority(Adapter);
66798 }
66799
66800 static VOID
66801 @@ -1263,7 +1070,10 @@ _InitWMACSetting(
66802 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
66803
66804 //pHalData->ReceiveConfig = AAP | APM | AM | AB | APP_ICV | ADF | AMF | APP_FCS | HTC_LOC_CTRL | APP_MIC | APP_PHYSTS;
66805 - pHalData->ReceiveConfig = RCR_AAP | RCR_APM | RCR_AM | RCR_AB |RCR_CBSSID_DATA| RCR_CBSSID_BCN| RCR_APP_ICV | RCR_AMF | RCR_HTC_LOC_CTRL | RCR_APP_MIC | RCR_APP_PHYSTS;
66806 + //pHalData->ReceiveConfig = RCR_AAP | RCR_APM | RCR_AM | RCR_AB |RCR_CBSSID_DATA| RCR_CBSSID_BCN| RCR_APP_ICV | RCR_AMF | RCR_HTC_LOC_CTRL | RCR_APP_MIC | RCR_APP_PHYSTS;
66807 + // don't turn on AAP, it will allow all packets to driver
66808 + pHalData->ReceiveConfig = RCR_APM | RCR_AM | RCR_AB |RCR_CBSSID_DATA| RCR_CBSSID_BCN| RCR_APP_ICV | RCR_AMF | RCR_HTC_LOC_CTRL | RCR_APP_MIC | RCR_APP_PHYSTS;
66809 +
66810 #if (0 == RTL8192C_RX_PACKET_NO_INCLUDE_CRC)
66811 pHalData->ReceiveConfig |= ACRC32;
66812 #endif
66813 @@ -1345,10 +1155,15 @@ _InitEDCA(
66814 rtw_write16(Adapter,REG_SPEC_SIFS, 0x100a);
66815 rtw_write16(Adapter,REG_MAC_SPEC_SIFS, 0x100a);
66816
66817 - // Set SIFS for CCK
66818 + //REG514:SIFS_CCK_CTX
66819 + //REG515:SIFS_OFDM_CTX
66820 + //REG516:SIFS_CCK_TRX
66821 + //REG517:SIFS_OFDM_TRX
66822 +
66823 + // Set SIFS for CCK_CTS and OFDM_CTX
66824 rtw_write16(Adapter,REG_SIFS_CTX, 0x100a);
66825
66826 - // Set SIFS for OFDM
66827 + // Set SIFS for CCK_TRX and OFDM_TRX
66828 rtw_write16(Adapter,REG_SIFS_TRX, 0x100a);
66829
66830 // TXOP
66831 @@ -1764,18 +1579,13 @@ _InitBeaconParameters(
66832
66833 // TODO: Remove these magic number
66834 rtw_write16(Adapter, REG_TBTT_PROHIBIT,0x6404);// ms
66835 +
66836 rtw_write8(Adapter, REG_DRVERLYINT, DRIVER_EARLY_INT_TIME);// 5ms
66837 rtw_write8(Adapter, REG_BCNDMATIM, BCN_DMA_ATIME_INT_TIME); // 2ms
66838
66839 // Suggested by designer timchen. Change beacon AIFS to the largest number
66840 // beacause test chip does not contension before sending beacon. by tynli. 2009.11.03
66841 - if(IS_NORMAL_CHIP( pHalData->VersionID)){
66842 - rtw_write16(Adapter, REG_BCNTCFG, 0x660F);
66843 - }
66844 - else{
66845 - rtw_write16(Adapter, REG_BCNTCFG, 0x66FF);
66846 - }
66847 -
66848 + rtw_write16(Adapter, REG_BCNTCFG, 0x660F);
66849 }
66850
66851 static VOID
66852 @@ -1825,29 +1635,11 @@ _BeaconFunctionEnable(
66853 IN BOOLEAN Linked
66854 )
66855 {
66856 -#if 0
66857 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
66858 - u8 value8 = 0;
66859 -
66860 - //value8 = Enable ? (EN_BCN_FUNCTION | EN_TXBCN_RPT) : EN_BCN_FUNCTION;
66861 -
66862 - if(_FALSE == Linked){
66863 - if(IS_NORMAL_CHIP( pHalData->VersionID)){
66864 - value8 |= DIS_TSF_UDT0_NORMAL_CHIP;
66865 - }
66866 - else{
66867 - value8 |= DIS_TSF_UDT0_TEST_CHIP;
66868 - }
66869 - }
66870 -
66871 - rtw_write8(Adapter, REG_BCN_CTRL, value8);
66872 -#else
66873 rtw_write8(Adapter, REG_BCN_CTRL, (BIT4 | BIT3 | BIT1));
66874 //SetBcnCtrlReg(Adapter, (BIT4 | BIT3 | BIT1), 0x00);
66875 //RT_TRACE(COMP_BEACON, DBG_LOUD, ("_BeaconFunctionEnable 0x550 0x%x\n", PlatformEFIORead1Byte(Adapter, 0x550)));
66876
66877 rtw_write8(Adapter, REG_RD_CTRL+1, 0x6F);
66878 -#endif
66879 }
66880
66881
66882 @@ -1882,7 +1674,7 @@ static VOID _RfPowerSave(
66883 MgntActSet_RF_State(Adapter, eRfOff, RF_CHANGE_BY_SW);
66884 // Those action will be discard in MgntActSet_RF_State because off the same state
66885 for(eRFPath = 0; eRFPath <pHalData->NumTotalRFPath; eRFPath++)
66886 - PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)eRFPath, 0x4, 0xC00, 0x0);
66887 + PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)eRFPath, 0x4, 0xC00, 0x0);
66888 }
66889 else if(pMgntInfo->RfOffReason > RF_CHANGE_BY_PS){ // H/W or S/W RF OFF before sleep.
66890 RT_TRACE((COMP_INIT|COMP_RF), DBG_LOUD, ("InitializeAdapter8192CUsb(): Turn off RF for RfOffReason(%ld).\n", pMgntInfo->RfOffReason));
66891 @@ -1970,7 +1762,7 @@ HalDetectSelectiveSuspendMode(
66892 {
66893 u8 tmpvalue;
66894 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
66895 - struct dvobj_priv *pdvobjpriv = &Adapter->dvobjpriv;
66896 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(Adapter);
66897
66898 // If support HW radio detect, we need to enable WOL ability, otherwise, we
66899 // can not use FW to notify host the power state switch.
66900 @@ -2089,7 +1881,6 @@ u32 rtl8192cu_hal_init(PADAPTER Adapter)
66901 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
66902 struct pwrctrl_priv *pwrctrlpriv = &Adapter->pwrctrlpriv;
66903 struct registry_priv *pregistrypriv = &Adapter->registrypriv;
66904 - u8 isNormal = IS_NORMAL_CHIP(pHalData->VersionID);
66905 u8 is92C = IS_92C_SERIAL(pHalData->VersionID);
66906 rt_rf_power_state eRfPowerStateToSet;
66907 #ifdef CONFIG_BT_COEXIST
66908 @@ -2244,7 +2035,6 @@ HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_DOW
66909 //HalDetectPwrDownMode(Adapter);
66910 // 2010/08/26 MH If Efuse does not support sective suspend then disable the function.
66911 //HalDetectSelectiveSuspendMode(Adapter);
66912 -
66913
66914 // Set RF type for BB/RF configuration
66915 _InitRFType(Adapter);//->_ReadRFType()
66916 @@ -2258,8 +2048,7 @@ HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_INI
66917 boundary = TX_PAGE_BOUNDARY;
66918 }
66919 else{// for WMM
66920 - boundary = (IS_NORMAL_CHIP(pHalData->VersionID)) ?WMM_NORMAL_TX_PAGE_BOUNDARY
66921 - :WMM_TEST_TX_PAGE_BOUNDARY;
66922 + boundary = WMM_NORMAL_TX_PAGE_BOUNDARY;
66923 }
66924 status = InitLLTTable(Adapter, boundary);
66925 if(status == _FAIL){
66926 @@ -2281,7 +2070,7 @@ HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_MIS
66927 _InitDriverInfoSize(Adapter, DRVINFO_SZ);
66928
66929 _InitInterrupt(Adapter);
66930 - _InitID(Adapter);//set mac_address
66931 + hal_init_macaddr(Adapter);//set mac_address
66932 _InitNetworkType(Adapter);//set msr
66933 _InitWMACSetting(Adapter);
66934 _InitAdaptiveCtrl(Adapter);
66935 @@ -2340,16 +2129,16 @@ HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_RF)
66936
66937 if(IS_VENDOR_UMC_A_CUT(pHalData->VersionID) && !IS_92C_SERIAL(pHalData->VersionID))
66938 {
66939 - PHY_SetRFReg(Adapter, RF90_PATH_A, RF_RX_G1, bMaskDWord, 0x30255);
66940 - PHY_SetRFReg(Adapter, RF90_PATH_A, RF_RX_G2, bMaskDWord, 0x50a00);
66941 + PHY_SetRFReg(Adapter, RF_PATH_A, RF_RX_G1, bMaskDWord, 0x30255);
66942 + PHY_SetRFReg(Adapter, RF_PATH_A, RF_RX_G2, bMaskDWord, 0x50a00);
66943 }
66944 #endif
66945
66946 //
66947 // Joseph Note: Keep RfRegChnlVal for later use.
66948 //
66949 - pHalData->RfRegChnlVal[0] = PHY_QueryRFReg(Adapter, (RF90_RADIO_PATH_E)0, RF_CHNLBW, bRFRegOffsetMask);
66950 - pHalData->RfRegChnlVal[1] = PHY_QueryRFReg(Adapter, (RF90_RADIO_PATH_E)1, RF_CHNLBW, bRFRegOffsetMask);
66951 + pHalData->RfRegChnlVal[0] = PHY_QueryRFReg(Adapter, (RF_RADIO_PATH_E)0, RF_CHNLBW, bRFRegOffsetMask);
66952 + pHalData->RfRegChnlVal[1] = PHY_QueryRFReg(Adapter, (RF_RADIO_PATH_E)1, RF_CHNLBW, bRFRegOffsetMask);
66953
66954 HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_TURN_ON_BLOCK);
66955 _BBTurnOnBlock(Adapter);
66956 @@ -2424,7 +2213,7 @@ HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_MIS
66957
66958 // Those action will be discard in MgntActSet_RF_State because off the same state
66959 //for(eRFPath = 0; eRFPath <pHalData->NumTotalRFPath; eRFPath++)
66960 - //PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)eRFPath, 0x4, 0xC00, 0x0);
66961 + //PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)eRFPath, 0x4, 0xC00, 0x0);
66962 }
66963 else if(pwrctrlpriv->rfoff_reason > RF_CHANGE_BY_PS)
66964 { // H/W or S/W RF OFF before sleep.
66965 @@ -2462,7 +2251,7 @@ HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_MIS
66966 pwrctrlpriv->rfoff_reason = 0;
66967 pwrctrlpriv->b_hw_radio_off = _FALSE;
66968 pwrctrlpriv->rf_pwrstate = rf_on;
66969 - rtw_led_control(Adapter, LED_CTL_POWER_ON);
66970 + rtw_led_control(Adapter, LED_CTL_POWER_ON);
66971
66972 }
66973
66974 @@ -2478,7 +2267,7 @@ HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_MIS
66975 // our HW will be set in power-down mode if PDn source from all functions are configured.
66976 // 2010.10.06.
66977 //
66978 - //if(IS_HARDWARE_TYPE_8723U(Adapter))
66979 + //if(IS_HARDWARE_TYPE_8723AU(Adapter))
66980 //{
66981 // u1bTmp = rtw_read8(Adapter, REG_MULTI_FUNC_CTRL);
66982 // rtw_write8(Adapter, REG_MULTI_FUNC_CTRL, (u1bTmp|WL_HWPDN_EN));
66983 @@ -2572,23 +2361,20 @@ HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_INI
66984
66985 HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_MISC31);
66986 rtw_write8(Adapter, 0x15, 0xe9);//suggest by Johnny for lower temperature
66987 +
66988 + rtw_write8(Adapter, 0xc87, 0x50);//suggest by Jackson for CCA
66989 +
66990 //_dbg_dump_macreg(padapter);
66991
66992 - //misc
66993 - {
66994 - int i;
66995 - u8 mac_addr[6];
66996 - for(i=0; i<6; i++)
66997 - {
66998 - mac_addr[i] = rtw_read8(Adapter, REG_MACID+i);
66999 - }
67000 -
67001 - DBG_8192C("MAC Address from REG_MACID = "MAC_FMT"\n", MAC_ARG(mac_addr));
67002 - }
67003 + rtw_write16(Adapter, REG_BCN_CTRL, 0x1818); // For 2 PORT TSF SYNC
67004 +
67005 +
67006 +
67007 +#ifdef CONFIG_XMIT_ACK
67008 + //ack for xmit mgmt frames.
67009 + rtw_write32(Adapter, REG_FWHW_TXQ_CTRL, rtw_read32(Adapter, REG_FWHW_TXQ_CTRL)|BIT(12));
67010 +#endif //CONFIG_XMIT_ACK
67011
67012 -#ifdef CONFIG_ENABLE_NOTCH_FILTER
67013 - rtw_write8(Adapter, 0xc41, 0x42);
67014 -#endif
67015 exit:
67016 HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_END);
67017
67018 @@ -2616,11 +2402,6 @@ _func_exit_;
67019
67020 #define SYNC_SD7_20110802_phy_SsPwrSwitch92CU
67021 #ifdef SYNC_SD7_20110802_phy_SsPwrSwitch92CU
67022 -#define PlatformEFIOWrite1Byte rtw_write8
67023 -#define PlatformEFIOWrite2Byte rtw_write16
67024 -#define PlatformEFIORead1Byte rtw_read8
67025 -#define delay_ms rtw_mdelay_os
67026 -#define u1Byte u8
67027
67028 VOID
67029 phy_SsPwrSwitch92CU(
67030 @@ -2630,7 +2411,7 @@ phy_SsPwrSwitch92CU(
67031 )
67032 {
67033 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
67034 - u1Byte value8;
67035 + u8 value8;
67036
67037 switch( eRFPowerState )
67038 {
67039 @@ -2641,8 +2422,8 @@ phy_SsPwrSwitch92CU(
67040 //WriteXBYTE(REG_SYS_CLKR+1, ReadXBYTE(REG_SYS_CLKR+1) | BIT(3));
67041
67042 // 2. Force PWM, Enable SPS18_LDO_Marco_Block
67043 - PlatformEFIOWrite1Byte(Adapter, REG_SPS0_CTRL,
67044 - PlatformEFIORead1Byte(Adapter, REG_SPS0_CTRL) | (BIT0|BIT3));
67045 + rtw_write8(Adapter, REG_SPS0_CTRL,
67046 + rtw_read8(Adapter, REG_SPS0_CTRL) | (BIT0|BIT3));
67047
67048 // 3. restore BB, AFE control register.
67049 //RF
67050 @@ -2664,27 +2445,27 @@ phy_SsPwrSwitch92CU(
67051
67052 // 4. issue 3-wire command that RF set to Rx idle mode. This is used to re-write the RX idle mode.
67053 // We can only prvide a usual value instead and then HW will modify the value by itself.
67054 - PHY_SetRFReg(Adapter,RF90_PATH_A, 0, bRFRegOffsetMask,0x32D95);
67055 + PHY_SetRFReg(Adapter,RF_PATH_A, 0, bRFRegOffsetMask,0x32D95);
67056 if (pHalData->rf_type == RF_2T2R)
67057 {
67058 - PHY_SetRFReg(Adapter,RF90_PATH_B, 0, bRFRegOffsetMask,0x32D95);
67059 + PHY_SetRFReg(Adapter,RF_PATH_B, 0, bRFRegOffsetMask,0x32D95);
67060 }
67061 }
67062 else // Level 2 or others.
67063 {
67064 //h. AFE_PLL_CTRL 0x28[7:0] = 0x80 //disable AFE PLL
67065 - PlatformEFIOWrite1Byte(Adapter, REG_AFE_PLL_CTRL, 0x81);
67066 + rtw_write8(Adapter, REG_AFE_PLL_CTRL, 0x81);
67067
67068 // i. AFE_XTAL_CTRL 0x24[15:0] = 0x880F //gated AFE DIG_CLOCK
67069 - PlatformEFIOWrite2Byte(Adapter, REG_AFE_XTAL_CTRL, 0x800F);
67070 - delay_ms(1);
67071 + rtw_write16(Adapter, REG_AFE_XTAL_CTRL, 0x800F);
67072 + rtw_mdelay_os(1);
67073
67074 // 1. Enable MAC Clock. Can not be enabled now.
67075 //WriteXBYTE(REG_SYS_CLKR+1, ReadXBYTE(REG_SYS_CLKR+1) | BIT(3));
67076
67077 // 2. Force PWM, Enable SPS18_LDO_Marco_Block
67078 - PlatformEFIOWrite1Byte(Adapter, REG_SPS0_CTRL,
67079 - PlatformEFIORead1Byte(Adapter, REG_SPS0_CTRL) | (BIT0|BIT3));
67080 + rtw_write8(Adapter, REG_SPS0_CTRL,
67081 + rtw_read8(Adapter, REG_SPS0_CTRL) | (BIT0|BIT3));
67082
67083 // 3. restore BB, AFE control register.
67084 //RF
67085 @@ -2703,10 +2484,10 @@ phy_SsPwrSwitch92CU(
67086
67087 // 4. issue 3-wire command that RF set to Rx idle mode. This is used to re-write the RX idle mode.
67088 // We can only prvide a usual value instead and then HW will modify the value by itself.
67089 - PHY_SetRFReg(Adapter,RF90_PATH_A, 0, bRFRegOffsetMask,0x32D95);
67090 + PHY_SetRFReg(Adapter,RF_PATH_A, 0, bRFRegOffsetMask,0x32D95);
67091 if (pHalData->rf_type == RF_2T2R)
67092 {
67093 - PHY_SetRFReg(Adapter,RF90_PATH_B, 0, bRFRegOffsetMask,0x32D95);
67094 + PHY_SetRFReg(Adapter,RF_PATH_B, 0, bRFRegOffsetMask,0x32D95);
67095 }
67096
67097 // 5. gated MAC Clock
67098 @@ -2714,23 +2495,24 @@ phy_SsPwrSwitch92CU(
67099 //PlatformEFIOWrite1Byte(Adapter, REG_SYS_CLKR+1, PlatformEFIORead1Byte(Adapter, REG_SYS_CLKR+1)|(BIT3));
67100
67101 {
67102 - //u1Byte eRFPath = RF90_PATH_A,value8 = 0, retry = 0;
67103 - u1Byte bytetmp;
67104 - //PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)eRFPath, 0x0, bMaskByte0, 0x0);
67105 + //u8 eRFPath = RF_PATH_A,value8 = 0, retry = 0;
67106 + u8 bytetmp;
67107 + //PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)eRFPath, 0x0, bMaskByte0, 0x0);
67108 // 2010/08/12 MH Add for B path under SS test.
67109 //if (pHalData->RF_Type == RF_2T2R)
67110 - //PHY_SetRFReg(Adapter, RF90_PATH_B, 0x0, bMaskByte0, 0x0);
67111 + //PHY_SetRFReg(Adapter, RF_PATH_B, 0x0, bMaskByte0, 0x0);
67112
67113 - bytetmp = PlatformEFIORead1Byte(Adapter, REG_APSD_CTRL);
67114 - PlatformEFIOWrite1Byte(Adapter, REG_APSD_CTRL, bytetmp & ~BIT6);
67115 + bytetmp = rtw_read8(Adapter, REG_APSD_CTRL);
67116 + rtw_write8(Adapter, REG_APSD_CTRL, bytetmp & ~BIT6);
67117
67118 - delay_ms(10);
67119 + rtw_mdelay_os(10);
67120
67121 // Set BB reset at first
67122 - PlatformEFIOWrite1Byte(Adapter, REG_SYS_FUNC_EN, 0x17 );//0x16
67123 -
67124 + rtw_write8(Adapter, REG_SYS_FUNC_EN, 0x17 );//0x16
67125 + //undo clock gated
67126 + rtw_write32(Adapter, rFPGA0_XCD_RFParameter, rtw_read32(Adapter, rFPGA0_XCD_RFParameter)&(~BIT31));
67127 // Enable TX
67128 - PlatformEFIOWrite1Byte(Adapter, REG_TXPAUSE, 0x0);
67129 + rtw_write8(Adapter, REG_TXPAUSE, 0x0);
67130 }
67131 //Adapter->HalFunc.InitializeAdapterHandler(Adapter, Adapter->MgntInfo.dot11CurrentChannelNumber);
67132 //CardSelectiveSuspendLeave(Adapter);
67133 @@ -2740,14 +2522,14 @@ phy_SsPwrSwitch92CU(
67134
67135 case rf_sleep:
67136 case rf_off:
67137 - value8 = PlatformEFIORead1Byte(Adapter, REG_SPS0_CTRL) ;
67138 + value8 = rtw_read8(Adapter, REG_SPS0_CTRL) ;
67139 if (IS_81xxC_VENDOR_UMC_B_CUT(pHalData->VersionID))
67140 value8 &= ~(BIT0);
67141 else
67142 value8 &= ~(BIT0|BIT3);
67143 if (bRegSSPwrLvl == 1)
67144 {
67145 - RT_TRACE(COMP_POWER, DBG_LOUD, ("SS LVL1\n"));
67146 + //RT_TRACE(COMP_POWER, DBG_LOUD, ("SS LVL1\n"));
67147 // Disable RF and BB only for SelectSuspend.
67148
67149 // 1. Set BB/RF to shutdown.
67150 @@ -2777,39 +2559,40 @@ phy_SsPwrSwitch92CU(
67151 PHY_SetBBReg(Adapter, rRx_Wait_CCA, bMaskDWord ,0x001B25A0);
67152
67153 // 3. issue 3-wire command that RF set to power down.
67154 - PHY_SetRFReg(Adapter,RF90_PATH_A, 0, bRFRegOffsetMask,0);
67155 + PHY_SetRFReg(Adapter,RF_PATH_A, 0, bRFRegOffsetMask,0);
67156 if (pHalData->rf_type == RF_2T2R)
67157 {
67158 - PHY_SetRFReg(Adapter,RF90_PATH_B, 0, bRFRegOffsetMask,0);
67159 + PHY_SetRFReg(Adapter,RF_PATH_B, 0, bRFRegOffsetMask,0);
67160 }
67161
67162 // 4. Force PFM , disable SPS18_LDO_Marco_Block
67163 - PlatformEFIOWrite1Byte(Adapter, REG_SPS0_CTRL, value8);
67164 + rtw_write8(Adapter, REG_SPS0_CTRL, value8);
67165
67166 // 5. gated MAC Clock
67167 //WriteXBYTE(REG_SYS_CLKR+1, ReadXBYTE(REG_SYS_CLKR+1) & ~(BIT(3)));
67168 }
67169 else // Level 2 or others.
67170 {
67171 - RT_TRACE(COMP_POWER, DBG_LOUD, ("SS LVL2\n"));
67172 + //RT_TRACE(COMP_POWER, DBG_LOUD, ("SS LVL2\n"));
67173 {
67174 - u1Byte eRFPath = RF90_PATH_A,value8 = 0;
67175 - PlatformEFIOWrite1Byte(Adapter, REG_TXPAUSE, 0xFF);
67176 - PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)eRFPath, 0x0, bMaskByte0, 0x0);
67177 + u8 eRFPath = RF_PATH_A,value8 = 0;
67178 + rtw_write8(Adapter, REG_TXPAUSE, 0xFF);
67179 + PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)eRFPath, 0x0, bMaskByte0, 0x0);
67180 // 2010/08/12 MH Add for B path under SS test.
67181 //if (pHalData->RF_Type == RF_2T2R)
67182 - //PHY_SetRFReg(Adapter, RF90_PATH_B, 0x0, bMaskByte0, 0x0);
67183 + //PHY_SetRFReg(Adapter, RF_PATH_B, 0x0, bMaskByte0, 0x0);
67184
67185 value8 |= APSDOFF;
67186 - PlatformEFIOWrite1Byte(Adapter, REG_APSD_CTRL, value8);//0x40
67187 + rtw_write8(Adapter, REG_APSD_CTRL, value8);//0x40
67188
67189 // After switch APSD, we need to delay for stability
67190 - delay_ms(10);
67191 -
67192 + rtw_mdelay_os(10);
67193 + //before BB reset should do clock gated
67194 + rtw_write32(Adapter, rFPGA0_XCD_RFParameter, rtw_read32(Adapter, rFPGA0_XCD_RFParameter)|(BIT31));
67195 // Set BB reset at first
67196 value8 = 0 ;
67197 value8 |=( FEN_USBD | FEN_USBA | FEN_BB_GLB_RSTn);
67198 - PlatformEFIOWrite1Byte(Adapter, REG_SYS_FUNC_EN,value8 );//0x16
67199 + rtw_write8(Adapter, REG_SYS_FUNC_EN,value8 );//0x16
67200 }
67201
67202 // Disable RF and BB only for SelectSuspend.
67203 @@ -2841,22 +2624,22 @@ phy_SsPwrSwitch92CU(
67204 PHY_SetBBReg(Adapter, rRx_Wait_CCA, bMaskDWord ,0x001B25A0);
67205
67206 // 3. issue 3-wire command that RF set to power down.
67207 - PHY_SetRFReg(Adapter,RF90_PATH_A, 0, bRFRegOffsetMask,0);
67208 + PHY_SetRFReg(Adapter,RF_PATH_A, 0, bRFRegOffsetMask,0);
67209 if (pHalData->rf_type == RF_2T2R)
67210 {
67211 - PHY_SetRFReg(Adapter,RF90_PATH_B, 0, bRFRegOffsetMask,0);
67212 + PHY_SetRFReg(Adapter,RF_PATH_B, 0, bRFRegOffsetMask,0);
67213 }
67214
67215 // 4. Force PFM , disable SPS18_LDO_Marco_Block
67216 - PlatformEFIOWrite1Byte(Adapter, REG_SPS0_CTRL, value8);
67217 + rtw_write8(Adapter, REG_SPS0_CTRL, value8);
67218
67219 // 2010/10/13 MH/Isaachsu exchange sequence.
67220 //h. AFE_PLL_CTRL 0x28[7:0] = 0x80 //disable AFE PLL
67221 - PlatformEFIOWrite1Byte(Adapter, REG_AFE_PLL_CTRL, 0x80);
67222 - delay_ms(1);
67223 + rtw_write8(Adapter, REG_AFE_PLL_CTRL, 0x80);
67224 + rtw_mdelay_os(1);
67225
67226 // i. AFE_XTAL_CTRL 0x24[15:0] = 0x880F //gated AFE DIG_CLOCK
67227 - PlatformEFIOWrite2Byte(Adapter, REG_AFE_XTAL_CTRL, 0xA80F);
67228 + rtw_write16(Adapter, REG_AFE_XTAL_CTRL, 0xA80F);
67229
67230 // 5. gated MAC Clock
67231 //WriteXBYTE(REG_SYS_CLKR+1, ReadXBYTE(REG_SYS_CLKR+1) & ~(BIT(3)));
67232 @@ -2928,11 +2711,11 @@ _ResetFWDownloadRegister(
67233 IN PADAPTER Adapter
67234 )
67235 {
67236 - u8 value8;
67237 + u32 value32;
67238
67239 - value8 = rtw_read8(Adapter, REG_MCUFWDL);
67240 - value8 &= ~(MCUFWDL_EN | MCUFWDL_RDY);
67241 - rtw_write8(Adapter, REG_MCUFWDL, value8);
67242 + value32 = rtw_read32(Adapter, REG_MCUFWDL);
67243 + value32 &= ~(MCUFWDL_EN | MCUFWDL_RDY);
67244 + rtw_write32(Adapter, REG_MCUFWDL, value32);
67245 //RT_TRACE(COMP_INIT, DBG_LOUD, ("Reset FW download register.\n"));
67246 }
67247
67248 @@ -2980,7 +2763,9 @@ _ResetBB(
67249 )
67250 {
67251 u16 value16;
67252 -
67253 +
67254 + //before BB reset should do clock gated
67255 + rtw_write32(Adapter, rFPGA0_XCD_RFParameter, rtw_read32(Adapter, rFPGA0_XCD_RFParameter)|(BIT31));
67256 //reset BB
67257 value16 = rtw_read16(Adapter, REG_SYS_FUNC_EN);
67258 value16 &= ~(FEN_BBRSTB | FEN_BB_GLB_RSTn);
67259 @@ -3072,11 +2857,12 @@ e. SYS_FUNC_EN 0x02[7:0] = 0x14 //reset
67260 ***************************************/
67261 u8 eRFPath = 0,value8 = 0;
67262 rtw_write8(Adapter, REG_TXPAUSE, 0xFF);
67263 - PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)eRFPath, 0x0, bMaskByte0, 0x0);
67264 + PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)eRFPath, 0x0, bMaskByte0, 0x0);
67265
67266 value8 |= APSDOFF;
67267 rtw_write8(Adapter, REG_APSD_CTRL, value8);//0x40
67268 -
67269 + //before BB reset should do clock gated
67270 + rtw_write32(Adapter, rFPGA0_XCD_RFParameter, rtw_read32(Adapter, rFPGA0_XCD_RFParameter)|(BIT31));
67271 value8 = 0 ;
67272 value8 |=( FEN_USBD | FEN_USBA | FEN_BB_GLB_RSTn);
67273 rtw_write8(Adapter, REG_SYS_FUNC_EN,value8 );//0x16
67274 @@ -3435,7 +3221,7 @@ unsigned int rtl8192cu_inirp_init(PADAPT
67275 u8 i;
67276 struct recv_buf *precvbuf;
67277 uint status;
67278 - struct dvobj_priv *pdev=&Adapter->dvobjpriv;
67279 + struct dvobj_priv *pdev = adapter_to_dvobj(Adapter);
67280 struct intf_hdl * pintfhdl=&Adapter->iopriv.intf;
67281 struct recv_priv *precvpriv = &(Adapter->recvpriv);
67282 u32 (*_read_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
67283 @@ -3498,69 +3284,6 @@ unsigned int rtl8192cu_inirp_deinit(PADA
67284 return _SUCCESS;
67285 }
67286
67287 -//-------------------------------------------------------------------------
67288 -//
67289 -// Channel Plan
67290 -//
67291 -//-------------------------------------------------------------------------
67292 -
67293 -static VOID
67294 -ReadChannelPlan(
67295 - IN PADAPTER Adapter,
67296 - IN u8* PROMContent,
67297 - IN BOOLEAN AutoLoadFail
67298 - )
67299 -{
67300 -
67301 -#define EEPROM_TEST_CHANNEL_PLAN (0x7D)
67302 -#define EEPROM_NORMAL_CHANNEL_PLAN (0x75)
67303 -
67304 - struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);
67305 - struct registry_priv *pregistrypriv = &Adapter->registrypriv;
67306 - u8 channelPlan;
67307 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
67308 -
67309 - if(AutoLoadFail){
67310 - channelPlan = CHPL_FCC;
67311 - }
67312 - else{
67313 - if(IS_NORMAL_CHIP(pHalData->VersionID))
67314 - channelPlan = PROMContent[EEPROM_NORMAL_CHANNEL_PLAN];
67315 - else
67316 - channelPlan = PROMContent[EEPROM_TEST_CHANNEL_PLAN];
67317 - }
67318 -
67319 - if((pregistrypriv->channel_plan>= RT_CHANNEL_DOMAIN_MAX) || (channelPlan & EEPROM_CHANNEL_PLAN_BY_HW_MASK))
67320 - {
67321 - pmlmepriv->ChannelPlan = _HalMapChannelPlan8192C(Adapter, (channelPlan & (~(EEPROM_CHANNEL_PLAN_BY_HW_MASK))));
67322 - //pMgntInfo->bChnlPlanFromHW = (channelPlan & EEPROM_CHANNEL_PLAN_BY_HW_MASK) ? _TRUE : _FALSE; // User cannot change channel plan.
67323 - }
67324 - else
67325 - {
67326 - pmlmepriv->ChannelPlan = (RT_CHANNEL_DOMAIN)pregistrypriv->channel_plan;
67327 - }
67328 -
67329 -#if 0 //todo:
67330 - switch(pMgntInfo->ChannelPlan)
67331 - {
67332 - case RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN:
67333 - {
67334 - PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(pMgntInfo);
67335 -
67336 - pDot11dInfo->bEnabled = _TRUE;
67337 - }
67338 - //RT_TRACE(COMP_INIT, DBG_LOUD, ("Enable dot11d when RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN!\n"));
67339 - break;
67340 - }
67341 -#endif
67342 -
67343 - //RT_TRACE(COMP_INIT, DBG_LOUD, ("RegChannelPlan(%d) EEPROMChannelPlan(%ld)", pMgntInfo->RegChannelPlan, (u4Byte)channelPlan));
67344 - //RT_TRACE(COMP_INIT, DBG_LOUD, ("ChannelPlan = %d\n" , pMgntInfo->ChannelPlan));
67345 -
67346 - MSG_8192C("RT_ChannelPlan: 0x%02x\n", pmlmepriv->ChannelPlan);
67347 -
67348 -}
67349 -
67350
67351 //-------------------------------------------------------------------------
67352 //
67353 @@ -3581,7 +3304,7 @@ _ReadPowerValueFromPROM(
67354
67355 if(AutoLoadFail){
67356 for(group = 0 ; group < CHANNEL_GROUP_MAX ; group++){
67357 - for(rfPath = 0 ; rfPath < RF90_PATH_MAX ; rfPath++){
67358 + for(rfPath = 0 ; rfPath < RF_PATH_MAX ; rfPath++){
67359 pwrInfo->CCKIndex[rfPath][group] = EEPROM_Default_TxPowerLevel;
67360 pwrInfo->HT40_1SIndex[rfPath][group] = EEPROM_Default_TxPowerLevel;
67361 pwrInfo->HT40_2SIndexDiff[rfPath][group]= EEPROM_Default_HT40_2SDiff;
67362 @@ -3598,7 +3321,7 @@ _ReadPowerValueFromPROM(
67363 return;
67364 }
67365
67366 - for(rfPath = 0 ; rfPath < RF90_PATH_MAX ; rfPath++){
67367 + for(rfPath = 0 ; rfPath < RF_PATH_MAX ; rfPath++){
67368 for(group = 0 ; group < CHANNEL_GROUP_MAX ; group++){
67369 eeAddr = EEPROM_CCK_TX_PWR_INX + (rfPath * 3) + group;
67370 pwrInfo->CCKIndex[rfPath][group] = PROMContent[eeAddr];
67371 @@ -3609,7 +3332,7 @@ _ReadPowerValueFromPROM(
67372 }
67373
67374 for(group = 0 ; group < CHANNEL_GROUP_MAX ; group++){
67375 - for(rfPath = 0 ; rfPath < RF90_PATH_MAX ; rfPath++){
67376 + for(rfPath = 0 ; rfPath < RF_PATH_MAX ; rfPath++){
67377 pwrInfo->HT40_2SIndexDiff[rfPath][group] =
67378 (PROMContent[EEPROM_HT40_2S_TX_PWR_INX_DIFF + group] >> (rfPath * 4)) & 0xF;
67379
67380 @@ -3675,7 +3398,7 @@ ReadTxPowerInfo(
67381 if(!AutoLoadFail)
67382 pHalData->bTXPowerDataReadFromEEPORM = _TRUE;
67383
67384 - for(rfPath = 0 ; rfPath < RF90_PATH_MAX ; rfPath++){
67385 + for(rfPath = 0 ; rfPath < RF_PATH_MAX ; rfPath++){
67386 for(ch = 0 ; ch < CHANNEL_MAX_NUMBER ; ch++){
67387 group = _GetChannelGroup(ch);
67388
67389 @@ -3696,7 +3419,7 @@ ReadTxPowerInfo(
67390
67391 #if DBG
67392
67393 - for(rfPath = 0 ; rfPath < RF90_PATH_MAX ; rfPath++){
67394 + for(rfPath = 0 ; rfPath < RF_PATH_MAX ; rfPath++){
67395 for(ch = 0 ; ch < CHANNEL_MAX_NUMBER ; ch++){
67396 RTPRINT(FINIT, INIT_TxPower,
67397 ("RF(%d)-Ch(%d) [CCK / HT40_1S / HT40_2S] = [0x%x / 0x%x / 0x%x]\n",
67398 @@ -3708,19 +3431,19 @@ ReadTxPowerInfo(
67399 }
67400
67401 for(ch = 0 ; ch < CHANNEL_MAX_NUMBER ; ch++){
67402 - RTPRINT(FINIT, INIT_TxPower, ("RF-A Ht20 to HT40 Diff[%d] = 0x%x\n", ch, pHalData->TxPwrHt20Diff[RF90_PATH_A][ch]));
67403 + RTPRINT(FINIT, INIT_TxPower, ("RF-A Ht20 to HT40 Diff[%d] = 0x%x\n", ch, pHalData->TxPwrHt20Diff[RF_PATH_A][ch]));
67404 }
67405
67406 for(ch = 0 ; ch < CHANNEL_MAX_NUMBER ; ch++){
67407 - RTPRINT(FINIT, INIT_TxPower, ("RF-A Legacy to Ht40 Diff[%d] = 0x%x\n", ch, pHalData->TxPwrLegacyHtDiff[RF90_PATH_A][ch]));
67408 + RTPRINT(FINIT, INIT_TxPower, ("RF-A Legacy to Ht40 Diff[%d] = 0x%x\n", ch, pHalData->TxPwrLegacyHtDiff[RF_PATH_A][ch]));
67409 }
67410
67411 for(ch = 0 ; ch < CHANNEL_MAX_NUMBER ; ch++){
67412 - RTPRINT(FINIT, INIT_TxPower, ("RF-B Ht20 to HT40 Diff[%d] = 0x%x\n", ch, pHalData->TxPwrHt20Diff[RF90_PATH_B][ch]));
67413 + RTPRINT(FINIT, INIT_TxPower, ("RF-B Ht20 to HT40 Diff[%d] = 0x%x\n", ch, pHalData->TxPwrHt20Diff[RF_PATH_B][ch]));
67414 }
67415
67416 for(ch = 0 ; ch < CHANNEL_MAX_NUMBER ; ch++){
67417 - RTPRINT(FINIT, INIT_TxPower, ("RF-B Legacy to HT40 Diff[%d] = 0x%x\n", ch, pHalData->TxPwrLegacyHtDiff[RF90_PATH_B][ch]));
67418 + RTPRINT(FINIT, INIT_TxPower, ("RF-B Legacy to HT40 Diff[%d] = 0x%x\n", ch, pHalData->TxPwrLegacyHtDiff[RF_PATH_B][ch]));
67419 }
67420
67421 #endif
67422 @@ -3786,8 +3509,6 @@ _ReadIDs(
67423 pHalData->CustomerID = RT_CID_DLINK;
67424 else if((pHalData->EEPROMVID == 0x2001) && (pHalData->EEPROMPID == 0x330a))
67425 pHalData->CustomerID = RT_CID_DLINK;
67426 - else if((pHalData->EEPROMVID == 0x2001) && (pHalData->EEPROMPID == 0x330d))
67427 - pHalData->CustomerID = RT_CID_DLINK;
67428 break;
67429 case EEPROM_CID_WHQL:
67430 /*
67431 @@ -3854,31 +3575,8 @@ _ReadBoardType(
67432 )
67433 {
67434 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
67435 - BOOLEAN isNormal = IS_NORMAL_CHIP(pHalData->VersionID);
67436 u32 value32;
67437 u8 boardType = BOARD_USB_DONGLE;
67438 -#if 0
67439 - if(isNormal)
67440 - {
67441 - value32 = rtw_read32(Adapter, REG_HPON_FSM);
67442 -
67443 - DBG_8192C("first value 0x%x BoardType after 0x%x \n", CHIP_BONDING_IDENTIFIER(value32), pHalData->BoardType);
67444 -
67445 - if(!IS_92C_SERIAL(pHalData->VersionID))
67446 - {
67447 - if(CHIP_BONDING_IDENTIFIER(value32) == CHIP_BONDING_88C_USB_MCARD)
67448 - {
67449 - pHalData->BoardType = BOARD_MINICARD;
67450 - DBG_8192C("value 0x%x BoardType after 0x%x \n", CHIP_BONDING_IDENTIFIER(value32), pHalData->BoardType);
67451 - }
67452 - else if(CHIP_BONDING_IDENTIFIER(value32) == CHIP_BONDING_88C_USB_HP)
67453 - {
67454 - pHalData->BoardType = BOARD_USB_High_PA;
67455 - DBG_8192C("value 0x%x BoardType after 0x%x \n", CHIP_BONDING_IDENTIFIER(value32), pHalData->BoardType);
67456 - }
67457 - }
67458 - }
67459 -#endif
67460
67461 if(AutoloadFail){
67462 if(IS_8723_SERIES(pHalData->VersionID))
67463 @@ -3891,17 +3589,9 @@ _ReadBoardType(
67464 return;
67465 }
67466
67467 - if(isNormal)
67468 - {
67469 - boardType = PROMContent[EEPROM_NORMAL_BoardType];
67470 - boardType &= BOARD_TYPE_NORMAL_MASK;//bit[7:5]
67471 - boardType >>= 5;
67472 - }
67473 - else
67474 - {
67475 - boardType = PROMContent[EEPROM_RF_OPT4];
67476 - boardType &= BOARD_TYPE_TEST_MASK;
67477 - }
67478 + boardType = PROMContent[EEPROM_NORMAL_BoardType];
67479 + boardType &= BOARD_TYPE_NORMAL_MASK;//bit[7:5]
67480 + boardType >>= 5;
67481
67482 pHalData->BoardType = boardType;
67483 MSG_8192C("_ReadBoardType(%x)\n",pHalData->BoardType);
67484 @@ -4145,7 +3835,7 @@ readAdapterInfo_8192CU(
67485 rtl8192c_ReadBluetoothCoexistInfo(Adapter, PROMContent, pEEPROM->bautoload_fail_flag);
67486 #endif
67487
67488 - ReadChannelPlan(Adapter, PROMContent, pEEPROM->bautoload_fail_flag);
67489 + rtl8192c_EfuseParseChnlPlan(Adapter, PROMContent, pEEPROM->bautoload_fail_flag);
67490 _ReadThermalMeter(Adapter, PROMContent, pEEPROM->bautoload_fail_flag);
67491 _ReadLEDSetting(Adapter, PROMContent, pEEPROM->bautoload_fail_flag);
67492 _ReadRFSetting(Adapter, PROMContent, pEEPROM->bautoload_fail_flag);
67493 @@ -4192,7 +3882,7 @@ static void _ReadPROMContent(
67494
67495 //pHalData->EEType = IS_BOOT_FROM_EEPROM(Adapter) ? EEPROM_93C46 : EEPROM_BOOT_EFUSE;
67496
67497 - //if(IS_HARDWARE_TYPE_8723(Adapter))
67498 + //if(IS_HARDWARE_TYPE_8723A(Adapter))
67499 // readAdapterInfo_8723U(Adapter);
67500 //else
67501 readAdapterInfo_8192CU(Adapter);
67502 @@ -4287,7 +3977,7 @@ static int _ReadAdapterInfo8192CU(PADAPT
67503
67504 //Efuse_InitSomeVar(Adapter);
67505
67506 - //if(IS_HARDWARE_TYPE_8723(Adapter))
67507 + //if(IS_HARDWARE_TYPE_8723A(Adapter))
67508 // _EfuseCellSel(Adapter);
67509
67510 _ReadRFType(Adapter);//rf_chip -> _InitRFType()
67511 @@ -4339,20 +4029,8 @@ static void ResumeTxBeacon(_adapter *pad
67512 // 2010.03.01. Marked by tynli. No need to call workitem beacause we record the value
67513 // which should be read from register to a global variable.
67514
67515 - if(IS_NORMAL_CHIP(pHalData->VersionID))
67516 - {
67517 - rtw_write8(padapter, REG_FWHW_TXQ_CTRL+2, (pHalData->RegFwHwTxQCtrl) | BIT6);
67518 - pHalData->RegFwHwTxQCtrl |= BIT6;
67519 - rtw_write8(padapter, REG_TBTT_PROHIBIT+1, 0xff);
67520 - pHalData->RegReg542 |= BIT0;
67521 - rtw_write8(padapter, REG_TBTT_PROHIBIT+2, pHalData->RegReg542);
67522 - }
67523 - else
67524 - {
67525 - pHalData->RegTxPause = rtw_read8(padapter, REG_TXPAUSE);
67526 - rtw_write8(padapter, REG_TXPAUSE, pHalData->RegTxPause & (~BIT6));
67527 - }
67528 -
67529 + rtw_write8(padapter, REG_FWHW_TXQ_CTRL+2, (pHalData->RegFwHwTxQCtrl) | BIT6);
67530 + pHalData->RegFwHwTxQCtrl |= BIT6;
67531 }
67532
67533 static void StopTxBeacon(_adapter *padapter)
67534 @@ -4362,19 +4040,8 @@ static void StopTxBeacon(_adapter *padap
67535 // 2010.03.01. Marked by tynli. No need to call workitem beacause we record the value
67536 // which should be read from register to a global variable.
67537
67538 - if(IS_NORMAL_CHIP(pHalData->VersionID))
67539 - {
67540 - rtw_write8(padapter, REG_FWHW_TXQ_CTRL+2, (pHalData->RegFwHwTxQCtrl) & (~BIT6));
67541 - pHalData->RegFwHwTxQCtrl &= (~BIT6);
67542 - rtw_write8(padapter, REG_TBTT_PROHIBIT+1, 0x64);
67543 - pHalData->RegReg542 &= ~(BIT0);
67544 - rtw_write8(padapter, REG_TBTT_PROHIBIT+2, pHalData->RegReg542);
67545 - }
67546 - else
67547 - {
67548 - pHalData->RegTxPause = rtw_read8(padapter, REG_TXPAUSE);
67549 - rtw_write8(padapter, REG_TXPAUSE, pHalData->RegTxPause | BIT6);
67550 - }
67551 + rtw_write8(padapter, REG_FWHW_TXQ_CTRL+2, (pHalData->RegFwHwTxQCtrl) & (~BIT6));
67552 + pHalData->RegFwHwTxQCtrl &= (~BIT6);
67553
67554 //todo: CheckFwRsvdPageContent(Adapter); // 2010.06.23. Added by tynli.
67555
67556 @@ -4460,32 +4127,294 @@ u16 calc_crc(u8 * pdata,int length)
67557 return CRC;
67558 }
67559
67560 -#ifdef CONFIG_WOWLAN
67561 -static int rtw_wowlan_set_pattern(_adapter *padapter ,u8* pbuf){
67562 - struct pwrctrl_priv *pwrpriv=&padapter->pwrctrlpriv;
67563 - int res=0,crc_idx;
67564 - u32 content=0,cmd=0;
67565 - u32 *pdata;
67566 - u8 config,crc,mc,bc,uc,idx,pattern_len,packet[200],packet_len,valid;
67567 - u16 crc_val=0,i;
67568 -
67569 - config=pbuf[0];
67570 - bc=config & BIT(3)?1:0;
67571 - mc=config & BIT(4)?1:0;
67572 - uc=config & BIT(5)?1:0;
67573 - idx=config & 0x7;
67574 - crc=config & BIT(6)?1:0;
67575 - valid=config & BIT(7)?1:0;
67576 - pattern_len=pbuf[1];
67577 - packet_len=pattern_len*8;
67578 - pdata=(u32 *)pbuf;
67579 +static void hw_var_set_opmode(PADAPTER Adapter, u8 variable, u8* val)
67580 +{
67581 + u8 val8;
67582 + u8 mode = *((u8 *)val);
67583 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
67584
67585 - // Write to the Wakeup CAM
67586 - //offset 0
67587 - if(pattern_len>=4){
67588 - content=pdata[1];
67589 - }
67590 - else{
67591 +#ifdef CONFIG_CONCURRENT_MODE
67592 + if(Adapter->iface_type == IFACE_PORT1)
67593 + {
67594 + // disable Port1 TSF update
67595 + rtw_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1)|BIT(4));
67596 +
67597 + // set net_type
67598 + val8 = rtw_read8(Adapter, MSR)&0x03;
67599 + val8 |= (mode<<2);
67600 + rtw_write8(Adapter, MSR, val8);
67601 +
67602 + //reset TSF1
67603 + rtw_write8(Adapter, REG_DUAL_TSF_RST, BIT(1));
67604 +
67605 + DBG_871X("%s()-%d mode = %d\n", __FUNCTION__, __LINE__, mode);
67606 +
67607 + if((mode == _HW_STATE_STATION_) || (mode == _HW_STATE_NOLINK_))
67608 + {
67609 + if(!check_buddy_mlmeinfo_state(Adapter, WIFI_FW_AP_STATE))
67610 + {
67611 + StopTxBeacon(Adapter);
67612 + }
67613 +
67614 + rtw_write8(Adapter,REG_BCN_CTRL_1, 0x19);//disable atim wnd
67615 + //rtw_write8(Adapter,REG_BCN_CTRL_1, 0x18);
67616 + }
67617 + else if((mode == _HW_STATE_ADHOC_) /*|| (mode == _HW_STATE_AP_)*/)
67618 + {
67619 + ResumeTxBeacon(Adapter);
67620 + rtw_write8(Adapter,REG_BCN_CTRL_1, 0x1a);
67621 + }
67622 + else if(mode == _HW_STATE_AP_)
67623 + {
67624 + ResumeTxBeacon(Adapter);
67625 +
67626 + rtw_write8(Adapter, REG_BCN_CTRL_1, 0x12);
67627 +
67628 + //Set RCR
67629 + //rtw_write32(padapter, REG_RCR, 0x70002a8e);//CBSSID_DATA must set to 0
67630 + rtw_write32(Adapter, REG_RCR, 0x7000228e);//CBSSID_DATA must set to 0
67631 + //enable to rx data frame
67632 + rtw_write16(Adapter, REG_RXFLTMAP2, 0xFFFF);
67633 + //enable to rx ps-poll
67634 + rtw_write16(Adapter, REG_RXFLTMAP1, 0x0400);
67635 +
67636 + //Beacon Control related register for first time
67637 + rtw_write8(Adapter, REG_BCNDMATIM, 0x02); // 2ms
67638 + rtw_write8(Adapter, REG_DRVERLYINT, 0x05);// 5ms
67639 + //rtw_write8(Adapter, REG_BCN_MAX_ERR, 0xFF);
67640 + rtw_write8(Adapter, REG_ATIMWND_1, 0x0a); // 10ms for port1
67641 + rtw_write16(Adapter, REG_BCNTCFG, 0x00);
67642 + rtw_write16(Adapter, REG_TBTT_PROHIBIT, 0xff04);
67643 + rtw_write16(Adapter, REG_TSFTR_SYN_OFFSET, 0x7fff);// +32767 (~32ms)
67644 +
67645 +
67646 + //enable BCN1 Function for if2
67647 + //don't enable update TSF1 for if2 (due to TSF update when beacon/probe rsp are received)
67648 + rtw_write8(Adapter, REG_BCN_CTRL_1, (DIS_TSF_UDT0_NORMAL_CHIP|EN_BCN_FUNCTION | EN_TXBCN_RPT|BIT(1)));
67649 +
67650 +#ifdef CONFIG_CONCURRENT_MODE
67651 + if(check_buddy_fwstate(Adapter, WIFI_FW_NULL_STATE))
67652 + rtw_write8(Adapter, REG_BCN_CTRL,
67653 + rtw_read8(Adapter, REG_BCN_CTRL) & ~EN_BCN_FUNCTION);
67654 +#endif
67655 +
67656 + DBG_871X("%s()-%d: REG_BCN_CTRL_1 = %02x\n", __FUNCTION__, __LINE__, rtw_read8(Adapter, REG_BCN_CTRL_1));
67657 +
67658 + //BCN1 TSF will sync to BCN0 TSF with offset(0x518) if if1_sta linked
67659 + //rtw_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1)|BIT(5));
67660 + //rtw_write8(Adapter, REG_DUAL_TSF_RST, BIT(3));
67661 +
67662 + //dis BCN0 ATIM WND if if1 is station
67663 + rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(0));
67664 +#ifdef CONFIG_TSF_RESET_OFFLOAD
67665 + // Reset TSF for STA+AP concurrent mode
67666 + if ( check_buddy_fwstate(Adapter, (WIFI_STATION_STATE|WIFI_ASOC_STATE)) ) {
67667 + if (reset_tsf(Adapter, IFACE_PORT1) == _FALSE)
67668 + DBG_871X("ERROR! %s()-%d: Reset port1 TSF fail\n",
67669 + __FUNCTION__, __LINE__);
67670 + }
67671 +#endif // CONFIG_TSF_RESET_OFFLOAD
67672 + }
67673 +
67674 + }
67675 + else // (Adapter->iface_type == IFACE_PORT1)
67676 +#endif //CONFIG_CONCURRENT_MODE
67677 + {
67678 + // disable Port0 TSF update
67679 + rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(4));
67680 +
67681 + // set net_type
67682 + val8 = rtw_read8(Adapter, MSR)&0x0c;
67683 + val8 |= mode;
67684 + rtw_write8(Adapter, MSR, val8);
67685 +
67686 + //reset TSF0
67687 + rtw_write8(Adapter, REG_DUAL_TSF_RST, BIT(0));
67688 +
67689 + DBG_871X("%s()-%d mode = %d\n", __FUNCTION__, __LINE__, mode);
67690 +
67691 + if((mode == _HW_STATE_STATION_) || (mode == _HW_STATE_NOLINK_))
67692 + {
67693 +#ifdef CONFIG_CONCURRENT_MODE
67694 + if(!check_buddy_mlmeinfo_state(Adapter, WIFI_FW_AP_STATE))
67695 +#endif //CONFIG_CONCURRENT_MODE
67696 + {
67697 + StopTxBeacon(Adapter);
67698 + }
67699 +
67700 + rtw_write8(Adapter,REG_BCN_CTRL, 0x19);//disable atim wnd
67701 + //rtw_write8(Adapter,REG_BCN_CTRL, 0x18);
67702 + }
67703 + else if((mode == _HW_STATE_ADHOC_) /*|| (mode == _HW_STATE_AP_)*/)
67704 + {
67705 + ResumeTxBeacon(Adapter);
67706 + rtw_write8(Adapter,REG_BCN_CTRL, 0x1a);
67707 + }
67708 + else if(mode == _HW_STATE_AP_)
67709 + {
67710 + ResumeTxBeacon(Adapter);
67711 +
67712 + rtw_write8(Adapter, REG_BCN_CTRL, 0x12);
67713 +
67714 + //Set RCR
67715 + //write32(padapter, REG_RCR, 0x70002a8e);//CBSSID_DATA must set to 0
67716 + rtw_write32(Adapter, REG_RCR, 0x7000228e);//CBSSID_DATA must set to 0
67717 + //enable to rx data frame
67718 + rtw_write16(Adapter, REG_RXFLTMAP2, 0xFFFF);
67719 + //enable to rx ps-poll
67720 + rtw_write16(Adapter, REG_RXFLTMAP1, 0x0400);
67721 +
67722 + //Beacon Control related register for first time
67723 +
67724 + rtw_write8(Adapter, REG_BCNDMATIM, 0x02); // 2ms
67725 + rtw_write8(Adapter, REG_DRVERLYINT, 0x05);// 5ms
67726 +
67727 + //write8(Adapter, REG_BCN_MAX_ERR, 0xFF);
67728 + rtw_write8(Adapter, REG_ATIMWND, 0x0a); // 10ms for port0
67729 + rtw_write16(Adapter, REG_BCNTCFG, 0x00);
67730 + rtw_write16(Adapter, REG_TBTT_PROHIBIT, 0xff04);
67731 + rtw_write16(Adapter, REG_TSFTR_SYN_OFFSET, 0x7fff);// +32767 (~32ms)
67732 +
67733 + //enable BCN0 Function for if1
67734 + //don't enable update TSF0 for if1 (due to TSF update when beacon/probe rsp are received)
67735 + rtw_write8(Adapter, REG_BCN_CTRL, (DIS_TSF_UDT0_NORMAL_CHIP|EN_BCN_FUNCTION | EN_TXBCN_RPT|BIT(1)));
67736 +
67737 +#ifdef CONFIG_CONCURRENT_MODE
67738 + if(check_buddy_fwstate(Adapter, WIFI_FW_NULL_STATE))
67739 + rtw_write8(Adapter, REG_BCN_CTRL_1,
67740 + rtw_read8(Adapter, REG_BCN_CTRL_1) & ~EN_BCN_FUNCTION);
67741 +#endif
67742 + //BCN1 TSF will sync to BCN0 TSF with offset(0x518) if if1_sta linked
67743 + //only interface 2 as AP MODE need to sync
67744 + //rtw_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1)|BIT(5));
67745 +
67746 +
67747 + //dis BCN1 ATIM WND if if2 is station
67748 + rtw_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1)|BIT(0));
67749 +#ifdef CONFIG_TSF_RESET_OFFLOAD
67750 + // Reset TSF for STA+AP concurrent mode
67751 + if ( check_buddy_fwstate(Adapter, (WIFI_STATION_STATE|WIFI_ASOC_STATE)) ) {
67752 + if (reset_tsf(Adapter, IFACE_PORT0) == _FALSE)
67753 + DBG_871X("ERROR! %s()-%d: Reset port0 TSF fail\n",
67754 + __FUNCTION__, __LINE__);
67755 + }
67756 +#endif // CONFIG_TSF_RESET_OFFLOAD
67757 +
67758 + }
67759 +
67760 +
67761 + }
67762 +
67763 +}
67764 +
67765 +static void hw_var_set_macaddr(PADAPTER Adapter, u8 variable, u8* val)
67766 +{
67767 + u8 idx = 0;
67768 + u32 reg_macid;
67769 +
67770 +#ifdef CONFIG_CONCURRENT_MODE
67771 + if(Adapter->iface_type == IFACE_PORT1)
67772 + {
67773 + reg_macid = REG_MACID1;
67774 + }
67775 + else
67776 +#endif
67777 + {
67778 + reg_macid = REG_MACID;
67779 + }
67780 +
67781 + for(idx = 0 ; idx < 6; idx++)
67782 + {
67783 + rtw_write8(Adapter, (reg_macid+idx), val[idx]);
67784 + }
67785 +
67786 +}
67787 +
67788 +static void hw_var_set_bssid(PADAPTER Adapter, u8 variable, u8* val)
67789 +{
67790 + u8 idx = 0;
67791 + u32 reg_bssid;
67792 +
67793 +#ifdef CONFIG_CONCURRENT_MODE
67794 + if(Adapter->iface_type == IFACE_PORT1)
67795 + {
67796 + reg_bssid = REG_BSSID1;
67797 + }
67798 + else
67799 +#endif
67800 + {
67801 + reg_bssid = REG_BSSID;
67802 + }
67803 +
67804 + for(idx = 0 ; idx < 6; idx++)
67805 + {
67806 + rtw_write8(Adapter, (reg_bssid+idx), val[idx]);
67807 + }
67808 +
67809 +}
67810 +
67811 +static void hw_var_set_bcn_func(PADAPTER Adapter, u8 variable, u8* val)
67812 +{
67813 + u32 bcn_ctrl_reg;
67814 +
67815 +#ifdef CONFIG_CONCURRENT_MODE
67816 + if(Adapter->iface_type == IFACE_PORT1)
67817 + {
67818 + bcn_ctrl_reg = REG_BCN_CTRL_1;
67819 +
67820 + if(*((u8 *)val))
67821 + {
67822 + rtw_write8(Adapter, bcn_ctrl_reg, (EN_BCN_FUNCTION | EN_TXBCN_RPT));
67823 + }
67824 + else
67825 + {
67826 + rtw_write8(Adapter, bcn_ctrl_reg, rtw_read8(Adapter, bcn_ctrl_reg)&(~(EN_BCN_FUNCTION | EN_TXBCN_RPT)));
67827 + }
67828 + }
67829 + else
67830 +#endif
67831 + {
67832 + bcn_ctrl_reg = REG_BCN_CTRL;
67833 + if(*((u8 *)val))
67834 + {
67835 + rtw_write8(Adapter, bcn_ctrl_reg, (EN_BCN_FUNCTION | EN_TXBCN_RPT));
67836 + }
67837 + else
67838 + {
67839 + //rtw_write8(Adapter, bcn_ctrl_reg, rtw_read8(Adapter, bcn_ctrl_reg)&(~(EN_BCN_FUNCTION | EN_TXBCN_RPT)));
67840 + rtw_write8(Adapter, bcn_ctrl_reg, (rtw_read8(Adapter, bcn_ctrl_reg)&(~(EN_TXBCN_RPT))) | DIS_TSF_UDT0_NORMAL_CHIP);
67841 + }
67842 + }
67843 +
67844 +
67845 +}
67846 +
67847 +#ifdef CONFIG_WOWLAN
67848 +static int rtw_wowlan_set_pattern(_adapter *padapter ,u8* pbuf){
67849 + struct pwrctrl_priv *pwrpriv=&padapter->pwrctrlpriv;
67850 + int res=0,crc_idx;
67851 + u32 content=0,cmd=0;
67852 + u32 *pdata;
67853 + u8 config,crc,mc,bc,uc,idx,pattern_len,packet[200],packet_len,valid;
67854 + u16 crc_val=0,i;
67855 +
67856 + config=pbuf[0];
67857 + bc=config & BIT(3)?1:0;
67858 + mc=config & BIT(4)?1:0;
67859 + uc=config & BIT(5)?1:0;
67860 + idx=config & 0x7;
67861 + crc=config & BIT(6)?1:0;
67862 + valid=config & BIT(7)?1:0;
67863 + pattern_len=pbuf[1];
67864 + packet_len=pattern_len*8;
67865 + pdata=(u32 *)pbuf;
67866 +
67867 + // Write to the Wakeup CAM
67868 + //offset 0
67869 + if(pattern_len>=4){
67870 + content=pdata[1];
67871 + }
67872 + else{
67873 content=0;
67874 }
67875 DBG_8192C("\nrtw_wowlan_set_pattern offset[0] content 0x%x [cpu_to_le32 0x%x]\n", content,__cpu_to_le32(content));
67876 @@ -4624,6 +4553,374 @@ void rtw_wowlan_reload_pattern(_adapter
67877 }
67878 #endif //CONFIG_WOWLAN
67879
67880 +static void hw_var_set_correct_tsf(PADAPTER Adapter, u8 variable, u8* val)
67881 +{
67882 +#ifdef CONFIG_CONCURRENT_MODE
67883 + u64 tsf;
67884 + struct mlme_ext_priv *pmlmeext = &Adapter->mlmeextpriv;
67885 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
67886 +
67887 + //tsf = pmlmeext->TSFValue - ((u32)pmlmeext->TSFValue % (pmlmeinfo->bcn_interval*1024)) -1024; //us
67888 + tsf = pmlmeext->TSFValue - rtw_modular64(pmlmeext->TSFValue, (pmlmeinfo->bcn_interval*1024)) -1024; //us
67889 +
67890 + if(((pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE) || ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE))
67891 + {
67892 + //pHalData->RegTxPause |= STOP_BCNQ;BIT(6)
67893 + //rtw_write8(Adapter, REG_TXPAUSE, (rtw_read8(Adapter, REG_TXPAUSE)|BIT(6)));
67894 + StopTxBeacon(Adapter);
67895 + }
67896 +
67897 + if(Adapter->iface_type == IFACE_PORT1)
67898 + {
67899 + //disable related TSF function
67900 + rtw_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1)&(~BIT(3)));
67901 +
67902 + rtw_write32(Adapter, REG_TSFTR1, tsf);
67903 + rtw_write32(Adapter, REG_TSFTR1+4, tsf>>32);
67904 +
67905 + //enable related TSF function
67906 + rtw_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1)|BIT(3));
67907 +
67908 +
67909 +#ifdef CONFIG_TSF_RESET_OFFLOAD
67910 + // Update buddy port's TSF(TBTT) if it is SoftAP for beacon TX issue!
67911 + if ( (pmlmeinfo->state&0x03) == WIFI_FW_STATION_STATE
67912 + && check_buddy_fwstate(Adapter, WIFI_AP_STATE) ) {
67913 + if (reset_tsf(Adapter, IFACE_PORT0) == _FALSE)
67914 + DBG_871X("ERROR! %s()-%d: Reset port0 TSF fail\n",
67915 + __FUNCTION__, __LINE__);
67916 + }
67917 +#endif // CONFIG_TSF_RESET_OFFLOAD
67918 +
67919 + }
67920 + else // Adapter->iface_type == IFACE_PORT1
67921 + {
67922 + //disable related TSF function
67923 + rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(3)));
67924 + // disable TSF update instead! May induce burst beacon TX
67925 + //rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(4));
67926 +
67927 + rtw_write32(Adapter, REG_TSFTR, tsf);
67928 + rtw_write32(Adapter, REG_TSFTR+4, tsf>>32);
67929 +
67930 + //enable related TSF function
67931 + rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(3));
67932 + //rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4)));
67933 +
67934 + // Update buddy port's TSF if it is SoftAP for beacon TX issue!
67935 + if ( (pmlmeinfo->state&0x03) == WIFI_FW_STATION_STATE
67936 + && check_buddy_fwstate(Adapter, WIFI_AP_STATE)
67937 + ) {
67938 + //disable related TSF function
67939 + rtw_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1)&(~BIT(3)));
67940 + // disable TSF update instead!
67941 + //rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL_1)|BIT(4));
67942 +
67943 + rtw_write32(Adapter, REG_TSFTR1, tsf);
67944 + rtw_write32(Adapter, REG_TSFTR1+4, tsf>>32);
67945 +
67946 + //enable related TSF function
67947 + rtw_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1)|BIT(3));
67948 + //rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL_1)&(~BIT(4)));
67949 + }
67950 +#ifdef CONFIG_TSF_RESET_OFFLOAD
67951 + // Update buddy port's TSF if it is SoftAP for beacon TX issue!
67952 + if ( (pmlmeinfo->state&0x03) == WIFI_FW_STATION_STATE
67953 + && check_buddy_fwstate(Adapter, WIFI_AP_STATE) ) {
67954 + if (reset_tsf(Adapter, IFACE_PORT1) == _FALSE)
67955 + DBG_871X("ERROR! %s()-%d: Reset port1 TSF fail\n",
67956 + __FUNCTION__, __LINE__);
67957 + }
67958 +#endif // CONFIG_TSF_RESET_OFFLOAD
67959 + }
67960 +
67961 + if(((pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE) || ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE))
67962 + {
67963 + //pHalData->RegTxPause &= (~STOP_BCNQ);
67964 + //rtw_write8(Adapter, REG_TXPAUSE, (rtw_read8(Adapter, REG_TXPAUSE)&(~BIT(6))));
67965 + ResumeTxBeacon(Adapter);
67966 + }
67967 +#endif // CONFIG_CONCURRENT_MODE
67968 +}
67969 +
67970 +static void hw_var_set_mlme_disconnect(PADAPTER Adapter, u8 variable, u8* val)
67971 +{
67972 +#ifdef CONFIG_CONCURRENT_MODE
67973 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
67974 + PADAPTER pbuddy_adapter = Adapter->pbuddy_adapter;
67975 +
67976 +
67977 + if(check_buddy_mlmeinfo_state(Adapter, _HW_STATE_NOLINK_))
67978 + rtw_write16(Adapter, REG_RXFLTMAP2, 0x00);
67979 +
67980 +
67981 + if(Adapter->iface_type == IFACE_PORT1)
67982 + {
67983 + int i;
67984 + u8 reg_bcn_ctrl_1;
67985 +
67986 + // a.Driver set 0x422 bit 6 =0
67987 + rtw_write8(Adapter, REG_FWHW_TXQ_CTRL+2, (pHalData->RegFwHwTxQCtrl) & (~BIT6));
67988 + pHalData->RegFwHwTxQCtrl &= (~BIT6);
67989 +
67990 +
67991 +#ifdef CONFIG_BEACON_DISABLE_OFFLOAD
67992 + u8 reg_bcn_disable_cnt = rtw_read8(Adapter, REG_FW_BCN_DIS_CNT);
67993 + DBG_871X("%s()-%d: reg_bcn_disable_cnt=%02x\n", __FUNCTION__, __LINE__, reg_bcn_disable_cnt);
67994 +
67995 + reg_bcn_ctrl_1 = rtw_read8(Adapter, REG_BCN_CTRL_1);
67996 + DBG_871X("%s()-%d: reg_bcn_ctrl_1=%02x\n", __FUNCTION__, __LINE__, reg_bcn_ctrl_1);
67997 +
67998 + // b. driver set h2c cmd
67999 + rtl8192c_dis_beacon_fun_cmd(Adapter);
68000 +
68001 + /*
68002 + // FW Job for port 0
68003 +
68004 + c. 8051 set nettype to ap
68005 + d. 8051 check dma_int
68006 + e. 8051 set nettype to no_link
68007 + f.8051 dis_tsf_update 0x550 bit 4
68008 + g.8051 reset beacon function test count 0x553 bit0.
68009 + h.8051 disable beacon function 0x550 bit3
68010 + i. 8051 sent ready to driver
68011 +
68012 + */
68013 +
68014 + // The worst case is 100 + 15 ms
68015 + rtw_msleep_os(120);
68016 +
68017 + for (i=0; i< 10; i++) {
68018 + reg_bcn_ctrl_1 = rtw_read8(Adapter, REG_BCN_CTRL_1);
68019 + if ( (reg_bcn_ctrl_1 & BIT(3)) == 0 ) {
68020 + //DBG_871X("%s()-%d: BEACON_DISABLE_OFFLOAD finished! reg=%02x\n", __FUNCTION__, __LINE__, reg);
68021 + break;
68022 + }
68023 + DBG_871X("%s()-%d: BEACON_DISABLE_OFFLOAD not finished! REG_BCN_CTRL_1=%02x\n", __FUNCTION__, __LINE__, reg_bcn_ctrl_1);
68024 + DBG_871X("%s()-%d: reg_bcn_disable_cnt=%02x\n", __FUNCTION__, __LINE__, rtw_read8(Adapter, REG_FW_BCN_DIS_CNT));
68025 + DBG_871X("%s()-%d: REG_BCN_CTRL=%02x\n", __FUNCTION__, __LINE__, rtw_read8(Adapter, REG_BCN_CTRL));
68026 + DBG_871X("%s()-%d: FWISR=%08x\n", __FUNCTION__, __LINE__, rtw_read32(Adapter, REG_FWISR));
68027 + rtw_msleep_os(100);
68028 + }
68029 + DBG_871X("%s()-%d: reg_bcn_disable_cnt=%02x\n", __FUNCTION__, __LINE__, rtw_read8(Adapter, REG_FW_BCN_DIS_CNT));
68030 + DBG_871X("%s()-%d: reg_bcn_ctrl_1=%02x\n", __FUNCTION__, __LINE__, reg_bcn_ctrl_1);
68031 +
68032 +#else // CONFIG_BEACON_DISABLE_OFFLOAD
68033 +
68034 + //disable update TSF1
68035 + rtw_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1)|BIT(4));
68036 +
68037 + //reset TSF1
68038 + rtw_write8(Adapter, REG_DUAL_TSF_RST, BIT(1));
68039 +
68040 + // disable Port1's beacon function
68041 + rtw_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1)&(~BIT(3)));
68042 +
68043 +#endif // CONFIG_BEACON_DISABLE_OFFLOAD
68044 +
68045 + // j, Driver set 0x422 bit 6 =1
68046 + rtw_write8(Adapter, REG_FWHW_TXQ_CTRL+2, (pHalData->RegFwHwTxQCtrl) | BIT6);
68047 + pHalData->RegFwHwTxQCtrl |= BIT6;
68048 +
68049 + // k. re_download beacon pkt
68050 + if(check_buddy_mlmeinfo_state(Adapter, WIFI_FW_AP_STATE))
68051 + set_tx_beacon_cmd(pbuddy_adapter);
68052 +
68053 +
68054 + }
68055 + else // (Adapter->iface_type == IFACE_PORT1)
68056 + {
68057 + //disable update TSF
68058 + rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(4));
68059 +
68060 + //reset TSF
68061 + rtw_write8(Adapter, REG_DUAL_TSF_RST, BIT(0));
68062 +
68063 + // Can't disable Port0's beacon function due to it is used by RA
68064 + }
68065 +#endif
68066 +}
68067 +
68068 +static void hw_var_set_mlme_sitesurvey(PADAPTER Adapter, u8 variable, u8* val)
68069 +{
68070 + u32 value_rcr, rcr_clear_bit, reg_bcn_ctl;
68071 + u16 value_rxfltmap2;
68072 + struct mlme_priv *pmlmepriv=&(Adapter->mlmepriv);
68073 +
68074 +
68075 +#ifdef CONFIG_CONCURRENT_MODE
68076 + if(Adapter->iface_type == IFACE_PORT1)
68077 + reg_bcn_ctl = REG_BCN_CTRL_1;
68078 + else
68079 +#endif
68080 + reg_bcn_ctl = REG_BCN_CTRL;
68081 +
68082 +#ifdef CONFIG_FIND_BEST_CHANNEL
68083 +
68084 + if( (check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
68085 +#ifdef CONFIG_CONCURRENT_MODE
68086 + || (check_buddy_fwstate(Adapter, WIFI_AP_STATE) == _TRUE)
68087 +#endif
68088 +#ifdef CONFIG_TDLS
68089 + // TDLS will clear RCR_CBSSID_DATA bit for connection.
68090 + || ( Adapter->tdlsinfo.setup_state & TDLS_LINKED_STATE )
68091 +#endif // CONFIG_TDLS
68092 + )
68093 + {
68094 + rcr_clear_bit = RCR_CBSSID_BCN;
68095 + }
68096 + else
68097 + {
68098 + rcr_clear_bit = (RCR_CBSSID_BCN | RCR_CBSSID_DATA);
68099 + }
68100 +
68101 + // Recieve all data frames
68102 + value_rxfltmap2 = 0xFFFF;
68103 +
68104 +#else /* CONFIG_FIND_BEST_CHANNEL */
68105 +
68106 + rcr_clear_bit = RCR_CBSSID_BCN;
68107 +
68108 + //config RCR to receive different BSSID & not to receive data frame
68109 + value_rxfltmap2 = 0;
68110 +
68111 +#endif /* CONFIG_FIND_BEST_CHANNEL */
68112 +
68113 + value_rcr = rtw_read32(Adapter, REG_RCR);
68114 +
68115 + if(*((u8 *)val))//under sitesurvey
68116 + {
68117 + value_rcr &= ~(rcr_clear_bit);
68118 + rtw_write32(Adapter, REG_RCR, value_rcr);
68119 +
68120 + rtw_write16(Adapter, REG_RXFLTMAP2, value_rxfltmap2);
68121 +
68122 + if (check_fwstate(pmlmepriv, WIFI_STATION_STATE | WIFI_ADHOC_STATE |WIFI_ADHOC_MASTER_STATE)) {
68123 + //disable update TSF
68124 + rtw_write8(Adapter, reg_bcn_ctl, rtw_read8(Adapter, reg_bcn_ctl)|BIT(4));
68125 + }
68126 +
68127 +#ifdef CONFIG_CONCURRENT_MODE
68128 + if(check_buddy_mlmeinfo_state(Adapter, WIFI_FW_AP_STATE) &&
68129 + check_buddy_fwstate(Adapter, _FW_LINKED))
68130 + {
68131 + StopTxBeacon(Adapter);
68132 + }
68133 +#endif
68134 + }
68135 + else//sitesurvey done
68136 + {
68137 + if(check_fwstate(pmlmepriv, _FW_LINKED) || check_fwstate(pmlmepriv, WIFI_AP_STATE)
68138 +#ifdef CONFIG_CONCURRENT_MODE
68139 + || check_buddy_fwstate(Adapter, _FW_LINKED) || check_buddy_fwstate(Adapter, WIFI_AP_STATE)
68140 +#endif
68141 + )
68142 + {
68143 + //enable to rx data frame
68144 + rtw_write16(Adapter, REG_RXFLTMAP2,0xFFFF);
68145 + }
68146 +
68147 + if (check_fwstate(pmlmepriv, WIFI_STATION_STATE | WIFI_ADHOC_STATE |WIFI_ADHOC_MASTER_STATE)) {
68148 + //enable update TSF
68149 + rtw_write8(Adapter, reg_bcn_ctl, rtw_read8(Adapter, reg_bcn_ctl)&(~BIT(4)));
68150 + }
68151 +
68152 + value_rcr |= rcr_clear_bit;
68153 + rtw_write32(Adapter, REG_RCR, value_rcr);
68154 +
68155 +#ifdef CONFIG_CONCURRENT_MODE
68156 + if(check_buddy_mlmeinfo_state(Adapter, WIFI_FW_AP_STATE) &&
68157 + check_buddy_fwstate(Adapter, _FW_LINKED))
68158 + {
68159 + ResumeTxBeacon(Adapter);
68160 + }
68161 +#endif
68162 + }
68163 +}
68164 +
68165 +static void hw_var_set_mlme_join(PADAPTER Adapter, u8 variable, u8* val)
68166 +{
68167 +#ifdef CONFIG_CONCURRENT_MODE
68168 + u8 RetryLimit = 0x30;
68169 + u8 type = *((u8 *)val);
68170 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
68171 + struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;
68172 +
68173 + if(type == 0) // prepare to join
68174 + {
68175 + if(check_buddy_mlmeinfo_state(Adapter, WIFI_FW_AP_STATE) &&
68176 + check_buddy_fwstate(Adapter, _FW_LINKED))
68177 + {
68178 + StopTxBeacon(Adapter);
68179 + }
68180 +
68181 + //enable to rx data frame.Accept all data frame
68182 + //rtw_write32(padapter, REG_RCR, rtw_read32(padapter, REG_RCR)|RCR_ADF);
68183 + rtw_write16(Adapter, REG_RXFLTMAP2,0xFFFF);
68184 +
68185 + if(check_buddy_mlmeinfo_state(Adapter, WIFI_FW_AP_STATE))
68186 + rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_BCN);
68187 + else
68188 + rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_DATA|RCR_CBSSID_BCN);
68189 +
68190 + if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) == _TRUE)
68191 + {
68192 + RetryLimit = (pHalData->CustomerID == RT_CID_CCX) ? 7 : 48;
68193 + }
68194 + else // Ad-hoc Mode
68195 + {
68196 + RetryLimit = 0x7;
68197 + }
68198 + }
68199 + else if(type == 1) //joinbss_event call back when join res < 0
68200 + {
68201 + if(check_buddy_mlmeinfo_state(Adapter, _HW_STATE_NOLINK_))
68202 + rtw_write16(Adapter, REG_RXFLTMAP2,0x00);
68203 +
68204 + if(check_buddy_mlmeinfo_state(Adapter, WIFI_FW_AP_STATE) &&
68205 + check_buddy_fwstate(Adapter, _FW_LINKED))
68206 + {
68207 + ResumeTxBeacon(Adapter);
68208 +
68209 + //reset TSF 1/2 after ResumeTxBeacon
68210 + //rtw_write8(Adapter, REG_DUAL_TSF_RST, BIT(1)|BIT(0));
68211 +
68212 + }
68213 + }
68214 + else if(type == 2) //sta add event call back
68215 + {
68216 +
68217 + //enable update TSF
68218 + if(Adapter->iface_type == IFACE_PORT1)
68219 + rtw_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1)&(~BIT(4)));
68220 + else
68221 + rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4)));
68222 +
68223 +
68224 + if(check_fwstate(pmlmepriv, WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE))
68225 + {
68226 + //fixed beacon issue for 8191su...........
68227 + rtw_write8(Adapter,0x542 ,0x02);
68228 + RetryLimit = 0x7;
68229 + }
68230 +
68231 +
68232 + if(check_buddy_mlmeinfo_state(Adapter, WIFI_FW_AP_STATE) &&
68233 + check_buddy_fwstate(Adapter, _FW_LINKED))
68234 + {
68235 + ResumeTxBeacon(Adapter);
68236 +
68237 + //reset TSF 1/2 after ResumeTxBeacon
68238 + //rtw_write8(Adapter, REG_DUAL_TSF_RST, BIT(1)|BIT(0));
68239 + }
68240 +
68241 + }
68242 +
68243 + rtw_write16(Adapter, REG_RL, RetryLimit << RETRY_LIMIT_SHORT_SHIFT | RetryLimit << RETRY_LIMIT_LONG_SHIFT);
68244 +
68245 +#endif
68246 +}
68247 +
68248 void SetHwReg8192CU(PADAPTER Adapter, u8 variable, u8* val)
68249 {
68250 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
68251 @@ -4652,74 +4949,13 @@ _func_enter_;
68252 }
68253 break;
68254 case HW_VAR_SET_OPMODE:
68255 - {
68256 - u8 val8;
68257 - u8 mode = *((u8 *)val);
68258 -
68259 - if((mode == _HW_STATE_STATION_) || (mode == _HW_STATE_NOLINK_))
68260 - {
68261 - StopTxBeacon(Adapter);
68262 - rtw_write8(Adapter,REG_BCN_CTRL, 0x18);
68263 - }
68264 - else if((mode == _HW_STATE_ADHOC_) /*|| (mode == _HW_STATE_AP_)*/)
68265 - {
68266 - ResumeTxBeacon(Adapter);
68267 - rtw_write8(Adapter,REG_BCN_CTRL, 0x1a);
68268 - }
68269 - else if(mode == _HW_STATE_AP_)
68270 - {
68271 - ResumeTxBeacon(Adapter);
68272 -
68273 - rtw_write8(Adapter, REG_BCN_CTRL, 0x12);
68274 -
68275 -
68276 - //Set RCR
68277 - //rtw_write32(padapter, REG_RCR, 0x70002a8e);//CBSSID_DATA must set to 0
68278 - rtw_write32(Adapter, REG_RCR, 0x7000228e);//CBSSID_DATA must set to 0
68279 - //enable to rx data frame
68280 - rtw_write16(Adapter, REG_RXFLTMAP2, 0xFFFF);
68281 - //enable to rx ps-poll
68282 - rtw_write16(Adapter, REG_RXFLTMAP1, 0x0400);
68283 -
68284 - //Beacon Control related register for first time
68285 - rtw_write8(Adapter, REG_BCNDMATIM, 0x02); // 2ms
68286 - rtw_write8(Adapter, REG_DRVERLYINT, 0x05);// 5ms
68287 - //rtw_write8(Adapter, REG_BCN_MAX_ERR, 0xFF);
68288 - rtw_write8(Adapter, REG_ATIMWND, 0x0a); // 10ms
68289 - rtw_write16(Adapter, REG_BCNTCFG, 0x00);
68290 - rtw_write16(Adapter, REG_TBTT_PROHIBIT, 0x6404);
68291 -
68292 - //reset TSF
68293 - rtw_write8(Adapter, REG_DUAL_TSF_RST, BIT(0));
68294 -
68295 - //enable TSF Function for if1
68296 - rtw_write8(Adapter, REG_BCN_CTRL, (EN_BCN_FUNCTION | EN_TXBCN_RPT));
68297 -
68298 - //enable update TSF for if1
68299 - if(IS_NORMAL_CHIP(pHalData->VersionID))
68300 - {
68301 - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4)));
68302 - }
68303 - else
68304 - {
68305 - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~(BIT(4)|BIT(5))));
68306 - }
68307 -
68308 - }
68309 -
68310 - val8 = rtw_read8(Adapter, MSR)&0x0c;
68311 - val8 |= mode;
68312 - rtw_write8(Adapter, MSR, val8);
68313 - }
68314 + hw_var_set_opmode(Adapter, variable, val);
68315 + break;
68316 + case HW_VAR_MAC_ADDR:
68317 + hw_var_set_macaddr(Adapter, variable, val);
68318 break;
68319 case HW_VAR_BSSID:
68320 - {
68321 - u8 idx = 0;
68322 - for(idx = 0 ; idx < 6; idx++)
68323 - {
68324 - rtw_write8(Adapter, (REG_BSSID+idx), val[idx]);
68325 - }
68326 - }
68327 + hw_var_set_bssid(Adapter, variable, val);
68328 break;
68329 case HW_VAR_BASIC_RATE:
68330 {
68331 @@ -4730,14 +4966,14 @@ _func_enter_;
68332 // Select RRSR (in Legacy-OFDM and CCK)
68333 // For 8190, we select only 24M, 12M, 6M, 11M, 5.5M, 2M, and 1M from the Basic rate.
68334 // We do not use other rates.
68335 - rtl8192c_HalSetBrateCfg( Adapter, val, &BrateCfg );
68336 + HalSetBrateCfg( Adapter, val, &BrateCfg );
68337
68338 //2011.03.30 add by Luke Lee
68339 //CCK 2M ACK should be disabled for some BCM and Atheros AP IOT
68340 //because CCK 2M has poor TXEVM
68341 //CCK 5.5M & 11M ACK should be enabled for better performance
68342
68343 - pHalData->BasicRateSet = BrateCfg = (BrateCfg |0xd) & 0x15d;
68344 + pHalData->BasicRateSet = BrateCfg = (BrateCfg |0xd) & 0x15d;
68345
68346 BrateCfg |= 0x01; // default enable 1M ACK rate
68347
68348 @@ -4746,6 +4982,7 @@ _func_enter_;
68349 // Set RRSR rate table.
68350 rtw_write8(Adapter, REG_RRSR, BrateCfg&0xff);
68351 rtw_write8(Adapter, REG_RRSR+1, (BrateCfg>>8)&0xff);
68352 + rtw_write8(Adapter, REG_RRSR+2, rtw_read8(Adapter, REG_RRSR+2)&0xf0);
68353
68354 // Set RTS initial rate
68355 while(BrateCfg > 0x1)
68356 @@ -4761,16 +4998,12 @@ _func_enter_;
68357 rtw_write8(Adapter, REG_TXPAUSE, *((u8 *)val));
68358 break;
68359 case HW_VAR_BCN_FUNC:
68360 - if(*((u8 *)val))
68361 - {
68362 - rtw_write8(Adapter, REG_BCN_CTRL, (EN_BCN_FUNCTION | EN_TXBCN_RPT));
68363 - }
68364 - else
68365 - {
68366 - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~(EN_BCN_FUNCTION | EN_TXBCN_RPT)));
68367 - }
68368 + hw_var_set_bcn_func(Adapter, variable, val);
68369 break;
68370 case HW_VAR_CORRECT_TSF:
68371 +#ifdef CONFIG_CONCURRENT_MODE
68372 + hw_var_set_correct_tsf(Adapter, variable, val);
68373 +#else
68374 {
68375 u64 tsf;
68376 struct mlme_ext_priv *pmlmeext = &Adapter->mlmeextpriv;
68377 @@ -4803,38 +5036,26 @@ _func_enter_;
68378 ResumeTxBeacon(Adapter);
68379 }
68380 }
68381 +#endif
68382 break;
68383 case HW_VAR_CHECK_BSSID:
68384 if(*((u8 *)val))
68385 {
68386 - if(IS_NORMAL_CHIP(pHalData->VersionID))
68387 - {
68388 - rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_DATA|RCR_CBSSID_BCN);
68389 - }
68390 - else
68391 - {
68392 - rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_DATA);
68393 - }
68394 + rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_DATA|RCR_CBSSID_BCN);
68395 }
68396 else
68397 {
68398 u32 val32;
68399
68400 val32 = rtw_read32(Adapter, REG_RCR);
68401 -
68402 - if(IS_NORMAL_CHIP(pHalData->VersionID))
68403 - {
68404 - val32 &= ~(RCR_CBSSID_DATA | RCR_CBSSID_BCN);
68405 - }
68406 - else
68407 - {
68408 - val32 &= 0xfffff7bf;
68409 - }
68410 -
68411 + val32 &= ~(RCR_CBSSID_DATA | RCR_CBSSID_BCN);
68412 rtw_write32(Adapter, REG_RCR, val32);
68413 }
68414 break;
68415 case HW_VAR_MLME_DISCONNECT:
68416 +#ifdef CONFIG_CONCURRENT_MODE
68417 + hw_var_set_mlme_disconnect(Adapter, variable, val);
68418 +#else
68419 {
68420 //Set RCR to not to receive data frame when NO LINK state
68421 //rtw_write32(Adapter, REG_RCR, rtw_read32(padapter, REG_RCR) & ~RCR_ADF);
68422 @@ -4845,90 +5066,17 @@ _func_enter_;
68423 rtw_write8(Adapter, REG_DUAL_TSF_RST, (BIT(0)|BIT(1)));
68424
68425 //disable update TSF
68426 - if(IS_NORMAL_CHIP(pHalData->VersionID))
68427 - {
68428 - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(4));
68429 - }
68430 - else
68431 - {
68432 - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(4)|BIT(5));
68433 - }
68434 + rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(4));
68435 }
68436 +#endif
68437 break;
68438 case HW_VAR_MLME_SITESURVEY:
68439 - if(*((u8 *)val))//under sitesurvey
68440 - {
68441 - if(IS_NORMAL_CHIP(pHalData->VersionID))
68442 - {
68443 - //config RCR to receive different BSSID & not to receive data frame
68444 - //pHalData->ReceiveConfig &= (~(RCR_CBSSID_DATA | RCR_CBSSID_BCN));
68445 - u32 v = rtw_read32(Adapter, REG_RCR);
68446 - v &= ~(RCR_CBSSID_DATA | RCR_CBSSID_BCN );//| RCR_ADF
68447 - rtw_write32(Adapter, REG_RCR, v);
68448 - //reject all data frame
68449 - rtw_write16(Adapter, REG_RXFLTMAP2,0x00);
68450 -
68451 - //disable update TSF
68452 - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(4));
68453 - }
68454 - else
68455 - {
68456 - //config RCR to receive different BSSID & not to receive data frame
68457 - rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR) & 0xfffff7bf);
68458 -
68459 -
68460 - //disable update TSF
68461 - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(4)|BIT(5));
68462 - }
68463 - }
68464 - else//sitesurvey done
68465 - {
68466 - struct mlme_ext_priv *pmlmeext = &Adapter->mlmeextpriv;
68467 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
68468 -
68469 - if ((is_client_associated_to_ap(Adapter) == _TRUE) ||
68470 - ((pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE) )
68471 - {
68472 - //enable to rx data frame
68473 - //rtw_write32(Adapter, REG_RCR, rtw_read32(padapter, REG_RCR)|RCR_ADF);
68474 - rtw_write16(Adapter, REG_RXFLTMAP2,0xFFFF);
68475 -
68476 - //enable update TSF
68477 - if(IS_NORMAL_CHIP(pHalData->VersionID))
68478 - {
68479 - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4)));
68480 - }
68481 - else
68482 - {
68483 - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~(BIT(4)|BIT(5))));
68484 - }
68485 - }
68486 - else if((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE)
68487 - {
68488 - rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_ADF);
68489 -
68490 - //enable update TSF
68491 - if(IS_NORMAL_CHIP(pHalData->VersionID))
68492 - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4)));
68493 - else
68494 - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~(BIT(4)|BIT(5))));
68495 - }
68496 -
68497 -
68498 - if(IS_NORMAL_CHIP(pHalData->VersionID))
68499 - {
68500 - if((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE)
68501 - rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_BCN);
68502 - else
68503 - rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_DATA|RCR_CBSSID_BCN);
68504 - }
68505 - else
68506 - {
68507 - rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_DATA);
68508 - }
68509 - }
68510 + hw_var_set_mlme_sitesurvey(Adapter, variable, val);
68511 break;
68512 case HW_VAR_MLME_JOIN:
68513 +#ifdef CONFIG_CONCURRENT_MODE
68514 + hw_var_set_mlme_join(Adapter, variable, val);
68515 +#else
68516 {
68517 u8 RetryLimit = 0x30;
68518 u8 type = *((u8 *)val);
68519 @@ -4940,14 +5088,7 @@ _func_enter_;
68520 //rtw_write32(padapter, REG_RCR, rtw_read32(padapter, REG_RCR)|RCR_ADF);
68521 rtw_write16(Adapter, REG_RXFLTMAP2,0xFFFF);
68522
68523 - if(IS_NORMAL_CHIP(pHalData->VersionID))
68524 - {
68525 - rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_DATA|RCR_CBSSID_BCN);
68526 - }
68527 - else
68528 - {
68529 - rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_DATA);
68530 - }
68531 + rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_DATA|RCR_CBSSID_BCN);
68532
68533 if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) == _TRUE)
68534 {
68535 @@ -4960,33 +5101,12 @@ _func_enter_;
68536 }
68537 else if(type == 1) //joinbss_event call back when join res < 0
68538 {
68539 - //if(IS_NORMAL_CHIP(pHalData->VersionID))
68540 - //{
68541 - //config RCR to receive different BSSID & not to receive data frame during linking
68542 - // u32 v = rtw_read32(Adapter, REG_RCR);
68543 - // v &= ~(RCR_CBSSID_DATA | RCR_CBSSID_BCN );//| RCR_ADF
68544 - // rtw_write32(Adapter, REG_RCR, v);
68545 - //}
68546 - //else
68547 - //{
68548 - //config RCR to receive different BSSID & not to receive data frame during linking
68549 - // rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR) & 0xfffff7bf);
68550 - //}
68551 -
68552 rtw_write16(Adapter, REG_RXFLTMAP2,0x00);
68553 }
68554 else if(type == 2) //sta add event call back
68555 {
68556 - if(IS_NORMAL_CHIP(pHalData->VersionID))
68557 - {
68558 - //enable update TSF
68559 - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4)));
68560 - }
68561 - else
68562 - {
68563 - //enable update TSF
68564 - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~(BIT(4)|BIT(5))));
68565 - }
68566 + //enable update TSF
68567 + rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4)));
68568
68569 if(check_fwstate(pmlmepriv, WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE))
68570 {
68571 @@ -4998,7 +5118,18 @@ _func_enter_;
68572
68573 rtw_write16(Adapter, REG_RL, RetryLimit << RETRY_LIMIT_SHORT_SHIFT | RetryLimit << RETRY_LIMIT_LONG_SHIFT);
68574 }
68575 +#endif
68576 + break;
68577 +
68578 + case HW_VAR_ON_RCR_AM:
68579 + rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_AM);
68580 + DBG_871X("%s, %d, RCR= %x \n", __FUNCTION__,__LINE__, rtw_read32(Adapter, REG_RCR));
68581 + break;
68582 + case HW_VAR_OFF_RCR_AM:
68583 + rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)& (~RCR_AM));
68584 + DBG_871X("%s, %d, RCR= %x \n", __FUNCTION__,__LINE__, rtw_read32(Adapter, REG_RCR));
68585 break;
68586 +
68587 case HW_VAR_BEACON_INTERVAL:
68588 rtw_write16(Adapter, REG_BCN_INTERVAL, *((u16 *)val));
68589 break;
68590 @@ -5027,8 +5158,9 @@ _func_enter_;
68591 }
68592 }
68593 break;
68594 - case HW_VAR_SIFS:
68595 + case HW_VAR_RESP_SIFS:
68596 {
68597 +#if 0
68598 // SIFS for OFDM Data ACK
68599 rtw_write8(Adapter, REG_SIFS_CTX+1, val[0]);
68600 // SIFS for OFDM consecutive tx like CTS data!
68601 @@ -5038,8 +5170,17 @@ _func_enter_;
68602 rtw_write8(Adapter,REG_MAC_SPEC_SIFS+1, val[0]);
68603
68604 // 20100719 Joseph: Revise SIFS setting due to Hardware register definition change.
68605 - rtw_write8(Adapter, REG_R2T_SIFS+1, val[0]);
68606 - rtw_write8(Adapter, REG_T2T_SIFS+1, val[0]);
68607 + rtw_write8(Adapter, REG_R2T_SIFS+1, val[0]); //0x08 - CCK
68608 + rtw_write8(Adapter, REG_T2T_SIFS+1, val[0]); //0x0e - OFDM
68609 +#else
68610 + //SIFS_Timer = 0x0a0a0808;
68611 + //RESP_SIFS for CCK
68612 + rtw_write8(Adapter, REG_R2T_SIFS, val[0]); // SIFS_T2T_CCK (0x08)
68613 + rtw_write8(Adapter, REG_R2T_SIFS+1, val[1]); //SIFS_R2T_CCK(0x08)
68614 + //RESP_SIFS for OFDM
68615 + rtw_write8(Adapter, REG_T2T_SIFS, val[2]); //SIFS_T2T_OFDM (0x0a)
68616 + rtw_write8(Adapter, REG_T2T_SIFS+1, val[3]); //SIFS_R2T_OFDM(0x0a)
68617 +#endif
68618 }
68619 break;
68620 case HW_VAR_ACK_PREAMBLE:
68621 @@ -5047,8 +5188,8 @@ _func_enter_;
68622 u8 regTmp;
68623 u8 bShortPreamble = *( (PBOOLEAN)val );
68624 // Joseph marked out for Netgear 3500 TKIP channel 7 issue.(Temporarily)
68625 - //regTmp = (pHalData->nCur40MhzPrimeSC)<<5;
68626 - regTmp = 0;
68627 + regTmp = (pHalData->nCur40MhzPrimeSC)<<5;
68628 + //regTmp = 0;
68629 if(bShortPreamble)
68630 regTmp |= 0x80;
68631
68632 @@ -5056,7 +5197,11 @@ _func_enter_;
68633 }
68634 break;
68635 case HW_VAR_SEC_CFG:
68636 +#ifdef CONFIG_CONCURRENT_MODE
68637 + rtw_write8(Adapter, REG_SECCFG, 0x0c|BIT(5));// enable tx enc and rx dec engine, and no key search for MC/BC
68638 +#else
68639 rtw_write8(Adapter, REG_SECCFG, *((u8 *)val));
68640 +#endif
68641 break;
68642 case HW_VAR_DM_FLAG:
68643 pdmpriv->DMFlag = *((u8 *)val);
68644 @@ -5240,7 +5385,6 @@ _func_enter_;
68645 u8 threshold = *((u8 *)val);
68646 if( threshold == 0)
68647 {
68648 -
68649 threshold = pHalData->UsbRxAggPageCount;
68650 }
68651 rtw_write8(Adapter, REG_RXDMA_AGG_PG_TH, threshold);
68652 @@ -5269,14 +5413,14 @@ _func_enter_;
68653 rtl8192c_set_FwJoinBssReport_cmd(Adapter, mstatus);
68654 }
68655 break;
68656 -#ifdef CONFIG_P2P
68657 +#ifdef CONFIG_P2P_PS
68658 case HW_VAR_H2C_FW_P2P_PS_OFFLOAD:
68659 {
68660 u8 p2p_ps_state = (*(u8 *)val);
68661 rtl8192c_set_p2p_ps_offload_cmd(Adapter, p2p_ps_state);
68662 }
68663 break;
68664 -#endif //CONFIG_P2P
68665 +#endif // CONFIG_P2P_PS
68666 #ifdef CONFIG_TDLS
68667 case HW_VAR_TDLS_WRCR:
68668 rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)&(~ BIT(6) ));
68669 @@ -5305,18 +5449,20 @@ _func_enter_;
68670 {
68671 DIG_T *pDigTable = &pdmpriv->DM_DigTable;
68672 u32 rx_gain = ((u32 *)(val))[0];
68673 -
68674 +
68675 if(rx_gain == 0xff){//restore rx gain
68676 pDigTable->CurIGValue = pDigTable->BackupIGValue;
68677 - rtw_write8(Adapter,rOFDM0_XAAGCCore1, pDigTable->CurIGValue);
68678 - rtw_write8(Adapter,rOFDM0_XBAGCCore1, pDigTable->CurIGValue);
68679 + PHY_SetBBReg(Adapter, rOFDM0_XAAGCCore1, 0x7f,pDigTable->CurIGValue );
68680 + PHY_SetBBReg(Adapter, rOFDM0_XBAGCCore1, 0x7f,pDigTable->CurIGValue);
68681 }
68682 else{
68683 - pDigTable->BackupIGValue = pDigTable->CurIGValue;
68684 + pDigTable->BackupIGValue = pDigTable->CurIGValue;
68685 PHY_SetBBReg(Adapter, rOFDM0_XAAGCCore1, 0x7f,rx_gain );
68686 PHY_SetBBReg(Adapter, rOFDM0_XBAGCCore1, 0x7f,rx_gain);
68687 - pDigTable->CurIGValue = rx_gain;
68688 + pDigTable->CurIGValue = (u8)rx_gain;
68689 }
68690 +
68691 +
68692 }
68693 break;
68694 case HW_VAR_TRIGGER_GPIO_0:
68695 @@ -5390,7 +5536,7 @@ _func_enter_;
68696 }
68697 }
68698 break;
68699 - case HW_VAR_WOWLAN:
68700 + case HW_VAR_WOWLAN:
68701 #ifdef CONFIG_WOWLAN
68702 {
68703 struct wowlan_ioctl_param *poidparam;
68704 @@ -5493,6 +5639,42 @@ _func_enter_;
68705
68706 break;
68707 #endif //CONFIG_WOWLAN
68708 + case HW_VAR_CHECK_TXBUF:
68709 +#ifdef CONFIG_CONCURRENT_MODE
68710 + {
68711 + int i;
68712 + u8 RetryLimit = 0x01;
68713 +
68714 + //rtw_write16(Adapter, REG_RL,0x0101);
68715 + rtw_write16(Adapter, REG_RL, RetryLimit << RETRY_LIMIT_SHORT_SHIFT | RetryLimit << RETRY_LIMIT_LONG_SHIFT);
68716 +
68717 + for(i=0;i<1000;i++)
68718 + {
68719 + if(rtw_read32(Adapter, 0x200) != rtw_read32(Adapter, 0x204))
68720 + {
68721 + //DBG_871X("packet in tx packet buffer - 0x204=%x, 0x200=%x (%d)\n", rtw_read32(Adapter, 0x204), rtw_read32(Adapter, 0x200), i);
68722 + rtw_msleep_os(10);
68723 + }
68724 + else
68725 + {
68726 + DBG_871X("no packet in tx packet buffer (%d)\n", i);
68727 + break;
68728 + }
68729 + }
68730 +
68731 + RetryLimit = 0x30;
68732 + rtw_write16(Adapter, REG_RL, RetryLimit << RETRY_LIMIT_SHORT_SHIFT | RetryLimit << RETRY_LIMIT_LONG_SHIFT);
68733 +
68734 + }
68735 +#endif
68736 + break;
68737 + case HW_VAR_BCN_VALID:
68738 + //BCN_VALID, BIT16 of REG_TDECTRL = BIT0 of REG_TDECTRL+2, write 1 to clear, Clear by sw
68739 + rtw_write8(Adapter, REG_TDECTRL+2, rtw_read8(Adapter, REG_TDECTRL+2) | BIT0);
68740 + break;
68741 + case HW_VAR_USB_RXAGG_PAGE_TO:
68742 + rtw_write8(Adapter, REG_USB_DMA_AGG_TO, *((u8 *)val));
68743 + break;
68744 default:
68745 break;
68746 }
68747 @@ -5513,15 +5695,9 @@ _func_enter_;
68748 case HW_VAR_TXPAUSE:
68749 val[0] = rtw_read8(Adapter, REG_TXPAUSE);
68750 break;
68751 - case HW_VAR_TX_BCN_DONE:
68752 - {
68753 - u32 xmitbcnDown;
68754 - xmitbcnDown= rtw_read32(Adapter, REG_TDECTRL);
68755 - if(xmitbcnDown & BCN_VALID ){
68756 - rtw_write32(Adapter,REG_TDECTRL, xmitbcnDown | BCN_VALID ); // write 1 to clear, Clear by sw
68757 - val[0] = _TRUE;
68758 - }
68759 - }
68760 + case HW_VAR_BCN_VALID:
68761 + //BCN_VALID, BIT16 of REG_TDECTRL = BIT0 of REG_TDECTRL+2
68762 + val[0] = (BIT0 & rtw_read8(Adapter, REG_TDECTRL+2))?_TRUE:_FALSE;
68763 break;
68764 case HW_VAR_DM_FLAG:
68765 val[0] = pHalData->dmpriv.DMFlag;
68766 @@ -5559,6 +5735,12 @@ _func_enter_;
68767 case HW_VAR_EFUSE_BYTES: // To get EFUE total used bytes, added by Roger, 2008.12.22.
68768 *((u16 *)(val)) = pHalData->EfuseUsedBytes;
68769 break;
68770 + case HW_VAR_VID:
68771 + *((u16 *)(val)) = pHalData->EEPROMVID;
68772 + break;
68773 + case HW_VAR_PID:
68774 + *((u16 *)(val)) = pHalData->EEPROMPID;
68775 + break;
68776 default:
68777 break;
68778 }
68779 @@ -5583,7 +5765,25 @@ GetHalDefVar8192CUsb(
68780 switch(eVariable)
68781 {
68782 case HAL_DEF_UNDERCORATEDSMOOTHEDPWDB:
68783 +#if 0 //trunk
68784 + {
68785 + struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;
68786 + struct sta_priv * pstapriv = &Adapter->stapriv;
68787 + struct sta_info * psta;
68788 + psta = rtw_get_stainfo(pstapriv, pmlmepriv->cur_network.network.MacAddress);
68789 + if(psta)
68790 + {
68791 + *((int *)pValue) = psta->rssi_stat.UndecoratedSmoothedPWDB;
68792 + }
68793 + }
68794 +#else //v4 branch
68795 + //if(check_fwstate(&Adapter->mlmepriv, WIFI_STATION_STATE) == _TRUE){
68796 *((int *)pValue) = pHalData->dmpriv.UndecoratedSmoothedPWDB;
68797 + //}
68798 + //else{
68799 +
68800 + //}
68801 +#endif
68802 break;
68803 case HAL_DEF_IS_SUPPORT_ANT_DIV:
68804 #ifdef CONFIG_ANTENNA_DIVERSITY
68805 @@ -5609,7 +5809,7 @@ GetHalDefVar8192CUsb(
68806 break;
68807 case HAL_DEF_DBG_DM_FUNC:
68808 *(( u8*)pValue) = pHalData->dmpriv.DMFlag;
68809 - break;
68810 + break;
68811 default:
68812 //RT_TRACE(COMP_INIT, DBG_WARNING, ("GetHalDefVar8192CUsb(): Unkown variable: %d!\n", eVariable));
68813 bResult = _FALSE;
68814 @@ -5724,6 +5924,7 @@ void _update_response_rate(_adapter *pad
68815 // Set RRSR rate table.
68816 rtw_write8(padapter, REG_RRSR, mask&0xff);
68817 rtw_write8(padapter,REG_RRSR+1, (mask>>8)&0xff);
68818 +
68819
68820 // Set RTS initial rate
68821 while(mask > 0x1)
68822 @@ -5766,6 +5967,9 @@ void UpdateHalRAMask8192CUsb(PADAPTER pa
68823 switch (mac_id)
68824 {
68825 case 0:// for infra mode
68826 +#ifdef CONFIG_CONCURRENT_MODE
68827 + case 2:// first station uses macid=0, second station uses macid=2
68828 +#endif
68829 supportRateNum = rtw_get_rateset_len(cur_network->SupportedRates);
68830 networkType = judge_network_type(padapter, cur_network->SupportedRates, supportRateNum) & 0xf;
68831 //pmlmeext->cur_wireless_mode = networkType;
68832 @@ -5796,17 +6000,29 @@ void UpdateHalRAMask8192CUsb(PADAPTER pa
68833 break;
68834
68835 default: //for each sta in IBSS
68836 - supportRateNum = rtw_get_rateset_len(pmlmeinfo->FW_sta_info[mac_id].SupportedRates);
68837 - networkType = judge_network_type(padapter, pmlmeinfo->FW_sta_info[mac_id].SupportedRates, supportRateNum) & 0xf;
68838 - //pmlmeext->cur_wireless_mode = networkType;
68839 - raid = networktype_to_raid(networkType);
68840 -
68841 - mask = update_supported_rate(cur_network->SupportedRates, supportRateNum);
68842 - mask |= ((raid<<28)&0xf0000000);
68843 +#ifdef CONFIG_TDLS
68844 + if(psta->tdls_sta_state & TDLS_LINKED_STATE)
68845 + {
68846 + shortGIrate = update_sgi_tdls(padapter, psta);
68847 + mask = update_mask_tdls(padapter, psta);
68848 + raid = mask>>28;
68849 + break;
68850 + }
68851 + else
68852 +#endif //CONFIG_TDLS
68853 + {
68854 + supportRateNum = rtw_get_rateset_len(pmlmeinfo->FW_sta_info[mac_id].SupportedRates);
68855 + networkType = judge_network_type(padapter, pmlmeinfo->FW_sta_info[mac_id].SupportedRates, supportRateNum) & 0xf;
68856 + //pmlmeext->cur_wireless_mode = networkType;
68857 + raid = networktype_to_raid(networkType);
68858 +
68859 + mask = update_supported_rate(cur_network->SupportedRates, supportRateNum);
68860 + mask |= ((raid<<28)&0xf0000000);
68861
68862 - //todo: support HT in IBSS
68863 -
68864 - break;
68865 + //todo: support HT in IBSS
68866 +
68867 + break;
68868 + }
68869 }
68870
68871 #ifdef CONFIG_BT_COEXIST
68872 @@ -5942,6 +6158,7 @@ static void rtl8192cu_init_default_value
68873 for(i = 0; i < HP_THERMAL_NUM; i++)
68874 pdmpriv->ThermalValue_HP[i] = 0;
68875 }
68876 +
68877 static u8 rtl8192cu_ps_func(PADAPTER Adapter,HAL_INTF_PS_FUNC efunc_id, u8 *val)
68878 {
68879 u8 bResult = _TRUE;
68880 @@ -5949,10 +6166,10 @@ static u8 rtl8192cu_ps_func(PADAPTER Ada
68881
68882 #if defined(CONFIG_AUTOSUSPEND) && defined(SUPPORT_HW_RFOFF_DETECTED)
68883 case HAL_USB_SELECT_SUSPEND:
68884 - {
68885 + {
68886 u8 bfwpoll = *(( u8*)val);
68887 rtl8192c_set_FwSelectSuspend_cmd(Adapter,bfwpoll ,500);//note fw to support hw power down ping detect
68888 - }
68889 + }
68890 break;
68891 #endif //CONFIG_AUTOSUSPEND && SUPPORT_HW_RFOFF_DETECTED
68892
68893 @@ -5961,6 +6178,7 @@ static u8 rtl8192cu_ps_func(PADAPTER Ada
68894 }
68895 return bResult;
68896 }
68897 +
68898 void rtl8192cu_set_hal_ops(_adapter * padapter)
68899 {
68900 struct hal_ops *pHalFunc = &padapter->HalFunc;
68901 @@ -5972,6 +6190,7 @@ _func_enter_;
68902 DBG_8192C("cant not alloc memory for HAL DATA \n");
68903 }
68904 //_rtw_memset(padapter->HalData, 0, sizeof(HAL_DATA_TYPE));
68905 + padapter->hal_data_sz = sizeof(HAL_DATA_TYPE);
68906
68907 pHalFunc->hal_init = &rtl8192cu_hal_init;
68908 pHalFunc->hal_deinit = &rtl8192cu_hal_deinit;
68909 @@ -5991,7 +6210,7 @@ _func_enter_;
68910 pHalFunc->DeInitSwLeds = &rtl8192cu_DeInitSwLeds;
68911 #else //case of hw led or no led
68912 pHalFunc->InitSwLeds = NULL;
68913 - pHalFunc->DeInitSwLeds = NULL;
68914 + pHalFunc->DeInitSwLeds = NULL;
68915 #endif//CONFIG_SW_LED
68916
68917 //pHalFunc->dm_init = &rtl8192c_init_dm_priv;
68918 @@ -6017,13 +6236,14 @@ _func_enter_;
68919 //pHalFunc->Add_RateATid = &rtl8192c_Add_RateATid;
68920
68921 //#ifdef CONFIG_SW_ANTENNA_DIVERSITY
68922 - //pHalFunc->SwAntDivBeforeLinkHandler = &SwAntDivBeforeLink8192C;
68923 - //pHalFunc->SwAntDivCompareHandler = &SwAntDivCompare8192C;
68924 + //pHalFunc->AntDivBeforeLinkHandler = &SwAntDivBeforeLink8192C;
68925 + //pHalFunc->AntDivCompareHandler = &SwAntDivCompare8192C;
68926 //#endif
68927
68928 pHalFunc->hal_xmit = &rtl8192cu_hal_xmit;
68929 pHalFunc->mgnt_xmit = &rtl8192cu_mgnt_xmit;
68930 -
68931 + pHalFunc->hal_xmitframe_enqueue = &rtl8192cu_hal_xmitframe_enqueue;
68932 +
68933 //pHalFunc->read_bbreg = &rtl8192c_PHY_QueryBBReg;
68934 //pHalFunc->write_bbreg = &rtl8192c_PHY_SetBBReg;
68935 //pHalFunc->read_rfreg = &rtl8192c_PHY_QueryRFReg;
68936 @@ -6033,7 +6253,7 @@ _func_enter_;
68937 pHalFunc->hostap_mgnt_xmit_entry = &rtl8192cu_hostap_mgnt_xmit_entry;
68938 #endif
68939 pHalFunc->interface_ps_func = &rtl8192cu_ps_func;
68940 -
68941 +
68942 rtl8192c_set_hal_ops(pHalFunc);
68943 _func_exit_;
68944
68945 --- a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_ce.c
68946 +++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_ce.c
68947 @@ -16,8 +16,7 @@
68948 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
68949 *
68950 *
68951 -
68952 -******************************************************************************/
68953 + ******************************************************************************/
68954 #define _HCI_OPS_OS_C_
68955
68956 #include <drv_conf.h>
68957 @@ -870,7 +869,7 @@ _func_enter_;
68958
68959
68960 //not to consider tx fragment
68961 - rtw_free_xmitframe_ex(pxmitpriv, pxmitframe);
68962 + rtw_free_xmitframe(pxmitpriv, pxmitframe);
68963
68964
68965 #if 1
68966 --- a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_linux.c
68967 +++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_linux.c
68968 @@ -16,8 +16,7 @@
68969 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
68970 *
68971 *
68972 -
68973 -******************************************************************************/
68974 + ******************************************************************************/
68975 #define _HCI_OPS_OS_C_
68976
68977 #include <drv_conf.h>
68978 @@ -35,41 +34,11 @@
68979
68980 #endif
68981
68982 -struct zero_bulkout_context{
68983 - void *pbuf;
68984 - void *purb;
68985 - void *pirp;
68986 - void *padapter;
68987 -};
68988 -
68989 -#define REALTEK_USB_VENQT_MAX_BUF_SIZE 254
68990 -
68991 -#define RTW_USB_CONTROL_MSG_TIMEOUT_TEST 10 //ms
68992 -#define RTW_USB_CONTROL_MSG_TIMEOUT 500 //ms
68993 -//#define RTW_USB_CONTROL_MSG_TIMEOUT 5000 //ms
68994 -
68995 -#if defined(CONFIG_VENDOR_REQ_RETRY) && defined(CONFIG_USB_VENDOR_REQ_MUTEX)
68996 -//vendor req retry should be in the situation when each vendor req is atomically submitted from others
68997 -#define MAX_USBCTRL_VENDORREQ_TIMES 10
68998 -#else
68999 -#define MAX_USBCTRL_VENDORREQ_TIMES 1
69000 -#endif
69001 -
69002 -#define RTW_USB_BULKOUT_TIMEOUT 5000 //ms
69003 -
69004 -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)) || (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18))
69005 -#define _usbctrl_vendorreq_async_callback(urb, regs) _usbctrl_vendorreq_async_callback(urb)
69006 -#define usb_bulkout_zero_complete(purb, regs) usb_bulkout_zero_complete(purb)
69007 -#define usb_write_mem_complete(purb, regs) usb_write_mem_complete(purb)
69008 -#define usb_write_port_complete(purb, regs) usb_write_port_complete(purb)
69009 -#define usb_read_port_complete(purb, regs) usb_read_port_complete(purb)
69010 -#define usb_read_interrupt_complete(purb, regs) usb_read_interrupt_complete(purb)
69011 -#endif
69012 -
69013 -static int usbctrl_vendorreq(struct dvobj_priv *pdvobjpriv, u8 request, u16 value, u16 index, void *pdata, u16 len, u8 requesttype)
69014 +static int usbctrl_vendorreq(struct intf_hdl *pintfhdl, u8 request, u16 value, u16 index, void *pdata, u16 len, u8 requesttype)
69015 {
69016 - _adapter *padapter = pdvobjpriv->padapter ;
69017 - struct usb_device *udev=pdvobjpriv->pusbdev;
69018 + _adapter *padapter = pintfhdl->padapter;
69019 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
69020 + struct usb_device *udev = pdvobjpriv->pusbdev;
69021
69022 unsigned int pipe;
69023 int status = 0;
69024 @@ -84,6 +53,16 @@ static int usbctrl_vendorreq(struct dvob
69025 u8 tmp_buf[MAX_USB_IO_CTL_SIZE];
69026 #endif
69027
69028 +#ifdef CONFIG_CONCURRENT_MODE
69029 + if(padapter->adapter_type > PRIMARY_ADAPTER)
69030 + {
69031 + padapter = padapter->pbuddy_adapter;
69032 + pdvobjpriv = adapter_to_dvobj(padapter);
69033 + udev = pdvobjpriv->pusbdev;
69034 + }
69035 +#endif
69036 +
69037 +
69038 //DBG_871X("%s %s:%d\n",__FUNCTION__, current->comm, current->pid);
69039
69040 if((padapter->bSurpriseRemoved) ||(padapter->pwrctrlpriv.pnp_bstop_trx)){
69041 @@ -153,7 +132,7 @@ static int usbctrl_vendorreq(struct dvob
69042
69043 if ( status == len) // Success this control transfer.
69044 {
69045 - rtw_reset_continual_urb_error(&padapter->dvobjpriv);
69046 + rtw_reset_continual_urb_error(pdvobjpriv);
69047 if ( requesttype == 0x01 )
69048 { // For Control read transfer, we have to copy the read data from pIo_buf to pdata.
69049 _rtw_memcpy( pdata, pIo_buf, len );
69050 @@ -186,7 +165,7 @@ static int usbctrl_vendorreq(struct dvob
69051 }
69052 }
69053
69054 - if(rtw_inc_and_chk_continual_urb_error(&padapter->dvobjpriv) == _TRUE ){
69055 + if(rtw_inc_and_chk_continual_urb_error(pdvobjpriv) == _TRUE ){
69056 padapter->bSurpriseRemoved = _TRUE;
69057 break;
69058 }
69059 @@ -220,8 +199,7 @@ static u8 usb_read8(struct intf_hdl *pin
69060 u16 wvalue;
69061 u16 index;
69062 u16 len;
69063 - u32 data=0;
69064 - struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *)pintfhdl->pintf_dev;
69065 + u32 data=0;
69066
69067 _func_enter_;
69068
69069 @@ -232,7 +210,7 @@ static u8 usb_read8(struct intf_hdl *pin
69070 wvalue = (u16)(addr&0x0000ffff);
69071 len = 1;
69072
69073 - usbctrl_vendorreq(pdvobjpriv, request, wvalue, index, &data, len, requesttype);
69074 + usbctrl_vendorreq(pintfhdl, request, wvalue, index, &data, len, requesttype);
69075
69076 _func_exit_;
69077
69078 @@ -248,7 +226,6 @@ static u16 usb_read16(struct intf_hdl *p
69079 u16 index;
69080 u16 len;
69081 u32 data=0;
69082 - struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *)pintfhdl->pintf_dev;
69083
69084 _func_enter_;
69085
69086 @@ -259,7 +236,7 @@ static u16 usb_read16(struct intf_hdl *p
69087 wvalue = (u16)(addr&0x0000ffff);
69088 len = 2;
69089
69090 - usbctrl_vendorreq(pdvobjpriv, request, wvalue, index, &data, len, requesttype);
69091 + usbctrl_vendorreq(pintfhdl, request, wvalue, index, &data, len, requesttype);
69092
69093 _func_exit_;
69094
69095 @@ -275,7 +252,6 @@ static u32 usb_read32(struct intf_hdl *p
69096 u16 index;
69097 u16 len;
69098 u32 data=0;
69099 - struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *)pintfhdl->pintf_dev;
69100
69101 _func_enter_;
69102
69103 @@ -286,7 +262,7 @@ static u32 usb_read32(struct intf_hdl *p
69104 wvalue = (u16)(addr&0x0000ffff);
69105 len = 4;
69106
69107 - usbctrl_vendorreq(pdvobjpriv, request, wvalue, index, &data, len, requesttype);
69108 + usbctrl_vendorreq(pintfhdl, request, wvalue, index, &data, len, requesttype);
69109
69110 _func_exit_;
69111
69112 @@ -303,7 +279,6 @@ static int usb_write8(struct intf_hdl *p
69113 u16 len;
69114 u32 data;
69115 int ret;
69116 - struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *)pintfhdl->pintf_dev;
69117
69118 _func_enter_;
69119
69120 @@ -317,7 +292,7 @@ static int usb_write8(struct intf_hdl *p
69121 data = val;
69122 data = cpu_to_le32(data&0x000000ff);
69123
69124 - ret = usbctrl_vendorreq(pdvobjpriv, request, wvalue, index, &data, len, requesttype);
69125 + ret = usbctrl_vendorreq(pintfhdl, request, wvalue, index, &data, len, requesttype);
69126
69127 _func_exit_;
69128
69129 @@ -334,7 +309,6 @@ static int usb_write16(struct intf_hdl *
69130 u16 len;
69131 u32 data;
69132 int ret;
69133 - struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *)pintfhdl->pintf_dev;
69134
69135 _func_enter_;
69136
69137 @@ -348,7 +322,7 @@ static int usb_write16(struct intf_hdl *
69138 data = val;
69139 data = cpu_to_le32(data&0x0000ffff);
69140
69141 - ret = usbctrl_vendorreq(pdvobjpriv, request, wvalue, index, &data, len, requesttype);
69142 + ret = usbctrl_vendorreq(pintfhdl, request, wvalue, index, &data, len, requesttype);
69143
69144 _func_exit_;
69145
69146 @@ -365,7 +339,6 @@ static int usb_write32(struct intf_hdl *
69147 u16 len;
69148 u32 data;
69149 int ret;
69150 - struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *)pintfhdl->pintf_dev;
69151
69152 _func_enter_;
69153
69154 @@ -378,14 +351,14 @@ static int usb_write32(struct intf_hdl *
69155 data = cpu_to_le32(val);
69156
69157
69158 - ret =usbctrl_vendorreq(pdvobjpriv, request, wvalue, index, &data, len, requesttype);
69159 + ret =usbctrl_vendorreq(pintfhdl, request, wvalue, index, &data, len, requesttype);
69160
69161 _func_exit_;
69162
69163 return ret;
69164
69165 }
69166 -#define VENDOR_CMD_MAX_DATA_LEN 254
69167 +
69168 static int usb_writeN(struct intf_hdl *pintfhdl, u32 addr, u32 length, u8 *pdata)
69169 {
69170 u8 request;
69171 @@ -395,7 +368,6 @@ static int usb_writeN(struct intf_hdl *p
69172 u16 len;
69173 u8 buf[VENDOR_CMD_MAX_DATA_LEN]={0};
69174 int ret;
69175 - struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *)pintfhdl->pintf_dev;
69176
69177 _func_enter_;
69178
69179 @@ -407,7 +379,7 @@ static int usb_writeN(struct intf_hdl *p
69180 len = length;
69181 _rtw_memcpy(buf, pdata, len );
69182
69183 - ret = usbctrl_vendorreq(pdvobjpriv, request, wvalue, index, buf, len, requesttype);
69184 + ret = usbctrl_vendorreq(pintfhdl, request, wvalue, index, buf, len, requesttype);
69185
69186 _func_exit_;
69187
69188 @@ -415,271 +387,6 @@ static int usb_writeN(struct intf_hdl *p
69189
69190 }
69191
69192 -#ifdef CONFIG_USB_SUPPORT_ASYNC_VDN_REQ
69193 -static void _usbctrl_vendorreq_async_callback(struct urb *urb, struct pt_regs *regs)
69194 -{
69195 - if(urb){
69196 - if(urb->context){
69197 - kfree(urb->context);
69198 - }
69199 - usb_free_urb(urb);
69200 - }
69201 -}
69202 -
69203 -static int _usbctrl_vendorreq_async_write(struct usb_device *udev, u8 request, u16 value, u16 index, void *pdata, u16 len, u8 requesttype)
69204 -{
69205 -
69206 - int rc;
69207 - unsigned int pipe;
69208 - u8 reqtype;
69209 - struct usb_ctrlrequest *dr;
69210 - struct urb *urb;
69211 - struct rtl819x_async_write_data {
69212 - u8 data[REALTEK_USB_VENQT_MAX_BUF_SIZE];
69213 - struct usb_ctrlrequest dr;
69214 - } *buf;
69215 -
69216 - if (requesttype == VENDOR_READ){
69217 - pipe = usb_rcvctrlpipe(udev, 0);//read_in
69218 - reqtype = REALTEK_USB_VENQT_READ;
69219 - }
69220 - else {
69221 - pipe = usb_sndctrlpipe(udev, 0);//write_out
69222 - reqtype = REALTEK_USB_VENQT_WRITE;
69223 - }
69224 -
69225 - //buf = kmalloc(sizeof(*buf), GFP_ATOMIC);
69226 - buf = (struct rtl819x_async_write_data *)rtw_zmalloc(sizeof(*buf));
69227 - if (!buf) {
69228 - rc = -ENOMEM;
69229 - goto exit;
69230 - }
69231 -
69232 - urb = usb_alloc_urb(0, GFP_ATOMIC);
69233 - if (!urb) {
69234 - rtw_mfree((u8*)buf,sizeof(*buf));
69235 - rc = -ENOMEM;
69236 - goto exit;
69237 - }
69238 -
69239 - dr = &buf->dr;
69240 -
69241 - dr->bRequestType = reqtype;
69242 - dr->bRequest = request;
69243 - dr->wValue = cpu_to_le16(value);
69244 - dr->wIndex = cpu_to_le16(index);
69245 - dr->wLength = cpu_to_le16(len);
69246 -
69247 - _rtw_memcpy(buf, pdata, len);
69248 -
69249 - usb_fill_control_urb(urb, udev, pipe,
69250 - (unsigned char *)dr, buf, len,
69251 - _usbctrl_vendorreq_async_callback, buf);
69252 -
69253 - rc = usb_submit_urb(urb, GFP_ATOMIC);
69254 - if (rc < 0) {
69255 - rtw_mfree((u8*)buf,sizeof(*buf));
69256 - usb_free_urb(urb);
69257 - }
69258 -
69259 -exit:
69260 - return rc;
69261 -
69262 -}
69263 -
69264 -static int usb_write_async(struct usb_device *udev, u32 addr, u32 val, u16 len)
69265 -{
69266 - u8 request;
69267 - u8 requesttype;
69268 - u16 wvalue;
69269 - u16 index;
69270 - u32 data;
69271 - int ret;
69272 -
69273 - requesttype = VENDOR_WRITE;//write_out
69274 - request = REALTEK_USB_VENQT_CMD_REQ;
69275 - index = REALTEK_USB_VENQT_CMD_IDX;//n/a
69276 -
69277 - wvalue = (u16)(addr&0x0000ffff);
69278 - data = val & (0xffffffff >> ((4 - len) * 8));
69279 - data = cpu_to_le32(data);
69280 -
69281 - ret = _usbctrl_vendorreq_async_write(udev, request, wvalue, index, &data, len, requesttype);
69282 -
69283 - return ret;
69284 -}
69285 -static int usb_async_write8(struct intf_hdl *pintfhdl, u32 addr, u8 val)
69286 -{
69287 - u32 data;
69288 - int ret;
69289 - struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *)pintfhdl->pintf_dev;
69290 - struct usb_device *udev=pdvobjpriv->pusbdev;
69291 -
69292 - _func_enter_;
69293 - data = cpu_to_le32(val & 0xFF);
69294 - ret = usb_write_async(udev, addr, val, 1);
69295 - _func_exit_;
69296 -
69297 - return ret;
69298 -}
69299 -
69300 -static int usb_async_write16(struct intf_hdl *pintfhdl, u32 addr, u16 val)
69301 -{
69302 - u32 data;
69303 - int ret;
69304 - struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *)pintfhdl->pintf_dev;
69305 - struct usb_device *udev=pdvobjpriv->pusbdev;
69306 -
69307 - _func_enter_;
69308 - data = cpu_to_le32(val & 0xFFFF);
69309 - ret = usb_write_async(udev, addr, val, 2);
69310 - _func_exit_;
69311 -
69312 - return ret;
69313 -}
69314 -static int usb_async_write32(struct intf_hdl *pintfhdl, u32 addr, u32 val)
69315 -{
69316 - u32 data;
69317 - int ret;
69318 - struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *)pintfhdl->pintf_dev;
69319 - struct usb_device *udev=pdvobjpriv->pusbdev;
69320 -
69321 - _func_enter_;
69322 - data = cpu_to_le32(val);
69323 - ret = usb_write_async(udev, addr, val, 4);
69324 - _func_exit_;
69325 -
69326 - return ret;
69327 -}
69328 -#endif
69329 -
69330 -static unsigned int ffaddr2pipehdl(struct dvobj_priv *pdvobj, u32 addr)
69331 -{
69332 - unsigned int pipe=0;
69333 - int ep_num=0;
69334 - _adapter *padapter = pdvobj->padapter;
69335 - struct usb_device *pusbd = pdvobj->pusbdev;
69336 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
69337 -
69338 - if(addr == RECV_BULK_IN_ADDR)
69339 - {
69340 - pipe=usb_rcvbulkpipe(pusbd, 0x01);
69341 -
69342 - return pipe;
69343 - }
69344 -
69345 - if(addr == RECV_INT_IN_ADDR)
69346 - {
69347 - pipe=usb_rcvbulkpipe(pusbd, 0x04);
69348 -
69349 - return pipe;
69350 - }
69351 -
69352 - if(addr < HW_QUEUE_ENTRY)
69353 - {
69354 - ep_num = (pHalData->Queue2EPNum[(u8)addr] & 0x0f);
69355 -
69356 - pipe = usb_sndbulkpipe(pusbd, ep_num);
69357 -
69358 - return pipe;
69359 - }
69360 -
69361 - return pipe;
69362 -
69363 -}
69364 -
69365 -static void usb_bulkout_zero_complete(struct urb *purb, struct pt_regs *regs)
69366 -{
69367 - struct zero_bulkout_context *pcontext = (struct zero_bulkout_context *)purb->context;
69368 -
69369 - //DBG_8192C("+usb_bulkout_zero_complete\n");
69370 -
69371 - if(pcontext)
69372 - {
69373 - if(pcontext->pbuf)
69374 - {
69375 - rtw_mfree(pcontext->pbuf, sizeof(int));
69376 - }
69377 -
69378 - if(pcontext->purb && (pcontext->purb==purb))
69379 - {
69380 - usb_free_urb(pcontext->purb);
69381 - }
69382 -
69383 -
69384 - rtw_mfree((u8*)pcontext, sizeof(struct zero_bulkout_context));
69385 - }
69386 -
69387 -
69388 -}
69389 -
69390 -static u32 usb_bulkout_zero(struct intf_hdl *pintfhdl, u32 addr)
69391 -{
69392 - int pipe, status, len;
69393 - u32 ret;
69394 - unsigned char *pbuf;
69395 - struct zero_bulkout_context *pcontext;
69396 - PURB purb = NULL;
69397 - _adapter *padapter = (_adapter *)pintfhdl->padapter;
69398 - struct dvobj_priv *pdvobj = (struct dvobj_priv *)&padapter->dvobjpriv;
69399 - struct usb_device *pusbd = pdvobj->pusbdev;
69400 -
69401 - //DBG_8192C("+usb_bulkout_zero\n");
69402 -
69403 -
69404 - if((padapter->bDriverStopped) || (padapter->bSurpriseRemoved) ||(padapter->pwrctrlpriv.pnp_bstop_trx))
69405 - {
69406 - return _FAIL;
69407 - }
69408 -
69409 -
69410 - pcontext = (struct zero_bulkout_context *)rtw_zmalloc(sizeof(struct zero_bulkout_context));
69411 -
69412 - pbuf = (unsigned char *)rtw_zmalloc(sizeof(int));
69413 - purb = usb_alloc_urb(0, GFP_ATOMIC);
69414 -
69415 - len = 0;
69416 - pcontext->pbuf = pbuf;
69417 - pcontext->purb = purb;
69418 - pcontext->pirp = NULL;
69419 - pcontext->padapter = padapter;
69420 -
69421 -
69422 - //translate DMA FIFO addr to pipehandle
69423 - //pipe = ffaddr2pipehdl(pdvobj, addr);
69424 -
69425 - usb_fill_bulk_urb(purb, pusbd, pipe,
69426 - pbuf,
69427 - len,
69428 - usb_bulkout_zero_complete,
69429 - pcontext);//context is pcontext
69430 -
69431 - status = usb_submit_urb(purb, GFP_ATOMIC);
69432 -
69433 - if (!status)
69434 - {
69435 - ret= _SUCCESS;
69436 - }
69437 - else
69438 - {
69439 - ret= _FAIL;
69440 - }
69441 -
69442 -
69443 - return _SUCCESS;
69444 -
69445 -}
69446 -
69447 -static void usb_read_mem(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *rmem)
69448 -{
69449 -
69450 -}
69451 -
69452 -static void usb_write_mem(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem)
69453 -{
69454 -
69455 -}
69456 -
69457 #ifdef CONFIG_USB_INTERRUPT_IN_PIPE
69458 static void usb_read_interrupt_complete(struct urb *purb, struct pt_regs *regs)
69459 {
69460 @@ -731,8 +438,8 @@ static u32 usb_read_interrupt(struct int
69461 int err;
69462 unsigned int pipe;
69463 u32 ret = _SUCCESS;
69464 - struct dvobj_priv *pdvobj = (struct dvobj_priv *)pintfhdl->pintf_dev;
69465 - _adapter *adapter = (_adapter *)pdvobj->padapter;
69466 + _adapter *adapter = pintfhdl->padapter;
69467 + struct dvobj_priv *pdvobj = adapter_to_dvobj(adapter);
69468 struct recv_priv *precvpriv = &adapter->recvpriv;
69469 struct usb_device *pusbd = pdvobj->pusbdev;
69470
69471 @@ -761,17 +468,220 @@ _func_exit_;
69472 }
69473 #endif
69474
69475 +static s32 pre_recv_entry(union recv_frame *precvframe, struct recv_stat *prxstat, struct phy_stat *pphy_info)
69476 +{
69477 + s32 ret=_SUCCESS;
69478 +#ifdef CONFIG_CONCURRENT_MODE
69479 + u8 *primary_myid, *secondary_myid, *paddr1;
69480 + union recv_frame *precvframe_if2 = NULL;
69481 + _adapter *primary_padapter = precvframe->u.hdr.adapter;
69482 + _adapter *secondary_padapter = primary_padapter->pbuddy_adapter;
69483 + struct recv_priv *precvpriv = &primary_padapter->recvpriv;
69484 + _queue *pfree_recv_queue = &precvpriv->free_recv_queue;
69485 + u8 *pbuf = precvframe->u.hdr.rx_data;
69486 +
69487 + if(!secondary_padapter)
69488 + return ret;
69489 +
69490 + paddr1 = GetAddr1Ptr(precvframe->u.hdr.rx_data);
69491 +
69492 + if(IS_MCAST(paddr1) == _FALSE)//unicast packets
69493 + {
69494 + //primary_myid = myid(&primary_padapter->eeprompriv);
69495 + secondary_myid = myid(&secondary_padapter->eeprompriv);
69496 +
69497 + if(_rtw_memcmp(paddr1, secondary_myid, ETH_ALEN))
69498 + {
69499 + //change to secondary interface
69500 + precvframe->u.hdr.adapter = secondary_padapter;
69501 + }
69502 +
69503 + //ret = recv_entry(precvframe);
69504 +
69505 + }
69506 + else // Handle BC/MC Packets
69507 + {
69508 +
69509 + u8 clone = _TRUE;
69510 +#if 0
69511 + u8 type, subtype, *paddr2, *paddr3;
69512 +
69513 + type = GetFrameType(pbuf);
69514 + subtype = GetFrameSubType(pbuf); //bit(7)~bit(2)
69515 +
69516 + switch (type)
69517 + {
69518 + case WIFI_MGT_TYPE: //Handle BC/MC mgnt Packets
69519 + if(subtype == WIFI_BEACON)
69520 + {
69521 + paddr3 = GetAddr3Ptr(precvframe->u.hdr.rx_data);
69522 +
69523 + if (check_fwstate(&secondary_padapter->mlmepriv, _FW_LINKED) &&
69524 + _rtw_memcmp(paddr3, get_bssid(&secondary_padapter->mlmepriv), ETH_ALEN))
69525 + {
69526 + //change to secondary interface
69527 + precvframe->u.hdr.adapter = secondary_padapter;
69528 + clone = _FALSE;
69529 + }
69530 +
69531 + if(check_fwstate(&primary_padapter->mlmepriv, _FW_LINKED) &&
69532 + _rtw_memcmp(paddr3, get_bssid(&primary_padapter->mlmepriv), ETH_ALEN))
69533 + {
69534 + if(clone==_FALSE)
69535 + {
69536 + clone = _TRUE;
69537 + }
69538 + else
69539 + {
69540 + clone = _FALSE;
69541 + }
69542 +
69543 + precvframe->u.hdr.adapter = primary_padapter;
69544 + }
69545 +
69546 + if(check_fwstate(&primary_padapter->mlmepriv, _FW_UNDER_SURVEY|_FW_UNDER_LINKING) ||
69547 + check_fwstate(&secondary_padapter->mlmepriv, _FW_UNDER_SURVEY|_FW_UNDER_LINKING))
69548 + {
69549 + clone = _TRUE;
69550 + precvframe->u.hdr.adapter = primary_padapter;
69551 + }
69552 +
69553 + }
69554 + else if(subtype == WIFI_PROBEREQ)
69555 + {
69556 + //probe req frame is only for interface2
69557 + //change to secondary interface
69558 + precvframe->u.hdr.adapter = secondary_padapter;
69559 + clone = _FALSE;
69560 + }
69561 + break;
69562 + case WIFI_CTRL_TYPE: // Handle BC/MC ctrl Packets
69563 +
69564 + break;
69565 + case WIFI_DATA_TYPE: //Handle BC/MC data Packets
69566 + //Notes: AP MODE never rx BC/MC data packets
69567 +
69568 + paddr2 = GetAddr2Ptr(precvframe->u.hdr.rx_data);
69569 +
69570 + if(_rtw_memcmp(paddr2, get_bssid(&secondary_padapter->mlmepriv), ETH_ALEN))
69571 + {
69572 + //change to secondary interface
69573 + precvframe->u.hdr.adapter = secondary_padapter;
69574 + clone = _FALSE;
69575 + }
69576 +
69577 + break;
69578 + default:
69579 +
69580 + break;
69581 + }
69582 +#endif
69583 +
69584 + if(_TRUE == clone)
69585 + {
69586 + //clone/copy to if2
69587 + u8 shift_sz = 0;
69588 + u32 alloc_sz, skb_len;
69589 + _pkt *pkt_copy = NULL;
69590 + struct rx_pkt_attrib *pattrib = NULL;
69591 +
69592 + precvframe_if2 = rtw_alloc_recvframe(pfree_recv_queue);
69593 + if(precvframe_if2)
69594 + {
69595 + precvframe_if2->u.hdr.adapter = secondary_padapter;
69596 +
69597 + _rtw_init_listhead(&precvframe_if2->u.hdr.list);
69598 + precvframe_if2->u.hdr.precvbuf = NULL; //can't access the precvbuf for new arch.
69599 + precvframe_if2->u.hdr.len=0;
69600 +
69601 + _rtw_memcpy(&precvframe_if2->u.hdr.attrib, &precvframe->u.hdr.attrib, sizeof(struct rx_pkt_attrib));
69602 +
69603 + pattrib = &precvframe_if2->u.hdr.attrib;
69604 +
69605 + // Modified by Albert 20101213
69606 + // For 8 bytes IP header alignment.
69607 + if (pattrib->qos) // Qos data, wireless lan header length is 26
69608 + {
69609 + shift_sz = 6;
69610 + }
69611 + else
69612 + {
69613 + shift_sz = 0;
69614 + }
69615 +
69616 + skb_len = pattrib->pkt_len;
69617 +
69618 + // for first fragment packet, driver need allocate 1536+drvinfo_sz+RXDESC_SIZE to defrag packet.
69619 + // modify alloc_sz for recvive crc error packet by thomas 2011-06-02
69620 + if((pattrib->mfrag == 1)&&(pattrib->frag_num == 0)){
69621 + //alloc_sz = 1664; //1664 is 128 alignment.
69622 + if(skb_len <= 1650)
69623 + alloc_sz = 1664;
69624 + else
69625 + alloc_sz = skb_len + 14;
69626 + }
69627 + else {
69628 + alloc_sz = skb_len;
69629 + // 6 is for IP header 8 bytes alignment in QoS packet case.
69630 + // 8 is for skb->data 4 bytes alignment.
69631 + alloc_sz += 14;
69632 + }
69633 +
69634 + pkt_copy = rtw_skb_alloc(alloc_sz);
69635 +
69636 + if(pkt_copy)
69637 + {
69638 + pkt_copy->dev = secondary_padapter->pnetdev;
69639 + precvframe_if2->u.hdr.pkt = pkt_copy;
69640 + precvframe_if2->u.hdr.rx_head = pkt_copy->data;
69641 + precvframe_if2->u.hdr.rx_end = pkt_copy->data + alloc_sz;
69642 + skb_reserve( pkt_copy, 8 - ((SIZE_PTR)( pkt_copy->data ) & 7 ));//force pkt_copy->data at 8-byte alignment address
69643 + skb_reserve( pkt_copy, shift_sz );//force ip_hdr at 8-byte alignment address according to shift_sz.
69644 + _rtw_memcpy(pkt_copy->data, pbuf, skb_len);
69645 + precvframe_if2->u.hdr.rx_data = precvframe_if2->u.hdr.rx_tail = pkt_copy->data;
69646 +
69647 +
69648 + recvframe_put(precvframe_if2, skb_len);
69649 + //recvframe_pull(precvframe_if2, drvinfo_sz + RXDESC_SIZE);
69650 +
69651 + rtl8192c_translate_rx_signal_stuff(precvframe_if2, pphy_info);
69652 +
69653 + ret = rtw_recv_entry(precvframe_if2);
69654 +
69655 + } else {
69656 + rtw_free_recvframe(precvframe_if2, pfree_recv_queue);
69657 + DBG_8192C("%s()-%d: alloc_skb() failed!\n", __FUNCTION__, __LINE__);
69658 + }
69659 +
69660 + }
69661 +
69662 + }
69663 +
69664 + }
69665 +
69666 + rtl8192c_translate_rx_signal_stuff(precvframe, pphy_info);
69667 +
69668 + ret = rtw_recv_entry(precvframe);
69669 +
69670 +#endif
69671 +
69672 + return ret;
69673 +
69674 +}
69675 +
69676 #ifdef CONFIG_USE_USB_BUFFER_ALLOC_RX
69677 static int recvbuf2recvframe(_adapter *padapter, struct recv_buf *precvbuf)
69678 {
69679 u8 *pbuf;
69680 - u8 frag, mf, shift_sz = 0;
69681 + u8 shift_sz = 0;
69682 u16 pkt_cnt, drvinfo_sz;
69683 - u32 pkt_len, pkt_offset, skb_len, alloc_sz;
69684 + u32 pkt_offset, skb_len, alloc_sz;
69685 s32 transfer_len;
69686 struct recv_stat *prxstat;
69687 - _pkt *pkt_copy = NULL;
69688 - union recv_frame *precvframe = NULL;
69689 + struct phy_stat *pphy_info = NULL;
69690 + _pkt *pkt_copy = NULL;
69691 + union recv_frame *precvframe = NULL;
69692 + struct rx_pkt_attrib *pattrib = NULL;
69693 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
69694 struct recv_priv *precvpriv = &padapter->recvpriv;
69695 _queue *pfree_recv_queue = &precvpriv->free_recv_queue;
69696 @@ -795,28 +705,41 @@ static int recvbuf2recvframe(_adapter *p
69697 ("recvbuf2recvframe: rxdesc=offsset 0:0x%08x, 4:0x%08x, 8:0x%08x, C:0x%08x\n",
69698 prxstat->rxdw0, prxstat->rxdw1, prxstat->rxdw2, prxstat->rxdw4));
69699
69700 - prxstat = (struct recv_stat *)pbuf;
69701 - pkt_len = le32_to_cpu(prxstat->rxdw0)&0x00003fff;
69702 -
69703 + prxstat = (struct recv_stat *)pbuf;
69704
69705 - mf = (le32_to_cpu(prxstat->rxdw1) >> 27) & 0x1;//more fragment bit
69706 - frag = (le32_to_cpu(prxstat->rxdw2) >> 12) & 0xf;//fragmentation number
69707 + precvframe = rtw_alloc_recvframe(pfree_recv_queue);
69708 + if(precvframe==NULL)
69709 + {
69710 + RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("recvbuf2recvframe: precvframe==NULL\n"));
69711 + DBG_8192C("%s()-%d: rtw_alloc_recvframe() failed! RX Drop!\n", __FUNCTION__, __LINE__);
69712 + goto _exit_recvbuf2recvframe;
69713 + }
69714 +
69715 + _rtw_init_listhead(&precvframe->u.hdr.list);
69716 + precvframe->u.hdr.precvbuf = NULL; //can't access the precvbuf for new arch.
69717 + precvframe->u.hdr.len=0;
69718
69719 - drvinfo_sz = (le32_to_cpu(prxstat->rxdw0) & 0x000f0000) >> 16;
69720 - drvinfo_sz = drvinfo_sz << 3;//uint (2^3) = 8 bytes; REG_RX_DRVINFO_SZ
69721 - RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("recvbuf2recvframe: DRV_INFO_SIZE=%d\n", drvinfo_sz));
69722 + rtl8192c_query_rx_desc_status(precvframe, prxstat);
69723 +
69724 + pattrib = &precvframe->u.hdr.attrib;
69725 + if(pattrib->physt)
69726 + {
69727 + pphy_info = (struct phy_stat *)(pbuf + RXDESC_OFFSET);
69728 + }
69729
69730 - pkt_offset = pkt_len + drvinfo_sz + RXDESC_SIZE;
69731 + pkt_offset = RXDESC_SIZE + pattrib->drvinfo_sz + pattrib->shift_sz + pattrib->pkt_len;
69732
69733 - if((pkt_len<=0) || (pkt_offset>transfer_len))
69734 + if((pattrib->pkt_len<=0) || (pkt_offset>transfer_len))
69735 {
69736 RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("recvbuf2recvframe: pkt_len<=0\n"));
69737 + DBG_8192C("%s()-%d: RX Warning!\n", __FUNCTION__, __LINE__);
69738 + rtw_free_recvframe(precvframe, pfree_recv_queue);
69739 goto _exit_recvbuf2recvframe;
69740 - }
69741 + }
69742
69743 // Modified by Albert 20101213
69744 // For 8 bytes IP header alignment.
69745 - if ( ( le32_to_cpu( prxstat->rxdw0 ) >> 23 ) & 0x01 ) // Qos data, wireless lan header length is 26
69746 + if (pattrib->qos) // Qos data, wireless lan header length is 26
69747 {
69748 shift_sz = 6;
69749 }
69750 @@ -825,23 +748,11 @@ static int recvbuf2recvframe(_adapter *p
69751 shift_sz = 0;
69752 }
69753
69754 - precvframe = rtw_alloc_recvframe(pfree_recv_queue);
69755 - if(precvframe==NULL)
69756 - {
69757 - RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("recvbuf2recvframe: precvframe==NULL\n"));
69758 - goto _exit_recvbuf2recvframe;
69759 - }
69760 -
69761 - _rtw_init_listhead(&precvframe->u.hdr.list);
69762 - precvframe->u.hdr.precvbuf = NULL; //can't access the precvbuf for new arch.
69763 - precvframe->u.hdr.len=0;
69764 -
69765 - //skb_len = pkt_offset;
69766 - skb_len = pkt_len;
69767 + skb_len = pattrib->pkt_len;
69768
69769 // for first fragment packet, driver need allocate 1536+drvinfo_sz+RXDESC_SIZE to defrag packet.
69770 // modify alloc_sz for recvive crc error packet by thomas 2011-06-02
69771 - if((mf ==1)&&(frag == 0)){
69772 + if((pattrib->mfrag == 1)&&(pattrib->frag_num == 0)){
69773 //alloc_sz = 1664; //1664 is 128 alignment.
69774 if(skb_len <= 1650)
69775 alloc_sz = 1664;
69776 @@ -854,27 +765,24 @@ static int recvbuf2recvframe(_adapter *p
69777 // 8 is for skb->data 4 bytes alignment.
69778 alloc_sz += 14;
69779 }
69780 -
69781
69782 -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)) // http://www.mail-archive.com/netdev@vger.kernel.org/msg17214.html
69783 - pkt_copy = dev_alloc_skb(alloc_sz);
69784 -#else
69785 - pkt_copy = netdev_alloc_skb(padapter->pnetdev, alloc_sz);
69786 -#endif
69787 + pkt_copy = rtw_skb_alloc(alloc_sz);
69788 +
69789 if(pkt_copy)
69790 {
69791 pkt_copy->dev = padapter->pnetdev;
69792 precvframe->u.hdr.pkt = pkt_copy;
69793 + precvframe->u.hdr.rx_head = pkt_copy->data;
69794 + precvframe->u.hdr.rx_end = pkt_copy->data + alloc_sz;
69795 skb_reserve( pkt_copy, 8 - ((SIZE_PTR)( pkt_copy->data ) & 7 ));//force pkt_copy->data at 8-byte alignment address
69796 skb_reserve( pkt_copy, shift_sz );//force ip_hdr at 8-byte alignment address according to shift_sz.
69797 - _rtw_memcpy(pkt_copy->data, (pbuf + drvinfo_sz + RXDESC_SIZE), skb_len);
69798 - precvframe->u.hdr.rx_head = precvframe->u.hdr.rx_data = precvframe->u.hdr.rx_tail = pkt_copy->data;
69799 - precvframe->u.hdr.rx_end = pkt_copy->data + alloc_sz;
69800 + _rtw_memcpy(pkt_copy->data, (pbuf + pattrib->shift_sz + pattrib->drvinfo_sz + RXDESC_SIZE), skb_len);
69801 + precvframe->u.hdr.rx_data = precvframe->u.hdr.rx_tail = pkt_copy->data;
69802 }
69803 else
69804 {
69805 - DBG_8192C("recvbuf2recvframe:can not allocate memory for skb copy\n");
69806 - //precvframe->u.hdr.pkt = skb_clone(pskb, GFP_ATOMIC);
69807 + DBG_8192C("recvbuf2recvframe:can not allocate memory for skb copy\n");
69808 + //precvframe->u.hdr.pkt = rtw_skb_clone(pskb);
69809 //precvframe->u.hdr.rx_head = precvframe->u.hdr.rx_data = precvframe->u.hdr.rx_tail = pbuf;
69810 //precvframe->u.hdr.rx_end = pbuf + (pkt_offset>1612?pkt_offset:1612);
69811
69812 @@ -903,13 +811,30 @@ static int recvbuf2recvframe(_adapter *p
69813 }
69814 #endif
69815
69816 - //because the endian issue, driver avoid reference to the rxstat after calling update_recvframe_attrib_from_recvstat();
69817 - rtl8192cu_update_recvframe_attrib_from_recvstat(precvframe, prxstat);
69818 -
69819 +#ifdef CONFIG_CONCURRENT_MODE
69820 + if(rtw_buddy_adapter_up(padapter))
69821 + {
69822 + if(pre_recv_entry(precvframe, prxstat, pphy_info) != _SUCCESS)
69823 + {
69824 + RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("recvbuf2recvframe: recv_entry(precvframe) != _SUCCESS\n"));
69825 + }
69826 + }
69827 + else
69828 + {
69829 + rtl8192c_translate_rx_signal_stuff(precvframe, pphy_info);
69830 + if(rtw_recv_entry(precvframe) != _SUCCESS)
69831 + {
69832 + RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("recvbuf2recvframe: rtw_recv_entry(precvframe) != _SUCCESS\n"));
69833 + }
69834 + }
69835 +
69836 +#else
69837 + rtl8192c_translate_rx_signal_stuff(precvframe, pphy_info);
69838 if(rtw_recv_entry(precvframe) != _SUCCESS)
69839 {
69840 RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("recvbuf2recvframe: rtw_recv_entry(precvframe) != _SUCCESS\n"));
69841 }
69842 +#endif
69843
69844 pkt_cnt--;
69845 transfer_len -= pkt_offset;
69846 @@ -924,7 +849,7 @@ static int recvbuf2recvframe(_adapter *p
69847
69848 _exit_recvbuf2recvframe:
69849
69850 - return _SUCCESS;
69851 + return _SUCCESS;
69852 }
69853
69854 void rtl8192cu_recv_tasklet(void *priv)
69855 @@ -977,7 +902,7 @@ static void usb_read_port_complete(struc
69856 }
69857 else
69858 {
69859 - rtw_reset_continual_urb_error(&padapter->dvobjpriv);
69860 + rtw_reset_continual_urb_error(adapter_to_dvobj(padapter));
69861
69862 precvbuf->transfer_len = purb->actual_length;
69863
69864 @@ -993,7 +918,7 @@ static void usb_read_port_complete(struc
69865
69866 DBG_8192C("###=> usb_read_port_complete => urb status(%d)\n", purb->status);
69867
69868 - if(rtw_inc_and_chk_continual_urb_error(&padapter->dvobjpriv) == _TRUE ){
69869 + if(rtw_inc_and_chk_continual_urb_error(adapter_to_dvobj(padapter)) == _TRUE ){
69870 padapter->bSurpriseRemoved = _TRUE;
69871 }
69872
69873 @@ -1009,6 +934,10 @@ static void usb_read_port_complete(struc
69874 RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_read_port_complete:bDriverStopped=TRUE\n"));
69875 break;
69876 case -EPROTO:
69877 + case -EILSEQ:
69878 + case -ETIME:
69879 + case -ECOMM:
69880 + case -EOVERFLOW:
69881 #ifdef DBG_CONFIG_ERROR_DETECT
69882 {
69883 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
69884 @@ -1037,10 +966,10 @@ static u32 usb_read_port(struct intf_hdl
69885 int err;
69886 unsigned int pipe;
69887 u32 ret = _SUCCESS;
69888 - PURB purb = NULL;
69889 + PURB purb = NULL;
69890 struct recv_buf *precvbuf = (struct recv_buf *)rmem;
69891 - struct dvobj_priv *pdvobj = (struct dvobj_priv *)pintfhdl->pintf_dev;
69892 - _adapter *adapter = (_adapter *)pdvobj->padapter;
69893 + _adapter *adapter = pintfhdl->padapter;
69894 + struct dvobj_priv *pdvobj = adapter_to_dvobj(adapter);
69895 struct recv_priv *precvpriv = &adapter->recvpriv;
69896 struct usb_device *pusbd = pdvobj->pusbdev;
69897
69898 @@ -1099,13 +1028,15 @@ _func_exit_;
69899 static int recvbuf2recvframe(_adapter *padapter, _pkt *pskb)
69900 {
69901 u8 *pbuf;
69902 - u8 frag, mf, shift_sz = 0;
69903 - u16 pkt_cnt, drvinfo_sz;
69904 - u32 pkt_len, pkt_offset, skb_len, alloc_sz;
69905 + u8 shift_sz = 0;
69906 + u16 pkt_cnt;
69907 + u32 pkt_offset, skb_len, alloc_sz;
69908 s32 transfer_len;
69909 struct recv_stat *prxstat;
69910 + struct phy_stat *pphy_info = NULL;
69911 _pkt *pkt_copy = NULL;
69912 union recv_frame *precvframe = NULL;
69913 + struct rx_pkt_attrib *pattrib = NULL;
69914 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
69915 struct recv_priv *precvpriv = &padapter->recvpriv;
69916 _queue *pfree_recv_queue = &precvpriv->free_recv_queue;
69917 @@ -1116,7 +1047,7 @@ static int recvbuf2recvframe(_adapter *p
69918
69919 prxstat = (struct recv_stat *)pbuf;
69920 pkt_cnt = (le32_to_cpu(prxstat->rxdw2)>>16) & 0xff;
69921 -
69922 +
69923 #if 0 //temp remove when disable usb rx aggregation
69924 if((pkt_cnt > 10) || (pkt_cnt < 1) || (transfer_len<RXDESC_SIZE) ||(pkt_len<=0))
69925 {
69926 @@ -1129,27 +1060,41 @@ static int recvbuf2recvframe(_adapter *p
69927 ("recvbuf2recvframe: rxdesc=offsset 0:0x%08x, 4:0x%08x, 8:0x%08x, C:0x%08x\n",
69928 prxstat->rxdw0, prxstat->rxdw1, prxstat->rxdw2, prxstat->rxdw4));
69929
69930 - prxstat = (struct recv_stat *)pbuf;
69931 - pkt_len = le32_to_cpu(prxstat->rxdw0)&0x00003fff;
69932 + prxstat = (struct recv_stat *)pbuf;
69933 +
69934 + precvframe = rtw_alloc_recvframe(pfree_recv_queue);
69935 + if(precvframe==NULL)
69936 + {
69937 + RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("recvbuf2recvframe: precvframe==NULL\n"));
69938 + DBG_8192C("%s()-%d: rtw_alloc_recvframe() failed! RX Drop!\n", __FUNCTION__, __LINE__);
69939 + goto _exit_recvbuf2recvframe;
69940 + }
69941 +
69942 + _rtw_init_listhead(&precvframe->u.hdr.list);
69943 + precvframe->u.hdr.precvbuf = NULL; //can't access the precvbuf for new arch.
69944 + precvframe->u.hdr.len=0;
69945
69946 - mf = (le32_to_cpu(prxstat->rxdw1) >> 27) & 0x1;//more fragment bit
69947 - frag = (le32_to_cpu(prxstat->rxdw2) >> 12) & 0xf;//fragmentation number
69948 + rtl8192c_query_rx_desc_status(precvframe, prxstat);
69949
69950 - drvinfo_sz = (le32_to_cpu(prxstat->rxdw0) & 0x000f0000) >> 16;
69951 - drvinfo_sz = drvinfo_sz << 3;//uint (2^3) = 8 bytes; REG_RX_DRVINFO_SZ
69952 - RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("recvbuf2recvframe: DRV_INFO_SIZE=%d\n", drvinfo_sz));
69953 + pattrib = &precvframe->u.hdr.attrib;
69954 + if(pattrib->physt)
69955 + {
69956 + pphy_info = (struct phy_stat *)(pbuf + RXDESC_OFFSET);
69957 + }
69958
69959 - pkt_offset = pkt_len + drvinfo_sz + RXDESC_SIZE;
69960 + pkt_offset = RXDESC_SIZE + pattrib->drvinfo_sz + pattrib->shift_sz + pattrib->pkt_len;
69961
69962 - if((pkt_len<=0) || (pkt_offset>transfer_len))
69963 + if((pattrib->pkt_len<=0) || (pkt_offset>transfer_len))
69964 {
69965 RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("recvbuf2recvframe: pkt_len<=0\n"));
69966 + DBG_8192C("%s()-%d: RX Warning!\n", __FUNCTION__, __LINE__);
69967 + rtw_free_recvframe(precvframe, pfree_recv_queue);
69968 goto _exit_recvbuf2recvframe;
69969 - }
69970 + }
69971
69972 // Modified by Albert 20101213
69973 // For 8 bytes IP header alignment.
69974 - if ( ( le32_to_cpu( prxstat->rxdw0 ) >> 23 ) & 0x01 ) // Qos data, wireless lan header length is 26
69975 + if (pattrib->qos) // Qos data, wireless lan header length is 26
69976 {
69977 shift_sz = 6;
69978 }
69979 @@ -1158,23 +1103,11 @@ static int recvbuf2recvframe(_adapter *p
69980 shift_sz = 0;
69981 }
69982
69983 - precvframe = rtw_alloc_recvframe(pfree_recv_queue);
69984 - if(precvframe==NULL)
69985 - {
69986 - RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("recvbuf2recvframe: precvframe==NULL\n"));
69987 - goto _exit_recvbuf2recvframe;
69988 - }
69989 -
69990 - _rtw_init_listhead(&precvframe->u.hdr.list);
69991 - precvframe->u.hdr.precvbuf = NULL; //can't access the precvbuf for new arch.
69992 - precvframe->u.hdr.len=0;
69993 -
69994 - //skb_len = pkt_offset;
69995 - skb_len = pkt_len;
69996 + skb_len = pattrib->pkt_len;
69997
69998 // for first fragment packet, driver need allocate 1536+drvinfo_sz+RXDESC_SIZE to defrag packet.
69999 // modify alloc_sz for recvive crc error packet by thomas 2011-06-02
70000 - if((mf ==1)&&(frag == 0)){
70001 + if((pattrib->mfrag == 1)&&(pattrib->frag_num == 0)){
70002 //alloc_sz = 1664; //1664 is 128 alignment.
70003 if(skb_len <= 1650)
70004 alloc_sz = 1664;
70005 @@ -1187,26 +1120,24 @@ static int recvbuf2recvframe(_adapter *p
70006 // 8 is for skb->data 4 bytes alignment.
70007 alloc_sz += 14;
70008 }
70009 -
70010
70011 -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)) // http://www.mail-archive.com/netdev@vger.kernel.org/msg17214.html
70012 - pkt_copy = dev_alloc_skb(alloc_sz);
70013 -#else
70014 - pkt_copy = netdev_alloc_skb(padapter->pnetdev, alloc_sz);
70015 -#endif
70016 + pkt_copy = rtw_skb_alloc(alloc_sz);
70017 +
70018 if(pkt_copy)
70019 {
70020 pkt_copy->dev = padapter->pnetdev;
70021 precvframe->u.hdr.pkt = pkt_copy;
70022 + precvframe->u.hdr.rx_head = pkt_copy->data;
70023 + precvframe->u.hdr.rx_end = pkt_copy->data + alloc_sz;
70024 skb_reserve( pkt_copy, 8 - ((SIZE_PTR)( pkt_copy->data ) & 7 ));//force pkt_copy->data at 8-byte alignment address
70025 skb_reserve( pkt_copy, shift_sz );//force ip_hdr at 8-byte alignment address according to shift_sz.
70026 - _rtw_memcpy(pkt_copy->data, (pbuf + drvinfo_sz + RXDESC_SIZE), skb_len);
70027 - precvframe->u.hdr.rx_head = precvframe->u.hdr.rx_data = precvframe->u.hdr.rx_tail = pkt_copy->data;
70028 - precvframe->u.hdr.rx_end = pkt_copy->data + alloc_sz;
70029 + _rtw_memcpy(pkt_copy->data, (pbuf + pattrib->shift_sz + pattrib->drvinfo_sz + RXDESC_SIZE), skb_len);
70030 + precvframe->u.hdr.rx_data = precvframe->u.hdr.rx_tail = pkt_copy->data;
70031 +
70032 }
70033 else
70034 {
70035 - precvframe->u.hdr.pkt = skb_clone(pskb, GFP_ATOMIC);
70036 + precvframe->u.hdr.pkt = rtw_skb_clone(pskb);
70037 if(pkt_copy)
70038 {
70039 precvframe->u.hdr.rx_head = precvframe->u.hdr.rx_data = precvframe->u.hdr.rx_tail = pbuf;
70040 @@ -1214,7 +1145,8 @@ static int recvbuf2recvframe(_adapter *p
70041 }
70042 else
70043 {
70044 - DBG_8192C("recvbuf2recvframe: skb_clone fail\n");
70045 + DBG_8192C("recvbuf2recvframe: rtw_skb_clone fail\n");
70046 + rtw_free_recvframe(precvframe, pfree_recv_queue);
70047 goto _exit_recvbuf2recvframe;
70048 }
70049 }
70050 @@ -1238,13 +1170,30 @@ static int recvbuf2recvframe(_adapter *p
70051 }
70052 #endif
70053
70054 - //because the endian issue, driver avoid reference to the rxstat after calling update_recvframe_attrib_from_recvstat();
70055 - rtl8192cu_update_recvframe_attrib_from_recvstat(precvframe, prxstat);
70056 -
70057 +#ifdef CONFIG_CONCURRENT_MODE
70058 + if(rtw_buddy_adapter_up(padapter))
70059 + {
70060 + if(pre_recv_entry(precvframe, prxstat, pphy_info) != _SUCCESS)
70061 + {
70062 + RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("recvbuf2recvframe: recv_entry(precvframe) != _SUCCESS\n"));
70063 + }
70064 + }
70065 + else
70066 + {
70067 + rtl8192c_translate_rx_signal_stuff(precvframe, pphy_info);
70068 + if(rtw_recv_entry(precvframe) != _SUCCESS)
70069 + {
70070 + RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("recvbuf2recvframe: rtw_recv_entry(precvframe) != _SUCCESS\n"));
70071 + }
70072 + }
70073 +
70074 +#else
70075 + rtl8192c_translate_rx_signal_stuff(precvframe, pphy_info);
70076 if(rtw_recv_entry(precvframe) != _SUCCESS)
70077 {
70078 RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("recvbuf2recvframe: rtw_recv_entry(precvframe) != _SUCCESS\n"));
70079 }
70080 +#endif
70081
70082 pkt_cnt--;
70083 transfer_len -= pkt_offset;
70084 @@ -1273,7 +1222,7 @@ void rtl8192cu_recv_tasklet(void *priv)
70085 if ((padapter->bDriverStopped == _TRUE)||(padapter->bSurpriseRemoved== _TRUE))
70086 {
70087 DBG_8192C("recv_tasklet => bDriverStopped or bSurpriseRemoved \n");
70088 - dev_kfree_skb_any(pskb);
70089 + rtw_skb_free(pskb);
70090 break;
70091 }
70092
70093 @@ -1281,17 +1230,14 @@ void rtl8192cu_recv_tasklet(void *priv)
70094
70095 #ifdef CONFIG_PREALLOC_RECV_SKB
70096
70097 -#ifdef NET_SKBUFF_DATA_USES_OFFSET
70098 skb_reset_tail_pointer(pskb);
70099 -#else
70100 - pskb->tail = pskb->data;
70101 -#endif
70102 +
70103 pskb->len = 0;
70104
70105 skb_queue_tail(&precvpriv->free_recv_skb_queue, pskb);
70106
70107 #else
70108 - dev_kfree_skb_any(pskb);
70109 + rtw_skb_free(pskb);
70110 #endif
70111
70112 }
70113 @@ -1331,10 +1277,11 @@ static void usb_read_port_complete(struc
70114 #else
70115 if(precvbuf->pskb){
70116 DBG_8192C("==> free skb(%p)\n",precvbuf->pskb);
70117 - dev_kfree_skb_any(precvbuf->pskb);
70118 + rtw_skb_free(precvbuf->pskb);
70119 }
70120 #endif
70121 -
70122 + DBG_8192C("%s()-%d: RX Warning! bDriverStopped(%d) OR bSurpriseRemoved(%d) bReadPortCancel(%d)\n",
70123 + __FUNCTION__, __LINE__,padapter->bDriverStopped, padapter->bSurpriseRemoved,padapter->bReadPortCancel);
70124 goto exit;
70125 }
70126
70127 @@ -1345,10 +1292,11 @@ static void usb_read_port_complete(struc
70128 RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_read_port_complete: (purb->actual_length > MAX_RECVBUF_SZ) || (purb->actual_length < RXDESC_SIZE)\n"));
70129 precvbuf->reuse = _TRUE;
70130 rtw_read_port(padapter, precvpriv->ff_hwaddr, 0, (unsigned char *)precvbuf);
70131 + DBG_8192C("%s()-%d: RX Warning!\n", __FUNCTION__, __LINE__);
70132 }
70133 else
70134 {
70135 - rtw_reset_continual_urb_error(&padapter->dvobjpriv);
70136 + rtw_reset_continual_urb_error(adapter_to_dvobj(padapter));
70137
70138 precvbuf->transfer_len = purb->actual_length;
70139 skb_put(precvbuf->pskb, purb->actual_length);
70140 @@ -1368,7 +1316,7 @@ static void usb_read_port_complete(struc
70141
70142 DBG_8192C("###=> usb_read_port_complete => urb status(%d)\n", purb->status);
70143
70144 - if(rtw_inc_and_chk_continual_urb_error(&padapter->dvobjpriv) == _TRUE ){
70145 + if(rtw_inc_and_chk_continual_urb_error(adapter_to_dvobj(padapter)) == _TRUE ){
70146 padapter->bSurpriseRemoved = _TRUE;
70147 }
70148
70149 @@ -1384,6 +1332,10 @@ static void usb_read_port_complete(struc
70150 RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_read_port_complete:bDriverStopped=TRUE\n"));
70151 break;
70152 case -EPROTO:
70153 + case -EILSEQ:
70154 + case -ETIME:
70155 + case -ECOMM:
70156 + case -EOVERFLOW:
70157 #ifdef DBG_CONFIG_ERROR_DETECT
70158 {
70159 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
70160 @@ -1394,9 +1346,11 @@ static void usb_read_port_complete(struc
70161 rtw_read_port(padapter, precvpriv->ff_hwaddr, 0, (unsigned char *)precvbuf);
70162 break;
70163 case -EINPROGRESS:
70164 + precvpriv->read_port_complete_EINPROGRESS_cnt++;
70165 DBG_8192C("ERROR: URB IS IN PROGRESS!/n");
70166 break;
70167 default:
70168 + precvpriv->read_port_complete_other_urb_err_cnt++;
70169 break;
70170 }
70171
70172 @@ -1418,12 +1372,11 @@ static u32 usb_read_port(struct intf_hdl
70173 u32 ret = _SUCCESS;
70174 PURB purb = NULL;
70175 struct recv_buf *precvbuf = (struct recv_buf *)rmem;
70176 - struct dvobj_priv *pdvobj = (struct dvobj_priv *)pintfhdl->pintf_dev;
70177 - _adapter *adapter = (_adapter *)pdvobj->padapter;
70178 + _adapter *adapter = pintfhdl->padapter;
70179 + struct dvobj_priv *pdvobj = adapter_to_dvobj(adapter);
70180 struct recv_priv *precvpriv = &adapter->recvpriv;
70181 struct usb_device *pusbd = pdvobj->pusbdev;
70182
70183 -
70184 _func_enter_;
70185
70186 if(adapter->bDriverStopped || adapter->bSurpriseRemoved ||adapter->pwrctrlpriv.pnp_bstop_trx)
70187 @@ -1450,15 +1403,12 @@ _func_enter_;
70188 //re-assign for linux based on skb
70189 if((precvbuf->reuse == _FALSE) || (precvbuf->pskb == NULL))
70190 {
70191 - //precvbuf->pskb = alloc_skb(MAX_RECVBUF_SZ, GFP_ATOMIC);//don't use this after v2.6.25
70192 -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)) // http://www.mail-archive.com/netdev@vger.kernel.org/msg17214.html
70193 - precvbuf->pskb = dev_alloc_skb(MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);
70194 -#else
70195 - precvbuf->pskb = netdev_alloc_skb(adapter->pnetdev, MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);
70196 -#endif
70197 + precvbuf->pskb = rtw_skb_alloc(MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);
70198 +
70199 if(precvbuf->pskb == NULL)
70200 {
70201 RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("init_recvbuf(): alloc_skb fail!\n"));
70202 + precvpriv->recvbuf_skb_alloc_fail_cnt++;
70203 return _FAIL;
70204 }
70205
70206 @@ -1468,28 +1418,16 @@ _func_enter_;
70207
70208 precvbuf->phead = precvbuf->pskb->head;
70209 precvbuf->pdata = precvbuf->pskb->data;
70210 -
70211 -#ifdef NET_SKBUFF_DATA_USES_OFFSET
70212 - precvbuf->ptail = precvbuf->pskb->head + precvbuf->pskb->tail;
70213 - precvbuf->pend = precvbuf->ptail + (MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);
70214 -#else
70215 - precvbuf->ptail = precvbuf->pskb->tail;
70216 - precvbuf->pend = precvbuf->pskb->end;
70217 -#endif
70218 + precvbuf->ptail = skb_tail_pointer(precvbuf->pskb);
70219 + precvbuf->pend = skb_end_pointer(precvbuf->pskb);
70220 precvbuf->pbuf = precvbuf->pskb->data;
70221 }
70222 else//reuse skb
70223 {
70224 precvbuf->phead = precvbuf->pskb->head;
70225 precvbuf->pdata = precvbuf->pskb->data;
70226 -
70227 -#ifdef NET_SKBUFF_DATA_USES_OFFSET
70228 - precvbuf->ptail = precvbuf->pskb->head + precvbuf->pskb->tail;
70229 - precvbuf->pend = precvbuf->ptail + (MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);
70230 -#else
70231 - precvbuf->ptail = precvbuf->pskb->tail;
70232 - precvbuf->pend = precvbuf->pskb->end;
70233 -#endif
70234 + precvbuf->ptail = skb_tail_pointer(precvbuf->pskb);
70235 + precvbuf->pend = skb_end_pointer(precvbuf->pskb);
70236 precvbuf->pbuf = precvbuf->pskb->data;
70237
70238 precvbuf->reuse = _FALSE;
70239 @@ -1523,6 +1461,7 @@ _func_enter_;
70240 }
70241 else
70242 {
70243 + precvpriv->recvbuf_null_cnt++;
70244 RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_read_port:precvbuf ==NULL\n"));
70245 ret = _FAIL;
70246 }
70247 @@ -1533,34 +1472,6 @@ _func_exit_;
70248 }
70249 #endif // CONFIG_USE_USB_BUFFER_ALLOC_RX
70250
70251 -static void usb_read_port_cancel(struct intf_hdl *pintfhdl)
70252 -{
70253 - int i;
70254 - struct recv_buf *precvbuf;
70255 - _adapter *padapter = pintfhdl->padapter;
70256 - precvbuf = (struct recv_buf *)padapter->recvpriv.precv_buf;
70257 -
70258 - DBG_8192C("usb_read_port_cancel \n");
70259 -
70260 - padapter->bReadPortCancel = _TRUE;
70261 -
70262 - for(i=0; i < NR_RECVBUFF ; i++)
70263 - {
70264 - precvbuf->reuse = _TRUE;
70265 - if(precvbuf->purb)
70266 - {
70267 - //DBG_8192C("usb_read_port_cancel : usb_kill_urb \n");
70268 - usb_kill_urb(precvbuf->purb);
70269 - }
70270 -
70271 - precvbuf++;
70272 - }
70273 -
70274 -#ifdef CONFIG_USB_INTERRUPT_IN_PIPE
70275 - usb_kill_urb(padapter->recvpriv.int_in_urb);
70276 -#endif
70277 -}
70278 -
70279 void rtl8192cu_xmit_tasklet(void *priv)
70280 {
70281 int ret = _FALSE;
70282 @@ -1587,425 +1498,6 @@ void rtl8192cu_xmit_tasklet(void *priv)
70283
70284 }
70285
70286 -static void usb_write_port_complete(struct urb *purb, struct pt_regs *regs)
70287 -{
70288 - _irqL irqL;
70289 - int i;
70290 - struct xmit_buf *pxmitbuf = (struct xmit_buf *)purb->context;
70291 - //struct xmit_frame *pxmitframe = (struct xmit_frame *)pxmitbuf->priv_data;
70292 - //_adapter *padapter = pxmitframe->padapter;
70293 - _adapter *padapter = pxmitbuf->padapter;
70294 - struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
70295 - //struct pkt_attrib *pattrib = &pxmitframe->attrib;
70296 -
70297 -_func_enter_;
70298 -
70299 - RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("+usb_write_port_complete\n"));
70300 -
70301 -
70302 - switch(pxmitbuf->flags)
70303 - {
70304 - case XMIT_VO_QUEUE:
70305 - pxmitpriv->voq_cnt--;
70306 - break;
70307 - case XMIT_VI_QUEUE:
70308 - pxmitpriv->viq_cnt--;
70309 - break;
70310 - case XMIT_BE_QUEUE:
70311 - pxmitpriv->beq_cnt--;
70312 - break;
70313 - case XMIT_BK_QUEUE:
70314 - pxmitpriv->bkq_cnt--;
70315 - break;
70316 - case HIGH_QUEUE_INX:
70317 -#ifdef CONFIG_AP_MODE
70318 - rtw_chk_hi_queue_cmd(padapter);
70319 -#endif
70320 - break;
70321 - default:
70322 - break;
70323 - }
70324 -
70325 -
70326 -/*
70327 - _enter_critical(&pxmitpriv->lock, &irqL);
70328 -
70329 - pxmitpriv->txirp_cnt--;
70330 -
70331 - switch(pattrib->priority)
70332 - {
70333 - case 1:
70334 - case 2:
70335 - pxmitpriv->bkq_cnt--;
70336 - //DBG_8192C("pxmitpriv->bkq_cnt=%d\n", pxmitpriv->bkq_cnt);
70337 - break;
70338 - case 4:
70339 - case 5:
70340 - pxmitpriv->viq_cnt--;
70341 - //DBG_8192C("pxmitpriv->viq_cnt=%d\n", pxmitpriv->viq_cnt);
70342 - break;
70343 - case 6:
70344 - case 7:
70345 - pxmitpriv->voq_cnt--;
70346 - //DBG_8192C("pxmitpriv->voq_cnt=%d\n", pxmitpriv->voq_cnt);
70347 - break;
70348 - case 0:
70349 - case 3:
70350 - default:
70351 - pxmitpriv->beq_cnt--;
70352 - //DBG_8192C("pxmitpriv->beq_cnt=%d\n", pxmitpriv->beq_cnt);
70353 - break;
70354 -
70355 - }
70356 -
70357 - _exit_critical(&pxmitpriv->lock, &irqL);
70358 -
70359 -
70360 - if(pxmitpriv->txirp_cnt==0)
70361 - {
70362 - RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete: txirp_cnt== 0, set allrxreturnevt!\n"));
70363 - _rtw_up_sema(&(pxmitpriv->tx_retevt));
70364 - }
70365 -*/
70366 - //rtw_free_xmitframe_ex(pxmitpriv, pxmitframe);
70367 -
70368 - if(padapter->bSurpriseRemoved || padapter->bDriverStopped ||padapter->bWritePortCancel)
70369 - {
70370 - RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete:bDriverStopped(%d) OR bSurpriseRemoved(%d)", padapter->bDriverStopped, padapter->bSurpriseRemoved));
70371 - goto check_completion;
70372 - }
70373 -
70374 -
70375 - if(purb->status==0)
70376 - {
70377 -
70378 - }
70379 - else
70380 - {
70381 - RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete : purb->status(%d) != 0 \n", purb->status));
70382 - DBG_8192C("###=> urb_write_port_complete status(%d)\n",purb->status);
70383 - if((purb->status==-EPIPE)||(purb->status==-EPROTO))
70384 - {
70385 - //usb_clear_halt(pusbdev, purb->pipe);
70386 - //msleep(10);
70387 - #ifdef DBG_CONFIG_ERROR_DETECT
70388 - {
70389 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
70390 - pHalData->srestpriv.Wifi_Error_Status = USB_WRITE_PORT_FAIL;
70391 - }
70392 - #endif
70393 - }
70394 - else if(purb->status == -EINPROGRESS)
70395 - {
70396 - RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete: EINPROGESS\n"));
70397 - }
70398 - else if(purb->status == (-ESHUTDOWN))
70399 - {
70400 - RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete: ESHUTDOWN\n"));
70401 -
70402 - padapter->bDriverStopped=_TRUE;
70403 -
70404 - RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete:bDriverStopped=TRUE\n"));
70405 -
70406 - goto check_completion;
70407 - }
70408 - else
70409 - {
70410 - padapter->bSurpriseRemoved=_TRUE;
70411 - DBG_8192C("bSurpriseRemoved=TRUE\n");
70412 - //rtl8192cu_trigger_gpio_0(padapter);
70413 - RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete:bSurpriseRemoved=TRUE\n"));
70414 -
70415 - goto check_completion;
70416 - }
70417 -
70418 -
70419 -
70420 - }
70421 -
70422 - #ifdef DBG_CONFIG_ERROR_DETECT
70423 - {
70424 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
70425 - pHalData->srestpriv.last_tx_complete_time = rtw_get_current_time();
70426 - }
70427 - #endif
70428 -
70429 -check_completion:
70430 - if(pxmitbuf->isSync) {
70431 - pxmitbuf->status = purb->status;
70432 - complete(&pxmitbuf->done);
70433 - }
70434 -
70435 - rtw_free_xmitbuf(pxmitpriv, pxmitbuf);
70436 -
70437 - //if(rtw_txframes_pending(padapter))
70438 - {
70439 - tasklet_hi_schedule(&pxmitpriv->xmit_tasklet);
70440 - }
70441 -
70442 -
70443 - RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("-usb_write_port_complete\n"));
70444 -_func_exit_;
70445 -
70446 -}
70447 -
70448 -static u32 usb_write_port(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem, int timeout_ms)
70449 -{
70450 - _irqL irqL;
70451 - unsigned int pipe;
70452 - int status;
70453 - u32 ret, bwritezero = _FALSE;
70454 - PURB purb = NULL;
70455 - _adapter *padapter = (_adapter *)pintfhdl->padapter;
70456 - struct dvobj_priv *pdvobj = (struct dvobj_priv *)&padapter->dvobjpriv;
70457 - struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
70458 - struct xmit_buf *pxmitbuf = (struct xmit_buf *)wmem;
70459 - struct xmit_frame *pxmitframe = (struct xmit_frame *)pxmitbuf->priv_data;
70460 - struct usb_device *pusbd = pdvobj->pusbdev;
70461 - struct pkt_attrib *pattrib = &pxmitframe->attrib;
70462 -
70463 -_func_enter_;
70464 -
70465 - RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("+usb_write_port\n"));
70466 -
70467 - if((padapter->bDriverStopped) || (padapter->bSurpriseRemoved) ||(padapter->pwrctrlpriv.pnp_bstop_trx))
70468 - {
70469 - #ifdef DBG_TX
70470 - DBG_871X(" DBG_TX %s:%d bDriverStopped%d, bSurpriseRemoved:%d, pnp_bstop_trx:%d\n",__FUNCTION__, __LINE__
70471 - ,padapter->bDriverStopped, padapter->bSurpriseRemoved, padapter->pwrctrlpriv.pnp_bstop_trx );
70472 - #endif
70473 -
70474 - rtw_free_xmitbuf(pxmitpriv, pxmitbuf);
70475 -
70476 - RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port:( padapter->bDriverStopped ||padapter->bSurpriseRemoved ||adapter->pwrctrlpriv.pnp_bstop_trx)!!!\n"));
70477 - return _FAIL;
70478 - }
70479 -
70480 - _enter_critical(&pxmitpriv->lock, &irqL);
70481 -
70482 - switch(addr)
70483 - {
70484 - case VO_QUEUE_INX:
70485 - pxmitpriv->voq_cnt++;
70486 - pxmitbuf->flags = XMIT_VO_QUEUE;
70487 - break;
70488 - case VI_QUEUE_INX:
70489 - pxmitpriv->viq_cnt++;
70490 - pxmitbuf->flags = XMIT_VI_QUEUE;
70491 - break;
70492 - case BE_QUEUE_INX:
70493 - pxmitpriv->beq_cnt++;
70494 - pxmitbuf->flags = XMIT_BE_QUEUE;
70495 - break;
70496 - case BK_QUEUE_INX:
70497 - pxmitpriv->bkq_cnt++;
70498 - pxmitbuf->flags = XMIT_BK_QUEUE;
70499 - break;
70500 - case HIGH_QUEUE_INX:
70501 - pxmitbuf->flags = HIGH_QUEUE_INX;
70502 - break;
70503 - default:
70504 - pxmitbuf->flags = XMIT_VO_QUEUE;
70505 - break;
70506 - }
70507 -
70508 - _exit_critical(&pxmitpriv->lock, &irqL);
70509 -
70510 -/*
70511 - _enter_critical(&pxmitpriv->lock, &irqL);
70512 -
70513 - //total irp
70514 - pxmitpriv->txirp_cnt++;
70515 -
70516 - //per ac irp
70517 - switch(pattrib->priority)
70518 - {
70519 - case 1:
70520 - case 2:
70521 - pxmitpriv->bkq_cnt++;
70522 - break;
70523 - case 4:
70524 - case 5:
70525 - pxmitpriv->viq_cnt++;
70526 - break;
70527 - case 6:
70528 - case 7:
70529 - pxmitpriv->voq_cnt++;
70530 - break;
70531 - case 0:
70532 - case 3:
70533 - default:
70534 - pxmitpriv->beq_cnt++;
70535 - break;
70536 - }
70537 -
70538 -
70539 - _exit_critical(&pxmitpriv->lock, &irqL);
70540 -*/
70541 -
70542 - purb = pxmitbuf->pxmit_urb[0];
70543 -
70544 -#if 0
70545 - if(pdvobj->ishighspeed)
70546 - {
70547 - if(cnt> 0 && cnt%512 == 0)
70548 - {
70549 - //DBG_8192C("ishighspeed, cnt=%d\n", cnt);
70550 - bwritezero = _TRUE;
70551 - }
70552 - }
70553 - else
70554 - {
70555 - if(cnt > 0 && cnt%64 == 0)
70556 - {
70557 - //DBG_8192C("cnt=%d\n", cnt);
70558 - bwritezero = _TRUE;
70559 - }
70560 - }
70561 -#endif
70562 -
70563 - //translate DMA FIFO addr to pipehandle
70564 - pipe = ffaddr2pipehdl(pdvobj, addr);
70565 -
70566 -#ifdef CONFIG_REDUCE_USB_TX_INT
70567 - if ( pxmitpriv->free_xmitbuf_cnt%NR_XMITBUFF == 0
70568 - || pxmitbuf->ext_tag )
70569 - {
70570 - purb->transfer_flags &= (~URB_NO_INTERRUPT);
70571 - } else {
70572 - purb->transfer_flags |= URB_NO_INTERRUPT;
70573 - //DBG_8192C("URB_NO_INTERRUPT ");
70574 - }
70575 -#endif
70576 -
70577 -
70578 - usb_fill_bulk_urb(purb, pusbd, pipe,
70579 - pxmitframe->buf_addr, //= pxmitbuf->pbuf
70580 - cnt,
70581 - usb_write_port_complete,
70582 - pxmitbuf);//context is pxmitbuf
70583 -
70584 -#ifdef CONFIG_USE_USB_BUFFER_ALLOC_TX
70585 - purb->transfer_dma = pxmitbuf->dma_transfer_addr;
70586 - purb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
70587 - purb->transfer_flags |= URB_ZERO_PACKET;
70588 -#endif // CONFIG_USE_USB_BUFFER_ALLOC_TX
70589 -
70590 -#if 0
70591 - if (bwritezero)
70592 - {
70593 - purb->transfer_flags |= URB_ZERO_PACKET;
70594 - }
70595 -#endif
70596 -
70597 - status = usb_submit_urb(purb, GFP_ATOMIC);
70598 -
70599 - if (!status)
70600 - {
70601 - ret= _SUCCESS;
70602 - #ifdef DBG_CONFIG_ERROR_DETECT
70603 - {
70604 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
70605 - pHalData->srestpriv.last_tx_time = rtw_get_current_time();
70606 - }
70607 - #endif
70608 - }
70609 - else
70610 - {
70611 - DBG_8192C("usb_write_port, status=%d\n", status);
70612 - RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port(): usb_submit_urb, status=%x\n", status));
70613 - ret= _FAIL;
70614 - }
70615 -
70616 -// Commented by Albert 2009/10/13
70617 -// We add the URB_ZERO_PACKET flag to urb so that the host will send the zero packet automatically.
70618 -/*
70619 - if(bwritezero == _TRUE)
70620 - {
70621 - usb_bulkout_zero(pintfhdl, addr);
70622 - }
70623 -*/
70624 -
70625 - // synchronous write handling
70626 - if(timeout_ms >= 0) {
70627 - unsigned long expire = timeout_ms ? msecs_to_jiffies(timeout_ms) : MAX_SCHEDULE_TIMEOUT;
70628 - int status;
70629 - init_completion(&pxmitbuf->done);
70630 - pxmitbuf->isSync = _TRUE;
70631 - pxmitbuf->status = 0;
70632 -
70633 - if (!wait_for_completion_timeout(&pxmitbuf->done, expire)) {
70634 - usb_kill_urb(purb);
70635 - status = (pxmitbuf->status == -ENOENT ? -ETIMEDOUT : pxmitbuf->status);
70636 - } else
70637 - status = pxmitbuf->status;
70638 -
70639 - if (!status) {
70640 - ret= _SUCCESS;
70641 - } else {
70642 - DBG_8192C("usb_write_port sync, status=%d\n", status);
70643 - ret = _FAIL;
70644 - }
70645 - }
70646 -
70647 -
70648 - RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("-usb_write_port\n"));
70649 -
70650 -_func_exit_;
70651 -
70652 - return ret;
70653 -
70654 -}
70655 -
70656 -static inline u32 usb_write_port_async(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem)
70657 -{
70658 - return usb_write_port(pintfhdl, addr, cnt, wmem, -1);
70659 -}
70660 -
70661 -static inline int usb_write_port_sync(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem)
70662 -{
70663 - return usb_write_port(pintfhdl, addr, cnt, wmem, RTW_USB_BULKOUT_TIMEOUT);
70664 -}
70665 -
70666 -static void usb_write_port_cancel(struct intf_hdl *pintfhdl)
70667 -{
70668 - int i, j;
70669 - _adapter *padapter = pintfhdl->padapter;
70670 - struct xmit_buf *pxmitbuf = (struct xmit_buf *)padapter->xmitpriv.pxmitbuf;
70671 -
70672 - DBG_8192C("usb_write_port_cancel \n");
70673 -
70674 - padapter->bWritePortCancel = _TRUE;
70675 -
70676 - for(i=0; i<NR_XMITBUFF; i++)
70677 - {
70678 - for(j=0; j<8; j++)
70679 - {
70680 - if(pxmitbuf->pxmit_urb[j])
70681 - {
70682 - usb_kill_urb(pxmitbuf->pxmit_urb[j]);
70683 - }
70684 - }
70685 -
70686 - pxmitbuf++;
70687 - }
70688 - pxmitbuf = (struct xmit_buf*)padapter->xmitpriv.pxmit_extbuf;
70689 -
70690 - for (i = 0; i < NR_XMIT_EXTBUFF; i++)
70691 - {
70692 - for(j=0; j<8; j++)
70693 - {
70694 - if(pxmitbuf->pxmit_urb[j])
70695 - {
70696 - usb_kill_urb(pxmitbuf->pxmit_urb[j]);
70697 - }
70698 - }
70699 -
70700 - pxmitbuf++;
70701 - }
70702 -
70703 -}
70704 -
70705 void rtl8192cu_set_intf_ops(struct _io_ops *pops)
70706 {
70707 _func_enter_;
70708 @@ -2029,8 +1521,7 @@ void rtl8192cu_set_intf_ops(struct _io_o
70709 pops->_write32_async = &usb_async_write32;
70710 #endif
70711 pops->_write_mem = &usb_write_mem;
70712 - pops->_write_port = &usb_write_port_async;
70713 - pops->_write_port_sync = &usb_write_port_sync;
70714 + pops->_write_port = &usb_write_port;
70715
70716 pops->_read_port_cancel = &usb_read_port_cancel;
70717 pops->_write_port_cancel = &usb_write_port_cancel;
70718 --- a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_xp.c
70719 +++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_xp.c
70720 @@ -16,8 +16,7 @@
70721 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
70722 *
70723 *
70724 -
70725 -******************************************************************************/
70726 + ******************************************************************************/
70727 #define _HCI_OPS_OS_C_
70728
70729 #include <drv_conf.h>
70730 @@ -884,7 +883,7 @@ _func_enter_;
70731 if(pxmitframe !=NULL)
70732 {
70733 RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("\n usb_write_port_complete:pIrp->Cancel == _TRUE,(pxmitframe !=NULL\n"));
70734 - rtw_free_xmitframe_ex(pxmitpriv, pxmitframe);
70735 + rtw_free_xmitframe(pxmitpriv, pxmitframe);
70736 }
70737
70738 return STATUS_MORE_PROCESSING_REQUIRED;
70739 @@ -930,7 +929,7 @@ _func_enter_;
70740 #else
70741
70742 //not to consider tx fragment
70743 - rtw_free_xmitframe_ex(pxmitpriv, pxmitframe);
70744 + rtw_free_xmitframe(pxmitpriv, pxmitframe);
70745
70746 #endif
70747
70748 --- a/drivers/net/wireless/rtl8192cu/include/Hal8192CEHWImg.h
70749 +++ b/drivers/net/wireless/rtl8192cu/include/Hal8192CEHWImg.h
70750 @@ -25,26 +25,29 @@
70751 /*Created on 2011/ 6/15, 5:45*/
70752
70753 #ifdef CONFIG_BT_COEXISTENCE
70754 -#define TSMCImgArrayLength 16248 //v79 TSMC COMMON 2011-10-06
70755 +#define TSMCImgArrayLength 15706 //v84 TSMC COMMON 2012-04-13
70756 #else //#ifdef CONFIG_P2P
70757 -#define TSMCImgArrayLength 16404 //v79 TSMC P2PPS 2011-10-06
70758 +#define TSMCImgArrayLength 16126 //v88 TSMC P2PPS with CCX report C2H 2012-12-05
70759 #endif
70760 extern u8 Rtl8192CEFwTSMCImgArray[TSMCImgArrayLength];
70761
70762 #ifdef CONFIG_BT_COEXISTENCE
70763 #define UMCACutImgArrayLength 16248 //v79 UMC A Cut COMMON 2011-10-06
70764 #else //#ifdef CONFIG_P2P
70765 -#define UMCACutImgArrayLength 16404 //v79 UMC A Cut P2PPS 2011-10-06
70766 +#define UMCACutImgArrayLength 16126 //v88 UMC A Cut P2PPS with CCX report C2H 2012-12-05
70767 #endif
70768 extern u8 Rtl8192CEFwUMCACutImgArray[UMCACutImgArrayLength];
70769
70770 #ifdef CONFIG_BT_COEXISTENCE
70771 -#define UMCBCutImgArrayLength 16254 //v79 UMC B Cut COMMON 2011-10-06
70772 +#define UMCBCutImgArrayLength 15686 //v84 UMC B Cut COMMON 2012-04-13
70773 #else //#ifdef CONFIG_P2P
70774 -#define UMCBCutImgArrayLength 16386 //v79 UMC B Cut P2PPS 2011-10-06
70775 +#define UMCBCutImgArrayLength 16096 //v88 UMC B Cut P2PPS with CCX report C2H 2012-12-05
70776 #endif
70777 extern u8 Rtl8192CEFwUMCBCutImgArray[UMCBCutImgArrayLength];
70778
70779 +//8192C_Formal_92CE_PHYforMP_110804 2011-11-23
70780 +//8188C_Formal_88CE_PHYforMP_111117 2011-11-23
70781 +
70782 #define PHY_REG_2TArrayLength 374
70783 extern u32 Rtl8192CEPHY_REG_2TArray[PHY_REG_2TArrayLength];
70784 #define PHY_REG_1TArrayLength 374
70785 @@ -69,7 +72,8 @@ extern u32 Rtl8192CERadioA_1TArray[Radio
70786 extern u32 Rtl8192CERadioB_1TArray[RadioB_1TArrayLength];
70787 #define RadioB_GM_ArrayLength 1
70788 extern u32 Rtl8192CERadioB_GM_Array[RadioB_GM_ArrayLength];
70789 -#define MAC_2T_ArrayLength 172
70790 +// MAC reg V14 - 2011-11-23
70791 +#define MAC_2T_ArrayLength 174
70792 extern u32 Rtl8192CEMAC_2T_Array[MAC_2T_ArrayLength];
70793 #define MACPHY_Array_PGLength 1
70794 extern u32 Rtl8192CEMACPHY_Array_PG[MACPHY_Array_PGLength];
70795 --- a/drivers/net/wireless/rtl8192cu/include/Hal8192CPhyCfg.h
70796 +++ b/drivers/net/wireless/rtl8192cu/include/Hal8192CPhyCfg.h
70797 @@ -111,15 +111,7 @@ typedef enum _HW90_BLOCK{
70798 HW90_BLOCK_MAXIMUM = 4, // Never use this
70799 }HW90_BLOCK_E, *PHW90_BLOCK_E;
70800
70801 -typedef enum _RF90_RADIO_PATH{
70802 - RF90_PATH_A = 0, //Radio Path A
70803 - RF90_PATH_B = 1, //Radio Path B
70804 - RF90_PATH_C = 2, //Radio Path C
70805 - RF90_PATH_D = 3, //Radio Path D
70806 - //RF90_PATH_MAX //Max RF number 90 support
70807 -}RF90_RADIO_PATH_E, *PRF90_RADIO_PATH_E;
70808 -
70809 -#define RF90_PATH_MAX 2
70810 +#define RF_PATH_MAX 2
70811
70812 #define CHANNEL_MAX_NUMBER 14 // 14 is the max channel number
70813 #define CHANNEL_GROUP_MAX 3 // ch1~3, ch4~9, ch10~14 total three groups
70814 @@ -163,19 +155,6 @@ typedef enum _RF_TYPE_8190P{
70815 RF_PSEUDO_11N=5, // 5, It is a temporality RF.
70816 }RF_TYPE_8190P_E,*PRF_TYPE_8190P_E;
70817
70818 -
70819 -typedef enum _RATR_TABLE_MODE_8192C{
70820 - RATR_INX_WIRELESS_NGB = 0,
70821 - RATR_INX_WIRELESS_NG = 1,
70822 - RATR_INX_WIRELESS_NB = 2,
70823 - RATR_INX_WIRELESS_N = 3,
70824 - RATR_INX_WIRELESS_GB = 4,
70825 - RATR_INX_WIRELESS_G = 5,
70826 - RATR_INX_WIRELESS_B = 6,
70827 - RATR_INX_WIRELESS_MC = 7,
70828 - RATR_INX_WIRELESS_A = 8,
70829 -}RATR_TABLE_MODE_8192C, *PRATR_TABLE_MODE_8192C;
70830 -
70831 typedef struct _BB_REGISTER_DEFINITION{
70832 u32 rfintfs; // set software control:
70833 // 0x870~0x877[8 bytes]
70834 @@ -294,11 +273,11 @@ void rtl8192c_PHY_SetBBReg( IN PADAPTER
70835 IN u32 BitMask,
70836 IN u32 Data );
70837 u32 rtl8192c_PHY_QueryRFReg( IN PADAPTER Adapter,
70838 - IN RF90_RADIO_PATH_E eRFPath,
70839 + IN RF_RADIO_PATH_E eRFPath,
70840 IN u32 RegAddr,
70841 IN u32 BitMask );
70842 void rtl8192c_PHY_SetRFReg( IN PADAPTER Adapter,
70843 - IN RF90_RADIO_PATH_E eRFPath,
70844 + IN RF_RADIO_PATH_E eRFPath,
70845 IN u32 RegAddr,
70846 IN u32 BitMask,
70847 IN u32 Data );
70848 @@ -313,14 +292,14 @@ int PHY_RFConfig8192C( IN PADAPTER Adapt
70849 /* RF config */
70850 int rtl8192c_PHY_ConfigRFWithParaFile( IN PADAPTER Adapter,
70851 IN u8* pFileName,
70852 - IN RF90_RADIO_PATH_E eRFPath);
70853 + IN RF_RADIO_PATH_E eRFPath);
70854 int rtl8192c_PHY_ConfigRFWithHeaderFile( IN PADAPTER Adapter,
70855 - IN RF90_RADIO_PATH_E eRFPath);
70856 + IN RF_RADIO_PATH_E eRFPath);
70857
70858 /* BB/RF readback check for making sure init OK */
70859 int rtl8192c_PHY_CheckBBAndRFOK( IN PADAPTER Adapter,
70860 IN HW90_BLOCK_E CheckBlock,
70861 - IN RF90_RADIO_PATH_E eRFPath );
70862 + IN RF_RADIO_PATH_E eRFPath );
70863 /* Read initi reg value for tx power setting. */
70864 void rtl8192c_PHY_GetHWRegOriginalValue( IN PADAPTER Adapter );
70865
70866 @@ -409,8 +388,6 @@ VOID rtl8192c_PHY_LCCalibrate(IN PADAPTE
70867 //
70868 VOID rtl8192c_PHY_APCalibrate(IN PADAPTER pAdapter, IN char delta);
70869
70870 -VOID rtl8192c_PHY_DigitalPredistortion(IN PADAPTER pAdapter);
70871 -
70872 VOID rtl8192c_PHY_SetRFPathSwitch(IN PADAPTER pAdapter, IN BOOLEAN bMain);
70873
70874 //
70875 --- a/drivers/net/wireless/rtl8192cu/include/Hal8192CPhyReg.h
70876 +++ b/drivers/net/wireless/rtl8192cu/include/Hal8192CPhyReg.h
70877 @@ -197,6 +197,19 @@
70878 #define rCCK0_FACounterUpper 0xa58 //0xa5c
70879
70880 //
70881 +// PageB(0xB00)
70882 +//
70883 +#define rPdp_AntA 0xb00
70884 +#define rPdp_AntA_4 0xb04
70885 +#define rConfig_Pmpd_AntA 0xb28
70886 +#define rConfig_AntA 0xb68
70887 +#define rConfig_AntB 0xb6c
70888 +#define rPdp_AntB 0xb70
70889 +#define rPdp_AntB_4 0xb74
70890 +#define rConfig_Pmpd_AntB 0xb98
70891 +#define rAPK 0xbd8
70892 +
70893 +//
70894 // 6. PageC(0xC00)
70895 //
70896 #define rOFDM0_LSTF 0xc00
70897 @@ -390,12 +403,20 @@
70898
70899 #define RF_IQADJ_G1 0x01 //
70900 #define RF_IQADJ_G2 0x02 //
70901 +#define RF_BS_PA_APSET_G1_G4 0x03
70902 +#define RF_BS_PA_APSET_G5_G8 0x04
70903 #define RF_POW_TRSW 0x05 //
70904
70905 #define RF_GAIN_RX 0x06 //
70906 #define RF_GAIN_TX 0x07 //
70907
70908 #define RF_TXM_IDAC 0x08 //
70909 +#define RF_IPA_G 0x09 //
70910 +#define RF_TXBIAS_G 0x0A
70911 +#define RF_TXPA_AG 0x0B
70912 +#define RF_IPA_A 0x0C //
70913 +#define RF_TXBIAS_A 0x0D
70914 +#define RF_BS_PA_APSET_G9_G11 0x0E
70915 #define RF_BS_IQGEN 0x0F //
70916
70917 #define RF_MODE1 0x10 //
70918 --- a/drivers/net/wireless/rtl8192cu/include/Hal8192CUHWImg.h
70919 +++ b/drivers/net/wireless/rtl8192cu/include/Hal8192CUHWImg.h
70920 @@ -20,31 +20,31 @@
70921 #ifndef __INC_HAL8192CU_FW_IMG_H
70922 #define __INC_HAL8192CU_FW_IMG_H
70923
70924 -/*Created on 2011/12/14, 8:38*/
70925 +/*Created on 2011/ 6/15, 5:45*/
70926
70927 #ifdef CONFIG_BT_COEXISTENCE
70928 -#define TSMCImgArrayLength 16248 //v79 TSMC COMMON 2011-10-06
70929 -#else
70930 -#define TSMCImgArrayLength 16116 //v80 TSMC P2PPS 2011-12-14
70931 +#define TSMCImgArrayLength 15706 //v84 TSMC COMMON 2012-04-13
70932 +#else //#ifdef CONFIG_P2P
70933 +#define TSMCImgArrayLength 16126 //v88 TSMC P2PPS with CCX report C2H 2012-12-05
70934 #endif
70935 extern u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayLength];
70936
70937 #ifdef CONFIG_BT_COEXISTENCE
70938 #define UMCACutImgArrayLength 16248 //v79 UMC A Cut COMMON 2011-10-06
70939 #else //#ifdef CONFIG_P2P
70940 -#define UMCACutImgArrayLength 16116 //v80 UMC A Cut P2PPS 2011-12-14
70941 +#define UMCACutImgArrayLength 16126 //v88 UMC A Cut P2PPS with CCX report C2H 2012-12-05
70942 #endif
70943 extern u8 Rtl8192CUFwUMCACutImgArray[UMCACutImgArrayLength];
70944
70945 #ifdef CONFIG_BT_COEXISTENCE
70946 -#define UMCBCutImgArrayLength 16254 //v79 UMC B Cut COMMON 2011-10-06
70947 +#define UMCBCutImgArrayLength 15686 //v84 UMC B Cut COMMON 2012-04-13
70948 #else //#ifdef CONFIG_P2P
70949 -#define UMCBCutImgArrayLength 16096 //v80 UMC B Cut P2PPS 2011-12-14
70950 +#define UMCBCutImgArrayLength 16096 //v88 UMC B Cut P2PPS with CCX report C2H 2012-12-05
70951 #endif
70952 extern u8 Rtl8192CUFwUMCBCutImgArray[UMCBCutImgArrayLength];
70953
70954 -#define UMC8723ImgArrayLength 16288
70955 -extern u8 Rtl8192CUFwUMC8723ImgArray[UMC8723ImgArrayLength];
70956 +//8188C_Formal_All_PHYforMP_111117 2011-11-23
70957 +//8192C_Formal_92CU_PHYforMP_110817 2011-11-23
70958 #define PHY_REG_2TArrayLength 374
70959 extern u32 Rtl8192CUPHY_REG_2TArray[PHY_REG_2TArrayLength];
70960 #define PHY_REG_1TArrayLength 374
70961 @@ -77,6 +77,10 @@ extern u32 Rtl8192CURadioB_2TArray[Radio
70962 extern u32 Rtl8192CURadioA_1TArray[RadioA_1TArrayLength];
70963 #define RadioB_1TArrayLength 1
70964 extern u32 Rtl8192CURadioB_1TArray[RadioB_1TArrayLength];
70965 +#define RadioA_2T_mCardArrayLength 282
70966 +extern u32 Rtl8192CURadioA_2T_mCardArray[RadioA_2T_mCardArrayLength];
70967 +#define RadioB_2T_mCardArrayLength 78
70968 +extern u32 Rtl8192CURadioB_2T_mCardArray[RadioB_2T_mCardArrayLength];
70969 #define RadioA_1T_mCardArrayLength 282
70970 extern u32 Rtl8192CURadioA_1T_mCardArray[RadioA_1T_mCardArrayLength];
70971 #define RadioB_1T_mCardArrayLength 1
70972 @@ -85,7 +89,9 @@ extern u32 Rtl8192CURadioB_1T_mCardArray
70973 extern u32 Rtl8192CURadioA_1T_HPArray[RadioA_1T_HPArrayLength];
70974 #define RadioB_GM_ArrayLength 1
70975 extern u32 Rtl8192CURadioB_GM_Array[RadioB_GM_ArrayLength];
70976 -#define MAC_2T_ArrayLength 172
70977 +
70978 +// MAC reg V14 - 2011-11-23
70979 +#define MAC_2T_ArrayLength 174
70980 extern u32 Rtl8192CUMAC_2T_Array[MAC_2T_ArrayLength];
70981 #define MACPHY_Array_PGLength 1
70982 extern u32 Rtl8192CUMACPHY_Array_PG[MACPHY_Array_PGLength];
70983 --- a/drivers/net/wireless/rtl8192cu/include/Hal8192DEHWImg.h
70984 +++ b/drivers/net/wireless/rtl8192cu/include/Hal8192DEHWImg.h
70985 @@ -17,50 +17,50 @@
70986 *
70987 *
70988 ******************************************************************************/
70989 -#ifndef __INC_HAL8192DU_FW_IMG_H
70990 -#define __INC_HAL8192DU_FW_IMG_H
70991 +#ifndef __INC_HAL8192DE_FW_IMG_H
70992 +#define __INC_HAL8192DE_FW_IMG_H
70993
70994 #include <basic_types.h>
70995
70996 -/*Created on 2011/ 8/ 8, 1:41*/
70997 +/*Created on 2011/11/11, 8: 8*/
70998
70999 -#define ImgArrayLength 29642
71000 -extern u8 Rtl8192DEFwImgArray[ImgArrayLength];
71001 -#define MainArrayLength 1
71002 -extern u8 Rtl8192DEFwMainArray[MainArrayLength];
71003 -#define DataArrayLength 1
71004 -extern u8 Rtl8192DEFwDataArray[DataArrayLength];
71005 -#define PHY_REG_2TArrayLength 380
71006 -extern u32 Rtl8192DEPHY_REG_2TArray[PHY_REG_2TArrayLength];
71007 -#define PHY_REG_1TArrayLength 1
71008 -extern u32 Rtl8192DEPHY_REG_1TArray[PHY_REG_1TArrayLength];
71009 -#define PHY_REG_Array_PGLength 624
71010 -extern u32 Rtl8192DEPHY_REG_Array_PG[PHY_REG_Array_PGLength];
71011 -#define PHY_REG_Array_MPLength 10
71012 -extern u32 Rtl8192DEPHY_REG_Array_MP[PHY_REG_Array_MPLength];
71013 -#define RadioA_2TArrayLength 378
71014 -extern u32 Rtl8192DERadioA_2TArray[RadioA_2TArrayLength];
71015 -#define RadioB_2TArrayLength 384
71016 -extern u32 Rtl8192DERadioB_2TArray[RadioB_2TArrayLength];
71017 -#define RadioA_1TArrayLength 1
71018 -extern u32 Rtl8192DERadioA_1TArray[RadioA_1TArrayLength];
71019 -#define RadioB_1TArrayLength 1
71020 -extern u32 Rtl8192DERadioB_1TArray[RadioB_1TArrayLength];
71021 -#define RadioA_2T_intPAArrayLength 378
71022 -extern u32 Rtl8192DERadioA_2T_intPAArray[RadioA_2T_intPAArrayLength];
71023 -#define RadioB_2T_intPAArrayLength 384
71024 -extern u32 Rtl8192DERadioB_2T_intPAArray[RadioB_2T_intPAArrayLength];
71025 -#define MAC_2TArrayLength 160
71026 -extern u32 Rtl8192DEMAC_2TArray[MAC_2TArrayLength];
71027 -#define AGCTAB_ArrayLength 386
71028 -extern u32 Rtl8192DEAGCTAB_Array[AGCTAB_ArrayLength];
71029 -#define AGCTAB_5GArrayLength 194
71030 -extern u32 Rtl8192DEAGCTAB_5GArray[AGCTAB_5GArrayLength];
71031 -#define AGCTAB_2GArrayLength 194
71032 -extern u32 Rtl8192DEAGCTAB_2GArray[AGCTAB_2GArrayLength];
71033 -#define AGCTAB_2TArrayLength 1
71034 -extern u32 Rtl8192DEAGCTAB_2TArray[AGCTAB_2TArrayLength];
71035 -#define AGCTAB_1TArrayLength 1
71036 -extern u32 Rtl8192DEAGCTAB_1TArray[AGCTAB_1TArrayLength];
71037 +#define Rtl8192DEImgArrayLength 32296
71038 +extern const u8 Rtl8192DEFwImgArray[Rtl8192DEImgArrayLength];
71039 +#define Rtl8192DEMainArrayLength 1
71040 +extern const u8 Rtl8192DEFwMainArray[Rtl8192DEMainArrayLength];
71041 +#define Rtl8192DEDataArrayLength 1
71042 +extern const u8 Rtl8192DEFwDataArray[Rtl8192DEDataArrayLength];
71043 +#define Rtl8192DEPHY_REG_2TArrayLength 372
71044 +extern const u32 Rtl8192DEPHY_REG_2TArray[Rtl8192DEPHY_REG_2TArrayLength];
71045 +#define Rtl8192DEPHY_REG_1TArrayLength 1
71046 +extern const u32 Rtl8192DEPHY_REG_1TArray[Rtl8192DEPHY_REG_1TArrayLength];
71047 +#define Rtl8192DEPHY_REG_Array_PGLength 624
71048 +extern const u32 Rtl8192DEPHY_REG_Array_PG[Rtl8192DEPHY_REG_Array_PGLength];
71049 +#define Rtl8192DEPHY_REG_Array_MPLength 12
71050 +extern const u32 Rtl8192DEPHY_REG_Array_MP[Rtl8192DEPHY_REG_Array_MPLength];
71051 +#define Rtl8192DERadioA_2TArrayLength 378
71052 +extern const u32 Rtl8192DERadioA_2TArray[Rtl8192DERadioA_2TArrayLength];
71053 +#define Rtl8192DERadioB_2TArrayLength 384
71054 +extern const u32 Rtl8192DERadioB_2TArray[Rtl8192DERadioB_2TArrayLength];
71055 +#define Rtl8192DERadioA_1TArrayLength 1
71056 +extern const u32 Rtl8192DERadioA_1TArray[Rtl8192DERadioA_1TArrayLength];
71057 +#define Rtl8192DERadioB_1TArrayLength 1
71058 +extern const u32 Rtl8192DERadioB_1TArray[Rtl8192DERadioB_1TArrayLength];
71059 +#define Rtl8192DERadioA_2T_intPAArrayLength 378
71060 +extern const u32 Rtl8192DERadioA_2T_intPAArray[Rtl8192DERadioA_2T_intPAArrayLength];
71061 +#define Rtl8192DERadioB_2T_intPAArrayLength 384
71062 +extern const u32 Rtl8192DERadioB_2T_intPAArray[Rtl8192DERadioB_2T_intPAArrayLength];
71063 +#define Rtl8192DEMAC_2T_ArrayLength 192
71064 +extern const u32 Rtl8192DEMAC_2T_Array[Rtl8192DEMAC_2T_ArrayLength];
71065 +#define Rtl8192DEAGCTAB_ArrayLength 386
71066 +extern const u32 Rtl8192DEAGCTAB_Array[Rtl8192DEAGCTAB_ArrayLength];
71067 +#define Rtl8192DEAGCTAB_5GArrayLength 194
71068 +extern const u32 Rtl8192DEAGCTAB_5GArray[Rtl8192DEAGCTAB_5GArrayLength];
71069 +#define Rtl8192DEAGCTAB_2GArrayLength 194
71070 +extern const u32 Rtl8192DEAGCTAB_2GArray[Rtl8192DEAGCTAB_2GArrayLength];
71071 +#define Rtl8192DEAGCTAB_2TArrayLength 1
71072 +extern const u32 Rtl8192DEAGCTAB_2TArray[Rtl8192DEAGCTAB_2TArrayLength];
71073 +#define Rtl8192DEAGCTAB_1TArrayLength 1
71074 +extern const u32 Rtl8192DEAGCTAB_1TArray[Rtl8192DEAGCTAB_1TArrayLength];
71075
71076 #endif //__INC_HAL8192CU_FW_IMG_H
71077 --- a/drivers/net/wireless/rtl8192cu/include/Hal8192DETestHWImg.h
71078 +++ /dev/null
71079 @@ -1,54 +0,0 @@
71080 -/******************************************************************************
71081 - *
71082 - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
71083 - *
71084 - * This program is free software; you can redistribute it and/or modify it
71085 - * under the terms of version 2 of the GNU General Public License as
71086 - * published by the Free Software Foundation.
71087 - *
71088 - * This program is distributed in the hope that it will be useful, but WITHOUT
71089 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
71090 - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
71091 - * more details.
71092 - *
71093 - * You should have received a copy of the GNU General Public License along with
71094 - * this program; if not, write to the Free Software Foundation, Inc.,
71095 - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
71096 - *
71097 - *
71098 - ******************************************************************************/
71099 -#ifndef __INC_HAL8192DETEST_FW_IMG_H
71100 -#define __INC_HAL8192DETEST_FW_IMG_H
71101 -
71102 -#include <basic_types.h>
71103 -
71104 -/*Created on 2010/ 5/27, 8: 6*/
71105 -
71106 -#define Rtl8192DTestImgArrayLength 15054
71107 -extern u8 Rtl8192DTestFwImgArray[Rtl8192DTestImgArrayLength];
71108 -#define Rtl8192DTestMainArrayLength 1
71109 -extern u8 Rtl8192DTestFwMainArray[Rtl8192DTestMainArrayLength];
71110 -#define Rtl8192DTestDataArrayLength 1
71111 -extern u8 Rtl8192DTestFwDataArray[Rtl8192DTestDataArrayLength];
71112 -#define Rtl8192DTestPHY_REG_2TArrayLength 376
71113 -extern u32 Rtl8192DTestPHY_REG_2TArray[Rtl8192DTestPHY_REG_2TArrayLength];
71114 -#define Rtl8192DTestPHY_REG_1TArrayLength 1
71115 -extern u32 Rtl8192DTestPHY_REG_1TArray[Rtl8192DTestPHY_REG_1TArrayLength];
71116 -#define Rtl8192DTestPHY_REG_Array_PGLength 1
71117 -extern u32 Rtl8192DTestPHY_REG_Array_PG[Rtl8192DTestPHY_REG_Array_PGLength];
71118 -#define Rtl8192DTestRadioA_2TArrayLength 340
71119 -extern u32 Rtl8192DTestRadioA_2TArray[Rtl8192DTestRadioA_2TArrayLength];
71120 -#define Rtl8192DTestRadioB_2TArrayLength 340
71121 -extern u32 Rtl8192DTestRadioB_2TArray[Rtl8192DTestRadioB_2TArrayLength];
71122 -#define Rtl8192DTestRadioA_1TArrayLength 1
71123 -extern u32 Rtl8192DTestRadioA_1TArray[Rtl8192DTestRadioA_1TArrayLength];
71124 -#define Rtl8192DTestRadioB_1TArrayLength 1
71125 -extern u32 Rtl8192DTestRadioB_1TArray[Rtl8192DTestRadioB_1TArrayLength];
71126 -#define Rtl8192DTestMAC_2TArrayLength 174
71127 -extern u32 Rtl8192DTestMAC_2TArray[Rtl8192DTestMAC_2TArrayLength];
71128 -#define Rtl8192DTestAGCTAB_5GArrayLength 514
71129 -extern u32 Rtl8192DTestAGCTAB_5GArray[Rtl8192DTestAGCTAB_5GArrayLength];
71130 -#define Rtl8192DTestAGCTAB_2GArrayLength 514
71131 -extern u32 Rtl8192DTestAGCTAB_2GArray[Rtl8192DTestAGCTAB_2GArrayLength];
71132 -
71133 -#endif //__INC_HAL8192CU_FW_IMG_H
71134 --- a/drivers/net/wireless/rtl8192cu/include/Hal8192DPhyCfg.h
71135 +++ b/drivers/net/wireless/rtl8192cu/include/Hal8192DPhyCfg.h
71136 @@ -157,6 +157,16 @@ typedef enum _MACPHY_MODE_8192D{
71137 DUALMAC_SINGLEPHY,
71138 }MACPHY_MODE_8192D,*PMACPHY_MODE_8192D;
71139
71140 +typedef enum _MACPHY_MODE_CHANGE_ACTION{
71141 + DMDP2DMSP = 0,
71142 + DMSP2DMDP = 1,
71143 + DMDP2SMSP = 2,
71144 + SMSP2DMDP = 3,
71145 + DMSP2SMSP = 4,
71146 + SMSP2DMSP = 5,
71147 + MAXACTION
71148 +}MACPHY_MODE_CHANGE_ACTION,*PMACPHY_MODE_CHANGE_ACTION;
71149 +
71150 typedef enum _BAND_TYPE{
71151 BAND_ON_2_4G = 0,
71152 BAND_ON_5G,
71153 @@ -187,19 +197,6 @@ typedef enum _RF_TYPE_8190P{
71154 RF_PSEUDO_11N=5, // 5, It is a temporality RF.
71155 }RF_TYPE_8190P_E,*PRF_TYPE_8190P_E;
71156
71157 -
71158 -typedef enum _RATR_TABLE_MODE_8192C{
71159 - RATR_INX_WIRELESS_NGB = 0,
71160 - RATR_INX_WIRELESS_NG = 1,
71161 - RATR_INX_WIRELESS_NB = 2,
71162 - RATR_INX_WIRELESS_N = 3,
71163 - RATR_INX_WIRELESS_GB = 4,
71164 - RATR_INX_WIRELESS_G = 5,
71165 - RATR_INX_WIRELESS_B = 6,
71166 - RATR_INX_WIRELESS_MC = 7,
71167 - RATR_INX_WIRELESS_A = 8,
71168 -}RATR_TABLE_MODE_8192C, *PRATR_TABLE_MODE_8192C;
71169 -
71170 typedef struct _BB_REGISTER_DEFINITION{
71171 u32 rfintfs; // set software control:
71172 // 0x870~0x877[8 bytes]
71173 @@ -514,6 +511,9 @@ HalChangeCCKStatus8192D(
71174 IN BOOLEAN bCCKDisable
71175 );
71176
71177 +VOID
71178 +PHY_InitPABias92D(IN PADAPTER Adapter);
71179 +
71180 /*--------------------------Exported Function prototype---------------------*/
71181
71182 #define PHY_SetBBReg1Byte(Adapter, RegAddr, BitMask, Data) rtl8192d_PHY_SetBBReg1Byte((Adapter), (RegAddr), (BitMask), (Data))
71183 --- a/drivers/net/wireless/rtl8192cu/include/Hal8192DUHWImg.h
71184 +++ b/drivers/net/wireless/rtl8192cu/include/Hal8192DUHWImg.h
71185 @@ -24,7 +24,7 @@
71186
71187 /*Created on 2011/11/11, 8: 8*/
71188
71189 -#define Rtl8192DUImgArrayLength 32142
71190 +#define Rtl8192DUImgArrayLength 31452
71191 extern const u8 Rtl8192DUFwImgArray[Rtl8192DUImgArrayLength];
71192 #define Rtl8192DUMainArrayLength 1
71193 extern const u8 Rtl8192DUFwMainArray[Rtl8192DUMainArrayLength];
71194 @@ -36,7 +36,7 @@ extern const u32 Rtl8192DUPHY_REG_2TArra
71195 extern const u32 Rtl8192DUPHY_REG_1TArray[Rtl8192DUPHY_REG_1TArrayLength];
71196 #define Rtl8192DUPHY_REG_Array_PGLength 624
71197 extern const u32 Rtl8192DUPHY_REG_Array_PG[Rtl8192DUPHY_REG_Array_PGLength];
71198 -#define Rtl8192DUPHY_REG_Array_MPLength 12
71199 +#define Rtl8192DUPHY_REG_Array_MPLength 14
71200 extern const u32 Rtl8192DUPHY_REG_Array_MP[Rtl8192DUPHY_REG_Array_MPLength];
71201 #define Rtl8192DURadioA_2TArrayLength 378
71202 extern const u32 Rtl8192DURadioA_2TArray[Rtl8192DURadioA_2TArrayLength];
71203 --- a/drivers/net/wireless/rtl8192cu/include/Hal8192DUHWImg_wowlan.h
71204 +++ b/drivers/net/wireless/rtl8192cu/include/Hal8192DUHWImg_wowlan.h
71205 @@ -23,7 +23,7 @@
71206 /*Created on 2011/11/ 8, 14:15*/
71207
71208
71209 -#define DUWWImgArrayLength 16656
71210 +#define DUWWImgArrayLength 24818
71211 extern u8 Rtl8192DUFwWWImgArray[DUWWImgArrayLength];
71212
71213 #endif //__INC_HAL8192DU_FW_IMG_WOWLAN_H
71214 --- a/drivers/net/wireless/rtl8192cu/include/Hal8192DUTestHWImg.h
71215 +++ /dev/null
71216 @@ -1,54 +0,0 @@
71217 -/******************************************************************************
71218 - *
71219 - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
71220 - *
71221 - * This program is free software; you can redistribute it and/or modify it
71222 - * under the terms of version 2 of the GNU General Public License as
71223 - * published by the Free Software Foundation.
71224 - *
71225 - * This program is distributed in the hope that it will be useful, but WITHOUT
71226 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
71227 - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
71228 - * more details.
71229 - *
71230 - * You should have received a copy of the GNU General Public License along with
71231 - * this program; if not, write to the Free Software Foundation, Inc.,
71232 - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
71233 - *
71234 - *
71235 - ******************************************************************************/
71236 -#ifndef __INC_HAL8192DUTEST_FW_IMG_H
71237 -#define __INC_HAL8192DUTEST_FW_IMG_H
71238 -
71239 -#include <basic_types.h>
71240 -
71241 -/*Created on 2010/ 5/27, 9:49*/
71242 -
71243 -#define Rtl8192DTestImgArrayLength 15054
71244 -extern u8 Rtl8192DTestFwImgArray[Rtl8192DTestImgArrayLength];
71245 -#define Rtl8192DTestMainArrayLength 1
71246 -extern u8 Rtl8192DTestFwMainArray[Rtl8192DTestMainArrayLength];
71247 -#define Rtl8192DTestDataArrayLength 1
71248 -extern u8 Rtl8192DTestFwDataArray[Rtl8192DTestDataArrayLength];
71249 -#define Rtl8192DTestPHY_REG_2TArrayLength 376
71250 -extern u32 Rtl8192DTestPHY_REG_2TArray[Rtl8192DTestPHY_REG_2TArrayLength];
71251 -#define Rtl8192DTestPHY_REG_1TArrayLength 1
71252 -extern u32 Rtl8192DTestPHY_REG_1TArray[Rtl8192DTestPHY_REG_1TArrayLength];
71253 -#define Rtl8192DTestPHY_REG_Array_PGLength 1
71254 -extern u32 Rtl8192DTestPHY_REG_Array_PG[Rtl8192DTestPHY_REG_Array_PGLength];
71255 -#define Rtl8192DTestRadioA_2TArrayLength 340
71256 -extern u32 Rtl8192DTestRadioA_2TArray[Rtl8192DTestRadioA_2TArrayLength];
71257 -#define Rtl8192DTestRadioB_2TArrayLength 340
71258 -extern u32 Rtl8192DTestRadioB_2TArray[Rtl8192DTestRadioB_2TArrayLength];
71259 -#define Rtl8192DTestRadioA_1TArrayLength 1
71260 -extern u32 Rtl8192DTestRadioA_1TArray[Rtl8192DTestRadioA_1TArrayLength];
71261 -#define Rtl8192DTestRadioB_1TArrayLength 1
71262 -extern u32 Rtl8192DTestRadioB_1TArray[Rtl8192DTestRadioB_1TArrayLength];
71263 -#define Rtl8192DTestMAC_2TArrayLength 174
71264 -extern u32 Rtl8192DTestMAC_2TArray[Rtl8192DTestMAC_2TArrayLength];
71265 -#define Rtl8192DTestAGCTAB_5GArrayLength 514
71266 -extern u32 Rtl8192DTestAGCTAB_5GArray[Rtl8192DTestAGCTAB_5GArrayLength];
71267 -#define Rtl8192DTestAGCTAB_2GArrayLength 514
71268 -extern u32 Rtl8192DTestAGCTAB_2GArray[Rtl8192DTestAGCTAB_2GArrayLength];
71269 -
71270 -#endif //__INC_HAL8192CU_FW_IMG_H
71271 --- /dev/null
71272 +++ b/drivers/net/wireless/rtl8192cu/include/HalPwrSeqCmd.h
71273 @@ -0,0 +1,137 @@
71274 +/******************************************************************************
71275 + *
71276 + * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
71277 + *
71278 + * This program is free software; you can redistribute it and/or modify it
71279 + * under the terms of version 2 of the GNU General Public License as
71280 + * published by the Free Software Foundation.
71281 + *
71282 + * This program is distributed in the hope that it will be useful, but WITHOUT
71283 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
71284 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
71285 + * more details.
71286 + *
71287 + * You should have received a copy of the GNU General Public License along with
71288 + * this program; if not, write to the Free Software Foundation, Inc.,
71289 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
71290 + *
71291 + *
71292 + ******************************************************************************/
71293 +#ifndef __HALPWRSEQCMD_H__
71294 +#define __HALPWRSEQCMD_H__
71295 +
71296 +#include <drv_types.h>
71297 +
71298 +/*---------------------------------------------*/
71299 +//3 The value of cmd: 4 bits
71300 +/*---------------------------------------------*/
71301 +#define PWR_CMD_READ 0x00
71302 + // offset: the read register offset
71303 + // msk: the mask of the read value
71304 + // value: N/A, left by 0
71305 + // note: dirver shall implement this function by read & msk
71306 +
71307 +#define PWR_CMD_WRITE 0x01
71308 + // offset: the read register offset
71309 + // msk: the mask of the write bits
71310 + // value: write value
71311 + // note: driver shall implement this cmd by read & msk after write
71312 +
71313 +#define PWR_CMD_POLLING 0x02
71314 + // offset: the read register offset
71315 + // msk: the mask of the polled value
71316 + // value: the value to be polled, masked by the msd field.
71317 + // note: driver shall implement this cmd by
71318 + // do{
71319 + // if( (Read(offset) & msk) == (value & msk) )
71320 + // break;
71321 + // } while(not timeout);
71322 +
71323 +#define PWR_CMD_DELAY 0x03
71324 + // offset: the value to delay
71325 + // msk: N/A
71326 + // value: the unit of delay, 0: us, 1: ms
71327 +
71328 +#define PWR_CMD_END 0x04
71329 + // offset: N/A
71330 + // msk: N/A
71331 + // value: N/A
71332 +
71333 +/*---------------------------------------------*/
71334 +//3 The value of base: 4 bits
71335 +/*---------------------------------------------*/
71336 + // define the base address of each block
71337 +#define PWR_BASEADDR_MAC 0x00
71338 +#define PWR_BASEADDR_USB 0x01
71339 +#define PWR_BASEADDR_PCIE 0x02
71340 +#define PWR_BASEADDR_SDIO 0x03
71341 +
71342 +/*---------------------------------------------*/
71343 +//3 The value of interface_msk: 4 bits
71344 +/*---------------------------------------------*/
71345 +#define PWR_INTF_SDIO_MSK BIT(0)
71346 +#define PWR_INTF_USB_MSK BIT(1)
71347 +#define PWR_INTF_PCI_MSK BIT(2)
71348 +#define PWR_INTF_ALL_MSK (BIT(0)|BIT(1)|BIT(2)|BIT(3))
71349 +
71350 +/*---------------------------------------------*/
71351 +//3 The value of fab_msk: 4 bits
71352 +/*---------------------------------------------*/
71353 +#define PWR_FAB_TSMC_MSK BIT(0)
71354 +#define PWR_FAB_UMC_MSK BIT(1)
71355 +#define PWR_FAB_ALL_MSK (BIT(0)|BIT(1)|BIT(2)|BIT(3))
71356 +
71357 +/*---------------------------------------------*/
71358 +//3 The value of cut_msk: 8 bits
71359 +/*---------------------------------------------*/
71360 +#define PWR_CUT_TESTCHIP_MSK BIT(0)
71361 +#define PWR_CUT_A_MSK BIT(1)
71362 +#define PWR_CUT_B_MSK BIT(2)
71363 +#define PWR_CUT_C_MSK BIT(3)
71364 +#define PWR_CUT_D_MSK BIT(4)
71365 +#define PWR_CUT_E_MSK BIT(5)
71366 +#define PWR_CUT_F_MSK BIT(6)
71367 +#define PWR_CUT_G_MSK BIT(7)
71368 +#define PWR_CUT_ALL_MSK 0xFF
71369 +
71370 +
71371 +typedef enum _PWRSEQ_CMD_DELAY_UNIT_
71372 +{
71373 + PWRSEQ_DELAY_US,
71374 + PWRSEQ_DELAY_MS,
71375 +} PWRSEQ_DELAY_UNIT;
71376 +
71377 +typedef struct _WL_PWR_CFG_
71378 +{
71379 + u16 offset;
71380 + u8 cut_msk;
71381 + u8 fab_msk:4;
71382 + u8 interface_msk:4;
71383 + u8 base:4;
71384 + u8 cmd:4;
71385 + u8 msk;
71386 + u8 value;
71387 +} WLAN_PWR_CFG, *PWLAN_PWR_CFG;
71388 +
71389 +
71390 +#define GET_PWR_CFG_OFFSET(__PWR_CMD) __PWR_CMD.offset
71391 +#define GET_PWR_CFG_CUT_MASK(__PWR_CMD) __PWR_CMD.cut_msk
71392 +#define GET_PWR_CFG_FAB_MASK(__PWR_CMD) __PWR_CMD.fab_msk
71393 +#define GET_PWR_CFG_INTF_MASK(__PWR_CMD) __PWR_CMD.interface_msk
71394 +#define GET_PWR_CFG_BASE(__PWR_CMD) __PWR_CMD.base
71395 +#define GET_PWR_CFG_CMD(__PWR_CMD) __PWR_CMD.cmd
71396 +#define GET_PWR_CFG_MASK(__PWR_CMD) __PWR_CMD.msk
71397 +#define GET_PWR_CFG_VALUE(__PWR_CMD) __PWR_CMD.value
71398 +
71399 +
71400 +//================================================================================
71401 +// Prototype of protected function.
71402 +//================================================================================
71403 +u8 HalPwrSeqCmdParsing(
71404 + PADAPTER padapter,
71405 + u8 CutVersion,
71406 + u8 FabVersion,
71407 + u8 InterfaceType,
71408 + WLAN_PWR_CFG PwrCfgCmd[]);
71409 +
71410 +#endif
71411 --- a/drivers/net/wireless/rtl8192cu/include/autoconf.h
71412 +++ b/drivers/net/wireless/rtl8192cu/include/autoconf.h
71413 @@ -31,11 +31,13 @@
71414
71415 #define PLATFORM_LINUX 1
71416
71417 -
71418 //#define CONFIG_IOCTL_CFG80211 1
71419 #ifdef CONFIG_IOCTL_CFG80211
71420 + //#define RTW_USE_CFG80211_STA_EVENT /* Indecate new sta asoc through cfg80211_new_sta */
71421 #define CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER
71422 //#define CONFIG_DEBUG_CFG80211 1
71423 + //#define CONFIG_DRV_ISSUE_PROV_REQ // IOT FOR S2
71424 + #define CONFIG_SET_SCAN_DENY_TIMER
71425 #endif
71426
71427 /*
71428 @@ -53,12 +55,19 @@
71429
71430 #define CONFIG_R871X_TEST 1
71431
71432 +#define CONFIG_XMIT_ACK
71433 +#ifdef CONFIG_XMIT_ACK
71434 + #define CONFIG_XMIT_ACK_POLLING
71435 + #define CONFIG_ACTIVE_KEEP_ALIVE_CHECK
71436 +#endif
71437 +
71438 #define CONFIG_80211N_HT 1
71439
71440 #define CONFIG_RECV_REORDERING_CTRL 1
71441
71442 //#define CONFIG_TCP_CSUM_OFFLOAD_RX 1
71443
71444 +//#define CONFIG_BEFORE_LINKED_DIG
71445 //#define CONFIG_DRVEXT_MODULE 1
71446
71447 #ifndef CONFIG_MP_INCLUDED
71448 @@ -66,53 +75,69 @@
71449 #ifdef CONFIG_IPS
71450 //#define CONFIG_IPS_LEVEL_2 1 //enable this to set default IPS mode to IPS_LEVEL_2
71451 #endif
71452 - #define SUPPORT_HW_RFOFF_DETECTED 1
71453
71454 + #define SUPPORT_HW_RFOFF_DETECTED 1
71455 +
71456 #define CONFIG_LPS 1
71457 #define CONFIG_BT_COEXIST 1
71458 +
71459 //befor link
71460 - #define CONFIG_ANTENNA_DIVERSITY
71461 + #define CONFIG_ANTENNA_DIVERSITY
71462 +
71463 //after link
71464 #ifdef CONFIG_ANTENNA_DIVERSITY
71465 - #define CONFIG_SW_ANTENNA_DIVERSITY
71466 - //#define CONFIG_HW_ANTENNA_DIVERSITY
71467 + #define CONFIG_SW_ANTENNA_DIVERSITY
71468 + //#define CONFIG_HW_ANTENNA_DIVERSITY
71469 #endif
71470 -
71471 +
71472 #define CONFIG_IOL
71473 -#else //#ifndef CONFIG_MP_INCLUDED
71474 +#else //#ifndef CONFIG_MP_INCLUDED
71475 #define CONFIG_MP_IWPRIV_SUPPORT 1
71476 -#endif //#ifndef CONFIG_MP_INCLUDED
71477 +#endif //#ifndef CONFIG_MP_INCLUDED
71478
71479 #define CONFIG_AP_MODE 1
71480 -#define CONFIG_NATIVEAP_MLME 1
71481 +#ifdef CONFIG_AP_MODE
71482 + #define CONFIG_NATIVEAP_MLME 1
71483 + #ifndef CONFIG_NATIVEAP_MLME
71484 + #define CONFIG_HOSTAPD_MLME 1
71485 + #endif
71486 + #define CONFIG_FIND_BEST_CHANNEL 1
71487 + //#define CONFIG_NO_WIRELESS_HANDLERS 1
71488 +#endif
71489
71490 // Added by Albert 20110314
71491 #define CONFIG_P2P 1
71492 +#ifdef CONFIG_P2P
71493 + //Added by Albert 20110812
71494 + //The CONFIG_WFD is for supporting the Wi-Fi display
71495 + #define CONFIG_WFD
71496 +
71497 + #ifndef CONFIG_WIFI_TEST
71498 + #define CONFIG_P2P_REMOVE_GROUP_INFO
71499 + #endif
71500 + //#define CONFIG_DBG_P2P
71501
71502 + //#define CONFIG_P2P_PS
71503 + //#define CONFIG_P2P_IPS
71504
71505 -#ifdef CONFIG_P2P
71506 -// Added by Albert 20110812
71507 -// The CONFIG_WFD is for supporting the Wi-Fi display
71508 -//#define CONFIG_WFD 1
71509 -
71510 -// Unmarked if there is low p2p scanned ratio; Kurt
71511 -//#define CONFIG_P2P_AGAINST_NOISE 1
71512 -#define CONFIG_P2P_REMOVE_GROUP_INFO
71513 -//#define CONFIG_DBG_P2P
71514 + #define P2P_OP_CHECK_SOCIAL_CH
71515 + // Added comment by Borg 2013/06/21
71516 + // Issue: Nexus 4 is hard to do miracast.
71517 + // Root Cause: After group formation,
71518 + // Nexus 4 is possible to be not at OP channel of Invitation Resp/Nego Confirm but at social channel.
71519 + // Patch: While scan OP channel,
71520 + // not only scan OP channel of Invitation Resp/Nego Confirm,
71521 + // but also scan social channel(1, 6, 11)
71522 #endif
71523
71524 // Added by Kurt 20110511
71525 //#define CONFIG_TDLS 1
71526 #ifdef CONFIG_TDLS
71527 - #define CONFIG_TDLS_AUTOSETUP 1
71528 - #define CONFIG_TDLS_AUTOCHECKALIVE 1
71529 -#endif
71530 -
71531 -#ifdef CONFIG_AP_MODE
71532 - #ifndef CONFIG_NATIVEAP_MLME
71533 - #define CONFIG_HOSTAPD_MLME 1
71534 - #endif
71535 - #define CONFIG_FIND_BEST_CHANNEL 1
71536 +// #ifndef CONFIG_WFD
71537 +// #define CONFIG_WFD 1
71538 +// #endif
71539 +// #define CONFIG_TDLS_AUTOSETUP 1
71540 +// #define CONFIG_TDLS_AUTOCHECKALIVE 1
71541 #endif
71542
71543 #define CONFIG_SKB_COPY 1//for amsdu
71544 @@ -138,6 +163,8 @@
71545 #define CONFIG_LONG_DELAY_ISSUE
71546 #define CONFIG_NEW_SIGNAL_STAT_PROCESS
71547 //#define CONFIG_SIGNAL_DISPLAY_DBM //display RX signal with dbm
71548 +#define RTW_NOTCH_FILTER 0 /* 0:Disable, 1:Enable */
71549 +#define CONFIG_DEAUTH_BEFORE_CONNECT
71550
71551 #ifdef CONFIG_IOL
71552 #define CONFIG_IOL_LLT
71553 @@ -154,12 +181,24 @@
71554 #endif // CONFIG_BR_EXT
71555
71556 #define CONFIG_TX_MCAST2UNI 1 // Support IP multicast->unicast
71557 +//#define CONFIG_DM_ADAPTIVITY
71558 //#define CONFIG_CHECK_AC_LIFETIME 1 // Check packet lifetime of 4 ACs.
71559
71560 +//#define CONFIG_CONCURRENT_MODE 1
71561 +#ifdef CONFIG_CONCURRENT_MODE
71562 + #define CONFIG_TSF_RESET_OFFLOAD 1 // For 2 PORT TSF SYNC.
71563 + //#define CONFIG_HWPORT_SWAP //Port0->Sec , Port1 -> Pri
71564 + //#define CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
71565 + //#define CONFIG_MULTI_VIR_IFACES //besides primary&secondary interfaces, extend to support more interfaces
71566 +#endif // CONFIG_CONCURRENT_MODE
71567 +
71568 +#define CONFIG_80211D
71569
71570 /*
71571 * Interface Related Config
71572 */
71573 +
71574 +//#define CONFIG_USB_ONE_OUT_EP
71575 //#define CONFIG_USB_INTERRUPT_IN_PIPE 1
71576
71577 #ifndef CONFIG_MINIMAL_MEMORY_USAGE
71578 @@ -176,6 +215,9 @@
71579 */
71580 //#define CONFIG_USE_USB_BUFFER_ALLOC_TX 1 // Trade-off: For TX path, improve stability on some platforms, but may cause performance degrade on other platforms.
71581 //#define CONFIG_USE_USB_BUFFER_ALLOC_RX 1 // For RX path
71582 +#ifdef CONFIG_USE_USB_BUFFER_ALLOC_RX
71583 +#undef CONFIG_PREALLOC_RECV_SKB
71584 +#endif
71585
71586 /*
71587 * USB VENDOR REQ BUFFER ALLOCATION METHOD
71588 @@ -246,9 +288,7 @@
71589 #define CONFIG_USE_USB_BUFFER_ALLOC_RX 1
71590 #endif
71591
71592 -//#define CONFIG_BEFORE_LINKED_DIG
71593 -//#define CONFIG_ENABLE_NOTCH_FILTER
71594 -
71595 +#define CONFIG_ATTEMPT_TO_FIX_AP_BEACON_ERROR
71596
71597 /*
71598 * Debug Related Config
71599 @@ -256,7 +296,7 @@
71600 //#define CONFIG_DEBUG_RTL871X
71601
71602 #define DBG 0
71603 -//#define CONFIG_DEBUG_RTL819X
71604 +#define CONFIG_DEBUG_RTL819X
71605
71606 #define CONFIG_PROC_DEBUG 1
71607
71608 @@ -281,8 +321,16 @@
71609 //#define DBG_ROAMING_TEST
71610
71611 //#define DBG_HAL_INIT_PROFILING
71612 -#define DBG_MEMORY_LEAK 1
71613 +
71614 +//#define DBG_MEMORY_LEAK 1
71615
71616 #define DBG_CONFIG_ERROR_DETECT
71617 //#define DBG_CONFIG_ERROR_RESET
71618
71619 +//TX use 1 urb
71620 +//#define CONFIG_SINGLE_XMIT_BUF
71621 +//RX use 1 urb
71622 +//#define CONFIG_SINGLE_RECV_BUF
71623 +
71624 +//turn off power tracking when traffic is busy
71625 +//#define CONFIG_BUSY_TRAFFIC_SKIP_PWR_TRACK
71626 --- a/drivers/net/wireless/rtl8192cu/include/basic_types.h
71627 +++ b/drivers/net/wireless/rtl8192cu/include/basic_types.h
71628 @@ -106,6 +106,51 @@
71629
71630 #endif
71631
71632 +
71633 +#ifdef PLATFORM_FREEBSD
71634 +
71635 + typedef signed char s8;
71636 + typedef unsigned char u8;
71637 +
71638 + typedef signed short s16;
71639 + typedef unsigned short u16;
71640 +
71641 + typedef signed int s32;
71642 + typedef unsigned int u32;
71643 +
71644 + typedef unsigned int uint;
71645 + typedef signed int sint;
71646 + typedef long atomic_t;
71647 +
71648 + typedef signed long long s64;
71649 + typedef unsigned long long u64;
71650 + #define IN
71651 + #define OUT
71652 + #define VOID void
71653 + #define NDIS_OID uint
71654 + #define NDIS_STATUS uint
71655 +
71656 + #ifndef PVOID
71657 + typedef void * PVOID;
71658 + //#define PVOID (void *)
71659 + #endif
71660 + typedef u32 dma_addr_t;
71661 + #define UCHAR u8
71662 + #define USHORT u16
71663 + #define UINT u32
71664 + #define ULONG u32
71665 +
71666 + typedef void (*proc_t)(void*);
71667 +
71668 + typedef unsigned int __kernel_size_t;
71669 + typedef int __kernel_ssize_t;
71670 +
71671 + typedef __kernel_size_t SIZE_T;
71672 + typedef __kernel_ssize_t SSIZE_T;
71673 + #define FIELD_OFFSET(s,field) ((SSIZE_T)&((s*)(0))->field)
71674 +
71675 +#endif
71676 +
71677 #define MEM_ALIGNMENT_OFFSET (sizeof (SIZE_T))
71678 #define MEM_ALIGNMENT_PADDING (sizeof(SIZE_T) - 1)
71679
71680 --- a/drivers/net/wireless/rtl8192cu/include/byteorder/generic.h
71681 +++ b/drivers/net/wireless/rtl8192cu/include/byteorder/generic.h
71682 @@ -98,7 +98,7 @@
71683 */
71684
71685
71686 -#if defined(PLATFORM_LINUX) || defined(PLATFORM_WINDOWS) || defined(PLATFORM_MPIXEL)
71687 +#if defined(PLATFORM_LINUX) || defined(PLATFORM_WINDOWS) || defined(PLATFORM_MPIXEL) || defined(PLATFORM_FREEBSD)
71688 /*
71689 * inside the kernel, we can use nicknames;
71690 * outside of it, we must avoid POSIX namespace pollution...
71691 @@ -168,13 +168,16 @@
71692 #if defined(PLATFORM_LINUX) || (defined (__GLIBC__) && __GLIBC__ >= 2)
71693 extern __u32 ntohl(__u32);
71694 extern __u32 htonl(__u32);
71695 -#else
71696 +#else //defined(PLATFORM_LINUX) || (defined (__GLIBC__) && __GLIBC__ >= 2)
71697 +#ifndef PLATFORM_FREEBSD
71698 extern unsigned long int ntohl(unsigned long int);
71699 extern unsigned long int htonl(unsigned long int);
71700 #endif
71701 +#endif
71702 +#ifndef PLATFORM_FREEBSD
71703 extern unsigned short int ntohs(unsigned short int);
71704 extern unsigned short int htons(unsigned short int);
71705 -
71706 +#endif
71707
71708 #if defined(__GNUC__) && (__GNUC__ >= 2) && defined(__OPTIMIZE__) || defined(PLATFORM_MPIXEL)
71709
71710 --- a/drivers/net/wireless/rtl8192cu/include/byteorder/swab.h
71711 +++ b/drivers/net/wireless/rtl8192cu/include/byteorder/swab.h
71712 @@ -16,12 +16,11 @@
71713 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
71714 *
71715 *
71716 -
71717 -******************************************************************************/
71718 + ******************************************************************************/
71719 #ifndef _LINUX_BYTEORDER_SWAB_H
71720 #define _LINUX_BYTEORDER_SWAB_H
71721
71722 -#if !defined(CONFIG_PLATFORM_MSTAR_TITANIA12)
71723 +#if !defined(CONFIG_PLATFORM_MSTAR)
71724 #ifndef __u16
71725 typedef unsigned short __u16;
71726 #endif
71727 @@ -74,7 +73,7 @@ __inline static __u64 ___swab64(__u64 x
71728 (__u64)(((__u64)(__x) & (__u64)0x00ff000000000000ULL) >> 40) | \
71729 (__u64)(((__u64)(__x) & (__u64)0xff00000000000000ULL) >> 56) )); \
71730 }
71731 -#endif // CONFIG_PLATFORM_MSTAR_TITANIA12
71732 +#endif // CONFIG_PLATFORM_MSTAR
71733
71734 #ifndef __arch__swab16
71735 __inline static __u16 __arch__swab16(__u16 x)
71736 @@ -109,11 +108,19 @@ __inline static __u64 __arch__swab64(__u
71737 #define __swab64(x) __fswab64(x)
71738 #endif // __swab16
71739
71740 +#ifdef PLATFORM_FREEBSD
71741 +__inline static __u16 __fswab16(__u16 x)
71742 +#else
71743 __inline static const __u16 __fswab16(__u16 x)
71744 +#endif //PLATFORM_FREEBSD
71745 {
71746 return __arch__swab16(x);
71747 }
71748 +#ifdef PLATFORM_FREEBSD
71749 +__inline static __u32 __fswab32(__u32 x)
71750 +#else
71751 __inline static const __u32 __fswab32(__u32 x)
71752 +#endif //PLATFORM_FREEBSD
71753 {
71754 return __arch__swab32(x);
71755 }
71756 --- a/drivers/net/wireless/rtl8192cu/include/byteorder/swabb.h
71757 +++ b/drivers/net/wireless/rtl8192cu/include/byteorder/swabb.h
71758 @@ -16,8 +16,7 @@
71759 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
71760 *
71761 *
71762 -
71763 -******************************************************************************/
71764 + ******************************************************************************/
71765 #ifndef _LINUX_BYTEORDER_SWABB_H
71766 #define _LINUX_BYTEORDER_SWABB_H
71767
71768 --- a/drivers/net/wireless/rtl8192cu/include/drv_conf.h
71769 +++ b/drivers/net/wireless/rtl8192cu/include/drv_conf.h
71770 @@ -38,7 +38,7 @@
71771 //between java and c/c++ layer (JNI). We force CONFIG_VALIDATE_SSID
71772 //for Android here. If you are sure there is no risk on your system about this,
71773 //mask this macro define to support non-printable ascii ssid.
71774 -#define CONFIG_VALIDATE_SSID
71775 +//#define CONFIG_VALIDATE_SSID
71776
71777 //Android expect dbm as the rx signal strength unit
71778 #define CONFIG_SIGNAL_DISPLAY_DBM
71779 --- a/drivers/net/wireless/rtl8192cu/include/drv_types.h
71780 +++ b/drivers/net/wireless/rtl8192cu/include/drv_types.h
71781 @@ -1,7 +1,7 @@
71782 /******************************************************************************
71783 *
71784 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
71785 - *
71786 + *
71787 * This program is free software; you can redistribute it and/or modify it
71788 * under the terms of version 2 of the GNU General Public License as
71789 * published by the Free Software Foundation.
71790 @@ -18,7 +18,7 @@
71791 *
71792 ******************************************************************************/
71793 /*-------------------------------------------------------------------------------
71794 -
71795 +
71796 For type defines and data structure defines
71797
71798 --------------------------------------------------------------------------------*/
71799 @@ -45,17 +45,17 @@
71800 #endif
71801
71802 enum _NIC_VERSION {
71803 -
71804 +
71805 RTL8711_NIC,
71806 RTL8712_NIC,
71807 RTL8713_NIC,
71808 RTL8716_NIC
71809 -
71810 +
71811 };
71812
71813 enum{
71814 UP_LINK,
71815 - DOWN_LINK,
71816 + DOWN_LINK,
71817 };
71818 typedef struct _ADAPTER _adapter, ADAPTER,*PADAPTER;
71819
71820 @@ -65,11 +65,12 @@ typedef struct _ADAPTER _adapter, ADAPTE
71821
71822 #include <rtw_cmd.h>
71823 #include <wlan_bssdef.h>
71824 +#include <rtw_security.h>
71825 #include <rtw_xmit.h>
71826 #include <rtw_recv.h>
71827 -#include <hal_init.h>
71828 +#include <hal_intf.h>
71829 +#include <hal_com.h>
71830 #include <rtw_qos.h>
71831 -#include <rtw_security.h>
71832 #include <rtw_pwrctrl.h>
71833 #include <rtw_io.h>
71834 #include <rtw_eeprom.h>
71835 @@ -81,6 +82,8 @@ typedef struct _ADAPTER _adapter, ADAPTE
71836 #include <rtw_led.h>
71837 #include <rtw_mlme_ext.h>
71838 #include <rtw_p2p.h>
71839 +#include <rtw_tdls.h>
71840 +#include <rtw_ap.h>
71841
71842 #ifdef CONFIG_DRVEXT_MODULE
71843 #include <drvext_api.h>
71844 @@ -106,23 +109,23 @@ typedef struct _ADAPTER _adapter, ADAPTE
71845 #define SPEC_DEV_ID_ASSIGN_IFNAME BIT(5)
71846
71847 struct specific_device_id{
71848 -
71849 +
71850 u32 flags;
71851 -
71852 +
71853 u16 idVendor;
71854 u16 idProduct;
71855
71856 };
71857
71858 struct registry_priv
71859 -{
71860 +{
71861 u8 chip_version;
71862 u8 rfintfs;
71863 u8 lbkmode;
71864 u8 hci;
71865 NDIS_802_11_SSID ssid;
71866 - u8 network_mode; //infra, ad-hoc, auto
71867 - u8 channel;//ad-hoc support requirement
71868 + u8 network_mode; //infra, ad-hoc, auto
71869 + u8 channel;//ad-hoc support requirement
71870 u8 wireless_mode;//A, B, G, auto
71871 u8 scan_mode;//active, passive
71872 u8 radio_enable;
71873 @@ -130,11 +133,11 @@ struct registry_priv
71874 u8 vrtl_carrier_sense;//Enable, Disable, Auto
71875 u8 vcs_type;//RTS/CTS, CTS-to-self
71876 u16 rts_thresh;
71877 - u16 frag_thresh;
71878 + u16 frag_thresh;
71879 u8 adhoc_tx_pwr;
71880 u8 soft_ap;
71881 u8 power_mgnt;
71882 - u8 ips_mode;
71883 + u8 ips_mode;
71884 u8 smart_ps;
71885 u8 long_retry_lmt;
71886 u8 short_retry_lmt;
71887 @@ -147,12 +150,12 @@ struct registry_priv
71888 u8 acm_method;
71889 //UAPSD
71890 u8 wmm_enable;
71891 - u8 uapsd_enable;
71892 + u8 uapsd_enable;
71893 u8 uapsd_max_sp;
71894 u8 uapsd_acbk_en;
71895 u8 uapsd_acbe_en;
71896 u8 uapsd_acvi_en;
71897 - u8 uapsd_acvo_en;
71898 + u8 uapsd_acvo_en;
71899
71900 WLAN_BSSID_EX dev_network;
71901
71902 @@ -164,19 +167,19 @@ struct registry_priv
71903 u8 ampdu_amsdu;//A-MPDU Supports A-MSDU is permitted
71904 #endif
71905 u8 lowrate_two_xmit;
71906 -
71907 +
71908 u8 rf_config ;
71909 u8 low_power ;
71910
71911 - u8 wifi_spec;// !turbo_mode
71912 -
71913 + u8 wifi_spec;// !turbo_mode
71914 +
71915 u8 channel_plan;
71916 #ifdef CONFIG_BT_COEXIST
71917 u8 bt_iso;
71918 u8 bt_sco;
71919 u8 bt_ampdu;
71920 #endif
71921 - BOOLEAN bAcceptAddbaReq;
71922 + BOOLEAN bAcceptAddbaReq;
71923
71924 u8 antdiv_cfg;
71925
71926 @@ -197,11 +200,21 @@ struct registry_priv
71927 #ifdef CONFIG_IOL
71928 bool force_iol; //enable iol without other concern
71929 #endif
71930 + u8 special_rf_path; //0: 2T2R ,1: only turn on path A 1T1R, 2: only turn on path B 1T1R
71931 + u8 mac_phy_mode; //0:by efuse, 1:smsp, 2:dmdp, 3:dmsp.
71932 +
71933 +#ifdef CONFIG_80211D
71934 + u8 enable80211d;
71935 +#endif
71936 +
71937 + u8 ifname[16];
71938 + u8 if2name[16];
71939 +
71940 + u8 notch_filter;
71941
71942 -#ifdef SUPPORT_64_STA
71943 - u8 bcmc_rate;
71944 +#ifdef CONFIG_MULTI_VIR_IFACES
71945 + u8 ext_iface_num;//primary/secondary iface is excluded
71946 #endif
71947 - u8 intel_class_mode;
71948 };
71949
71950
71951 @@ -213,56 +226,62 @@ struct registry_priv
71952
71953 #define MAX_CONTINUAL_URB_ERR 4
71954
71955 -struct dvobj_priv {
71956 +#ifdef CONFIG_SDIO_HCI
71957 +#include <drv_types_sdio.h>
71958 +#define INTF_DATA SDIO_DATA
71959 +#endif
71960
71961 - _adapter * padapter;
71962 +#define GET_PRIMARY_ADAPTER(padapter) (((_adapter *)padapter)->dvobj->if1)
71963
71964 - //For 92D, DMDP have 2 interface.
71965 - u8 InterfaceNumber;
71966 - u8 NumInterfaces;
71967 +#define GET_IFACE_NUMS(padapter) (((_adapter *)padapter)->dvobj->iface_nums)
71968 +#define GET_ADAPTER(padapter, iface_id) (((_adapter *)padapter)->dvobj->padapters[iface_id])
71969
71970 -/*-------- below is for SDIO INTERFACE --------*/
71971 +enum _IFACE_ID {
71972 + IFACE_ID0, //maping to PRIMARY_ADAPTER
71973 + IFACE_ID1, //maping to SECONDARY_ADAPTER
71974 + IFACE_ID2,
71975 + IFACE_ID3,
71976 + IFACE_ID_MAX,
71977 +};
71978
71979 -#ifdef CONFIG_SDIO_HCI
71980 +struct dvobj_priv
71981 +{
71982 + _adapter *if1; //PRIMARY_ADAPTER
71983 + _adapter *if2; //SECONDARY_ADAPTER
71984
71985 -#ifdef PLATFORM_OS_XP
71986 - PDEVICE_OBJECT pphysdevobj;//pPhysDevObj;
71987 - PDEVICE_OBJECT pfuncdevobj;//pFuncDevObj;
71988 - PDEVICE_OBJECT pnextdevobj;//pNextDevObj;
71989 - SDBUS_INTERFACE_STANDARD sdbusinft;//SdBusInterface;
71990 - u8 nextdevstacksz;//unsigned char NextDeviceStackSize;
71991 -#endif//PLATFORM_OS_XP
71992 + s32 processing_dev_remove;
71993
71994 -#ifdef PLATFORM_OS_CE
71995 - SD_DEVICE_HANDLE hDevice;
71996 - SD_CARD_RCA sd_rca;
71997 - SD_CARD_INTERFACE card_intf;
71998 - BOOLEAN enableIsarWithStatus;
71999 - WCHAR active_path[MAX_ACTIVE_REG_PATH];
72000 - SD_HOST_BLOCK_CAPABILITY sd_host_blk_cap;
72001 -#endif//PLATFORM_OS_CE
72002 + //for local/global synchronization
72003 + _mutex hw_init_mutex;
72004 + _mutex h2c_fwcmd_mutex;
72005 + _mutex setch_mutex;
72006 + _mutex setbw_mutex;
72007 +
72008 + unsigned char oper_channel; //saved channel info when call set_channel_bw
72009 + unsigned char oper_bwmode;
72010 + unsigned char oper_ch_offset;//PRIME_CHNL_OFFSET
72011 + u32 on_oper_ch_time;
72012 +
72013 + //extend to support mulitu interface
72014 + //padapters[IFACE_ID0] == if1
72015 + //padapters[IFACE_ID1] == if2
72016 + _adapter *padapters[IFACE_ID_MAX];
72017 + u8 iface_nums; // total number of ifaces used runtime
72018
72019 -#ifdef PLATFORM_LINUX
72020 - struct sdio_func *func;
72021 -#endif//PLATFORM_LINUX
72022 + //For 92D, DMDP have 2 interface.
72023 + u8 InterfaceNumber;
72024 + u8 NumInterfaces;
72025 + u8 DualMacMode;
72026 + u8 irq_alloc;
72027 +
72028 +/*-------- below is for SDIO INTERFACE --------*/
72029
72030 - u8 func_number;//unsigned char FunctionNumber;
72031 - u32 block_transfer_len;//unsigned long BLOCK_TRANSFER_LEN;
72032 - u32 blk_shiftbits;
72033 - u16 driver_version;
72034 - u16 rxblknum;
72035 - u16 rxblknum_rd;
72036 - u16 c2hblknum;
72037 - u8 tx_block_mode;
72038 - u8 rx_block_mode;
72039 - u8 cmdfifo_cnt;
72040 - u8 rxfifo_cnt;
72041 - u16 sdio_hisr;
72042 - u16 sdio_himr;
72043 -#endif// CONFIG_SDIO_HCI
72044 +#ifdef INTF_DATA
72045 + INTF_DATA intf_data;
72046 +#endif
72047
72048 /*-------- below is for USB INTERFACE --------*/
72049 -
72050 +
72051 #ifdef CONFIG_USB_HCI
72052
72053 u8 nr_endpoint;
72054 @@ -272,17 +291,17 @@ struct dvobj_priv {
72055 int ep_num[5]; //endpoint number
72056
72057 int RegUsbSS;
72058 -
72059 +
72060 _sema usb_suspend_sema;
72061
72062 #ifdef CONFIG_USB_VENDOR_REQ_MUTEX
72063 _mutex usb_vendor_req_mutex;
72064 #endif
72065 -
72066 +
72067 #ifdef CONFIG_USB_VENDOR_REQ_BUFFER_PREALLOC
72068 u8 * usb_alloc_vendor_req_buf;
72069 u8 * usb_vendor_req_buf;
72070 -#endif
72071 +#endif
72072
72073 #ifdef PLATFORM_WINDOWS
72074 //related device objects
72075 @@ -290,7 +309,7 @@ struct dvobj_priv {
72076 PDEVICE_OBJECT pfuncdevobj;//pFuncDevObj;
72077 PDEVICE_OBJECT pnextdevobj;//pNextDevObj;
72078
72079 - u8 nextdevstacksz;//unsigned char NextDeviceStackSize; //= (CHAR)CEdevice->pUsbDevObj->StackSize + 1;
72080 + u8 nextdevstacksz;//unsigned char NextDeviceStackSize; //= (CHAR)CEdevice->pUsbDevObj->StackSize + 1;
72081
72082 //urb for control diescriptor request
72083
72084 @@ -306,7 +325,7 @@ struct dvobj_priv {
72085 _nic_hdl pipehdls_r8192c[0x10];
72086 #endif
72087
72088 - u32 config_descriptor_len;//ULONG UsbConfigurationDescriptorLength;
72089 + u32 config_descriptor_len;//ULONG UsbConfigurationDescriptorLength;
72090 #endif//PLATFORM_WINDOWS
72091
72092 #ifdef PLATFORM_LINUX
72093 @@ -314,11 +333,15 @@ struct dvobj_priv {
72094 struct usb_device *pusbdev;
72095 #endif//PLATFORM_LINUX
72096
72097 +#ifdef PLATFORM_FREEBSD
72098 + struct usb_interface *pusbintf;
72099 + struct usb_device *pusbdev;
72100 +#endif//PLATFORM_FREEBSD
72101 ATOMIC_T continual_urb_error;
72102 #endif//CONFIG_USB_HCI
72103
72104 /*-------- below is for PCIE INTERFACE --------*/
72105 -
72106 +
72107 #ifdef CONFIG_PCI_HCI
72108
72109 #ifdef PLATFORM_LINUX
72110 @@ -327,7 +350,7 @@ struct dvobj_priv {
72111 //PCI MEM map
72112 unsigned long pci_mem_end; /* shared mem end */
72113 unsigned long pci_mem_start; /* shared mem start */
72114 -
72115 +
72116 //PCI IO map
72117 unsigned long pci_base_addr; /* device I/O address */
72118
72119 @@ -336,7 +359,6 @@ struct dvobj_priv {
72120
72121 u16 irqline;
72122 u8 irq_enabled;
72123 - u8 irq_alloc;
72124 RT_ISR_CONTENT isr_content;
72125 _lock irq_th_lock;
72126
72127 @@ -349,13 +371,46 @@ struct dvobj_priv {
72128 u8 const_hostpci_aspm_setting;
72129 // pci-e device */
72130 u8 const_devicepci_aspm_setting;
72131 - u8 b_support_aspm; // If it supports ASPM, Offset[560h] = 0x40, otherwise Offset[560h] = 0x00.
72132 + u8 b_support_aspm; // If it supports ASPM, Offset[560h] = 0x40, otherwise Offset[560h] = 0x00.
72133 u8 b_support_backdoor;
72134 + u8 bdma64;
72135 #endif//PLATFORM_LINUX
72136
72137 #endif//CONFIG_PCI_HCI
72138 };
72139
72140 +#ifdef PLATFORM_LINUX
72141 +static struct device *dvobj_to_dev(struct dvobj_priv *dvobj)
72142 +{
72143 + /* todo: get interface type from dvobj and the return the dev accordingly */
72144 +#ifdef RTW_DVOBJ_CHIP_HW_TYPE
72145 +#endif
72146 +
72147 +#ifdef CONFIG_USB_HCI
72148 + return &dvobj->pusbintf->dev;
72149 +#endif
72150 +#ifdef CONFIG_SDIO_HCI
72151 + return &dvobj->intf_data.func->dev;
72152 +#endif
72153 +#ifdef CONFIG_PCI_HCI
72154 + return &dvobj->ppcidev->dev;
72155 +#endif
72156 +}
72157 +#endif
72158 +
72159 +
72160 +enum _IFACE_TYPE {
72161 + IFACE_PORT0, //mapping to port0 for C/D series chips
72162 + IFACE_PORT1, //mapping to port1 for C/D series chip
72163 + MAX_IFACE_PORT,
72164 +};
72165 +
72166 +enum _ADAPTER_TYPE {
72167 + PRIMARY_ADAPTER,
72168 + SECONDARY_ADAPTER,
72169 + MAX_ADAPTER = 0xFF,
72170 +};
72171 +
72172 typedef enum _DRIVER_STATE{
72173 DRIVER_NORMAL = 0,
72174 DRIVER_DISAPPEAR = 1,
72175 @@ -398,8 +453,8 @@ struct _ADAPTER{
72176 u16 chip_type;
72177 u16 HardwareType;
72178 u16 interface_type;//USB,SDIO,PCI
72179 -
72180 - struct dvobj_priv dvobjpriv;
72181 +
72182 + struct dvobj_priv *dvobj;
72183 struct mlme_priv mlmepriv;
72184 struct mlme_ext_priv mlmeextpriv;
72185 struct cmd_priv cmdpriv;
72186 @@ -409,13 +464,13 @@ struct _ADAPTER{
72187 struct xmit_priv xmitpriv;
72188 struct recv_priv recvpriv;
72189 struct sta_priv stapriv;
72190 - struct security_priv securitypriv;
72191 - struct registry_priv registrypriv;
72192 - struct wlan_acl_pool acl_list;
72193 + struct security_priv securitypriv;
72194 + _lock security_key_mutex; // add for CONFIG_IEEE80211W, none 11w also can use
72195 + struct registry_priv registrypriv;
72196 struct pwrctrl_priv pwrctrlpriv;
72197 struct eeprom_priv eeprompriv;
72198 struct led_priv ledpriv;
72199 -
72200 +
72201 #ifdef CONFIG_MP_INCLUDED
72202 struct mp_priv mppriv;
72203 #endif
72204 @@ -423,17 +478,17 @@ struct _ADAPTER{
72205 #ifdef CONFIG_DRVEXT_MODULE
72206 struct drvext_priv drvextpriv;
72207 #endif
72208 -
72209 +
72210 #ifdef CONFIG_AP_MODE
72211 - struct hostapd_priv *phostapdpriv;
72212 + struct hostapd_priv *phostapdpriv;
72213 #endif
72214
72215 #ifdef CONFIG_IOCTL_CFG80211
72216 #ifdef CONFIG_P2P
72217 struct cfg80211_wifidirect_info cfg80211_wdinfo;
72218 -#endif //CONFIG_IOCTL_CFG80211
72219 #endif //CONFIG_P2P
72220 -
72221 +#endif //CONFIG_IOCTL_CFG80211
72222 + u32 setband;
72223 #ifdef CONFIG_P2P
72224 struct wifidirect_info wdinfo;
72225 #endif //CONFIG_P2P
72226 @@ -442,6 +497,10 @@ struct _ADAPTER{
72227 struct tdls_info tdlsinfo;
72228 #endif //CONFIG_TDLS
72229
72230 +#ifdef CONFIG_WFD
72231 + struct wifi_display_info wfd_info;
72232 +#endif //CONFIG_WFD
72233 +
72234 PVOID HalData;
72235 u32 hal_data_sz;
72236 struct hal_ops HalFunc;
72237 @@ -449,27 +508,28 @@ struct _ADAPTER{
72238 #ifdef CONFIG_BT_COEXIST
72239 //struct btcoexist_priv bt_coexist;
72240 #endif
72241 - s32 bDriverStopped;
72242 + s32 bDriverStopped;
72243 s32 bSurpriseRemoved;
72244 s32 bCardDisableWOHSM;
72245
72246 u32 IsrContent;
72247 - u32 ImrContent;
72248 + u32 ImrContent;
72249
72250 u8 EepromAddressSize;
72251 u8 hw_init_completed;
72252 + u8 bDriverIsGoingToUnload;
72253 u8 init_adpt_in_progress;
72254 - u8 bfirst_init;
72255 u8 bHaltInProgress;
72256 -
72257 - _thread_hdl_ cmdThread;
72258 - _thread_hdl_ evtThread;
72259 - _thread_hdl_ xmitThread;
72260 - _thread_hdl_ recvThread;
72261 -
72262
72263 - NDIS_STATUS (*dvobj_init)(_adapter * adapter);
72264 - void (*dvobj_deinit)(_adapter * adapter);
72265 + _thread_hdl_ cmdThread;
72266 + _thread_hdl_ evtThread;
72267 + _thread_hdl_ xmitThread;
72268 + _thread_hdl_ recvThread;
72269 +
72270 +#ifndef PLATFORM_LINUX
72271 + NDIS_STATUS (*dvobj_init)(struct dvobj_priv *dvobj);
72272 + void (*dvobj_deinit)(struct dvobj_priv *dvobj);
72273 +#endif
72274
72275 void (*intf_start)(_adapter * adapter);
72276 void (*intf_stop)(_adapter * adapter);
72277 @@ -479,13 +539,13 @@ struct _ADAPTER{
72278 _nic_hdl hndis_config;//hNdisConfiguration;
72279 NDIS_STRING fw_img;
72280
72281 - u32 NdisPacketFilter;
72282 + u32 NdisPacketFilter;
72283 u8 MCList[MAX_MCAST_LIST_NUM][6];
72284 - u32 MCAddrCount;
72285 + u32 MCAddrCount;
72286 #endif //end of PLATFORM_WINDOWS
72287
72288
72289 -#ifdef PLATFORM_LINUX
72290 +#ifdef PLATFORM_LINUX
72291 _nic_hdl pnetdev;
72292
72293 // used by rtw_rereg_nd_name related function
72294 @@ -495,28 +555,71 @@ struct _ADAPTER{
72295 u8 old_ips_mode;
72296 u8 old_bRegUseLed;
72297 } rereg_nd_name_priv;
72298 -
72299 +
72300 int bup;
72301 struct net_device_stats stats;
72302 struct iw_statistics iwstats;
72303 struct proc_dir_entry *dir_dev;// for proc directory
72304
72305 -
72306 #ifdef CONFIG_IOCTL_CFG80211
72307 struct wireless_dev *rtw_wdev;
72308 #endif //CONFIG_IOCTL_CFG80211
72309 -
72310 +
72311 #endif //end of PLATFORM_LINUX
72312
72313 +#ifdef PLATFORM_FREEBSD
72314 + _nic_hdl pifp;
72315 + int bup;
72316 + _lock glock;
72317 +#endif //PLATFORM_FREEBSD
72318 int net_closed;
72319
72320 u8 bFWReady;
72321 u8 bReadPortCancel;
72322 u8 bWritePortCancel;
72323 u8 bRxRSSIDisplay;
72324 + // Added by Albert 2012/07/26
72325 + // The driver will write the initial gain everytime when running in the DM_Write_DIG function.
72326 + u8 bForceWriteInitGain;
72327 + // Added by Albert 2012/10/26
72328 + // The driver will show up the desired channel number when this flag is 1.
72329 + u8 bNotifyChannelChange;
72330 +#ifdef CONFIG_P2P
72331 + // Added by Albert 2012/12/06
72332 + // The driver will show the current P2P status when the upper application reads it.
72333 + u8 bShowGetP2PState;
72334 +#endif
72335 #ifdef CONFIG_AUTOSUSPEND
72336 u8 bDisableAutosuspend;
72337 #endif
72338 +
72339 + //pbuddy_adapter is used only in two inteface case, (iface_nums=2 in struct dvobj_priv)
72340 + //PRIMARY_ADAPTER's buddy is SECONDARY_ADAPTER
72341 + //SECONDARY_ADAPTER's buddy is PRIMARY_ADAPTER
72342 + //for iface_id > SECONDARY_ADAPTER(IFACE_ID1), refer to padapters[iface_id] in struct dvobj_priv
72343 + //and their pbuddy_adapter is PRIMARY_ADAPTER.
72344 + //for PRIMARY_ADAPTER(IFACE_ID0) can directly refer to if1 in struct dvobj_priv
72345 + _adapter *pbuddy_adapter;
72346 +
72347 +#if defined(CONFIG_CONCURRENT_MODE) || defined(CONFIG_DUALMAC_CONCURRENT)
72348 + u8 isprimary; //is primary adapter or not
72349 + //notes:
72350 + // if isprimary is true, the adapter_type value is 0, iface_id is IFACE_ID0 for PRIMARY_ADAPTER
72351 + // if isprimary is false, the adapter_type value is 1, iface_id is IFACE_ID1 for SECONDARY_ADAPTER
72352 + // refer to iface_id if iface_nums>2 and isprimary is false and the adapter_type value is 0xff.
72353 + u8 adapter_type;//used only in two inteface case(PRIMARY_ADAPTER and SECONDARY_ADAPTER) .
72354 + u8 iface_type; //interface port type, it depends on HW port
72355 +#endif
72356 +
72357 + //extend to support multi interface
72358 + //IFACE_ID0 is equals to PRIMARY_ADAPTER
72359 + //IFACE_ID1 is equals to SECONDARY_ADAPTER
72360 + u8 iface_id;
72361 +
72362 +#ifdef CONFIG_DUALMAC_CONCURRENT
72363 + u8 DualMacConcurrent; // 1: DMSP 0:DMDP
72364 +#endif
72365 +
72366 #ifdef CONFIG_BR_EXT
72367 _lock br_ext_lock;
72368 //unsigned int macclone_completed;
72369 @@ -528,7 +631,7 @@ struct _ADAPTER{
72370 struct nat25_network_db_entry *scdb_entry;
72371 unsigned char br_mac[MACADDRLEN];
72372 unsigned char br_ip[4];
72373 -
72374 +
72375 struct br_ext_info ethBrExtInfo;
72376 #endif // CONFIG_BR_EXT
72377
72378 @@ -545,6 +648,10 @@ struct _ADAPTER{
72379
72380 };
72381
72382 +#define adapter_to_dvobj(adapter) (adapter->dvobj)
72383 +
72384 +int rtw_handle_dualmac(_adapter *adapter, bool init);
72385 +
72386 __inline static u8 *myid(struct eeprom_priv *peepriv)
72387 {
72388 return (peepriv->mac_addr);
72389 --- /dev/null
72390 +++ b/drivers/net/wireless/rtl8192cu/include/drv_types_sdio.h
72391 @@ -0,0 +1,70 @@
72392 +/******************************************************************************
72393 + *
72394 + * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
72395 + *
72396 + * This program is free software; you can redistribute it and/or modify it
72397 + * under the terms of version 2 of the GNU General Public License as
72398 + * published by the Free Software Foundation.
72399 + *
72400 + * This program is distributed in the hope that it will be useful, but WITHOUT
72401 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
72402 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
72403 + * more details.
72404 + *
72405 + * You should have received a copy of the GNU General Public License along with
72406 + * this program; if not, write to the Free Software Foundation, Inc.,
72407 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
72408 + *
72409 + *
72410 + ******************************************************************************/
72411 +#ifndef __DRV_TYPES_SDIO_H__
72412 +#define __DRV_TYPES_SDIO_H__
72413 +
72414 +#include <drv_conf.h>
72415 +#include <basic_types.h>
72416 +
72417 +// SDIO Header Files
72418 +#ifdef PLATFORM_LINUX
72419 +#include <linux/mmc/sdio_func.h>
72420 +#endif
72421 +#ifdef PLATFORM_OS_XP
72422 +#include <wdm.h>
72423 +#include <ntddsd.h>
72424 +#endif
72425 +#ifdef PLATFORM_OS_CE
72426 +#include <sdcardddk.h>
72427 +#endif
72428 +
72429 +
72430 +typedef struct sdio_data
72431 +{
72432 + u8 func_number;
72433 +
72434 + u8 tx_block_mode;
72435 + u8 rx_block_mode;
72436 + u32 block_transfer_len;
72437 +
72438 +#ifdef PLATFORM_LINUX
72439 + struct sdio_func *func;
72440 +#endif
72441 +
72442 +#ifdef PLATFORM_OS_XP
72443 + PDEVICE_OBJECT pphysdevobj;
72444 + PDEVICE_OBJECT pfuncdevobj;
72445 + PDEVICE_OBJECT pnextdevobj;
72446 + SDBUS_INTERFACE_STANDARD sdbusinft;
72447 + u8 nextdevstacksz;
72448 +#endif
72449 +
72450 +#ifdef PLATFORM_OS_CE
72451 + SD_DEVICE_HANDLE hDevice;
72452 + SD_CARD_RCA sd_rca;
72453 + SD_CARD_INTERFACE card_intf;
72454 + BOOLEAN enableIsarWithStatus;
72455 + WCHAR active_path[MAX_ACTIVE_REG_PATH];
72456 + SD_HOST_BLOCK_CAPABILITY sd_host_blk_cap;
72457 +#endif
72458 +} SDIO_DATA, *PSDIO_DATA;
72459 +
72460 +#endif
72461 +
72462 --- a/drivers/net/wireless/rtl8192cu/include/farray.h
72463 +++ /dev/null
72464 @@ -1,31480 +0,0 @@
72465 -unsigned char f_array[125912] = {
72466 -0x12,0x87,0x09,0x10,
72467 -0x30,0x00,0x00,0x00,
72468 -0x08,0xF8,0x00,0x00,
72469 -0x50,0xF3,0x00,0x00,
72470 -0x30,0x00,0x00,0x00,
72471 -0xB8,0xF1,0x00,0x00,
72472 -0x00,0x00,0x00,0x00,
72473 -0x10,0x27,0x17,0x41,
72474 -0x87,0x12,0x12,0x01,
72475 -0x00,0x00,0x12,0x06,
72476 -0x00,0x00,0x00,0x00,
72477 -0x00,0x07,0x00,0x00,
72478 -0x00,0x00,0x00,0x00,
72479 -0x00,0x00,0x00,0x00,
72480 -0x01,0x01,0x00,0x01,
72481 -0x01,0x01,0x00,0x00,
72482 -0x01,0x00,0x01,0x00,
72483 -0x00,0x00,0x01,0x01,
72484 -0x00,0x00,0x00,0x00,
72485 -0x00,0x00,0x00,0x00,
72486 -0x7F,0x00,0x00,0x10,
72487 -0x00,0x00,0x00,0x00,
72488 -0x00,0x00,0x00,0x00,
72489 -0x00,0x00,0x00,0x00,
72490 -0x00,0x00,0x00,0x00,
72491 -0x00,0x00,0x00,0x00,
72492 -0x00,0x00,0x00,0x00,
72493 -0x00,0x00,0x00,0x00,
72494 -0x00,0x00,0x00,0x00,
72495 -0x00,0x00,0x00,0x00,
72496 -0x00,0x00,0x00,0x00,
72497 -0x00,0x00,0x00,0x00,
72498 -0x00,0x00,0x00,0x00,
72499 -0x00,0x00,0x00,0x00,
72500 -0x00,0x00,0x00,0x00,
72501 -0x00,0x00,0x00,0x00,
72502 -0x00,0x00,0x00,0x00,
72503 -0x00,0x00,0x00,0x00,
72504 -0x00,0x00,0x00,0x00,
72505 -0x00,0x00,0x00,0x00,
72506 -0x00,0x00,0x00,0x00,
72507 -0x00,0x00,0x00,0x00,
72508 -0x00,0x00,0x00,0x00,
72509 -0x00,0x00,0x00,0x00,
72510 -0x00,0x00,0x00,0x00,
72511 -0x00,0x00,0x00,0x00,
72512 -0x00,0x00,0x00,0x00,
72513 -0x00,0x00,0x00,0x00,
72514 -0x00,0x00,0x00,0x00,
72515 -0x00,0x00,0x00,0x00,
72516 -0x00,0x00,0x00,0x00,
72517 -0x00,0x00,0x00,0x00,
72518 -0x1F,0x00,0x00,0x10,
72519 -0x00,0x00,0x00,0x00,
72520 -0x00,0x00,0x00,0x00,
72521 -0x00,0x00,0x00,0x00,
72522 -0x00,0x00,0x00,0x00,
72523 -0x00,0x00,0x00,0x00,
72524 -0x00,0x00,0x00,0x00,
72525 -0x00,0x00,0x00,0x00,
72526 -0x00,0x00,0x00,0x00,
72527 -0x00,0x00,0x00,0x00,
72528 -0x00,0x00,0x00,0x00,
72529 -0x00,0x00,0x00,0x00,
72530 -0x00,0x00,0x00,0x00,
72531 -0x00,0x00,0x00,0x00,
72532 -0x00,0x00,0x00,0x00,
72533 -0x00,0x00,0x00,0x00,
72534 -0x00,0x00,0x00,0x00,
72535 -0x00,0x00,0x00,0x00,
72536 -0x00,0x00,0x00,0x00,
72537 -0x00,0x00,0x00,0x00,
72538 -0x00,0x00,0x00,0x00,
72539 -0x00,0x00,0x00,0x00,
72540 -0x00,0x00,0x00,0x00,
72541 -0x00,0x00,0x00,0x00,
72542 -0x00,0x00,0x00,0x00,
72543 -0x00,0x00,0x00,0x00,
72544 -0x00,0x00,0x00,0x00,
72545 -0x00,0x00,0x00,0x00,
72546 -0x00,0x00,0x00,0x00,
72547 -0x00,0x00,0x00,0x00,
72548 -0x00,0x00,0x00,0x00,
72549 -0x00,0x00,0x00,0x00,
72550 -0x25,0xB0,0x1A,0x3C,
72551 -0x80,0x03,0x5A,0x37,
72552 -0x00,0x80,0x1B,0x3C,
72553 -0x80,0x00,0x7B,0x37,
72554 -0x00,0x00,0x5B,0xAF,
72555 -0x25,0xB0,0x1A,0x3C,
72556 -0x18,0x03,0x5A,0x37,
72557 -0x00,0x80,0x1B,0x3C,
72558 -0x80,0x00,0x7B,0x37,
72559 -0x00,0x00,0x5B,0xAF,
72560 -0x01,0x80,0x1A,0x3C,
72561 -0x90,0xEE,0x5A,0x27,
72562 -0x08,0x00,0x40,0x03,
72563 -0x00,0x00,0x00,0x00,
72564 -0x00,0x00,0x00,0x00,
72565 -0x00,0x00,0x00,0x00,
72566 -0x00,0x00,0x00,0x00,
72567 -0x00,0x00,0x00,0x00,
72568 -0x00,0x00,0x00,0x00,
72569 -0x00,0x00,0x00,0x00,
72570 -0x00,0x00,0x00,0x00,
72571 -0x00,0x00,0x00,0x00,
72572 -0x00,0x00,0x00,0x00,
72573 -0x00,0x00,0x00,0x00,
72574 -0x00,0x00,0x00,0x00,
72575 -0x00,0x00,0x00,0x00,
72576 -0x00,0x00,0x00,0x00,
72577 -0x00,0x00,0x00,0x00,
72578 -0x00,0x00,0x00,0x00,
72579 -0x00,0x00,0x00,0x00,
72580 -0x00,0x00,0x00,0x00,
72581 -0x00,0x00,0x00,0x00,
72582 -0x00,0x00,0x00,0x00,
72583 -0x00,0x00,0x00,0x00,
72584 -0x00,0x00,0x00,0x00,
72585 -0x00,0x00,0x00,0x00,
72586 -0x00,0x00,0x00,0x00,
72587 -0x00,0x00,0x00,0x00,
72588 -0x00,0x00,0x00,0x00,
72589 -0x00,0x00,0x00,0x00,
72590 -0x00,0x00,0x00,0x00,
72591 -0x00,0x00,0x00,0x00,
72592 -0x00,0x00,0x00,0x00,
72593 -0x00,0x00,0x00,0x00,
72594 -0x00,0x00,0x00,0x00,
72595 -0x00,0x00,0x00,0x00,
72596 -0x00,0x00,0x00,0x00,
72597 -0x00,0x00,0x00,0x00,
72598 -0x00,0x00,0x00,0x00,
72599 -0x00,0x00,0x00,0x00,
72600 -0x00,0x00,0x00,0x00,
72601 -0x00,0x00,0x00,0x00,
72602 -0x00,0x00,0x00,0x00,
72603 -0x00,0x00,0x00,0x00,
72604 -0x00,0x00,0x00,0x00,
72605 -0x00,0x00,0x00,0x00,
72606 -0x00,0x00,0x00,0x00,
72607 -0x00,0x00,0x00,0x00,
72608 -0x00,0x00,0x00,0x00,
72609 -0x00,0x00,0x00,0x00,
72610 -0x00,0x00,0x00,0x00,
72611 -0x00,0x00,0x00,0x00,
72612 -0x00,0x00,0x00,0x00,
72613 -0x00,0x00,0x00,0x00,
72614 -0x04,0x00,0xA1,0xAF,
72615 -0x08,0x00,0xA2,0xAF,
72616 -0x0C,0x00,0xA3,0xAF,
72617 -0x10,0x00,0xA4,0xAF,
72618 -0x14,0x00,0xA5,0xAF,
72619 -0x18,0x00,0xA6,0xAF,
72620 -0x1C,0x00,0xA7,0xAF,
72621 -0x20,0x00,0xA8,0xAF,
72622 -0x24,0x00,0xA9,0xAF,
72623 -0x28,0x00,0xAA,0xAF,
72624 -0x2C,0x00,0xAB,0xAF,
72625 -0x30,0x00,0xAC,0xAF,
72626 -0x34,0x00,0xAD,0xAF,
72627 -0x38,0x00,0xAE,0xAF,
72628 -0x3C,0x00,0xAF,0xAF,
72629 -0x12,0x40,0x00,0x00,
72630 -0x10,0x48,0x00,0x00,
72631 -0x00,0x70,0x0A,0x40,
72632 -0x40,0x00,0xB0,0xAF,
72633 -0x44,0x00,0xB1,0xAF,
72634 -0x48,0x00,0xB2,0xAF,
72635 -0x4C,0x00,0xB3,0xAF,
72636 -0x50,0x00,0xB4,0xAF,
72637 -0x54,0x00,0xB5,0xAF,
72638 -0x58,0x00,0xB6,0xAF,
72639 -0x5C,0x00,0xB7,0xAF,
72640 -0x60,0x00,0xB8,0xAF,
72641 -0x64,0x00,0xB9,0xAF,
72642 -0x68,0x00,0xBC,0xAF,
72643 -0x6C,0x00,0xBD,0xAF,
72644 -0x70,0x00,0xBE,0xAF,
72645 -0x74,0x00,0xBF,0xAF,
72646 -0x78,0x00,0xA8,0xAF,
72647 -0x7C,0x00,0xA9,0xAF,
72648 -0x80,0x00,0xAA,0xAF,
72649 -0x32,0x3B,0x00,0x08,
72650 -0x21,0x20,0xA0,0x03,
72651 -0x00,0x00,0x00,0x00,
72652 -0x00,0x00,0x00,0x00,
72653 -0x00,0x00,0x00,0x00,
72654 -0x00,0x00,0x00,0x00,
72655 -0x00,0x00,0x00,0x00,
72656 -0x00,0x00,0x00,0x00,
72657 -0x00,0x00,0x00,0x00,
72658 -0x00,0x00,0x00,0x00,
72659 -0x00,0x00,0x00,0x00,
72660 -0x00,0x00,0x00,0x00,
72661 -0x00,0x00,0x00,0x00,
72662 -0x00,0x00,0x00,0x00,
72663 -0x00,0x00,0x00,0x00,
72664 -0x00,0x00,0x00,0x00,
72665 -0x00,0x00,0x00,0x00,
72666 -0x00,0x00,0x00,0x00,
72667 -0x00,0x00,0x00,0x00,
72668 -0x00,0x00,0x00,0x00,
72669 -0x00,0x00,0x00,0x00,
72670 -0x00,0x00,0x00,0x00,
72671 -0x00,0x00,0x00,0x00,
72672 -0x00,0x00,0x00,0x00,
72673 -0x00,0x00,0x00,0x00,
72674 -0x00,0x00,0x00,0x00,
72675 -0x00,0x00,0x00,0x00,
72676 -0x00,0x00,0x00,0x00,
72677 -0x00,0x00,0x00,0x00,
72678 -0x25,0xB0,0x05,0x3C,
72679 -0x00,0x80,0x02,0x3C,
72680 -0xE0,0xFF,0xBD,0x27,
72681 -0x18,0x03,0xA3,0x34,
72682 -0x00,0x03,0x42,0x24,
72683 -0x18,0x00,0xBF,0xAF,
72684 -0x14,0x00,0xB1,0xAF,
72685 -0x10,0x00,0xB0,0xAF,
72686 -0x00,0x00,0x62,0xAC,
72687 -0x00,0x60,0x01,0x40,
72688 -0x01,0x00,0x21,0x34,
72689 -0x00,0x60,0x81,0x40,
72690 -0x42,0xB0,0x02,0x3C,
72691 -0x03,0x00,0x46,0x34,
72692 -0x00,0x00,0xC3,0x90,
72693 -0x00,0x00,0x00,0x00,
72694 -0xFF,0x00,0x70,0x30,
72695 -0x10,0x00,0x02,0x32,
72696 -0x18,0x00,0x40,0x10,
72697 -0x02,0x80,0x11,0x3C,
72698 -0x30,0x1F,0x27,0x26,
72699 -0x78,0x36,0xE4,0x94,
72700 -0x10,0x00,0x02,0x24,
72701 -0x00,0x00,0xC2,0xA0,
72702 -0x08,0x00,0x80,0x10,
72703 -0x1C,0x03,0xA3,0x34,
72704 -0x7C,0x36,0xE2,0x94,
72705 -0xB0,0x03,0xA4,0x34,
72706 -0x00,0x00,0x62,0xAC,
72707 -0x00,0x00,0x80,0xAC,
72708 -0x78,0x36,0xE0,0xA4,
72709 -0x7C,0x36,0xE0,0xA4,
72710 -0x00,0x00,0x04,0x24,
72711 -0x02,0x80,0x05,0x3C,
72712 -0x02,0x80,0x06,0x3C,
72713 -0x14,0x5E,0xA2,0x8C,
72714 -0x18,0x5F,0xC3,0x8C,
72715 -0x01,0x00,0x84,0x24,
72716 -0x01,0x00,0x42,0x24,
72717 -0x01,0x00,0x63,0x24,
72718 -0x78,0x36,0xE4,0xA4,
72719 -0x14,0x5E,0xA2,0xAC,
72720 -0x18,0x5F,0xC3,0xAC,
72721 -0x00,0x16,0x10,0x00,
72722 -0x03,0x16,0x02,0x00,
72723 -0x7B,0x00,0x40,0x04,
72724 -0x42,0xB0,0x02,0x3C,
72725 -0x00,0x60,0x01,0x40,
72726 -0x01,0x00,0x21,0x34,
72727 -0x01,0x00,0x21,0x38,
72728 -0x00,0x60,0x81,0x40,
72729 -0x40,0x00,0x02,0x32,
72730 -0x16,0x00,0x40,0x10,
72731 -0x30,0x1F,0x24,0x26,
72732 -0x42,0xB0,0x0B,0x3C,
72733 -0x03,0x00,0x62,0x35,
72734 -0x40,0x00,0x03,0x24,
72735 -0x00,0x00,0x43,0xA0,
72736 -0x02,0x80,0x03,0x3C,
72737 -0x12,0x5F,0x62,0x90,
72738 -0x00,0x00,0x00,0x00,
72739 -0x1A,0x00,0x40,0x10,
72740 -0x02,0x80,0x04,0x3C,
72741 -0x12,0x5F,0x60,0xA0,
72742 -0x02,0x80,0x04,0x3C,
72743 -0x0E,0x5F,0x83,0x90,
72744 -0xFD,0xFF,0x02,0x24,
72745 -0x24,0x18,0x62,0x00,
72746 -0x0E,0x5F,0x83,0xA0,
72747 -0x0E,0x5F,0x82,0x90,
72748 -0x00,0x00,0x00,0x00,
72749 -0x07,0x00,0x42,0x30,
72750 -0x5D,0x00,0x40,0x10,
72751 -0x02,0x80,0x02,0x3C,
72752 -0x30,0x1F,0x24,0x26,
72753 -0xE0,0x1B,0x83,0x94,
72754 -0xDC,0x1B,0x85,0x94,
72755 -0x18,0x00,0xBF,0x8F,
72756 -0x14,0x00,0xB1,0x8F,
72757 -0x10,0x00,0xB0,0x8F,
72758 -0x80,0x00,0x63,0x30,
72759 -0x41,0xB0,0x02,0x3C,
72760 -0x25,0x18,0x65,0x00,
72761 -0x08,0x00,0x42,0x34,
72762 -0x20,0x00,0xBD,0x27,
72763 -0x00,0x00,0x43,0xA4,
72764 -0x08,0x00,0xE0,0x03,
72765 -0xDC,0x1B,0x83,0xA4,
72766 -0xFA,0x5E,0x82,0x90,
72767 -0x02,0x80,0x05,0x3C,
72768 -0x01,0x00,0x42,0x24,
72769 -0xFA,0x5E,0x82,0xA0,
72770 -0x0E,0x5F,0xA3,0x90,
72771 -0xEF,0xFF,0x02,0x24,
72772 -0x24,0x18,0x62,0x00,
72773 -0x0E,0x5F,0xA3,0xA0,
72774 -0xFA,0x5E,0x82,0x90,
72775 -0x00,0x00,0x00,0x00,
72776 -0x02,0x00,0x42,0x2C,
72777 -0x32,0x00,0x40,0x10,
72778 -0x30,0x1F,0x23,0x26,
72779 -0x25,0xB0,0x06,0x3C,
72780 -0x84,0x00,0xC4,0x34,
72781 -0x80,0x00,0xC6,0x34,
72782 -0x00,0x00,0x82,0x8C,
72783 -0x00,0x00,0xC4,0x8C,
72784 -0x02,0x80,0x08,0x3C,
72785 -0x21,0x10,0x00,0x00,
72786 -0x1C,0x5F,0x06,0x8D,
72787 -0x25,0x10,0x44,0x00,
72788 -0x02,0x80,0x04,0x3C,
72789 -0x20,0x5F,0x88,0x8C,
72790 -0x24,0x5F,0x89,0x8C,
72791 -0x00,0x00,0x65,0x91,
72792 -0x21,0x10,0x46,0x00,
72793 -0xFB,0xFF,0x04,0x24,
72794 -0x24,0x28,0xA4,0x00,
72795 -0x23,0x40,0x02,0x01,
72796 -0x00,0x00,0x65,0xA1,
72797 -0x04,0x00,0x00,0x11,
72798 -0x01,0x00,0x06,0x24,
72799 -0x80,0x10,0x08,0x00,
72800 -0x21,0x10,0x48,0x00,
72801 -0x80,0x30,0x02,0x00,
72802 -0x01,0x00,0x04,0x24,
72803 -0x8C,0x23,0x00,0x0C,
72804 -0x21,0x28,0x00,0x00,
72805 -0x42,0xB0,0x02,0x3C,
72806 -0x22,0x00,0x04,0x24,
72807 -0x03,0x00,0x42,0x34,
72808 -0x00,0x00,0x44,0xA0,
72809 -0x02,0x80,0x03,0x3C,
72810 -0xF5,0x5E,0x64,0x90,
72811 -0x01,0x00,0x05,0x24,
72812 -0x64,0x31,0x00,0x0C,
72813 -0xFF,0x00,0x84,0x30,
72814 -0x30,0x1F,0x24,0x26,
72815 -0xE0,0x1B,0x83,0x94,
72816 -0xDC,0x1B,0x85,0x94,
72817 -0x18,0x00,0xBF,0x8F,
72818 -0x14,0x00,0xB1,0x8F,
72819 -0x10,0x00,0xB0,0x8F,
72820 -0x80,0x00,0x63,0x30,
72821 -0x41,0xB0,0x02,0x3C,
72822 -0x25,0x18,0x65,0x00,
72823 -0x08,0x00,0x42,0x34,
72824 -0x20,0x00,0xBD,0x27,
72825 -0x00,0x00,0x43,0xA4,
72826 -0x08,0x00,0xE0,0x03,
72827 -0xDC,0x1B,0x83,0xA4,
72828 -0xB0,0x1B,0x62,0x94,
72829 -0x00,0x00,0x00,0x00,
72830 -0x00,0x01,0x42,0x30,
72831 -0x16,0x00,0x40,0x10,
72832 -0x02,0x80,0x02,0x3C,
72833 -0x02,0x80,0x03,0x3C,
72834 -0x15,0x5F,0x62,0x90,
72835 -0x00,0x00,0x00,0x00,
72836 -0xAB,0xFF,0x40,0x14,
72837 -0x00,0x00,0x00,0x00,
72838 -0x15,0x5F,0x62,0x90,
72839 -0x00,0x00,0x00,0x00,
72840 -0x01,0x00,0x42,0x24,
72841 -0x15,0x5F,0x62,0xA0,
72842 -0x0B,0x01,0x00,0x08,
72843 -0x30,0x1F,0x24,0x26,
72844 -0x0C,0x5F,0x40,0xA0,
72845 -0x44,0x01,0x00,0x08,
72846 -0x02,0x80,0x03,0x3C,
72847 -0x80,0xFF,0x03,0x24,
72848 -0x03,0x00,0x42,0x34,
72849 -0x00,0x00,0x43,0xA0,
72850 -0x9E,0x25,0x00,0x0C,
72851 -0x00,0x00,0x00,0x00,
72852 -0xEF,0x00,0x00,0x08,
72853 -0x00,0x00,0x00,0x00,
72854 -0x15,0x5F,0x40,0xA0,
72855 -0x0B,0x01,0x00,0x08,
72856 -0x30,0x1F,0x24,0x26,
72857 -0xFF,0x00,0x84,0x30,
72858 -0x0B,0x00,0x82,0x2C,
72859 -0xFF,0xFF,0xE7,0x30,
72860 -0x10,0x00,0xA8,0x93,
72861 -0x19,0x00,0x40,0x10,
72862 -0x21,0x18,0x00,0x00,
72863 -0x02,0x80,0x03,0x3C,
72864 -0x80,0x10,0x04,0x00,
72865 -0xD8,0xE9,0x63,0x24,
72866 -0x21,0x10,0x43,0x00,
72867 -0x00,0x00,0x44,0x8C,
72868 -0x00,0x00,0x00,0x00,
72869 -0x08,0x00,0x80,0x00,
72870 -0x00,0x00,0x00,0x00,
72871 -0x43,0xB0,0x02,0x3C,
72872 -0x78,0x00,0x44,0x34,
72873 -0x07,0x00,0xE2,0x30,
72874 -0x00,0x00,0x85,0xAC,
72875 -0x04,0x00,0x86,0xAC,
72876 -0x04,0x00,0x40,0x18,
72877 -0x00,0x00,0x00,0x00,
72878 -0xF8,0xFF,0xE2,0x30,
72879 -0x08,0x00,0x42,0x24,
72880 -0xFF,0xFF,0x47,0x30,
72881 -0x21,0x10,0xE8,0x00,
72882 -0x00,0x80,0x03,0x3C,
72883 -0x08,0x00,0x82,0xAC,
72884 -0x25,0x10,0x43,0x00,
72885 -0x08,0x00,0x82,0xAC,
72886 -0x01,0x00,0x03,0x24,
72887 -0x08,0x00,0xE0,0x03,
72888 -0x21,0x10,0x60,0x00,
72889 -0x43,0xB0,0x02,0x3C,
72890 -0x83,0x01,0x00,0x08,
72891 -0x6C,0x00,0x44,0x34,
72892 -0x43,0xB0,0x02,0x3C,
72893 -0x83,0x01,0x00,0x08,
72894 -0x60,0x00,0x44,0x34,
72895 -0x43,0xB0,0x02,0x3C,
72896 -0x83,0x01,0x00,0x08,
72897 -0x54,0x00,0x44,0x34,
72898 -0x43,0xB0,0x02,0x3C,
72899 -0x83,0x01,0x00,0x08,
72900 -0x48,0x00,0x44,0x34,
72901 -0x43,0xB0,0x02,0x3C,
72902 -0x83,0x01,0x00,0x08,
72903 -0x3C,0x00,0x44,0x34,
72904 -0x43,0xB0,0x02,0x3C,
72905 -0x83,0x01,0x00,0x08,
72906 -0x30,0x00,0x44,0x34,
72907 -0x43,0xB0,0x02,0x3C,
72908 -0x83,0x01,0x00,0x08,
72909 -0x24,0x00,0x44,0x34,
72910 -0x43,0xB0,0x02,0x3C,
72911 -0x83,0x01,0x00,0x08,
72912 -0x18,0x00,0x44,0x34,
72913 -0x43,0xB0,0x02,0x3C,
72914 -0x83,0x01,0x00,0x08,
72915 -0x0C,0x00,0x44,0x34,
72916 -0x83,0x01,0x00,0x08,
72917 -0x43,0xB0,0x04,0x3C,
72918 -0x00,0x80,0x03,0x3C,
72919 -0x25,0xB0,0x02,0x3C,
72920 -0x18,0x03,0x42,0x34,
72921 -0xC0,0x06,0x63,0x24,
72922 -0x00,0x00,0x43,0xAC,
72923 -0x01,0x00,0x05,0x24,
72924 -0x43,0xB0,0x02,0x3C,
72925 -0x04,0x28,0x85,0x00,
72926 -0x88,0x00,0x44,0x34,
72927 -0x21,0x10,0x00,0x00,
72928 -0x01,0x00,0x42,0x24,
72929 -0xFF,0xFF,0x42,0x30,
72930 -0x05,0x00,0x43,0x2C,
72931 -0xFD,0xFF,0x60,0x14,
72932 -0x01,0x00,0x42,0x24,
72933 -0x00,0x00,0x82,0x94,
72934 -0x00,0x00,0x00,0x00,
72935 -0xFF,0xFF,0x42,0x30,
72936 -0x24,0x10,0x45,0x00,
72937 -0xF5,0xFF,0x40,0x1C,
72938 -0x00,0x00,0x00,0x00,
72939 -0x08,0x00,0xE0,0x03,
72940 -0x00,0x00,0x00,0x00,
72941 -0x25,0xB0,0x08,0x3C,
72942 -0x00,0x80,0x02,0x3C,
72943 -0xC8,0xFF,0xBD,0x27,
72944 -0x18,0x03,0x03,0x35,
72945 -0x1C,0x07,0x42,0x24,
72946 -0x00,0x00,0x62,0xAC,
72947 -0x30,0x00,0xB6,0xAF,
72948 -0x28,0x00,0xB4,0xAF,
72949 -0x24,0x00,0xB3,0xAF,
72950 -0x1C,0x00,0xB1,0xAF,
72951 -0x34,0x00,0xBF,0xAF,
72952 -0x2C,0x00,0xB5,0xAF,
72953 -0x20,0x00,0xB2,0xAF,
72954 -0x18,0x00,0xB0,0xAF,
72955 -0x0C,0x00,0xF2,0x84,
72956 -0x08,0x00,0xF5,0x8C,
72957 -0xFF,0x00,0xC6,0x30,
72958 -0x00,0x01,0x02,0x24,
72959 -0x23,0x10,0x46,0x00,
72960 -0xFF,0xFF,0x51,0x30,
72961 -0xD0,0x03,0x08,0x35,
72962 -0xFF,0x00,0x96,0x30,
72963 -0x00,0x00,0x12,0xAD,
72964 -0x21,0xA0,0xA0,0x00,
72965 -0x21,0x30,0xC5,0x00,
72966 -0x00,0x00,0x15,0xAD,
72967 -0x21,0x20,0xC0,0x02,
72968 -0x21,0x28,0xA0,0x02,
72969 -0x21,0x38,0x20,0x02,
72970 -0x73,0x01,0x00,0x0C,
72971 -0x10,0x00,0xA0,0xAF,
72972 -0x23,0x18,0x51,0x02,
72973 -0xFF,0xFF,0x82,0x32,
72974 -0x00,0x94,0x03,0x00,
72975 -0x03,0x94,0x12,0x00,
72976 -0x09,0x02,0x00,0x08,
72977 -0x02,0x9A,0x02,0x00,
72978 -0x28,0xB0,0x03,0x3C,
72979 -0xC0,0x10,0x13,0x00,
72980 -0x21,0x10,0x43,0x00,
72981 -0x00,0x00,0x44,0x90,
72982 -0x25,0xB0,0x10,0x3C,
72983 -0x20,0x10,0x02,0x3C,
72984 -0xFF,0x00,0x93,0x30,
72985 -0x00,0x22,0x13,0x00,
72986 -0xFF,0xFF,0x43,0x32,
72987 -0x01,0x01,0x45,0x2A,
72988 -0x21,0xA0,0x82,0x00,
72989 -0x21,0xA8,0xB1,0x02,
72990 -0xD0,0x03,0x02,0x36,
72991 -0x00,0x01,0x11,0x24,
72992 -0x0B,0x88,0x65,0x00,
72993 -0x21,0x20,0xC0,0x02,
72994 -0x00,0x00,0x53,0xAC,
72995 -0xB0,0x01,0x00,0x0C,
72996 -0xB0,0x03,0x10,0x36,
72997 -0x21,0x30,0x80,0x02,
72998 -0x21,0x20,0xC0,0x02,
72999 -0x21,0x28,0xA0,0x02,
73000 -0x21,0x38,0x20,0x02,
73001 -0x73,0x01,0x00,0x0C,
73002 -0x10,0x00,0xA0,0xAF,
73003 -0x23,0x18,0x51,0x02,
73004 -0x00,0x94,0x03,0x00,
73005 -0x03,0x94,0x12,0x00,
73006 -0x00,0x00,0x12,0xAE,
73007 -0xE2,0xFF,0x40,0x1E,
73008 -0x00,0x00,0x00,0x00,
73009 -0x34,0x00,0xBF,0x8F,
73010 -0x30,0x00,0xB6,0x8F,
73011 -0x2C,0x00,0xB5,0x8F,
73012 -0x28,0x00,0xB4,0x8F,
73013 -0x24,0x00,0xB3,0x8F,
73014 -0x20,0x00,0xB2,0x8F,
73015 -0x1C,0x00,0xB1,0x8F,
73016 -0x18,0x00,0xB0,0x8F,
73017 -0x08,0x00,0xE0,0x03,
73018 -0x38,0x00,0xBD,0x27,
73019 -0xD8,0xFF,0xBD,0x27,
73020 -0x20,0x00,0xB2,0xAF,
73021 -0x18,0x00,0xB0,0xAF,
73022 -0x24,0x00,0xBF,0xAF,
73023 -0x1C,0x00,0xB1,0xAF,
73024 -0x04,0x00,0x8B,0x8C,
73025 -0x21,0x80,0x80,0x00,
73026 -0x08,0x00,0x84,0x8C,
73027 -0x0E,0x00,0x07,0x96,
73028 -0xFF,0xE0,0x02,0x3C,
73029 -0x10,0x00,0x08,0x8E,
73030 -0x1F,0x00,0x6A,0x31,
73031 -0xFF,0xFF,0x42,0x34,
73032 -0x24,0x20,0x82,0x00,
73033 -0x00,0x1E,0x0A,0x00,
73034 -0x25,0x48,0x83,0x00,
73035 -0x21,0x90,0xA0,0x00,
73036 -0x21,0x60,0xC0,0x00,
73037 -0x10,0x01,0x00,0x05,
73038 -0x07,0x00,0xE7,0x30,
73039 -0x00,0x00,0x02,0x96,
73040 -0x00,0x00,0x00,0x00,
73041 -0xFD,0x0F,0x42,0x28,
73042 -0xC0,0x00,0x40,0x14,
73043 -0x02,0x80,0x11,0x3C,
73044 -0xFF,0xDF,0x02,0x3C,
73045 -0xFF,0xFF,0x42,0x34,
73046 -0x24,0x48,0x22,0x01,
73047 -0x1C,0x00,0x02,0x8E,
73048 -0x00,0x40,0x03,0x3C,
73049 -0x25,0x48,0x23,0x01,
73050 -0x02,0x80,0x11,0x3C,
73051 -0xC5,0x00,0x40,0x04,
73052 -0x08,0x00,0x09,0xAE,
73053 -0xC0,0x30,0x0A,0x00,
73054 -0x21,0x10,0xCA,0x00,
73055 -0x80,0x10,0x02,0x00,
73056 -0x21,0x10,0x4A,0x00,
73057 -0x80,0x10,0x02,0x00,
73058 -0x30,0x1F,0x27,0x26,
73059 -0x21,0x28,0x47,0x00,
73060 -0x1C,0x24,0xA3,0x8C,
73061 -0x01,0x00,0x0A,0x24,
73062 -0x02,0x13,0x03,0x00,
73063 -0x01,0x00,0x42,0x30,
73064 -0xDB,0x00,0x4A,0x10,
73065 -0x42,0x18,0x03,0x00,
73066 -0x82,0x11,0x09,0x00,
73067 -0x01,0x00,0x42,0x30,
73068 -0x06,0x00,0x40,0x14,
73069 -0x02,0x80,0x02,0x3C,
73070 -0xC0,0xFF,0x02,0x24,
73071 -0x24,0x10,0x22,0x01,
73072 -0x04,0x00,0x49,0x34,
73073 -0x08,0x00,0x09,0xAE,
73074 -0x02,0x80,0x02,0x3C,
73075 -0xE9,0x5D,0x43,0x90,
73076 -0x00,0x00,0x00,0x00,
73077 -0x6C,0x00,0x60,0x14,
73078 -0x21,0x28,0xC7,0x00,
73079 -0xE8,0x22,0xA4,0x8C,
73080 -0x10,0x00,0x02,0x8E,
73081 -0xBF,0xFF,0x03,0x24,
73082 -0x40,0x00,0x84,0x30,
73083 -0x24,0x10,0x43,0x00,
73084 -0x25,0x40,0x44,0x00,
73085 -0x10,0x00,0x08,0xAE,
73086 -0xE8,0x22,0xA3,0x8C,
73087 -0x7F,0xF8,0x02,0x24,
73088 -0x24,0x10,0x02,0x01,
73089 -0x80,0x07,0x63,0x30,
73090 -0x42,0x27,0x09,0x00,
73091 -0x25,0x40,0x43,0x00,
73092 -0x01,0x00,0x84,0x30,
73093 -0xE1,0x00,0x8A,0x10,
73094 -0x10,0x00,0x08,0xAE,
73095 -0x30,0x1F,0x24,0x26,
73096 -0x21,0x20,0xC4,0x00,
73097 -0xE8,0x22,0x83,0x8C,
73098 -0xFF,0xF7,0x02,0x24,
73099 -0x24,0x10,0x02,0x01,
73100 -0x00,0x08,0x63,0x30,
73101 -0x25,0x40,0x43,0x00,
73102 -0x10,0x00,0x08,0xAE,
73103 -0xE8,0x22,0x83,0x8C,
73104 -0xFF,0xEF,0x02,0x24,
73105 -0x24,0x10,0x02,0x01,
73106 -0x00,0x10,0x63,0x30,
73107 -0x30,0x1F,0x25,0x26,
73108 -0x25,0x40,0x43,0x00,
73109 -0x10,0x00,0x08,0xAE,
73110 -0x21,0x30,0xC5,0x00,
73111 -0xE8,0x22,0xC4,0x8C,
73112 -0xFD,0xFF,0x02,0x3C,
73113 -0x02,0x00,0x03,0x3C,
73114 -0xFF,0xFF,0x42,0x34,
73115 -0x24,0x20,0x83,0x00,
73116 -0x24,0x10,0x02,0x01,
73117 -0x25,0x40,0x44,0x00,
73118 -0x10,0x00,0x08,0xAE,
73119 -0xB0,0x1B,0xA3,0x94,
73120 -0xFB,0xFF,0x02,0x3C,
73121 -0xFF,0xFF,0x42,0x34,
73122 -0xC2,0x1B,0x03,0x00,
73123 -0x24,0x10,0x02,0x01,
73124 -0x80,0x1C,0x03,0x00,
73125 -0x25,0x40,0x43,0x00,
73126 -0x10,0x00,0x08,0xAE,
73127 -0x8F,0x3E,0xA3,0x90,
73128 -0xE7,0xFF,0x02,0x3C,
73129 -0xFF,0xFF,0x42,0x34,
73130 -0x03,0x00,0x63,0x30,
73131 -0x24,0x10,0x02,0x01,
73132 -0xC0,0x1C,0x03,0x00,
73133 -0x25,0x40,0x43,0x00,
73134 -0x10,0x00,0x08,0xAE,
73135 -0xE8,0x22,0xC4,0x8C,
73136 -0xFF,0xFD,0x02,0x3C,
73137 -0x00,0x02,0x03,0x3C,
73138 -0xFF,0xFF,0x42,0x34,
73139 -0x24,0x20,0x83,0x00,
73140 -0x24,0x10,0x02,0x01,
73141 -0x25,0x40,0x44,0x00,
73142 -0x10,0x00,0x08,0xAE,
73143 -0xB0,0x1B,0xA3,0x94,
73144 -0xFF,0xFB,0x02,0x3C,
73145 -0xFF,0xFF,0x42,0x34,
73146 -0xC2,0x1B,0x03,0x00,
73147 -0x24,0x10,0x02,0x01,
73148 -0x80,0x1E,0x03,0x00,
73149 -0x25,0x40,0x43,0x00,
73150 -0x10,0x00,0x08,0xAE,
73151 -0x8F,0x3E,0xA3,0x90,
73152 -0xFF,0xE7,0x02,0x3C,
73153 -0xFF,0xFF,0x42,0x34,
73154 -0x03,0x00,0x63,0x30,
73155 -0x24,0x10,0x02,0x01,
73156 -0xC0,0x1E,0x03,0x00,
73157 -0x25,0x40,0x43,0x00,
73158 -0x10,0x00,0x08,0xAE,
73159 -0xE8,0x22,0xC3,0x8C,
73160 -0xC0,0xFF,0x02,0x24,
73161 -0x24,0x10,0x02,0x01,
73162 -0x3F,0x00,0x63,0x30,
73163 -0x25,0x10,0x43,0x00,
73164 -0x10,0x00,0x02,0xAE,
73165 -0xEC,0x22,0xC5,0x8C,
73166 -0x14,0x00,0x03,0x8E,
73167 -0xFF,0xFF,0x04,0x3C,
73168 -0xFF,0x7F,0x84,0x34,
73169 -0x24,0x18,0x64,0x00,
73170 -0x00,0x80,0xA5,0x30,
73171 -0x25,0x18,0x65,0x00,
73172 -0x14,0x00,0x03,0xAE,
73173 -0xEC,0x22,0xC2,0x8C,
73174 -0x24,0x18,0x64,0x00,
73175 -0x00,0x80,0x42,0x30,
73176 -0x25,0x18,0x62,0x00,
73177 -0x14,0x00,0x03,0xAE,
73178 -0xEE,0x22,0xC4,0x94,
73179 -0xE0,0xFF,0x02,0x3C,
73180 -0xFF,0xFF,0x42,0x34,
73181 -0x1F,0x00,0x84,0x30,
73182 -0x24,0x18,0x62,0x00,
73183 -0x00,0x24,0x04,0x00,
73184 -0x25,0x18,0x64,0x00,
73185 -0x14,0x00,0x03,0xAE,
73186 -0x02,0x00,0x02,0x92,
73187 -0x02,0x24,0x0B,0x00,
73188 -0x02,0x80,0x03,0x3C,
73189 -0x21,0x10,0x4C,0x00,
73190 -0xFF,0xFF,0x42,0x30,
73191 -0x01,0x00,0x84,0x30,
73192 -0x6A,0x00,0x80,0x10,
73193 -0x25,0x30,0x43,0x00,
73194 -0x30,0x1F,0x23,0x26,
73195 -0xF8,0x1D,0x62,0x94,
73196 -0x00,0x00,0x00,0x00,
73197 -0xFF,0x0F,0x45,0x30,
73198 -0x01,0x00,0x42,0x24,
73199 -0xF8,0x1D,0x62,0xA4,
73200 -0x0C,0x00,0x03,0x8E,
73201 -0x00,0xF0,0x02,0x3C,
73202 -0xFF,0xFF,0x42,0x34,
73203 -0x00,0x24,0x05,0x00,
73204 -0x24,0x18,0x62,0x00,
73205 -0x25,0x18,0x64,0x00,
73206 -0x0C,0x00,0x03,0xAE,
73207 -0x16,0x00,0xC2,0x94,
73208 -0x00,0x19,0x05,0x00,
73209 -0x02,0x00,0x04,0x24,
73210 -0x0F,0x00,0x42,0x30,
73211 -0x25,0x10,0x43,0x00,
73212 -0x16,0x00,0xC2,0xA4,
73213 -0x21,0x28,0x80,0x01,
73214 -0x21,0x30,0x40,0x02,
73215 -0x80,0x00,0x07,0x24,
73216 -0x01,0x00,0x02,0x24,
73217 -0x73,0x01,0x00,0x0C,
73218 -0x10,0x00,0xA2,0xAF,
73219 -0x25,0xB0,0x02,0x3C,
73220 -0xB0,0x03,0x42,0x34,
73221 -0x00,0x00,0x52,0xAC,
73222 -0xB0,0x01,0x00,0x0C,
73223 -0x02,0x00,0x04,0x24,
73224 -0x30,0x1F,0x24,0x26,
73225 -0x00,0x00,0x03,0x96,
73226 -0x94,0x3E,0x82,0x8C,
73227 -0x24,0x00,0xBF,0x8F,
73228 -0x20,0x00,0xB2,0x8F,
73229 -0x1C,0x00,0xB1,0x8F,
73230 -0x18,0x00,0xB0,0x8F,
73231 -0x21,0x10,0x43,0x00,
73232 -0x28,0x00,0xBD,0x27,
73233 -0x08,0x00,0xE0,0x03,
73234 -0x94,0x3E,0x82,0xAC,
73235 -0x08,0x00,0x09,0xAE,
73236 -0x30,0x1F,0x22,0x26,
73237 -0x1A,0x3E,0x43,0x90,
73238 -0xFF,0xDF,0x02,0x3C,
73239 -0xFF,0xFF,0x42,0x34,
73240 -0x07,0x18,0xE3,0x00,
73241 -0x01,0x00,0x63,0x30,
73242 -0x24,0x10,0x22,0x01,
73243 -0x40,0x1F,0x03,0x00,
73244 -0x25,0x48,0x43,0x00,
73245 -0x1C,0x00,0x02,0x8E,
73246 -0x00,0x00,0x00,0x00,
73247 -0x3D,0xFF,0x41,0x04,
73248 -0x08,0x00,0x09,0xAE,
73249 -0x1E,0x00,0x02,0x92,
73250 -0x04,0x00,0x03,0x24,
73251 -0x21,0x30,0x50,0x00,
73252 -0x00,0x00,0xC4,0x90,
73253 -0x00,0x00,0x00,0x00,
73254 -0xFF,0x00,0x82,0x30,
73255 -0x02,0x29,0x02,0x00,
73256 -0x50,0x00,0xA3,0x10,
73257 -0x06,0x00,0x02,0x24,
73258 -0x32,0xFF,0xA2,0x14,
73259 -0x00,0x00,0x00,0x00,
73260 -0x1A,0x00,0x02,0x96,
73261 -0x00,0x00,0x00,0x00,
73262 -0x39,0x00,0xC2,0xA0,
73263 -0x1E,0x00,0x03,0x92,
73264 -0x1A,0x00,0x02,0x96,
73265 -0x21,0x18,0x70,0x00,
73266 -0x03,0x12,0x02,0x00,
73267 -0x38,0x00,0x62,0xA0,
73268 -0x04,0x00,0x0B,0x8E,
73269 -0x08,0x00,0x09,0x8E,
73270 -0xC0,0x30,0x0A,0x00,
73271 -0x21,0x10,0xCA,0x00,
73272 -0x80,0x10,0x02,0x00,
73273 -0x21,0x10,0x4A,0x00,
73274 -0x80,0x10,0x02,0x00,
73275 -0x30,0x1F,0x27,0x26,
73276 -0x21,0x28,0x47,0x00,
73277 -0x1C,0x24,0xA3,0x8C,
73278 -0x01,0x00,0x0A,0x24,
73279 -0x02,0x13,0x03,0x00,
73280 -0x01,0x00,0x42,0x30,
73281 -0x29,0xFF,0x4A,0x14,
73282 -0x82,0x11,0x09,0x00,
73283 -0x42,0x18,0x03,0x00,
73284 -0x7F,0xFF,0x02,0x24,
73285 -0x24,0x10,0x22,0x01,
73286 -0x80,0x00,0x63,0x30,
73287 -0x25,0x48,0x43,0x00,
73288 -0x08,0x00,0x09,0xAE,
73289 -0x1C,0x24,0xA3,0x8C,
73290 -0x10,0x00,0x04,0x8E,
73291 -0xFF,0xFF,0x02,0x3C,
73292 -0x07,0x00,0x63,0x30,
73293 -0xFF,0x1F,0x42,0x34,
73294 -0x24,0x20,0x82,0x00,
73295 -0x40,0x1B,0x03,0x00,
73296 -0x25,0x40,0x83,0x00,
73297 -0x44,0x02,0x00,0x08,
73298 -0x10,0x00,0x08,0xAE,
73299 -0x0E,0x00,0x02,0x96,
73300 -0x30,0x1F,0x23,0x26,
73301 -0x07,0x00,0x42,0x30,
73302 -0x40,0x10,0x02,0x00,
73303 -0x21,0x10,0x43,0x00,
73304 -0xE8,0x1D,0x44,0x94,
73305 -0x00,0x00,0x00,0x00,
73306 -0x01,0x00,0x83,0x24,
73307 -0xFF,0x0F,0x85,0x30,
73308 -0xCA,0x02,0x00,0x08,
73309 -0xE8,0x1D,0x43,0xA4,
73310 -0x14,0x00,0x02,0x8E,
73311 -0x00,0x00,0x00,0x00,
73312 -0x42,0x12,0x02,0x00,
73313 -0x3F,0x00,0x42,0x30,
73314 -0x0C,0x00,0x42,0x28,
73315 -0xF1,0xFE,0x40,0x14,
73316 -0xFF,0xDF,0x02,0x3C,
73317 -0x29,0x02,0x00,0x08,
73318 -0x00,0x00,0x00,0x00,
73319 -0x02,0x80,0x02,0x3C,
73320 -0xE6,0x5D,0x43,0x90,
73321 -0x00,0x00,0x00,0x00,
73322 -0x1D,0xFF,0x64,0x14,
73323 -0x30,0x1F,0x24,0x26,
73324 -0x90,0x3E,0xE2,0x90,
73325 -0xFF,0xF7,0x03,0x24,
73326 -0x24,0x18,0x03,0x01,
73327 -0x01,0x00,0x42,0x30,
73328 -0xC0,0x12,0x02,0x00,
73329 -0x25,0x40,0x62,0x00,
73330 -0x10,0x00,0x08,0xAE,
73331 -0x91,0x3E,0xE2,0x90,
73332 -0xFF,0xEF,0x03,0x24,
73333 -0x24,0x18,0x03,0x01,
73334 -0x01,0x00,0x42,0x30,
73335 -0x6D,0x02,0x00,0x08,
73336 -0x00,0x13,0x02,0x00,
73337 -0x1A,0x00,0x05,0x96,
73338 -0x0F,0x00,0x84,0x30,
73339 -0x80,0x20,0x04,0x00,
73340 -0x21,0x18,0xC4,0x00,
73341 -0x11,0x00,0x65,0xA0,
73342 -0x1E,0x00,0x02,0x92,
73343 -0x1A,0x00,0x03,0x96,
73344 -0x21,0x10,0x50,0x00,
73345 -0x21,0x10,0x44,0x00,
73346 -0x03,0x1A,0x03,0x00,
73347 -0x10,0x00,0x43,0xA0,
73348 -0x04,0x00,0x0B,0x8E,
73349 -0x08,0x00,0x09,0x8E,
73350 -0x11,0x03,0x00,0x08,
73351 -0xC0,0x30,0x0A,0x00,
73352 -0x00,0x80,0x03,0x3C,
73353 -0x25,0xB0,0x02,0x3C,
73354 -0x88,0x0D,0x63,0x24,
73355 -0x18,0x03,0x42,0x34,
73356 -0x00,0x00,0x43,0xAC,
73357 -0x08,0x00,0xE0,0x03,
73358 -0x00,0x00,0x00,0x00,
73359 -0x25,0xB0,0x04,0x3C,
73360 -0x00,0x80,0x02,0x3C,
73361 -0xC0,0xFF,0xBD,0x27,
73362 -0x18,0x03,0x83,0x34,
73363 -0xA4,0x0D,0x42,0x24,
73364 -0x3C,0x00,0xBF,0xAF,
73365 -0x38,0x00,0xBE,0xAF,
73366 -0x34,0x00,0xB7,0xAF,
73367 -0x30,0x00,0xB6,0xAF,
73368 -0x2C,0x00,0xB5,0xAF,
73369 -0x28,0x00,0xB4,0xAF,
73370 -0x24,0x00,0xB3,0xAF,
73371 -0x20,0x00,0xB2,0xAF,
73372 -0x1C,0x00,0xB1,0xAF,
73373 -0x18,0x00,0xB0,0xAF,
73374 -0x00,0x00,0x62,0xAC,
73375 -0x00,0x60,0x01,0x40,
73376 -0x01,0x00,0x21,0x34,
73377 -0x00,0x60,0x81,0x40,
73378 -0x02,0x80,0x02,0x3C,
73379 -0xB0,0x03,0x9E,0x34,
73380 -0x98,0x03,0x00,0x08,
73381 -0x30,0x1F,0x55,0x24,
73382 -0x08,0x00,0x04,0xAE,
73383 -0x14,0x37,0x46,0x8E,
73384 -0x21,0x28,0x60,0x02,
73385 -0x80,0x00,0x07,0x24,
73386 -0x01,0x00,0x04,0x24,
73387 -0x01,0x00,0x14,0x24,
73388 -0x73,0x01,0x00,0x0C,
73389 -0x10,0x00,0xB4,0xAF,
73390 -0x14,0x37,0x43,0x8E,
73391 -0x01,0x00,0x04,0x24,
73392 -0x00,0x00,0xC3,0xAE,
73393 -0xB0,0x01,0x00,0x0C,
73394 -0x00,0x00,0x00,0x00,
73395 -0x2A,0x1C,0x42,0x92,
73396 -0x00,0x00,0x00,0x00,
73397 -0x5F,0x00,0x40,0x10,
73398 -0x2A,0xB0,0x02,0x3C,
73399 -0x09,0x00,0x42,0x34,
73400 -0x02,0x00,0x03,0x24,
73401 -0x00,0x00,0x54,0xA0,
73402 -0x00,0x00,0x43,0xA0,
73403 -0xFF,0x00,0x03,0x24,
73404 -0x74,0x00,0x23,0x12,
73405 -0x00,0x00,0x00,0x00,
73406 -0x10,0x37,0xA2,0x8E,
73407 -0x7C,0x37,0xB3,0x8E,
73408 -0x01,0x00,0x04,0x24,
73409 -0x00,0x00,0xC2,0xAF,
73410 -0x14,0x37,0xA2,0xAE,
73411 -0x00,0x00,0xD3,0xAF,
73412 -0xB0,0x01,0x00,0x0C,
73413 -0x00,0x00,0x00,0x00,
73414 -0x7C,0x37,0xA4,0x8E,
73415 -0x80,0x37,0xA3,0x8E,
73416 -0x02,0x80,0x02,0x3C,
73417 -0x04,0xEA,0x42,0x24,
73418 -0x00,0x00,0x52,0x8C,
73419 -0x80,0x00,0x84,0x24,
73420 -0xFF,0x00,0x62,0x24,
73421 -0x2B,0x10,0x44,0x00,
73422 -0x0A,0x18,0x82,0x00,
73423 -0x7C,0x37,0xA3,0xAE,
73424 -0x02,0x80,0x03,0x3C,
73425 -0x08,0xEA,0x63,0x24,
73426 -0x7C,0x37,0x42,0x8E,
73427 -0x00,0x00,0x76,0x8C,
73428 -0x00,0x00,0x00,0x00,
73429 -0x00,0x00,0xC2,0xAE,
73430 -0x02,0x80,0x17,0x3C,
73431 -0xFF,0xFF,0x62,0x32,
73432 -0x25,0x80,0x57,0x00,
73433 -0x00,0x00,0xD0,0xAE,
73434 -0x0C,0x00,0x02,0x92,
73435 -0x21,0x28,0x00,0x00,
73436 -0x00,0x00,0xC2,0xAE,
73437 -0x02,0x00,0x04,0x92,
73438 -0x00,0x00,0x00,0x00,
73439 -0x21,0x20,0x93,0x00,
73440 -0xFF,0xFF,0x84,0x30,
73441 -0xFB,0x60,0x00,0x0C,
73442 -0x25,0x20,0x97,0x00,
73443 -0x0C,0x00,0x11,0x92,
73444 -0x20,0x10,0x02,0x3C,
73445 -0x01,0x00,0x04,0x24,
73446 -0x00,0x1A,0x11,0x00,
73447 -0x21,0x18,0x62,0x00,
73448 -0xFF,0x00,0x02,0x24,
73449 -0x21,0x30,0x60,0x00,
73450 -0x06,0x00,0x22,0x12,
73451 -0x80,0x00,0x07,0x24,
73452 -0x7C,0x37,0x45,0x8E,
73453 -0x10,0x37,0x43,0xAE,
73454 -0xB4,0x36,0x51,0xA2,
73455 -0x73,0x01,0x00,0x0C,
73456 -0x10,0x00,0xA0,0xAF,
73457 -0x04,0x00,0x04,0x8E,
73458 -0x08,0x00,0x03,0x8E,
73459 -0xFF,0xE0,0x02,0x3C,
73460 -0xFF,0xFF,0x42,0x34,
73461 -0x1F,0x00,0x84,0x30,
73462 -0x24,0x18,0x62,0x00,
73463 -0x00,0x26,0x04,0x00,
73464 -0xFF,0xDF,0x02,0x3C,
73465 -0x25,0x18,0x64,0x00,
73466 -0xFF,0xFF,0x42,0x34,
73467 -0x24,0x18,0x62,0x00,
73468 -0x00,0x40,0x04,0x3C,
73469 -0x25,0x18,0x64,0x00,
73470 -0xC0,0xFF,0x05,0x24,
73471 -0x82,0x11,0x03,0x00,
73472 -0x24,0x20,0x65,0x00,
73473 -0x01,0x00,0x42,0x30,
73474 -0xA3,0xFF,0x40,0x10,
73475 -0x04,0x00,0x84,0x34,
73476 -0x08,0x00,0x03,0xAE,
73477 -0x14,0x37,0x46,0x8E,
73478 -0x21,0x28,0x60,0x02,
73479 -0x80,0x00,0x07,0x24,
73480 -0x01,0x00,0x04,0x24,
73481 -0x01,0x00,0x14,0x24,
73482 -0x73,0x01,0x00,0x0C,
73483 -0x10,0x00,0xB4,0xAF,
73484 -0x14,0x37,0x43,0x8E,
73485 -0x01,0x00,0x04,0x24,
73486 -0x00,0x00,0xC3,0xAE,
73487 -0xB0,0x01,0x00,0x0C,
73488 -0x00,0x00,0x00,0x00,
73489 -0x2A,0x1C,0x42,0x92,
73490 -0x00,0x00,0x00,0x00,
73491 -0xA3,0xFF,0x40,0x14,
73492 -0x2A,0xB0,0x02,0x3C,
73493 -0x00,0x60,0x01,0x40,
73494 -0x01,0x00,0x21,0x34,
73495 -0x01,0x00,0x21,0x38,
73496 -0x00,0x60,0x81,0x40,
73497 -0x2A,0x1C,0x54,0xA2,
73498 -0x02,0x00,0x02,0x92,
73499 -0x00,0x00,0x00,0x00,
73500 -0x21,0x10,0x53,0x00,
73501 -0xFF,0xFF,0x42,0x30,
73502 -0x25,0x10,0x57,0x00,
73503 -0x02,0x00,0x43,0x94,
73504 -0x00,0x00,0x00,0x00,
73505 -0xFF,0x00,0x64,0x30,
73506 -0x00,0xC0,0x84,0x24,
73507 -0xFF,0xFF,0x84,0x30,
73508 -0xC2,0x34,0x00,0x0C,
73509 -0x2B,0x1C,0x43,0xA2,
73510 -0x00,0x60,0x01,0x40,
73511 -0x01,0x00,0x21,0x34,
73512 -0x00,0x60,0x81,0x40,
73513 -0x2A,0xB0,0x02,0x3C,
73514 -0x09,0x00,0x42,0x34,
73515 -0x02,0x00,0x03,0x24,
73516 -0x00,0x00,0x54,0xA0,
73517 -0x00,0x00,0x43,0xA0,
73518 -0xFF,0x00,0x03,0x24,
73519 -0x8E,0xFF,0x23,0x16,
73520 -0x00,0x00,0x00,0x00,
73521 -0x00,0x60,0x01,0x40,
73522 -0x01,0x00,0x21,0x34,
73523 -0x01,0x00,0x21,0x38,
73524 -0x00,0x60,0x81,0x40,
73525 -0x02,0x80,0x03,0x3C,
73526 -0x30,0x1F,0x62,0x24,
73527 -0xD0,0x1B,0x43,0x8C,
73528 -0x3C,0x00,0xBF,0x8F,
73529 -0x38,0x00,0xBE,0x8F,
73530 -0x34,0x00,0xB7,0x8F,
73531 -0x30,0x00,0xB6,0x8F,
73532 -0x2C,0x00,0xB5,0x8F,
73533 -0x28,0x00,0xB4,0x8F,
73534 -0x24,0x00,0xB3,0x8F,
73535 -0x20,0x00,0xB2,0x8F,
73536 -0x1C,0x00,0xB1,0x8F,
73537 -0x18,0x00,0xB0,0x8F,
73538 -0x00,0x38,0x63,0x34,
73539 -0x41,0xB0,0x04,0x3C,
73540 -0x40,0x00,0xBD,0x27,
73541 -0x00,0x00,0x83,0xAC,
73542 -0x08,0x00,0xE0,0x03,
73543 -0xD0,0x1B,0x43,0xAC,
73544 -0x00,0x80,0x03,0x3C,
73545 -0x25,0xB0,0x02,0x3C,
73546 -0x88,0x10,0x63,0x24,
73547 -0x18,0x03,0x42,0x34,
73548 -0x00,0x00,0x43,0xAC,
73549 -0x08,0x00,0xE0,0x03,
73550 -0x00,0x00,0x00,0x00,
73551 -0xC0,0xFF,0xBD,0x27,
73552 -0x34,0x00,0xB7,0xAF,
73553 -0x3C,0x00,0xBF,0xAF,
73554 -0x38,0x00,0xBE,0xAF,
73555 -0x30,0x00,0xB6,0xAF,
73556 -0x2C,0x00,0xB5,0xAF,
73557 -0x28,0x00,0xB4,0xAF,
73558 -0x24,0x00,0xB3,0xAF,
73559 -0x20,0x00,0xB2,0xAF,
73560 -0x1C,0x00,0xB1,0xAF,
73561 -0x18,0x00,0xB0,0xAF,
73562 -0x02,0x80,0x06,0x3C,
73563 -0xCC,0x5E,0xC5,0x90,
73564 -0x00,0x80,0x03,0x3C,
73565 -0x25,0xB0,0x02,0x3C,
73566 -0x18,0x03,0x42,0x34,
73567 -0xA4,0x10,0x63,0x24,
73568 -0x40,0x00,0xA4,0x30,
73569 -0x00,0x00,0x43,0xAC,
73570 -0x21,0xB8,0x00,0x00,
73571 -0x03,0x00,0x80,0x10,
73572 -0x7F,0x00,0xA2,0x30,
73573 -0xBF,0x00,0xA2,0x30,
73574 -0x01,0x00,0x17,0x24,
73575 -0xCC,0x5E,0xC2,0xA0,
73576 -0x00,0x60,0x01,0x40,
73577 -0x01,0x00,0x21,0x34,
73578 -0x00,0x60,0x81,0x40,
73579 -0x02,0x80,0x1E,0x3C,
73580 -0x25,0xB0,0x02,0x3C,
73581 -0x30,0x1F,0xD3,0x27,
73582 -0xB0,0x03,0x55,0x34,
73583 -0x6A,0x04,0x00,0x08,
73584 -0x02,0x80,0x16,0x3C,
73585 -0x90,0x36,0x91,0xA2,
73586 -0x30,0x1F,0xC2,0x27,
73587 -0xC8,0x36,0x46,0x8C,
73588 -0x34,0x37,0x45,0x8C,
73589 -0x03,0x00,0x04,0x24,
73590 -0x80,0x00,0x07,0x24,
73591 -0x73,0x01,0x00,0x0C,
73592 -0x10,0x00,0xA0,0xAF,
73593 -0x30,0x1F,0xD4,0x27,
73594 -0xCC,0x36,0x85,0x8E,
73595 -0x21,0x20,0x00,0x02,
73596 -0x15,0x02,0x00,0x0C,
73597 -0x21,0x30,0x40,0x02,
73598 -0x2A,0xB0,0x07,0x3C,
73599 -0x0D,0x00,0xE2,0x34,
73600 -0x04,0x00,0x43,0x24,
73601 -0x0B,0x10,0x77,0x00,
73602 -0x01,0x00,0x04,0x24,
73603 -0x02,0x00,0x03,0x24,
73604 -0x00,0x00,0x44,0xA0,
73605 -0x00,0x00,0x43,0xA0,
73606 -0x1A,0x5E,0xC4,0x96,
73607 -0x25,0xB0,0x06,0x3C,
73608 -0x66,0x03,0xC5,0x34,
73609 -0x01,0x00,0x84,0x24,
73610 -0x1A,0x5E,0xC4,0xA6,
73611 -0x1A,0x5E,0xC2,0x96,
73612 -0xFF,0x00,0x03,0x24,
73613 -0x00,0x00,0xA2,0xA4,
73614 -0x2F,0x00,0x23,0x12,
73615 -0x00,0x00,0x00,0x00,
73616 -0xC8,0x36,0x62,0x8E,
73617 -0x34,0x37,0x72,0x8E,
73618 -0x03,0x00,0x04,0x24,
73619 -0x00,0x00,0xA2,0xAE,
73620 -0xCC,0x36,0x62,0xAE,
73621 -0x00,0x00,0xB2,0xAE,
73622 -0xB0,0x01,0x00,0x0C,
73623 -0x00,0x00,0x00,0x00,
73624 -0x34,0x37,0x64,0x8E,
73625 -0x38,0x37,0x63,0x8E,
73626 -0x02,0x80,0x02,0x3C,
73627 -0x0C,0xEA,0x42,0x24,
73628 -0x00,0x00,0x54,0x8C,
73629 -0x80,0x00,0x84,0x24,
73630 -0xFF,0x00,0x62,0x24,
73631 -0x2B,0x10,0x44,0x00,
73632 -0x0A,0x18,0x82,0x00,
73633 -0x34,0x37,0x63,0xAE,
73634 -0x34,0x37,0x82,0x8E,
73635 -0x00,0x00,0x00,0x00,
73636 -0x00,0x00,0xA2,0xAE,
73637 -0x02,0x80,0x03,0x3C,
73638 -0xFF,0xFF,0x42,0x32,
73639 -0x25,0x80,0x43,0x00,
73640 -0x00,0x00,0xB0,0xAE,
73641 -0x0C,0x00,0x02,0x92,
73642 -0x01,0x00,0x05,0x24,
73643 -0x00,0x00,0xA2,0xAE,
73644 -0x02,0x00,0x04,0x92,
73645 -0x00,0x00,0x00,0x00,
73646 -0x21,0x20,0x92,0x00,
73647 -0xFF,0xFF,0x84,0x30,
73648 -0xFB,0x60,0x00,0x0C,
73649 -0x25,0x20,0x83,0x00,
73650 -0x0C,0x00,0x11,0x92,
73651 -0x20,0x10,0x02,0x3C,
73652 -0xFF,0x00,0x03,0x24,
73653 -0x00,0x22,0x11,0x00,
73654 -0xC2,0xFF,0x23,0x12,
73655 -0x21,0x20,0x82,0x00,
73656 -0xB8,0xFF,0xE0,0x16,
73657 -0xC8,0x36,0x84,0xAE,
73658 -0x02,0x80,0x02,0x3C,
73659 -0x30,0x1F,0x42,0x24,
73660 -0x4C,0x04,0x00,0x08,
73661 -0x8C,0x36,0x51,0xA0,
73662 -0x21,0x00,0xE0,0x12,
73663 -0x40,0x00,0xE4,0x34,
73664 -0x90,0x36,0x83,0x92,
73665 -0x41,0x00,0xE4,0x34,
73666 -0xB0,0x03,0xC5,0x34,
73667 -0x00,0x00,0x83,0xA0,
73668 -0x00,0x00,0xA3,0xAC,
73669 -0x00,0x60,0x01,0x40,
73670 -0x01,0x00,0x21,0x34,
73671 -0x00,0x60,0x81,0x40,
73672 -0x00,0x60,0x01,0x40,
73673 -0x01,0x00,0x21,0x34,
73674 -0x01,0x00,0x21,0x38,
73675 -0x00,0x60,0x81,0x40,
73676 -0x30,0x1F,0xC5,0x27,
73677 -0xD0,0x1B,0xA4,0x8C,
73678 -0x01,0x00,0x02,0x3C,
73679 -0x3C,0x00,0xBF,0x8F,
73680 -0x38,0x00,0xBE,0x8F,
73681 -0x34,0x00,0xB7,0x8F,
73682 -0x30,0x00,0xB6,0x8F,
73683 -0x2C,0x00,0xB5,0x8F,
73684 -0x28,0x00,0xB4,0x8F,
73685 -0x24,0x00,0xB3,0x8F,
73686 -0x20,0x00,0xB2,0x8F,
73687 -0x1C,0x00,0xB1,0x8F,
73688 -0x18,0x00,0xB0,0x8F,
73689 -0x00,0x80,0x42,0x34,
73690 -0x25,0x20,0x82,0x00,
73691 -0x41,0xB0,0x03,0x3C,
73692 -0x40,0x00,0xBD,0x27,
73693 -0x00,0x00,0x64,0xAC,
73694 -0x08,0x00,0xE0,0x03,
73695 -0xD0,0x1B,0xA4,0xAC,
73696 -0x8C,0x36,0x83,0x92,
73697 -0xB0,0x03,0xC5,0x34,
73698 -0x00,0x00,0x83,0xA0,
73699 -0x00,0x00,0xA3,0xAC,
73700 -0x00,0x60,0x01,0x40,
73701 -0x01,0x00,0x21,0x34,
73702 -0x00,0x60,0x81,0x40,
73703 -0x00,0x60,0x01,0x40,
73704 -0x01,0x00,0x21,0x34,
73705 -0x01,0x00,0x21,0x38,
73706 -0x00,0x60,0x81,0x40,
73707 -0x30,0x1F,0xC5,0x27,
73708 -0xD0,0x1B,0xA4,0x8C,
73709 -0x01,0x00,0x02,0x3C,
73710 -0x3C,0x00,0xBF,0x8F,
73711 -0x38,0x00,0xBE,0x8F,
73712 -0x34,0x00,0xB7,0x8F,
73713 -0x30,0x00,0xB6,0x8F,
73714 -0x2C,0x00,0xB5,0x8F,
73715 -0x28,0x00,0xB4,0x8F,
73716 -0x24,0x00,0xB3,0x8F,
73717 -0x20,0x00,0xB2,0x8F,
73718 -0x1C,0x00,0xB1,0x8F,
73719 -0x18,0x00,0xB0,0x8F,
73720 -0x00,0x80,0x42,0x34,
73721 -0x25,0x20,0x82,0x00,
73722 -0x41,0xB0,0x03,0x3C,
73723 -0x40,0x00,0xBD,0x27,
73724 -0x00,0x00,0x64,0xAC,
73725 -0x08,0x00,0xE0,0x03,
73726 -0xD0,0x1B,0xA4,0xAC,
73727 -0xC0,0xFF,0xBD,0x27,
73728 -0x34,0x00,0xB7,0xAF,
73729 -0x3C,0x00,0xBF,0xAF,
73730 -0x38,0x00,0xBE,0xAF,
73731 -0x30,0x00,0xB6,0xAF,
73732 -0x2C,0x00,0xB5,0xAF,
73733 -0x28,0x00,0xB4,0xAF,
73734 -0x24,0x00,0xB3,0xAF,
73735 -0x20,0x00,0xB2,0xAF,
73736 -0x1C,0x00,0xB1,0xAF,
73737 -0x18,0x00,0xB0,0xAF,
73738 -0x02,0x80,0x06,0x3C,
73739 -0xCC,0x5E,0xC5,0x90,
73740 -0x00,0x80,0x03,0x3C,
73741 -0x25,0xB0,0x02,0x3C,
73742 -0x18,0x03,0x42,0x34,
73743 -0x64,0x13,0x63,0x24,
73744 -0x10,0x00,0xA4,0x30,
73745 -0x00,0x00,0x43,0xAC,
73746 -0x21,0xB8,0x00,0x00,
73747 -0x03,0x00,0x80,0x10,
73748 -0xDF,0x00,0xA2,0x30,
73749 -0xEF,0x00,0xA2,0x30,
73750 -0x01,0x00,0x17,0x24,
73751 -0xCC,0x5E,0xC2,0xA0,
73752 -0xCC,0x5E,0xC3,0x90,
73753 -0x25,0xB0,0x02,0x3C,
73754 -0xB0,0x03,0x42,0x34,
73755 -0x00,0x00,0x43,0xAC,
73756 -0x00,0x00,0x43,0xAC,
73757 -0x00,0x60,0x01,0x40,
73758 -0x01,0x00,0x21,0x34,
73759 -0x00,0x60,0x81,0x40,
73760 -0x02,0x80,0x1E,0x3C,
73761 -0x30,0x1F,0xD3,0x27,
73762 -0x21,0xA8,0x40,0x00,
73763 -0x1E,0x05,0x00,0x08,
73764 -0x02,0x80,0x16,0x3C,
73765 -0x98,0x36,0x91,0xA2,
73766 -0x30,0x1F,0xC2,0x27,
73767 -0xD4,0x36,0x46,0x8C,
73768 -0x40,0x37,0x45,0x8C,
73769 -0x04,0x00,0x04,0x24,
73770 -0x80,0x00,0x07,0x24,
73771 -0x73,0x01,0x00,0x0C,
73772 -0x10,0x00,0xA0,0xAF,
73773 -0x30,0x1F,0xD4,0x27,
73774 -0xD8,0x36,0x85,0x8E,
73775 -0x21,0x20,0x00,0x02,
73776 -0x15,0x02,0x00,0x0C,
73777 -0x21,0x30,0x40,0x02,
73778 -0x2A,0xB0,0x07,0x3C,
73779 -0x15,0x00,0xE2,0x34,
73780 -0x04,0x00,0x43,0x24,
73781 -0x0B,0x10,0x77,0x00,
73782 -0x01,0x00,0x04,0x24,
73783 -0x02,0x00,0x03,0x24,
73784 -0x00,0x00,0x44,0xA0,
73785 -0x00,0x00,0x43,0xA0,
73786 -0x1A,0x5E,0xC4,0x96,
73787 -0x25,0xB0,0x06,0x3C,
73788 -0x66,0x03,0xC5,0x34,
73789 -0x01,0x00,0x84,0x24,
73790 -0x1A,0x5E,0xC4,0xA6,
73791 -0x1A,0x5E,0xC2,0x96,
73792 -0xFF,0x00,0x03,0x24,
73793 -0x00,0x00,0xA2,0xA4,
73794 -0x2F,0x00,0x23,0x12,
73795 -0x00,0x00,0x00,0x00,
73796 -0xD4,0x36,0x62,0x8E,
73797 -0x40,0x37,0x72,0x8E,
73798 -0x04,0x00,0x04,0x24,
73799 -0x00,0x00,0xA2,0xAE,
73800 -0xD8,0x36,0x62,0xAE,
73801 -0x00,0x00,0xB2,0xAE,
73802 -0xB0,0x01,0x00,0x0C,
73803 -0x00,0x00,0x00,0x00,
73804 -0x40,0x37,0x64,0x8E,
73805 -0x44,0x37,0x63,0x8E,
73806 -0x02,0x80,0x02,0x3C,
73807 -0x10,0xEA,0x42,0x24,
73808 -0x00,0x00,0x54,0x8C,
73809 -0x80,0x00,0x84,0x24,
73810 -0xFF,0x00,0x62,0x24,
73811 -0x2B,0x10,0x44,0x00,
73812 -0x0A,0x18,0x82,0x00,
73813 -0x40,0x37,0x63,0xAE,
73814 -0x40,0x37,0x82,0x8E,
73815 -0x00,0x00,0x00,0x00,
73816 -0x00,0x00,0xA2,0xAE,
73817 -0x02,0x80,0x03,0x3C,
73818 -0xFF,0xFF,0x42,0x32,
73819 -0x25,0x80,0x43,0x00,
73820 -0x00,0x00,0xB0,0xAE,
73821 -0x0C,0x00,0x02,0x92,
73822 -0x02,0x00,0x05,0x24,
73823 -0x00,0x00,0xA2,0xAE,
73824 -0x02,0x00,0x04,0x92,
73825 -0x00,0x00,0x00,0x00,
73826 -0x21,0x20,0x92,0x00,
73827 -0xFF,0xFF,0x84,0x30,
73828 -0xFB,0x60,0x00,0x0C,
73829 -0x25,0x20,0x83,0x00,
73830 -0x0C,0x00,0x11,0x92,
73831 -0x20,0x10,0x02,0x3C,
73832 -0xFF,0x00,0x03,0x24,
73833 -0x00,0x22,0x11,0x00,
73834 -0xC2,0xFF,0x23,0x12,
73835 -0x21,0x20,0x82,0x00,
73836 -0xB8,0xFF,0xE0,0x16,
73837 -0xD4,0x36,0x84,0xAE,
73838 -0x02,0x80,0x02,0x3C,
73839 -0x30,0x1F,0x42,0x24,
73840 -0x00,0x05,0x00,0x08,
73841 -0x94,0x36,0x51,0xA0,
73842 -0x20,0x00,0xE0,0x12,
73843 -0x42,0x00,0xE4,0x34,
73844 -0x98,0x36,0x83,0x92,
73845 -0x43,0x00,0xE4,0x34,
73846 -0xB0,0x03,0xC5,0x34,
73847 -0x00,0x00,0x83,0xA0,
73848 -0x00,0x00,0xA3,0xAC,
73849 -0x00,0x60,0x01,0x40,
73850 -0x01,0x00,0x21,0x34,
73851 -0x00,0x60,0x81,0x40,
73852 -0x00,0x60,0x01,0x40,
73853 -0x01,0x00,0x21,0x34,
73854 -0x01,0x00,0x21,0x38,
73855 -0x00,0x60,0x81,0x40,
73856 -0x30,0x1F,0xC5,0x27,
73857 -0xD0,0x1B,0xA2,0x8C,
73858 -0x3C,0x00,0xBF,0x8F,
73859 -0x38,0x00,0xBE,0x8F,
73860 -0x34,0x00,0xB7,0x8F,
73861 -0x30,0x00,0xB6,0x8F,
73862 -0x2C,0x00,0xB5,0x8F,
73863 -0x28,0x00,0xB4,0x8F,
73864 -0x24,0x00,0xB3,0x8F,
73865 -0x20,0x00,0xB2,0x8F,
73866 -0x1C,0x00,0xB1,0x8F,
73867 -0x18,0x00,0xB0,0x8F,
73868 -0x06,0x00,0x03,0x3C,
73869 -0x25,0x10,0x43,0x00,
73870 -0x41,0xB0,0x04,0x3C,
73871 -0x40,0x00,0xBD,0x27,
73872 -0x00,0x00,0x82,0xAC,
73873 -0x08,0x00,0xE0,0x03,
73874 -0xD0,0x1B,0xA2,0xAC,
73875 -0x94,0x36,0x83,0x92,
73876 -0xB0,0x03,0xC5,0x34,
73877 -0x00,0x00,0x83,0xA0,
73878 -0x00,0x00,0xA3,0xAC,
73879 -0x00,0x60,0x01,0x40,
73880 -0x01,0x00,0x21,0x34,
73881 -0x00,0x60,0x81,0x40,
73882 -0x00,0x60,0x01,0x40,
73883 -0x01,0x00,0x21,0x34,
73884 -0x01,0x00,0x21,0x38,
73885 -0x00,0x60,0x81,0x40,
73886 -0x30,0x1F,0xC5,0x27,
73887 -0xD0,0x1B,0xA2,0x8C,
73888 -0x3C,0x00,0xBF,0x8F,
73889 -0x38,0x00,0xBE,0x8F,
73890 -0x34,0x00,0xB7,0x8F,
73891 -0x30,0x00,0xB6,0x8F,
73892 -0x2C,0x00,0xB5,0x8F,
73893 -0x28,0x00,0xB4,0x8F,
73894 -0x24,0x00,0xB3,0x8F,
73895 -0x20,0x00,0xB2,0x8F,
73896 -0x1C,0x00,0xB1,0x8F,
73897 -0x18,0x00,0xB0,0x8F,
73898 -0x06,0x00,0x03,0x3C,
73899 -0x25,0x10,0x43,0x00,
73900 -0x41,0xB0,0x04,0x3C,
73901 -0x40,0x00,0xBD,0x27,
73902 -0x00,0x00,0x82,0xAC,
73903 -0x08,0x00,0xE0,0x03,
73904 -0xD0,0x1B,0xA2,0xAC,
73905 -0xC0,0xFF,0xBD,0x27,
73906 -0x34,0x00,0xB7,0xAF,
73907 -0x3C,0x00,0xBF,0xAF,
73908 -0x38,0x00,0xBE,0xAF,
73909 -0x30,0x00,0xB6,0xAF,
73910 -0x2C,0x00,0xB5,0xAF,
73911 -0x28,0x00,0xB4,0xAF,
73912 -0x24,0x00,0xB3,0xAF,
73913 -0x20,0x00,0xB2,0xAF,
73914 -0x1C,0x00,0xB1,0xAF,
73915 -0x18,0x00,0xB0,0xAF,
73916 -0x02,0x80,0x06,0x3C,
73917 -0xCC,0x5E,0xC5,0x90,
73918 -0x00,0x80,0x03,0x3C,
73919 -0x25,0xB0,0x02,0x3C,
73920 -0x18,0x03,0x42,0x34,
73921 -0x2C,0x16,0x63,0x24,
73922 -0x01,0x00,0xA4,0x30,
73923 -0x00,0x00,0x43,0xAC,
73924 -0x21,0xB8,0x00,0x00,
73925 -0x03,0x00,0x80,0x10,
73926 -0xF7,0x00,0xA2,0x30,
73927 -0xFE,0x00,0xA2,0x30,
73928 -0x01,0x00,0x17,0x24,
73929 -0xCC,0x5E,0xC2,0xA0,
73930 -0xCC,0x5E,0xC3,0x90,
73931 -0x25,0xB0,0x02,0x3C,
73932 -0xB0,0x03,0x42,0x34,
73933 -0x00,0x00,0x43,0xAC,
73934 -0x00,0x60,0x01,0x40,
73935 -0x01,0x00,0x21,0x34,
73936 -0x00,0x60,0x81,0x40,
73937 -0x02,0x80,0x1E,0x3C,
73938 -0x30,0x1F,0xD3,0x27,
73939 -0x21,0xA8,0x40,0x00,
73940 -0xCF,0x05,0x00,0x08,
73941 -0x02,0x80,0x16,0x3C,
73942 -0xA8,0x36,0x91,0xA2,
73943 -0x30,0x1F,0xC2,0x27,
73944 -0xE0,0x36,0x46,0x8C,
73945 -0x4C,0x37,0x45,0x8C,
73946 -0x05,0x00,0x04,0x24,
73947 -0x80,0x00,0x07,0x24,
73948 -0x73,0x01,0x00,0x0C,
73949 -0x10,0x00,0xA0,0xAF,
73950 -0x30,0x1F,0xD4,0x27,
73951 -0xE4,0x36,0x85,0x8E,
73952 -0x21,0x20,0x00,0x02,
73953 -0x15,0x02,0x00,0x0C,
73954 -0x21,0x30,0x40,0x02,
73955 -0x2A,0xB0,0x07,0x3C,
73956 -0x1D,0x00,0xE2,0x34,
73957 -0x04,0x00,0x43,0x24,
73958 -0x0B,0x10,0x77,0x00,
73959 -0x01,0x00,0x04,0x24,
73960 -0x02,0x00,0x03,0x24,
73961 -0x00,0x00,0x44,0xA0,
73962 -0x00,0x00,0x43,0xA0,
73963 -0x1A,0x5E,0xC4,0x96,
73964 -0x25,0xB0,0x06,0x3C,
73965 -0x66,0x03,0xC5,0x34,
73966 -0x01,0x00,0x84,0x24,
73967 -0x1A,0x5E,0xC4,0xA6,
73968 -0x1A,0x5E,0xC2,0x96,
73969 -0xFF,0x00,0x03,0x24,
73970 -0x00,0x00,0xA2,0xA4,
73971 -0x2F,0x00,0x23,0x12,
73972 -0x00,0x00,0x00,0x00,
73973 -0xE0,0x36,0x62,0x8E,
73974 -0x4C,0x37,0x72,0x8E,
73975 -0x05,0x00,0x04,0x24,
73976 -0x00,0x00,0xA2,0xAE,
73977 -0xE4,0x36,0x62,0xAE,
73978 -0x00,0x00,0xB2,0xAE,
73979 -0xB0,0x01,0x00,0x0C,
73980 -0x00,0x00,0x00,0x00,
73981 -0x4C,0x37,0x64,0x8E,
73982 -0x50,0x37,0x63,0x8E,
73983 -0x02,0x80,0x02,0x3C,
73984 -0x14,0xEA,0x42,0x24,
73985 -0x00,0x00,0x54,0x8C,
73986 -0x80,0x00,0x84,0x24,
73987 -0xFF,0x00,0x62,0x24,
73988 -0x2B,0x10,0x44,0x00,
73989 -0x0A,0x18,0x82,0x00,
73990 -0x4C,0x37,0x63,0xAE,
73991 -0x4C,0x37,0x82,0x8E,
73992 -0x00,0x00,0x00,0x00,
73993 -0x00,0x00,0xA2,0xAE,
73994 -0x02,0x80,0x03,0x3C,
73995 -0xFF,0xFF,0x42,0x32,
73996 -0x25,0x80,0x43,0x00,
73997 -0x00,0x00,0xB0,0xAE,
73998 -0x0C,0x00,0x02,0x92,
73999 -0x08,0x00,0x05,0x24,
74000 -0x00,0x00,0xA2,0xAE,
74001 -0x02,0x00,0x04,0x92,
74002 -0x00,0x00,0x00,0x00,
74003 -0x21,0x20,0x92,0x00,
74004 -0xFF,0xFF,0x84,0x30,
74005 -0xFB,0x60,0x00,0x0C,
74006 -0x25,0x20,0x83,0x00,
74007 -0x0C,0x00,0x11,0x92,
74008 -0x20,0x10,0x02,0x3C,
74009 -0xFF,0x00,0x03,0x24,
74010 -0x00,0x22,0x11,0x00,
74011 -0xC2,0xFF,0x23,0x12,
74012 -0x21,0x20,0x82,0x00,
74013 -0xB8,0xFF,0xE0,0x16,
74014 -0xE0,0x36,0x84,0xAE,
74015 -0x02,0x80,0x02,0x3C,
74016 -0x30,0x1F,0x42,0x24,
74017 -0xB1,0x05,0x00,0x08,
74018 -0x9C,0x36,0x51,0xA0,
74019 -0x20,0x00,0xE0,0x12,
74020 -0x44,0x00,0xE4,0x34,
74021 -0xA8,0x36,0x83,0x92,
74022 -0x45,0x00,0xE4,0x34,
74023 -0xB0,0x03,0xC5,0x34,
74024 -0x00,0x00,0x83,0xA0,
74025 -0x00,0x00,0xA3,0xAC,
74026 -0x00,0x60,0x01,0x40,
74027 -0x01,0x00,0x21,0x34,
74028 -0x00,0x60,0x81,0x40,
74029 -0x00,0x60,0x01,0x40,
74030 -0x01,0x00,0x21,0x34,
74031 -0x01,0x00,0x21,0x38,
74032 -0x00,0x60,0x81,0x40,
74033 -0x30,0x1F,0xC5,0x27,
74034 -0xD0,0x1B,0xA2,0x8C,
74035 -0x3C,0x00,0xBF,0x8F,
74036 -0x38,0x00,0xBE,0x8F,
74037 -0x34,0x00,0xB7,0x8F,
74038 -0x30,0x00,0xB6,0x8F,
74039 -0x2C,0x00,0xB5,0x8F,
74040 -0x28,0x00,0xB4,0x8F,
74041 -0x24,0x00,0xB3,0x8F,
74042 -0x20,0x00,0xB2,0x8F,
74043 -0x1C,0x00,0xB1,0x8F,
74044 -0x18,0x00,0xB0,0x8F,
74045 -0x18,0x00,0x03,0x3C,
74046 -0x25,0x10,0x43,0x00,
74047 -0x41,0xB0,0x04,0x3C,
74048 -0x40,0x00,0xBD,0x27,
74049 -0x00,0x00,0x82,0xAC,
74050 -0x08,0x00,0xE0,0x03,
74051 -0xD0,0x1B,0xA2,0xAC,
74052 -0x9C,0x36,0x83,0x92,
74053 -0xB0,0x03,0xC5,0x34,
74054 -0x00,0x00,0x83,0xA0,
74055 -0x00,0x00,0xA3,0xAC,
74056 -0x00,0x60,0x01,0x40,
74057 -0x01,0x00,0x21,0x34,
74058 -0x00,0x60,0x81,0x40,
74059 -0x00,0x60,0x01,0x40,
74060 -0x01,0x00,0x21,0x34,
74061 -0x01,0x00,0x21,0x38,
74062 -0x00,0x60,0x81,0x40,
74063 -0x30,0x1F,0xC5,0x27,
74064 -0xD0,0x1B,0xA2,0x8C,
74065 -0x3C,0x00,0xBF,0x8F,
74066 -0x38,0x00,0xBE,0x8F,
74067 -0x34,0x00,0xB7,0x8F,
74068 -0x30,0x00,0xB6,0x8F,
74069 -0x2C,0x00,0xB5,0x8F,
74070 -0x28,0x00,0xB4,0x8F,
74071 -0x24,0x00,0xB3,0x8F,
74072 -0x20,0x00,0xB2,0x8F,
74073 -0x1C,0x00,0xB1,0x8F,
74074 -0x18,0x00,0xB0,0x8F,
74075 -0x18,0x00,0x03,0x3C,
74076 -0x25,0x10,0x43,0x00,
74077 -0x41,0xB0,0x04,0x3C,
74078 -0x40,0x00,0xBD,0x27,
74079 -0x00,0x00,0x82,0xAC,
74080 -0x08,0x00,0xE0,0x03,
74081 -0xD0,0x1B,0xA2,0xAC,
74082 -0xC0,0xFF,0xBD,0x27,
74083 -0x34,0x00,0xB7,0xAF,
74084 -0x3C,0x00,0xBF,0xAF,
74085 -0x38,0x00,0xBE,0xAF,
74086 -0x30,0x00,0xB6,0xAF,
74087 -0x2C,0x00,0xB5,0xAF,
74088 -0x28,0x00,0xB4,0xAF,
74089 -0x24,0x00,0xB3,0xAF,
74090 -0x20,0x00,0xB2,0xAF,
74091 -0x1C,0x00,0xB1,0xAF,
74092 -0x18,0x00,0xB0,0xAF,
74093 -0x02,0x80,0x06,0x3C,
74094 -0xCC,0x5E,0xC5,0x90,
74095 -0x00,0x80,0x03,0x3C,
74096 -0x25,0xB0,0x02,0x3C,
74097 -0x18,0x03,0x42,0x34,
74098 -0xF0,0x18,0x63,0x24,
74099 -0x02,0x00,0xA4,0x30,
74100 -0x00,0x00,0x43,0xAC,
74101 -0x21,0xB8,0x00,0x00,
74102 -0x03,0x00,0x80,0x10,
74103 -0xFB,0x00,0xA2,0x30,
74104 -0xFD,0x00,0xA2,0x30,
74105 -0x01,0x00,0x17,0x24,
74106 -0xCC,0x5E,0xC2,0xA0,
74107 -0xCC,0x5E,0xC3,0x90,
74108 -0x25,0xB0,0x02,0x3C,
74109 -0xB0,0x03,0x42,0x34,
74110 -0x00,0x00,0x43,0xAC,
74111 -0x00,0x60,0x01,0x40,
74112 -0x01,0x00,0x21,0x34,
74113 -0x00,0x60,0x81,0x40,
74114 -0x02,0x80,0x1E,0x3C,
74115 -0x30,0x1F,0xD3,0x27,
74116 -0x21,0xA8,0x40,0x00,
74117 -0x80,0x06,0x00,0x08,
74118 -0x02,0x80,0x16,0x3C,
74119 -0xA4,0x36,0x91,0xA2,
74120 -0x30,0x1F,0xC2,0x27,
74121 -0xEC,0x36,0x46,0x8C,
74122 -0x58,0x37,0x45,0x8C,
74123 -0x06,0x00,0x04,0x24,
74124 -0x80,0x00,0x07,0x24,
74125 -0x73,0x01,0x00,0x0C,
74126 -0x10,0x00,0xA0,0xAF,
74127 -0x30,0x1F,0xD4,0x27,
74128 -0xF0,0x36,0x85,0x8E,
74129 -0x21,0x20,0x00,0x02,
74130 -0x15,0x02,0x00,0x0C,
74131 -0x21,0x30,0x40,0x02,
74132 -0x2A,0xB0,0x07,0x3C,
74133 -0x25,0x00,0xE2,0x34,
74134 -0x04,0x00,0x43,0x24,
74135 -0x0B,0x10,0x77,0x00,
74136 -0x01,0x00,0x04,0x24,
74137 -0x02,0x00,0x03,0x24,
74138 -0x00,0x00,0x44,0xA0,
74139 -0x00,0x00,0x43,0xA0,
74140 -0x1A,0x5E,0xC4,0x96,
74141 -0x25,0xB0,0x06,0x3C,
74142 -0x66,0x03,0xC5,0x34,
74143 -0x01,0x00,0x84,0x24,
74144 -0x1A,0x5E,0xC4,0xA6,
74145 -0x1A,0x5E,0xC2,0x96,
74146 -0xFF,0x00,0x03,0x24,
74147 -0x00,0x00,0xA2,0xA4,
74148 -0x2F,0x00,0x23,0x12,
74149 -0x00,0x00,0x00,0x00,
74150 -0xEC,0x36,0x62,0x8E,
74151 -0x58,0x37,0x72,0x8E,
74152 -0x06,0x00,0x04,0x24,
74153 -0x00,0x00,0xA2,0xAE,
74154 -0xF0,0x36,0x62,0xAE,
74155 -0x00,0x00,0xB2,0xAE,
74156 -0xB0,0x01,0x00,0x0C,
74157 -0x00,0x00,0x00,0x00,
74158 -0x58,0x37,0x64,0x8E,
74159 -0x5C,0x37,0x63,0x8E,
74160 -0x02,0x80,0x02,0x3C,
74161 -0x18,0xEA,0x42,0x24,
74162 -0x00,0x00,0x54,0x8C,
74163 -0x80,0x00,0x84,0x24,
74164 -0xFF,0x00,0x62,0x24,
74165 -0x2B,0x10,0x44,0x00,
74166 -0x0A,0x18,0x82,0x00,
74167 -0x58,0x37,0x63,0xAE,
74168 -0x58,0x37,0x82,0x8E,
74169 -0x00,0x00,0x00,0x00,
74170 -0x00,0x00,0xA2,0xAE,
74171 -0x02,0x80,0x03,0x3C,
74172 -0xFF,0xFF,0x42,0x32,
74173 -0x25,0x80,0x43,0x00,
74174 -0x00,0x00,0xB0,0xAE,
74175 -0x0C,0x00,0x02,0x92,
74176 -0x04,0x00,0x05,0x24,
74177 -0x00,0x00,0xA2,0xAE,
74178 -0x02,0x00,0x04,0x92,
74179 -0x00,0x00,0x00,0x00,
74180 -0x21,0x20,0x92,0x00,
74181 -0xFF,0xFF,0x84,0x30,
74182 -0xFB,0x60,0x00,0x0C,
74183 -0x25,0x20,0x83,0x00,
74184 -0x0C,0x00,0x11,0x92,
74185 -0x20,0x10,0x02,0x3C,
74186 -0xFF,0x00,0x03,0x24,
74187 -0x00,0x22,0x11,0x00,
74188 -0xC2,0xFF,0x23,0x12,
74189 -0x21,0x20,0x82,0x00,
74190 -0xB8,0xFF,0xE0,0x16,
74191 -0xEC,0x36,0x84,0xAE,
74192 -0x02,0x80,0x02,0x3C,
74193 -0x30,0x1F,0x42,0x24,
74194 -0x62,0x06,0x00,0x08,
74195 -0xA0,0x36,0x51,0xA0,
74196 -0x20,0x00,0xE0,0x12,
74197 -0x46,0x00,0xE4,0x34,
74198 -0xA4,0x36,0x83,0x92,
74199 -0x47,0x00,0xE4,0x34,
74200 -0xB0,0x03,0xC5,0x34,
74201 -0x00,0x00,0x83,0xA0,
74202 -0x00,0x00,0xA3,0xAC,
74203 -0x00,0x60,0x01,0x40,
74204 -0x01,0x00,0x21,0x34,
74205 -0x00,0x60,0x81,0x40,
74206 -0x00,0x60,0x01,0x40,
74207 -0x01,0x00,0x21,0x34,
74208 -0x01,0x00,0x21,0x38,
74209 -0x00,0x60,0x81,0x40,
74210 -0x30,0x1F,0xC5,0x27,
74211 -0xD0,0x1B,0xA2,0x8C,
74212 -0x3C,0x00,0xBF,0x8F,
74213 -0x38,0x00,0xBE,0x8F,
74214 -0x34,0x00,0xB7,0x8F,
74215 -0x30,0x00,0xB6,0x8F,
74216 -0x2C,0x00,0xB5,0x8F,
74217 -0x28,0x00,0xB4,0x8F,
74218 -0x24,0x00,0xB3,0x8F,
74219 -0x20,0x00,0xB2,0x8F,
74220 -0x1C,0x00,0xB1,0x8F,
74221 -0x18,0x00,0xB0,0x8F,
74222 -0x60,0x00,0x03,0x3C,
74223 -0x25,0x10,0x43,0x00,
74224 -0x41,0xB0,0x04,0x3C,
74225 -0x40,0x00,0xBD,0x27,
74226 -0x00,0x00,0x82,0xAC,
74227 -0x08,0x00,0xE0,0x03,
74228 -0xD0,0x1B,0xA2,0xAC,
74229 -0xA0,0x36,0x83,0x92,
74230 -0xB0,0x03,0xC5,0x34,
74231 -0x00,0x00,0x83,0xA0,
74232 -0x00,0x00,0xA3,0xAC,
74233 -0x00,0x60,0x01,0x40,
74234 -0x01,0x00,0x21,0x34,
74235 -0x00,0x60,0x81,0x40,
74236 -0x00,0x60,0x01,0x40,
74237 -0x01,0x00,0x21,0x34,
74238 -0x01,0x00,0x21,0x38,
74239 -0x00,0x60,0x81,0x40,
74240 -0x30,0x1F,0xC5,0x27,
74241 -0xD0,0x1B,0xA2,0x8C,
74242 -0x3C,0x00,0xBF,0x8F,
74243 -0x38,0x00,0xBE,0x8F,
74244 -0x34,0x00,0xB7,0x8F,
74245 -0x30,0x00,0xB6,0x8F,
74246 -0x2C,0x00,0xB5,0x8F,
74247 -0x28,0x00,0xB4,0x8F,
74248 -0x24,0x00,0xB3,0x8F,
74249 -0x20,0x00,0xB2,0x8F,
74250 -0x1C,0x00,0xB1,0x8F,
74251 -0x18,0x00,0xB0,0x8F,
74252 -0x60,0x00,0x03,0x3C,
74253 -0x25,0x10,0x43,0x00,
74254 -0x41,0xB0,0x04,0x3C,
74255 -0x40,0x00,0xBD,0x27,
74256 -0x00,0x00,0x82,0xAC,
74257 -0x08,0x00,0xE0,0x03,
74258 -0xD0,0x1B,0xA2,0xAC,
74259 -0x00,0x80,0x03,0x3C,
74260 -0x25,0xB0,0x02,0x3C,
74261 -0xB4,0x1B,0x63,0x24,
74262 -0x18,0x03,0x42,0x34,
74263 -0x00,0x00,0x43,0xAC,
74264 -0x00,0x60,0x01,0x40,
74265 -0x01,0x00,0x21,0x34,
74266 -0x00,0x60,0x81,0x40,
74267 -0x00,0x60,0x01,0x40,
74268 -0x01,0x00,0x21,0x34,
74269 -0x01,0x00,0x21,0x38,
74270 -0x00,0x60,0x81,0x40,
74271 -0x02,0x80,0x05,0x3C,
74272 -0x30,0x1F,0xA5,0x24,
74273 -0xD8,0x1B,0xA2,0x8C,
74274 -0xD0,0x1B,0xA4,0x8C,
74275 -0x00,0x08,0x03,0x3C,
74276 -0x24,0x10,0x43,0x00,
74277 -0x25,0x20,0x82,0x00,
74278 -0x41,0xB0,0x03,0x3C,
74279 -0x00,0x00,0x64,0xAC,
74280 -0x08,0x00,0xE0,0x03,
74281 -0xD0,0x1B,0xA4,0xAC,
74282 -0x25,0xB0,0x04,0x3C,
74283 -0x00,0x80,0x02,0x3C,
74284 -0xC8,0xFF,0xBD,0x27,
74285 -0x18,0x03,0x83,0x34,
74286 -0x10,0x1C,0x42,0x24,
74287 -0x30,0x00,0xBF,0xAF,
74288 -0x2C,0x00,0xB5,0xAF,
74289 -0x28,0x00,0xB4,0xAF,
74290 -0x24,0x00,0xB3,0xAF,
74291 -0x20,0x00,0xB2,0xAF,
74292 -0x1C,0x00,0xB1,0xAF,
74293 -0x18,0x00,0xB0,0xAF,
74294 -0x00,0x00,0x62,0xAC,
74295 -0x00,0x60,0x01,0x40,
74296 -0x01,0x00,0x21,0x34,
74297 -0x00,0x60,0x81,0x40,
74298 -0x02,0x80,0x14,0x3C,
74299 -0x30,0x1F,0x93,0x26,
74300 -0xFC,0x00,0x82,0x34,
74301 -0x00,0x00,0x45,0x8C,
74302 -0xAC,0x1B,0x66,0x96,
74303 -0xD8,0x37,0x63,0x96,
74304 -0xD0,0x37,0x67,0x8E,
74305 -0x23,0x28,0xA6,0x00,
74306 -0x21,0x10,0xA3,0x00,
74307 -0x23,0x88,0x47,0x00,
74308 -0xB0,0x03,0x84,0x34,
74309 -0x23,0x30,0x23,0x02,
74310 -0x2B,0x10,0x71,0x00,
74311 -0x00,0x00,0x83,0xAC,
74312 -0x00,0x00,0x91,0xAC,
74313 -0x0B,0x88,0xC2,0x00,
74314 -0x21,0x20,0x20,0x02,
74315 -0x25,0x24,0x00,0x0C,
74316 -0xD4,0x37,0x65,0xAE,
74317 -0x4B,0x00,0x40,0x10,
74318 -0x21,0x90,0x40,0x00,
74319 -0x0C,0x00,0x51,0xAC,
74320 -0xD0,0x37,0x68,0x8E,
74321 -0xD4,0x37,0x62,0x8E,
74322 -0x08,0x00,0x45,0x8E,
74323 -0x20,0xBD,0x03,0x3C,
74324 -0x88,0x03,0x63,0x34,
74325 -0x2B,0x10,0x48,0x00,
74326 -0x40,0x10,0x15,0x3C,
74327 -0x21,0x20,0x00,0x00,
74328 -0xFF,0xFF,0x27,0x32,
74329 -0x00,0x00,0x65,0xAC,
74330 -0x28,0x00,0x40,0x14,
74331 -0x00,0x00,0x00,0x00,
74332 -0xAC,0x1B,0x66,0x96,
74333 -0x08,0x00,0x42,0x96,
74334 -0x40,0x10,0x05,0x3C,
74335 -0x21,0x20,0x00,0x00,
74336 -0x21,0x30,0x06,0x01,
74337 -0x25,0x28,0x45,0x00,
74338 -0x73,0x01,0x00,0x0C,
74339 -0x10,0x00,0xA0,0xAF,
74340 -0x02,0x80,0x02,0x3C,
74341 -0x64,0x57,0x42,0x24,
74342 -0x30,0x1F,0x84,0x26,
74343 -0xD4,0x37,0x83,0x8C,
74344 -0x04,0x00,0x45,0x8C,
74345 -0xD0,0x37,0x83,0xAC,
74346 -0x00,0x00,0x42,0xAE,
74347 -0x04,0x00,0x52,0xAC,
74348 -0x00,0x00,0xB2,0xAC,
74349 -0x04,0x00,0x45,0xAE,
74350 -0x00,0x60,0x01,0x40,
74351 -0x01,0x00,0x21,0x34,
74352 -0x01,0x00,0x21,0x38,
74353 -0x00,0x60,0x81,0x40,
74354 -0x30,0x1F,0x85,0x26,
74355 -0xD8,0x1B,0xA2,0x8C,
74356 -0xD0,0x1B,0xA3,0x8C,
74357 -0x30,0x00,0xBF,0x8F,
74358 -0x2C,0x00,0xB5,0x8F,
74359 -0x28,0x00,0xB4,0x8F,
74360 -0x24,0x00,0xB3,0x8F,
74361 -0x20,0x00,0xB2,0x8F,
74362 -0x1C,0x00,0xB1,0x8F,
74363 -0x18,0x00,0xB0,0x8F,
74364 -0x04,0x00,0x42,0x30,
74365 -0x25,0x18,0x62,0x00,
74366 -0x41,0xB0,0x04,0x3C,
74367 -0x38,0x00,0xBD,0x27,
74368 -0x00,0x00,0x83,0xAC,
74369 -0x08,0x00,0xE0,0x03,
74370 -0xD0,0x1B,0xA3,0xAC,
74371 -0xD8,0x37,0x70,0x8E,
74372 -0x08,0x00,0x45,0x96,
74373 -0xAC,0x1B,0x66,0x96,
74374 -0x23,0x80,0x08,0x02,
74375 -0xFF,0xFF,0x10,0x32,
74376 -0x21,0x30,0x06,0x01,
74377 -0x25,0x28,0xB5,0x00,
74378 -0x21,0x38,0x00,0x02,
74379 -0x73,0x01,0x00,0x0C,
74380 -0x10,0x00,0xA0,0xAF,
74381 -0xB0,0x01,0x00,0x0C,
74382 -0x21,0x20,0x00,0x00,
74383 -0x08,0x00,0x45,0x96,
74384 -0xAC,0x1B,0x62,0x96,
74385 -0x23,0x38,0x30,0x02,
74386 -0x25,0x28,0xB5,0x00,
74387 -0x21,0x10,0x06,0x3C,
74388 -0x21,0x28,0xB0,0x00,
74389 -0x21,0x30,0x46,0x00,
74390 -0xFF,0xFF,0xE7,0x30,
74391 -0x3C,0x07,0x00,0x08,
74392 -0x21,0x20,0x00,0x00,
74393 -0x00,0x60,0x02,0x40,
74394 -0x01,0x00,0x41,0x34,
74395 -0x01,0x00,0x21,0x38,
74396 -0x00,0x60,0x81,0x40,
74397 -0x02,0x80,0x04,0x3C,
74398 -0xD0,0x5E,0x83,0x8C,
74399 -0x00,0x00,0x00,0x00,
74400 -0x00,0x10,0x63,0x34,
74401 -0xD0,0x5E,0x83,0xAC,
74402 -0x00,0x60,0x82,0x40,
74403 -0x48,0x07,0x00,0x08,
74404 -0x00,0x00,0x00,0x00,
74405 -0x25,0xB0,0x04,0x3C,
74406 -0x00,0x80,0x02,0x3C,
74407 -0xC0,0xFF,0xBD,0x27,
74408 -0x18,0x03,0x83,0x34,
74409 -0xFC,0x1D,0x42,0x24,
74410 -0x3C,0x00,0xBF,0xAF,
74411 -0x38,0x00,0xBE,0xAF,
74412 -0x34,0x00,0xB7,0xAF,
74413 -0x30,0x00,0xB6,0xAF,
74414 -0x2C,0x00,0xB5,0xAF,
74415 -0x28,0x00,0xB4,0xAF,
74416 -0x24,0x00,0xB3,0xAF,
74417 -0x20,0x00,0xB2,0xAF,
74418 -0x1C,0x00,0xB1,0xAF,
74419 -0x18,0x00,0xB0,0xAF,
74420 -0x00,0x00,0x62,0xAC,
74421 -0x00,0x60,0x01,0x40,
74422 -0x01,0x00,0x21,0x34,
74423 -0x00,0x60,0x81,0x40,
74424 -0x02,0x80,0x1E,0x3C,
74425 -0x02,0x80,0x02,0x3C,
74426 -0x2A,0xB0,0x03,0x3C,
74427 -0xB0,0x03,0x96,0x34,
74428 -0x80,0xD5,0x57,0x24,
74429 -0x2C,0x00,0x73,0x34,
74430 -0x30,0x1F,0xD1,0x27,
74431 -0x02,0x80,0x15,0x3C,
74432 -0xD1,0x07,0x00,0x08,
74433 -0x02,0x80,0x14,0x3C,
74434 -0x54,0xF3,0x90,0xAE,
74435 -0x02,0x80,0x04,0x3C,
74436 -0x03,0x00,0xC3,0x90,
74437 -0x7C,0xD5,0x82,0x90,
74438 -0x7F,0x00,0x63,0x30,
74439 -0xFF,0x00,0x42,0x30,
74440 -0x6B,0x00,0x62,0x10,
74441 -0x08,0x00,0x10,0x26,
74442 -0x02,0x00,0xC2,0x90,
74443 -0x00,0x00,0x00,0x00,
74444 -0xFF,0x00,0x42,0x30,
74445 -0x37,0x00,0x42,0x28,
74446 -0x5E,0x00,0x40,0x10,
74447 -0x00,0x00,0x00,0x00,
74448 -0x02,0x00,0xC5,0x90,
74449 -0x03,0x00,0xC3,0x90,
74450 -0xFF,0x00,0xA5,0x30,
74451 -0x7F,0x00,0x63,0x30,
74452 -0x7C,0xD5,0x83,0xA0,
74453 -0x02,0x00,0xC2,0x90,
74454 -0x0E,0x00,0xA5,0x38,
74455 -0x0A,0x80,0xE5,0x00,
74456 -0xFF,0x00,0x42,0x30,
74457 -0xC0,0x10,0x02,0x00,
74458 -0x21,0x10,0x57,0x00,
74459 -0x04,0x00,0x43,0x8C,
74460 -0x02,0x80,0x04,0x3C,
74461 -0x8C,0xD7,0x84,0x24,
74462 -0x4C,0xF3,0xA3,0xAE,
74463 -0x02,0x00,0xC5,0x90,
74464 -0x2F,0x55,0x00,0x0C,
74465 -0xFF,0x00,0xA5,0x30,
74466 -0x4C,0xF3,0xA2,0x8E,
74467 -0x00,0x00,0x00,0x00,
74468 -0x09,0xF8,0x40,0x00,
74469 -0x21,0x20,0x00,0x02,
74470 -0x01,0x00,0x02,0x24,
74471 -0x02,0x00,0x03,0x24,
74472 -0x01,0x00,0x62,0xA2,
74473 -0x01,0x00,0x63,0xA2,
74474 -0x2B,0x00,0x40,0x12,
74475 -0x00,0x00,0x00,0x00,
74476 -0xB8,0x36,0x22,0x92,
74477 -0x20,0x10,0x03,0x3C,
74478 -0x88,0x37,0x25,0x8E,
74479 -0x00,0x12,0x02,0x00,
74480 -0x21,0x10,0x43,0x00,
74481 -0x21,0x30,0x40,0x00,
74482 -0x0A,0x00,0x04,0x24,
74483 -0x00,0x01,0x07,0x24,
74484 -0x1C,0x37,0x22,0xAE,
74485 -0x73,0x01,0x00,0x0C,
74486 -0x10,0x00,0xA0,0xAF,
74487 -0x88,0x37,0x30,0x8E,
74488 -0xB0,0x01,0x00,0x0C,
74489 -0x0A,0x00,0x04,0x24,
74490 -0xFF,0xFF,0x10,0x32,
74491 -0x02,0x80,0x02,0x3C,
74492 -0x25,0x80,0x02,0x02,
74493 -0x0C,0x00,0x04,0x92,
74494 -0xFF,0x00,0x02,0x24,
74495 -0x21,0x38,0x00,0x02,
74496 -0xFF,0x00,0x83,0x30,
74497 -0x20,0x00,0x10,0x26,
74498 -0x04,0x00,0x62,0x10,
74499 -0x21,0x90,0x00,0x00,
74500 -0xB8,0x36,0x24,0xA2,
74501 -0x01,0x00,0x12,0x24,
74502 -0x00,0x00,0xC3,0xAE,
74503 -0x04,0x00,0xE2,0x8C,
74504 -0x13,0x00,0x03,0x24,
74505 -0x02,0x12,0x02,0x00,
74506 -0x1F,0x00,0x45,0x30,
74507 -0xB6,0xFF,0xA3,0x10,
74508 -0x21,0x30,0x00,0x02,
74509 -0x02,0x80,0x04,0x3C,
74510 -0x2F,0x55,0x00,0x0C,
74511 -0x38,0xD7,0x84,0x24,
74512 -0x01,0x00,0x02,0x24,
74513 -0x02,0x00,0x03,0x24,
74514 -0x01,0x00,0x62,0xA2,
74515 -0x01,0x00,0x63,0xA2,
74516 -0xD7,0xFF,0x40,0x16,
74517 -0x00,0x00,0x00,0x00,
74518 -0x00,0x60,0x01,0x40,
74519 -0x01,0x00,0x21,0x34,
74520 -0x01,0x00,0x21,0x38,
74521 -0x00,0x60,0x81,0x40,
74522 -0x30,0x1F,0xC5,0x27,
74523 -0xD0,0x1B,0xA2,0x8C,
74524 -0x3C,0x00,0xBF,0x8F,
74525 -0x38,0x00,0xBE,0x8F,
74526 -0x34,0x00,0xB7,0x8F,
74527 -0x30,0x00,0xB6,0x8F,
74528 -0x2C,0x00,0xB5,0x8F,
74529 -0x28,0x00,0xB4,0x8F,
74530 -0x24,0x00,0xB3,0x8F,
74531 -0x20,0x00,0xB2,0x8F,
74532 -0x1C,0x00,0xB1,0x8F,
74533 -0x18,0x00,0xB0,0x8F,
74534 -0x00,0x04,0x03,0x3C,
74535 -0x25,0x10,0x43,0x00,
74536 -0x41,0xB0,0x04,0x3C,
74537 -0x40,0x00,0xBD,0x27,
74538 -0x00,0x00,0x82,0xAC,
74539 -0x08,0x00,0xE0,0x03,
74540 -0xD0,0x1B,0xA2,0xAC,
74541 -0x02,0x00,0xC5,0x90,
74542 -0x02,0x80,0x04,0x3C,
74543 -0x78,0xD7,0x84,0x24,
74544 -0x2F,0x55,0x00,0x0C,
74545 -0xFF,0x00,0xA5,0x30,
74546 -0xEB,0x07,0x00,0x08,
74547 -0x01,0x00,0x02,0x24,
74548 -0x02,0x00,0xC5,0x90,
74549 -0x02,0x00,0xC6,0x90,
74550 -0x7C,0xD5,0x87,0x90,
74551 -0x02,0x80,0x04,0x3C,
74552 -0x48,0xD7,0x84,0x24,
74553 -0xFF,0x00,0xA5,0x30,
74554 -0xFF,0x00,0xC6,0x30,
74555 -0x2F,0x55,0x00,0x0C,
74556 -0xFF,0x00,0xE7,0x30,
74557 -0xC1,0x07,0x00,0x08,
74558 -0x01,0x00,0x02,0x24,
74559 -0xC8,0xFF,0xBD,0x27,
74560 -0xFF,0xFF,0xA8,0x30,
74561 -0x02,0x80,0x02,0x3C,
74562 -0x25,0x40,0x02,0x01,
74563 -0x30,0x00,0xB6,0xAF,
74564 -0x20,0x00,0xB2,0xAF,
74565 -0x34,0x00,0xBF,0xAF,
74566 -0x2C,0x00,0xB5,0xAF,
74567 -0x28,0x00,0xB4,0xAF,
74568 -0x24,0x00,0xB3,0xAF,
74569 -0x1C,0x00,0xB1,0xAF,
74570 -0x18,0x00,0xB0,0xAF,
74571 -0x00,0x00,0x03,0x8D,
74572 -0xFF,0xFF,0xD2,0x30,
74573 -0x21,0xB0,0xA0,0x00,
74574 -0x00,0xC0,0x02,0x24,
74575 -0x08,0x00,0x45,0x26,
74576 -0x04,0x00,0x06,0x8D,
74577 -0x24,0x18,0x62,0x00,
74578 -0xFF,0x3F,0xA5,0x30,
74579 -0xF0,0xFF,0x02,0x3C,
74580 -0x25,0x18,0x65,0x00,
74581 -0xFF,0xFF,0x42,0x34,
74582 -0x24,0x18,0x62,0x00,
74583 -0x00,0x80,0x05,0x3C,
74584 -0x25,0x18,0x65,0x00,
74585 -0xFF,0x01,0xC6,0x34,
74586 -0x00,0x00,0x03,0xAD,
74587 -0x04,0x00,0x06,0xAD,
74588 -0x21,0x48,0x80,0x00,
74589 -0xFF,0xFF,0xE7,0x30,
74590 -0x18,0x00,0x12,0xA5,
74591 -0x1A,0x00,0x07,0xA1,
74592 -0x18,0x00,0x03,0x8D,
74593 -0xFF,0x7F,0x02,0x3C,
74594 -0xFF,0xFF,0x42,0x34,
74595 -0x24,0x18,0x62,0x00,
74596 -0x02,0x80,0x15,0x3C,
74597 -0x18,0x00,0x03,0xAD,
74598 -0x30,0x1F,0xA5,0x26,
74599 -0x7A,0x36,0xA3,0x90,
74600 -0x00,0x00,0x00,0x00,
74601 -0x01,0x00,0x62,0x24,
74602 -0x7A,0x36,0xA2,0xA0,
74603 -0x18,0x00,0x04,0x8D,
74604 -0xFF,0x80,0x02,0x3C,
74605 -0x20,0x00,0x45,0x26,
74606 -0xFF,0xFF,0x42,0x34,
74607 -0x7F,0x00,0x63,0x30,
74608 -0xFF,0xFF,0xB2,0x30,
74609 -0x24,0x20,0x82,0x00,
74610 -0x00,0x1E,0x03,0x00,
74611 -0x25,0xB0,0x02,0x3C,
74612 -0xC0,0x00,0x42,0x34,
74613 -0x25,0x20,0x83,0x00,
74614 -0x07,0x00,0x45,0x32,
74615 -0x18,0x00,0x04,0xAD,
74616 -0x00,0x00,0x52,0xA4,
74617 -0x03,0x00,0xA0,0x10,
74618 -0xFF,0xFF,0x42,0x32,
74619 -0x08,0x00,0x42,0x26,
74620 -0xFF,0xFF,0x42,0x30,
74621 -0x30,0x1F,0xB4,0x26,
74622 -0xF8,0x37,0x86,0x8E,
74623 -0xFC,0x37,0x90,0x8E,
74624 -0xF8,0xFF,0x52,0x30,
74625 -0x21,0x10,0xD2,0x00,
74626 -0x2B,0x10,0x02,0x02,
74627 -0x31,0x00,0x40,0x10,
74628 -0xFF,0x00,0x33,0x31,
74629 -0x23,0x80,0x06,0x02,
74630 -0x21,0x28,0xC0,0x02,
74631 -0xFF,0xFF,0x07,0x32,
74632 -0x01,0x00,0x11,0x24,
74633 -0x21,0x20,0x60,0x02,
74634 -0x73,0x01,0x00,0x0C,
74635 -0x10,0x00,0xB1,0xAF,
74636 -0x23,0x18,0x50,0x02,
74637 -0xFF,0xFF,0x72,0x30,
74638 -0x22,0x10,0x02,0x3C,
74639 -0x21,0x10,0x42,0x02,
74640 -0x21,0x20,0x60,0x02,
74641 -0xB0,0x01,0x00,0x0C,
74642 -0xF8,0x37,0x82,0xAE,
74643 -0x21,0x28,0xD0,0x02,
74644 -0x21,0x38,0x40,0x02,
74645 -0x21,0x20,0x60,0x02,
74646 -0x10,0x00,0xB1,0xAF,
74647 -0x22,0x10,0x06,0x3C,
74648 -0x73,0x01,0x00,0x0C,
74649 -0x30,0x1F,0xB1,0x26,
74650 -0xF8,0x37,0x23,0x8E,
74651 -0x25,0xB0,0x10,0x3C,
74652 -0xB0,0x03,0x02,0x36,
74653 -0x21,0x20,0x60,0x02,
74654 -0x00,0x00,0x43,0xAC,
74655 -0xB0,0x01,0x00,0x0C,
74656 -0x00,0x00,0x00,0x00,
74657 -0xF8,0x37,0x25,0x8E,
74658 -0xEC,0x00,0x02,0x36,
74659 -0xBD,0x00,0x04,0x36,
74660 -0x00,0x00,0x45,0xAC,
74661 -0x00,0x00,0x83,0x90,
74662 -0xC2,0x00,0x10,0x36,
74663 -0x34,0x00,0xBF,0x8F,
74664 -0x10,0x00,0x63,0x34,
74665 -0x00,0x00,0x83,0xA0,
74666 -0x30,0x00,0xB6,0x8F,
74667 -0x00,0x00,0x05,0xA6,
74668 -0x2C,0x00,0xB5,0x8F,
74669 -0x28,0x00,0xB4,0x8F,
74670 -0x24,0x00,0xB3,0x8F,
74671 -0x20,0x00,0xB2,0x8F,
74672 -0x1C,0x00,0xB1,0x8F,
74673 -0x18,0x00,0xB0,0x8F,
74674 -0x01,0x00,0x02,0x24,
74675 -0x08,0x00,0xE0,0x03,
74676 -0x38,0x00,0xBD,0x27,
74677 -0x21,0x28,0xC0,0x02,
74678 -0x21,0x20,0x60,0x02,
74679 -0x21,0x38,0x40,0x02,
74680 -0x01,0x00,0x02,0x24,
74681 -0x73,0x01,0x00,0x0C,
74682 -0x10,0x00,0xA2,0xAF,
74683 -0xF8,0x37,0x83,0x8E,
74684 -0x30,0x1F,0xB1,0x26,
74685 -0x25,0xB0,0x10,0x3C,
74686 -0x21,0x18,0x72,0x00,
74687 -0xF8,0x37,0x83,0xAE,
74688 -0xF8,0x37,0x23,0x8E,
74689 -0xB0,0x03,0x02,0x36,
74690 -0x21,0x20,0x60,0x02,
74691 -0x00,0x00,0x43,0xAC,
74692 -0xB0,0x01,0x00,0x0C,
74693 -0x00,0x00,0x00,0x00,
74694 -0xF8,0x37,0x25,0x8E,
74695 -0xEC,0x00,0x02,0x36,
74696 -0xBD,0x00,0x04,0x36,
74697 -0x00,0x00,0x45,0xAC,
74698 -0x00,0x00,0x83,0x90,
74699 -0xC2,0x00,0x10,0x36,
74700 -0x34,0x00,0xBF,0x8F,
74701 -0x10,0x00,0x63,0x34,
74702 -0x00,0x00,0x83,0xA0,
74703 -0x30,0x00,0xB6,0x8F,
74704 -0x00,0x00,0x05,0xA6,
74705 -0x2C,0x00,0xB5,0x8F,
74706 -0x28,0x00,0xB4,0x8F,
74707 -0x24,0x00,0xB3,0x8F,
74708 -0x20,0x00,0xB2,0x8F,
74709 -0x1C,0x00,0xB1,0x8F,
74710 -0x18,0x00,0xB0,0x8F,
74711 -0x01,0x00,0x02,0x24,
74712 -0x08,0x00,0xE0,0x03,
74713 -0x38,0x00,0xBD,0x27,
74714 -0xC8,0xFF,0xBD,0x27,
74715 -0x18,0x00,0xB0,0xAF,
74716 -0x34,0x00,0xBF,0xAF,
74717 -0x30,0x00,0xB6,0xAF,
74718 -0x2C,0x00,0xB5,0xAF,
74719 -0x28,0x00,0xB4,0xAF,
74720 -0x24,0x00,0xB3,0xAF,
74721 -0x20,0x00,0xB2,0xAF,
74722 -0x1C,0x00,0xB1,0xAF,
74723 -0x21,0x80,0x80,0x00,
74724 -0x00,0x60,0x14,0x40,
74725 -0x01,0x00,0x81,0x36,
74726 -0x01,0x00,0x21,0x38,
74727 -0x00,0x60,0x81,0x40,
74728 -0x14,0x00,0x83,0x8C,
74729 -0x02,0x80,0x15,0x3C,
74730 -0x16,0x00,0x02,0x24,
74731 -0x30,0x1F,0xB3,0x26,
74732 -0x21,0x28,0x00,0x00,
74733 -0x1D,0x00,0x62,0x10,
74734 -0x08,0x00,0x06,0x24,
74735 -0x08,0x00,0x82,0x94,
74736 -0x02,0x80,0x04,0x3C,
74737 -0x08,0x52,0x00,0x0C,
74738 -0x25,0x20,0x44,0x00,
74739 -0x08,0x00,0x05,0x8E,
74740 -0x0C,0x00,0x06,0x96,
74741 -0x14,0x00,0x07,0x96,
74742 -0x19,0x08,0x00,0x0C,
74743 -0x09,0x00,0x04,0x24,
74744 -0x04,0x00,0x02,0x8E,
74745 -0x00,0x00,0x03,0x8E,
74746 -0x21,0x20,0x00,0x02,
74747 -0x00,0x00,0x43,0xAC,
74748 -0x04,0x00,0x62,0xAC,
74749 -0x00,0x00,0x10,0xAE,
74750 -0x3D,0x24,0x00,0x0C,
74751 -0x04,0x00,0x10,0xAE,
74752 -0x00,0x60,0x94,0x40,
74753 -0x34,0x00,0xBF,0x8F,
74754 -0x30,0x00,0xB6,0x8F,
74755 -0x2C,0x00,0xB5,0x8F,
74756 -0x28,0x00,0xB4,0x8F,
74757 -0x24,0x00,0xB3,0x8F,
74758 -0x20,0x00,0xB2,0x8F,
74759 -0x1C,0x00,0xB1,0x8F,
74760 -0x18,0x00,0xB0,0x8F,
74761 -0x08,0x00,0xE0,0x03,
74762 -0x38,0x00,0xBD,0x27,
74763 -0xF8,0x37,0x68,0x8E,
74764 -0x0C,0x00,0x11,0x8E,
74765 -0xFC,0x37,0x62,0x8E,
74766 -0x25,0xB0,0x03,0x3C,
74767 -0x21,0x28,0x11,0x01,
74768 -0xC0,0x00,0x63,0x34,
74769 -0x23,0x90,0x48,0x00,
74770 -0x2B,0x10,0x45,0x00,
74771 -0x01,0x00,0x16,0x24,
74772 -0x09,0x00,0x04,0x24,
74773 -0xFF,0xFF,0x27,0x32,
74774 -0x21,0x30,0x00,0x01,
74775 -0x00,0x00,0x71,0xA4,
74776 -0x33,0x00,0x40,0x10,
74777 -0x01,0x00,0x02,0x24,
74778 -0x08,0x00,0x05,0x8E,
74779 -0xFF,0xFF,0x47,0x32,
74780 -0x23,0x88,0x32,0x02,
74781 -0x73,0x01,0x00,0x0C,
74782 -0x10,0x00,0xB6,0xAF,
74783 -0x22,0x10,0x03,0x3C,
74784 -0x21,0x18,0x23,0x02,
74785 -0x09,0x00,0x04,0x24,
74786 -0xB0,0x01,0x00,0x0C,
74787 -0xF8,0x37,0x63,0xAE,
74788 -0x08,0x00,0x05,0x8E,
74789 -0xFF,0xFF,0x27,0x32,
74790 -0x09,0x00,0x04,0x24,
74791 -0x21,0x28,0xB2,0x00,
74792 -0x22,0x10,0x06,0x3C,
74793 -0x73,0x01,0x00,0x0C,
74794 -0x10,0x00,0xB6,0xAF,
74795 -0xB0,0x01,0x00,0x0C,
74796 -0x09,0x00,0x04,0x24,
74797 -0x30,0x1F,0xA2,0x26,
74798 -0xF8,0x37,0x46,0x8C,
74799 -0x25,0xB0,0x03,0x3C,
74800 -0xEC,0x00,0x64,0x34,
74801 -0x00,0x00,0x86,0xAC,
74802 -0xBD,0x00,0x65,0x34,
74803 -0x00,0x00,0xA2,0x90,
74804 -0xC2,0x00,0x63,0x34,
74805 -0x21,0x20,0x00,0x02,
74806 -0x10,0x00,0x42,0x34,
74807 -0x00,0x00,0xA2,0xA0,
74808 -0x00,0x00,0x66,0xA4,
74809 -0x04,0x00,0x02,0x8E,
74810 -0x00,0x00,0x03,0x8E,
74811 -0x00,0x00,0x00,0x00,
74812 -0x00,0x00,0x43,0xAC,
74813 -0x04,0x00,0x62,0xAC,
74814 -0x00,0x00,0x10,0xAE,
74815 -0x3D,0x24,0x00,0x0C,
74816 -0x04,0x00,0x10,0xAE,
74817 -0x00,0x60,0x94,0x40,
74818 -0x34,0x00,0xBF,0x8F,
74819 -0x30,0x00,0xB6,0x8F,
74820 -0x2C,0x00,0xB5,0x8F,
74821 -0x28,0x00,0xB4,0x8F,
74822 -0x24,0x00,0xB3,0x8F,
74823 -0x20,0x00,0xB2,0x8F,
74824 -0x1C,0x00,0xB1,0x8F,
74825 -0x18,0x00,0xB0,0x8F,
74826 -0x08,0x00,0xE0,0x03,
74827 -0x38,0x00,0xBD,0x27,
74828 -0x08,0x00,0x05,0x8E,
74829 -0x21,0x30,0x00,0x01,
74830 -0x09,0x00,0x04,0x24,
74831 -0x73,0x01,0x00,0x0C,
74832 -0x10,0x00,0xA2,0xAF,
74833 -0xF8,0x37,0x63,0x8E,
74834 -0x00,0x00,0x00,0x00,
74835 -0x21,0x18,0x71,0x00,
74836 -0x05,0x09,0x00,0x08,
74837 -0xF8,0x37,0x63,0xAE,
74838 -0xE8,0xFF,0xBD,0x27,
74839 -0x14,0x00,0xBF,0xAF,
74840 -0x10,0x00,0xB0,0xAF,
74841 -0x21,0x28,0x80,0x00,
74842 -0x00,0x60,0x10,0x40,
74843 -0x01,0x00,0x01,0x36,
74844 -0x01,0x00,0x21,0x38,
74845 -0x00,0x60,0x81,0x40,
74846 -0x25,0xB0,0x02,0x3C,
74847 -0xBF,0x00,0x42,0x34,
74848 -0x00,0x00,0x43,0x90,
74849 -0x00,0x00,0x00,0x00,
74850 -0x04,0x00,0x63,0x2C,
74851 -0x05,0x00,0x60,0x10,
74852 -0x02,0x80,0x06,0x3C,
74853 -0x6C,0x57,0xC3,0x8C,
74854 -0x6C,0x57,0xC2,0x24,
74855 -0x0C,0x00,0x62,0x10,
74856 -0x00,0x00,0x00,0x00,
74857 -0x6C,0x57,0xC2,0x24,
74858 -0x04,0x00,0x43,0x8C,
74859 -0x00,0x00,0xA2,0xAC,
74860 -0x04,0x00,0x45,0xAC,
74861 -0x00,0x00,0x65,0xAC,
74862 -0x04,0x00,0xA3,0xAC,
74863 -0x00,0x60,0x90,0x40,
74864 -0x14,0x00,0xBF,0x8F,
74865 -0x10,0x00,0xB0,0x8F,
74866 -0x08,0x00,0xE0,0x03,
74867 -0x18,0x00,0xBD,0x27,
74868 -0xB4,0x08,0x00,0x0C,
74869 -0x00,0x00,0x00,0x00,
74870 -0x00,0x60,0x90,0x40,
74871 -0x14,0x00,0xBF,0x8F,
74872 -0x10,0x00,0xB0,0x8F,
74873 -0x08,0x00,0xE0,0x03,
74874 -0x18,0x00,0xBD,0x27,
74875 -0xE0,0xFF,0xBD,0x27,
74876 -0x10,0x00,0xB0,0xAF,
74877 -0x21,0x80,0x80,0x00,
74878 -0x02,0x80,0x04,0x3C,
74879 -0x98,0xD7,0x84,0x24,
74880 -0x1C,0x00,0xBF,0xAF,
74881 -0x18,0x00,0xB2,0xAF,
74882 -0x2F,0x55,0x00,0x0C,
74883 -0x14,0x00,0xB1,0xAF,
74884 -0x00,0x00,0x04,0x96,
74885 -0x00,0x00,0x00,0x00,
74886 -0x20,0x00,0x83,0x24,
74887 -0x07,0x00,0x62,0x30,
74888 -0x49,0x00,0x40,0x10,
74889 -0xC2,0x10,0x03,0x00,
74890 -0x28,0x00,0x82,0x24,
74891 -0xC2,0x10,0x02,0x00,
74892 -0x25,0x24,0x00,0x0C,
74893 -0xC0,0x20,0x02,0x00,
74894 -0x47,0x00,0x40,0x10,
74895 -0x21,0x88,0x40,0x00,
74896 -0x02,0x80,0x12,0x3C,
74897 -0x30,0x1F,0x50,0x26,
74898 -0x1C,0x37,0x05,0x8E,
74899 -0x0A,0x00,0x04,0x24,
74900 -0x28,0x00,0x06,0x24,
74901 -0xC7,0x01,0x00,0x0C,
74902 -0x21,0x38,0x40,0x00,
74903 -0xB0,0x1B,0x03,0x96,
74904 -0x00,0x00,0x00,0x00,
74905 -0x00,0x01,0x62,0x30,
74906 -0x47,0x00,0x40,0x14,
74907 -0x01,0x00,0x62,0x30,
74908 -0x02,0x80,0x02,0x3C,
74909 -0xEA,0x5D,0x48,0x90,
74910 -0x25,0xB0,0x04,0x3C,
74911 -0x2F,0x00,0x02,0x3C,
74912 -0xD0,0x01,0x85,0x34,
74913 -0x17,0x32,0x42,0x34,
74914 -0x00,0x00,0xA2,0xAC,
74915 -0x5E,0x00,0x03,0x3C,
74916 -0x10,0x00,0x02,0x3C,
74917 -0xDC,0x01,0x87,0x34,
74918 -0xD4,0x01,0x86,0x34,
74919 -0x17,0x43,0x63,0x34,
74920 -0x20,0x53,0x42,0x34,
74921 -0xD8,0x01,0x84,0x34,
74922 -0x00,0x00,0xC3,0xAC,
74923 -0x30,0x1F,0x49,0x26,
74924 -0x00,0x00,0x82,0xAC,
74925 -0x44,0xA4,0x03,0x34,
74926 -0x01,0x00,0x02,0x24,
74927 -0x00,0x00,0xE3,0xAC,
74928 -0xEC,0x38,0x20,0xAD,
74929 -0x08,0x39,0x20,0xAD,
74930 -0x50,0x3E,0x20,0xAD,
74931 -0x10,0x3E,0x20,0xAD,
74932 -0x51,0x00,0x02,0x11,
74933 -0x1A,0x3E,0x20,0xA1,
74934 -0x10,0x23,0x22,0x8D,
74935 -0xFF,0xF7,0x03,0x24,
74936 -0xFF,0xEF,0x04,0x24,
74937 -0x24,0x10,0x43,0x00,
74938 -0x24,0x10,0x44,0x00,
74939 -0x10,0x23,0x22,0xAD,
74940 -0xB0,0x01,0x00,0x0C,
74941 -0x0A,0x00,0x04,0x24,
74942 -0x08,0x00,0x22,0x96,
74943 -0x02,0x80,0x05,0x3C,
74944 -0x02,0x80,0x04,0x3C,
74945 -0x25,0x28,0x45,0x00,
74946 -0xDC,0x01,0x06,0x24,
74947 -0x10,0x52,0x00,0x0C,
74948 -0x84,0x58,0x84,0x24,
74949 -0x3D,0x24,0x00,0x0C,
74950 -0x21,0x20,0x20,0x02,
74951 -0x30,0x1F,0x43,0x26,
74952 -0x9C,0x39,0x62,0x8C,
74953 -0xD1,0x11,0x00,0x0C,
74954 -0x30,0x3B,0x62,0xA0,
74955 -0x1C,0x00,0xBF,0x8F,
74956 -0x18,0x00,0xB2,0x8F,
74957 -0x14,0x00,0xB1,0x8F,
74958 -0x10,0x00,0xB0,0x8F,
74959 -0x21,0x10,0x00,0x00,
74960 -0x08,0x00,0xE0,0x03,
74961 -0x20,0x00,0xBD,0x27,
74962 -0x25,0x24,0x00,0x0C,
74963 -0xC0,0x20,0x02,0x00,
74964 -0xBB,0xFF,0x40,0x14,
74965 -0x21,0x88,0x40,0x00,
74966 -0x02,0x80,0x04,0x3C,
74967 -0x02,0x80,0x05,0x3C,
74968 -0xA8,0xD7,0x84,0x24,
74969 -0x2F,0x55,0x00,0x0C,
74970 -0x1C,0xEA,0xA5,0x24,
74971 -0x1C,0x00,0xBF,0x8F,
74972 -0x18,0x00,0xB2,0x8F,
74973 -0x14,0x00,0xB1,0x8F,
74974 -0x10,0x00,0xB0,0x8F,
74975 -0x21,0x10,0x00,0x00,
74976 -0x08,0x00,0xE0,0x03,
74977 -0x20,0x00,0xBD,0x27,
74978 -0x32,0x00,0x40,0x14,
74979 -0x02,0x80,0x04,0x3C,
74980 -0xA3,0x51,0x00,0x0C,
74981 -0x00,0x00,0x00,0x00,
74982 -0xB0,0x1B,0x02,0x96,
74983 -0x25,0xB0,0x03,0x3C,
74984 -0x4C,0x00,0x63,0x34,
74985 -0xFF,0xFE,0x42,0x30,
74986 -0xB0,0x1B,0x02,0xA6,
74987 -0x00,0x00,0x60,0xA0,
74988 -0x02,0x80,0x02,0x3C,
74989 -0xEA,0x5D,0x48,0x90,
74990 -0x25,0xB0,0x04,0x3C,
74991 -0x2F,0x00,0x02,0x3C,
74992 -0xD0,0x01,0x85,0x34,
74993 -0x17,0x32,0x42,0x34,
74994 -0x00,0x00,0xA2,0xAC,
74995 -0x5E,0x00,0x03,0x3C,
74996 -0x10,0x00,0x02,0x3C,
74997 -0xDC,0x01,0x87,0x34,
74998 -0xD4,0x01,0x86,0x34,
74999 -0x17,0x43,0x63,0x34,
75000 -0x20,0x53,0x42,0x34,
75001 -0xD8,0x01,0x84,0x34,
75002 -0x00,0x00,0xC3,0xAC,
75003 -0x30,0x1F,0x49,0x26,
75004 -0x00,0x00,0x82,0xAC,
75005 -0x44,0xA4,0x03,0x34,
75006 -0x01,0x00,0x02,0x24,
75007 -0x00,0x00,0xE3,0xAC,
75008 -0xEC,0x38,0x20,0xAD,
75009 -0x08,0x39,0x20,0xAD,
75010 -0x50,0x3E,0x20,0xAD,
75011 -0x10,0x3E,0x20,0xAD,
75012 -0xB1,0xFF,0x02,0x15,
75013 -0x1A,0x3E,0x20,0xA1,
75014 -0x02,0x80,0x02,0x3C,
75015 -0xEB,0x5D,0x44,0x90,
75016 -0x02,0x00,0x03,0x24,
75017 -0x06,0x00,0x83,0x10,
75018 -0xFF,0xF7,0x03,0x24,
75019 -0x10,0x23,0x22,0x8D,
75020 -0x00,0x00,0x00,0x00,
75021 -0x24,0x10,0x43,0x00,
75022 -0x95,0x09,0x00,0x08,
75023 -0x00,0x10,0x42,0x34,
75024 -0x10,0x23,0x22,0x8D,
75025 -0xFF,0xEF,0x03,0x24,
75026 -0x00,0x08,0x42,0x34,
75027 -0x95,0x09,0x00,0x08,
75028 -0x24,0x10,0x43,0x00,
75029 -0x88,0x58,0x84,0x24,
75030 -0x6C,0x4C,0x00,0x0C,
75031 -0x03,0x00,0x05,0x24,
75032 -0xBE,0x09,0x00,0x08,
75033 -0x00,0x00,0x00,0x00,
75034 -0x08,0x00,0xE0,0x03,
75035 -0x21,0x10,0x00,0x00,
75036 -0xD8,0xFF,0xBD,0x27,
75037 -0x18,0x00,0xB2,0xAF,
75038 -0x02,0x80,0x12,0x3C,
75039 -0x1C,0x00,0xB3,0xAF,
75040 -0x24,0x00,0xBF,0xAF,
75041 -0x20,0x00,0xB4,0xAF,
75042 -0x14,0x00,0xB1,0xAF,
75043 -0x10,0x00,0xB0,0xAF,
75044 -0x30,0x1F,0x43,0x26,
75045 -0xB0,0x1B,0x62,0x94,
75046 -0x00,0x00,0x00,0x00,
75047 -0x00,0x10,0x42,0x30,
75048 -0x76,0x00,0x40,0x14,
75049 -0x21,0x98,0x80,0x00,
75050 -0x00,0x60,0x10,0x40,
75051 -0x01,0x00,0x01,0x36,
75052 -0x01,0x00,0x21,0x38,
75053 -0x00,0x60,0x81,0x40,
75054 -0x02,0x80,0x14,0x3C,
75055 -0xF6,0x5E,0x82,0x92,
75056 -0x00,0x00,0x00,0x00,
75057 -0x0F,0x00,0x42,0x30,
75058 -0x04,0x00,0x42,0x28,
75059 -0x74,0x00,0x40,0x14,
75060 -0x04,0x00,0x04,0x24,
75061 -0x00,0x60,0x90,0x40,
75062 -0x30,0x1F,0x42,0x8E,
75063 -0xFF,0xF0,0x03,0x24,
75064 -0x0F,0xFF,0x04,0x24,
75065 -0x24,0x10,0x43,0x00,
75066 -0x24,0x10,0x44,0x00,
75067 -0x25,0xB0,0x05,0x3C,
75068 -0xF0,0xFF,0x03,0x24,
75069 -0x24,0x10,0x43,0x00,
75070 -0x64,0x03,0xA4,0x34,
75071 -0x17,0x00,0x03,0x24,
75072 -0x00,0x00,0x80,0xA0,
75073 -0x50,0x0C,0xA3,0xA0,
75074 -0x30,0x1F,0x42,0xAE,
75075 -0x21,0x10,0x00,0x00,
75076 -0x01,0x00,0x42,0x24,
75077 -0xFF,0x00,0x42,0x30,
75078 -0x06,0x00,0x43,0x2C,
75079 -0xFD,0xFF,0x60,0x14,
75080 -0x01,0x00,0x42,0x24,
75081 -0x25,0xB0,0x02,0x3C,
75082 -0x17,0x00,0x03,0x24,
75083 -0x58,0x0C,0x43,0xA0,
75084 -0x21,0x10,0x00,0x00,
75085 -0x01,0x00,0x42,0x24,
75086 -0xFF,0x00,0x42,0x30,
75087 -0x06,0x00,0x43,0x2C,
75088 -0xFD,0xFF,0x60,0x14,
75089 -0x01,0x00,0x42,0x24,
75090 -0x30,0x1F,0x51,0x26,
75091 -0xB0,0x1B,0x22,0x96,
75092 -0x02,0x80,0x04,0x3C,
75093 -0xB4,0xD7,0x84,0x24,
75094 -0x00,0x10,0x42,0x34,
75095 -0x2F,0x55,0x00,0x0C,
75096 -0xB0,0x1B,0x22,0xA6,
75097 -0x01,0x00,0x02,0x24,
75098 -0x25,0xB0,0x03,0x3C,
75099 -0x6C,0x3B,0x22,0xAE,
75100 -0x4C,0x00,0x63,0x34,
75101 -0x08,0x00,0x66,0x8E,
75102 -0x00,0x00,0x67,0x90,
75103 -0xB0,0x1B,0x22,0x96,
75104 -0x30,0x3B,0x28,0x92,
75105 -0x31,0x3B,0x29,0x92,
75106 -0x8F,0x3E,0x2A,0x92,
75107 -0x38,0x3B,0x2B,0x92,
75108 -0x67,0x3B,0x2C,0x92,
75109 -0x74,0x3B,0x26,0xAE,
75110 -0x00,0x80,0x42,0x30,
75111 -0xA1,0x3B,0x27,0xA2,
75112 -0x21,0x20,0x00,0x00,
75113 -0x00,0x00,0x60,0xA0,
75114 -0x21,0x28,0x00,0x00,
75115 -0x99,0x3B,0x28,0xA2,
75116 -0x9A,0x3B,0x29,0xA2,
75117 -0x9E,0x3B,0x22,0xA6,
75118 -0xA0,0x3B,0x2A,0xA2,
75119 -0x30,0x3B,0x2B,0xA2,
75120 -0x31,0x3B,0x2C,0xA2,
75121 -0xA4,0x3B,0x20,0xAE,
75122 -0xA8,0x3B,0x20,0xAE,
75123 -0x9C,0x3B,0x20,0xA2,
75124 -0x12,0x0D,0x00,0x0C,
75125 -0x9B,0x3B,0x20,0xA2,
75126 -0x08,0x00,0x66,0x8E,
75127 -0x00,0x00,0x00,0x00,
75128 -0x33,0x00,0xC0,0x14,
75129 -0x0C,0x00,0x70,0x26,
75130 -0x00,0x00,0x62,0x8E,
75131 -0x21,0x20,0x20,0x02,
75132 -0xAC,0x3B,0x23,0x26,
75133 -0x70,0x3B,0x22,0xAE,
75134 -0x3F,0x00,0x02,0x24,
75135 -0xFF,0xFF,0x42,0x24,
75136 -0x00,0x00,0x60,0xA0,
75137 -0xFD,0xFF,0x41,0x04,
75138 -0x07,0x00,0x63,0x24,
75139 -0xB0,0x1B,0x83,0x94,
75140 -0x00,0x00,0x00,0x00,
75141 -0x00,0x01,0x62,0x30,
75142 -0x09,0x00,0x40,0x10,
75143 -0x30,0x1F,0x50,0x26,
75144 -0x01,0x00,0x62,0x30,
75145 -0x06,0x00,0x40,0x10,
75146 -0x00,0x00,0x00,0x00,
75147 -0xF6,0x5E,0x82,0x92,
75148 -0x0C,0x00,0x03,0x24,
75149 -0x0F,0x00,0x42,0x30,
75150 -0x2C,0x00,0x43,0x10,
75151 -0x00,0x00,0x00,0x00,
75152 -0x30,0x3B,0x04,0x92,
75153 -0x4F,0x0C,0x00,0x0C,
75154 -0x00,0x00,0x00,0x00,
75155 -0x25,0xB0,0x04,0x3C,
75156 -0x48,0x00,0x84,0x34,
75157 -0x00,0x00,0x83,0x8C,
75158 -0x70,0x3B,0x05,0x8E,
75159 -0x7B,0xFF,0x02,0x3C,
75160 -0xFF,0xFF,0x42,0x34,
75161 -0x24,0x18,0x62,0x00,
75162 -0x01,0x00,0x02,0x24,
75163 -0x00,0x00,0x83,0xAC,
75164 -0x19,0x00,0xA2,0x10,
75165 -0x3C,0x00,0x02,0x24,
75166 -0x98,0x38,0x02,0xAE,
75167 -0x24,0x00,0xBF,0x8F,
75168 -0x20,0x00,0xB4,0x8F,
75169 -0x1C,0x00,0xB3,0x8F,
75170 -0x18,0x00,0xB2,0x8F,
75171 -0x14,0x00,0xB1,0x8F,
75172 -0x10,0x00,0xB0,0x8F,
75173 -0x21,0x10,0x00,0x00,
75174 -0x08,0x00,0xE0,0x03,
75175 -0x28,0x00,0xBD,0x27,
75176 -0x64,0x31,0x00,0x0C,
75177 -0x01,0x00,0x05,0x24,
75178 -0x0F,0x0A,0x00,0x08,
75179 -0x00,0x00,0x00,0x00,
75180 -0x02,0x80,0x04,0x3C,
75181 -0x21,0x28,0x00,0x02,
75182 -0x10,0x52,0x00,0x0C,
75183 -0xA8,0x5A,0x84,0x24,
75184 -0x02,0x80,0x04,0x3C,
75185 -0xC4,0xD7,0x84,0x24,
75186 -0x2F,0x55,0x00,0x0C,
75187 -0x21,0x28,0x00,0x02,
75188 -0x54,0x0A,0x00,0x08,
75189 -0x00,0x00,0x00,0x00,
75190 -0x13,0x0F,0x00,0x0C,
75191 -0x00,0x00,0x00,0x00,
75192 -0x3C,0x00,0x02,0x24,
75193 -0x79,0x0A,0x00,0x08,
75194 -0x98,0x38,0x02,0xAE,
75195 -0xCD,0x4E,0x00,0x0C,
75196 -0x01,0x00,0x04,0x24,
75197 -0x6A,0x0A,0x00,0x08,
75198 -0x30,0x1F,0x50,0x26,
75199 -0xE8,0xFF,0xBD,0x27,
75200 -0x10,0x00,0xB0,0xAF,
75201 -0x14,0x00,0xBF,0xAF,
75202 -0x21,0x80,0x80,0x00,
75203 -0x00,0x00,0x02,0x92,
75204 -0x02,0x80,0x04,0x3C,
75205 -0x21,0x28,0x40,0x00,
75206 -0x03,0x00,0x42,0x2C,
75207 -0x06,0x00,0x40,0x14,
75208 -0xD0,0xD7,0x84,0x24,
75209 -0x14,0x00,0xBF,0x8F,
75210 -0x10,0x00,0xB0,0x8F,
75211 -0x21,0x10,0x00,0x00,
75212 -0x08,0x00,0xE0,0x03,
75213 -0x18,0x00,0xBD,0x27,
75214 -0x2F,0x55,0x00,0x0C,
75215 -0x00,0x00,0x00,0x00,
75216 -0x00,0x00,0x03,0x92,
75217 -0x14,0x00,0xBF,0x8F,
75218 -0x10,0x00,0xB0,0x8F,
75219 -0x02,0x80,0x02,0x3C,
75220 -0xA8,0x5C,0x43,0xAC,
75221 -0x18,0x00,0xBD,0x27,
75222 -0x08,0x00,0xE0,0x03,
75223 -0x21,0x10,0x00,0x00,
75224 -0x00,0x80,0x03,0x3C,
75225 -0x25,0xB0,0x02,0x3C,
75226 -0xD0,0xFF,0xBD,0x27,
75227 -0x18,0x03,0x42,0x34,
75228 -0xC8,0x2A,0x63,0x24,
75229 -0x24,0x00,0xB3,0xAF,
75230 -0x28,0x00,0xBF,0xAF,
75231 -0x20,0x00,0xB2,0xAF,
75232 -0x1C,0x00,0xB1,0xAF,
75233 -0x18,0x00,0xB0,0xAF,
75234 -0x00,0x00,0x43,0xAC,
75235 -0x02,0x80,0x04,0x3C,
75236 -0xF4,0x5E,0x82,0x90,
75237 -0x00,0x00,0x00,0x00,
75238 -0x12,0x00,0x40,0x10,
75239 -0x02,0x80,0x13,0x3C,
75240 -0x02,0x80,0x02,0x3C,
75241 -0x0D,0x5F,0x43,0x90,
75242 -0x00,0x00,0x00,0x00,
75243 -0x66,0x00,0x60,0x14,
75244 -0x01,0x00,0x04,0x24,
75245 -0x02,0x80,0x02,0x3C,
75246 -0x16,0x5F,0x44,0xA0,
75247 -0x02,0x80,0x03,0x3C,
75248 -0xF5,0x5E,0x64,0x90,
75249 -0x01,0x00,0x05,0x24,
75250 -0x64,0x31,0x00,0x0C,
75251 -0xFF,0x00,0x84,0x30,
75252 -0x02,0x80,0x02,0x3C,
75253 -0x74,0x57,0x43,0x8C,
75254 -0x74,0x57,0x42,0x24,
75255 -0xA7,0x00,0x62,0x10,
75256 -0x02,0x80,0x13,0x3C,
75257 -0x00,0x60,0x01,0x40,
75258 -0x01,0x00,0x21,0x34,
75259 -0x00,0x60,0x81,0x40,
75260 -0x2A,0xB0,0x02,0x3C,
75261 -0x36,0x00,0x42,0x34,
75262 -0x00,0x00,0x43,0x90,
75263 -0x30,0x1F,0x66,0x26,
75264 -0x00,0x38,0xC5,0x8C,
75265 -0xC0,0x18,0x03,0x00,
75266 -0x23,0xB0,0x04,0x3C,
75267 -0xF0,0x07,0x63,0x30,
75268 -0xFF,0x1F,0x02,0x3C,
75269 -0x21,0x18,0x64,0x00,
75270 -0xFF,0xFF,0x42,0x34,
75271 -0x24,0x20,0x62,0x00,
75272 -0x23,0x88,0x85,0x00,
75273 -0x00,0x04,0x22,0x26,
75274 -0x2B,0x28,0x85,0x00,
75275 -0xA4,0x37,0xC3,0x8C,
75276 -0x0B,0x88,0x45,0x00,
75277 -0xE1,0x01,0x22,0x2E,
75278 -0xA0,0x37,0xC3,0xAC,
75279 -0x04,0x38,0xC4,0xAC,
75280 -0xAA,0x37,0xC0,0xA4,
75281 -0x14,0x00,0x40,0x14,
75282 -0xA9,0x37,0xC0,0xA0,
75283 -0x20,0xFE,0x82,0x24,
75284 -0x20,0x02,0x83,0x24,
75285 -0x0A,0x18,0x45,0x00,
75286 -0x23,0x10,0x02,0x3C,
75287 -0xFF,0x03,0x42,0x34,
75288 -0x2B,0x10,0x43,0x00,
75289 -0x21,0x28,0x60,0x00,
75290 -0x34,0x00,0x40,0x14,
75291 -0x00,0x38,0xC3,0xAC,
75292 -0x04,0x38,0xC2,0x8C,
75293 -0x00,0x00,0x00,0x00,
75294 -0x2B,0x18,0x45,0x00,
75295 -0x23,0x88,0x45,0x00,
75296 -0x03,0x00,0x60,0x10,
75297 -0xE1,0x01,0x22,0x2E,
75298 -0x00,0x04,0x31,0x26,
75299 -0xE1,0x01,0x22,0x2E,
75300 -0x0E,0x00,0x40,0x10,
75301 -0x30,0x1F,0x70,0x26,
75302 -0x30,0x1F,0x70,0x26,
75303 -0x04,0x38,0x03,0x8E,
75304 -0x00,0x38,0x04,0x8E,
75305 -0x00,0x00,0x00,0x00,
75306 -0x2B,0x10,0x83,0x00,
75307 -0x2E,0x00,0x40,0x14,
75308 -0x2B,0x10,0x64,0x00,
75309 -0x5A,0x00,0x40,0x14,
75310 -0x25,0xB0,0x02,0x3C,
75311 -0x80,0x00,0x03,0x24,
75312 -0xD0,0x03,0x42,0x34,
75313 -0x00,0x00,0x43,0xAC,
75314 -0x30,0x1F,0x70,0x26,
75315 -0x00,0x38,0x03,0x96,
75316 -0x2A,0xB0,0x02,0x3C,
75317 -0x35,0x00,0x42,0x34,
75318 -0xC2,0x88,0x03,0x00,
75319 -0x00,0x00,0x51,0xA0,
75320 -0x5D,0x27,0x00,0x0C,
75321 -0x00,0x00,0x00,0x00,
75322 -0xAA,0x37,0x03,0x96,
75323 -0x25,0xB0,0x02,0x3C,
75324 -0xB0,0x03,0x42,0x34,
75325 -0x00,0x00,0x43,0xAC,
75326 -0x00,0x60,0x01,0x40,
75327 -0x01,0x00,0x21,0x34,
75328 -0x01,0x00,0x21,0x38,
75329 -0x00,0x60,0x81,0x40,
75330 -0xD0,0x1B,0x02,0x8E,
75331 -0x80,0x00,0x03,0x3C,
75332 -0x41,0xB0,0x04,0x3C,
75333 -0x25,0x10,0x43,0x00,
75334 -0x00,0x00,0x82,0xAC,
75335 -0x28,0x00,0xBF,0x8F,
75336 -0xD0,0x1B,0x02,0xAE,
75337 -0x24,0x00,0xB3,0x8F,
75338 -0x20,0x00,0xB2,0x8F,
75339 -0x1C,0x00,0xB1,0x8F,
75340 -0x18,0x00,0xB0,0x8F,
75341 -0x08,0x00,0xE0,0x03,
75342 -0x30,0x00,0xBD,0x27,
75343 -0x00,0xFC,0xA5,0x24,
75344 -0xF6,0x0A,0x00,0x08,
75345 -0x00,0x38,0xC5,0xAC,
75346 -0x17,0x30,0x00,0x0C,
75347 -0x00,0x00,0x00,0x00,
75348 -0x9F,0xFF,0x40,0x10,
75349 -0x00,0x00,0x00,0x00,
75350 -0x0D,0x30,0x00,0x0C,
75351 -0x00,0x00,0x00,0x00,
75352 -0xCF,0x0A,0x00,0x08,
75353 -0x02,0x80,0x02,0x3C,
75354 -0xA0,0x37,0x05,0x8E,
75355 -0x21,0x30,0x80,0x00,
75356 -0xFF,0xFF,0x27,0x32,
75357 -0x09,0x00,0x04,0x24,
75358 -0x73,0x01,0x00,0x0C,
75359 -0x10,0x00,0xA0,0xAF,
75360 -0xA0,0x37,0x03,0x8E,
75361 -0xAA,0x37,0x05,0x96,
75362 -0x00,0x38,0x02,0x8E,
75363 -0x21,0x18,0x71,0x00,
75364 -0x21,0x28,0x25,0x02,
75365 -0x21,0x10,0x51,0x00,
75366 -0x09,0x00,0x04,0x24,
75367 -0x00,0x38,0x02,0xAE,
75368 -0xA0,0x37,0x03,0xAE,
75369 -0xB0,0x01,0x00,0x0C,
75370 -0xAA,0x37,0x05,0xA6,
75371 -0x30,0x1F,0x70,0x26,
75372 -0x00,0x38,0x03,0x96,
75373 -0x2A,0xB0,0x02,0x3C,
75374 -0x35,0x00,0x42,0x34,
75375 -0xC2,0x88,0x03,0x00,
75376 -0x00,0x00,0x51,0xA0,
75377 -0x5D,0x27,0x00,0x0C,
75378 -0x00,0x00,0x00,0x00,
75379 -0xAA,0x37,0x03,0x96,
75380 -0x25,0xB0,0x02,0x3C,
75381 -0xB0,0x03,0x42,0x34,
75382 -0x00,0x00,0x43,0xAC,
75383 -0x00,0x60,0x01,0x40,
75384 -0x01,0x00,0x21,0x34,
75385 -0x01,0x00,0x21,0x38,
75386 -0x00,0x60,0x81,0x40,
75387 -0xD0,0x1B,0x02,0x8E,
75388 -0x80,0x00,0x03,0x3C,
75389 -0x41,0xB0,0x04,0x3C,
75390 -0x25,0x10,0x43,0x00,
75391 -0x00,0x00,0x82,0xAC,
75392 -0x28,0x00,0xBF,0x8F,
75393 -0xD0,0x1B,0x02,0xAE,
75394 -0x24,0x00,0xB3,0x8F,
75395 -0x20,0x00,0xB2,0x8F,
75396 -0x1C,0x00,0xB1,0x8F,
75397 -0x18,0x00,0xB0,0x8F,
75398 -0x08,0x00,0xE0,0x03,
75399 -0x30,0x00,0xBD,0x27,
75400 -0x08,0x38,0x02,0x8E,
75401 -0xA0,0x37,0x05,0x8E,
75402 -0x21,0x30,0x80,0x00,
75403 -0x23,0x88,0x44,0x00,
75404 -0xFF,0xFF,0x27,0x32,
75405 -0x09,0x00,0x04,0x24,
75406 -0x73,0x01,0x00,0x0C,
75407 -0x10,0x00,0xA0,0xAF,
75408 -0xA0,0x37,0x03,0x8E,
75409 -0xAA,0x37,0x02,0x96,
75410 -0x04,0x38,0x12,0x96,
75411 -0x21,0x18,0x71,0x00,
75412 -0x21,0x10,0x22,0x02,
75413 -0x23,0x10,0x11,0x3C,
75414 -0xA0,0x37,0x03,0xAE,
75415 -0xAA,0x37,0x02,0xA6,
75416 -0x15,0x00,0x40,0x16,
75417 -0x00,0x38,0x11,0xAE,
75418 -0x09,0x00,0x04,0x24,
75419 -0xB0,0x01,0x00,0x0C,
75420 -0x30,0x1F,0x70,0x26,
75421 -0x46,0x0B,0x00,0x08,
75422 -0x00,0x00,0x00,0x00,
75423 -0x17,0x30,0x00,0x0C,
75424 -0x00,0x00,0x00,0x00,
75425 -0x57,0xFF,0x40,0x10,
75426 -0x30,0x1F,0x63,0x26,
75427 -0x2A,0x1C,0x62,0x90,
75428 -0x00,0x00,0x00,0x00,
75429 -0x53,0xFF,0x40,0x10,
75430 -0x00,0x00,0x00,0x00,
75431 -0x50,0x39,0x64,0x94,
75432 -0x2A,0x1C,0x60,0xA0,
75433 -0x00,0xC0,0x84,0x24,
75434 -0xC2,0x34,0x00,0x0C,
75435 -0xFF,0xFF,0x84,0x30,
75436 -0xD3,0x0A,0x00,0x08,
75437 -0x00,0x00,0x00,0x00,
75438 -0xB0,0x01,0x00,0x0C,
75439 -0x09,0x00,0x04,0x24,
75440 -0xA0,0x37,0x05,0x8E,
75441 -0x09,0x00,0x04,0x24,
75442 -0x23,0x10,0x06,0x3C,
75443 -0x21,0x38,0x40,0x02,
75444 -0x73,0x01,0x00,0x0C,
75445 -0x10,0x00,0xA0,0xAF,
75446 -0xA0,0x37,0x03,0x8E,
75447 -0xAA,0x37,0x02,0x96,
75448 -0x21,0x20,0x51,0x02,
75449 -0x21,0x18,0x72,0x00,
75450 -0x21,0x10,0x42,0x02,
75451 -0x00,0x38,0x04,0xAE,
75452 -0x09,0x00,0x04,0x24,
75453 -0xA0,0x37,0x03,0xAE,
75454 -0x75,0x0B,0x00,0x08,
75455 -0xAA,0x37,0x02,0xA6,
75456 -0xFF,0x00,0x86,0x30,
75457 -0x02,0x80,0x02,0x3C,
75458 -0x40,0x00,0xC3,0x2C,
75459 -0x4A,0xF3,0x47,0x90,
75460 -0x00,0x00,0x63,0x38,
75461 -0x3F,0x00,0x02,0x24,
75462 -0x0A,0x30,0x43,0x00,
75463 -0x01,0x00,0x02,0x24,
75464 -0x08,0x0E,0x04,0x24,
75465 -0x00,0x7F,0x05,0x24,
75466 -0x03,0x00,0xE2,0x10,
75467 -0x31,0x00,0xC3,0x2C,
75468 -0xA9,0x45,0x00,0x08,
75469 -0x00,0x00,0x00,0x00,
75470 -0x30,0x00,0x02,0x24,
75471 -0xA9,0x45,0x00,0x08,
75472 -0x0A,0x30,0x43,0x00,
75473 -0xC0,0xFF,0xBD,0x27,
75474 -0x02,0x80,0x03,0x3C,
75475 -0x38,0x00,0xB4,0xAF,
75476 -0x34,0x00,0xB3,0xAF,
75477 -0x30,0x00,0xB2,0xAF,
75478 -0x2C,0x00,0xB1,0xAF,
75479 -0x28,0x00,0xB0,0xAF,
75480 -0x28,0xEA,0x62,0x24,
75481 -0x3C,0x00,0xBF,0xAF,
75482 -0x0A,0x00,0x4A,0x94,
75483 -0x02,0x00,0x48,0x94,
75484 -0x06,0x00,0x49,0x94,
75485 -0xFF,0x00,0x84,0x30,
75486 -0xFF,0x00,0xA5,0x30,
75487 -0x28,0xEA,0x6B,0x94,
75488 -0x04,0x00,0x4C,0x94,
75489 -0x08,0x00,0x4D,0x94,
75490 -0x00,0x1C,0x05,0x00,
75491 -0x00,0x14,0x04,0x00,
75492 -0x00,0x3E,0x05,0x00,
75493 -0x00,0x36,0x04,0x00,
75494 -0x25,0x38,0xE3,0x00,
75495 -0x25,0x30,0xC2,0x00,
75496 -0x00,0x44,0x08,0x00,
75497 -0x00,0x12,0x05,0x00,
75498 -0x00,0x4C,0x09,0x00,
75499 -0x00,0x54,0x0A,0x00,
75500 -0x00,0x1A,0x04,0x00,
75501 -0x25,0x38,0xE2,0x00,
75502 -0x25,0x40,0x0B,0x01,
75503 -0x25,0x48,0x2C,0x01,
75504 -0x25,0x50,0x4D,0x01,
75505 -0x25,0x30,0xC3,0x00,
75506 -0x02,0x80,0x02,0x3C,
75507 -0x10,0x00,0xA8,0xAF,
75508 -0x14,0x00,0xA9,0xAF,
75509 -0x18,0x00,0xAA,0xAF,
75510 -0x25,0x98,0xE5,0x00,
75511 -0x25,0x90,0xC4,0x00,
75512 -0x30,0x1F,0x54,0x24,
75513 -0x21,0x80,0x00,0x00,
75514 -0x10,0x00,0xB1,0x27,
75515 -0x02,0x00,0x02,0x2E,
75516 -0x32,0x00,0x40,0x10,
75517 -0x80,0x10,0x10,0x00,
75518 -0x21,0x10,0x54,0x00,
75519 -0xF0,0x1C,0x43,0x8C,
75520 -0x00,0x00,0x00,0x00,
75521 -0x21,0x40,0x73,0x00,
75522 -0x21,0x38,0x00,0x00,
75523 -0x7F,0x00,0x09,0x24,
75524 -0xC0,0x20,0x07,0x00,
75525 -0x04,0x10,0x89,0x00,
75526 -0x24,0x10,0x48,0x00,
75527 -0x06,0x10,0x82,0x00,
75528 -0x01,0x00,0xE5,0x24,
75529 -0xFF,0x00,0x43,0x30,
75530 -0x21,0x30,0x27,0x02,
75531 -0x40,0x00,0x63,0x2C,
75532 -0xFF,0x00,0xA7,0x30,
75533 -0x02,0x00,0x60,0x14,
75534 -0x04,0x00,0xE4,0x2C,
75535 -0x3F,0x00,0x02,0x24,
75536 -0xF3,0xFF,0x80,0x14,
75537 -0x10,0x00,0xC2,0xA0,
75538 -0x23,0x00,0xA6,0x93,
75539 -0x22,0x00,0xA2,0x93,
75540 -0x21,0x00,0xA5,0x93,
75541 -0x40,0x18,0x10,0x00,
75542 -0x00,0x14,0x02,0x00,
75543 -0x21,0x18,0x71,0x00,
75544 -0x20,0x00,0xA7,0x93,
75545 -0x00,0x36,0x06,0x00,
75546 -0x25,0x30,0xC2,0x00,
75547 -0x00,0x2A,0x05,0x00,
75548 -0x00,0x00,0x64,0x94,
75549 -0x25,0x30,0xC5,0x00,
75550 -0x7F,0x7F,0x05,0x3C,
75551 -0x25,0x30,0xC7,0x00,
75552 -0xA9,0x45,0x00,0x0C,
75553 -0x7F,0x7F,0xA5,0x34,
75554 -0x01,0x00,0x02,0x26,
75555 -0xFF,0x00,0x50,0x30,
75556 -0x06,0x00,0x03,0x2E,
75557 -0xD5,0xFF,0x60,0x14,
75558 -0x00,0x00,0x00,0x00,
75559 -0x3C,0x00,0xBF,0x8F,
75560 -0x38,0x00,0xB4,0x8F,
75561 -0x34,0x00,0xB3,0x8F,
75562 -0x30,0x00,0xB2,0x8F,
75563 -0x2C,0x00,0xB1,0x8F,
75564 -0x28,0x00,0xB0,0x8F,
75565 -0x08,0x00,0xE0,0x03,
75566 -0x40,0x00,0xBD,0x27,
75567 -0x21,0x10,0x54,0x00,
75568 -0xF0,0x1C,0x43,0x8C,
75569 -0xDC,0x0B,0x00,0x08,
75570 -0x21,0x40,0x72,0x00,
75571 -0xD8,0xFF,0xBD,0x27,
75572 -0x02,0x80,0x09,0x3C,
75573 -0x1C,0x00,0xB3,0xAF,
75574 -0x10,0x00,0xB0,0xAF,
75575 -0x20,0x00,0xBF,0xAF,
75576 -0x18,0x00,0xB2,0xAF,
75577 -0x14,0x00,0xB1,0xAF,
75578 -0x30,0x1F,0x27,0x25,
75579 -0x02,0x80,0x02,0x3C,
75580 -0xB0,0x1B,0xE3,0x94,
75581 -0xDE,0x5D,0x46,0x90,
75582 -0xFF,0x00,0x90,0x30,
75583 -0x00,0x10,0x63,0x30,
75584 -0x20,0x00,0xC5,0x30,
75585 -0x21,0x20,0x07,0x02,
75586 -0x10,0x00,0xC6,0x30,
75587 -0x02,0x00,0x60,0x14,
75588 -0x3F,0x00,0x13,0x24,
75589 -0x63,0x1D,0x93,0x90,
75590 -0x28,0x00,0xC0,0x10,
75591 -0x30,0x1F,0x22,0x25,
75592 -0x8D,0x1D,0x82,0x90,
75593 -0x7F,0x1D,0x83,0x90,
75594 -0x00,0x00,0x00,0x00,
75595 -0x23,0x10,0x43,0x00,
75596 -0x00,0x46,0x02,0x00,
75597 -0x03,0x46,0x08,0x00,
75598 -0xFF,0x00,0x71,0x30,
75599 -0x30,0x1F,0x27,0x25,
75600 -0x0F,0x00,0x08,0x31,
75601 -0x21,0x30,0x00,0x01,
75602 -0x21,0x40,0x07,0x02,
75603 -0xB7,0x1D,0x02,0x91,
75604 -0xB0,0x1B,0xE3,0x84,
75605 -0x0F,0x00,0x05,0x3C,
75606 -0x0F,0x00,0x42,0x30,
75607 -0x21,0x10,0x51,0x00,
75608 -0x0C,0x08,0x04,0x24,
75609 -0x00,0xFF,0xA5,0x34,
75610 -0x06,0x00,0x60,0x04,
75611 -0xFF,0x00,0x52,0x30,
75612 -0xC5,0x1D,0x02,0x91,
75613 -0x00,0x00,0x00,0x00,
75614 -0x0F,0x00,0x42,0x30,
75615 -0x21,0x10,0x51,0x00,
75616 -0xFF,0x00,0x51,0x30,
75617 -0xA9,0x45,0x00,0x0C,
75618 -0x00,0x00,0x00,0x00,
75619 -0x9A,0x0B,0x00,0x0C,
75620 -0x21,0x20,0x60,0x02,
75621 -0x21,0x20,0x20,0x02,
75622 -0x21,0x28,0x40,0x02,
75623 -0x21,0x30,0x00,0x02,
75624 -0x20,0x00,0xBF,0x8F,
75625 -0x1C,0x00,0xB3,0x8F,
75626 -0x18,0x00,0xB2,0x8F,
75627 -0x14,0x00,0xB1,0x8F,
75628 -0x10,0x00,0xB0,0x8F,
75629 -0xAB,0x0B,0x00,0x08,
75630 -0x28,0x00,0xBD,0x27,
75631 -0xDF,0xFF,0xA0,0x10,
75632 -0x21,0x18,0x02,0x02,
75633 -0xA9,0x1D,0x62,0x90,
75634 -0x9B,0x1D,0x63,0x90,
75635 -0x26,0x0C,0x00,0x08,
75636 -0x23,0x10,0x43,0x00,
75637 -0xE0,0xFF,0xBD,0x27,
75638 -0x14,0x00,0xB1,0xAF,
75639 -0x02,0x80,0x02,0x3C,
75640 -0x18,0x00,0xBF,0xAF,
75641 -0x10,0x00,0xB0,0xAF,
75642 -0xE9,0x5D,0x43,0x90,
75643 -0x01,0x00,0x02,0x24,
75644 -0x0D,0x00,0x62,0x10,
75645 -0xFF,0x00,0x91,0x30,
75646 -0x0D,0x0C,0x00,0x0C,
75647 -0x21,0x20,0x20,0x02,
75648 -0x21,0x30,0x20,0x02,
75649 -0x18,0x00,0x04,0x24,
75650 -0x5F,0x47,0x00,0x0C,
75651 -0xFF,0x03,0x05,0x24,
75652 -0x18,0x00,0xBF,0x8F,
75653 -0x14,0x00,0xB1,0x8F,
75654 -0x10,0x00,0xB0,0x8F,
75655 -0x0A,0x00,0x04,0x24,
75656 -0x25,0x22,0x00,0x08,
75657 -0x20,0x00,0xBD,0x27,
75658 -0x1A,0x00,0x23,0x12,
75659 -0x0B,0x00,0x02,0x24,
75660 -0x1D,0x00,0x22,0x12,
75661 -0x0F,0x00,0x05,0x3C,
75662 -0xFF,0xFF,0xA5,0x34,
75663 -0x15,0x00,0x04,0x24,
75664 -0xF4,0xF8,0x06,0x34,
75665 -0x5F,0x47,0x00,0x0C,
75666 -0x00,0x00,0x00,0x00,
75667 -0x02,0x80,0x02,0x3C,
75668 -0x48,0xF3,0x44,0x90,
75669 -0xFE,0x00,0x03,0x24,
75670 -0xE9,0xFF,0x83,0x14,
75671 -0x0F,0x00,0x10,0x3C,
75672 -0xFF,0xFF,0x05,0x36,
75673 -0x8A,0x47,0x00,0x0C,
75674 -0x15,0x00,0x04,0x24,
75675 -0xFF,0x00,0x46,0x30,
75676 -0x00,0xFF,0x03,0x36,
75677 -0x24,0x10,0x43,0x00,
75678 -0x01,0x00,0xC6,0x24,
75679 -0x25,0x30,0x46,0x00,
75680 -0xFF,0xFF,0x05,0x36,
75681 -0x5F,0x47,0x00,0x0C,
75682 -0x15,0x00,0x04,0x24,
75683 -0x5B,0x0C,0x00,0x08,
75684 -0x21,0x30,0x20,0x02,
75685 -0x0F,0x00,0x05,0x3C,
75686 -0xFF,0xFF,0xA5,0x34,
75687 -0x15,0x00,0x04,0x24,
75688 -0x6B,0x0C,0x00,0x08,
75689 -0xF4,0xA8,0x06,0x34,
75690 -0xFF,0xFF,0xA5,0x34,
75691 -0x15,0x00,0x04,0x24,
75692 -0x6B,0x0C,0x00,0x08,
75693 -0xF5,0xF8,0x06,0x34,
75694 -0xFC,0x00,0x84,0x30,
75695 -0x50,0x00,0x02,0x24,
75696 -0x11,0x00,0x82,0x10,
75697 -0x05,0x00,0x03,0x24,
75698 -0x51,0x00,0x82,0x28,
75699 -0x10,0x00,0x40,0x10,
75700 -0xA0,0x00,0x02,0x24,
75701 -0x20,0x00,0x02,0x24,
75702 -0x0B,0x00,0x82,0x10,
75703 -0x02,0x00,0x03,0x24,
75704 -0x21,0x00,0x82,0x28,
75705 -0x15,0x00,0x40,0x14,
75706 -0x30,0x00,0x02,0x24,
75707 -0x06,0x00,0x82,0x10,
75708 -0x03,0x00,0x03,0x24,
75709 -0x04,0x00,0x03,0x24,
75710 -0x40,0x00,0x02,0x24,
75711 -0x02,0x00,0x82,0x10,
75712 -0x00,0x00,0x00,0x00,
75713 -0x0C,0x00,0x03,0x24,
75714 -0x08,0x00,0xE0,0x03,
75715 -0x21,0x10,0x60,0x00,
75716 -0xFD,0xFF,0x82,0x10,
75717 -0x08,0x00,0x03,0x24,
75718 -0xA1,0x00,0x82,0x28,
75719 -0x0C,0x00,0x40,0x10,
75720 -0xC0,0x00,0x02,0x24,
75721 -0x80,0x00,0x02,0x24,
75722 -0xF7,0xFF,0x82,0x10,
75723 -0x06,0x00,0x03,0x24,
75724 -0x07,0x00,0x03,0x24,
75725 -0x99,0x0C,0x00,0x08,
75726 -0x90,0x00,0x02,0x24,
75727 -0xF2,0xFF,0x80,0x10,
75728 -0x21,0x18,0x00,0x00,
75729 -0x01,0x00,0x03,0x24,
75730 -0x99,0x0C,0x00,0x08,
75731 -0x10,0x00,0x02,0x24,
75732 -0xED,0xFF,0x82,0x10,
75733 -0x0A,0x00,0x03,0x24,
75734 -0xC1,0x00,0x82,0x28,
75735 -0x04,0x00,0x40,0x10,
75736 -0x00,0x00,0x00,0x00,
75737 -0x09,0x00,0x03,0x24,
75738 -0x99,0x0C,0x00,0x08,
75739 -0xB0,0x00,0x02,0x24,
75740 -0x0B,0x00,0x03,0x24,
75741 -0x99,0x0C,0x00,0x08,
75742 -0xD0,0x00,0x02,0x24,
75743 -0xD8,0xFF,0xBD,0x27,
75744 -0x1C,0x00,0xB3,0xAF,
75745 -0x18,0x00,0xB2,0xAF,
75746 -0x14,0x00,0xB1,0xAF,
75747 -0x20,0x00,0xBF,0xAF,
75748 -0x10,0x00,0xB0,0xAF,
75749 -0x08,0x00,0x83,0x8C,
75750 -0x25,0xB0,0x02,0x3C,
75751 -0xB0,0x03,0x42,0x34,
75752 -0x00,0x00,0x43,0xAC,
75753 -0x08,0x00,0x90,0x94,
75754 -0x02,0x80,0x02,0x3C,
75755 -0x21,0x98,0x80,0x00,
75756 -0x25,0x80,0x02,0x02,
75757 -0x21,0x20,0x00,0x02,
75758 -0xFF,0x00,0xB2,0x30,
75759 -0xFF,0x00,0xD1,0x30,
75760 -0x21,0x28,0x00,0x00,
75761 -0x08,0x52,0x00,0x0C,
75762 -0x08,0x00,0x06,0x24,
75763 -0x08,0x00,0x04,0x8E,
75764 -0x04,0x00,0x05,0x8E,
75765 -0xFF,0xDF,0x02,0x3C,
75766 -0xFF,0xFF,0x42,0x34,
75767 -0xFF,0xE0,0x03,0x24,
75768 -0x24,0x20,0x82,0x00,
75769 -0x00,0x40,0x02,0x3C,
75770 -0x10,0x00,0x06,0x8E,
75771 -0x24,0x28,0xA3,0x00,
75772 -0x25,0x20,0x82,0x00,
75773 -0x3F,0xFF,0x02,0x3C,
75774 -0x0C,0x00,0x67,0x8E,
75775 -0x7F,0xFF,0x03,0x24,
75776 -0xFF,0xFF,0x42,0x34,
75777 -0x00,0x12,0xA5,0x34,
75778 -0x01,0x00,0x52,0x32,
75779 -0x03,0x00,0x31,0x32,
75780 -0x24,0x20,0x83,0x00,
75781 -0x24,0x28,0xA2,0x00,
75782 -0xC0,0x91,0x12,0x00,
75783 -0x80,0x8D,0x11,0x00,
75784 -0x00,0x80,0x02,0x3C,
75785 -0x25,0x30,0xC2,0x00,
75786 -0x25,0x20,0x92,0x00,
75787 -0x25,0x28,0xB1,0x00,
75788 -0x20,0x00,0x02,0x24,
75789 -0x10,0x00,0x06,0xAE,
75790 -0x02,0x00,0x02,0xA2,
75791 -0x08,0x00,0x04,0xAE,
75792 -0x04,0x00,0x05,0xAE,
75793 -0x00,0x00,0x07,0xA6,
75794 -0x02,0x80,0x02,0x3C,
75795 -0xE0,0x3A,0x43,0x94,
75796 -0xFB,0xFF,0x02,0x3C,
75797 -0xFF,0xFF,0x42,0x34,
75798 -0xC2,0x1B,0x03,0x00,
75799 -0x24,0x30,0xC2,0x00,
75800 -0x80,0x1C,0x03,0x00,
75801 -0x25,0x30,0xC3,0x00,
75802 -0x14,0x00,0x05,0x8E,
75803 -0x82,0x24,0x06,0x00,
75804 -0x01,0x00,0x84,0x30,
75805 -0x0C,0x00,0x02,0x24,
75806 -0x0A,0x10,0x04,0x00,
75807 -0xFF,0x81,0x03,0x24,
75808 -0x24,0x28,0xA3,0x00,
75809 -0x40,0x12,0x02,0x00,
75810 -0x25,0x28,0xA2,0x00,
75811 -0x14,0x00,0x05,0xAE,
75812 -0x10,0x00,0x06,0xAE,
75813 -0x00,0x60,0x03,0x40,
75814 -0x01,0x00,0x61,0x34,
75815 -0x01,0x00,0x21,0x38,
75816 -0x00,0x60,0x81,0x40,
75817 -0x02,0x80,0x02,0x3C,
75818 -0x74,0x57,0x42,0x24,
75819 -0x04,0x00,0x44,0x8C,
75820 -0x00,0x00,0x62,0xAE,
75821 -0x04,0x00,0x53,0xAC,
75822 -0x00,0x00,0x93,0xAC,
75823 -0x04,0x00,0x64,0xAE,
75824 -0x00,0x60,0x83,0x40,
75825 -0x20,0x00,0xBF,0x8F,
75826 -0x1C,0x00,0xB3,0x8F,
75827 -0x18,0x00,0xB2,0x8F,
75828 -0x14,0x00,0xB1,0x8F,
75829 -0x10,0x00,0xB0,0x8F,
75830 -0x08,0x00,0xE0,0x03,
75831 -0x28,0x00,0xBD,0x27,
75832 -0xD8,0xFF,0xBD,0x27,
75833 -0x14,0x00,0xB1,0xAF,
75834 -0x20,0x00,0xBF,0xAF,
75835 -0x1C,0x00,0xB3,0xAF,
75836 -0x18,0x00,0xB2,0xAF,
75837 -0x10,0x00,0xB0,0xAF,
75838 -0xFF,0xFF,0x83,0x30,
75839 -0xFF,0x00,0xB1,0x30,
75840 -0x00,0x60,0x12,0x40,
75841 -0x01,0x00,0x41,0x36,
75842 -0x01,0x00,0x21,0x38,
75843 -0x00,0x60,0x81,0x40,
75844 -0x02,0x80,0x13,0x3C,
75845 -0x30,0x1F,0x70,0x26,
75846 -0xB0,0x1B,0x02,0x96,
75847 -0x00,0x00,0x00,0x00,
75848 -0x00,0x80,0x42,0x30,
75849 -0x2F,0x00,0x43,0x10,
75850 -0x02,0x80,0x04,0x3C,
75851 -0x00,0x80,0x02,0x34,
75852 -0x50,0xDF,0x84,0x24,
75853 -0x33,0x00,0x62,0x10,
75854 -0x21,0x30,0x20,0x02,
75855 -0x2F,0x55,0x00,0x0C,
75856 -0x00,0x00,0x00,0x00,
75857 -0x30,0x3B,0x04,0x92,
75858 -0x4F,0x0C,0x00,0x0C,
75859 -0x00,0x00,0x00,0x00,
75860 -0x25,0xB0,0x03,0x3C,
75861 -0x03,0x02,0x63,0x34,
75862 -0x00,0x00,0x62,0x90,
75863 -0x00,0x08,0x04,0x24,
75864 -0x01,0x00,0x05,0x24,
75865 -0x04,0x00,0x42,0x30,
75866 -0x00,0x00,0x62,0xA0,
75867 -0x1B,0x47,0x00,0x0C,
75868 -0x21,0x30,0x00,0x00,
75869 -0x00,0x09,0x04,0x24,
75870 -0x01,0x00,0x05,0x24,
75871 -0x1B,0x47,0x00,0x0C,
75872 -0x21,0x30,0x00,0x00,
75873 -0x84,0x08,0x04,0x24,
75874 -0xFF,0xFF,0x05,0x24,
75875 -0x1B,0x47,0x00,0x0C,
75876 -0x58,0x00,0x06,0x24,
75877 -0x00,0x0C,0x05,0x24,
75878 -0x01,0x00,0x06,0x24,
75879 -0x5F,0x47,0x00,0x0C,
75880 -0x18,0x00,0x04,0x24,
75881 -0xB0,0x1B,0x02,0x96,
75882 -0x8F,0x3E,0x11,0xA2,
75883 -0xFF,0x7F,0x42,0x30,
75884 -0xB0,0x1B,0x02,0xA6,
75885 -0x30,0x1F,0x62,0x26,
75886 -0x30,0x3B,0x44,0x90,
75887 -0x0D,0x0C,0x00,0x0C,
75888 -0x00,0x00,0x00,0x00,
75889 -0x00,0x60,0x92,0x40,
75890 -0x20,0x00,0xBF,0x8F,
75891 -0x1C,0x00,0xB3,0x8F,
75892 -0x18,0x00,0xB2,0x8F,
75893 -0x14,0x00,0xB1,0x8F,
75894 -0x10,0x00,0xB0,0x8F,
75895 -0x08,0x00,0xE0,0x03,
75896 -0x28,0x00,0xBD,0x27,
75897 -0x00,0x60,0x92,0x40,
75898 -0x20,0x00,0xBF,0x8F,
75899 -0x1C,0x00,0xB3,0x8F,
75900 -0x18,0x00,0xB2,0x8F,
75901 -0x14,0x00,0xB1,0x8F,
75902 -0x10,0x00,0xB0,0x8F,
75903 -0x08,0x00,0xE0,0x03,
75904 -0x28,0x00,0xBD,0x27,
75905 -0x30,0x3B,0x05,0x92,
75906 -0x02,0x80,0x04,0x3C,
75907 -0x2F,0x55,0x00,0x0C,
75908 -0x30,0xDF,0x84,0x24,
75909 -0x01,0x00,0x02,0x24,
75910 -0x2C,0x00,0x22,0x12,
75911 -0x00,0x00,0x00,0x00,
75912 -0x30,0x3B,0x04,0x92,
75913 -0x00,0x00,0x00,0x00,
75914 -0xFE,0xFF,0x84,0x24,
75915 -0x4F,0x0C,0x00,0x0C,
75916 -0x00,0x00,0x00,0x00,
75917 -0x25,0xB0,0x07,0x3C,
75918 -0x03,0x02,0xE7,0x34,
75919 -0x00,0x00,0xE2,0x90,
75920 -0xFB,0xFF,0x03,0x24,
75921 -0x00,0x08,0x04,0x24,
75922 -0x24,0x10,0x43,0x00,
75923 -0x00,0x00,0xE2,0xA0,
75924 -0x01,0x00,0x05,0x24,
75925 -0x1B,0x47,0x00,0x0C,
75926 -0x01,0x00,0x06,0x24,
75927 -0x03,0x00,0x30,0x32,
75928 -0x00,0x09,0x04,0x24,
75929 -0x01,0x00,0x05,0x24,
75930 -0x1B,0x47,0x00,0x0C,
75931 -0x01,0x00,0x06,0x24,
75932 -0x00,0x0A,0x04,0x24,
75933 -0x10,0x00,0x05,0x24,
75934 -0x1B,0x47,0x00,0x0C,
75935 -0x42,0x30,0x10,0x00,
75936 -0x21,0x30,0x00,0x02,
75937 -0x00,0x0D,0x04,0x24,
75938 -0x1B,0x47,0x00,0x0C,
75939 -0x00,0x0C,0x05,0x24,
75940 -0x84,0x08,0x04,0x24,
75941 -0xFF,0xFF,0x05,0x24,
75942 -0x1B,0x47,0x00,0x0C,
75943 -0x18,0x00,0x06,0x24,
75944 -0x18,0x00,0x04,0x24,
75945 -0x00,0x0C,0x05,0x24,
75946 -0x5F,0x47,0x00,0x0C,
75947 -0x21,0x30,0x00,0x00,
75948 -0x30,0x1F,0x64,0x26,
75949 -0xB0,0x1B,0x82,0x94,
75950 -0x00,0x80,0x03,0x24,
75951 -0x8F,0x3E,0x91,0xA0,
75952 -0x25,0x10,0x43,0x00,
75953 -0x47,0x0D,0x00,0x08,
75954 -0xB0,0x1B,0x82,0xA4,
75955 -0x30,0x3B,0x04,0x92,
75956 -0x65,0x0D,0x00,0x08,
75957 -0x02,0x00,0x84,0x24,
75958 -0xC8,0xFF,0xBD,0x27,
75959 -0x02,0x80,0x03,0x3C,
75960 -0x34,0x00,0xBF,0xAF,
75961 -0x30,0x00,0xB2,0xAF,
75962 -0x2C,0x00,0xB1,0xAF,
75963 -0x28,0x00,0xB0,0xAF,
75964 -0x34,0xEA,0x62,0x24,
75965 -0x01,0x00,0x44,0x90,
75966 -0x05,0x00,0x45,0x90,
75967 -0x09,0x00,0x46,0x90,
75968 -0x0D,0x00,0x47,0x90,
75969 -0x04,0x00,0x51,0x90,
75970 -0x08,0x00,0x50,0x90,
75971 -0x34,0xEA,0x72,0x90,
75972 -0x02,0x00,0x4F,0x90,
75973 -0x0C,0x00,0x43,0x90,
75974 -0x06,0x00,0x4E,0x90,
75975 -0x0A,0x00,0x4D,0x90,
75976 -0x0E,0x00,0x48,0x90,
75977 -0x03,0x00,0x49,0x90,
75978 -0x07,0x00,0x4A,0x90,
75979 -0x0B,0x00,0x4B,0x90,
75980 -0x0F,0x00,0x4C,0x90,
75981 -0x00,0x22,0x04,0x00,
75982 -0x00,0x2A,0x05,0x00,
75983 -0x00,0x32,0x06,0x00,
75984 -0x00,0x3A,0x07,0x00,
75985 -0x02,0x80,0x18,0x3C,
75986 -0x25,0x28,0xB1,0x00,
75987 -0x25,0x30,0xD0,0x00,
75988 -0x25,0x38,0xE3,0x00,
75989 -0x25,0x20,0x92,0x00,
75990 -0x11,0x00,0x51,0x90,
75991 -0x10,0x00,0x50,0x90,
75992 -0x30,0x1F,0x03,0x27,
75993 -0x00,0x7C,0x0F,0x00,
75994 -0x00,0x74,0x0E,0x00,
75995 -0x00,0x6C,0x0D,0x00,
75996 -0x00,0x44,0x08,0x00,
75997 -0x25,0x78,0xE4,0x01,
75998 -0x25,0x70,0xC5,0x01,
75999 -0x25,0x68,0xA6,0x01,
76000 -0x25,0x40,0x07,0x01,
76001 -0x5A,0x3E,0x66,0x90,
76002 -0x00,0x4E,0x09,0x00,
76003 -0x00,0x56,0x0A,0x00,
76004 -0x00,0x5E,0x0B,0x00,
76005 -0x00,0x66,0x0C,0x00,
76006 -0x25,0x48,0x2F,0x01,
76007 -0x25,0x50,0x4E,0x01,
76008 -0x25,0x58,0x6D,0x01,
76009 -0x25,0x60,0x88,0x01,
76010 -0x25,0xB0,0x05,0x3C,
76011 -0x37,0x02,0xA5,0x34,
76012 -0x10,0x00,0xA9,0xAF,
76013 -0x14,0x00,0xAA,0xAF,
76014 -0x18,0x00,0xAB,0xAF,
76015 -0x1C,0x00,0xAC,0xAF,
76016 -0x20,0x00,0xB0,0xA3,
76017 -0x21,0x00,0xB1,0xA3,
76018 -0x03,0x00,0xC7,0x30,
76019 -0x00,0x00,0xA4,0x90,
76020 -0x02,0x00,0xE2,0x24,
76021 -0x01,0x00,0x03,0x24,
76022 -0x04,0x18,0x43,0x00,
76023 -0x1C,0x00,0xC6,0x30,
76024 -0xF8,0xFF,0x02,0x24,
76025 -0x24,0x20,0x82,0x00,
76026 -0xFF,0x00,0x67,0x30,
76027 -0x82,0x30,0x06,0x00,
76028 -0x10,0x00,0xE3,0x2C,
76029 -0x25,0x20,0x86,0x00,
76030 -0x0F,0x00,0x02,0x24,
76031 -0x00,0x00,0xA4,0xA0,
76032 -0x0A,0x38,0x43,0x00,
76033 -0x21,0x28,0x00,0x00,
76034 -0x10,0x00,0xA3,0x27,
76035 -0x21,0x30,0x65,0x00,
76036 -0x00,0x00,0xC2,0x90,
76037 -0x01,0x00,0xA5,0x24,
76038 -0x2B,0x10,0xE2,0x00,
76039 -0x02,0x00,0x40,0x10,
76040 -0x11,0x00,0xA4,0x2C,
76041 -0x00,0x00,0xC7,0xA0,
76042 -0xF8,0xFF,0x80,0x14,
76043 -0x21,0x30,0x60,0x00,
76044 -0x21,0x28,0x00,0x00,
76045 -0x25,0xB0,0x07,0x3C,
76046 -0x01,0x00,0xC2,0x90,
76047 -0x00,0x00,0xC3,0x90,
76048 -0x21,0x20,0xA7,0x00,
76049 -0x00,0x11,0x02,0x00,
76050 -0x25,0x10,0x43,0x00,
76051 -0x01,0x00,0xA5,0x24,
76052 -0xFF,0x00,0x42,0x30,
76053 -0x08,0x00,0xA3,0x2C,
76054 -0xA8,0x01,0x82,0xA0,
76055 -0xF6,0xFF,0x60,0x14,
76056 -0x02,0x00,0xC6,0x24,
76057 -0x21,0x00,0xA2,0x93,
76058 -0x20,0x00,0xA4,0x93,
76059 -0x02,0x80,0x03,0x3C,
76060 -0x00,0x11,0x02,0x00,
76061 -0xF1,0x5D,0x65,0x90,
76062 -0x25,0x10,0x44,0x00,
76063 -0xFF,0x00,0x42,0x30,
76064 -0xA7,0x01,0xE3,0x34,
76065 -0x00,0x00,0x62,0xA0,
76066 -0x01,0x00,0x02,0x24,
76067 -0x07,0x00,0xA2,0x10,
76068 -0x30,0x1F,0x03,0x27,
76069 -0x34,0x00,0xBF,0x8F,
76070 -0x30,0x00,0xB2,0x8F,
76071 -0x2C,0x00,0xB1,0x8F,
76072 -0x28,0x00,0xB0,0x8F,
76073 -0x08,0x00,0xE0,0x03,
76074 -0x38,0x00,0xBD,0x27,
76075 -0x58,0x3E,0x62,0x94,
76076 -0x00,0x00,0x00,0x00,
76077 -0x02,0x00,0x42,0x30,
76078 -0xF6,0xFF,0x40,0x10,
76079 -0x00,0x00,0x00,0x00,
76080 -0x79,0x3E,0x63,0x90,
76081 -0x00,0x00,0x00,0x00,
76082 -0x04,0x00,0x62,0x30,
76083 -0xF1,0xFF,0x40,0x10,
76084 -0x03,0x00,0x63,0x30,
76085 -0x0C,0x00,0x65,0x10,
76086 -0x03,0x00,0x02,0x24,
76087 -0x05,0x00,0x62,0x10,
76088 -0x21,0x20,0x00,0x00,
76089 -0x12,0x0D,0x00,0x0C,
76090 -0x21,0x28,0x00,0x00,
76091 -0xFF,0x0D,0x00,0x08,
76092 -0x00,0x00,0x00,0x00,
76093 -0x00,0x80,0x04,0x34,
76094 -0x12,0x0D,0x00,0x0C,
76095 -0x02,0x00,0x05,0x24,
76096 -0xFF,0x0D,0x00,0x08,
76097 -0x00,0x00,0x00,0x00,
76098 -0x00,0x80,0x04,0x34,
76099 -0x12,0x0D,0x00,0x0C,
76100 -0x01,0x00,0x05,0x24,
76101 -0xFF,0x0D,0x00,0x08,
76102 -0x00,0x00,0x00,0x00,
76103 -0xE8,0xFF,0xBD,0x27,
76104 -0x02,0x80,0x06,0x3C,
76105 -0x14,0x00,0xBF,0xAF,
76106 -0x10,0x00,0xB0,0xAF,
76107 -0x88,0x58,0xC2,0x24,
76108 -0x01,0x00,0x44,0x90,
76109 -0x88,0x58,0xC3,0x90,
76110 -0x02,0x00,0x45,0x90,
76111 -0x03,0x00,0x46,0x90,
76112 -0x05,0x00,0x47,0x90,
76113 -0x04,0x00,0x48,0x90,
76114 -0x00,0x22,0x04,0x00,
76115 -0x25,0x18,0x64,0x00,
76116 -0x00,0x2C,0x05,0x00,
76117 -0x25,0xB0,0x10,0x3C,
76118 -0x25,0x18,0x65,0x00,
76119 -0x00,0x36,0x06,0x00,
76120 -0x00,0x3A,0x07,0x00,
76121 -0x25,0x18,0x66,0x00,
76122 -0x58,0x00,0x02,0x36,
76123 -0x5C,0x00,0x05,0x36,
76124 -0x25,0x40,0x07,0x01,
76125 -0x02,0x80,0x04,0x3C,
76126 -0x00,0x00,0x43,0xAC,
76127 -0x84,0x58,0x84,0x24,
76128 -0x00,0x00,0xA8,0xAC,
76129 -0x19,0x4F,0x00,0x0C,
76130 -0x00,0x00,0x00,0x00,
76131 -0x94,0x00,0x03,0x36,
76132 -0x00,0x00,0x62,0xA4,
76133 -0x48,0x00,0x10,0x36,
76134 -0x00,0x00,0x02,0x8E,
76135 -0x04,0x00,0x03,0x3C,
76136 -0x14,0x00,0xBF,0x8F,
76137 -0x25,0x10,0x43,0x00,
76138 -0x00,0x00,0x02,0xAE,
76139 -0x10,0x00,0xB0,0x8F,
76140 -0x08,0x00,0xE0,0x03,
76141 -0x18,0x00,0xBD,0x27,
76142 -0xE0,0xFF,0xBD,0x27,
76143 -0x18,0x00,0xB2,0xAF,
76144 -0x21,0x90,0x80,0x00,
76145 -0x18,0x02,0x04,0x24,
76146 -0x14,0x00,0xB1,0xAF,
76147 -0x1C,0x00,0xBF,0xAF,
76148 -0x25,0x24,0x00,0x0C,
76149 -0x10,0x00,0xB0,0xAF,
76150 -0x02,0x80,0x05,0x3C,
76151 -0x02,0x80,0x04,0x3C,
76152 -0x21,0x88,0x40,0x00,
76153 -0x84,0x58,0xA5,0x24,
76154 -0xDC,0x01,0x06,0x24,
76155 -0x18,0x00,0x40,0x10,
76156 -0x98,0xDF,0x84,0x24,
76157 -0x08,0x00,0x50,0x94,
76158 -0xF8,0x01,0x02,0x24,
76159 -0x0C,0x00,0x22,0xAE,
76160 -0x02,0x80,0x02,0x3C,
76161 -0x0A,0x00,0x03,0x24,
76162 -0x25,0x80,0x02,0x02,
76163 -0x14,0x00,0x23,0xAE,
76164 -0x3C,0x00,0x04,0x26,
76165 -0x10,0x52,0x00,0x0C,
76166 -0x20,0x00,0x10,0x26,
76167 -0x18,0x00,0x12,0xAE,
76168 -0x21,0x20,0x20,0x02,
76169 -0x30,0x09,0x00,0x0C,
76170 -0x14,0x00,0x12,0xAE,
76171 -0x02,0x80,0x04,0x3C,
76172 -0x21,0x28,0x40,0x02,
76173 -0x1C,0x00,0xBF,0x8F,
76174 -0x18,0x00,0xB2,0x8F,
76175 -0x14,0x00,0xB1,0x8F,
76176 -0x10,0x00,0xB0,0x8F,
76177 -0xA4,0xDF,0x84,0x24,
76178 -0x2F,0x55,0x00,0x08,
76179 -0x20,0x00,0xBD,0x27,
76180 -0x02,0x80,0x05,0x3C,
76181 -0x1C,0x00,0xBF,0x8F,
76182 -0x18,0x00,0xB2,0x8F,
76183 -0x14,0x00,0xB1,0x8F,
76184 -0x10,0x00,0xB0,0x8F,
76185 -0x5C,0xEA,0xA5,0x24,
76186 -0x2F,0x55,0x00,0x08,
76187 -0x20,0x00,0xBD,0x27,
76188 -0xE0,0xFF,0xBD,0x27,
76189 -0x10,0x00,0xB0,0xAF,
76190 -0x21,0x80,0x80,0x00,
76191 -0x14,0x00,0xB1,0xAF,
76192 -0x18,0x00,0xBF,0xAF,
76193 -0x25,0x24,0x00,0x0C,
76194 -0x28,0x00,0x04,0x24,
76195 -0x02,0x80,0x04,0x3C,
76196 -0x21,0x88,0x40,0x00,
76197 -0x21,0x28,0x00,0x02,
76198 -0x06,0x00,0x06,0x24,
76199 -0x15,0x00,0x40,0x10,
76200 -0xB4,0xDF,0x84,0x24,
76201 -0x08,0x00,0x44,0x94,
76202 -0x08,0x00,0x02,0x24,
76203 -0x0C,0x00,0x22,0xAE,
76204 -0x02,0x80,0x02,0x3C,
76205 -0x0C,0x00,0x03,0x24,
76206 -0x25,0x20,0x82,0x00,
76207 -0x14,0x00,0x23,0xAE,
76208 -0x10,0x52,0x00,0x0C,
76209 -0x20,0x00,0x84,0x24,
76210 -0x30,0x09,0x00,0x0C,
76211 -0x21,0x20,0x20,0x02,
76212 -0x02,0x80,0x04,0x3C,
76213 -0x2F,0x55,0x00,0x0C,
76214 -0xC0,0xDF,0x84,0x24,
76215 -0x21,0x10,0x00,0x00,
76216 -0x18,0x00,0xBF,0x8F,
76217 -0x14,0x00,0xB1,0x8F,
76218 -0x10,0x00,0xB0,0x8F,
76219 -0x08,0x00,0xE0,0x03,
76220 -0x20,0x00,0xBD,0x27,
76221 -0x02,0x80,0x05,0x3C,
76222 -0x2F,0x55,0x00,0x0C,
76223 -0x6C,0xEA,0xA5,0x24,
76224 -0x92,0x0E,0x00,0x08,
76225 -0xFF,0xFF,0x02,0x24,
76226 -0xD8,0xFF,0xBD,0x27,
76227 -0x1C,0x00,0xB3,0xAF,
76228 -0x21,0x98,0x80,0x00,
76229 -0x2C,0x00,0x04,0x24,
76230 -0x18,0x00,0xB2,0xAF,
76231 -0x14,0x00,0xB1,0xAF,
76232 -0x21,0x90,0xA0,0x00,
76233 -0x20,0x00,0xBF,0xAF,
76234 -0x25,0x24,0x00,0x0C,
76235 -0x10,0x00,0xB0,0xAF,
76236 -0x02,0x80,0x04,0x3C,
76237 -0x02,0x80,0x05,0x3C,
76238 -0x21,0x88,0x40,0x00,
76239 -0xD8,0xDF,0x84,0x24,
76240 -0x21,0x30,0x40,0x02,
76241 -0x19,0x00,0x40,0x10,
76242 -0x84,0xEA,0xA5,0x24,
76243 -0x05,0x00,0x65,0x92,
76244 -0x2F,0x55,0x00,0x0C,
76245 -0x00,0x00,0x00,0x00,
76246 -0x08,0x00,0x30,0x96,
76247 -0x02,0x80,0x02,0x3C,
76248 -0x0B,0x00,0x03,0x24,
76249 -0x25,0x80,0x02,0x02,
76250 -0x20,0x00,0x10,0x26,
76251 -0x0C,0x00,0x02,0x24,
76252 -0x21,0x20,0x00,0x02,
76253 -0x0C,0x00,0x22,0xAE,
76254 -0x14,0x00,0x23,0xAE,
76255 -0x21,0x28,0x60,0x02,
76256 -0x10,0x52,0x00,0x0C,
76257 -0x06,0x00,0x06,0x24,
76258 -0x08,0x00,0x12,0xAE,
76259 -0x21,0x20,0x20,0x02,
76260 -0x20,0x00,0xBF,0x8F,
76261 -0x1C,0x00,0xB3,0x8F,
76262 -0x18,0x00,0xB2,0x8F,
76263 -0x14,0x00,0xB1,0x8F,
76264 -0x10,0x00,0xB0,0x8F,
76265 -0x30,0x09,0x00,0x08,
76266 -0x28,0x00,0xBD,0x27,
76267 -0x02,0x80,0x04,0x3C,
76268 -0x20,0x00,0xBF,0x8F,
76269 -0x1C,0x00,0xB3,0x8F,
76270 -0x18,0x00,0xB2,0x8F,
76271 -0x14,0x00,0xB1,0x8F,
76272 -0x10,0x00,0xB0,0x8F,
76273 -0xCC,0xDF,0x84,0x24,
76274 -0x2F,0x55,0x00,0x08,
76275 -0x28,0x00,0xBD,0x27,
76276 -0xE0,0xFF,0xBD,0x27,
76277 -0x14,0x00,0xB1,0xAF,
76278 -0x18,0x00,0xBF,0xAF,
76279 -0x10,0x00,0xB0,0xAF,
76280 -0x02,0x80,0x02,0x3C,
76281 -0xF6,0x5E,0x43,0x90,
76282 -0x02,0x80,0x11,0x3C,
76283 -0x04,0x00,0x04,0x24,
76284 -0x0F,0x00,0x63,0x30,
76285 -0x04,0x00,0x63,0x28,
76286 -0x36,0x00,0x60,0x14,
76287 -0x01,0x00,0x05,0x24,
76288 -0x02,0x80,0x02,0x3C,
76289 -0x30,0x1F,0x50,0x24,
76290 -0x2C,0xE0,0x22,0x8E,
76291 -0x0F,0x00,0x05,0x3C,
76292 -0xFF,0xFF,0xA5,0x34,
76293 -0x24,0x00,0x04,0x24,
76294 -0x12,0x00,0x40,0x14,
76295 -0x60,0x00,0x06,0x24,
76296 -0x0F,0x00,0x05,0x3C,
76297 -0x5F,0x47,0x00,0x0C,
76298 -0xFF,0xFF,0xA5,0x34,
76299 -0x01,0x00,0x02,0x24,
76300 -0x2C,0xE0,0x22,0xAE,
76301 -0xD0,0x07,0x03,0x24,
76302 -0x02,0x80,0x02,0x3C,
76303 -0x70,0x58,0x43,0xAC,
76304 -0x02,0x80,0x02,0x3C,
76305 -0xF5,0x5E,0x44,0x90,
76306 -0x18,0x00,0xBF,0x8F,
76307 -0x14,0x00,0xB1,0x8F,
76308 -0x10,0x00,0xB0,0x8F,
76309 -0x01,0x00,0x05,0x24,
76310 -0xFF,0x00,0x84,0x30,
76311 -0x64,0x31,0x00,0x08,
76312 -0x20,0x00,0xBD,0x27,
76313 -0x8A,0x47,0x00,0x0C,
76314 -0x00,0x00,0x00,0x00,
76315 -0x9C,0x3E,0x04,0x92,
76316 -0xFF,0x00,0x43,0x30,
76317 -0x00,0x2C,0x03,0x00,
76318 -0x0A,0x00,0x64,0x10,
76319 -0x9D,0x3E,0x02,0xA2,
76320 -0x02,0x80,0x02,0x3C,
76321 -0x49,0xF3,0x44,0x90,
76322 -0x00,0x00,0x00,0x00,
76323 -0x00,0x22,0x04,0x00,
76324 -0x6B,0x1E,0x00,0x0C,
76325 -0x25,0x20,0xA4,0x00,
76326 -0x9D,0x3E,0x03,0x92,
76327 -0x00,0x00,0x00,0x00,
76328 -0x9C,0x3E,0x03,0xA2,
76329 -0x10,0x27,0x02,0x24,
76330 -0x40,0x39,0x02,0xAE,
76331 -0x02,0x80,0x02,0x3C,
76332 -0xF5,0x5E,0x44,0x90,
76333 -0x2C,0xE0,0x20,0xAE,
76334 -0x18,0x00,0xBF,0x8F,
76335 -0x14,0x00,0xB1,0x8F,
76336 -0x10,0x00,0xB0,0x8F,
76337 -0x01,0x00,0x05,0x24,
76338 -0xFF,0x00,0x84,0x30,
76339 -0x64,0x31,0x00,0x08,
76340 -0x20,0x00,0xBD,0x27,
76341 -0x64,0x31,0x00,0x0C,
76342 -0x00,0x00,0x00,0x00,
76343 -0xDB,0x0E,0x00,0x08,
76344 -0x02,0x80,0x02,0x3C,
76345 -0xB8,0xFF,0xBD,0x27,
76346 -0x00,0x01,0x04,0x24,
76347 -0x3C,0x00,0xB3,0xAF,
76348 -0x38,0x00,0xB2,0xAF,
76349 -0x34,0x00,0xB1,0xAF,
76350 -0x40,0x00,0xBF,0xAF,
76351 -0x30,0x00,0xB0,0xAF,
76352 -0x25,0x24,0x00,0x0C,
76353 -0x02,0x80,0x13,0x3C,
76354 -0x02,0x80,0x04,0x3C,
76355 -0x21,0x88,0x40,0x00,
76356 -0xF0,0xDD,0x65,0x26,
76357 -0x06,0x00,0x06,0x24,
76358 -0x0C,0x00,0x52,0x24,
76359 -0x4C,0x00,0x40,0x10,
76360 -0x30,0xE0,0x84,0x24,
76361 -0x08,0x00,0x50,0x94,
76362 -0x02,0x80,0x02,0x3C,
76363 -0x25,0x80,0x02,0x02,
76364 -0x24,0x00,0x04,0x26,
76365 -0x10,0x52,0x00,0x0C,
76366 -0x20,0x00,0x00,0xA6,
76367 -0x02,0x80,0x05,0x3C,
76368 -0x2A,0x00,0x04,0x26,
76369 -0x18,0x3B,0xA5,0x24,
76370 -0x10,0x52,0x00,0x0C,
76371 -0x06,0x00,0x06,0x24,
76372 -0x30,0x00,0x04,0x26,
76373 -0xF0,0xDD,0x65,0x26,
76374 -0x10,0x52,0x00,0x0C,
76375 -0x06,0x00,0x06,0x24,
76376 -0x20,0x00,0x03,0x96,
76377 -0x18,0x00,0x02,0x24,
76378 -0x02,0x80,0x04,0x3C,
76379 -0x03,0xFF,0x63,0x30,
76380 -0x40,0x00,0x63,0x34,
76381 -0x20,0x00,0x03,0xA6,
76382 -0x30,0x1F,0x84,0x24,
76383 -0x0C,0x00,0x22,0xAE,
76384 -0xF8,0x1D,0x82,0x94,
76385 -0x20,0x00,0x06,0x26,
76386 -0x02,0x80,0x07,0x3C,
76387 -0xFF,0x0F,0x43,0x30,
76388 -0x00,0x19,0x03,0x00,
76389 -0x02,0x2A,0x03,0x00,
76390 -0x01,0x00,0x42,0x24,
76391 -0xF8,0x1D,0x82,0xA4,
76392 -0x16,0x00,0xC3,0xA0,
76393 -0x17,0x00,0xC5,0xA0,
76394 -0x74,0x3B,0x86,0x8C,
76395 -0xA8,0x5A,0xE7,0x24,
76396 -0x38,0x00,0x04,0x26,
76397 -0x21,0x28,0x00,0x00,
76398 -0x41,0x4F,0x00,0x0C,
76399 -0x10,0x00,0xB2,0xAF,
76400 -0x18,0x00,0xA4,0x27,
76401 -0x28,0x00,0xA5,0x27,
76402 -0x21,0x50,0x00,0x0C,
76403 -0x21,0x80,0x40,0x00,
76404 -0x28,0x00,0xA3,0x8F,
76405 -0x21,0x20,0x00,0x02,
76406 -0x18,0x00,0xA7,0x27,
76407 -0x09,0x00,0x62,0x28,
76408 -0x01,0x00,0x05,0x24,
76409 -0x12,0x00,0x40,0x10,
76410 -0x08,0x00,0x06,0x24,
76411 -0x21,0x20,0x00,0x02,
76412 -0x21,0x30,0x60,0x00,
76413 -0x01,0x00,0x05,0x24,
76414 -0x18,0x00,0xA7,0x27,
76415 -0x41,0x4F,0x00,0x0C,
76416 -0x10,0x00,0xB2,0xAF,
76417 -0x21,0x20,0x20,0x02,
76418 -0x01,0x00,0x05,0x24,
76419 -0xB9,0x0C,0x00,0x0C,
76420 -0x21,0x30,0x00,0x00,
76421 -0x40,0x00,0xBF,0x8F,
76422 -0x3C,0x00,0xB3,0x8F,
76423 -0x38,0x00,0xB2,0x8F,
76424 -0x34,0x00,0xB1,0x8F,
76425 -0x30,0x00,0xB0,0x8F,
76426 -0x08,0x00,0xE0,0x03,
76427 -0x48,0x00,0xBD,0x27,
76428 -0x41,0x4F,0x00,0x0C,
76429 -0x10,0x00,0xB2,0xAF,
76430 -0x28,0x00,0xA6,0x8F,
76431 -0x21,0x20,0x40,0x00,
76432 -0x32,0x00,0x05,0x24,
76433 -0xF8,0xFF,0xC6,0x24,
76434 -0x59,0x0F,0x00,0x08,
76435 -0x20,0x00,0xA7,0x27,
76436 -0x02,0x80,0x05,0x3C,
76437 -0x2F,0x55,0x00,0x0C,
76438 -0x9C,0xEA,0xA5,0x24,
76439 -0x40,0x00,0xBF,0x8F,
76440 -0x3C,0x00,0xB3,0x8F,
76441 -0x38,0x00,0xB2,0x8F,
76442 -0x34,0x00,0xB1,0x8F,
76443 -0x30,0x00,0xB0,0x8F,
76444 -0x08,0x00,0xE0,0x03,
76445 -0x48,0x00,0xBD,0x27,
76446 -0xC8,0xFF,0xBD,0x27,
76447 -0x18,0x00,0xB2,0xAF,
76448 -0x10,0x00,0xB0,0xAF,
76449 -0x34,0x00,0xBF,0xAF,
76450 -0x30,0x00,0xBE,0xAF,
76451 -0x2C,0x00,0xB7,0xAF,
76452 -0x28,0x00,0xB6,0xAF,
76453 -0x24,0x00,0xB5,0xAF,
76454 -0x20,0x00,0xB4,0xAF,
76455 -0x1C,0x00,0xB3,0xAF,
76456 -0x14,0x00,0xB1,0xAF,
76457 -0x21,0x80,0x80,0x00,
76458 -0x45,0x00,0xA0,0x14,
76459 -0x21,0x90,0x00,0x00,
76460 -0x08,0x00,0x82,0x90,
76461 -0x02,0x80,0x13,0x3C,
76462 -0x30,0x1F,0x63,0x26,
76463 -0x0F,0x00,0x42,0x30,
76464 -0x14,0x3E,0x62,0xAC,
76465 -0x25,0xB0,0x02,0x3C,
76466 -0x0A,0x00,0x10,0x26,
76467 -0xD0,0x01,0x57,0x34,
76468 -0x02,0x80,0x14,0x3C,
76469 -0xD8,0x01,0x5E,0x34,
76470 -0xDC,0x01,0x55,0x34,
76471 -0xD4,0x01,0x56,0x34,
76472 -0x03,0x00,0x11,0x24,
76473 -0x00,0x00,0x06,0x92,
76474 -0x30,0x1F,0x62,0x26,
76475 -0x0C,0x3E,0x47,0x90,
76476 -0x0F,0x00,0xC3,0x30,
76477 -0x01,0x00,0x05,0x92,
76478 -0x18,0x00,0x67,0x00,
76479 -0x03,0x00,0x04,0x92,
76480 -0x02,0x00,0x02,0x92,
76481 -0x0F,0x00,0xA7,0x30,
76482 -0x00,0x3A,0x07,0x00,
76483 -0x02,0x29,0x05,0x00,
76484 -0x00,0x22,0x04,0x00,
76485 -0x25,0x20,0x82,0x00,
76486 -0x00,0x2B,0x05,0x00,
76487 -0x42,0x11,0x06,0x00,
76488 -0x00,0x24,0x04,0x00,
76489 -0x03,0x00,0x49,0x30,
76490 -0x02,0x31,0x06,0x00,
76491 -0x01,0x00,0x02,0x24,
76492 -0x01,0x00,0xC6,0x30,
76493 -0x12,0x18,0x00,0x00,
76494 -0x0A,0x00,0x63,0x24,
76495 -0xFF,0x00,0x63,0x30,
76496 -0x25,0x18,0x67,0x00,
76497 -0x25,0x18,0x65,0x00,
76498 -0x30,0x00,0x22,0x11,
76499 -0x25,0x38,0x64,0x00,
76500 -0x02,0x00,0x22,0x29,
76501 -0x3E,0x00,0x40,0x14,
76502 -0x02,0x00,0x02,0x24,
76503 -0x38,0x00,0x22,0x11,
76504 -0x03,0x00,0x02,0x24,
76505 -0x40,0x00,0x22,0x11,
76506 -0x00,0x00,0x00,0x00,
76507 -0x21,0x28,0x20,0x01,
76508 -0x3C,0xE0,0x84,0x26,
76509 -0x2F,0x55,0x00,0x0C,
76510 -0xFF,0xFF,0x31,0x26,
76511 -0xD9,0xFF,0x21,0x06,
76512 -0x04,0x00,0x10,0x26,
76513 -0x25,0xB0,0x02,0x3C,
76514 -0xE7,0x01,0x42,0x34,
76515 -0x00,0x00,0x52,0xA0,
76516 -0x34,0x00,0xBF,0x8F,
76517 -0x30,0x00,0xBE,0x8F,
76518 -0x2C,0x00,0xB7,0x8F,
76519 -0x28,0x00,0xB6,0x8F,
76520 -0x24,0x00,0xB5,0x8F,
76521 -0x20,0x00,0xB4,0x8F,
76522 -0x1C,0x00,0xB3,0x8F,
76523 -0x18,0x00,0xB2,0x8F,
76524 -0x14,0x00,0xB1,0x8F,
76525 -0x10,0x00,0xB0,0x8F,
76526 -0x08,0x00,0xE0,0x03,
76527 -0x38,0x00,0xBD,0x27,
76528 -0x02,0x80,0x13,0x3C,
76529 -0x08,0x00,0x83,0x90,
76530 -0x30,0x1F,0x62,0x26,
76531 -0x14,0x3E,0x44,0x8C,
76532 -0x0F,0x00,0x63,0x30,
76533 -0xBB,0xFF,0x83,0x14,
76534 -0x00,0x00,0x00,0x00,
76535 -0x34,0x00,0xBF,0x8F,
76536 -0x30,0x00,0xBE,0x8F,
76537 -0x2C,0x00,0xB7,0x8F,
76538 -0x28,0x00,0xB6,0x8F,
76539 -0x24,0x00,0xB5,0x8F,
76540 -0x20,0x00,0xB4,0x8F,
76541 -0x1C,0x00,0xB3,0x8F,
76542 -0x18,0x00,0xB2,0x8F,
76543 -0x14,0x00,0xB1,0x8F,
76544 -0x10,0x00,0xB0,0x8F,
76545 -0x08,0x00,0xE0,0x03,
76546 -0x38,0x00,0xBD,0x27,
76547 -0x00,0x00,0xA7,0xAE,
76548 -0x21,0x20,0x00,0x00,
76549 -0x25,0xB0,0x08,0x3C,
76550 -0x07,0x10,0x92,0x00,
76551 -0x01,0x00,0x42,0x30,
76552 -0x01,0x00,0x84,0x24,
76553 -0x02,0x00,0x40,0x10,
76554 -0x03,0x00,0x85,0x2C,
76555 -0xD0,0x01,0x07,0xAD,
76556 -0xF9,0xFF,0xA0,0x14,
76557 -0x04,0x00,0x08,0x25,
76558 -0xB6,0x0F,0x00,0x08,
76559 -0x21,0x28,0x20,0x01,
76560 -0x0D,0x00,0xC0,0x10,
76561 -0x00,0x00,0x00,0x00,
76562 -0xB5,0x0F,0x00,0x08,
76563 -0x02,0x00,0x52,0x36,
76564 -0xC7,0xFF,0x20,0x15,
76565 -0x21,0x28,0x20,0x01,
76566 -0x0D,0x00,0xC0,0x10,
76567 -0x00,0x00,0x00,0x00,
76568 -0xB6,0x0F,0x00,0x08,
76569 -0x04,0x00,0x52,0x36,
76570 -0x06,0x00,0xC0,0x10,
76571 -0x00,0x00,0x00,0x00,
76572 -0xB5,0x0F,0x00,0x08,
76573 -0x01,0x00,0x52,0x36,
76574 -0x00,0x00,0xC7,0xAE,
76575 -0xB6,0x0F,0x00,0x08,
76576 -0x21,0x28,0x20,0x01,
76577 -0x00,0x00,0xE7,0xAE,
76578 -0xB6,0x0F,0x00,0x08,
76579 -0x21,0x28,0x20,0x01,
76580 -0x00,0x00,0xC7,0xAF,
76581 -0xB6,0x0F,0x00,0x08,
76582 -0x21,0x28,0x20,0x01,
76583 -0xC8,0xFF,0xBD,0x27,
76584 -0x1C,0x00,0xB1,0xAF,
76585 -0x02,0x80,0x02,0x3C,
76586 -0x21,0x88,0x80,0x00,
76587 -0x00,0x01,0x04,0x24,
76588 -0x30,0x00,0xB6,0xAF,
76589 -0x24,0x00,0xB3,0xAF,
76590 -0x34,0x00,0xBF,0xAF,
76591 -0x2C,0x00,0xB5,0xAF,
76592 -0x28,0x00,0xB4,0xAF,
76593 -0x20,0x00,0xB2,0xAF,
76594 -0x18,0x00,0xB0,0xAF,
76595 -0x25,0x24,0x00,0x0C,
76596 -0x84,0x58,0x56,0x24,
76597 -0x74,0x00,0x40,0x10,
76598 -0x21,0x98,0x40,0x00,
76599 -0x08,0x00,0x50,0x94,
76600 -0x02,0x80,0x02,0x3C,
76601 -0x21,0x28,0x20,0x02,
76602 -0x25,0x80,0x02,0x02,
76603 -0x24,0x00,0x04,0x26,
76604 -0x20,0x00,0x00,0xA6,
76605 -0x10,0x52,0x00,0x0C,
76606 -0x06,0x00,0x06,0x24,
76607 -0x02,0x80,0x05,0x3C,
76608 -0x2A,0x00,0x04,0x26,
76609 -0x18,0x3B,0xA5,0x24,
76610 -0x10,0x52,0x00,0x0C,
76611 -0x06,0x00,0x06,0x24,
76612 -0x02,0x80,0x05,0x3C,
76613 -0x06,0x00,0x06,0x24,
76614 -0x30,0x00,0x04,0x26,
76615 -0x10,0x52,0x00,0x0C,
76616 -0x88,0x58,0xA5,0x24,
76617 -0x20,0x00,0x03,0x96,
76618 -0x02,0x80,0x04,0x3C,
76619 -0x30,0x1F,0x84,0x24,
76620 -0x03,0xFF,0x63,0x30,
76621 -0x50,0x00,0x63,0x34,
76622 -0x20,0x00,0x03,0xA6,
76623 -0xF8,0x1D,0x82,0x94,
76624 -0x20,0x00,0x12,0x26,
76625 -0x74,0x00,0xD1,0x26,
76626 -0xFF,0x0F,0x43,0x30,
76627 -0x00,0x19,0x03,0x00,
76628 -0x01,0x00,0x42,0x24,
76629 -0xF8,0x1D,0x82,0xA4,
76630 -0x02,0x2A,0x03,0x00,
76631 -0x20,0x00,0x02,0x24,
76632 -0x16,0x00,0x43,0xA2,
76633 -0x17,0x00,0x45,0xA2,
76634 -0x21,0x20,0x20,0x02,
76635 -0x17,0x4F,0x00,0x0C,
76636 -0x0C,0x00,0x62,0xAE,
76637 -0x40,0x00,0x12,0x26,
76638 -0x21,0x20,0x40,0x02,
76639 -0x21,0x28,0x40,0x00,
76640 -0x10,0x52,0x00,0x0C,
76641 -0x02,0x00,0x06,0x24,
76642 -0x0C,0x00,0x63,0x8E,
76643 -0x21,0x20,0x20,0x02,
76644 -0x42,0x00,0x12,0x26,
76645 -0x02,0x00,0x63,0x24,
76646 -0x32,0x4F,0x00,0x0C,
76647 -0x0C,0x00,0x63,0xAE,
76648 -0x21,0x28,0x40,0x00,
76649 -0x21,0x20,0x40,0x02,
76650 -0x10,0x52,0x00,0x0C,
76651 -0x02,0x00,0x06,0x24,
76652 -0x0C,0x00,0x63,0x8E,
76653 -0x44,0x00,0x04,0x26,
76654 -0x0C,0x00,0x75,0x26,
76655 -0x02,0x00,0x63,0x24,
76656 -0x0C,0x00,0x63,0xAE,
76657 -0x0C,0x00,0xC6,0x8E,
76658 -0x21,0x28,0x00,0x00,
76659 -0x10,0x00,0xC7,0x26,
76660 -0x60,0x00,0xD0,0x26,
76661 -0x41,0x4F,0x00,0x0C,
76662 -0x10,0x00,0xB5,0xAF,
76663 -0x21,0x20,0x00,0x02,
76664 -0x37,0x50,0x00,0x0C,
76665 -0x21,0x90,0x40,0x00,
76666 -0x09,0x00,0x51,0x2C,
76667 -0x08,0x00,0x06,0x24,
76668 -0x21,0x20,0x40,0x02,
76669 -0x0B,0x30,0x51,0x00,
76670 -0x21,0x38,0x00,0x02,
76671 -0x01,0x00,0x05,0x24,
76672 -0x21,0xA0,0x40,0x00,
76673 -0x41,0x4F,0x00,0x0C,
76674 -0x10,0x00,0xB5,0xAF,
76675 -0x21,0x20,0x40,0x00,
76676 -0x03,0x00,0x05,0x24,
76677 -0x01,0x00,0x06,0x24,
76678 -0x48,0x00,0xC7,0x26,
76679 -0x41,0x4F,0x00,0x0C,
76680 -0x10,0x00,0xB5,0xAF,
76681 -0x0D,0x00,0x20,0x12,
76682 -0x21,0x20,0x60,0x02,
76683 -0x34,0x00,0xBF,0x8F,
76684 -0x30,0x00,0xB6,0x8F,
76685 -0x2C,0x00,0xB5,0x8F,
76686 -0x28,0x00,0xB4,0x8F,
76687 -0x24,0x00,0xB3,0x8F,
76688 -0x20,0x00,0xB2,0x8F,
76689 -0x1C,0x00,0xB1,0x8F,
76690 -0x18,0x00,0xB0,0x8F,
76691 -0x01,0x00,0x05,0x24,
76692 -0x21,0x30,0x00,0x00,
76693 -0xB9,0x0C,0x00,0x08,
76694 -0x38,0x00,0xBD,0x27,
76695 -0xF8,0xFF,0x86,0x26,
76696 -0x21,0x20,0x40,0x00,
76697 -0x68,0x00,0xC7,0x26,
76698 -0x32,0x00,0x05,0x24,
76699 -0x41,0x4F,0x00,0x0C,
76700 -0x10,0x00,0xB5,0xAF,
76701 -0x21,0x20,0x60,0x02,
76702 -0x34,0x00,0xBF,0x8F,
76703 -0x30,0x00,0xB6,0x8F,
76704 -0x2C,0x00,0xB5,0x8F,
76705 -0x28,0x00,0xB4,0x8F,
76706 -0x24,0x00,0xB3,0x8F,
76707 -0x20,0x00,0xB2,0x8F,
76708 -0x1C,0x00,0xB1,0x8F,
76709 -0x18,0x00,0xB0,0x8F,
76710 -0x01,0x00,0x05,0x24,
76711 -0x21,0x30,0x00,0x00,
76712 -0xB9,0x0C,0x00,0x08,
76713 -0x38,0x00,0xBD,0x27,
76714 -0x02,0x80,0x04,0x3C,
76715 -0x02,0x80,0x05,0x3C,
76716 -0x34,0x00,0xBF,0x8F,
76717 -0x30,0x00,0xB6,0x8F,
76718 -0x2C,0x00,0xB5,0x8F,
76719 -0x28,0x00,0xB4,0x8F,
76720 -0x24,0x00,0xB3,0x8F,
76721 -0x20,0x00,0xB2,0x8F,
76722 -0x1C,0x00,0xB1,0x8F,
76723 -0x18,0x00,0xB0,0x8F,
76724 -0x98,0xE0,0x84,0x24,
76725 -0xAC,0xEA,0xA5,0x24,
76726 -0x2F,0x55,0x00,0x08,
76727 -0x38,0x00,0xBD,0x27,
76728 -0xB0,0xFF,0xBD,0x27,
76729 -0x50,0x00,0xA4,0xAF,
76730 -0xFC,0x01,0x04,0x24,
76731 -0x4C,0x00,0xBF,0xAF,
76732 -0x48,0x00,0xBE,0xAF,
76733 -0x44,0x00,0xB7,0xAF,
76734 -0x40,0x00,0xB6,0xAF,
76735 -0x3C,0x00,0xB5,0xAF,
76736 -0x38,0x00,0xB4,0xAF,
76737 -0x34,0x00,0xB3,0xAF,
76738 -0x30,0x00,0xB2,0xAF,
76739 -0x2C,0x00,0xB1,0xAF,
76740 -0x25,0x24,0x00,0x0C,
76741 -0x28,0x00,0xB0,0xAF,
76742 -0xE3,0x00,0x40,0x10,
76743 -0x1C,0x00,0xA2,0xAF,
76744 -0x50,0x00,0xA6,0x8F,
76745 -0x02,0x80,0x03,0x3C,
76746 -0xD0,0xEA,0x62,0x24,
76747 -0xD0,0xEA,0x68,0x90,
76748 -0x01,0x00,0x44,0x90,
76749 -0x02,0x00,0xC3,0x90,
76750 -0x02,0x00,0x45,0x90,
76751 -0x03,0x00,0x46,0x90,
76752 -0x1C,0x00,0xA2,0x8F,
76753 -0x00,0x22,0x04,0x00,
76754 -0x25,0x20,0x88,0x00,
76755 -0x08,0x00,0x47,0x94,
76756 -0x50,0x00,0xA2,0x8F,
76757 -0x00,0x2C,0x05,0x00,
76758 -0x0F,0x00,0x63,0x30,
76759 -0x00,0x00,0x48,0x8C,
76760 -0x02,0x80,0x02,0x3C,
76761 -0x25,0x38,0xE2,0x00,
76762 -0x50,0x00,0xA2,0x8F,
76763 -0x25,0x28,0xA4,0x00,
76764 -0x00,0x36,0x06,0x00,
76765 -0xC0,0x18,0x03,0x00,
76766 -0x21,0x18,0x62,0x00,
76767 -0x25,0x30,0xC5,0x00,
76768 -0x02,0x80,0x02,0x3C,
76769 -0x10,0x00,0xA6,0xAF,
76770 -0xDD,0x5A,0x55,0x24,
76771 -0x22,0x00,0x66,0x24,
76772 -0x18,0x00,0x62,0x24,
76773 -0x28,0x00,0x76,0x24,
76774 -0x02,0x80,0x03,0x3C,
76775 -0x20,0x00,0xF7,0x24,
76776 -0xFF,0x3F,0x1E,0x31,
76777 -0x21,0x90,0x00,0x00,
76778 -0x30,0x1F,0x73,0x24,
76779 -0x01,0x00,0x14,0x24,
76780 -0x21,0x80,0x00,0x00,
76781 -0x24,0x00,0xA6,0xAF,
76782 -0xD0,0x10,0x00,0x08,
76783 -0x20,0x00,0xA2,0xAF,
76784 -0x39,0x52,0x00,0x0C,
76785 -0x07,0x00,0x10,0x26,
76786 -0x19,0x00,0x40,0x10,
76787 -0x40,0x00,0x43,0x2A,
76788 -0x0E,0x00,0x60,0x10,
76789 -0xE8,0xFF,0xC2,0x27,
76790 -0x21,0x88,0x13,0x02,
76791 -0xAC,0x3B,0x22,0x92,
76792 -0x01,0x00,0x52,0x26,
76793 -0x21,0x20,0x15,0x02,
76794 -0x21,0x28,0xC0,0x02,
76795 -0xF4,0xFF,0x54,0x10,
76796 -0x06,0x00,0x06,0x24,
76797 -0x21,0x20,0x15,0x02,
76798 -0x21,0x28,0xC0,0x02,
76799 -0x10,0x52,0x00,0x0C,
76800 -0x06,0x00,0x06,0x24,
76801 -0xAC,0x3B,0x34,0xA2,
76802 -0xE8,0xFF,0xC2,0x27,
76803 -0x69,0x01,0x43,0x28,
76804 -0x16,0x00,0x60,0x14,
76805 -0x18,0x00,0xA2,0xAF,
76806 -0x02,0x80,0x06,0x3C,
76807 -0x30,0x1F,0xC3,0x24,
76808 -0xA8,0x3B,0x62,0x8C,
76809 -0x00,0x00,0x00,0x00,
76810 -0x01,0x00,0x42,0x24,
76811 -0xA8,0x3B,0x62,0xAC,
76812 -0x1C,0x00,0xA4,0x8F,
76813 -0x3D,0x24,0x00,0x0C,
76814 -0x00,0x00,0x00,0x00,
76815 -0x4C,0x00,0xBF,0x8F,
76816 -0x48,0x00,0xBE,0x8F,
76817 -0x44,0x00,0xB7,0x8F,
76818 -0x40,0x00,0xB6,0x8F,
76819 -0x3C,0x00,0xB5,0x8F,
76820 -0x38,0x00,0xB4,0x8F,
76821 -0x34,0x00,0xB3,0x8F,
76822 -0x30,0x00,0xB2,0x8F,
76823 -0x2C,0x00,0xB1,0x8F,
76824 -0x28,0x00,0xB0,0x8F,
76825 -0x08,0x00,0xE0,0x03,
76826 -0x50,0x00,0xBD,0x27,
76827 -0x21,0x20,0xE0,0x02,
76828 -0x21,0x28,0x00,0x00,
76829 -0xFF,0x51,0x00,0x0C,
76830 -0xDC,0x01,0x06,0x24,
76831 -0x20,0x00,0xA2,0x8F,
76832 -0x74,0x00,0xF4,0x26,
76833 -0x21,0x20,0x80,0x02,
76834 -0x18,0x00,0x45,0x24,
76835 -0x18,0x00,0xA2,0x8F,
76836 -0x80,0x00,0xF1,0x26,
76837 -0x74,0x00,0x42,0x24,
76838 -0x00,0x00,0xE2,0xAE,
76839 -0x18,0x00,0xA3,0x8F,
76840 -0x00,0x00,0x00,0x00,
76841 -0x21,0x30,0x60,0x00,
76842 -0x10,0x52,0x00,0x0C,
76843 -0x70,0x00,0xE3,0xAE,
76844 -0x70,0x00,0xE7,0x8E,
76845 -0x21,0x20,0x20,0x02,
76846 -0x21,0x28,0x00,0x00,
76847 -0xF4,0xFF,0xE7,0x24,
76848 -0x55,0x1D,0x00,0x0C,
76849 -0x18,0x00,0xA6,0x27,
76850 -0xD9,0xFF,0x40,0x10,
76851 -0x21,0x80,0x40,0x00,
76852 -0x02,0x80,0x03,0x3C,
76853 -0x30,0x1F,0x62,0x24,
76854 -0x74,0x3B,0x46,0x8C,
76855 -0x00,0x00,0x00,0x00,
76856 -0x0A,0x00,0xC0,0x18,
76857 -0x00,0x00,0x00,0x00,
76858 -0x18,0x00,0xA2,0x8F,
76859 -0x00,0x00,0x00,0x00,
76860 -0xCF,0xFF,0xC2,0x14,
76861 -0x02,0x80,0x04,0x3C,
76862 -0xA8,0x5A,0x84,0x24,
76863 -0x39,0x52,0x00,0x0C,
76864 -0x02,0x00,0x05,0x26,
76865 -0xCA,0xFF,0x40,0x14,
76866 -0x00,0x00,0x00,0x00,
76867 -0x01,0x00,0x06,0x92,
76868 -0x00,0x00,0x00,0x00,
76869 -0x77,0x00,0xC0,0x14,
76870 -0x10,0x00,0xE4,0x26,
76871 -0x0C,0x00,0xE0,0xAE,
76872 -0x50,0x00,0xA6,0x8F,
76873 -0x00,0x00,0x00,0x00,
76874 -0x02,0x00,0xC2,0x94,
76875 -0x00,0x00,0x00,0x00,
76876 -0x0F,0x00,0x42,0x30,
76877 -0x04,0x00,0x42,0x28,
76878 -0x68,0x00,0x40,0x10,
76879 -0x21,0x20,0xC0,0x00,
76880 -0x34,0x00,0xE0,0xAE,
76881 -0x60,0x00,0xF3,0x26,
76882 -0x21,0x20,0x60,0x02,
76883 -0x21,0x28,0x00,0x00,
76884 -0xFF,0x51,0x00,0x0C,
76885 -0x10,0x00,0x06,0x24,
76886 -0x70,0x00,0xE7,0x8E,
76887 -0x21,0x20,0x20,0x02,
76888 -0x01,0x00,0x05,0x24,
76889 -0xF4,0xFF,0xE7,0x24,
76890 -0x55,0x1D,0x00,0x0C,
76891 -0x18,0x00,0xA6,0x27,
76892 -0x06,0x00,0x40,0x10,
76893 -0x21,0x90,0x00,0x00,
76894 -0x18,0x00,0xA6,0x8F,
76895 -0x02,0x00,0x45,0x24,
76896 -0x10,0x52,0x00,0x0C,
76897 -0x21,0x20,0x60,0x02,
76898 -0x18,0x00,0xB2,0x8F,
76899 -0x70,0x00,0xE7,0x8E,
76900 -0x21,0x20,0x20,0x02,
76901 -0x32,0x00,0x05,0x24,
76902 -0xF4,0xFF,0xE7,0x24,
76903 -0x55,0x1D,0x00,0x0C,
76904 -0x18,0x00,0xA6,0x27,
76905 -0x05,0x00,0x40,0x10,
76906 -0x21,0x20,0xF2,0x02,
76907 -0x18,0x00,0xA6,0x8F,
76908 -0x60,0x00,0x84,0x24,
76909 -0x10,0x52,0x00,0x0C,
76910 -0x02,0x00,0x45,0x24,
76911 -0x18,0x00,0xA5,0x8F,
76912 -0x21,0x20,0x60,0x02,
76913 -0x7D,0x50,0x00,0x0C,
76914 -0x21,0x28,0xB2,0x00,
76915 -0x21,0x18,0x40,0x00,
76916 -0x01,0x00,0x02,0x24,
76917 -0x3F,0x00,0x62,0x10,
76918 -0x03,0x00,0x02,0x24,
76919 -0x38,0x00,0xE2,0xAE,
76920 -0x70,0x00,0xE7,0x8E,
76921 -0x21,0x20,0x20,0x02,
76922 -0x03,0x00,0x05,0x24,
76923 -0xF4,0xFF,0xE7,0x24,
76924 -0x55,0x1D,0x00,0x0C,
76925 -0x18,0x00,0xA6,0x27,
76926 -0x48,0x00,0xE0,0xAE,
76927 -0x04,0x00,0x40,0x10,
76928 -0x3C,0x00,0xE0,0xAE,
76929 -0x02,0x00,0x42,0x90,
76930 -0x00,0x00,0x00,0x00,
76931 -0x48,0x00,0xE2,0xAE,
76932 -0x17,0x4F,0x00,0x0C,
76933 -0x21,0x20,0x80,0x02,
76934 -0x21,0x28,0x40,0x00,
76935 -0x40,0x00,0xE4,0x26,
76936 -0x10,0x52,0x00,0x0C,
76937 -0x02,0x00,0x06,0x24,
76938 -0x34,0x4F,0x00,0x0C,
76939 -0x21,0x20,0xE0,0x02,
76940 -0xFF,0xFF,0x50,0x30,
76941 -0x01,0x00,0x02,0x32,
76942 -0x22,0x00,0x40,0x10,
76943 -0x21,0x28,0xC0,0x02,
76944 -0x01,0x00,0x02,0x24,
76945 -0x5C,0x00,0xE2,0xAE,
76946 -0x24,0x00,0xA5,0x8F,
76947 -0x04,0x00,0xE4,0x26,
76948 -0x10,0x52,0x00,0x0C,
76949 -0x06,0x00,0x06,0x24,
76950 -0x10,0x00,0x02,0x32,
76951 -0x1B,0x00,0x40,0x10,
76952 -0x01,0x00,0x02,0x24,
76953 -0x30,0x00,0xE2,0xAE,
76954 -0x02,0x80,0x02,0x3C,
76955 -0x44,0x00,0xE0,0xAE,
76956 -0x30,0x1F,0x44,0x24,
76957 -0xA4,0x3B,0x82,0x8C,
76958 -0x1C,0x00,0xA6,0x8F,
76959 -0xDC,0x01,0x03,0x24,
76960 -0x01,0x00,0x42,0x24,
76961 -0xA4,0x3B,0x82,0xAC,
76962 -0x08,0x00,0x02,0x24,
76963 -0x0C,0x00,0xC3,0xAC,
76964 -0x14,0x00,0xC2,0xAC,
76965 -0x1C,0x00,0xA4,0x8F,
76966 -0x30,0x09,0x00,0x0C,
76967 -0x00,0x00,0x00,0x00,
76968 -0xE9,0x10,0x00,0x08,
76969 -0x00,0x00,0x00,0x00,
76970 -0x02,0x80,0x04,0x3C,
76971 -0x02,0x80,0x05,0x3C,
76972 -0xA4,0xE0,0x84,0x24,
76973 -0x2F,0x55,0x00,0x0C,
76974 -0xBC,0xEA,0xA5,0x24,
76975 -0xE9,0x10,0x00,0x08,
76976 -0x00,0x00,0x00,0x00,
76977 -0x6D,0x11,0x00,0x08,
76978 -0x5C,0x00,0xE0,0xAE,
76979 -0x74,0x11,0x00,0x08,
76980 -0x30,0x00,0xE0,0xAE,
76981 -0x52,0x11,0x00,0x08,
76982 -0x38,0x00,0xE3,0xAE,
76983 -0xF7,0x19,0x00,0x0C,
76984 -0x18,0x00,0xC5,0x24,
76985 -0x4C,0x1A,0x00,0x0C,
76986 -0x21,0x20,0x40,0x00,
76987 -0x2B,0x11,0x00,0x08,
76988 -0x34,0x00,0xE2,0xAE,
76989 -0x10,0x52,0x00,0x0C,
76990 -0x02,0x00,0x05,0x26,
76991 -0x01,0x00,0x03,0x92,
76992 -0x22,0x11,0x00,0x08,
76993 -0x0C,0x00,0xE3,0xAE,
76994 -0x02,0x80,0x04,0x3C,
76995 -0x84,0x58,0x84,0x24,
76996 -0xE0,0xFF,0xBD,0x27,
76997 -0x18,0x00,0xBF,0xAF,
76998 -0x17,0x4F,0x00,0x0C,
76999 -0x74,0x00,0x84,0x24,
77000 -0x21,0x28,0x40,0x00,
77001 -0x10,0x00,0xA4,0x27,
77002 -0x10,0x52,0x00,0x0C,
77003 -0x02,0x00,0x06,0x24,
77004 -0x10,0x00,0xA2,0x97,
77005 -0x25,0xB0,0x04,0x3C,
77006 -0x94,0x00,0x85,0x34,
77007 -0x9A,0x00,0x87,0x34,
77008 -0x26,0xB0,0x06,0x3C,
77009 -0x00,0x08,0x03,0x24,
77010 -0x00,0x00,0xA2,0xA4,
77011 -0x0A,0x00,0x0B,0x24,
77012 -0x00,0x00,0xE3,0xA4,
77013 -0x98,0x00,0x88,0x34,
77014 -0x96,0x00,0x89,0x34,
77015 -0x7A,0x00,0xCA,0x34,
77016 -0x50,0x00,0x02,0x24,
77017 -0x04,0x00,0x03,0x24,
77018 -0x00,0x00,0x02,0xA5,
77019 -0x00,0x00,0x2B,0xA5,
77020 -0x00,0x00,0x43,0xA1,
77021 -0x10,0x00,0xA2,0x97,
77022 -0x89,0x00,0x83,0x34,
77023 -0x14,0x00,0x07,0x24,
77024 -0x40,0x11,0x02,0x00,
77025 -0xA0,0xFF,0x42,0x24,
77026 -0xFF,0xFF,0x42,0x30,
77027 -0x9C,0x00,0x85,0x34,
77028 -0x7C,0x00,0xC6,0x34,
77029 -0x00,0x00,0xC2,0xA4,
77030 -0x44,0x00,0x84,0x34,
77031 -0x00,0x00,0x67,0xA0,
77032 -0x00,0x00,0xAB,0xA0,
77033 -0x00,0x00,0x82,0x94,
77034 -0xFF,0xFD,0x03,0x24,
77035 -0x18,0x00,0xBF,0x8F,
77036 -0x24,0x10,0x43,0x00,
77037 -0x00,0x00,0x82,0xA4,
77038 -0x00,0x00,0x83,0x94,
77039 -0x02,0x80,0x02,0x3C,
77040 -0x30,0x1F,0x42,0x24,
77041 -0x00,0x02,0x63,0x34,
77042 -0x20,0x00,0xBD,0x27,
77043 -0x8E,0x3E,0x40,0xA0,
77044 -0x00,0x00,0x83,0xA4,
77045 -0x08,0x00,0xE0,0x03,
77046 -0x0C,0x3E,0x47,0xA0,
77047 -0xD8,0xFF,0xBD,0x27,
77048 -0x10,0x00,0xB0,0xAF,
77049 -0x02,0x80,0x10,0x3C,
77050 -0x84,0x58,0x04,0x26,
77051 -0x24,0x00,0xBF,0xAF,
77052 -0x14,0x00,0xB1,0xAF,
77053 -0x20,0x00,0xB4,0xAF,
77054 -0x1C,0x00,0xB3,0xAF,
77055 -0x34,0x4F,0x00,0x0C,
77056 -0x18,0x00,0xB2,0xAF,
77057 -0xFF,0xFF,0x51,0x30,
77058 -0x84,0x58,0x04,0x26,
77059 -0x19,0x4F,0x00,0x0C,
77060 -0x02,0x80,0x10,0x3C,
77061 -0x30,0x1F,0x03,0x26,
77062 -0x01,0x00,0x24,0x32,
77063 -0x08,0x3E,0x62,0xA4,
77064 -0x03,0x00,0x80,0x14,
77065 -0x02,0x00,0x05,0x24,
77066 -0x40,0x10,0x11,0x00,
77067 -0x04,0x00,0x45,0x30,
77068 -0x02,0x00,0x02,0x24,
77069 -0x59,0x00,0xA2,0x10,
77070 -0x30,0x1F,0x02,0x26,
77071 -0x0F,0x00,0x80,0x10,
77072 -0x02,0x00,0x03,0x24,
77073 -0x04,0x00,0x02,0x24,
77074 -0x11,0x00,0x62,0x10,
77075 -0x30,0x1F,0x13,0x26,
77076 -0x02,0x80,0x04,0x3C,
77077 -0x21,0x28,0x20,0x02,
77078 -0x24,0x00,0xBF,0x8F,
77079 -0x20,0x00,0xB4,0x8F,
77080 -0x1C,0x00,0xB3,0x8F,
77081 -0x18,0x00,0xB2,0x8F,
77082 -0x14,0x00,0xB1,0x8F,
77083 -0x10,0x00,0xB0,0x8F,
77084 -0x18,0xE1,0x84,0x24,
77085 -0x2F,0x55,0x00,0x08,
77086 -0x28,0x00,0xBD,0x27,
77087 -0x40,0x10,0x11,0x00,
77088 -0x04,0x00,0x43,0x30,
77089 -0x04,0x00,0x02,0x24,
77090 -0xF1,0xFF,0x62,0x14,
77091 -0x30,0x1F,0x13,0x26,
77092 -0x08,0x3E,0x66,0x96,
77093 -0x30,0x3B,0x65,0x92,
77094 -0x02,0x80,0x04,0x3C,
77095 -0xB0,0x1B,0x63,0xA6,
77096 -0xD4,0xE0,0x84,0x24,
77097 -0x2F,0x55,0x00,0x0C,
77098 -0x25,0xB0,0x10,0x3C,
77099 -0x50,0x02,0x03,0x36,
77100 -0x0F,0x00,0x02,0x24,
77101 -0x00,0x00,0x62,0xA0,
77102 -0x21,0x28,0x00,0x00,
77103 -0x12,0x0D,0x00,0x0C,
77104 -0x21,0x20,0x00,0x00,
77105 -0x30,0x3B,0x64,0x92,
77106 -0x01,0x00,0x14,0x24,
77107 -0x4F,0x0C,0x00,0x0C,
77108 -0x4C,0x00,0x10,0x36,
77109 -0x02,0x80,0x11,0x3C,
77110 -0x00,0x00,0x14,0xA2,
77111 -0x21,0x0E,0x00,0x0C,
77112 -0x00,0x00,0x00,0x00,
77113 -0x37,0x50,0x00,0x0C,
77114 -0xE4,0x58,0x24,0x26,
77115 -0x21,0x28,0x40,0x00,
77116 -0xE4,0x58,0x24,0x26,
77117 -0x7D,0x50,0x00,0x0C,
77118 -0x21,0x90,0x40,0x00,
77119 -0x0F,0x00,0x50,0x30,
77120 -0xE4,0x58,0x24,0x26,
77121 -0x96,0x50,0x00,0x0C,
77122 -0x21,0x28,0x40,0x02,
77123 -0x40,0x02,0x10,0x36,
77124 -0x02,0x80,0x04,0x3C,
77125 -0x21,0x88,0x40,0x00,
77126 -0x21,0x30,0x40,0x00,
77127 -0x21,0x28,0x00,0x02,
77128 -0x2F,0x55,0x00,0x0C,
77129 -0x04,0xE1,0x84,0x24,
77130 -0x21,0x20,0x00,0x02,
77131 -0xC1,0x5B,0x00,0x0C,
77132 -0x21,0x28,0x20,0x02,
77133 -0x02,0x80,0x04,0x3C,
77134 -0x02,0x80,0x05,0x3C,
77135 -0xF3,0x3D,0x84,0x24,
77136 -0x88,0x58,0xA5,0x24,
77137 -0x06,0x00,0x06,0x24,
77138 -0x10,0x52,0x00,0x0C,
77139 -0xC2,0x1E,0x74,0xA2,
77140 -0x0F,0x48,0x00,0x0C,
77141 -0x00,0x00,0x00,0x00,
77142 -0x9C,0x11,0x00,0x0C,
77143 -0x00,0x00,0x00,0x00,
77144 -0xB0,0x1B,0x62,0x96,
77145 -0x00,0x00,0x00,0x00,
77146 -0x00,0x01,0x42,0x34,
77147 -0x53,0x1E,0x00,0x0C,
77148 -0xB0,0x1B,0x62,0xA6,
77149 -0xEC,0x38,0x62,0xAE,
77150 -0x24,0x00,0xBF,0x8F,
77151 -0x20,0x00,0xB4,0x8F,
77152 -0x1C,0x00,0xB3,0x8F,
77153 -0x18,0x00,0xB2,0x8F,
77154 -0x14,0x00,0xB1,0x8F,
77155 -0x10,0x00,0xB0,0x8F,
77156 -0x01,0x00,0x04,0x24,
77157 -0x48,0x0E,0x00,0x08,
77158 -0x28,0x00,0xBD,0x27,
77159 -0x78,0x3D,0x44,0x8C,
77160 -0x01,0x20,0x03,0x24,
77161 -0xB0,0x1B,0x43,0xA4,
77162 -0x02,0x00,0x85,0x10,
77163 -0x0C,0x00,0x03,0x24,
77164 -0x0F,0x00,0x03,0x24,
77165 -0x25,0xB0,0x02,0x3C,
77166 -0x50,0x02,0x42,0x34,
77167 -0x00,0x00,0x43,0xA0,
77168 -0x30,0x1F,0x10,0x26,
77169 -0xB0,0x1B,0x02,0x96,
77170 -0x08,0x3E,0x06,0x96,
77171 -0x30,0x3B,0x05,0x92,
77172 -0x10,0x00,0x42,0x34,
77173 -0x02,0x80,0x04,0x3C,
77174 -0xB0,0x1B,0x02,0xA6,
77175 -0x2F,0x55,0x00,0x0C,
77176 -0xB0,0xE0,0x84,0x24,
77177 -0x21,0x28,0x00,0x00,
77178 -0x12,0x0D,0x00,0x0C,
77179 -0x21,0x20,0x00,0x00,
77180 -0x30,0x3B,0x04,0x92,
77181 -0x4F,0x0C,0x00,0x0C,
77182 -0x00,0x00,0x00,0x00,
77183 -0x53,0x1E,0x00,0x0C,
77184 -0x00,0x00,0x00,0x00,
77185 -0xEC,0x38,0x02,0xAE,
77186 -0x24,0x00,0xBF,0x8F,
77187 -0x20,0x00,0xB4,0x8F,
77188 -0x1C,0x00,0xB3,0x8F,
77189 -0x18,0x00,0xB2,0x8F,
77190 -0x14,0x00,0xB1,0x8F,
77191 -0x10,0x00,0xB0,0x8F,
77192 -0x08,0x00,0xE0,0x03,
77193 -0x28,0x00,0xBD,0x27,
77194 -0x02,0x80,0x03,0x3C,
77195 -0x30,0x1F,0x65,0x24,
77196 -0x50,0x3E,0xA2,0x8C,
77197 -0x00,0x00,0x00,0x00,
77198 -0x1F,0x00,0x40,0x10,
77199 -0x00,0x00,0x00,0x00,
77200 -0x0A,0x3E,0xA2,0x90,
77201 -0x00,0x00,0x00,0x00,
77202 -0x07,0x00,0x42,0x2C,
77203 -0x1A,0x00,0x40,0x10,
77204 -0x21,0x38,0xA0,0x00,
77205 -0x98,0x3E,0xA4,0x8C,
77206 -0x94,0x3E,0xA5,0x8C,
77207 -0x21,0x30,0x00,0x00,
77208 -0x80,0x10,0x04,0x00,
77209 -0x80,0x18,0x05,0x00,
77210 -0x2B,0x10,0x45,0x00,
77211 -0x04,0x00,0x40,0x14,
77212 -0x2B,0x18,0x64,0x00,
77213 -0x01,0x00,0x06,0x24,
77214 -0x02,0x00,0x02,0x24,
77215 -0x0A,0x30,0x43,0x00,
77216 -0x0A,0x3E,0xE2,0x90,
77217 -0x94,0x3E,0xE0,0xAC,
77218 -0x98,0x3E,0xE0,0xAC,
77219 -0x40,0x18,0x02,0x00,
77220 -0x21,0x18,0x62,0x00,
77221 -0x21,0x18,0x66,0x00,
77222 -0x02,0x80,0x02,0x3C,
77223 -0x48,0xDD,0x42,0x24,
77224 -0x80,0x18,0x03,0x00,
77225 -0x21,0x18,0x62,0x00,
77226 -0x00,0x00,0x64,0x8C,
77227 -0x25,0xB0,0x02,0x3C,
77228 -0xD8,0x01,0x42,0x34,
77229 -0x00,0x00,0x44,0xAC,
77230 -0x08,0x00,0xE0,0x03,
77231 -0x00,0x00,0x00,0x00,
77232 -0xE8,0xFF,0xBD,0x27,
77233 -0x10,0x00,0xB0,0xAF,
77234 -0x14,0x00,0xBF,0xAF,
77235 -0x21,0x80,0x80,0x00,
77236 -0x02,0x00,0x84,0x90,
77237 -0x02,0x80,0x05,0x3C,
77238 -0x18,0x3B,0xA5,0x24,
77239 -0x0F,0x00,0x84,0x30,
77240 -0xC0,0x20,0x04,0x00,
77241 -0x21,0x20,0x90,0x00,
77242 -0x1C,0x00,0x84,0x24,
77243 -0x39,0x52,0x00,0x0C,
77244 -0x06,0x00,0x06,0x24,
77245 -0x06,0x00,0x40,0x10,
77246 -0x21,0x20,0x00,0x02,
77247 -0x14,0x00,0xBF,0x8F,
77248 -0x10,0x00,0xB0,0x8F,
77249 -0x21,0x10,0x00,0x00,
77250 -0x08,0x00,0xE0,0x03,
77251 -0x18,0x00,0xBD,0x27,
77252 -0x92,0x10,0x00,0x0C,
77253 -0x00,0x00,0x00,0x00,
77254 -0x14,0x00,0xBF,0x8F,
77255 -0x10,0x00,0xB0,0x8F,
77256 -0x21,0x10,0x00,0x00,
77257 -0x08,0x00,0xE0,0x03,
77258 -0x18,0x00,0xBD,0x27,
77259 -0x80,0xFF,0xBD,0x27,
77260 -0x02,0x80,0x06,0x3C,
77261 -0x02,0x80,0x08,0x3C,
77262 -0x78,0x00,0xBE,0xAF,
77263 -0x7C,0x00,0xBF,0xAF,
77264 -0x74,0x00,0xB7,0xAF,
77265 -0x70,0x00,0xB6,0xAF,
77266 -0x6C,0x00,0xB5,0xAF,
77267 -0x68,0x00,0xB4,0xAF,
77268 -0x64,0x00,0xB3,0xAF,
77269 -0x60,0x00,0xB2,0xAF,
77270 -0x5C,0x00,0xB1,0xAF,
77271 -0x58,0x00,0xB0,0xAF,
77272 -0xD0,0xEA,0xC2,0x24,
77273 -0xE4,0xEA,0x03,0x25,
77274 -0x01,0x00,0x44,0x90,
77275 -0x01,0x00,0x65,0x90,
77276 -0xD0,0xEA,0xCB,0x90,
77277 -0xE4,0xEA,0x0A,0x91,
77278 -0x02,0x00,0x47,0x90,
77279 -0x02,0x00,0x66,0x90,
77280 -0x03,0x00,0x48,0x90,
77281 -0x03,0x00,0x69,0x90,
77282 -0x00,0x22,0x04,0x00,
77283 -0x00,0x2A,0x05,0x00,
77284 -0x25,0x20,0x8B,0x00,
77285 -0x25,0x28,0xAA,0x00,
77286 -0x00,0x3C,0x07,0x00,
77287 -0x00,0x34,0x06,0x00,
77288 -0x25,0x38,0xE4,0x00,
77289 -0x25,0x30,0xC5,0x00,
77290 -0x00,0x46,0x08,0x00,
77291 -0x00,0x4E,0x09,0x00,
77292 -0x25,0x40,0x07,0x01,
77293 -0x25,0x48,0x26,0x01,
77294 -0x00,0x02,0x04,0x24,
77295 -0x40,0x00,0xA8,0xAF,
77296 -0x25,0x24,0x00,0x0C,
77297 -0x48,0x00,0xA9,0xAF,
77298 -0xB0,0x01,0x40,0x10,
77299 -0x21,0xF0,0x40,0x00,
77300 -0x02,0x80,0x02,0x3C,
77301 -0x30,0x1F,0x52,0x24,
77302 -0xC4,0x39,0x45,0x8E,
77303 -0x02,0x80,0x04,0x3C,
77304 -0x2F,0x55,0x00,0x0C,
77305 -0x34,0xE1,0x84,0x24,
77306 -0x08,0x00,0xD1,0x97,
77307 -0x02,0x80,0x02,0x3C,
77308 -0x02,0x80,0x10,0x3C,
77309 -0x25,0x88,0x22,0x02,
77310 -0x88,0x58,0x10,0x26,
77311 -0x24,0x00,0x24,0x26,
77312 -0x21,0x28,0x00,0x02,
77313 -0x20,0x00,0x20,0xA6,
77314 -0x10,0x52,0x00,0x0C,
77315 -0x06,0x00,0x06,0x24,
77316 -0x02,0x80,0x05,0x3C,
77317 -0x2A,0x00,0x24,0x26,
77318 -0x18,0x3B,0xA5,0x24,
77319 -0x10,0x52,0x00,0x0C,
77320 -0x06,0x00,0x06,0x24,
77321 -0x21,0x28,0x00,0x02,
77322 -0x06,0x00,0x06,0x24,
77323 -0x10,0x52,0x00,0x0C,
77324 -0x30,0x00,0x24,0x26,
77325 -0x18,0x00,0x03,0x24,
77326 -0x0C,0x00,0xC3,0xAF,
77327 -0xF8,0x1D,0x42,0x96,
77328 -0x20,0x00,0x25,0x26,
77329 -0x38,0x00,0x37,0x26,
77330 -0xFF,0x0F,0x43,0x30,
77331 -0x00,0x19,0x03,0x00,
77332 -0x02,0x22,0x03,0x00,
77333 -0x01,0x00,0x42,0x24,
77334 -0xF8,0x1D,0x42,0xA6,
77335 -0x17,0x00,0xA4,0xA0,
77336 -0x02,0x80,0x04,0x3C,
77337 -0x16,0x00,0xA3,0xA0,
77338 -0x32,0x4F,0x00,0x0C,
77339 -0xF8,0x58,0x84,0x24,
77340 -0x21,0x28,0x40,0x00,
77341 -0x21,0x20,0xE0,0x02,
77342 -0x10,0x52,0x00,0x0C,
77343 -0x02,0x00,0x06,0x24,
77344 -0x3A,0x00,0x24,0x26,
77345 -0x18,0x00,0xA5,0x27,
77346 -0x02,0x00,0x06,0x24,
77347 -0x03,0x00,0x02,0x24,
77348 -0x10,0x52,0x00,0x0C,
77349 -0x18,0x00,0xA2,0xA7,
77350 -0x0C,0x00,0xC3,0x8F,
77351 -0x02,0x80,0x07,0x3C,
77352 -0x3C,0x00,0x24,0x26,
77353 -0x04,0x00,0x63,0x24,
77354 -0x0C,0x00,0xC3,0xAF,
77355 -0x60,0x39,0x46,0x8E,
77356 -0x0C,0x00,0xC2,0x27,
77357 -0x94,0x58,0xE7,0x24,
77358 -0x21,0x28,0x00,0x00,
77359 -0x54,0x00,0xA2,0xAF,
77360 -0x41,0x4F,0x00,0x0C,
77361 -0x10,0x00,0xA2,0xAF,
77362 -0x20,0x00,0xA4,0x27,
77363 -0x50,0x00,0xA5,0x27,
77364 -0x21,0x50,0x00,0x0C,
77365 -0x21,0xB8,0x40,0x00,
77366 -0x50,0x00,0xA8,0x8F,
77367 -0x21,0x88,0x00,0x00,
77368 -0x52,0x00,0x00,0x11,
77369 -0x21,0x80,0x00,0x00,
77370 -0x21,0x38,0x40,0x02,
77371 -0x18,0x00,0xA9,0x27,
77372 -0x21,0x10,0x31,0x01,
77373 -0x08,0x00,0x46,0x90,
77374 -0x21,0x20,0x00,0x00,
77375 -0x7F,0x00,0xC5,0x30,
77376 -0x21,0x10,0x87,0x00,
77377 -0xB4,0x39,0x43,0x90,
77378 -0x01,0x00,0x84,0x24,
77379 -0x7F,0x00,0x63,0x30,
77380 -0x3D,0x00,0xA3,0x10,
77381 -0x0D,0x00,0x82,0x2C,
77382 -0xFA,0xFF,0x40,0x14,
77383 -0x21,0x10,0x87,0x00,
77384 -0x01,0x00,0x31,0x26,
77385 -0x2B,0x10,0x28,0x02,
77386 -0xF2,0xFF,0x40,0x14,
77387 -0x21,0x10,0x31,0x01,
77388 -0x09,0x00,0x02,0x2E,
77389 -0x3D,0x00,0x40,0x14,
77390 -0x21,0x20,0xE0,0x02,
77391 -0x54,0x00,0xA2,0x8F,
77392 -0x01,0x00,0x05,0x24,
77393 -0x08,0x00,0x06,0x24,
77394 -0x30,0x00,0xA7,0x27,
77395 -0x41,0x4F,0x00,0x0C,
77396 -0x10,0x00,0xA2,0xAF,
77397 -0x21,0x20,0x40,0x00,
77398 -0x54,0x00,0xA2,0x8F,
77399 -0xF8,0xFF,0x06,0x26,
77400 -0x32,0x00,0x05,0x24,
77401 -0x38,0x00,0xA7,0x27,
77402 -0x41,0x4F,0x00,0x0C,
77403 -0x10,0x00,0xA2,0xAF,
77404 -0x21,0xB8,0x40,0x00,
77405 -0x02,0x80,0x02,0x3C,
77406 -0x30,0x1F,0x44,0x24,
77407 -0x78,0x3D,0x83,0x8C,
77408 -0x02,0x00,0x02,0x24,
77409 -0x37,0x00,0x62,0x14,
77410 -0x00,0x00,0x00,0x00,
77411 -0xC4,0x39,0x83,0x8C,
77412 -0x0C,0x00,0x11,0x24,
77413 -0x2B,0x10,0x23,0x02,
77414 -0x32,0x00,0x40,0x10,
77415 -0x02,0x80,0x02,0x3C,
77416 -0xF8,0x58,0x46,0x24,
77417 -0x21,0x20,0x60,0x00,
77418 -0x4D,0x13,0x00,0x08,
77419 -0x30,0x00,0x05,0x24,
77420 -0x01,0x00,0x62,0x90,
77421 -0x00,0x00,0x00,0x00,
77422 -0x21,0x10,0x51,0x00,
77423 -0x02,0x00,0x51,0x24,
77424 -0x2B,0x18,0x24,0x02,
77425 -0x27,0x00,0x60,0x10,
77426 -0x00,0x00,0x00,0x00,
77427 -0x21,0x18,0x26,0x02,
77428 -0x00,0x00,0x62,0x90,
77429 -0x00,0x00,0x00,0x00,
77430 -0xF5,0xFF,0x45,0x14,
77431 -0x02,0x80,0x07,0x3C,
77432 -0x01,0x00,0x66,0x90,
77433 -0x54,0x00,0xA2,0x8F,
77434 -0xFA,0x58,0xE7,0x24,
77435 -0x21,0x20,0xE0,0x02,
77436 -0x21,0x38,0x27,0x02,
77437 -0x30,0x00,0x05,0x24,
77438 -0x41,0x4F,0x00,0x0C,
77439 -0x10,0x00,0xA2,0xAF,
77440 -0x73,0x13,0x00,0x08,
77441 -0x21,0xB8,0x40,0x00,
77442 -0x21,0x10,0x30,0x01,
77443 -0x18,0x00,0x46,0xA0,
77444 -0x50,0x00,0xA8,0x8F,
77445 -0x01,0x00,0x31,0x26,
77446 -0x2B,0x10,0x28,0x02,
77447 -0xB4,0xFF,0x40,0x14,
77448 -0x01,0x00,0x10,0x26,
77449 -0x27,0x13,0x00,0x08,
77450 -0x09,0x00,0x02,0x2E,
77451 -0x54,0x00,0xA2,0x8F,
77452 -0x21,0x20,0xE0,0x02,
77453 -0x21,0x30,0x00,0x02,
77454 -0x01,0x00,0x05,0x24,
77455 -0x30,0x00,0xA7,0x27,
77456 -0x41,0x4F,0x00,0x0C,
77457 -0x10,0x00,0xA2,0xAF,
77458 -0x21,0xB8,0x40,0x00,
77459 -0x02,0x80,0x02,0x3C,
77460 -0x30,0x1F,0x44,0x24,
77461 -0x78,0x3D,0x83,0x8C,
77462 -0x02,0x00,0x02,0x24,
77463 -0xCB,0xFF,0x62,0x10,
77464 -0x00,0x00,0x00,0x00,
77465 -0xD5,0x1D,0x00,0x0C,
77466 -0x00,0x00,0x00,0x00,
77467 -0x16,0x00,0x40,0x14,
77468 -0x02,0x80,0x02,0x3C,
77469 -0x30,0x1F,0x43,0x24,
77470 -0xC4,0x39,0x62,0x8C,
77471 -0x0C,0x00,0x11,0x24,
77472 -0x2B,0x10,0x22,0x02,
77473 -0x10,0x00,0x40,0x10,
77474 -0x02,0x80,0x02,0x3C,
77475 -0xF8,0x58,0x52,0x24,
77476 -0x21,0x80,0x60,0x00,
77477 -0x02,0x80,0x13,0x3C,
77478 -0x21,0x20,0x32,0x02,
77479 -0x00,0x00,0x83,0x90,
77480 -0x2D,0x00,0x02,0x24,
77481 -0xCB,0x00,0x62,0x10,
77482 -0x02,0x80,0x05,0x3C,
77483 -0x01,0x00,0x82,0x90,
77484 -0xC4,0x39,0x03,0x8E,
77485 -0x21,0x10,0x51,0x00,
77486 -0x02,0x00,0x51,0x24,
77487 -0x2B,0x18,0x23,0x02,
77488 -0xF6,0xFF,0x60,0x14,
77489 -0x21,0x20,0x32,0x02,
77490 -0x02,0x80,0x02,0x3C,
77491 -0x30,0x1F,0x44,0x24,
77492 -0x78,0x3D,0x83,0x8C,
77493 -0x02,0x00,0x02,0x24,
77494 -0x82,0x00,0x62,0x10,
77495 -0x0C,0x00,0x11,0x24,
77496 -0x02,0x80,0x02,0x3C,
77497 -0x30,0x1F,0x43,0x24,
77498 -0xC4,0x39,0x62,0x8C,
77499 -0x0C,0x00,0x11,0x24,
77500 -0x2B,0x10,0x22,0x02,
77501 -0x26,0x00,0x40,0x10,
77502 -0x02,0x80,0x02,0x3C,
77503 -0xF8,0x58,0x56,0x24,
77504 -0x21,0xA8,0x60,0x00,
77505 -0xDD,0x00,0x14,0x24,
77506 -0xA5,0x13,0x00,0x08,
77507 -0x02,0x80,0x13,0x3C,
77508 -0x01,0x00,0x02,0x92,
77509 -0xC4,0x39,0xA3,0x8E,
77510 -0x21,0x10,0x51,0x00,
77511 -0x02,0x00,0x51,0x24,
77512 -0x2B,0x18,0x23,0x02,
77513 -0x1B,0x00,0x60,0x10,
77514 -0x02,0x80,0x02,0x3C,
77515 -0x21,0x80,0x36,0x02,
77516 -0x00,0x00,0x02,0x92,
77517 -0x02,0x00,0x12,0x26,
77518 -0x21,0x20,0x40,0x02,
77519 -0xD0,0xDD,0x65,0x26,
77520 -0xF3,0xFF,0x54,0x14,
77521 -0x06,0x00,0x06,0x24,
77522 -0x39,0x52,0x00,0x0C,
77523 -0x00,0x00,0x00,0x00,
77524 -0xEF,0xFF,0x40,0x14,
77525 -0x21,0x20,0xE0,0x02,
77526 -0x54,0x00,0xA2,0x8F,
77527 -0xDD,0x00,0x05,0x24,
77528 -0x21,0x38,0x40,0x02,
77529 -0x07,0x00,0x06,0x24,
77530 -0x41,0x4F,0x00,0x0C,
77531 -0x10,0x00,0xA2,0xAF,
77532 -0x08,0x00,0x04,0x92,
77533 -0x21,0xB8,0x40,0x00,
77534 -0x02,0x80,0x02,0x3C,
77535 -0x30,0x1F,0x45,0x24,
77536 -0x01,0x00,0x03,0x24,
77537 -0x02,0x80,0x02,0x3C,
77538 -0x0F,0x5F,0x44,0xA0,
77539 -0x10,0x3E,0xA3,0xAC,
77540 -0x02,0x80,0x02,0x3C,
77541 -0x30,0x1F,0x44,0x24,
77542 -0xC4,0x39,0x82,0x8C,
77543 -0x0C,0x00,0x11,0x24,
77544 -0x2B,0x10,0x22,0x02,
77545 -0x20,0x00,0x40,0x10,
77546 -0x02,0x80,0x02,0x3C,
77547 -0x02,0x80,0x03,0x3C,
77548 -0xF8,0x58,0x56,0x24,
77549 -0xFA,0x58,0x75,0x24,
77550 -0x21,0xA0,0x80,0x00,
77551 -0xD2,0x13,0x00,0x08,
77552 -0xDD,0x00,0x13,0x24,
77553 -0x01,0x00,0x02,0x92,
77554 -0xC4,0x39,0x83,0x8E,
77555 -0x21,0x10,0x51,0x00,
77556 -0x02,0x00,0x51,0x24,
77557 -0x2B,0x18,0x23,0x02,
77558 -0x14,0x00,0x60,0x10,
77559 -0x02,0x80,0x02,0x3C,
77560 -0x21,0x80,0x36,0x02,
77561 -0x00,0x00,0x02,0x92,
77562 -0x21,0x90,0x35,0x02,
77563 -0x21,0x20,0x40,0x02,
77564 -0x48,0x00,0xA5,0x27,
77565 -0xF3,0xFF,0x53,0x14,
77566 -0x04,0x00,0x06,0x24,
77567 -0x39,0x52,0x00,0x0C,
77568 -0x00,0x00,0x00,0x00,
77569 -0xEF,0xFF,0x40,0x14,
77570 -0x21,0x20,0xE0,0x02,
77571 -0x01,0x00,0x06,0x92,
77572 -0x54,0x00,0xA2,0x8F,
77573 -0x21,0x38,0x40,0x02,
77574 -0xDD,0x00,0x05,0x24,
77575 -0x41,0x4F,0x00,0x0C,
77576 -0x10,0x00,0xA2,0xAF,
77577 -0x21,0xB8,0x40,0x00,
77578 -0x02,0x80,0x02,0x3C,
77579 -0x30,0x1F,0x50,0x24,
77580 -0x0A,0x3E,0x02,0x92,
77581 -0x50,0x3E,0x03,0x8E,
77582 -0x05,0x00,0x42,0x38,
77583 -0x01,0x00,0x63,0x38,
77584 -0x01,0x00,0x42,0x2C,
77585 -0x01,0x00,0x63,0x2C,
77586 -0x24,0x10,0x43,0x00,
77587 -0x58,0x00,0x40,0x14,
77588 -0x02,0x80,0x07,0x3C,
77589 -0xC4,0x39,0x05,0x8E,
77590 -0x0C,0x00,0x11,0x24,
77591 -0x2B,0x10,0x25,0x02,
77592 -0x0F,0x00,0x40,0x10,
77593 -0x02,0x80,0x02,0x3C,
77594 -0xF8,0x58,0x46,0x24,
77595 -0x44,0x00,0x04,0x24,
77596 -0x21,0x80,0x26,0x02,
77597 -0x00,0x00,0x02,0x92,
77598 -0x00,0x00,0x00,0x00,
77599 -0x3E,0x00,0x44,0x10,
77600 -0x00,0x00,0x00,0x00,
77601 -0x01,0x00,0x02,0x92,
77602 -0x00,0x00,0x00,0x00,
77603 -0x21,0x10,0x51,0x00,
77604 -0x02,0x00,0x51,0x24,
77605 -0x2B,0x18,0x25,0x02,
77606 -0xF6,0xFF,0x60,0x14,
77607 -0x21,0x80,0x26,0x02,
77608 -0x21,0x20,0xC0,0x03,
77609 -0x21,0x28,0x00,0x00,
77610 -0xB9,0x0C,0x00,0x0C,
77611 -0x21,0x30,0x00,0x00,
77612 -0x21,0x10,0x00,0x00,
77613 -0x7C,0x00,0xBF,0x8F,
77614 -0x78,0x00,0xBE,0x8F,
77615 -0x74,0x00,0xB7,0x8F,
77616 -0x70,0x00,0xB6,0x8F,
77617 -0x6C,0x00,0xB5,0x8F,
77618 -0x68,0x00,0xB4,0x8F,
77619 -0x64,0x00,0xB3,0x8F,
77620 -0x60,0x00,0xB2,0x8F,
77621 -0x5C,0x00,0xB1,0x8F,
77622 -0x58,0x00,0xB0,0x8F,
77623 -0x08,0x00,0xE0,0x03,
77624 -0x80,0x00,0xBD,0x27,
77625 -0xC4,0x39,0x82,0x8C,
77626 -0x00,0x00,0x00,0x00,
77627 -0x2B,0x10,0x22,0x02,
77628 -0x7B,0xFF,0x40,0x10,
77629 -0x02,0x80,0x02,0x3C,
77630 -0x02,0x80,0x03,0x3C,
77631 -0xF8,0x58,0x56,0x24,
77632 -0xFA,0x58,0x75,0x24,
77633 -0x21,0xA0,0x80,0x00,
77634 -0x25,0x14,0x00,0x08,
77635 -0xDD,0x00,0x13,0x24,
77636 -0x01,0x00,0x02,0x92,
77637 -0xC4,0x39,0x83,0x8E,
77638 -0x21,0x10,0x51,0x00,
77639 -0x02,0x00,0x51,0x24,
77640 -0x2B,0x18,0x23,0x02,
77641 -0x6F,0xFF,0x60,0x10,
77642 -0x02,0x80,0x02,0x3C,
77643 -0x21,0x80,0x36,0x02,
77644 -0x00,0x00,0x02,0x92,
77645 -0x21,0x90,0x35,0x02,
77646 -0x21,0x20,0x40,0x02,
77647 -0x40,0x00,0xA5,0x27,
77648 -0xF3,0xFF,0x53,0x14,
77649 -0x04,0x00,0x06,0x24,
77650 -0x39,0x52,0x00,0x0C,
77651 -0x00,0x00,0x00,0x00,
77652 -0xEF,0xFF,0x40,0x14,
77653 -0x21,0x20,0xE0,0x02,
77654 -0x01,0x00,0x06,0x92,
77655 -0x54,0x00,0xA2,0x8F,
77656 -0x21,0x38,0x40,0x02,
77657 -0xDD,0x00,0x05,0x24,
77658 -0x41,0x4F,0x00,0x0C,
77659 -0x10,0x00,0xA2,0xAF,
77660 -0x92,0x13,0x00,0x08,
77661 -0x21,0xB8,0x40,0x00,
77662 -0x02,0x80,0x04,0x3C,
77663 -0x2F,0x55,0x00,0x0C,
77664 -0x48,0xE1,0x84,0x24,
77665 -0x01,0x00,0x06,0x92,
77666 -0x54,0x00,0xA2,0x8F,
77667 -0x02,0x80,0x07,0x3C,
77668 -0xFA,0x58,0xE7,0x24,
77669 -0x21,0x38,0x27,0x02,
77670 -0x21,0x20,0xE0,0x02,
77671 -0x44,0x00,0x05,0x24,
77672 -0x41,0x4F,0x00,0x0C,
77673 -0x10,0x00,0xA2,0xAF,
77674 -0x03,0x14,0x00,0x08,
77675 -0x21,0x20,0xC0,0x03,
77676 -0x54,0x00,0xA2,0x8F,
77677 -0x21,0x20,0xE0,0x02,
77678 -0x9C,0xDD,0xE7,0x24,
77679 -0xDD,0x00,0x05,0x24,
77680 -0x06,0x00,0x06,0x24,
77681 -0x41,0x4F,0x00,0x0C,
77682 -0x10,0x00,0xA2,0xAF,
77683 -0xEF,0x13,0x00,0x08,
77684 -0x21,0xB8,0x40,0x00,
77685 -0x02,0x80,0x14,0x3C,
77686 -0xFA,0x58,0xA5,0x24,
77687 -0x21,0x28,0x25,0x02,
77688 -0x88,0x5D,0x84,0x26,
77689 -0x10,0x52,0x00,0x0C,
77690 -0x20,0x00,0x06,0x24,
77691 -0x02,0x80,0x03,0x3C,
77692 -0xF1,0x5D,0x62,0x90,
77693 -0x00,0x00,0x00,0x00,
77694 -0x1D,0x00,0x40,0x14,
77695 -0x00,0x00,0x00,0x00,
77696 -0x58,0x3E,0x02,0x96,
77697 -0x00,0x00,0x00,0x00,
77698 -0xBD,0xFF,0x42,0x30,
77699 -0x58,0x3E,0x02,0xA6,
77700 -0x02,0x80,0x02,0x3C,
77701 -0x58,0x3E,0x03,0x96,
77702 -0xDE,0x5D,0x44,0x90,
77703 -0x0C,0x00,0x63,0x34,
77704 -0x01,0x00,0x84,0x30,
77705 -0x15,0x00,0x80,0x10,
77706 -0x58,0x3E,0x03,0xA6,
77707 -0x02,0x80,0x05,0x3C,
77708 -0x8B,0x5D,0x64,0x26,
77709 -0x3C,0xE3,0xA5,0x24,
77710 -0x10,0x52,0x00,0x0C,
77711 -0x10,0x00,0x06,0x24,
77712 -0x21,0x10,0x32,0x02,
77713 -0x01,0x00,0x46,0x90,
77714 -0x54,0x00,0xA2,0x8F,
77715 -0x21,0x20,0xE0,0x02,
77716 -0x88,0x5D,0x87,0x26,
77717 -0x2D,0x00,0x05,0x24,
77718 -0x41,0x4F,0x00,0x0C,
77719 -0x10,0x00,0xA2,0xAF,
77720 -0x21,0xB8,0x40,0x00,
77721 -0x01,0x00,0x02,0x24,
77722 -0x8C,0x13,0x00,0x08,
77723 -0x50,0x3E,0x02,0xAE,
77724 -0x58,0x3E,0x02,0x96,
77725 -0x5D,0x14,0x00,0x08,
77726 -0x02,0x00,0x42,0x34,
77727 -0x02,0x80,0x05,0x3C,
77728 -0x8B,0x5D,0x64,0x26,
77729 -0x68,0x14,0x00,0x08,
77730 -0x4C,0xE3,0xA5,0x24,
77731 -0x02,0x80,0x04,0x3C,
77732 -0x02,0x80,0x05,0x3C,
77733 -0x28,0xE1,0x84,0x24,
77734 -0x2F,0x55,0x00,0x0C,
77735 -0xD4,0xEA,0xA5,0x24,
77736 -0x07,0x14,0x00,0x08,
77737 -0xFF,0xFF,0x02,0x24,
77738 -0x02,0x80,0x02,0x3C,
77739 -0x30,0x1F,0x42,0x24,
77740 -0xB0,0x1B,0x43,0x94,
77741 -0xC8,0x00,0x04,0x24,
77742 -0xD0,0x38,0x44,0xAC,
77743 -0x9F,0xFE,0x63,0x30,
77744 -0x80,0x00,0x63,0x34,
77745 -0xB0,0x1B,0x43,0xA4,
77746 -0x6C,0x3D,0x40,0xAC,
77747 -0x70,0x3D,0x40,0xAC,
77748 -0xA5,0x12,0x00,0x08,
77749 -0xB4,0x38,0x40,0xAC,
77750 -0xD8,0xFF,0xBD,0x27,
77751 -0x28,0x00,0xA4,0xA3,
77752 -0x00,0x01,0x04,0x24,
77753 -0x18,0x00,0xB2,0xAF,
77754 -0x20,0x00,0xBF,0xAF,
77755 -0x1C,0x00,0xB3,0xAF,
77756 -0x14,0x00,0xB1,0xAF,
77757 -0x10,0x00,0xB0,0xAF,
77758 -0x2C,0x00,0xA5,0xA3,
77759 -0x25,0x24,0x00,0x0C,
77760 -0x30,0x00,0xA6,0xA7,
77761 -0x94,0x00,0x40,0x10,
77762 -0x21,0x90,0x40,0x00,
77763 -0x30,0x00,0xA7,0x97,
77764 -0x28,0x00,0xA5,0x93,
77765 -0x2C,0x00,0xA6,0x93,
77766 -0x02,0x80,0x04,0x3C,
77767 -0x2F,0x55,0x00,0x0C,
77768 -0x68,0xE1,0x84,0x24,
77769 -0x08,0x00,0x50,0x96,
77770 -0x02,0x80,0x02,0x3C,
77771 -0x02,0x80,0x11,0x3C,
77772 -0x25,0x80,0x02,0x02,
77773 -0x88,0x58,0x31,0x26,
77774 -0x21,0x28,0x20,0x02,
77775 -0x24,0x00,0x04,0x26,
77776 -0x06,0x00,0x06,0x24,
77777 -0x10,0x52,0x00,0x0C,
77778 -0x20,0x00,0x00,0xA6,
77779 -0x02,0x80,0x05,0x3C,
77780 -0x18,0x3B,0xA5,0x24,
77781 -0x2A,0x00,0x04,0x26,
77782 -0x10,0x52,0x00,0x0C,
77783 -0x06,0x00,0x06,0x24,
77784 -0x21,0x28,0x20,0x02,
77785 -0x30,0x00,0x04,0x26,
77786 -0x10,0x52,0x00,0x0C,
77787 -0x06,0x00,0x06,0x24,
77788 -0x20,0x00,0x03,0x96,
77789 -0x18,0x00,0x02,0x24,
77790 -0x20,0x00,0x05,0x26,
77791 -0x03,0xFF,0x63,0x30,
77792 -0xD0,0x00,0x63,0x34,
77793 -0x20,0x00,0x03,0xA6,
77794 -0x02,0x80,0x03,0x3C,
77795 -0x0C,0x00,0x42,0xAE,
77796 -0x30,0x1F,0x73,0x24,
77797 -0xF8,0x1D,0x62,0x96,
77798 -0x0C,0x00,0x51,0x26,
77799 -0x28,0x00,0xA6,0x27,
77800 -0xFF,0x0F,0x43,0x30,
77801 -0x00,0x19,0x03,0x00,
77802 -0x02,0x22,0x03,0x00,
77803 -0x01,0x00,0x42,0x24,
77804 -0xF8,0x1D,0x62,0xA6,
77805 -0x21,0x38,0x20,0x02,
77806 -0x16,0x00,0xA3,0xA0,
77807 -0x17,0x00,0xA4,0xA0,
77808 -0x38,0x00,0x04,0x26,
77809 -0x68,0x4F,0x00,0x0C,
77810 -0x01,0x00,0x05,0x24,
77811 -0x21,0x20,0x40,0x00,
77812 -0x01,0x00,0x05,0x24,
77813 -0x2C,0x00,0xA6,0x27,
77814 -0x68,0x4F,0x00,0x0C,
77815 -0x21,0x38,0x20,0x02,
77816 -0x28,0x00,0xA3,0x93,
77817 -0x21,0x20,0x40,0x00,
77818 -0x03,0x00,0x02,0x24,
77819 -0x0C,0x00,0x62,0x10,
77820 -0x00,0x00,0x00,0x00,
77821 -0x21,0x20,0x40,0x02,
77822 -0x21,0x28,0x00,0x00,
77823 -0xB9,0x0C,0x00,0x0C,
77824 -0x21,0x30,0x00,0x00,
77825 -0x20,0x00,0xBF,0x8F,
77826 -0x1C,0x00,0xB3,0x8F,
77827 -0x18,0x00,0xB2,0x8F,
77828 -0x14,0x00,0xB1,0x8F,
77829 -0x10,0x00,0xB0,0x8F,
77830 -0x08,0x00,0xE0,0x03,
77831 -0x28,0x00,0xBD,0x27,
77832 -0x2C,0x00,0xA3,0x93,
77833 -0x00,0x00,0x00,0x00,
77834 -0x2E,0x00,0x60,0x14,
77835 -0x01,0x00,0x02,0x24,
77836 -0x19,0x3E,0x63,0x92,
77837 -0x21,0x80,0x60,0x02,
77838 -0x01,0x00,0x68,0x24,
77839 -0xFF,0x00,0x02,0x31,
77840 -0xFD,0xFF,0x40,0x10,
77841 -0x21,0x18,0x00,0x01,
77842 -0x02,0x80,0x06,0x3C,
77843 -0x19,0x3E,0x08,0xA2,
77844 -0x21,0x38,0x20,0x02,
77845 -0x49,0x5D,0xC6,0x24,
77846 -0x68,0x4F,0x00,0x0C,
77847 -0x01,0x00,0x05,0x24,
77848 -0x30,0x00,0xA3,0x97,
77849 -0x02,0x80,0x06,0x3C,
77850 -0x21,0x38,0x20,0x02,
77851 -0x0F,0x00,0x63,0x30,
77852 -0x80,0x18,0x03,0x00,
77853 -0x02,0x08,0x63,0x34,
77854 -0x1C,0x3E,0x03,0xA6,
77855 -0x4C,0x5D,0xC6,0x24,
77856 -0x21,0x20,0x40,0x00,
77857 -0x68,0x4F,0x00,0x0C,
77858 -0x02,0x00,0x05,0x24,
77859 -0x02,0x80,0x06,0x3C,
77860 -0x21,0x38,0x20,0x02,
77861 -0x4E,0x5D,0xC6,0x24,
77862 -0x21,0x20,0x40,0x00,
77863 -0x02,0x00,0x05,0x24,
77864 -0x68,0x4F,0x00,0x0C,
77865 -0x1E,0x3E,0x00,0xA6,
77866 -0x30,0x00,0xA3,0x97,
77867 -0x21,0x20,0x40,0x00,
77868 -0x02,0x80,0x06,0x3C,
77869 -0x07,0x00,0x63,0x30,
77870 -0x40,0x18,0x03,0x00,
77871 -0x21,0x18,0x70,0x00,
77872 -0xE8,0x1D,0x62,0x94,
77873 -0x50,0x5D,0xC6,0x24,
77874 -0x21,0x38,0x20,0x02,
77875 -0x00,0x11,0x02,0x00,
77876 -0x02,0x00,0x05,0x24,
77877 -0x68,0x4F,0x00,0x0C,
77878 -0x20,0x3E,0x02,0xA6,
77879 -0xD8,0x14,0x00,0x08,
77880 -0x21,0x20,0x40,0x02,
77881 -0xC3,0xFF,0x62,0x14,
77882 -0x02,0x80,0x06,0x3C,
77883 -0x21,0x38,0x20,0x02,
77884 -0x48,0x5D,0xC6,0x24,
77885 -0x68,0x4F,0x00,0x0C,
77886 -0x01,0x00,0x05,0x24,
77887 -0x21,0x20,0x40,0x00,
77888 -0x30,0x00,0xA6,0x27,
77889 -0x21,0x38,0x20,0x02,
77890 -0x68,0x4F,0x00,0x0C,
77891 -0x02,0x00,0x05,0x24,
77892 -0x1C,0x3E,0x63,0x96,
77893 -0x02,0x80,0x06,0x3C,
77894 -0x21,0x38,0x20,0x02,
77895 -0x3F,0x00,0x63,0x30,
77896 -0x00,0x08,0x63,0x34,
77897 -0x21,0x20,0x40,0x00,
77898 -0x4C,0x5D,0xC6,0x24,
77899 -0x02,0x00,0x05,0x24,
77900 -0x68,0x4F,0x00,0x0C,
77901 -0x1C,0x3E,0x63,0xA6,
77902 -0x02,0x80,0x06,0x3C,
77903 -0x21,0x20,0x40,0x00,
77904 -0x4E,0x5D,0xC6,0x24,
77905 -0x21,0x38,0x20,0x02,
77906 -0x68,0x4F,0x00,0x0C,
77907 -0x02,0x00,0x05,0x24,
77908 -0xD8,0x14,0x00,0x08,
77909 -0x21,0x20,0x40,0x02,
77910 -0x02,0x80,0x04,0x3C,
77911 -0x02,0x80,0x05,0x3C,
77912 -0x5C,0xE1,0x84,0x24,
77913 -0x2F,0x55,0x00,0x0C,
77914 -0xE8,0xEA,0xA5,0x24,
77915 -0x20,0x00,0xBF,0x8F,
77916 -0x1C,0x00,0xB3,0x8F,
77917 -0x18,0x00,0xB2,0x8F,
77918 -0x14,0x00,0xB1,0x8F,
77919 -0x10,0x00,0xB0,0x8F,
77920 -0x08,0x00,0xE0,0x03,
77921 -0x28,0x00,0xBD,0x27,
77922 -0x00,0x80,0x03,0x3C,
77923 -0x25,0xB0,0x02,0x3C,
77924 -0xE0,0xFF,0xBD,0x27,
77925 -0x18,0x03,0x42,0x34,
77926 -0xF0,0x54,0x63,0x24,
77927 -0x14,0x00,0xB1,0xAF,
77928 -0x10,0x00,0xB0,0xAF,
77929 -0x1C,0x00,0xBF,0xAF,
77930 -0x18,0x00,0xB2,0xAF,
77931 -0x00,0x00,0x43,0xAC,
77932 -0x02,0x00,0x82,0x90,
77933 -0x02,0x80,0x05,0x3C,
77934 -0x88,0x58,0xA5,0x24,
77935 -0x0F,0x00,0x42,0x30,
77936 -0xC0,0x10,0x02,0x00,
77937 -0x21,0x80,0x44,0x00,
77938 -0x28,0x00,0x04,0x26,
77939 -0x06,0x00,0x06,0x24,
77940 -0x39,0x52,0x00,0x0C,
77941 -0x18,0x00,0x11,0x26,
77942 -0x08,0x00,0x40,0x10,
77943 -0x00,0x00,0x00,0x00,
77944 -0x1C,0x00,0xBF,0x8F,
77945 -0x18,0x00,0xB2,0x8F,
77946 -0x14,0x00,0xB1,0x8F,
77947 -0x10,0x00,0xB0,0x8F,
77948 -0x21,0x10,0x00,0x00,
77949 -0x08,0x00,0xE0,0x03,
77950 -0x20,0x00,0xBD,0x27,
77951 -0x55,0x50,0x00,0x0C,
77952 -0x21,0x20,0x20,0x02,
77953 -0x02,0x80,0x04,0x3C,
77954 -0x18,0x3B,0x84,0x24,
77955 -0x21,0x28,0x40,0x00,
77956 -0x39,0x52,0x00,0x0C,
77957 -0x06,0x00,0x06,0x24,
77958 -0xF1,0xFF,0x40,0x14,
77959 -0x03,0x00,0x02,0x24,
77960 -0x30,0x00,0x03,0x92,
77961 -0x00,0x00,0x00,0x00,
77962 -0xED,0xFF,0x62,0x14,
77963 -0x30,0x00,0x07,0x26,
77964 -0x02,0x80,0x06,0x3C,
77965 -0x30,0x1F,0xC8,0x24,
77966 -0x50,0x3E,0x02,0x8D,
77967 -0x00,0x00,0x00,0x00,
77968 -0xE7,0xFF,0x40,0x10,
77969 -0x01,0x00,0x05,0x24,
77970 -0x01,0x00,0xE3,0x90,
77971 -0x00,0x00,0x00,0x00,
77972 -0x1A,0x00,0x65,0x10,
77973 -0x02,0x00,0x62,0x28,
77974 -0x2E,0x00,0x40,0x14,
77975 -0x02,0x00,0x02,0x24,
77976 -0xDF,0xFF,0x62,0x14,
77977 -0x00,0x00,0x00,0x00,
77978 -0x03,0x00,0xE3,0x90,
77979 -0x00,0x00,0x00,0x00,
77980 -0x08,0x00,0x62,0x30,
77981 -0x0A,0x00,0x40,0x14,
77982 -0x02,0x11,0x03,0x00,
77983 -0x1A,0x3E,0x03,0x91,
77984 -0x04,0x10,0x45,0x00,
77985 -0x27,0x10,0x02,0x00,
77986 -0x24,0x10,0x43,0x00,
77987 -0x1A,0x3E,0x02,0xA1,
77988 -0x05,0x00,0xE3,0x90,
77989 -0x04,0x00,0xE2,0x90,
77990 -0x00,0x1A,0x03,0x00,
77991 -0x25,0x90,0x62,0x00,
77992 -0x1A,0x3E,0x05,0x91,
77993 -0x02,0x80,0x04,0x3C,
77994 -0x94,0xE1,0x84,0x24,
77995 -0x2F,0x55,0x00,0x0C,
77996 -0x21,0x30,0x40,0x02,
77997 -0x52,0x15,0x00,0x08,
77998 -0x00,0x00,0x00,0x00,
77999 -0x04,0x00,0xE2,0x90,
78000 -0x03,0x00,0xE4,0x90,
78001 -0x05,0x00,0xE3,0x90,
78002 -0x00,0x12,0x02,0x00,
78003 -0x25,0x10,0x44,0x00,
78004 -0x82,0x18,0x03,0x00,
78005 -0x27,0x00,0x40,0x14,
78006 -0x07,0x00,0x64,0x30,
78007 -0x1A,0x3E,0x03,0x91,
78008 -0x04,0x10,0x85,0x00,
78009 -0x25,0x10,0x43,0x00,
78010 -0x1A,0x3E,0x02,0xA1,
78011 -0x30,0x1F,0xC2,0x24,
78012 -0x4C,0x3E,0x43,0x90,
78013 -0x1A,0x3E,0x45,0x90,
78014 -0x02,0x80,0x04,0x3C,
78015 -0x21,0x18,0x62,0x00,
78016 -0x84,0xE1,0x84,0x24,
78017 -0x2F,0x55,0x00,0x0C,
78018 -0x44,0x3E,0x60,0xA0,
78019 -0x52,0x15,0x00,0x08,
78020 -0x00,0x00,0x00,0x00,
78021 -0xB2,0xFF,0x60,0x14,
78022 -0x03,0x00,0x04,0x24,
78023 -0x02,0x00,0xE2,0x90,
78024 -0x01,0x00,0x05,0x24,
78025 -0x18,0x3E,0x02,0xA1,
78026 -0x04,0x00,0xE3,0x90,
78027 -0x03,0x00,0xE2,0x90,
78028 -0x21,0x30,0x00,0x00,
78029 -0x00,0x1A,0x03,0x00,
78030 -0x25,0x18,0x62,0x00,
78031 -0x1C,0x3E,0x03,0xA5,
78032 -0x06,0x00,0xE2,0x90,
78033 -0x05,0x00,0xE3,0x90,
78034 -0x00,0x12,0x02,0x00,
78035 -0x25,0x10,0x43,0x00,
78036 -0x1E,0x3E,0x02,0xA5,
78037 -0x08,0x00,0xE3,0x90,
78038 -0x07,0x00,0xE2,0x90,
78039 -0x00,0x1A,0x03,0x00,
78040 -0x25,0x18,0x62,0x00,
78041 -0x90,0x14,0x00,0x0C,
78042 -0x20,0x3E,0x03,0xA5,
78043 -0x52,0x15,0x00,0x08,
78044 -0x00,0x00,0x00,0x00,
78045 -0x1A,0x3E,0x03,0x91,
78046 -0x04,0x10,0x85,0x00,
78047 -0x27,0x10,0x02,0x00,
78048 -0x94,0x15,0x00,0x08,
78049 -0x24,0x10,0x43,0x00,
78050 -0xC0,0xFF,0xBD,0x27,
78051 -0x34,0x00,0xB5,0xAF,
78052 -0xFF,0xFF,0x95,0x30,
78053 -0x00,0x01,0x04,0x24,
78054 -0x38,0x00,0xB6,0xAF,
78055 -0x28,0x00,0xB2,0xAF,
78056 -0x3C,0x00,0xBF,0xAF,
78057 -0x30,0x00,0xB4,0xAF,
78058 -0x2C,0x00,0xB3,0xAF,
78059 -0x24,0x00,0xB1,0xAF,
78060 -0x25,0x24,0x00,0x0C,
78061 -0x20,0x00,0xB0,0xAF,
78062 -0x21,0x90,0x40,0x00,
78063 -0x7A,0x00,0x40,0x10,
78064 -0x21,0xB0,0x00,0x00,
78065 -0x02,0x80,0x04,0x3C,
78066 -0x2F,0x55,0x00,0x0C,
78067 -0xB0,0xE1,0x84,0x24,
78068 -0x08,0x00,0x50,0x96,
78069 -0x02,0x80,0x02,0x3C,
78070 -0x02,0x80,0x11,0x3C,
78071 -0x25,0x80,0x02,0x02,
78072 -0x88,0x58,0x31,0x26,
78073 -0x24,0x00,0x04,0x26,
78074 -0x21,0x28,0x20,0x02,
78075 -0x20,0x00,0x00,0xA6,
78076 -0x10,0x52,0x00,0x0C,
78077 -0x06,0x00,0x06,0x24,
78078 -0x02,0x80,0x05,0x3C,
78079 -0x2A,0x00,0x04,0x26,
78080 -0x18,0x3B,0xA5,0x24,
78081 -0x10,0x52,0x00,0x0C,
78082 -0x06,0x00,0x06,0x24,
78083 -0x30,0x00,0x04,0x26,
78084 -0x21,0x28,0x20,0x02,
78085 -0x10,0x52,0x00,0x0C,
78086 -0x06,0x00,0x06,0x24,
78087 -0x20,0x00,0x03,0x96,
78088 -0x18,0x00,0x02,0x24,
78089 -0x02,0x80,0x13,0x3C,
78090 -0x03,0xFF,0x63,0x30,
78091 -0xB0,0x00,0x63,0x34,
78092 -0x20,0x00,0x03,0xA6,
78093 -0x30,0x1F,0x68,0x26,
78094 -0x0C,0x00,0x42,0xAE,
78095 -0xF8,0x1D,0x02,0x95,
78096 -0x20,0x00,0x14,0x26,
78097 -0x0C,0x00,0x51,0x26,
78098 -0xFF,0x0F,0x43,0x30,
78099 -0x00,0x19,0x03,0x00,
78100 -0x02,0x22,0x03,0x00,
78101 -0x01,0x00,0x42,0x24,
78102 -0xF8,0x1D,0x02,0xA5,
78103 -0x17,0x00,0x84,0xA2,
78104 -0x16,0x00,0x83,0xA2,
78105 -0x74,0x3D,0x04,0x8D,
78106 -0x03,0x00,0x02,0x24,
78107 -0x3C,0x00,0x82,0x10,
78108 -0x38,0x00,0x10,0x26,
78109 -0x30,0x1F,0x73,0x26,
78110 -0x78,0x3D,0x62,0x8E,
78111 -0x21,0x20,0x00,0x02,
78112 -0x02,0x00,0x05,0x24,
78113 -0x01,0x00,0x42,0x38,
78114 -0x01,0x00,0x42,0x2C,
78115 -0x18,0x00,0xA6,0x27,
78116 -0x21,0x38,0x20,0x02,
78117 -0x68,0x4F,0x00,0x0C,
78118 -0x18,0x00,0xA2,0xA7,
78119 -0x74,0x3D,0x63,0x8E,
78120 -0x21,0x20,0x40,0x00,
78121 -0x02,0x00,0x05,0x24,
78122 -0x18,0x00,0xA6,0x27,
78123 -0x21,0x38,0x20,0x02,
78124 -0x68,0x4F,0x00,0x0C,
78125 -0x18,0x00,0xA3,0xA7,
78126 -0x21,0x20,0x40,0x00,
78127 -0x02,0x00,0x05,0x24,
78128 -0x18,0x00,0xA6,0x27,
78129 -0x21,0x38,0x20,0x02,
78130 -0x68,0x4F,0x00,0x0C,
78131 -0x18,0x00,0xB5,0xA7,
78132 -0x74,0x3D,0x63,0x8E,
78133 -0x21,0x80,0x40,0x00,
78134 -0x03,0x00,0x02,0x24,
78135 -0x0F,0x00,0x62,0x10,
78136 -0x00,0x00,0x00,0x00,
78137 -0x21,0x20,0x40,0x02,
78138 -0x21,0x30,0xC0,0x02,
78139 -0xB9,0x0C,0x00,0x0C,
78140 -0x21,0x28,0x00,0x00,
78141 -0x3C,0x00,0xBF,0x8F,
78142 -0x38,0x00,0xB6,0x8F,
78143 -0x34,0x00,0xB5,0x8F,
78144 -0x30,0x00,0xB4,0x8F,
78145 -0x2C,0x00,0xB3,0x8F,
78146 -0x28,0x00,0xB2,0x8F,
78147 -0x24,0x00,0xB1,0x8F,
78148 -0x20,0x00,0xB0,0x8F,
78149 -0x08,0x00,0xE0,0x03,
78150 -0x40,0x00,0xBD,0x27,
78151 -0xB0,0x1B,0x62,0x96,
78152 -0x00,0x00,0x00,0x00,
78153 -0x40,0x00,0x42,0x30,
78154 -0xEF,0xFF,0x40,0x10,
78155 -0x21,0x20,0x40,0x02,
78156 -0x02,0x80,0x07,0x3C,
78157 -0x21,0x20,0x00,0x02,
78158 -0xB8,0x5C,0xE7,0x24,
78159 -0x10,0x00,0x05,0x24,
78160 -0x80,0x00,0x06,0x24,
78161 -0x41,0x4F,0x00,0x0C,
78162 -0x10,0x00,0xB1,0xAF,
78163 -0x00,0x00,0x83,0x96,
78164 -0x01,0x00,0x16,0x24,
78165 -0x00,0x40,0x63,0x34,
78166 -0x13,0x16,0x00,0x08,
78167 -0x00,0x00,0x83,0xA6,
78168 -0xB0,0x1B,0x02,0x95,
78169 -0x00,0x00,0x00,0x00,
78170 -0x40,0x00,0x42,0x30,
78171 -0xC1,0xFF,0x40,0x10,
78172 -0x21,0x20,0x00,0x02,
78173 -0x80,0x3D,0x03,0x8D,
78174 -0x84,0x3D,0x02,0x8D,
78175 -0x80,0x1F,0x03,0x00,
78176 -0x25,0x18,0x43,0x00,
78177 -0x04,0x00,0x05,0x24,
78178 -0x01,0x00,0x42,0x24,
78179 -0x1C,0x00,0xA6,0x27,
78180 -0x21,0x38,0x20,0x02,
78181 -0x84,0x3D,0x02,0xAD,
78182 -0x68,0x4F,0x00,0x0C,
78183 -0x1C,0x00,0xA3,0xAF,
78184 -0xF7,0x15,0x00,0x08,
78185 -0x21,0x80,0x40,0x00,
78186 -0x02,0x80,0x04,0x3C,
78187 -0x02,0x80,0x05,0x3C,
78188 -0xA4,0xE1,0x84,0x24,
78189 -0x2F,0x55,0x00,0x0C,
78190 -0xF8,0xEA,0xA5,0x24,
78191 -0x3C,0x00,0xBF,0x8F,
78192 -0x38,0x00,0xB6,0x8F,
78193 -0x34,0x00,0xB5,0x8F,
78194 -0x30,0x00,0xB4,0x8F,
78195 -0x2C,0x00,0xB3,0x8F,
78196 -0x28,0x00,0xB2,0x8F,
78197 -0x24,0x00,0xB1,0x8F,
78198 -0x20,0x00,0xB0,0x8F,
78199 -0x08,0x00,0xE0,0x03,
78200 -0x40,0x00,0xBD,0x27,
78201 -0x02,0x80,0x03,0x3C,
78202 -0x30,0x1F,0x63,0x24,
78203 -0xB0,0x1B,0x62,0x94,
78204 -0x01,0x00,0x05,0x24,
78205 -0x21,0x20,0x00,0x00,
78206 -0xEF,0xFF,0x42,0x30,
78207 -0x20,0x00,0x42,0x34,
78208 -0xB0,0x1B,0x62,0xA4,
78209 -0xC8,0x00,0x02,0x24,
78210 -0x74,0x3D,0x65,0xAC,
78211 -0xB4,0x38,0x62,0xAC,
78212 -0xD0,0x38,0x60,0xAC,
78213 -0x6C,0x3D,0x60,0xAC,
78214 -0xBC,0x15,0x00,0x08,
78215 -0x70,0x3D,0x60,0xAC,
78216 -0x08,0x00,0xE0,0x03,
78217 -0x00,0x00,0x00,0x00,
78218 -0xA8,0xFF,0xBD,0x27,
78219 -0x50,0x00,0xBE,0xAF,
78220 -0x40,0x00,0xB4,0xAF,
78221 -0x3C,0x00,0xB3,0xAF,
78222 -0x54,0x00,0xBF,0xAF,
78223 -0x4C,0x00,0xB7,0xAF,
78224 -0x48,0x00,0xB6,0xAF,
78225 -0x44,0x00,0xB5,0xAF,
78226 -0x38,0x00,0xB2,0xAF,
78227 -0x34,0x00,0xB1,0xAF,
78228 -0x30,0x00,0xB0,0xAF,
78229 -0x21,0xA0,0x80,0x00,
78230 -0x02,0x00,0x84,0x90,
78231 -0x21,0xF0,0x00,0x00,
78232 -0x24,0x00,0xA0,0xAF,
78233 -0x0F,0x00,0x84,0x30,
78234 -0xC0,0x20,0x04,0x00,
78235 -0x21,0x20,0x94,0x00,
78236 -0x18,0x00,0x93,0x24,
78237 -0x00,0x60,0x12,0x40,
78238 -0x01,0x00,0x41,0x36,
78239 -0x01,0x00,0x21,0x38,
78240 -0x00,0x60,0x81,0x40,
78241 -0x02,0x80,0x15,0x3C,
78242 -0x28,0x00,0x84,0x24,
78243 -0x88,0x58,0xA5,0x26,
78244 -0x39,0x52,0x00,0x0C,
78245 -0x06,0x00,0x06,0x24,
78246 -0x0F,0x00,0x40,0x14,
78247 -0x02,0x80,0x16,0x3C,
78248 -0xF4,0x5E,0xC2,0x92,
78249 -0x00,0x00,0x00,0x00,
78250 -0x29,0x00,0x40,0x14,
78251 -0x02,0x80,0x02,0x3C,
78252 -0xF4,0x5E,0xC2,0x92,
78253 -0x00,0x00,0x00,0x00,
78254 -0x07,0x00,0x40,0x14,
78255 -0x02,0x80,0x02,0x3C,
78256 -0x30,0x1F,0x50,0x24,
78257 -0xB0,0x1B,0x02,0x96,
78258 -0x00,0x00,0x00,0x00,
78259 -0x00,0x01,0x42,0x30,
78260 -0x3C,0x01,0x40,0x14,
78261 -0x05,0x00,0x05,0x24,
78262 -0x00,0x60,0x92,0x40,
78263 -0x02,0x80,0x03,0x3C,
78264 -0x30,0x1F,0x70,0x24,
78265 -0xB0,0x1B,0x03,0x96,
78266 -0x00,0x00,0x00,0x00,
78267 -0x00,0x10,0x62,0x30,
78268 -0x24,0x01,0x40,0x14,
78269 -0x10,0x00,0x62,0x30,
78270 -0xCB,0x00,0x40,0x14,
78271 -0x10,0x00,0x64,0x26,
78272 -0x02,0x80,0x04,0x3C,
78273 -0x30,0x1F,0x92,0x24,
78274 -0xB0,0x1B,0x42,0x96,
78275 -0x00,0x00,0x00,0x00,
78276 -0x00,0x01,0x42,0x30,
78277 -0x4E,0x01,0x40,0x14,
78278 -0x21,0x18,0x00,0x00,
78279 -0x54,0x00,0xBF,0x8F,
78280 -0x50,0x00,0xBE,0x8F,
78281 -0x4C,0x00,0xB7,0x8F,
78282 -0x48,0x00,0xB6,0x8F,
78283 -0x44,0x00,0xB5,0x8F,
78284 -0x40,0x00,0xB4,0x8F,
78285 -0x3C,0x00,0xB3,0x8F,
78286 -0x38,0x00,0xB2,0x8F,
78287 -0x34,0x00,0xB1,0x8F,
78288 -0x30,0x00,0xB0,0x8F,
78289 -0x21,0x10,0x60,0x00,
78290 -0x08,0x00,0xE0,0x03,
78291 -0x58,0x00,0xBD,0x27,
78292 -0x30,0x1F,0x43,0x24,
78293 -0xB0,0x1B,0x62,0x94,
78294 -0x00,0x00,0x00,0x00,
78295 -0x00,0x01,0x42,0x30,
78296 -0xD3,0xFF,0x40,0x10,
78297 -0x00,0x00,0x00,0x00,
78298 -0x6C,0x3B,0x62,0x8C,
78299 -0x00,0x00,0x00,0x00,
78300 -0xCF,0xFF,0x40,0x14,
78301 -0x02,0x80,0x0B,0x3C,
78302 -0x15,0x5F,0x62,0x91,
78303 -0x00,0x00,0x00,0x00,
78304 -0x55,0x01,0x40,0x14,
78305 -0x00,0x00,0x00,0x00,
78306 -0x02,0x80,0x02,0x3C,
78307 -0x02,0x80,0x03,0x3C,
78308 -0xFA,0x5E,0x40,0xA0,
78309 -0x1C,0x5F,0x60,0xAC,
78310 -0x02,0x80,0x03,0x3C,
78311 -0x0E,0x5F,0x62,0x90,
78312 -0xFD,0xFF,0x03,0x24,
78313 -0x02,0x80,0x04,0x3C,
78314 -0x24,0x10,0x43,0x00,
78315 -0x0E,0x5F,0x82,0xA0,
78316 -0x42,0xB0,0x17,0x3C,
78317 -0x00,0x00,0xE3,0x92,
78318 -0xEF,0xFF,0x02,0x24,
78319 -0x03,0x00,0xE4,0x36,
78320 -0x24,0x18,0x62,0x00,
78321 -0x40,0x00,0x02,0x24,
78322 -0x00,0x00,0xE3,0xA2,
78323 -0x00,0x00,0x82,0xA0,
78324 -0x02,0x80,0x04,0x3C,
78325 -0xFC,0x5E,0x82,0x94,
78326 -0x20,0x00,0x63,0x96,
78327 -0xFF,0xFF,0x42,0x30,
78328 -0x0A,0x00,0x43,0x10,
78329 -0x02,0x80,0x07,0x3C,
78330 -0x25,0xB0,0x02,0x3C,
78331 -0x94,0x00,0x42,0x34,
78332 -0xFC,0x5E,0x83,0xA4,
78333 -0x00,0x00,0x43,0xA4,
78334 -0xFC,0x5E,0x83,0x94,
78335 -0x00,0x00,0x00,0x00,
78336 -0xFF,0xFF,0x63,0x30,
78337 -0x80,0x1A,0x03,0x00,
78338 -0x00,0x5F,0xE3,0xAC,
78339 -0x25,0xB0,0x04,0x3C,
78340 -0x84,0x00,0x82,0x34,
78341 -0x00,0x00,0x50,0x8C,
78342 -0x80,0x00,0x84,0x34,
78343 -0x00,0x00,0x82,0x8C,
78344 -0x21,0x18,0x00,0x00,
78345 -0x00,0x5F,0xE6,0x8C,
78346 -0x00,0x88,0x10,0x00,
78347 -0x21,0x80,0x00,0x00,
78348 -0x25,0x80,0x02,0x02,
78349 -0x25,0x88,0x23,0x02,
78350 -0x21,0x20,0x00,0x02,
78351 -0x21,0x28,0x20,0x02,
78352 -0x28,0x00,0xA7,0xAF,
78353 -0xBA,0x34,0x00,0x0C,
78354 -0x2C,0x00,0xAB,0xAF,
78355 -0x28,0x00,0xA7,0x8F,
78356 -0x02,0x80,0x0A,0x3C,
78357 -0x21,0x28,0x00,0x00,
78358 -0x00,0x5F,0xE8,0x8C,
78359 -0x04,0x5F,0x43,0x95,
78360 -0x21,0x28,0xB1,0x00,
78361 -0x23,0x48,0x02,0x01,
78362 -0x21,0x20,0x30,0x01,
78363 -0x2B,0x10,0x90,0x00,
78364 -0xFF,0xFF,0x63,0x30,
78365 -0x80,0x1A,0x03,0x00,
78366 -0x21,0x28,0xA2,0x00,
78367 -0x21,0x38,0x00,0x00,
78368 -0x2B,0x40,0x83,0x00,
78369 -0x23,0x28,0xA7,0x00,
78370 -0x23,0x20,0x83,0x00,
78371 -0x23,0x28,0xA8,0x00,
78372 -0x02,0x80,0x03,0x3C,
78373 -0x20,0x5F,0x64,0xAC,
78374 -0x24,0x5F,0x65,0xAC,
78375 -0x04,0x5F,0x42,0x95,
78376 -0x2C,0x00,0xAB,0x8F,
78377 -0xFF,0xFF,0x42,0x30,
78378 -0x80,0x12,0x02,0x00,
78379 -0x2B,0x10,0x49,0x00,
78380 -0x31,0x01,0x40,0x10,
78381 -0x00,0x00,0x00,0x00,
78382 -0x04,0x5F,0x42,0x95,
78383 -0x00,0x00,0xE4,0x92,
78384 -0xFB,0xFF,0x03,0x24,
78385 -0xFF,0xFF,0x42,0x30,
78386 -0x80,0x12,0x02,0x00,
78387 -0x24,0x20,0x83,0x00,
78388 -0x23,0x48,0x22,0x01,
78389 -0x00,0x00,0xE4,0xA2,
78390 -0x01,0x00,0x06,0x24,
78391 -0x04,0x00,0x20,0x11,
78392 -0x01,0x00,0x04,0x24,
78393 -0x80,0x10,0x09,0x00,
78394 -0x21,0x10,0x49,0x00,
78395 -0x80,0x30,0x02,0x00,
78396 -0x8C,0x23,0x00,0x0C,
78397 -0x21,0x28,0x00,0x00,
78398 -0x42,0xB0,0x02,0x3C,
78399 -0x22,0x00,0x03,0x24,
78400 -0x03,0x00,0x42,0x34,
78401 -0x00,0x00,0x43,0xA0,
78402 -0x00,0x00,0x87,0x8E,
78403 -0x05,0x00,0x05,0x24,
78404 -0x24,0x00,0x64,0x26,
78405 -0xFF,0x3F,0xE7,0x30,
78406 -0xDC,0xFF,0xE7,0x24,
78407 -0x55,0x1D,0x00,0x0C,
78408 -0x20,0x00,0xA6,0x27,
78409 -0x2E,0x00,0x40,0x10,
78410 -0x21,0x28,0x40,0x00,
78411 -0xF4,0x5E,0xC2,0x92,
78412 -0x02,0x00,0x03,0x24,
78413 -0xFF,0x00,0x42,0x30,
78414 -0x45,0x01,0x43,0x10,
78415 -0x02,0x80,0x07,0x3C,
78416 -0x02,0x00,0xA2,0x90,
78417 -0x00,0x00,0x00,0x00,
78418 -0x08,0x00,0x40,0x14,
78419 -0x00,0x00,0x00,0x00,
78420 -0x04,0x00,0xA3,0x90,
78421 -0x00,0x00,0x00,0x00,
78422 -0x01,0x00,0x62,0x30,
78423 -0x04,0x00,0x40,0x10,
78424 -0x02,0x80,0x02,0x3C,
78425 -0x01,0x00,0x1E,0x24,
78426 -0x12,0x5F,0x5E,0xA0,
78427 -0x04,0x00,0xA3,0x90,
78428 -0x20,0x00,0xA7,0x8F,
78429 -0x00,0x00,0x00,0x00,
78430 -0x04,0x00,0xE2,0x28,
78431 -0x18,0x00,0x40,0x14,
78432 -0xFE,0x00,0x66,0x30,
78433 -0x02,0x80,0x02,0x3C,
78434 -0x30,0x1F,0x43,0x24,
78435 -0x50,0x39,0x64,0x94,
78436 -0xC0,0x10,0x06,0x00,
78437 -0x2A,0x10,0x82,0x00,
78438 -0x12,0x00,0x40,0x14,
78439 -0x02,0x80,0x03,0x3C,
78440 -0x21,0x10,0xC7,0x00,
78441 -0xFD,0xFF,0x42,0x24,
78442 -0xC0,0x10,0x02,0x00,
78443 -0x2A,0x10,0x44,0x00,
78444 -0x0C,0x00,0x40,0x14,
78445 -0xC2,0x10,0x04,0x00,
78446 -0x23,0x30,0x46,0x00,
78447 -0x21,0x18,0xA6,0x00,
78448 -0x05,0x00,0x62,0x90,
78449 -0x07,0x00,0x84,0x30,
78450 -0x01,0x00,0x03,0x24,
78451 -0x07,0x10,0x82,0x00,
78452 -0x24,0x00,0xA4,0x8F,
78453 -0x01,0x00,0x42,0x30,
78454 -0x0B,0x20,0x62,0x00,
78455 -0x24,0x00,0xA4,0xAF,
78456 -0x02,0x80,0x03,0x3C,
78457 -0x0E,0x5F,0x62,0x90,
78458 -0xEF,0xFF,0x03,0x24,
78459 -0x02,0x80,0x04,0x3C,
78460 -0x24,0x10,0x43,0x00,
78461 -0x0E,0x5F,0x82,0xA0,
78462 -0xF4,0x5E,0xC3,0x92,
78463 -0x02,0x80,0x02,0x3C,
78464 -0x24,0xE9,0x42,0x24,
78465 -0xFF,0x00,0x63,0x30,
78466 -0x80,0x18,0x03,0x00,
78467 -0x21,0x18,0x62,0x00,
78468 -0x00,0x00,0x66,0x8C,
78469 -0x24,0x00,0xA5,0x8F,
78470 -0x09,0xF8,0xC0,0x00,
78471 -0x21,0x20,0xC0,0x03,
78472 -0x90,0x16,0x00,0x08,
78473 -0x00,0x00,0x00,0x00,
78474 -0x88,0x58,0xA5,0x26,
78475 -0x39,0x52,0x00,0x0C,
78476 -0x06,0x00,0x06,0x24,
78477 -0x33,0xFF,0x40,0x14,
78478 -0x02,0x80,0x04,0x3C,
78479 -0x06,0x00,0x02,0x24,
78480 -0x0A,0x3E,0x02,0xA2,
78481 -0xEC,0x38,0x00,0xAE,
78482 -0x00,0x00,0x84,0x8E,
78483 -0x0C,0x00,0x12,0x24,
78484 -0xFF,0x3F,0x82,0x30,
78485 -0xE8,0xFF,0x42,0x24,
78486 -0x2A,0x10,0x42,0x02,
78487 -0xA4,0x00,0x40,0x10,
78488 -0x21,0xA8,0x00,0x02,
78489 -0x7D,0x17,0x00,0x08,
78490 -0x21,0x80,0x72,0x02,
78491 -0x19,0x00,0x03,0x92,
78492 -0xFF,0x3F,0x82,0x30,
78493 -0xE8,0xFF,0x42,0x24,
78494 -0x21,0x18,0x72,0x00,
78495 -0x02,0x00,0x72,0x24,
78496 -0x2A,0x10,0x42,0x02,
78497 -0x9A,0x00,0x40,0x10,
78498 -0x21,0x80,0x72,0x02,
78499 -0x18,0x00,0x03,0x92,
78500 -0xDD,0x00,0x02,0x24,
78501 -0xF5,0xFF,0x62,0x14,
78502 -0x1A,0x00,0x11,0x26,
78503 -0x02,0x80,0x05,0x3C,
78504 -0xC4,0xDD,0xA5,0x24,
78505 -0x21,0x20,0x20,0x02,
78506 -0x39,0x52,0x00,0x0C,
78507 -0x03,0x00,0x06,0x24,
78508 -0x20,0x01,0x40,0x10,
78509 -0x02,0x80,0x05,0x3C,
78510 -0xC0,0xDD,0xA5,0x24,
78511 -0x21,0x20,0x20,0x02,
78512 -0x39,0x52,0x00,0x0C,
78513 -0x03,0x00,0x06,0x24,
78514 -0x1A,0x01,0x40,0x10,
78515 -0x02,0x80,0x05,0x3C,
78516 -0xBC,0xDD,0xA5,0x24,
78517 -0x21,0x20,0x20,0x02,
78518 -0x39,0x52,0x00,0x0C,
78519 -0x03,0x00,0x06,0x24,
78520 -0x0F,0x01,0x40,0x10,
78521 -0x02,0x80,0x05,0x3C,
78522 -0xB8,0xDD,0xA5,0x24,
78523 -0x21,0x20,0x20,0x02,
78524 -0x39,0x52,0x00,0x0C,
78525 -0x03,0x00,0x06,0x24,
78526 -0x09,0x01,0x40,0x10,
78527 -0x02,0x80,0x05,0x3C,
78528 -0xB4,0xDD,0xA5,0x24,
78529 -0x21,0x20,0x20,0x02,
78530 -0x39,0x52,0x00,0x0C,
78531 -0x03,0x00,0x06,0x24,
78532 -0x03,0x01,0x40,0x10,
78533 -0x02,0x80,0x05,0x3C,
78534 -0xAC,0xDD,0xA5,0x24,
78535 -0x21,0x20,0x20,0x02,
78536 -0x39,0x52,0x00,0x0C,
78537 -0x03,0x00,0x06,0x24,
78538 -0x64,0x01,0x40,0x10,
78539 -0x02,0x80,0x05,0x3C,
78540 -0xA8,0xDD,0xA5,0x24,
78541 -0x21,0x20,0x20,0x02,
78542 -0x39,0x52,0x00,0x0C,
78543 -0x03,0x00,0x06,0x24,
78544 -0x57,0x01,0x40,0x10,
78545 -0x02,0x80,0x05,0x3C,
78546 -0xB0,0xDD,0xA5,0x24,
78547 -0x21,0x20,0x20,0x02,
78548 -0x39,0x52,0x00,0x0C,
78549 -0x03,0x00,0x06,0x24,
78550 -0x4A,0x01,0x40,0x10,
78551 -0x02,0x80,0x05,0x3C,
78552 -0x21,0x20,0x20,0x02,
78553 -0x9C,0xDD,0xA5,0x24,
78554 -0x39,0x52,0x00,0x0C,
78555 -0x06,0x00,0x06,0x24,
78556 -0x3E,0x01,0x40,0x10,
78557 -0x02,0x80,0x02,0x3C,
78558 -0x00,0x00,0x84,0x8E,
78559 -0x75,0x17,0x00,0x08,
78560 -0x00,0x00,0x00,0x00,
78561 -0x92,0x10,0x00,0x0C,
78562 -0x21,0x20,0x80,0x02,
78563 -0x21,0x18,0x00,0x00,
78564 -0x54,0x00,0xBF,0x8F,
78565 -0x50,0x00,0xBE,0x8F,
78566 -0x4C,0x00,0xB7,0x8F,
78567 -0x48,0x00,0xB6,0x8F,
78568 -0x44,0x00,0xB5,0x8F,
78569 -0x40,0x00,0xB4,0x8F,
78570 -0x3C,0x00,0xB3,0x8F,
78571 -0x38,0x00,0xB2,0x8F,
78572 -0x34,0x00,0xB1,0x8F,
78573 -0x30,0x00,0xB0,0x8F,
78574 -0x21,0x10,0x60,0x00,
78575 -0x08,0x00,0xE0,0x03,
78576 -0x58,0x00,0xBD,0x27,
78577 -0x00,0x00,0x87,0x8E,
78578 -0x24,0x00,0x64,0x26,
78579 -0xFF,0x3F,0xE7,0x30,
78580 -0xDC,0xFF,0xE7,0x24,
78581 -0x55,0x1D,0x00,0x0C,
78582 -0x20,0x00,0xA6,0x27,
78583 -0xBE,0xFE,0x40,0x10,
78584 -0x21,0x28,0x40,0x00,
78585 -0x20,0x00,0xA7,0x8F,
78586 -0x04,0x00,0x42,0x90,
78587 -0x04,0x00,0xE3,0x28,
78588 -0xB9,0xFE,0x60,0x14,
78589 -0xFE,0x00,0x46,0x30,
78590 -0x50,0x39,0x04,0x96,
78591 -0xC0,0x10,0x06,0x00,
78592 -0x2A,0x10,0x82,0x00,
78593 -0xB4,0xFE,0x40,0x14,
78594 -0x21,0x10,0xC7,0x00,
78595 -0xFD,0xFF,0x42,0x24,
78596 -0xC0,0x10,0x02,0x00,
78597 -0x2A,0x10,0x44,0x00,
78598 -0xAF,0xFE,0x40,0x14,
78599 -0xC2,0x10,0x04,0x00,
78600 -0x23,0x30,0x46,0x00,
78601 -0x21,0x18,0xA6,0x00,
78602 -0x05,0x00,0x62,0x90,
78603 -0x07,0x00,0x84,0x30,
78604 -0x07,0x10,0x82,0x00,
78605 -0x01,0x00,0x42,0x30,
78606 -0xA7,0xFE,0x40,0x10,
78607 -0x00,0x00,0x00,0x00,
78608 -0xCD,0x4E,0x00,0x0C,
78609 -0x21,0x20,0x00,0x00,
78610 -0x90,0x16,0x00,0x08,
78611 -0x00,0x00,0x00,0x00,
78612 -0x88,0x58,0xA5,0x26,
78613 -0x10,0x00,0x64,0x26,
78614 -0x39,0x52,0x00,0x0C,
78615 -0x06,0x00,0x06,0x24,
78616 -0xCB,0xFF,0x40,0x14,
78617 -0x21,0x18,0x00,0x00,
78618 -0xB0,0x1B,0x43,0x96,
78619 -0x00,0x00,0x00,0x00,
78620 -0x01,0x00,0x62,0x30,
78621 -0x0D,0x00,0x40,0x14,
78622 -0x04,0x00,0x62,0x30,
78623 -0x83,0x00,0x40,0x14,
78624 -0x02,0x80,0x03,0x3C,
78625 -0x30,0x1F,0x70,0x24,
78626 -0x0B,0x3E,0x02,0x92,
78627 -0x00,0x00,0x00,0x00,
78628 -0x01,0x00,0x44,0x24,
78629 -0xFF,0x00,0x83,0x30,
78630 -0x0B,0x00,0x02,0x24,
78631 -0x45,0x00,0x62,0x10,
78632 -0x21,0x18,0x00,0x00,
78633 -0xA1,0x16,0x00,0x08,
78634 -0x0B,0x3E,0x04,0xA2,
78635 -0x00,0x60,0x03,0x40,
78636 -0x01,0x00,0x61,0x34,
78637 -0x01,0x00,0x21,0x38,
78638 -0x00,0x60,0x81,0x40,
78639 -0xD4,0x1E,0x42,0x8E,
78640 -0x00,0x00,0x00,0x00,
78641 -0x01,0x00,0x42,0x24,
78642 -0xD4,0x1E,0x42,0xAE,
78643 -0x00,0x60,0x83,0x40,
78644 -0xFB,0x17,0x00,0x08,
78645 -0x02,0x80,0x03,0x3C,
78646 -0x15,0x5F,0x62,0x91,
78647 -0x00,0x00,0x00,0x00,
78648 -0xFF,0xFF,0x42,0x24,
78649 -0x15,0x5F,0x62,0xA1,
78650 -0xBD,0x16,0x00,0x08,
78651 -0x02,0x80,0x02,0x3C,
78652 -0x02,0x80,0x04,0x3C,
78653 -0xFC,0xE2,0x84,0x24,
78654 -0x2F,0x55,0x00,0x0C,
78655 -0x00,0x00,0x00,0x00,
78656 -0x02,0x80,0x02,0x3C,
78657 -0xE6,0x5D,0x46,0x90,
78658 -0x01,0x00,0x03,0x24,
78659 -0x10,0x00,0xC3,0x10,
78660 -0x02,0x80,0x03,0x3C,
78661 -0x53,0x16,0x00,0x0C,
78662 -0x00,0x00,0x00,0x00,
78663 -0x54,0x00,0xBF,0x8F,
78664 -0x50,0x00,0xBE,0x8F,
78665 -0x4C,0x00,0xB7,0x8F,
78666 -0x48,0x00,0xB6,0x8F,
78667 -0x44,0x00,0xB5,0x8F,
78668 -0x40,0x00,0xB4,0x8F,
78669 -0x3C,0x00,0xB3,0x8F,
78670 -0x38,0x00,0xB2,0x8F,
78671 -0x34,0x00,0xB1,0x8F,
78672 -0x30,0x00,0xB0,0x8F,
78673 -0x21,0x10,0x60,0x00,
78674 -0x08,0x00,0xE0,0x03,
78675 -0x58,0x00,0xBD,0x27,
78676 -0x30,0x1F,0x64,0x24,
78677 -0x0A,0x3E,0x83,0x90,
78678 -0x03,0x00,0x02,0x24,
78679 -0x62,0x00,0x62,0x10,
78680 -0x00,0x00,0x00,0x00,
78681 -0x91,0x3E,0x86,0xA0,
78682 -0x53,0x16,0x00,0x0C,
78683 -0x90,0x3E,0x80,0xA0,
78684 -0x21,0x18,0x00,0x08,
78685 -0x00,0x00,0x00,0x00,
78686 -0x15,0x5F,0x62,0x91,
78687 -0x00,0x00,0x00,0x00,
78688 -0x05,0x00,0x40,0x14,
78689 -0x00,0x00,0x00,0x00,
78690 -0x15,0x5F,0x62,0x91,
78691 -0x00,0x00,0x00,0x00,
78692 -0x01,0x00,0x42,0x24,
78693 -0x15,0x5F,0x62,0xA1,
78694 -0x00,0x00,0xE2,0x92,
78695 -0xFB,0xFF,0x03,0x24,
78696 -0x01,0x00,0x06,0x24,
78697 -0x24,0x10,0x43,0x00,
78698 -0x00,0x00,0xE2,0xA2,
78699 -0x11,0x17,0x00,0x08,
78700 -0x00,0x00,0x00,0x00,
78701 -0x02,0x80,0x02,0x3C,
78702 -0xE6,0x5D,0x43,0x90,
78703 -0x01,0x00,0x11,0x24,
78704 -0x53,0x00,0x71,0x10,
78705 -0x0B,0x3E,0x00,0xA2,
78706 -0x02,0x80,0x02,0x3C,
78707 -0xEA,0x5D,0x44,0x90,
78708 -0x02,0x00,0x03,0x24,
78709 -0x6E,0xFF,0x83,0x14,
78710 -0x21,0x18,0x00,0x00,
78711 -0x00,0x00,0x87,0x8E,
78712 -0x24,0x00,0x64,0x26,
78713 -0x2A,0x00,0x05,0x24,
78714 -0xFF,0x3F,0xE7,0x30,
78715 -0xDC,0xFF,0xE7,0x24,
78716 -0x55,0x1D,0x00,0x0C,
78717 -0x20,0x00,0xA6,0x27,
78718 -0x65,0xFF,0x40,0x10,
78719 -0x21,0x18,0x00,0x00,
78720 -0x02,0x00,0x43,0x90,
78721 -0x00,0x00,0x00,0x00,
78722 -0x02,0x00,0x62,0x30,
78723 -0x4D,0x00,0x40,0x10,
78724 -0x02,0x80,0x04,0x3C,
78725 -0x01,0x00,0x62,0x30,
78726 -0x4B,0x00,0x40,0x14,
78727 -0x30,0x1F,0x85,0x24,
78728 -0x02,0x80,0x02,0x3C,
78729 -0xEB,0x5D,0x43,0x90,
78730 -0x00,0x00,0x00,0x00,
78731 -0xAA,0x00,0x71,0x10,
78732 -0x00,0x00,0x00,0x00,
78733 -0x10,0x23,0x02,0x8E,
78734 -0xFF,0xEF,0x03,0x24,
78735 -0x00,0x08,0x42,0x34,
78736 -0x24,0x10,0x43,0x00,
78737 -0x10,0x23,0x02,0xAE,
78738 -0xBE,0x17,0x00,0x08,
78739 -0x21,0x18,0x00,0x00,
78740 -0x03,0x00,0xA2,0x90,
78741 -0x02,0x80,0x04,0x3C,
78742 -0x10,0x5F,0xE2,0xA0,
78743 -0x02,0x00,0xA3,0x90,
78744 -0x21,0x30,0x80,0x00,
78745 -0x11,0x5F,0x83,0xA0,
78746 -0x11,0x5F,0x82,0x90,
78747 -0x00,0x00,0x00,0x00,
78748 -0x22,0x00,0x40,0x14,
78749 -0x00,0x00,0x00,0x00,
78750 -0x10,0x5F,0xE2,0x90,
78751 -0x00,0x00,0x00,0x00,
78752 -0x11,0x5F,0xC2,0xA0,
78753 -0x2A,0x17,0x00,0x08,
78754 -0x00,0x00,0x00,0x00,
78755 -0x0A,0x00,0x76,0x26,
78756 -0x3B,0x51,0x00,0x0C,
78757 -0x21,0x20,0xC0,0x02,
78758 -0x20,0x00,0x10,0x24,
78759 -0x32,0x00,0x50,0x10,
78760 -0x21,0xA8,0x40,0x00,
78761 -0x00,0x60,0x05,0x40,
78762 -0x01,0x00,0xA1,0x34,
78763 -0x01,0x00,0x21,0x38,
78764 -0x00,0x60,0x81,0x40,
78765 -0x80,0x18,0x15,0x00,
78766 -0x21,0x18,0x75,0x00,
78767 -0x02,0x80,0x02,0x3C,
78768 -0x30,0x1F,0x44,0x24,
78769 -0xC0,0x18,0x03,0x00,
78770 -0x21,0x18,0x64,0x00,
78771 -0x0C,0x1E,0x62,0x8C,
78772 -0x00,0x00,0x00,0x00,
78773 -0x01,0x00,0x42,0x24,
78774 -0x0C,0x1E,0x62,0xAC,
78775 -0x00,0x60,0x85,0x40,
78776 -0xBE,0x17,0x00,0x08,
78777 -0x21,0x18,0x00,0x00,
78778 -0x90,0x3E,0x86,0xA0,
78779 -0x53,0x16,0x00,0x0C,
78780 -0x91,0x3E,0x80,0xA0,
78781 -0x21,0x18,0x00,0x08,
78782 -0x00,0x00,0x00,0x00,
78783 -0x11,0x5F,0x82,0x90,
78784 -0x00,0x00,0x00,0x00,
78785 -0x11,0x5F,0xC2,0xA0,
78786 -0x2A,0x17,0x00,0x08,
78787 -0x00,0x00,0x00,0x00,
78788 -0x64,0x12,0x00,0x0C,
78789 -0x00,0x00,0x00,0x00,
78790 -0x4D,0x18,0x00,0x08,
78791 -0x02,0x80,0x02,0x3C,
78792 -0x02,0x80,0x04,0x3C,
78793 -0x01,0x00,0x02,0x24,
78794 -0x90,0xE2,0x84,0x24,
78795 -0x18,0x18,0x00,0x08,
78796 -0x0A,0x3E,0xA2,0xA2,
78797 -0x02,0x80,0x04,0x3C,
78798 -0x78,0xE2,0x84,0x24,
78799 -0x18,0x18,0x00,0x08,
78800 -0x0A,0x3E,0xA0,0xA2,
78801 -0x30,0x1F,0x85,0x24,
78802 -0x10,0x23,0xA2,0x8C,
78803 -0xFF,0xEF,0x03,0x24,
78804 -0xFF,0xF7,0x04,0x24,
78805 -0x24,0x10,0x43,0x00,
78806 -0x24,0x10,0x44,0x00,
78807 -0x21,0x18,0x00,0x00,
78808 -0xBE,0x17,0x00,0x08,
78809 -0x10,0x23,0xA2,0xAC,
78810 -0xFF,0xFF,0x04,0x24,
78811 -0xE3,0x50,0x00,0x0C,
78812 -0x21,0x28,0xC0,0x02,
78813 -0xCB,0xFF,0x50,0x10,
78814 -0x21,0xA8,0x40,0x00,
78815 -0x00,0x00,0x87,0x8E,
78816 -0x24,0x00,0x70,0x26,
78817 -0x21,0x20,0x00,0x02,
78818 -0xFF,0x3F,0xE7,0x30,
78819 -0xDC,0xFF,0xE7,0x24,
78820 -0x01,0x00,0x05,0x24,
78821 -0x55,0x1D,0x00,0x0C,
78822 -0x20,0x00,0xA6,0x27,
78823 -0xDF,0xFD,0x40,0x10,
78824 -0x21,0x18,0x00,0x00,
78825 -0x20,0x00,0xA6,0x8F,
78826 -0x02,0x00,0x45,0x24,
78827 -0x10,0x52,0x00,0x0C,
78828 -0x10,0x00,0xA4,0x27,
78829 -0x00,0x00,0x87,0x8E,
78830 -0x21,0x20,0x00,0x02,
78831 -0x32,0x00,0x05,0x24,
78832 -0xFF,0x3F,0xE7,0x30,
78833 -0xDC,0xFF,0xE7,0x24,
78834 -0x20,0x00,0xB1,0x8F,
78835 -0x55,0x1D,0x00,0x0C,
78836 -0x20,0x00,0xA6,0x27,
78837 -0x09,0x00,0x40,0x10,
78838 -0x00,0x00,0x00,0x00,
78839 -0x20,0x00,0xA6,0x8F,
78840 -0x10,0x00,0xA4,0x27,
78841 -0x21,0x20,0x91,0x00,
78842 -0x10,0x52,0x00,0x0C,
78843 -0x02,0x00,0x45,0x24,
78844 -0x20,0x00,0xA3,0x8F,
78845 -0x00,0x00,0x00,0x00,
78846 -0x21,0x88,0x23,0x02,
78847 -0x10,0x00,0xA4,0x27,
78848 -0x7D,0x50,0x00,0x0C,
78849 -0x21,0x28,0x20,0x02,
78850 -0x0F,0x00,0x42,0x30,
78851 -0x00,0x81,0x15,0x00,
78852 -0x21,0x28,0x20,0x02,
78853 -0x10,0x00,0xA4,0x27,
78854 -0x25,0x80,0x02,0x02,
78855 -0xC2,0x50,0x00,0x0C,
78856 -0xFF,0xFF,0x10,0x32,
78857 -0x02,0x80,0x04,0x3C,
78858 -0x21,0x88,0x40,0x00,
78859 -0x21,0x38,0x40,0x00,
78860 -0x21,0x28,0xA0,0x02,
78861 -0x21,0x30,0x00,0x02,
78862 -0x2F,0x55,0x00,0x0C,
78863 -0x10,0xE3,0x84,0x24,
78864 -0x21,0x20,0x00,0x02,
78865 -0xC1,0x5B,0x00,0x0C,
78866 -0x21,0x28,0x20,0x02,
78867 -0x8E,0x3E,0x42,0x92,
78868 -0x21,0x20,0xC0,0x02,
78869 -0x21,0x28,0xA0,0x02,
78870 -0x01,0x00,0x42,0x24,
78871 -0x9C,0x0E,0x00,0x0C,
78872 -0x8E,0x3E,0x42,0xA2,
78873 -0x83,0x18,0x00,0x08,
78874 -0x00,0x00,0x00,0x00,
78875 -0x02,0x80,0x04,0x3C,
78876 -0x30,0x1F,0x43,0x24,
78877 -0xE4,0xE2,0x84,0x24,
78878 -0x05,0x00,0x02,0x24,
78879 -0x18,0x18,0x00,0x08,
78880 -0x0A,0x3E,0x62,0xA0,
78881 -0x02,0x80,0x02,0x3C,
78882 -0x02,0x80,0x04,0x3C,
78883 -0x30,0x1F,0x43,0x24,
78884 -0xD0,0xE2,0x84,0x24,
78885 -0x02,0x00,0x02,0x24,
78886 -0x18,0x18,0x00,0x08,
78887 -0x0A,0x3E,0x62,0xA0,
78888 -0x02,0x80,0x02,0x3C,
78889 -0x02,0x80,0x04,0x3C,
78890 -0x30,0x1F,0x43,0x24,
78891 -0xBC,0xE2,0x84,0x24,
78892 -0x04,0x00,0x02,0x24,
78893 -0x18,0x18,0x00,0x08,
78894 -0x0A,0x3E,0x62,0xA0,
78895 -0x02,0x80,0x02,0x3C,
78896 -0x02,0x80,0x04,0x3C,
78897 -0x30,0x1F,0x43,0x24,
78898 -0xA8,0xE2,0x84,0x24,
78899 -0x03,0x00,0x02,0x24,
78900 -0x18,0x18,0x00,0x08,
78901 -0x0A,0x3E,0x62,0xA0,
78902 -0x10,0x23,0x02,0x8E,
78903 -0xFF,0xF7,0x03,0x24,
78904 -0x24,0x10,0x43,0x00,
78905 -0x00,0x10,0x42,0x34,
78906 -0x6C,0x18,0x00,0x08,
78907 -0x10,0x23,0x02,0xAE,
78908 -0xE8,0xFF,0xBD,0x27,
78909 -0x10,0x00,0xB0,0xAF,
78910 -0x02,0x80,0x10,0x3C,
78911 -0x30,0x1F,0x02,0x26,
78912 -0x14,0x00,0xBF,0xAF,
78913 -0xB0,0x1B,0x43,0x94,
78914 -0x21,0x28,0x00,0x00,
78915 -0x00,0x01,0x62,0x30,
78916 -0x03,0x00,0x40,0x10,
78917 -0x01,0x00,0x64,0x30,
78918 -0x06,0x00,0x80,0x14,
78919 -0x00,0x10,0x62,0x30,
78920 -0x14,0x00,0xBF,0x8F,
78921 -0x10,0x00,0xB0,0x8F,
78922 -0x21,0x10,0xA0,0x00,
78923 -0x08,0x00,0xE0,0x03,
78924 -0x18,0x00,0xBD,0x27,
78925 -0x08,0x00,0x40,0x14,
78926 -0x02,0x00,0x03,0x3C,
78927 -0x02,0x80,0x02,0x3C,
78928 -0xF6,0x5E,0x43,0x90,
78929 -0x0C,0x00,0x02,0x24,
78930 -0x0F,0x00,0x63,0x30,
78931 -0x0A,0x00,0x62,0x10,
78932 -0x21,0x20,0x00,0x00,
78933 -0x02,0x00,0x03,0x3C,
78934 -0x30,0x1F,0x04,0x26,
78935 -0x20,0xBF,0x63,0x34,
78936 -0x08,0x39,0x83,0xAC,
78937 -0x14,0x00,0xBF,0x8F,
78938 -0x10,0x00,0xB0,0x8F,
78939 -0x21,0x10,0xA0,0x00,
78940 -0x08,0x00,0xE0,0x03,
78941 -0x18,0x00,0xBD,0x27,
78942 -0xCD,0x4E,0x00,0x0C,
78943 -0x00,0x00,0x00,0x00,
78944 -0x02,0x00,0x03,0x3C,
78945 -0x30,0x1F,0x04,0x26,
78946 -0x20,0xBF,0x63,0x34,
78947 -0x33,0x19,0x00,0x08,
78948 -0x08,0x39,0x83,0xAC,
78949 -0xE0,0xFF,0xBD,0x27,
78950 -0x14,0x00,0xB1,0xAF,
78951 -0x02,0x80,0x11,0x3C,
78952 -0x1C,0x00,0xBF,0xAF,
78953 -0x18,0x00,0xB2,0xAF,
78954 -0x10,0x00,0xB0,0xAF,
78955 -0x30,0x1F,0x25,0x26,
78956 -0x6C,0x3B,0xA2,0x8C,
78957 -0x00,0x10,0x03,0x3C,
78958 -0x24,0x10,0x43,0x00,
78959 -0x21,0x00,0x40,0x10,
78960 -0x00,0x00,0x00,0x00,
78961 -0x9B,0x3B,0xA6,0x90,
78962 -0x9C,0x3B,0xA4,0x90,
78963 -0xFF,0x00,0xC3,0x30,
78964 -0x40,0x10,0x03,0x00,
78965 -0x21,0x10,0x43,0x00,
78966 -0x80,0x10,0x02,0x00,
78967 -0x21,0x10,0x43,0x00,
78968 -0x01,0x00,0x84,0x24,
78969 -0x80,0x10,0x02,0x00,
78970 -0xFF,0x00,0x83,0x30,
78971 -0x21,0x10,0x45,0x00,
78972 -0x21,0x10,0x43,0x00,
78973 -0x9C,0x3B,0xA4,0xA0,
78974 -0x38,0x3B,0x43,0x90,
78975 -0x00,0x00,0x00,0x00,
78976 -0x21,0x00,0x60,0x10,
78977 -0x01,0x00,0xC2,0x24,
78978 -0xFF,0x00,0xC2,0x30,
78979 -0x22,0x00,0x40,0x14,
78980 -0x30,0x1F,0x30,0x26,
78981 -0x9C,0x3B,0xA2,0x90,
78982 -0x00,0x00,0x00,0x00,
78983 -0x21,0x10,0x45,0x00,
78984 -0x38,0x3B,0x43,0x90,
78985 -0x00,0x00,0x00,0x00,
78986 -0xFF,0x00,0x64,0x30,
78987 -0x1A,0x00,0x80,0x10,
78988 -0x00,0x00,0x00,0x00,
78989 -0x67,0x3B,0xA2,0x90,
78990 -0x30,0x3B,0xA3,0xA0,
78991 -0x4F,0x0C,0x00,0x0C,
78992 -0x31,0x3B,0xA2,0xA0,
78993 -0x30,0x1F,0x30,0x26,
78994 -0x70,0x3B,0x03,0x8E,
78995 -0x01,0x00,0x02,0x24,
78996 -0x7C,0x00,0x62,0x10,
78997 -0x00,0x00,0x00,0x00,
78998 -0x6C,0x3B,0x03,0x8E,
78999 -0x00,0x10,0x02,0x3C,
79000 -0x3C,0x00,0x04,0x24,
79001 -0x26,0x18,0x62,0x00,
79002 -0x98,0x38,0x04,0xAE,
79003 -0x6C,0x3B,0x03,0xAE,
79004 -0x1C,0x00,0xBF,0x8F,
79005 -0x18,0x00,0xB2,0x8F,
79006 -0x14,0x00,0xB1,0x8F,
79007 -0x10,0x00,0xB0,0x8F,
79008 -0x08,0x00,0xE0,0x03,
79009 -0x20,0x00,0xBD,0x27,
79010 -0x21,0x30,0x40,0x00,
79011 -0x9B,0x3B,0xA2,0xA0,
79012 -0x5C,0x19,0x00,0x08,
79013 -0x9C,0x3B,0xA0,0xA0,
79014 -0x99,0x3B,0x03,0x92,
79015 -0x9A,0x3B,0x02,0x92,
79016 -0xFF,0x00,0x64,0x30,
79017 -0x30,0x3B,0x03,0xA2,
79018 -0x4F,0x0C,0x00,0x0C,
79019 -0x31,0x3B,0x02,0xA2,
79020 -0xB0,0x1B,0x03,0x96,
79021 -0x00,0x00,0x00,0x00,
79022 -0x00,0x01,0x62,0x30,
79023 -0x09,0x00,0x40,0x10,
79024 -0x01,0x00,0x62,0x30,
79025 -0x08,0x00,0x40,0x10,
79026 -0x30,0x1F,0x30,0x26,
79027 -0x02,0x80,0x02,0x3C,
79028 -0xF6,0x5E,0x43,0x90,
79029 -0x0C,0x00,0x02,0x24,
79030 -0x0F,0x00,0x63,0x30,
79031 -0x61,0x00,0x62,0x10,
79032 -0x00,0x00,0x00,0x00,
79033 -0x30,0x1F,0x30,0x26,
79034 -0x9E,0x3B,0x04,0x96,
79035 -0xA0,0x3B,0x05,0x92,
79036 -0x12,0x0D,0x00,0x0C,
79037 -0x00,0x00,0x00,0x00,
79038 -0xC1,0x48,0x00,0x0C,
79039 -0x00,0x00,0x00,0x00,
79040 -0x6C,0x3B,0x00,0xAE,
79041 -0x00,0x60,0x12,0x40,
79042 -0x01,0x00,0x41,0x36,
79043 -0x01,0x00,0x21,0x38,
79044 -0x00,0x60,0x81,0x40,
79045 -0xB0,0x1B,0x02,0x96,
79046 -0x00,0x00,0x00,0x00,
79047 -0x00,0x01,0x42,0x30,
79048 -0x3F,0x00,0x40,0x10,
79049 -0x02,0x80,0x02,0x3C,
79050 -0xF4,0x5E,0x43,0x90,
79051 -0x00,0x00,0x00,0x00,
79052 -0x3C,0x00,0x60,0x10,
79053 -0x02,0x80,0x02,0x3C,
79054 -0x02,0x80,0x03,0x3C,
79055 -0xF6,0x5E,0x62,0x90,
79056 -0x00,0x00,0x00,0x00,
79057 -0x0F,0x00,0x42,0x30,
79058 -0x04,0x00,0x42,0x28,
79059 -0x41,0x00,0x40,0x14,
79060 -0x04,0x00,0x04,0x24,
79061 -0x02,0x80,0x03,0x3C,
79062 -0x15,0x5F,0x62,0x90,
79063 -0x00,0x00,0x00,0x00,
79064 -0x05,0x00,0x40,0x14,
79065 -0x00,0x00,0x00,0x00,
79066 -0x15,0x5F,0x62,0x90,
79067 -0x00,0x00,0x00,0x00,
79068 -0x01,0x00,0x42,0x24,
79069 -0x15,0x5F,0x62,0xA0,
79070 -0x00,0x60,0x92,0x40,
79071 -0x25,0xB0,0x07,0x3C,
79072 -0x30,0x1F,0x30,0x26,
79073 -0xB0,0x1B,0x04,0x96,
79074 -0x48,0x00,0xE6,0x34,
79075 -0x00,0x00,0xC3,0x8C,
79076 -0xFF,0xEF,0x84,0x30,
79077 -0x80,0x00,0x02,0x3C,
79078 -0x25,0x18,0x62,0x00,
79079 -0x00,0x01,0x85,0x30,
79080 -0x00,0x00,0xC3,0xAC,
79081 -0x02,0x80,0x08,0x3C,
79082 -0x05,0x00,0xA0,0x10,
79083 -0xB0,0x1B,0x04,0xA6,
79084 -0x00,0x00,0xC2,0x8C,
79085 -0x04,0x00,0x03,0x3C,
79086 -0x25,0x10,0x43,0x00,
79087 -0x00,0x00,0xC2,0xAC,
79088 -0x30,0x1F,0x02,0x8D,
79089 -0xFF,0xF0,0x03,0x24,
79090 -0xA1,0x3B,0x05,0x92,
79091 -0x24,0x10,0x43,0x00,
79092 -0x00,0x01,0x42,0x34,
79093 -0x0F,0xFF,0x03,0x24,
79094 -0x24,0x10,0x43,0x00,
79095 -0x10,0x00,0x42,0x34,
79096 -0xF0,0xFF,0x03,0x24,
79097 -0x1C,0x00,0xBF,0x8F,
79098 -0x18,0x00,0xB2,0x8F,
79099 -0x14,0x00,0xB1,0x8F,
79100 -0x10,0x00,0xB0,0x8F,
79101 -0x24,0x10,0x43,0x00,
79102 -0x4C,0x00,0xE3,0x34,
79103 -0x01,0x00,0x42,0x34,
79104 -0x00,0x00,0x65,0xA0,
79105 -0x64,0x03,0xE4,0x34,
79106 -0x07,0x00,0x03,0x24,
79107 -0x20,0x00,0xBD,0x27,
79108 -0x30,0x1F,0x02,0xAD,
79109 -0x00,0x00,0x83,0xA0,
79110 -0x08,0x00,0xE0,0x03,
79111 -0x00,0x00,0x00,0x00,
79112 -0x02,0x80,0x02,0x3C,
79113 -0x15,0x5F,0x40,0xA0,
79114 -0x02,0x80,0x03,0x3C,
79115 -0xF5,0x5E,0x64,0x90,
79116 -0x01,0x00,0x05,0x24,
79117 -0x64,0x31,0x00,0x0C,
79118 -0xFF,0x00,0x84,0x30,
79119 -0xB8,0x19,0x00,0x08,
79120 -0x00,0x00,0x00,0x00,
79121 -0x13,0x0F,0x00,0x0C,
79122 -0x00,0x00,0x00,0x00,
79123 -0x70,0x19,0x00,0x08,
79124 -0x00,0x00,0x00,0x00,
79125 -0x64,0x31,0x00,0x0C,
79126 -0x01,0x00,0x05,0x24,
79127 -0xB0,0x19,0x00,0x08,
79128 -0x02,0x80,0x03,0x3C,
79129 -0xCD,0x4E,0x00,0x0C,
79130 -0x21,0x20,0x00,0x00,
79131 -0x94,0x19,0x00,0x08,
79132 -0x30,0x1F,0x30,0x26,
79133 -0x0C,0x00,0x82,0x8C,
79134 -0x00,0x00,0x00,0x00,
79135 -0x3F,0x00,0x42,0x30,
79136 -0x04,0x00,0x42,0x28,
79137 -0x17,0x00,0x40,0x10,
79138 -0x00,0x00,0x00,0x00,
79139 -0x25,0xB0,0x02,0x3C,
79140 -0x24,0x08,0x42,0x34,
79141 -0x00,0x00,0x43,0x8C,
79142 -0x00,0x00,0x00,0x00,
79143 -0x00,0x02,0x63,0x30,
79144 -0x15,0x00,0x60,0x14,
79145 -0x01,0x00,0x02,0x24,
79146 -0x05,0x00,0xA3,0x90,
79147 -0x00,0x00,0x00,0x00,
79148 -0x82,0x21,0x03,0x00,
79149 -0x28,0x00,0x82,0x10,
79150 -0xF5,0xFF,0x02,0x24,
79151 -0x02,0x00,0x82,0x28,
79152 -0x3B,0x00,0x40,0x14,
79153 -0x02,0x00,0x02,0x24,
79154 -0x2F,0x00,0x82,0x10,
79155 -0xE9,0xFF,0x02,0x24,
79156 -0x03,0x00,0x02,0x24,
79157 -0x24,0x00,0x82,0x10,
79158 -0x00,0x00,0x00,0x00,
79159 -0x08,0x00,0xE0,0x03,
79160 -0x05,0x00,0xC2,0x24,
79161 -0x04,0x00,0xA2,0x90,
79162 -0x00,0x00,0x00,0x00,
79163 -0x42,0x10,0x02,0x00,
79164 -0x08,0x00,0xE0,0x03,
79165 -0x96,0xFF,0x42,0x24,
79166 -0x05,0x00,0xA3,0x90,
79167 -0x00,0x00,0x00,0x00,
79168 -0x60,0x00,0x64,0x30,
79169 -0x42,0x21,0x04,0x00,
79170 -0x0F,0x00,0x82,0x10,
79171 -0x1F,0x00,0x62,0x30,
79172 -0x02,0x00,0x82,0x28,
79173 -0x1F,0x00,0x40,0x14,
79174 -0x02,0x00,0x02,0x24,
79175 -0x16,0x00,0x82,0x10,
79176 -0x1F,0x00,0x62,0x30,
79177 -0x03,0x00,0x02,0x24,
79178 -0xEC,0xFF,0x82,0x14,
79179 -0x00,0x00,0x00,0x00,
79180 -0x1F,0x00,0x62,0x30,
79181 -0x40,0x10,0x02,0x00,
79182 -0xDD,0xFF,0x03,0x24,
79183 -0x23,0x30,0x62,0x00,
79184 -0x08,0x00,0xE0,0x03,
79185 -0x05,0x00,0xC2,0x24,
79186 -0x40,0x10,0x02,0x00,
79187 -0xF5,0xFF,0x03,0x24,
79188 -0x2A,0x1A,0x00,0x08,
79189 -0x23,0x30,0x62,0x00,
79190 -0x3E,0x00,0x63,0x30,
79191 -0x23,0x30,0x43,0x00,
79192 -0x08,0x00,0xE0,0x03,
79193 -0x05,0x00,0xC2,0x24,
79194 -0x3E,0x00,0x63,0x30,
79195 -0xDD,0xFF,0x02,0x24,
79196 -0x32,0x1A,0x00,0x08,
79197 -0x23,0x30,0x43,0x00,
79198 -0x40,0x10,0x02,0x00,
79199 -0xE9,0xFF,0x03,0x24,
79200 -0x2A,0x1A,0x00,0x08,
79201 -0x23,0x30,0x62,0x00,
79202 -0x3E,0x00,0x63,0x30,
79203 -0x32,0x1A,0x00,0x08,
79204 -0x23,0x30,0x43,0x00,
79205 -0xD1,0xFF,0x80,0x14,
79206 -0x00,0x00,0x00,0x00,
79207 -0x1F,0x00,0x62,0x30,
79208 -0x40,0x10,0x02,0x00,
79209 -0xF8,0xFF,0x03,0x24,
79210 -0x2A,0x1A,0x00,0x08,
79211 -0x23,0x30,0x62,0x00,
79212 -0xCA,0xFF,0x80,0x14,
79213 -0x00,0x00,0x00,0x00,
79214 -0x3E,0x00,0x63,0x30,
79215 -0xF8,0xFF,0x02,0x24,
79216 -0x32,0x1A,0x00,0x08,
79217 -0x23,0x30,0x43,0x00,
79218 -0x63,0x00,0x82,0x24,
79219 -0x77,0x00,0x42,0x2C,
79220 -0x00,0x00,0x85,0x28,
79221 -0x04,0x00,0x40,0x10,
79222 -0x21,0x18,0x00,0x00,
79223 -0x64,0x00,0x82,0x24,
79224 -0x64,0x00,0x03,0x24,
79225 -0x0B,0x18,0x45,0x00,
79226 -0x08,0x00,0xE0,0x03,
79227 -0x21,0x10,0x60,0x00,
79228 -0x02,0x80,0x09,0x3C,
79229 -0x30,0x1F,0x28,0x25,
79230 -0x80,0x36,0x06,0x8D,
79231 -0xFF,0xFF,0x02,0x34,
79232 -0x3F,0x00,0xC2,0x10,
79233 -0x21,0x38,0x80,0x00,
79234 -0x2B,0x10,0xC7,0x00,
79235 -0x30,0x00,0x40,0x10,
79236 -0x02,0x19,0x06,0x00,
79237 -0x21,0x10,0xC7,0x00,
79238 -0x23,0x10,0x43,0x00,
79239 -0x10,0x00,0x46,0x24,
79240 -0x80,0x36,0x06,0xAD,
79241 -0x30,0x1F,0x26,0x25,
79242 -0x04,0x00,0xC4,0x8C,
79243 -0x84,0x36,0x02,0xAD,
79244 -0xFF,0xFF,0x02,0x34,
79245 -0x2F,0x00,0x82,0x10,
79246 -0x00,0x00,0x00,0x00,
79247 -0x2B,0x10,0x87,0x00,
79248 -0x1F,0x00,0x40,0x10,
79249 -0x02,0x19,0x04,0x00,
79250 -0x21,0x10,0x87,0x00,
79251 -0x23,0x10,0x43,0x00,
79252 -0x10,0x00,0x44,0x24,
79253 -0x04,0x00,0xC4,0xAC,
79254 -0x84,0x36,0xC2,0xAC,
79255 -0xC0,0x10,0x05,0x00,
79256 -0x21,0x10,0x45,0x00,
79257 -0x80,0x10,0x02,0x00,
79258 -0x21,0x10,0x45,0x00,
79259 -0x30,0x1F,0x23,0x25,
79260 -0x80,0x10,0x02,0x00,
79261 -0x21,0x28,0x43,0x00,
79262 -0x0C,0x24,0xA6,0x8C,
79263 -0x00,0x21,0x07,0x00,
79264 -0xFF,0xFF,0xC2,0x38,
79265 -0x0A,0x30,0x82,0x00,
79266 -0x2B,0x18,0xC7,0x00,
79267 -0x07,0x00,0x60,0x10,
79268 -0x21,0x10,0xC7,0x00,
79269 -0x02,0x19,0x06,0x00,
79270 -0x23,0x10,0x43,0x00,
79271 -0x10,0x00,0x46,0x24,
79272 -0x0C,0x24,0xA6,0xAC,
79273 -0x08,0x00,0xE0,0x03,
79274 -0x10,0x24,0xA2,0xAC,
79275 -0x02,0x19,0x06,0x00,
79276 -0x23,0x10,0x43,0x00,
79277 -0x0C,0x24,0xA2,0xAC,
79278 -0x08,0x00,0xE0,0x03,
79279 -0x10,0x24,0xA2,0xAC,
79280 -0x21,0x10,0x87,0x00,
79281 -0x23,0x10,0x43,0x00,
79282 -0x70,0x1A,0x00,0x08,
79283 -0x04,0x00,0xC2,0xAC,
79284 -0x21,0x10,0xC7,0x00,
79285 -0x30,0x1F,0x26,0x25,
79286 -0x04,0x00,0xC4,0x8C,
79287 -0x23,0x10,0x43,0x00,
79288 -0x80,0x36,0x02,0xAD,
79289 -0x84,0x36,0x02,0xAD,
79290 -0xFF,0xFF,0x02,0x34,
79291 -0xD4,0xFF,0x82,0x14,
79292 -0x2B,0x10,0x87,0x00,
79293 -0x00,0x21,0x07,0x00,
79294 -0x69,0x1A,0x00,0x08,
79295 -0x04,0x00,0xC4,0xAC,
79296 -0x00,0x31,0x04,0x00,
79297 -0x5C,0x1A,0x00,0x08,
79298 -0x80,0x36,0x06,0xAD,
79299 -0xA0,0xFF,0xBD,0x27,
79300 -0x54,0x00,0xB7,0xAF,
79301 -0x5C,0x00,0xBF,0xAF,
79302 -0x58,0x00,0xBE,0xAF,
79303 -0x50,0x00,0xB6,0xAF,
79304 -0x4C,0x00,0xB5,0xAF,
79305 -0x48,0x00,0xB4,0xAF,
79306 -0x44,0x00,0xB3,0xAF,
79307 -0x40,0x00,0xB2,0xAF,
79308 -0x3C,0x00,0xB1,0xAF,
79309 -0x38,0x00,0xB0,0xAF,
79310 -0x02,0x80,0x17,0x3C,
79311 -0x02,0x80,0x02,0x3C,
79312 -0x64,0x57,0x45,0x8C,
79313 -0x00,0x80,0x04,0x3C,
79314 -0x74,0x6A,0x83,0x24,
79315 -0x64,0x57,0x44,0x24,
79316 -0x25,0xB0,0x02,0x3C,
79317 -0x18,0x03,0x42,0x34,
79318 -0x00,0x00,0x43,0xAC,
79319 -0x7F,0x00,0xA4,0x10,
79320 -0x02,0x80,0x09,0x3C,
79321 -0x02,0x80,0x02,0x3C,
79322 -0x40,0xEB,0x29,0x25,
79323 -0x44,0xEB,0x42,0x24,
79324 -0x00,0x00,0x35,0x8D,
79325 -0x00,0x00,0x53,0x8C,
79326 -0x02,0x80,0x03,0x3C,
79327 -0x48,0xEB,0x63,0x24,
79328 -0x00,0x00,0x7E,0x8C,
79329 -0x34,0x38,0xB4,0x8E,
79330 -0x21,0x20,0x00,0x00,
79331 -0x21,0xB0,0x00,0x00,
79332 -0x08,0x00,0x82,0x8E,
79333 -0x00,0x00,0x00,0x00,
79334 -0x00,0x00,0x62,0xAE,
79335 -0x08,0x00,0x83,0x96,
79336 -0x02,0x80,0x02,0x3C,
79337 -0xB0,0x01,0x00,0x0C,
79338 -0x25,0x90,0x62,0x00,
79339 -0x00,0x60,0x01,0x40,
79340 -0x01,0x00,0x21,0x34,
79341 -0x01,0x00,0x21,0x38,
79342 -0x00,0x60,0x81,0x40,
79343 -0xAC,0x1B,0xA3,0x96,
79344 -0xD0,0x37,0xA2,0x8E,
79345 -0x00,0x00,0x00,0x00,
79346 -0x21,0x10,0x43,0x00,
79347 -0x00,0x00,0xC2,0xAF,
79348 -0x00,0x60,0x01,0x40,
79349 -0x01,0x00,0x21,0x34,
79350 -0x00,0x60,0x81,0x40,
79351 -0xF4,0x1A,0x00,0x08,
79352 -0x00,0x00,0x00,0x00,
79353 -0x17,0x00,0xC7,0x90,
79354 -0x16,0x00,0xC8,0x90,
79355 -0x32,0x3B,0xA2,0x96,
79356 -0xFF,0x00,0xE3,0x30,
79357 -0x00,0x1A,0x03,0x00,
79358 -0xFF,0x00,0x05,0x31,
79359 -0x25,0x18,0x65,0x00,
79360 -0xB7,0x00,0x43,0x10,
79361 -0x24,0xE3,0x24,0x25,
79362 -0xFF,0x00,0xE2,0x30,
79363 -0xFF,0x00,0x03,0x31,
79364 -0x00,0x12,0x02,0x00,
79365 -0x25,0x10,0x43,0x00,
79366 -0x32,0x3B,0xA2,0xA6,
79367 -0x01,0x00,0xC4,0x90,
79368 -0x00,0x00,0xC2,0x90,
79369 -0x00,0x22,0x04,0x00,
79370 -0x88,0x0C,0x00,0x0C,
79371 -0x25,0x20,0x82,0x00,
79372 -0x40,0x18,0x02,0x00,
79373 -0x21,0x18,0x62,0x00,
79374 -0x80,0x18,0x03,0x00,
79375 -0x94,0xDE,0xE2,0x26,
79376 -0x21,0x18,0x62,0x00,
79377 -0x08,0x00,0x62,0x8C,
79378 -0x00,0x00,0x00,0x00,
79379 -0x09,0xF8,0x40,0x00,
79380 -0x21,0x20,0x20,0x02,
79381 -0x0C,0x00,0x82,0x8E,
79382 -0x00,0x00,0x00,0x00,
79383 -0x2B,0x10,0xC2,0x02,
79384 -0x2C,0x00,0x40,0x10,
79385 -0x00,0x00,0x00,0x00,
79386 -0x00,0x00,0x42,0x8E,
79387 -0x21,0x88,0x40,0x02,
79388 -0x42,0x1B,0x02,0x00,
79389 -0x78,0x00,0x63,0x30,
79390 -0x02,0x26,0x02,0x00,
79391 -0xFF,0x3F,0x42,0x30,
79392 -0x21,0x10,0x43,0x00,
79393 -0x03,0x00,0x84,0x30,
79394 -0x21,0x10,0x44,0x00,
79395 -0x18,0x00,0x42,0x24,
79396 -0xFF,0xFF,0x50,0x30,
79397 -0x7F,0x00,0x02,0x32,
79398 -0x80,0x00,0x03,0x26,
79399 -0x00,0x00,0x70,0xAE,
79400 -0x02,0x00,0x40,0x10,
79401 -0x80,0xFF,0x05,0x32,
79402 -0x80,0xFF,0x65,0x30,
79403 -0x00,0x00,0x65,0xAE,
79404 -0x02,0x00,0x22,0x96,
79405 -0x21,0x18,0xC5,0x02,
79406 -0xFF,0xFF,0x76,0x30,
79407 -0x0F,0x00,0x42,0x30,
79408 -0x00,0x00,0x62,0xAE,
79409 -0x00,0x00,0x23,0x8E,
79410 -0x21,0x90,0x45,0x02,
79411 -0x42,0x13,0x03,0x00,
79412 -0x78,0x00,0x42,0x30,
79413 -0x02,0x1E,0x03,0x00,
79414 -0x21,0x10,0x51,0x00,
79415 -0x03,0x00,0x63,0x30,
79416 -0x21,0x10,0x43,0x00,
79417 -0x18,0x00,0x46,0x24,
79418 -0x00,0x00,0x66,0xAE,
79419 -0x01,0x00,0xC2,0x90,
79420 -0x00,0x00,0x00,0x00,
79421 -0x00,0x12,0x02,0x00,
79422 -0x00,0x08,0x42,0x30,
79423 -0xB9,0xFF,0x40,0x14,
79424 -0x02,0x80,0x09,0x3C,
79425 -0x16,0x00,0xC8,0x90,
79426 -0x17,0x00,0xC7,0x90,
79427 -0xDD,0x1A,0x00,0x08,
79428 -0xFF,0x00,0xE2,0x30,
79429 -0x00,0x60,0x10,0x40,
79430 -0x01,0x00,0x01,0x36,
79431 -0x01,0x00,0x21,0x38,
79432 -0x00,0x60,0x81,0x40,
79433 -0x04,0x00,0x83,0x8E,
79434 -0x00,0x00,0x82,0x8E,
79435 -0x21,0x20,0x80,0x02,
79436 -0x00,0x00,0x62,0xAC,
79437 -0x04,0x00,0x43,0xAC,
79438 -0x00,0x00,0x94,0xAE,
79439 -0x3D,0x24,0x00,0x0C,
79440 -0x04,0x00,0x94,0xAE,
79441 -0x00,0x60,0x90,0x40,
79442 -0x02,0x80,0x02,0x3C,
79443 -0x64,0x57,0x43,0x8C,
79444 -0x64,0x57,0x42,0x24,
79445 -0x8B,0xFF,0x62,0x14,
79446 -0x00,0x00,0x00,0x00,
79447 -0x02,0x80,0x03,0x3C,
79448 -0x40,0xEB,0x63,0x24,
79449 -0x00,0x00,0x71,0x8C,
79450 -0x25,0xB0,0x10,0x3C,
79451 -0x04,0x01,0x02,0x36,
79452 -0x00,0x00,0x43,0x8C,
79453 -0xE8,0x37,0x27,0x8E,
79454 -0x00,0x00,0x00,0x00,
79455 -0xC8,0x00,0xE3,0x10,
79456 -0xEC,0x37,0x23,0xAE,
79457 -0x2B,0x10,0x67,0x00,
79458 -0xD2,0x00,0x40,0x14,
79459 -0x2B,0x10,0xE3,0x00,
79460 -0x08,0x01,0x40,0x14,
79461 -0x02,0x80,0x09,0x3C,
79462 -0x30,0x1F,0x24,0x25,
79463 -0xBC,0x37,0x83,0x94,
79464 -0x02,0x80,0x02,0x3C,
79465 -0x21,0x80,0x00,0x00,
79466 -0x2F,0x00,0xC0,0x1A,
79467 -0x25,0xA8,0x62,0x00,
79468 -0x21,0x98,0x80,0x00,
79469 -0x21,0x90,0x00,0x00,
79470 -0x01,0x00,0x1E,0x24,
79471 -0x21,0x88,0x55,0x02,
79472 -0x00,0x00,0x22,0x8E,
79473 -0x98,0x3E,0x63,0x8E,
79474 -0xFF,0x3F,0x42,0x30,
79475 -0x21,0x18,0x62,0x00,
79476 -0x98,0x3E,0x63,0xAE,
79477 -0x00,0x60,0x04,0x40,
79478 -0x01,0x00,0x81,0x34,
79479 -0x01,0x00,0x21,0x38,
79480 -0x00,0x60,0x81,0x40,
79481 -0xD4,0x1E,0x62,0x8E,
79482 -0x00,0x00,0x00,0x00,
79483 -0x01,0x00,0x42,0x24,
79484 -0xD4,0x1E,0x62,0xAE,
79485 -0x00,0x60,0x84,0x40,
79486 -0x04,0x00,0x22,0x8E,
79487 -0x02,0x00,0x03,0x24,
79488 -0x02,0x17,0x02,0x00,
79489 -0x03,0x00,0x42,0x30,
79490 -0x39,0x00,0x43,0x10,
79491 -0x02,0x80,0x03,0x3C,
79492 -0x21,0x10,0x55,0x02,
79493 -0x00,0x00,0x43,0x8C,
79494 -0x00,0x00,0x00,0x00,
79495 -0x08,0x00,0x60,0x10,
79496 -0x01,0x00,0x02,0x26,
79497 -0x04,0x00,0x22,0x8E,
79498 -0x00,0xF0,0x03,0x3C,
79499 -0x00,0x20,0x04,0x3C,
79500 -0x24,0x10,0x43,0x00,
79501 -0x10,0x00,0x44,0x10,
79502 -0x02,0x80,0x09,0x3C,
79503 -0x06,0x00,0x02,0x26,
79504 -0x00,0x00,0x23,0x8E,
79505 -0xFF,0xFF,0x50,0x30,
79506 -0x82,0x16,0x03,0x00,
79507 -0x01,0x00,0x42,0x30,
79508 -0x52,0x00,0x5E,0x10,
79509 -0x02,0x80,0x04,0x3C,
79510 -0x80,0x90,0x10,0x00,
79511 -0x2A,0x10,0x56,0x02,
79512 -0xD7,0xFF,0x40,0x14,
79513 -0x21,0x88,0x55,0x02,
79514 -0x3D,0x24,0x00,0x0C,
79515 -0x21,0x20,0x80,0x02,
79516 -0x08,0x1C,0x00,0x08,
79517 -0x02,0x80,0x02,0x3C,
79518 -0x40,0xEB,0x29,0x25,
79519 -0x00,0x00,0x25,0x8D,
79520 -0x00,0x00,0x00,0x00,
79521 -0xD4,0x1D,0xA2,0x8C,
79522 -0x00,0x00,0x00,0x00,
79523 -0x01,0x00,0x42,0x24,
79524 -0xD4,0x1D,0xA2,0xAC,
79525 -0x0C,0x00,0x24,0x8E,
79526 -0x0C,0x00,0x02,0x24,
79527 -0x3F,0x00,0x83,0x30,
79528 -0xBD,0x00,0x62,0x10,
79529 -0x00,0x00,0x00,0x00,
79530 -0x0D,0x00,0x02,0x24,
79531 -0xB3,0x00,0x62,0x10,
79532 -0x00,0x00,0x00,0x00,
79533 -0x3F,0x00,0x83,0x30,
79534 -0x0E,0x00,0x02,0x24,
79535 -0xE0,0xFF,0x62,0x14,
79536 -0x06,0x00,0x02,0x26,
79537 -0x02,0x80,0x03,0x3C,
79538 -0x30,0x1F,0x63,0x24,
79539 -0xE0,0x1D,0x62,0x8C,
79540 -0x00,0x00,0x00,0x00,
79541 -0x01,0x00,0x42,0x24,
79542 -0x69,0x1B,0x00,0x08,
79543 -0xE0,0x1D,0x62,0xAC,
79544 -0x2F,0x55,0x00,0x0C,
79545 -0x00,0x00,0x00,0x00,
79546 -0xEF,0x1A,0x00,0x08,
79547 -0x00,0x00,0x00,0x00,
79548 -0xF4,0x5E,0x62,0x90,
79549 -0x00,0x00,0x00,0x00,
79550 -0xC6,0xFF,0x40,0x10,
79551 -0x21,0x10,0x55,0x02,
79552 -0x00,0x60,0x01,0x40,
79553 -0x01,0x00,0x21,0x34,
79554 -0x01,0x00,0x21,0x38,
79555 -0x00,0x60,0x81,0x40,
79556 -0xF4,0x5E,0x62,0x90,
79557 -0x02,0x80,0x04,0x3C,
79558 -0xF8,0xE8,0x85,0x24,
79559 -0xFF,0x00,0x42,0x30,
79560 -0x80,0x10,0x02,0x00,
79561 -0x21,0x10,0x45,0x00,
79562 -0x00,0x00,0x43,0x8C,
79563 -0x00,0x00,0x24,0x8E,
79564 -0x04,0x00,0x25,0x8E,
79565 -0x09,0xF8,0x60,0x00,
79566 -0x00,0x00,0x00,0x00,
79567 -0x02,0x80,0x09,0x3C,
79568 -0xF6,0x5E,0x22,0x91,
79569 -0x0C,0x00,0x03,0x24,
79570 -0xFF,0x00,0x42,0x30,
79571 -0x06,0x00,0x43,0x10,
79572 -0x02,0x80,0x03,0x3C,
79573 -0x00,0x60,0x01,0x40,
79574 -0x01,0x00,0x21,0x34,
79575 -0x00,0x60,0x81,0x40,
79576 -0x5F,0x1B,0x00,0x08,
79577 -0x21,0x10,0x55,0x02,
79578 -0x0D,0x5F,0x62,0x90,
79579 -0x00,0x00,0x00,0x00,
79580 -0xF8,0xFF,0x40,0x10,
79581 -0x02,0x80,0x04,0x3C,
79582 -0x13,0x5F,0x82,0x90,
79583 -0x00,0x00,0x00,0x00,
79584 -0x01,0x00,0x42,0x24,
79585 -0x13,0x5F,0x82,0xA0,
79586 -0x00,0x60,0x01,0x40,
79587 -0x01,0x00,0x21,0x34,
79588 -0x00,0x60,0x81,0x40,
79589 -0x5F,0x1B,0x00,0x08,
79590 -0x21,0x10,0x55,0x02,
79591 -0x30,0x1F,0x82,0x8C,
79592 -0x00,0x00,0x00,0x00,
79593 -0x02,0x12,0x02,0x00,
79594 -0x0F,0x00,0x42,0x30,
79595 -0x05,0x00,0x5E,0x10,
79596 -0xC2,0x13,0x03,0x00,
79597 -0x1E,0x00,0x42,0x30,
79598 -0x21,0x10,0x50,0x00,
79599 -0x70,0x1B,0x00,0x08,
79600 -0xFF,0xFF,0x50,0x30,
79601 -0x02,0x00,0x62,0x92,
79602 -0x00,0x00,0x00,0x00,
79603 -0x1C,0x00,0x40,0x14,
79604 -0x00,0x00,0x00,0x00,
79605 -0x04,0x00,0x23,0x8E,
79606 -0x00,0x00,0x00,0x00,
79607 -0x02,0x14,0x03,0x00,
79608 -0x0F,0x00,0x42,0x30,
79609 -0x14,0x00,0x40,0x14,
79610 -0x02,0x17,0x03,0x00,
79611 -0x03,0x00,0x44,0x30,
79612 -0x08,0x00,0x80,0x10,
79613 -0x00,0xC0,0x02,0x3C,
79614 -0x24,0x10,0x62,0x00,
79615 -0x0E,0x00,0x40,0x14,
79616 -0x03,0x00,0x02,0x24,
79617 -0x0C,0x00,0x82,0x10,
79618 -0x00,0x00,0x00,0x00,
79619 -0x0A,0x00,0x80,0x10,
79620 -0x00,0x00,0x00,0x00,
79621 -0x80,0x28,0x10,0x00,
79622 -0x21,0x28,0xB5,0x00,
79623 -0xF7,0x19,0x00,0x0C,
79624 -0x21,0x20,0x20,0x02,
79625 -0x4C,0x1A,0x00,0x0C,
79626 -0x21,0x20,0x40,0x00,
79627 -0x21,0x20,0x40,0x00,
79628 -0x56,0x1A,0x00,0x0C,
79629 -0x21,0x28,0x00,0x00,
79630 -0x02,0x00,0x62,0x92,
79631 -0x00,0x00,0x00,0x00,
79632 -0x8B,0x00,0x5E,0x10,
79633 -0x00,0x00,0x00,0x00,
79634 -0x02,0x00,0x63,0x92,
79635 -0x02,0x00,0x02,0x24,
79636 -0x71,0x00,0x62,0x10,
79637 -0x00,0x00,0x00,0x00,
79638 -0x25,0xB0,0x02,0x3C,
79639 -0x4C,0x00,0x42,0x34,
79640 -0x00,0x00,0x43,0x90,
79641 -0x00,0x00,0x00,0x00,
79642 -0x03,0x00,0x63,0x30,
79643 -0x08,0x00,0x7E,0x10,
79644 -0xD0,0x02,0x02,0x24,
79645 -0x00,0x00,0x23,0x8E,
79646 -0x00,0x00,0x00,0x00,
79647 -0xC2,0x13,0x03,0x00,
79648 -0x1E,0x00,0x42,0x30,
79649 -0x21,0x10,0x50,0x00,
79650 -0x70,0x1B,0x00,0x08,
79651 -0xFF,0xFF,0x50,0x30,
79652 -0x80,0x36,0x62,0xAE,
79653 -0x00,0x00,0x23,0x8E,
79654 -0xFA,0x1B,0x00,0x08,
79655 -0xC2,0x13,0x03,0x00,
79656 -0x02,0x80,0x09,0x3C,
79657 -0x00,0x01,0x02,0x36,
79658 -0x30,0x1F,0x29,0x25,
79659 -0x00,0x00,0x47,0xAC,
79660 -0xE8,0x37,0x27,0xAD,
79661 -0x02,0x80,0x02,0x3C,
79662 -0x08,0x04,0x44,0x24,
79663 -0x21,0x28,0x00,0x00,
79664 -0x21,0x30,0x00,0x00,
79665 -0x91,0x3C,0x00,0x0C,
79666 -0x21,0x38,0x00,0x00,
79667 -0xAA,0x1A,0x00,0x08,
79668 -0x02,0x80,0x02,0x3C,
79669 -0xF0,0x37,0x22,0x8E,
79670 -0xFF,0xFF,0x73,0x30,
79671 -0x23,0x10,0x47,0x00,
79672 -0xFF,0xFF,0x52,0x30,
79673 -0x21,0x18,0x53,0x02,
79674 -0xFF,0xFF,0x76,0x30,
79675 -0x25,0x24,0x00,0x0C,
79676 -0x21,0x20,0xC0,0x02,
79677 -0xEF,0xFF,0x40,0x10,
79678 -0x21,0xA0,0x40,0x00,
79679 -0x08,0x00,0x42,0x8C,
79680 -0xE8,0x37,0x26,0x8E,
79681 -0x21,0x38,0x40,0x02,
79682 -0x21,0x18,0x56,0x00,
79683 -0xB8,0x37,0x23,0xAE,
79684 -0x21,0x28,0x40,0x00,
79685 -0x08,0x00,0x04,0x24,
79686 -0xBC,0x37,0x22,0xAE,
79687 -0x73,0x01,0x00,0x0C,
79688 -0x10,0x00,0xA0,0xAF,
79689 -0xB0,0x01,0x00,0x0C,
79690 -0x08,0x00,0x04,0x24,
79691 -0xBC,0x37,0x25,0x8E,
79692 -0x24,0x10,0x02,0x3C,
79693 -0x00,0x01,0x10,0x36,
79694 -0x00,0x00,0x02,0xAE,
79695 -0x21,0x38,0x60,0x02,
79696 -0x21,0x28,0xB2,0x00,
79697 -0x08,0x00,0x04,0x24,
79698 -0x24,0x10,0x06,0x3C,
79699 -0xE8,0x37,0x22,0xAE,
79700 -0x73,0x01,0x00,0x0C,
79701 -0x10,0x00,0xA0,0xAF,
79702 -0xEC,0x37,0x23,0x8E,
79703 -0x08,0x00,0x04,0x24,
79704 -0xB0,0x01,0x00,0x0C,
79705 -0xE8,0x37,0x23,0xAE,
79706 -0xE8,0x37,0x22,0x8E,
79707 -0x00,0x00,0x00,0x00,
79708 -0x00,0x00,0x02,0xAE,
79709 -0x40,0x1B,0x00,0x08,
79710 -0x02,0x80,0x09,0x3C,
79711 -0xDC,0x1D,0xA2,0x8C,
79712 -0x00,0x00,0x00,0x00,
79713 -0x01,0x00,0x42,0x24,
79714 -0xDC,0x1D,0xA2,0xAC,
79715 -0x0C,0x00,0x24,0x8E,
79716 -0x88,0x1B,0x00,0x08,
79717 -0x3F,0x00,0x83,0x30,
79718 -0xD8,0x1D,0xA2,0x8C,
79719 -0x00,0x00,0x00,0x00,
79720 -0x01,0x00,0x42,0x24,
79721 -0xD8,0x1D,0xA2,0xAC,
79722 -0x0C,0x00,0x24,0x8E,
79723 -0x84,0x1B,0x00,0x08,
79724 -0x3F,0x00,0x83,0x30,
79725 -0x23,0x10,0x67,0x00,
79726 -0xFF,0xFF,0x56,0x30,
79727 -0x25,0x24,0x00,0x0C,
79728 -0x21,0x20,0xC0,0x02,
79729 -0x4A,0x00,0x40,0x10,
79730 -0x21,0xA0,0x40,0x00,
79731 -0x08,0x00,0x42,0x8C,
79732 -0xE8,0x37,0x26,0x8E,
79733 -0x08,0x00,0x04,0x24,
79734 -0x21,0x18,0x56,0x00,
79735 -0xB8,0x37,0x23,0xAE,
79736 -0x21,0x28,0x40,0x00,
79737 -0x21,0x38,0xC0,0x02,
79738 -0xBC,0x37,0x22,0xAE,
79739 -0x73,0x01,0x00,0x0C,
79740 -0x10,0x00,0xA0,0xAF,
79741 -0xEC,0x37,0x23,0x8E,
79742 -0x08,0x00,0x04,0x24,
79743 -0xB0,0x01,0x00,0x0C,
79744 -0xE8,0x37,0x23,0xAE,
79745 -0xE8,0x37,0x23,0x8E,
79746 -0x00,0x01,0x02,0x36,
79747 -0x00,0x00,0x43,0xAC,
79748 -0x40,0x1B,0x00,0x08,
79749 -0x02,0x80,0x09,0x3C,
79750 -0x04,0x00,0x23,0x8E,
79751 -0x00,0x00,0x00,0x00,
79752 -0x02,0x14,0x03,0x00,
79753 -0x0F,0x00,0x42,0x30,
79754 -0x08,0x00,0x42,0x28,
79755 -0x8B,0xFF,0x40,0x10,
79756 -0x25,0xB0,0x02,0x3C,
79757 -0x02,0x17,0x03,0x00,
79758 -0x03,0x00,0x42,0x30,
79759 -0x86,0xFF,0x40,0x14,
79760 -0x00,0x00,0x00,0x00,
79761 -0x80,0x28,0x10,0x00,
79762 -0x21,0x28,0xB5,0x00,
79763 -0xF7,0x19,0x00,0x0C,
79764 -0x21,0x20,0x20,0x02,
79765 -0x4C,0x1A,0x00,0x0C,
79766 -0x21,0x20,0x40,0x00,
79767 -0x21,0x20,0x40,0x00,
79768 -0x56,0x1A,0x00,0x0C,
79769 -0x21,0x28,0x00,0x00,
79770 -0xF1,0x1B,0x00,0x08,
79771 -0x25,0xB0,0x02,0x3C,
79772 -0x04,0x00,0x23,0x8E,
79773 -0x00,0x00,0x00,0x00,
79774 -0x02,0x14,0x03,0x00,
79775 -0x0F,0x00,0x42,0x30,
79776 -0x08,0x00,0x42,0x28,
79777 -0x06,0x00,0x40,0x10,
79778 -0x00,0xC0,0x02,0x3C,
79779 -0x02,0x17,0x03,0x00,
79780 -0x03,0x00,0x42,0x30,
79781 -0x0C,0x00,0x40,0x10,
79782 -0x80,0x28,0x10,0x00,
79783 -0x00,0xC0,0x02,0x3C,
79784 -0x24,0x10,0x62,0x00,
79785 -0x68,0xFF,0x40,0x14,
79786 -0x02,0x17,0x03,0x00,
79787 -0x03,0x00,0x42,0x30,
79788 -0x03,0x00,0x03,0x24,
79789 -0x64,0xFF,0x43,0x10,
79790 -0x00,0x00,0x00,0x00,
79791 -0x62,0xFF,0x40,0x10,
79792 -0x00,0x00,0x00,0x00,
79793 -0x80,0x28,0x10,0x00,
79794 -0x21,0x28,0xB5,0x00,
79795 -0xF7,0x19,0x00,0x0C,
79796 -0x21,0x20,0x20,0x02,
79797 -0x4C,0x1A,0x00,0x0C,
79798 -0x21,0x20,0x40,0x00,
79799 -0x21,0x20,0x40,0x00,
79800 -0x56,0x1A,0x00,0x0C,
79801 -0x21,0x28,0x00,0x00,
79802 -0xEC,0x1B,0x00,0x08,
79803 -0x00,0x00,0x00,0x00,
79804 -0xEC,0x37,0x23,0x8E,
79805 -0x00,0x01,0x02,0x36,
79806 -0x00,0x00,0x43,0xAC,
79807 -0x07,0x1C,0x00,0x08,
79808 -0xE8,0x37,0x23,0xAE,
79809 -0xB8,0xFF,0xBD,0x27,
79810 -0x25,0xB0,0x03,0x3C,
79811 -0x44,0x00,0xBF,0xAF,
79812 -0x40,0x00,0xBE,0xAF,
79813 -0x3C,0x00,0xB7,0xAF,
79814 -0x38,0x00,0xB6,0xAF,
79815 -0x34,0x00,0xB5,0xAF,
79816 -0x30,0x00,0xB4,0xAF,
79817 -0x2C,0x00,0xB3,0xAF,
79818 -0x28,0x00,0xB2,0xAF,
79819 -0x24,0x00,0xB1,0xAF,
79820 -0x20,0x00,0xB0,0xAF,
79821 -0x44,0x00,0x63,0x34,
79822 -0x00,0x00,0x62,0x90,
79823 -0x00,0x00,0x00,0x00,
79824 -0x00,0x16,0x02,0x00,
79825 -0x03,0x16,0x02,0x00,
79826 -0x0E,0x00,0x40,0x04,
79827 -0x18,0x00,0xA0,0xAF,
79828 -0x21,0x20,0x60,0x00,
79829 -0x21,0x10,0x00,0x00,
79830 -0x01,0x00,0x42,0x24,
79831 -0xFF,0xFF,0x42,0x30,
79832 -0x64,0x00,0x43,0x2C,
79833 -0xFD,0xFF,0x60,0x14,
79834 -0x01,0x00,0x42,0x24,
79835 -0x00,0x00,0x82,0x90,
79836 -0x00,0x00,0x00,0x00,
79837 -0x00,0x16,0x02,0x00,
79838 -0x03,0x16,0x02,0x00,
79839 -0xF6,0xFF,0x41,0x04,
79840 -0x21,0x10,0x00,0x00,
79841 -0x02,0x80,0x02,0x3C,
79842 -0x74,0x57,0x43,0x8C,
79843 -0x00,0x80,0x06,0x3C,
79844 -0x6C,0x72,0xC2,0x24,
79845 -0x25,0xB0,0x05,0x3C,
79846 -0x02,0x80,0x06,0x3C,
79847 -0x18,0x03,0xA4,0x34,
79848 -0x74,0x57,0xD2,0x24,
79849 -0x00,0x00,0x82,0xAC,
79850 -0x67,0x00,0x72,0x10,
79851 -0x01,0x00,0x16,0x24,
79852 -0x11,0x11,0x02,0x3C,
79853 -0x2A,0xB0,0x03,0x3C,
79854 -0x22,0x22,0x5E,0x34,
79855 -0x02,0x80,0x02,0x3C,
79856 -0x21,0xB8,0x80,0x00,
79857 -0x05,0x00,0x74,0x34,
79858 -0x30,0x1F,0x55,0x24,
79859 -0x01,0x00,0x13,0x24,
79860 -0x00,0x00,0xFE,0xAE,
79861 -0x21,0x00,0xC0,0x12,
79862 -0x2A,0xB0,0x03,0x3C,
79863 -0x02,0x80,0x03,0x3C,
79864 -0xF4,0x5E,0x62,0x90,
79865 -0x00,0x00,0x00,0x00,
79866 -0x1B,0x00,0x40,0x10,
79867 -0x21,0xB0,0x00,0x00,
79868 -0x01,0x00,0x06,0x24,
79869 -0x18,0x00,0xA6,0xAF,
79870 -0x00,0x60,0x01,0x40,
79871 -0x01,0x00,0x21,0x34,
79872 -0x01,0x00,0x21,0x38,
79873 -0x00,0x60,0x81,0x40,
79874 -0x02,0x80,0x03,0x3C,
79875 -0xF6,0x5E,0x62,0x90,
79876 -0x00,0x00,0x00,0x00,
79877 -0x0F,0x00,0x42,0x30,
79878 -0x04,0x00,0x42,0x28,
79879 -0x5F,0x00,0x40,0x14,
79880 -0x04,0x00,0x04,0x24,
79881 -0x02,0x80,0x06,0x3C,
79882 -0xDE,0x5D,0xC2,0x90,
79883 -0x00,0x00,0x00,0x00,
79884 -0x02,0x00,0x42,0x30,
79885 -0x55,0x00,0x40,0x14,
79886 -0x00,0x00,0x00,0x00,
79887 -0x00,0x08,0x04,0x24,
79888 -0x00,0x02,0x05,0x3C,
79889 -0xA9,0x45,0x00,0x0C,
79890 -0x01,0x00,0x06,0x24,
79891 -0x00,0x60,0x01,0x40,
79892 -0x01,0x00,0x21,0x34,
79893 -0x00,0x60,0x81,0x40,
79894 -0x2A,0xB0,0x03,0x3C,
79895 -0x06,0x00,0x63,0x34,
79896 -0x00,0x00,0x62,0x94,
79897 -0x44,0x38,0xB1,0x8E,
79898 -0x25,0xB0,0x06,0x3C,
79899 -0xB0,0x03,0xC6,0x34,
79900 -0x00,0xFF,0x42,0x30,
79901 -0x00,0x00,0xD1,0xAC,
79902 -0x0F,0x00,0x40,0x18,
79903 -0x02,0x80,0x02,0x3C,
79904 -0x02,0x80,0x03,0x3C,
79905 -0x4C,0xEB,0x42,0x24,
79906 -0x50,0xEB,0x63,0x24,
79907 -0x00,0x00,0x45,0x8C,
79908 -0x00,0x00,0x64,0x8C,
79909 -0x02,0x80,0x06,0x3C,
79910 -0x54,0xEB,0xC6,0x24,
79911 -0x00,0x00,0xC3,0x8C,
79912 -0x00,0x00,0xA4,0xAC,
79913 -0x00,0x00,0x62,0x94,
79914 -0x00,0x00,0x00,0x00,
79915 -0x00,0xFF,0x42,0x30,
79916 -0xFB,0xFF,0x40,0x1C,
79917 -0x00,0x00,0x00,0x00,
79918 -0x0C,0x00,0x23,0x8E,
79919 -0x00,0x00,0x00,0x00,
79920 -0x07,0x00,0x62,0x30,
79921 -0x47,0x00,0x40,0x14,
79922 -0x08,0x00,0x62,0x24,
79923 -0xC2,0x10,0x03,0x00,
79924 -0x08,0x00,0x25,0x8E,
79925 -0x04,0x37,0xA6,0x8E,
79926 -0xC0,0x10,0x02,0x00,
79927 -0x20,0x00,0x42,0x24,
79928 -0xFF,0xFF,0x47,0x30,
79929 -0x01,0x00,0x04,0x24,
79930 -0x73,0x01,0x00,0x0C,
79931 -0x10,0x00,0xB3,0xAF,
79932 -0xB0,0x01,0x00,0x0C,
79933 -0x01,0x00,0x04,0x24,
79934 -0x02,0x00,0x02,0x24,
79935 -0x00,0x00,0x93,0xA2,
79936 -0x00,0x00,0x82,0xA2,
79937 -0x00,0x60,0x10,0x40,
79938 -0x01,0x00,0x01,0x36,
79939 -0x01,0x00,0x21,0x38,
79940 -0x00,0x60,0x81,0x40,
79941 -0x04,0x00,0x23,0x8E,
79942 -0x00,0x00,0x22,0x8E,
79943 -0x21,0x20,0x20,0x02,
79944 -0x00,0x00,0x62,0xAC,
79945 -0x04,0x00,0x43,0xAC,
79946 -0x00,0x00,0x31,0xAE,
79947 -0x3D,0x24,0x00,0x0C,
79948 -0x04,0x00,0x31,0xAE,
79949 -0x00,0x60,0x90,0x40,
79950 -0x00,0x00,0x42,0x8E,
79951 -0x00,0x00,0x00,0x00,
79952 -0xA3,0xFF,0x52,0x14,
79953 -0x00,0x00,0x00,0x00,
79954 -0x18,0x00,0xA2,0x8F,
79955 -0x00,0x00,0x00,0x00,
79956 -0x07,0x00,0x40,0x10,
79957 -0x02,0x80,0x02,0x3C,
79958 -0x02,0x80,0x03,0x3C,
79959 -0xF4,0x5E,0x62,0x90,
79960 -0x00,0x00,0x00,0x00,
79961 -0x11,0x00,0x40,0x14,
79962 -0x18,0x00,0xA0,0xAF,
79963 -0x02,0x80,0x02,0x3C,
79964 -0x08,0x08,0x44,0x24,
79965 -0x21,0x28,0x00,0x00,
79966 -0x21,0x30,0x00,0x00,
79967 -0x91,0x3C,0x00,0x0C,
79968 -0x21,0x38,0x00,0x00,
79969 -0xBC,0x1C,0x00,0x08,
79970 -0x02,0x80,0x02,0x3C,
79971 -0x9B,0x30,0x00,0x0C,
79972 -0x01,0x00,0x04,0x24,
79973 -0xEA,0x1C,0x00,0x08,
79974 -0x00,0x08,0x04,0x24,
79975 -0x64,0x31,0x00,0x0C,
79976 -0x01,0x00,0x05,0x24,
79977 -0xE4,0x1C,0x00,0x08,
79978 -0x02,0x80,0x06,0x3C,
79979 -0x00,0x60,0x01,0x40,
79980 -0x01,0x00,0x21,0x34,
79981 -0x01,0x00,0x21,0x38,
79982 -0x00,0x60,0x81,0x40,
79983 -0x02,0x80,0x06,0x3C,
79984 -0xF5,0x5E,0xC4,0x90,
79985 -0x01,0x00,0x05,0x24,
79986 -0x64,0x31,0x00,0x0C,
79987 -0xFF,0x00,0x84,0x30,
79988 -0x00,0x60,0x01,0x40,
79989 -0x01,0x00,0x21,0x34,
79990 -0x00,0x60,0x81,0x40,
79991 -0x36,0x1D,0x00,0x08,
79992 -0x02,0x80,0x02,0x3C,
79993 -0x0E,0x1D,0x00,0x08,
79994 -0xC2,0x10,0x02,0x00,
79995 -0x10,0x00,0xE0,0x18,
79996 -0x21,0x18,0x00,0x00,
79997 -0x00,0x00,0xC0,0xAC,
79998 -0x21,0x40,0x00,0x00,
79999 -0x00,0x00,0x82,0x90,
80000 -0x00,0x00,0x00,0x00,
80001 -0x0C,0x00,0x45,0x10,
80002 -0x21,0x18,0x80,0x00,
80003 -0x01,0x00,0x82,0x90,
80004 -0x00,0x00,0x00,0x00,
80005 -0x21,0x18,0x48,0x00,
80006 -0x02,0x00,0x68,0x24,
80007 -0x21,0x10,0x82,0x00,
80008 -0x2B,0x18,0x07,0x01,
80009 -0xF5,0xFF,0x60,0x14,
80010 -0x02,0x00,0x44,0x24,
80011 -0x21,0x18,0x00,0x00,
80012 -0x08,0x00,0xE0,0x03,
80013 -0x21,0x10,0x60,0x00,
80014 -0x01,0x00,0x82,0x90,
80015 -0x00,0x00,0x00,0x00,
80016 -0x00,0x00,0xC2,0xAC,
80017 -0x08,0x00,0xE0,0x03,
80018 -0x21,0x10,0x60,0x00,
80019 -0x02,0x80,0x07,0x3C,
80020 -0x30,0x1F,0xE5,0x24,
80021 -0x22,0x3E,0xA3,0x90,
80022 -0xFF,0x00,0x84,0x30,
80023 -0x80,0x10,0x04,0x00,
80024 -0x0C,0x00,0x60,0x14,
80025 -0x21,0x30,0x45,0x00,
80026 -0xC8,0x00,0x02,0x24,
80027 -0x24,0x39,0xA2,0xAC,
80028 -0x01,0x00,0x03,0x24,
80029 -0x30,0x1F,0xE2,0x24,
80030 -0x04,0x18,0x83,0x00,
80031 -0x4C,0x3E,0xA4,0xA0,
80032 -0x22,0x3E,0x44,0x90,
80033 -0x00,0x00,0x00,0x00,
80034 -0x25,0x18,0x64,0x00,
80035 -0x08,0x00,0xE0,0x03,
80036 -0x22,0x3E,0x43,0xA0,
80037 -0x24,0x39,0xA3,0x8C,
80038 -0xC8,0x00,0x02,0x24,
80039 -0x23,0x10,0x43,0x00,
80040 -0x24,0x3E,0xC2,0xAC,
80041 -0x01,0x00,0x03,0x24,
80042 -0x30,0x1F,0xE2,0x24,
80043 -0x04,0x18,0x83,0x00,
80044 -0x22,0x3E,0x44,0x90,
80045 -0x00,0x00,0x00,0x00,
80046 -0x25,0x18,0x64,0x00,
80047 -0x08,0x00,0xE0,0x03,
80048 -0x22,0x3E,0x43,0xA0,
80049 -0xE0,0xFF,0xBD,0x27,
80050 -0x14,0x00,0xB1,0xAF,
80051 -0x02,0x80,0x11,0x3C,
80052 -0x10,0x00,0xB0,0xAF,
80053 -0x18,0x00,0xBF,0xAF,
80054 -0x30,0x1F,0x25,0x26,
80055 -0x4C,0x3E,0xA6,0x90,
80056 -0x01,0x00,0x02,0x24,
80057 -0x04,0x10,0xC2,0x00,
80058 -0x06,0x00,0x40,0x14,
80059 -0xC9,0x00,0x10,0x24,
80060 -0x1A,0x3E,0xA2,0x90,
80061 -0x00,0x00,0x00,0x00,
80062 -0x01,0x00,0x42,0x30,
80063 -0x23,0x00,0x40,0x14,
80064 -0x21,0x20,0xC5,0x00,
80065 -0x02,0x80,0x02,0x3C,
80066 -0x30,0x1F,0x46,0x24,
80067 -0x21,0x20,0x00,0x00,
80068 -0x24,0x3E,0xC5,0x24,
80069 -0x00,0x00,0xA2,0x8C,
80070 -0x04,0x00,0xA5,0x24,
80071 -0x05,0x00,0x40,0x10,
80072 -0x2B,0x18,0x50,0x00,
80073 -0x03,0x00,0x60,0x10,
80074 -0x00,0x00,0x00,0x00,
80075 -0x21,0x80,0x40,0x00,
80076 -0x4C,0x3E,0xC4,0xA0,
80077 -0x01,0x00,0x84,0x24,
80078 -0x08,0x00,0x82,0x2C,
80079 -0xF5,0xFF,0x40,0x14,
80080 -0xC9,0x00,0x02,0x24,
80081 -0x21,0x00,0x02,0x12,
80082 -0x02,0x80,0x02,0x3C,
80083 -0x30,0x1F,0x45,0x24,
80084 -0x07,0x00,0x04,0x24,
80085 -0x24,0x3E,0xA2,0x8C,
80086 -0xFF,0xFF,0x84,0x24,
80087 -0x02,0x00,0x40,0x10,
80088 -0x23,0x18,0x50,0x00,
80089 -0x24,0x3E,0xA3,0xAC,
80090 -0xFA,0xFF,0x81,0x04,
80091 -0x04,0x00,0xA5,0x24,
80092 -0x30,0x1F,0x22,0x26,
80093 -0x24,0x39,0x50,0xAC,
80094 -0x18,0x00,0xBF,0x8F,
80095 -0x14,0x00,0xB1,0x8F,
80096 -0x10,0x00,0xB0,0x8F,
80097 -0x08,0x00,0xE0,0x03,
80098 -0x20,0x00,0xBD,0x27,
80099 -0x44,0x3E,0x83,0x90,
80100 -0x00,0x00,0x00,0x00,
80101 -0x01,0x00,0x63,0x24,
80102 -0xFF,0x00,0x62,0x30,
80103 -0x03,0x00,0x42,0x2C,
80104 -0xD8,0xFF,0x40,0x10,
80105 -0x44,0x3E,0x83,0xA0,
80106 -0x80,0x18,0x06,0x00,
80107 -0x21,0x18,0x65,0x00,
80108 -0xC8,0x00,0x02,0x24,
80109 -0x03,0x00,0x04,0x24,
80110 -0x21,0x28,0x00,0x00,
80111 -0x90,0x14,0x00,0x0C,
80112 -0x24,0x3E,0x62,0xAC,
80113 -0x9C,0x1D,0x00,0x08,
80114 -0x02,0x80,0x02,0x3C,
80115 -0x30,0x1F,0x22,0x26,
80116 -0x18,0x00,0xBF,0x8F,
80117 -0x14,0x00,0xB1,0x8F,
80118 -0x10,0x00,0xB0,0x8F,
80119 -0x20,0x00,0xBD,0x27,
80120 -0x22,0x3E,0x40,0xA0,
80121 -0x08,0x00,0xE0,0x03,
80122 -0x24,0x39,0x40,0xAC,
80123 -0xB8,0xFF,0xBD,0x27,
80124 -0x02,0x80,0x08,0x3C,
80125 -0x02,0x80,0x0B,0x3C,
80126 -0x02,0x80,0x0C,0x3C,
80127 -0x40,0x00,0xBF,0xAF,
80128 -0x3C,0x00,0xB5,0xAF,
80129 -0x38,0x00,0xB4,0xAF,
80130 -0x34,0x00,0xB3,0xAF,
80131 -0x30,0x00,0xB2,0xAF,
80132 -0x2C,0x00,0xB1,0xAF,
80133 -0x28,0x00,0xB0,0xAF,
80134 -0x40,0xED,0x63,0x25,
80135 -0x3C,0xED,0x02,0x25,
80136 -0x44,0xED,0x84,0x25,
80137 -0x01,0x00,0x45,0x90,
80138 -0x01,0x00,0x66,0x90,
80139 -0x01,0x00,0x87,0x90,
80140 -0x3C,0xED,0x0F,0x91,
80141 -0x02,0x00,0x4A,0x90,
80142 -0x40,0xED,0x6E,0x91,
80143 -0x02,0x00,0x69,0x90,
80144 -0x44,0xED,0x8D,0x91,
80145 -0x02,0x00,0x88,0x90,
80146 -0x03,0x00,0x4B,0x90,
80147 -0x03,0x00,0x6C,0x90,
80148 -0x03,0x00,0x82,0x90,
80149 -0x00,0x2A,0x05,0x00,
80150 -0x00,0x32,0x06,0x00,
80151 -0x00,0x3A,0x07,0x00,
80152 -0x25,0x28,0xAF,0x00,
80153 -0x25,0x30,0xCE,0x00,
80154 -0x25,0x38,0xED,0x00,
80155 -0x00,0x54,0x0A,0x00,
80156 -0x00,0x4C,0x09,0x00,
80157 -0x00,0x44,0x08,0x00,
80158 -0x25,0x50,0x45,0x01,
80159 -0x25,0x48,0x26,0x01,
80160 -0x25,0x40,0x07,0x01,
80161 -0x00,0x5E,0x0B,0x00,
80162 -0x00,0x66,0x0C,0x00,
80163 -0x00,0x16,0x02,0x00,
80164 -0x02,0x80,0x04,0x3C,
80165 -0x25,0x58,0x6A,0x01,
80166 -0x25,0x60,0x89,0x01,
80167 -0x25,0x10,0x48,0x00,
80168 -0x84,0x58,0x84,0x24,
80169 -0x10,0x00,0xAB,0xAF,
80170 -0x18,0x00,0xAC,0xAF,
80171 -0x34,0x4F,0x00,0x0C,
80172 -0x20,0x00,0xA2,0xAF,
80173 -0x10,0x00,0x42,0x30,
80174 -0x29,0x00,0x40,0x10,
80175 -0x21,0x18,0x00,0x00,
80176 -0x02,0x80,0x13,0x3C,
80177 -0x30,0x1F,0x63,0x26,
80178 -0xC4,0x39,0x62,0x8C,
80179 -0x0C,0x00,0x10,0x24,
80180 -0x2B,0x10,0x02,0x02,
80181 -0x2C,0x00,0x40,0x10,
80182 -0x02,0x80,0x02,0x3C,
80183 -0x02,0x80,0x03,0x3C,
80184 -0xF8,0x58,0x51,0x24,
80185 -0x02,0x59,0x72,0x24,
80186 -0x02,0x80,0x02,0x3C,
80187 -0x02,0x80,0x03,0x3C,
80188 -0xFA,0x58,0x54,0x24,
80189 -0x26,0x1E,0x00,0x08,
80190 -0x06,0x59,0x75,0x24,
80191 -0xDD,0x00,0x02,0x24,
80192 -0x21,0x20,0x14,0x02,
80193 -0x2B,0x00,0x62,0x10,
80194 -0x10,0x00,0xA5,0x27,
80195 -0x21,0x10,0x11,0x02,
80196 -0x01,0x00,0x43,0x90,
80197 -0x30,0x1F,0x64,0x26,
80198 -0xC4,0x39,0x82,0x8C,
80199 -0x21,0x18,0x70,0x00,
80200 -0x02,0x00,0x70,0x24,
80201 -0x2B,0x10,0x02,0x02,
80202 -0x17,0x00,0x40,0x10,
80203 -0x00,0x00,0x00,0x00,
80204 -0x21,0x10,0x11,0x02,
80205 -0x00,0x00,0x43,0x90,
80206 -0x30,0x00,0x02,0x24,
80207 -0x21,0x20,0x12,0x02,
80208 -0x20,0x00,0xA5,0x27,
80209 -0xED,0xFF,0x62,0x14,
80210 -0x04,0x00,0x06,0x24,
80211 -0x39,0x52,0x00,0x0C,
80212 -0x00,0x00,0x00,0x00,
80213 -0xEE,0xFF,0x40,0x14,
80214 -0x21,0x10,0x11,0x02,
80215 -0x01,0x00,0x03,0x24,
80216 -0x40,0x00,0xBF,0x8F,
80217 -0x3C,0x00,0xB5,0x8F,
80218 -0x38,0x00,0xB4,0x8F,
80219 -0x34,0x00,0xB3,0x8F,
80220 -0x30,0x00,0xB2,0x8F,
80221 -0x2C,0x00,0xB1,0x8F,
80222 -0x28,0x00,0xB0,0x8F,
80223 -0x21,0x10,0x60,0x00,
80224 -0x08,0x00,0xE0,0x03,
80225 -0x48,0x00,0xBD,0x27,
80226 -0x40,0x00,0xBF,0x8F,
80227 -0x3C,0x00,0xB5,0x8F,
80228 -0x38,0x00,0xB4,0x8F,
80229 -0x34,0x00,0xB3,0x8F,
80230 -0x30,0x00,0xB2,0x8F,
80231 -0x2C,0x00,0xB1,0x8F,
80232 -0x28,0x00,0xB0,0x8F,
80233 -0x21,0x18,0x00,0x00,
80234 -0x21,0x10,0x60,0x00,
80235 -0x08,0x00,0xE0,0x03,
80236 -0x48,0x00,0xBD,0x27,
80237 -0x39,0x52,0x00,0x0C,
80238 -0x00,0x00,0x00,0x00,
80239 -0x21,0x20,0x15,0x02,
80240 -0x18,0x00,0xA5,0x27,
80241 -0xD1,0xFF,0x40,0x14,
80242 -0x04,0x00,0x06,0x24,
80243 -0x39,0x52,0x00,0x0C,
80244 -0x00,0x00,0x00,0x00,
80245 -0xCE,0xFF,0x40,0x14,
80246 -0x21,0x10,0x11,0x02,
80247 -0x32,0x1E,0x00,0x08,
80248 -0x01,0x00,0x03,0x24,
80249 -0x02,0x80,0x02,0x3C,
80250 -0x38,0x5D,0x43,0x94,
80251 -0x00,0x00,0x00,0x00,
80252 -0x80,0x18,0x03,0x00,
80253 -0xB8,0x0B,0x62,0x28,
80254 -0x04,0x00,0x40,0x14,
80255 -0xB8,0x0B,0x04,0x24,
80256 -0x21,0x4E,0x62,0x28,
80257 -0x20,0x4E,0x04,0x24,
80258 -0x0B,0x20,0x62,0x00,
80259 -0x08,0x00,0xE0,0x03,
80260 -0x21,0x10,0x80,0x00,
80261 -0x21,0x38,0x80,0x00,
80262 -0x08,0x00,0xC0,0x10,
80263 -0xFF,0xFF,0xC3,0x24,
80264 -0xFF,0xFF,0x06,0x24,
80265 -0x00,0x00,0xA2,0x8C,
80266 -0xFF,0xFF,0x63,0x24,
80267 -0x04,0x00,0xA5,0x24,
80268 -0x00,0x00,0xE2,0xAC,
80269 -0xFB,0xFF,0x66,0x14,
80270 -0x04,0x00,0xE7,0x24,
80271 -0x08,0x00,0xE0,0x03,
80272 -0x21,0x10,0x80,0x00,
80273 -0x25,0xB0,0x03,0x3C,
80274 -0xD8,0xFF,0xBD,0x27,
80275 -0x20,0x00,0xBF,0xAF,
80276 -0x1C,0x00,0xB1,0xAF,
80277 -0x18,0x00,0xB0,0xAF,
80278 -0x94,0x0E,0x65,0x34,
80279 -0x9C,0x0E,0x66,0x34,
80280 -0xA4,0x0E,0x67,0x34,
80281 -0xAC,0x0E,0x68,0x34,
80282 -0x02,0x80,0x02,0x3C,
80283 -0x00,0x00,0xA9,0x8C,
80284 -0x30,0x1F,0x58,0x24,
80285 -0x00,0x00,0xCC,0x8C,
80286 -0x00,0x00,0xF1,0x8C,
80287 -0x00,0x00,0x05,0x8D,
80288 -0x0C,0x00,0x07,0x8F,
80289 -0x10,0x00,0x08,0x8F,
80290 -0xFF,0x03,0x0A,0x3C,
80291 -0xB4,0x0E,0x62,0x34,
80292 -0x00,0x00,0x4B,0x8C,
80293 -0x24,0x48,0x2A,0x01,
80294 -0x00,0xFC,0x02,0x24,
80295 -0x24,0x28,0xAA,0x00,
80296 -0xBC,0x0E,0x66,0x34,
80297 -0x24,0x40,0x02,0x01,
80298 -0x02,0x4C,0x09,0x00,
80299 -0x24,0x38,0xE2,0x00,
80300 -0x02,0x2C,0x05,0x00,
80301 -0xF0,0xFF,0x02,0x3C,
80302 -0x00,0x00,0xD0,0x8C,
80303 -0xFF,0x03,0x42,0x34,
80304 -0xCC,0x0E,0x66,0x34,
80305 -0x25,0x38,0xE9,0x00,
80306 -0xC4,0x0E,0x63,0x34,
80307 -0x25,0x40,0x05,0x01,
80308 -0x08,0x00,0x0D,0x8F,
80309 -0x00,0x00,0x6F,0x8C,
80310 -0x24,0x40,0x02,0x01,
80311 -0x00,0x00,0xCE,0x8C,
80312 -0x24,0x38,0xE2,0x00,
80313 -0x24,0x60,0x8A,0x01,
80314 -0x24,0x58,0x6A,0x01,
80315 -0xFF,0x9F,0x02,0x3C,
80316 -0x82,0x61,0x0C,0x00,
80317 -0x82,0x59,0x0B,0x00,
80318 -0xFF,0xFF,0x42,0x34,
80319 -0x0F,0xC0,0x05,0x3C,
80320 -0xFF,0xFF,0xA5,0x34,
80321 -0x25,0x38,0xEC,0x00,
80322 -0x25,0x40,0x0B,0x01,
80323 -0x24,0x68,0xA2,0x01,
80324 -0xFF,0x00,0x0B,0x3C,
80325 -0x00,0xFF,0x82,0x30,
80326 -0x24,0x88,0x2A,0x02,
80327 -0x24,0x80,0x0A,0x02,
80328 -0x24,0x18,0x8B,0x00,
80329 -0x24,0x40,0x05,0x01,
80330 -0x21,0x48,0x80,0x00,
80331 -0x02,0x62,0x02,0x00,
80332 -0x24,0x38,0xE5,0x00,
80333 -0x00,0x20,0x02,0x3C,
80334 -0x24,0x70,0xCA,0x01,
80335 -0x00,0x89,0x11,0x00,
80336 -0x00,0x81,0x10,0x00,
80337 -0x24,0x78,0xEA,0x01,
80338 -0x00,0xFF,0x6B,0x35,
80339 -0x25,0x68,0xA2,0x01,
80340 -0x02,0x1C,0x03,0x00,
80341 -0x02,0x80,0x04,0x3C,
80342 -0x25,0x38,0xF1,0x00,
80343 -0x25,0x40,0x10,0x01,
80344 -0x02,0x7C,0x0F,0x00,
80345 -0x02,0x74,0x0E,0x00,
80346 -0x24,0x48,0x2B,0x01,
80347 -0xDC,0xE3,0x84,0x24,
80348 -0x21,0x28,0x80,0x01,
80349 -0x21,0x30,0x60,0x00,
80350 -0x12,0x00,0x02,0x24,
80351 -0x08,0x00,0x0D,0xAF,
80352 -0x0C,0x00,0x07,0xAF,
80353 -0x10,0x00,0x08,0xAF,
80354 -0x14,0x00,0x0F,0xA7,
80355 -0x0A,0x00,0x20,0x15,
80356 -0x16,0x00,0x0E,0xA7,
80357 -0x10,0x00,0xA4,0x27,
80358 -0xC7,0x02,0x02,0xA3,
80359 -0xC8,0x5C,0x00,0x0C,
80360 -0xC3,0x02,0x02,0xA3,
80361 -0x20,0x00,0xBF,0x8F,
80362 -0x1C,0x00,0xB1,0x8F,
80363 -0x18,0x00,0xB0,0x8F,
80364 -0x08,0x00,0xE0,0x03,
80365 -0x28,0x00,0xBD,0x27,
80366 -0xC7,0x02,0x03,0xA3,
80367 -0x2F,0x55,0x00,0x0C,
80368 -0xC3,0x02,0x0C,0xA3,
80369 -0xC8,0x5C,0x00,0x0C,
80370 -0x10,0x00,0xA4,0x27,
80371 -0x20,0x00,0xBF,0x8F,
80372 -0x1C,0x00,0xB1,0x8F,
80373 -0x18,0x00,0xB0,0x8F,
80374 -0x08,0x00,0xE0,0x03,
80375 -0x28,0x00,0xBD,0x27,
80376 -0xC8,0xFF,0xBD,0x27,
80377 -0x28,0x00,0xB6,0xAF,
80378 -0x25,0xB0,0x02,0x3C,
80379 -0x00,0x80,0x16,0x3C,
80380 -0x48,0x7B,0xC3,0x26,
80381 -0x18,0x03,0x42,0x34,
80382 -0x30,0x00,0xBE,0xAF,
80383 -0x2C,0x00,0xB7,0xAF,
80384 -0x24,0x00,0xB5,0xAF,
80385 -0x20,0x00,0xB4,0xAF,
80386 -0x1C,0x00,0xB3,0xAF,
80387 -0x34,0x00,0xBF,0xAF,
80388 -0x18,0x00,0xB2,0xAF,
80389 -0x14,0x00,0xB1,0xAF,
80390 -0x10,0x00,0xB0,0xAF,
80391 -0x00,0x00,0x43,0xAC,
80392 -0x21,0x98,0x00,0x00,
80393 -0x02,0x80,0x15,0x3C,
80394 -0x00,0x80,0x1E,0x3C,
80395 -0x02,0x80,0x14,0x3C,
80396 -0x02,0x80,0x17,0x3C,
80397 -0x25,0xB0,0x10,0x3C,
80398 -0x18,0x03,0x02,0x36,
80399 -0x48,0x7B,0xC3,0x26,
80400 -0x00,0x00,0x43,0xAC,
80401 -0x30,0x1F,0xB1,0x26,
80402 -0x7C,0x36,0x24,0x96,
80403 -0x70,0x03,0x05,0x36,
80404 -0x00,0x00,0xB2,0x8C,
80405 -0x01,0x00,0x84,0x24,
80406 -0x03,0x00,0x40,0x12,
80407 -0x7C,0x36,0x24,0xA6,
80408 -0x01,0x00,0x62,0x26,
80409 -0xFF,0xFF,0x53,0x30,
80410 -0xFF,0x00,0x04,0x3C,
80411 -0xFF,0xFF,0x82,0x34,
80412 -0x2B,0x10,0x52,0x00,
80413 -0x47,0x00,0x40,0x10,
80414 -0x00,0x50,0x62,0x2E,
80415 -0x00,0xFF,0x06,0x3C,
80416 -0xFF,0x00,0xC2,0x34,
80417 -0x00,0xFD,0x05,0x3C,
80418 -0x24,0x18,0x42,0x02,
80419 -0x29,0x00,0xA2,0x34,
80420 -0xA7,0x01,0x62,0x10,
80421 -0x2B,0x10,0x43,0x00,
80422 -0x46,0x00,0x40,0x14,
80423 -0xAC,0x00,0xA2,0x34,
80424 -0x00,0xF2,0x06,0x3C,
80425 -0x01,0x00,0xC2,0x34,
80426 -0xB8,0x01,0x62,0x10,
80427 -0x2B,0x10,0x43,0x00,
80428 -0x7D,0x00,0x40,0x14,
80429 -0x07,0x00,0xA2,0x34,
80430 -0x00,0xF0,0x05,0x3C,
80431 -0x03,0x00,0xA2,0x34,
80432 -0xD5,0x01,0x62,0x10,
80433 -0x2B,0x10,0x43,0x00,
80434 -0xC8,0x00,0x40,0x14,
80435 -0x00,0xF1,0x07,0x3C,
80436 -0x21,0x02,0x65,0x10,
80437 -0x00,0xFF,0x82,0x34,
80438 -0x2B,0x10,0xA3,0x00,
80439 -0x48,0x01,0x40,0x14,
80440 -0x01,0x00,0xA2,0x34,
80441 -0x00,0xE0,0x02,0x3C,
80442 -0x73,0x01,0x62,0x10,
80443 -0x00,0xFF,0x48,0x32,
80444 -0x25,0xB0,0x02,0x3C,
80445 -0x70,0x03,0x42,0x34,
80446 -0x21,0x98,0x00,0x00,
80447 -0x00,0x00,0x40,0xAC,
80448 -0x25,0xB0,0x04,0x3C,
80449 -0x18,0x03,0x82,0x34,
80450 -0x48,0x7C,0xC3,0x27,
80451 -0x00,0x00,0x43,0xAC,
80452 -0x00,0x60,0x01,0x40,
80453 -0x01,0x00,0x21,0x34,
80454 -0x01,0x00,0x21,0x38,
80455 -0x00,0x60,0x81,0x40,
80456 -0x6C,0x57,0x82,0x8E,
80457 -0x6C,0x57,0x83,0x26,
80458 -0x10,0x00,0x43,0x10,
80459 -0x02,0x80,0x02,0x3C,
80460 -0xBF,0x00,0x92,0x34,
80461 -0x30,0x1F,0x51,0x24,
80462 -0x21,0x80,0x60,0x00,
80463 -0x00,0x00,0x42,0x92,
80464 -0x00,0x00,0x00,0x00,
80465 -0x04,0x00,0x42,0x2C,
80466 -0x08,0x00,0x40,0x10,
80467 -0x00,0x00,0x00,0x00,
80468 -0x3C,0x38,0x24,0x8E,
80469 -0xB4,0x08,0x00,0x0C,
80470 -0x00,0x00,0x00,0x00,
80471 -0x6C,0x57,0x83,0x8E,
80472 -0x00,0x00,0x00,0x00,
80473 -0xF5,0xFF,0x70,0x14,
80474 -0x00,0x00,0x00,0x00,
80475 -0x00,0x60,0x01,0x40,
80476 -0x01,0x00,0x21,0x34,
80477 -0x00,0x60,0x81,0x40,
80478 -0x21,0x28,0x00,0x00,
80479 -0x08,0x10,0xE4,0x26,
80480 -0x21,0x30,0x00,0x00,
80481 -0x91,0x3C,0x00,0x0C,
80482 -0x21,0x38,0x00,0x00,
80483 -0xE8,0x1E,0x00,0x08,
80484 -0x25,0xB0,0x10,0x3C,
80485 -0xDA,0xFF,0x40,0x14,
80486 -0x74,0x03,0x03,0x36,
80487 -0xFF,0xFF,0x02,0x24,
80488 -0x21,0x98,0x00,0x00,
80489 -0x00,0x00,0xA0,0xAC,
80490 -0x00,0x00,0x62,0xAC,
80491 -0x1B,0x1F,0x00,0x08,
80492 -0x25,0xB0,0x04,0x3C,
80493 -0x84,0x01,0x62,0x10,
80494 -0x00,0x00,0x00,0x00,
80495 -0x2B,0x10,0x43,0x00,
80496 -0x1E,0x00,0x40,0x14,
80497 -0x00,0xFE,0x07,0x3C,
80498 -0xA4,0x00,0xA2,0x34,
80499 -0x8F,0x01,0x62,0x10,
80500 -0x2B,0x10,0x43,0x00,
80501 -0x47,0x00,0x40,0x14,
80502 -0xA7,0x00,0xA2,0x34,
80503 -0xA1,0x00,0xA2,0x34,
80504 -0xEA,0x01,0x62,0x10,
80505 -0x00,0x00,0x00,0x00,
80506 -0x2B,0x10,0x43,0x00,
80507 -0xAD,0x00,0x40,0x14,
80508 -0xA2,0x00,0xA2,0x34,
80509 -0xA0,0x00,0xA2,0x34,
80510 -0xBE,0xFF,0x62,0x14,
80511 -0x25,0xB0,0x02,0x3C,
80512 -0x00,0x0F,0x42,0x32,
80513 -0x02,0x22,0x02,0x00,
80514 -0x01,0x00,0x03,0x24,
80515 -0x96,0x02,0x83,0x10,
80516 -0x00,0x00,0x00,0x00,
80517 -0x02,0x00,0x02,0x24,
80518 -0x8F,0x02,0x82,0x10,
80519 -0x00,0x00,0x00,0x00,
80520 -0x03,0x00,0x02,0x24,
80521 -0x88,0x02,0x82,0x10,
80522 -0x00,0x00,0x00,0x00,
80523 -0xCD,0x5A,0x00,0x0C,
80524 -0x21,0x20,0x00,0x00,
80525 -0x17,0x1F,0x00,0x08,
80526 -0x25,0xB0,0x02,0x3C,
80527 -0x12,0x00,0xE2,0x34,
80528 -0x65,0x01,0x62,0x10,
80529 -0x00,0x00,0x00,0x00,
80530 -0x2B,0x10,0x43,0x00,
80531 -0x37,0x00,0x40,0x14,
80532 -0x1A,0x00,0xE2,0x34,
80533 -0xAF,0x00,0xA2,0x34,
80534 -0xC8,0x01,0x62,0x10,
80535 -0x00,0x00,0x00,0x00,
80536 -0x2B,0x10,0x43,0x00,
80537 -0x97,0x00,0x40,0x14,
80538 -0x10,0x00,0xE2,0x34,
80539 -0xAD,0x00,0xA2,0x34,
80540 -0x44,0x02,0x62,0x10,
80541 -0x00,0x00,0x00,0x00,
80542 -0xAE,0x00,0xA2,0x34,
80543 -0x9C,0xFF,0x62,0x14,
80544 -0x02,0x24,0x12,0x00,
80545 -0x00,0xFF,0x45,0x32,
80546 -0xFF,0x00,0x84,0x30,
80547 -0x58,0x5A,0x00,0x0C,
80548 -0x02,0x2A,0x05,0x00,
80549 -0x25,0xB0,0x03,0x3C,
80550 -0x74,0x03,0x63,0x34,
80551 -0x00,0x00,0x62,0xA0,
80552 -0x17,0x1F,0x00,0x08,
80553 -0x25,0xB0,0x02,0x3C,
80554 -0x73,0x01,0x62,0x10,
80555 -0x00,0x00,0x00,0x00,
80556 -0x2B,0x10,0x43,0x00,
80557 -0x35,0x00,0x40,0x14,
80558 -0x18,0x00,0xA2,0x34,
80559 -0x00,0xF8,0x04,0x3C,
80560 -0x16,0x00,0x82,0x34,
80561 -0xB6,0x01,0x62,0x10,
80562 -0x00,0x00,0x00,0x00,
80563 -0x2B,0x10,0x43,0x00,
80564 -0x90,0x00,0x40,0x14,
80565 -0x17,0x00,0x82,0x34,
80566 -0x15,0x00,0x82,0x34,
80567 -0x84,0xFF,0x62,0x14,
80568 -0x00,0x00,0x00,0x00,
80569 -0xA7,0x22,0x00,0x0C,
80570 -0x00,0x00,0x00,0x00,
80571 -0x17,0x1F,0x00,0x08,
80572 -0x25,0xB0,0x02,0x3C,
80573 -0x6A,0x01,0x62,0x10,
80574 -0x2B,0x10,0x43,0x00,
80575 -0xB7,0x00,0x40,0x14,
80576 -0xAA,0x00,0xA2,0x34,
80577 -0xA5,0x00,0xA2,0x34,
80578 -0x35,0x02,0x62,0x10,
80579 -0x24,0x20,0x44,0x02,
80580 -0xA6,0x00,0xA2,0x34,
80581 -0x76,0xFF,0x62,0x14,
80582 -0x00,0x00,0x00,0x00,
80583 -0xF7,0x5B,0x00,0x0C,
80584 -0x00,0x00,0x00,0x00,
80585 -0x17,0x1F,0x00,0x08,
80586 -0x25,0xB0,0x02,0x3C,
80587 -0x75,0x01,0x62,0x10,
80588 -0x2B,0x10,0x43,0x00,
80589 -0x80,0x00,0x40,0x14,
80590 -0x0F,0x00,0xC2,0x34,
80591 -0x18,0x00,0xE2,0x34,
80592 -0xC1,0x01,0x62,0x10,
80593 -0x00,0x00,0x00,0x00,
80594 -0x19,0x00,0xE2,0x34,
80595 -0x68,0xFF,0x62,0x14,
80596 -0x00,0x00,0x00,0x00,
80597 -0x00,0x60,0x01,0x40,
80598 -0x01,0x00,0x21,0x34,
80599 -0x01,0x00,0x21,0x38,
80600 -0x00,0x60,0x81,0x40,
80601 -0x30,0x1F,0xA2,0x26,
80602 -0x2A,0x1C,0x44,0x90,
80603 -0x25,0xB0,0x03,0x3C,
80604 -0x74,0x03,0x63,0x34,
80605 -0x00,0x00,0x64,0xAC,
80606 -0x00,0x60,0x01,0x40,
80607 -0x01,0x00,0x21,0x34,
80608 -0x00,0x60,0x81,0x40,
80609 -0x17,0x1F,0x00,0x08,
80610 -0x25,0xB0,0x02,0x3C,
80611 -0x3E,0x01,0x62,0x10,
80612 -0x2B,0x10,0x43,0x00,
80613 -0x74,0x00,0x40,0x14,
80614 -0x19,0x00,0xA2,0x34,
80615 -0x14,0x00,0xA2,0x34,
80616 -0x96,0x01,0x62,0x10,
80617 -0x17,0x00,0xA2,0x34,
80618 -0x51,0xFF,0x62,0x14,
80619 -0x25,0xB0,0x04,0x3C,
80620 -0x68,0x03,0x85,0x34,
80621 -0x00,0x00,0xA3,0x8C,
80622 -0x00,0xFF,0x42,0x32,
80623 -0x00,0x12,0x02,0x00,
80624 -0xFF,0xFF,0x73,0x30,
80625 -0x25,0x10,0x53,0x00,
80626 -0x00,0x00,0xA2,0xAC,
80627 -0x64,0x03,0x84,0x34,
80628 -0x00,0x00,0x82,0x90,
80629 -0x00,0x00,0x00,0x00,
80630 -0xFF,0x00,0x53,0x30,
80631 -0x40,0x00,0x63,0x36,
80632 -0x00,0x00,0x83,0xA0,
80633 -0x17,0x1F,0x00,0x08,
80634 -0x25,0xB0,0x02,0x3C,
80635 -0x02,0x00,0xE2,0x34,
80636 -0x3F,0xFF,0x62,0x10,
80637 -0x2B,0x10,0x43,0x00,
80638 -0x9B,0x00,0x40,0x14,
80639 -0x04,0x00,0xE2,0x34,
80640 -0x08,0x00,0xA2,0x34,
80641 -0xA3,0x01,0x62,0x10,
80642 -0x00,0xFF,0x42,0x32,
80643 -0x38,0xFF,0x67,0x14,
80644 -0x25,0xB0,0x04,0x3C,
80645 -0xFF,0x00,0x05,0x3C,
80646 -0x00,0xFF,0xA5,0x34,
80647 -0x24,0x28,0x45,0x02,
80648 -0x02,0x2A,0x05,0x00,
80649 -0x94,0x00,0x83,0x34,
80650 -0x40,0x11,0x05,0x00,
80651 -0x26,0xB0,0x06,0x3C,
80652 -0x00,0x00,0x65,0xA4,
80653 -0xC0,0xFF,0x53,0x24,
80654 -0x7C,0x00,0xCC,0x34,
80655 -0x04,0x00,0x07,0x24,
80656 -0x9A,0x00,0x88,0x34,
80657 -0x98,0x00,0x89,0x34,
80658 -0x96,0x00,0x8A,0x34,
80659 -0x7A,0x00,0xC6,0x34,
80660 -0xB0,0x03,0x8B,0x34,
80661 -0x00,0x04,0x02,0x24,
80662 -0xA0,0x00,0x03,0x24,
80663 -0x00,0x00,0x02,0xA5,
80664 -0x44,0x00,0x84,0x34,
80665 -0x00,0x00,0x23,0xA5,
80666 -0x00,0x00,0x47,0xA5,
80667 -0x00,0x00,0xC7,0xA0,
80668 -0x00,0x00,0x73,0xAD,
80669 -0x00,0x00,0x93,0xA5,
80670 -0x00,0x00,0x83,0x94,
80671 -0xFF,0xFD,0x02,0x24,
80672 -0x30,0x1F,0xA6,0x26,
80673 -0x24,0x18,0x62,0x00,
80674 -0x00,0x00,0x83,0xA4,
80675 -0x00,0x00,0x82,0x94,
80676 -0xBA,0x1B,0xC5,0xA4,
80677 -0x00,0x02,0x42,0x34,
80678 -0x00,0x00,0x82,0xA4,
80679 -0x17,0x1F,0x00,0x08,
80680 -0x25,0xB0,0x02,0x3C,
80681 -0xBF,0x01,0x62,0x10,
80682 -0x25,0xB0,0x02,0x3C,
80683 -0xA3,0x00,0xA2,0x34,
80684 -0x10,0xFF,0x62,0x14,
80685 -0x25,0xB0,0x02,0x3C,
80686 -0x30,0x1F,0xA2,0x26,
80687 -0x16,0x1F,0x00,0x08,
80688 -0x30,0x38,0x40,0xAC,
80689 -0x3A,0x01,0x62,0x10,
80690 -0x11,0x00,0xE2,0x34,
80691 -0x08,0xFF,0x62,0x14,
80692 -0x00,0x00,0x00,0x00,
80693 -0x00,0x60,0x01,0x40,
80694 -0x01,0x00,0x21,0x34,
80695 -0x01,0x00,0x21,0x38,
80696 -0x00,0x60,0x81,0x40,
80697 -0xFF,0x00,0x04,0x3C,
80698 -0x00,0xFF,0x84,0x34,
80699 -0x24,0x20,0x44,0x02,
80700 -0x30,0x1F,0xA2,0x26,
80701 -0x02,0x22,0x04,0x00,
80702 -0xC2,0x34,0x00,0x0C,
80703 -0x2A,0x1C,0x40,0xA0,
80704 -0x00,0x60,0x01,0x40,
80705 -0x01,0x00,0x21,0x34,
80706 -0x00,0x60,0x81,0x40,
80707 -0x17,0x1F,0x00,0x08,
80708 -0x25,0xB0,0x02,0x3C,
80709 -0x9F,0x01,0x62,0x10,
80710 -0x00,0x00,0x00,0x00,
80711 -0x18,0x00,0x82,0x34,
80712 -0xF3,0xFE,0x62,0x14,
80713 -0x00,0x00,0x00,0x00,
80714 -0x0A,0x23,0x00,0x0C,
80715 -0x00,0x00,0x00,0x00,
80716 -0x17,0x1F,0x00,0x08,
80717 -0x25,0xB0,0x02,0x3C,
80718 -0x4E,0x01,0x62,0x10,
80719 -0x10,0x00,0xC2,0x34,
80720 -0xEC,0xFE,0x62,0x14,
80721 -0x25,0xB0,0x02,0x3C,
80722 -0x00,0xFF,0x43,0x32,
80723 -0x00,0xFF,0x02,0x34,
80724 -0xDA,0xFF,0x62,0x14,
80725 -0x30,0x1F,0xA2,0x26,
80726 -0x30,0x1F,0xA3,0x26,
80727 -0xFF,0xFF,0x02,0x34,
80728 -0x16,0x1F,0x00,0x08,
80729 -0x30,0x38,0x62,0xAC,
80730 -0x96,0x01,0x62,0x10,
80731 -0x25,0xB0,0x02,0x3C,
80732 -0x28,0x00,0xA2,0x34,
80733 -0xDE,0xFE,0x62,0x14,
80734 -0x0F,0x00,0x10,0x3C,
80735 -0xFF,0xFF,0x05,0x36,
80736 -0x60,0x00,0x06,0x24,
80737 -0x5F,0x47,0x00,0x0C,
80738 -0x24,0x00,0x04,0x24,
80739 -0x25,0x22,0x00,0x0C,
80740 -0xE8,0x03,0x04,0x24,
80741 -0x00,0x60,0x01,0x40,
80742 -0x01,0x00,0x21,0x34,
80743 -0x01,0x00,0x21,0x38,
80744 -0x00,0x60,0x81,0x40,
80745 -0x24,0x00,0x04,0x24,
80746 -0x8A,0x47,0x00,0x0C,
80747 -0xFF,0xFF,0x05,0x36,
80748 -0x1F,0x00,0x53,0x30,
80749 -0x00,0x60,0x01,0x40,
80750 -0x01,0x00,0x21,0x34,
80751 -0x00,0x60,0x81,0x40,
80752 -0x54,0x22,0x00,0x0C,
80753 -0x64,0x00,0x04,0x24,
80754 -0x25,0xB0,0x02,0x3C,
80755 -0x74,0x03,0x42,0x34,
80756 -0x00,0x00,0x53,0xA0,
80757 -0x17,0x1F,0x00,0x08,
80758 -0x25,0xB0,0x02,0x3C,
80759 -0x84,0x01,0x62,0x10,
80760 -0x00,0x00,0x00,0x00,
80761 -0xAB,0x00,0xA2,0x34,
80762 -0xC1,0xFE,0x62,0x14,
80763 -0x00,0x00,0x00,0x00,
80764 -0xE6,0x5F,0x00,0x0C,
80765 -0x21,0x20,0x40,0x02,
80766 -0x17,0x1F,0x00,0x08,
80767 -0x25,0xB0,0x02,0x3C,
80768 -0x4C,0x01,0x62,0x10,
80769 -0x25,0xB0,0x02,0x3C,
80770 -0x02,0x00,0xA2,0x34,
80771 -0xB9,0xFE,0x62,0x14,
80772 -0x25,0xB0,0x02,0x3C,
80773 -0x02,0x14,0x12,0x00,
80774 -0x00,0xFF,0x43,0x32,
80775 -0xFF,0x00,0x45,0x30,
80776 -0x04,0x00,0xA0,0x10,
80777 -0x02,0x92,0x03,0x00,
80778 -0x01,0x00,0x02,0x24,
80779 -0x02,0x00,0xA2,0x10,
80780 -0x01,0x00,0x04,0x24,
80781 -0x21,0x20,0x00,0x00,
80782 -0xE6,0x44,0x00,0x0C,
80783 -0x0F,0x00,0x10,0x3C,
80784 -0xFF,0xFF,0x05,0x36,
80785 -0x8A,0x47,0x00,0x0C,
80786 -0x21,0x20,0x40,0x02,
80787 -0xFF,0xFF,0x10,0x36,
80788 -0x24,0x98,0x50,0x00,
80789 -0x25,0xB0,0x02,0x3C,
80790 -0x74,0x03,0x42,0x34,
80791 -0x00,0x00,0x53,0xAC,
80792 -0x17,0x1F,0x00,0x08,
80793 -0x25,0xB0,0x02,0x3C,
80794 -0x15,0x01,0x62,0x10,
80795 -0x24,0x10,0x44,0x02,
80796 -0xA0,0xFE,0x66,0x14,
80797 -0x25,0xB0,0x02,0x3C,
80798 -0x25,0xB0,0x05,0x3C,
80799 -0x74,0x03,0xA3,0x34,
80800 -0x00,0x00,0x64,0x8C,
80801 -0xFF,0x0F,0x02,0x3C,
80802 -0xFF,0xFF,0x42,0x34,
80803 -0x24,0x90,0x82,0x00,
80804 -0x01,0x00,0x03,0x3C,
80805 -0x2B,0x18,0x72,0x00,
80806 -0x95,0xFE,0x60,0x10,
80807 -0x00,0xB0,0x02,0x3C,
80808 -0x25,0x90,0x42,0x02,
80809 -0x00,0x00,0x53,0x8E,
80810 -0x78,0x03,0xA2,0x34,
80811 -0x00,0x00,0x53,0xAC,
80812 -0x17,0x1F,0x00,0x08,
80813 -0x25,0xB0,0x02,0x3C,
80814 -0x02,0x1A,0x08,0x00,
80815 -0xFF,0x00,0x02,0x24,
80816 -0x56,0x01,0x62,0x10,
80817 -0x25,0xB0,0x05,0x3C,
80818 -0x0E,0x00,0x60,0x14,
80819 -0x00,0xCC,0x02,0x34,
80820 -0x25,0xB0,0x04,0x3C,
80821 -0x64,0x03,0x84,0x34,
80822 -0x30,0x1F,0xA7,0x26,
80823 -0x00,0x00,0x85,0x94,
80824 -0xE4,0x02,0xE6,0x8C,
80825 -0xFF,0xCF,0x02,0x3C,
80826 -0xFF,0xFE,0x03,0x24,
80827 -0xFF,0xFF,0x42,0x34,
80828 -0x24,0x28,0xA3,0x00,
80829 -0x24,0x30,0xC2,0x00,
80830 -0x00,0x00,0x85,0xA4,
80831 -0xE4,0x02,0xE6,0xAC,
80832 -0x00,0xCC,0x02,0x34,
80833 -0x7B,0xFE,0x02,0x15,
80834 -0x25,0xB0,0x02,0x3C,
80835 -0x30,0x1F,0xA5,0x26,
80836 -0xE4,0x02,0xA3,0x8C,
80837 -0xFF,0xCF,0x02,0x3C,
80838 -0xFF,0xFF,0x42,0x34,
80839 -0x24,0x18,0x62,0x00,
80840 -0x00,0x10,0x04,0x3C,
80841 -0x25,0x18,0x64,0x00,
80842 -0x16,0x1F,0x00,0x08,
80843 -0xE4,0x02,0xA3,0xAC,
80844 -0x02,0x14,0x12,0x00,
80845 -0x00,0x1F,0x43,0x32,
80846 -0x02,0x9A,0x03,0x00,
80847 -0x3F,0x00,0x42,0x30,
80848 -0xC1,0x02,0x22,0xA2,
80849 -0xBC,0x02,0x33,0xA2,
80850 -0x00,0x60,0x01,0x40,
80851 -0x01,0x00,0x21,0x34,
80852 -0x01,0x00,0x21,0x38,
80853 -0x00,0x60,0x81,0x40,
80854 -0x76,0x2C,0x00,0x0C,
80855 -0x00,0x00,0x00,0x00,
80856 -0x21,0x98,0x40,0x00,
80857 -0x74,0x03,0x02,0x36,
80858 -0x00,0x00,0x53,0xAC,
80859 -0x00,0x60,0x01,0x40,
80860 -0x01,0x00,0x21,0x34,
80861 -0x00,0x60,0x81,0x40,
80862 -0x03,0x00,0x22,0x92,
80863 -0x00,0x00,0x00,0x00,
80864 -0x01,0x00,0x42,0x24,
80865 -0x16,0x1F,0x00,0x08,
80866 -0x03,0x00,0x22,0xA2,
80867 -0x74,0x03,0x03,0x36,
80868 -0x00,0x00,0x64,0x8C,
80869 -0xFF,0x0F,0x02,0x3C,
80870 -0xFF,0xFF,0x42,0x34,
80871 -0x24,0x90,0x82,0x00,
80872 -0x01,0x00,0x03,0x3C,
80873 -0x2B,0x18,0x72,0x00,
80874 -0x51,0xFE,0x60,0x10,
80875 -0x78,0x03,0x02,0x36,
80876 -0x00,0x00,0x53,0x8C,
80877 -0x00,0xB0,0x03,0x3C,
80878 -0x25,0x90,0x43,0x02,
80879 -0x00,0x00,0x53,0xAE,
80880 -0x17,0x1F,0x00,0x08,
80881 -0x25,0xB0,0x02,0x3C,
80882 -0xBE,0x59,0x00,0x0C,
80883 -0x21,0x20,0x40,0x02,
80884 -0x17,0x1F,0x00,0x08,
80885 -0x25,0xB0,0x02,0x3C,
80886 -0x00,0x60,0x01,0x40,
80887 -0x01,0x00,0x21,0x34,
80888 -0x01,0x00,0x21,0x38,
80889 -0x00,0x60,0x81,0x40,
80890 -0x00,0xFF,0x82,0x34,
80891 -0x24,0x10,0x42,0x02,
80892 -0x02,0x2A,0x02,0x00,
80893 -0x2B,0x1C,0x25,0xA2,
80894 -0x00,0x60,0x01,0x40,
80895 -0x01,0x00,0x21,0x34,
80896 -0x00,0x60,0x81,0x40,
80897 -0x17,0x1F,0x00,0x08,
80898 -0x25,0xB0,0x02,0x3C,
80899 -0xFF,0xFF,0x02,0x34,
80900 -0x16,0x1F,0x00,0x08,
80901 -0x30,0x38,0x22,0xAE,
80902 -0x24,0x10,0x44,0x02,
80903 -0x00,0xFF,0x43,0x32,
80904 -0x02,0x2C,0x02,0x00,
80905 -0x04,0x00,0xA0,0x10,
80906 -0x02,0x92,0x03,0x00,
80907 -0x01,0x00,0x02,0x24,
80908 -0x02,0x00,0xA2,0x10,
80909 -0x01,0x00,0x04,0x24,
80910 -0x21,0x20,0x00,0x00,
80911 -0x25,0xB0,0x10,0x3C,
80912 -0xE6,0x44,0x00,0x0C,
80913 -0x74,0x03,0x10,0x36,
80914 -0x00,0x00,0x13,0x8E,
80915 -0x0F,0x00,0x11,0x3C,
80916 -0x21,0x20,0x40,0x02,
80917 -0x21,0x30,0x60,0x02,
80918 -0x5F,0x47,0x00,0x0C,
80919 -0xFF,0xFF,0x25,0x36,
80920 -0x21,0x20,0x40,0x02,
80921 -0x8A,0x47,0x00,0x0C,
80922 -0xFF,0xFF,0x25,0x36,
80923 -0x00,0x00,0x02,0xAE,
80924 -0x17,0x1F,0x00,0x08,
80925 -0x25,0xB0,0x02,0x3C,
80926 -0x85,0x5F,0x00,0x0C,
80927 -0x21,0x20,0x40,0x02,
80928 -0x17,0x1F,0x00,0x08,
80929 -0x25,0xB0,0x02,0x3C,
80930 -0x08,0x00,0x23,0x8E,
80931 -0xFF,0x9F,0x02,0x3C,
80932 -0xFF,0xFF,0x42,0x34,
80933 -0x24,0x18,0x62,0x00,
80934 -0x16,0x1F,0x00,0x08,
80935 -0x08,0x00,0x23,0xAE,
80936 -0x00,0xFF,0x42,0x32,
80937 -0x24,0x18,0x44,0x02,
80938 -0x02,0x9A,0x02,0x00,
80939 -0x01,0x00,0x02,0x24,
80940 -0x95,0x00,0x62,0x12,
80941 -0x02,0x1C,0x03,0x00,
80942 -0x02,0x00,0x02,0x24,
80943 -0xA9,0x00,0x62,0x12,
80944 -0xC0,0x10,0x03,0x00,
80945 -0x03,0x00,0x02,0x24,
80946 -0x09,0xFE,0x62,0x16,
80947 -0xC0,0x10,0x03,0x00,
80948 -0x21,0x10,0x43,0x00,
80949 -0x80,0x10,0x02,0x00,
80950 -0x21,0x10,0x43,0x00,
80951 -0x02,0x80,0x04,0x3C,
80952 -0x4C,0x43,0x83,0x24,
80953 -0x80,0x10,0x02,0x00,
80954 -0x21,0x10,0x43,0x00,
80955 -0x00,0x00,0x44,0x8C,
80956 -0x25,0xB0,0x03,0x3C,
80957 -0x74,0x03,0x63,0x34,
80958 -0x00,0x00,0x64,0xAC,
80959 -0x17,0x1F,0x00,0x08,
80960 -0x25,0xB0,0x02,0x3C,
80961 -0x00,0xFF,0x82,0x34,
80962 -0x24,0x10,0x42,0x02,
80963 -0x02,0x2A,0x02,0x00,
80964 -0x01,0x00,0x03,0x24,
80965 -0x77,0x00,0xA3,0x10,
80966 -0x74,0x03,0x02,0x36,
80967 -0x02,0x00,0xA2,0x28,
80968 -0xB7,0x00,0x40,0x14,
80969 -0x03,0x00,0x02,0x24,
80970 -0x06,0x00,0xA2,0x10,
80971 -0x00,0x00,0x00,0x00,
80972 -0x30,0x1F,0xA2,0x26,
80973 -0x24,0x1C,0x44,0x94,
80974 -0x25,0xB0,0x03,0x3C,
80975 -0x18,0x21,0x00,0x08,
80976 -0x74,0x03,0x63,0x34,
80977 -0x30,0x1F,0xA2,0x26,
80978 -0x26,0x1C,0x44,0x94,
80979 -0x25,0xB0,0x03,0x3C,
80980 -0x18,0x21,0x00,0x08,
80981 -0x74,0x03,0x63,0x34,
80982 -0x24,0x10,0x42,0x02,
80983 -0x02,0x92,0x02,0x00,
80984 -0x21,0x18,0x50,0x02,
80985 -0x00,0x00,0x73,0x8C,
80986 -0x74,0x03,0x02,0x36,
80987 -0x00,0x00,0x53,0xAC,
80988 -0x00,0x00,0x73,0x8C,
80989 -0x17,0x1F,0x00,0x08,
80990 -0x25,0xB0,0x02,0x3C,
80991 -0xA6,0x5A,0x00,0x0C,
80992 -0x00,0x00,0x00,0x00,
80993 -0x17,0x1F,0x00,0x08,
80994 -0x25,0xB0,0x02,0x3C,
80995 -0x24,0x20,0x44,0x02,
80996 -0x56,0x25,0x00,0x0C,
80997 -0x02,0x24,0x04,0x00,
80998 -0x17,0x1F,0x00,0x08,
80999 -0x25,0xB0,0x02,0x3C,
81000 -0xD7,0x22,0x00,0x0C,
81001 -0x00,0x00,0x00,0x00,
81002 -0x17,0x1F,0x00,0x08,
81003 -0x25,0xB0,0x02,0x3C,
81004 -0x00,0x60,0x01,0x40,
81005 -0x01,0x00,0x21,0x34,
81006 -0x01,0x00,0x21,0x38,
81007 -0x00,0x60,0x81,0x40,
81008 -0x30,0x1F,0xA3,0x26,
81009 -0x2A,0x1C,0x62,0x90,
81010 -0x00,0x00,0x00,0x00,
81011 -0x6A,0xFE,0x40,0x14,
81012 -0x00,0x00,0x00,0x00,
81013 -0x00,0xFF,0x82,0x34,
81014 -0x24,0x10,0x42,0x02,
81015 -0x02,0x2A,0x02,0x00,
81016 -0x01,0x00,0x02,0x24,
81017 -0x21,0x20,0xA0,0x00,
81018 -0x2A,0x1C,0x62,0xA0,
81019 -0xC2,0x34,0x00,0x0C,
81020 -0x2B,0x1C,0x65,0xA0,
81021 -0x1A,0x20,0x00,0x08,
81022 -0x00,0x00,0x00,0x00,
81023 -0x00,0xFF,0x82,0x34,
81024 -0x24,0x10,0x42,0x02,
81025 -0xBB,0xFD,0x40,0x10,
81026 -0x25,0xB0,0x02,0x3C,
81027 -0x30,0x1F,0xA3,0x26,
81028 -0x04,0x03,0x66,0x90,
81029 -0x24,0x20,0x44,0x02,
81030 -0x00,0xFF,0x45,0x32,
81031 -0x02,0x24,0x04,0x00,
81032 -0x02,0x2A,0x05,0x00,
81033 -0x00,0x01,0xC6,0x34,
81034 -0xFB,0xFF,0x87,0x24,
81035 -0xFB,0xFF,0xA2,0x24,
81036 -0x1F,0x03,0x62,0xA0,
81037 -0x04,0x03,0x66,0xAC,
81038 -0x1D,0x03,0x67,0xA0,
81039 -0x1C,0x03,0x64,0xA0,
81040 -0x16,0x1F,0x00,0x08,
81041 -0x1E,0x03,0x65,0xA0,
81042 -0x00,0x60,0x01,0x40,
81043 -0x01,0x00,0x21,0x34,
81044 -0x01,0x00,0x21,0x38,
81045 -0x00,0x60,0x81,0x40,
81046 -0x30,0x1F,0xA2,0x26,
81047 -0x2B,0x1C,0x44,0x90,
81048 -0x25,0xB0,0x03,0x3C,
81049 -0x74,0x03,0x63,0x34,
81050 -0x00,0x00,0x64,0xAC,
81051 -0xB8,0x1F,0x00,0x08,
81052 -0x00,0x00,0x00,0x00,
81053 -0x25,0xB0,0x03,0x3C,
81054 -0xFF,0x00,0x02,0x24,
81055 -0x56,0x01,0x63,0x34,
81056 -0x00,0x00,0x62,0xA4,
81057 -0x01,0x00,0x04,0x24,
81058 -0x02,0x80,0x02,0x3C,
81059 -0x16,0x1F,0x00,0x08,
81060 -0x08,0x5E,0x44,0xA0,
81061 -0x02,0x92,0x02,0x00,
81062 -0x05,0x00,0x40,0x12,
81063 -0x21,0x20,0x00,0x00,
81064 -0x01,0x00,0x02,0x24,
81065 -0x02,0x00,0x42,0x12,
81066 -0x01,0x00,0x04,0x24,
81067 -0x21,0x20,0x00,0x00,
81068 -0xE6,0x44,0x00,0x0C,
81069 -0x00,0x00,0x00,0x00,
81070 -0x17,0x1F,0x00,0x08,
81071 -0x25,0xB0,0x02,0x3C,
81072 -0x02,0x9C,0x02,0x00,
81073 -0x00,0xFF,0x43,0x32,
81074 -0x07,0x00,0x62,0x2E,
81075 -0x88,0xFD,0x40,0x10,
81076 -0x02,0x2A,0x03,0x00,
81077 -0x02,0x80,0x04,0x3C,
81078 -0x50,0xED,0x83,0x24,
81079 -0x80,0x10,0x13,0x00,
81080 -0x21,0x10,0x43,0x00,
81081 -0x00,0x00,0x44,0x8C,
81082 -0x00,0x00,0x00,0x00,
81083 -0x08,0x00,0x80,0x00,
81084 -0x00,0x00,0x00,0x00,
81085 -0x22,0x1C,0x23,0x96,
81086 -0x00,0x00,0x00,0x00,
81087 -0x00,0x00,0x43,0xAC,
81088 -0x17,0x1F,0x00,0x08,
81089 -0x25,0xB0,0x02,0x3C,
81090 -0xC0,0x10,0x03,0x00,
81091 -0x21,0x10,0x43,0x00,
81092 -0x80,0x10,0x02,0x00,
81093 -0x21,0x10,0x43,0x00,
81094 -0x80,0x10,0x02,0x00,
81095 -0x21,0x10,0x51,0x00,
81096 -0x14,0x24,0x44,0x8C,
81097 -0x74,0x03,0x03,0x36,
81098 -0x00,0x00,0x64,0xAC,
81099 -0x17,0x1F,0x00,0x08,
81100 -0x25,0xB0,0x02,0x3C,
81101 -0x00,0xFF,0x83,0x34,
81102 -0x74,0x03,0x44,0x34,
81103 -0x00,0x00,0x93,0x8C,
81104 -0x24,0x18,0x43,0x02,
81105 -0x02,0x92,0x03,0x00,
81106 -0x21,0x10,0x42,0x02,
81107 -0x00,0x00,0x53,0xAC,
81108 -0x00,0x00,0x53,0x8C,
81109 -0x00,0x00,0x00,0x00,
81110 -0x00,0x00,0x93,0xAC,
81111 -0x17,0x1F,0x00,0x08,
81112 -0x25,0xB0,0x02,0x3C,
81113 -0x21,0x10,0x43,0x00,
81114 -0x80,0x10,0x02,0x00,
81115 -0x21,0x10,0x43,0x00,
81116 -0x80,0x10,0x02,0x00,
81117 -0x21,0x10,0x51,0x00,
81118 -0x18,0x24,0x44,0x8C,
81119 -0xA4,0x21,0x00,0x08,
81120 -0x74,0x03,0x03,0x36,
81121 -0xCD,0x59,0x00,0x0C,
81122 -0x21,0x20,0x40,0x02,
81123 -0x17,0x1F,0x00,0x08,
81124 -0x25,0xB0,0x02,0x3C,
81125 -0x3D,0x23,0x00,0x0C,
81126 -0x00,0x00,0x00,0x00,
81127 -0x17,0x1F,0x00,0x08,
81128 -0x25,0xB0,0x02,0x3C,
81129 -0x74,0x03,0x42,0x34,
81130 -0x00,0x00,0x45,0x8C,
81131 -0x00,0xFF,0x84,0x34,
81132 -0x24,0x20,0x44,0x02,
81133 -0xC1,0x5B,0x00,0x0C,
81134 -0x02,0x22,0x04,0x00,
81135 -0x17,0x1F,0x00,0x08,
81136 -0x25,0xB0,0x02,0x3C,
81137 -0x70,0x03,0x42,0x34,
81138 -0x21,0x20,0x40,0x02,
81139 -0x00,0x00,0x40,0xAC,
81140 -0x6B,0x1E,0x00,0x0C,
81141 -0x00,0x00,0x00,0x00,
81142 -0x17,0x1F,0x00,0x08,
81143 -0x25,0xB0,0x02,0x3C,
81144 -0xF5,0x5B,0x00,0x0C,
81145 -0x02,0x24,0x04,0x00,
81146 -0x17,0x1F,0x00,0x08,
81147 -0x25,0xB0,0x02,0x3C,
81148 -0x00,0x60,0x00,0x0C,
81149 -0x00,0x00,0x00,0x00,
81150 -0x17,0x1F,0x00,0x08,
81151 -0x25,0xB0,0x02,0x3C,
81152 -0x4B,0xFF,0xA0,0x14,
81153 -0x00,0x00,0x00,0x00,
81154 -0x30,0x1F,0xA2,0x26,
81155 -0x20,0x1C,0x44,0x94,
81156 -0x25,0xB0,0x03,0x3C,
81157 -0x18,0x21,0x00,0x08,
81158 -0x74,0x03,0x63,0x34,
81159 -0x64,0x03,0xA5,0x34,
81160 -0x30,0x1F,0xA6,0x26,
81161 -0x00,0x00,0xA3,0x94,
81162 -0xE4,0x02,0xC4,0x8C,
81163 -0xFF,0xCF,0x02,0x3C,
81164 -0xFF,0xFF,0x42,0x34,
81165 -0x24,0x20,0x82,0x00,
81166 -0x00,0x01,0x63,0x34,
81167 -0x00,0x00,0xA3,0xA4,
81168 -0x9A,0x20,0x00,0x08,
81169 -0xE4,0x02,0xC4,0xAC,
81170 -0xCD,0x5A,0x00,0x0C,
81171 -0x03,0x00,0x04,0x24,
81172 -0x17,0x1F,0x00,0x08,
81173 -0x25,0xB0,0x02,0x3C,
81174 -0xCD,0x5A,0x00,0x0C,
81175 -0x02,0x00,0x04,0x24,
81176 -0x17,0x1F,0x00,0x08,
81177 -0x25,0xB0,0x02,0x3C,
81178 -0xCD,0x5A,0x00,0x0C,
81179 -0x01,0x00,0x04,0x24,
81180 -0x17,0x1F,0x00,0x08,
81181 -0x25,0xB0,0x02,0x3C,
81182 -0x00,0x19,0x05,0x00,
81183 -0x30,0x1F,0xA2,0x26,
81184 -0x21,0x18,0x62,0x00,
81185 -0x36,0x03,0x64,0x94,
81186 -0x25,0xB0,0x02,0x3C,
81187 -0x74,0x03,0x42,0x34,
81188 -0x00,0x00,0x44,0xAC,
81189 -0x17,0x1F,0x00,0x08,
81190 -0x25,0xB0,0x02,0x3C,
81191 -0x00,0x19,0x05,0x00,
81192 -0x30,0x1F,0xA2,0x26,
81193 -0x21,0x18,0x62,0x00,
81194 -0x35,0x03,0x64,0x90,
81195 -0xFD,0x21,0x00,0x08,
81196 -0x25,0xB0,0x02,0x3C,
81197 -0x00,0x19,0x05,0x00,
81198 -0x30,0x1F,0xA2,0x26,
81199 -0x21,0x18,0x62,0x00,
81200 -0x34,0x03,0x64,0x90,
81201 -0xFD,0x21,0x00,0x08,
81202 -0x25,0xB0,0x02,0x3C,
81203 -0x00,0x19,0x05,0x00,
81204 -0x30,0x1F,0xA2,0x26,
81205 -0x21,0x18,0x62,0x00,
81206 -0x32,0x03,0x64,0x94,
81207 -0xFD,0x21,0x00,0x08,
81208 -0x25,0xB0,0x02,0x3C,
81209 -0x00,0x19,0x05,0x00,
81210 -0x30,0x1F,0xA2,0x26,
81211 -0x21,0x18,0x62,0x00,
81212 -0x30,0x03,0x64,0x94,
81213 -0xFD,0x21,0x00,0x08,
81214 -0x25,0xB0,0x02,0x3C,
81215 -0x00,0x11,0x05,0x00,
81216 -0x30,0x1F,0xA3,0x26,
81217 -0x21,0x10,0x43,0x00,
81218 -0x2C,0x03,0x44,0x8C,
81219 -0xFC,0x21,0x00,0x08,
81220 -0x42,0x26,0x04,0x00,
81221 -0x00,0x11,0x05,0x00,
81222 -0x30,0x1F,0xA3,0x26,
81223 -0x21,0x10,0x43,0x00,
81224 -0x2F,0x03,0x44,0x90,
81225 -0xFC,0x21,0x00,0x08,
81226 -0x01,0x00,0x84,0x30,
81227 -0x01,0x80,0x03,0x3C,
81228 -0x25,0xB0,0x02,0x3C,
81229 -0x18,0x03,0x42,0x34,
81230 -0x94,0x88,0x63,0x24,
81231 -0x00,0x00,0x43,0xAC,
81232 -0x02,0x80,0x05,0x3C,
81233 -0xD4,0x5E,0xA5,0x8C,
81234 -0x04,0x00,0x02,0x24,
81235 -0x1E,0x00,0xA2,0x10,
81236 -0x05,0x00,0xA2,0x2C,
81237 -0x10,0x00,0x40,0x10,
81238 -0x05,0x00,0x02,0x24,
81239 -0x03,0x00,0x02,0x24,
81240 -0x08,0x00,0xA2,0x10,
81241 -0x00,0x19,0x04,0x00,
81242 -0x80,0x10,0x04,0x00,
81243 -0x21,0x10,0x44,0x00,
81244 -0xC0,0x10,0x02,0x00,
81245 -0x23,0x10,0x44,0x00,
81246 -0x00,0x11,0x02,0x00,
81247 -0x21,0x10,0x44,0x00,
81248 -0x40,0x19,0x02,0x00,
81249 -0xFF,0xFF,0x63,0x24,
81250 -0xFE,0xFF,0x60,0x14,
81251 -0x00,0x00,0x00,0x00,
81252 -0x08,0x00,0xE0,0x03,
81253 -0x00,0x00,0x00,0x00,
81254 -0xF3,0xFF,0xA2,0x10,
81255 -0x06,0x00,0x02,0x24,
81256 -0xF2,0xFF,0xA2,0x14,
81257 -0x80,0x10,0x04,0x00,
81258 -0x40,0x11,0x04,0x00,
81259 -0x23,0x10,0x44,0x00,
81260 -0x80,0x10,0x02,0x00,
81261 -0x21,0x10,0x44,0x00,
81262 -0x00,0x19,0x02,0x00,
81263 -0x23,0x18,0x62,0x00,
81264 -0x3B,0x22,0x00,0x08,
81265 -0x00,0x19,0x03,0x00,
81266 -0x80,0x10,0x04,0x00,
81267 -0x21,0x10,0x44,0x00,
81268 -0xC0,0x10,0x02,0x00,
81269 -0x23,0x10,0x44,0x00,
81270 -0x00,0x11,0x02,0x00,
81271 -0x21,0x10,0x44,0x00,
81272 -0x3B,0x22,0x00,0x08,
81273 -0x00,0x19,0x02,0x00,
81274 -0x01,0x80,0x03,0x3C,
81275 -0x25,0xB0,0x02,0x3C,
81276 -0x50,0x89,0x63,0x24,
81277 -0x18,0x03,0x42,0x34,
81278 -0x00,0x00,0x43,0xAC,
81279 -0x02,0x80,0x05,0x3C,
81280 -0xD4,0x5E,0xA3,0x8C,
81281 -0x05,0x00,0x02,0x24,
81282 -0x06,0x00,0x62,0x10,
81283 -0x06,0x00,0x62,0x2C,
81284 -0x0C,0x00,0x40,0x10,
81285 -0x06,0x00,0x02,0x24,
81286 -0x04,0x00,0x02,0x24,
81287 -0x0E,0x00,0x62,0x10,
81288 -0x80,0x10,0x04,0x00,
81289 -0x80,0x10,0x04,0x00,
81290 -0x21,0x10,0x44,0x00,
81291 -0x80,0x10,0x02,0x00,
81292 -0xFF,0xFF,0x42,0x24,
81293 -0xFE,0xFF,0x40,0x14,
81294 -0x00,0x00,0x00,0x00,
81295 -0x08,0x00,0xE0,0x03,
81296 -0x00,0x00,0x00,0x00,
81297 -0xF7,0xFF,0x62,0x14,
81298 -0x00,0x11,0x04,0x00,
81299 -0x23,0x10,0x44,0x00,
81300 -0x66,0x22,0x00,0x08,
81301 -0x40,0x10,0x02,0x00,
81302 -0x21,0x10,0x44,0x00,
81303 -0x66,0x22,0x00,0x08,
81304 -0x40,0x10,0x02,0x00,
81305 -0xFF,0xFF,0x85,0x30,
81306 -0x21,0x30,0x00,0x00,
81307 -0x25,0xB0,0x03,0x3C,
81308 -0x2A,0xB0,0x04,0x3C,
81309 -0xB4,0x00,0x63,0x34,
81310 -0x01,0x00,0xA2,0x24,
81311 -0x31,0x00,0x84,0x34,
81312 -0x00,0x00,0x65,0xA0,
81313 -0x00,0x00,0x85,0xA0,
81314 -0xFF,0xFF,0x45,0x30,
81315 -0x12,0x00,0xA0,0x10,
81316 -0x01,0x00,0x03,0x24,
81317 -0x28,0xB0,0x07,0x3C,
81318 -0x88,0x22,0x00,0x08,
81319 -0xFF,0xFF,0x08,0x24,
81320 -0x00,0x00,0x83,0xA0,
81321 -0x01,0x00,0x63,0x24,
81322 -0xFF,0xFF,0x63,0x30,
81323 -0x2B,0x10,0xA3,0x00,
81324 -0x09,0x00,0x40,0x14,
81325 -0x08,0x00,0xC6,0x24,
81326 -0xF9,0xFF,0x65,0x14,
81327 -0x21,0x20,0xC7,0x00,
81328 -0x01,0x00,0x63,0x24,
81329 -0xFF,0xFF,0x63,0x30,
81330 -0x2B,0x10,0xA3,0x00,
81331 -0x00,0x00,0x88,0xA0,
81332 -0xF9,0xFF,0x40,0x10,
81333 -0x08,0x00,0xC6,0x24,
81334 -0x00,0x01,0xA2,0x2C,
81335 -0x13,0x00,0x40,0x10,
81336 -0x21,0x18,0xA0,0x00,
81337 -0xFF,0x00,0x08,0x24,
81338 -0x28,0xB0,0x07,0x3C,
81339 -0x9C,0x22,0x00,0x08,
81340 -0xFF,0xFF,0x09,0x24,
81341 -0xFF,0xFF,0x43,0x30,
81342 -0x00,0x00,0xA2,0xA0,
81343 -0x00,0x01,0x62,0x2C,
81344 -0x0A,0x00,0x40,0x10,
81345 -0x08,0x00,0xC6,0x24,
81346 -0x01,0x00,0x62,0x24,
81347 -0xF9,0xFF,0x68,0x14,
81348 -0x21,0x28,0xC7,0x00,
81349 -0x00,0x01,0x02,0x24,
81350 -0xFF,0xFF,0x43,0x30,
81351 -0x00,0x01,0x62,0x2C,
81352 -0x00,0x00,0xA9,0xA0,
81353 -0xF8,0xFF,0x40,0x14,
81354 -0x08,0x00,0xC6,0x24,
81355 -0x08,0x00,0xE0,0x03,
81356 -0x00,0x00,0x00,0x00,
81357 -0xD0,0xFF,0xBD,0x27,
81358 -0x2C,0x00,0xBF,0xAF,
81359 -0x28,0x00,0xB6,0xAF,
81360 -0x24,0x00,0xB5,0xAF,
81361 -0x20,0x00,0xB4,0xAF,
81362 -0x1C,0x00,0xB3,0xAF,
81363 -0x18,0x00,0xB2,0xAF,
81364 -0x14,0x00,0xB1,0xAF,
81365 -0x10,0x00,0xB0,0xAF,
81366 -0x00,0x60,0x01,0x40,
81367 -0x01,0x00,0x21,0x34,
81368 -0x01,0x00,0x21,0x38,
81369 -0x00,0x60,0x81,0x40,
81370 -0x25,0xB0,0x10,0x3C,
81371 -0x40,0x00,0x03,0x36,
81372 -0x00,0x00,0x60,0xA4,
81373 -0xA8,0x00,0x13,0x36,
81374 -0xA0,0x00,0x12,0x36,
81375 -0xA4,0x00,0x10,0x36,
81376 -0x00,0x00,0x55,0x8E,
81377 -0x00,0x00,0x16,0x8E,
81378 -0x00,0x00,0x71,0x8E,
81379 -0x00,0x80,0x14,0x3C,
81380 -0xFC,0x37,0x02,0x24,
81381 -0x00,0x00,0x40,0xAE,
81382 -0xFD,0x00,0x04,0x24,
81383 -0x00,0x00,0x00,0xAE,
81384 -0x21,0x88,0x34,0x02,
81385 -0x00,0x00,0x74,0xAE,
81386 -0x00,0x00,0x62,0xA4,
81387 -0x73,0x22,0x00,0x0C,
81388 -0x00,0x00,0x00,0x00,
81389 -0x00,0x00,0x55,0xAE,
81390 -0x00,0x00,0x16,0xAE,
81391 -0x00,0x00,0x71,0xAE,
81392 -0x00,0x60,0x01,0x40,
81393 -0x01,0x00,0x21,0x34,
81394 -0x00,0x60,0x81,0x40,
81395 -0x2C,0x00,0xBF,0x8F,
81396 -0x28,0x00,0xB6,0x8F,
81397 -0x24,0x00,0xB5,0x8F,
81398 -0x20,0x00,0xB4,0x8F,
81399 -0x1C,0x00,0xB3,0x8F,
81400 -0x18,0x00,0xB2,0x8F,
81401 -0x14,0x00,0xB1,0x8F,
81402 -0x10,0x00,0xB0,0x8F,
81403 -0x08,0x00,0xE0,0x03,
81404 -0x30,0x00,0xBD,0x27,
81405 -0xD0,0xFF,0xBD,0x27,
81406 -0x2C,0x00,0xBF,0xAF,
81407 -0x28,0x00,0xB6,0xAF,
81408 -0x24,0x00,0xB5,0xAF,
81409 -0x20,0x00,0xB4,0xAF,
81410 -0x1C,0x00,0xB3,0xAF,
81411 -0x18,0x00,0xB2,0xAF,
81412 -0x14,0x00,0xB1,0xAF,
81413 -0x10,0x00,0xB0,0xAF,
81414 -0x00,0x60,0x01,0x40,
81415 -0x01,0x00,0x21,0x34,
81416 -0x01,0x00,0x21,0x38,
81417 -0x00,0x60,0x81,0x40,
81418 -0x25,0xB0,0x10,0x3C,
81419 -0x40,0x00,0x05,0x36,
81420 -0x00,0x00,0xA2,0x94,
81421 -0x24,0xFA,0x03,0x24,
81422 -0xA8,0x00,0x13,0x36,
81423 -0x24,0x10,0x43,0x00,
81424 -0x00,0x00,0xA2,0xA4,
81425 -0xA0,0x00,0x12,0x36,
81426 -0xA4,0x00,0x10,0x36,
81427 -0x00,0x00,0x55,0x8E,
81428 -0x00,0x00,0x16,0x8E,
81429 -0x00,0x00,0x71,0x8E,
81430 -0x00,0x80,0x14,0x3C,
81431 -0xFC,0x37,0x02,0x24,
81432 -0x00,0x00,0x40,0xAE,
81433 -0xFD,0x00,0x04,0x24,
81434 -0x00,0x00,0x00,0xAE,
81435 -0x21,0x88,0x34,0x02,
81436 -0x00,0x00,0x74,0xAE,
81437 -0x00,0x00,0xA2,0xA4,
81438 -0x73,0x22,0x00,0x0C,
81439 -0x00,0x00,0x00,0x00,
81440 -0x00,0x00,0x55,0xAE,
81441 -0x00,0x00,0x16,0xAE,
81442 -0x00,0x00,0x71,0xAE,
81443 -0x00,0x60,0x01,0x40,
81444 -0x01,0x00,0x21,0x34,
81445 -0x00,0x60,0x81,0x40,
81446 -0x2C,0x00,0xBF,0x8F,
81447 -0x28,0x00,0xB6,0x8F,
81448 -0x24,0x00,0xB5,0x8F,
81449 -0x20,0x00,0xB4,0x8F,
81450 -0x1C,0x00,0xB3,0x8F,
81451 -0x18,0x00,0xB2,0x8F,
81452 -0x14,0x00,0xB1,0x8F,
81453 -0x10,0x00,0xB0,0x8F,
81454 -0x08,0x00,0xE0,0x03,
81455 -0x30,0x00,0xBD,0x27,
81456 -0xD0,0xFF,0xBD,0x27,
81457 -0x2C,0x00,0xBF,0xAF,
81458 -0x28,0x00,0xB6,0xAF,
81459 -0x24,0x00,0xB5,0xAF,
81460 -0x20,0x00,0xB4,0xAF,
81461 -0x1C,0x00,0xB3,0xAF,
81462 -0x18,0x00,0xB2,0xAF,
81463 -0x14,0x00,0xB1,0xAF,
81464 -0x10,0x00,0xB0,0xAF,
81465 -0x00,0x60,0x01,0x40,
81466 -0x01,0x00,0x21,0x34,
81467 -0x01,0x00,0x21,0x38,
81468 -0x00,0x60,0x81,0x40,
81469 -0x25,0xB0,0x10,0x3C,
81470 -0x40,0x00,0x05,0x36,
81471 -0x00,0x00,0xA2,0x94,
81472 -0xAF,0xFF,0x03,0x24,
81473 -0xA8,0x00,0x13,0x36,
81474 -0x24,0x10,0x43,0x00,
81475 -0x00,0x00,0xA2,0xA4,
81476 -0xA0,0x00,0x12,0x36,
81477 -0xA4,0x00,0x10,0x36,
81478 -0x00,0x00,0x55,0x8E,
81479 -0x00,0x00,0x16,0x8E,
81480 -0x00,0x00,0x71,0x8E,
81481 -0x00,0x80,0x14,0x3C,
81482 -0xFC,0x37,0x02,0x24,
81483 -0x00,0x00,0x40,0xAE,
81484 -0xFD,0x00,0x04,0x24,
81485 -0x00,0x00,0x00,0xAE,
81486 -0x21,0x88,0x34,0x02,
81487 -0x00,0x00,0x74,0xAE,
81488 -0x00,0x00,0xA2,0xA4,
81489 -0x73,0x22,0x00,0x0C,
81490 -0x00,0x00,0x00,0x00,
81491 -0x00,0x00,0x55,0xAE,
81492 -0x00,0x00,0x16,0xAE,
81493 -0x00,0x00,0x71,0xAE,
81494 -0x00,0x60,0x01,0x40,
81495 -0x01,0x00,0x21,0x34,
81496 -0x00,0x60,0x81,0x40,
81497 -0x2C,0x00,0xBF,0x8F,
81498 -0x28,0x00,0xB6,0x8F,
81499 -0x24,0x00,0xB5,0x8F,
81500 -0x20,0x00,0xB4,0x8F,
81501 -0x1C,0x00,0xB3,0x8F,
81502 -0x18,0x00,0xB2,0x8F,
81503 -0x14,0x00,0xB1,0x8F,
81504 -0x10,0x00,0xB0,0x8F,
81505 -0x08,0x00,0xE0,0x03,
81506 -0x30,0x00,0xBD,0x27,
81507 -0x00,0x60,0x01,0x40,
81508 -0x01,0x00,0x21,0x34,
81509 -0x01,0x00,0x21,0x38,
81510 -0x00,0x60,0x81,0x40,
81511 -0x25,0xB0,0x04,0x3C,
81512 -0x40,0x00,0x84,0x34,
81513 -0x00,0x00,0x82,0x94,
81514 -0xD8,0xFD,0x03,0x24,
81515 -0x24,0x10,0x43,0x00,
81516 -0xFC,0x37,0x03,0x24,
81517 -0x00,0x00,0x82,0xA4,
81518 -0x00,0x00,0x83,0xA4,
81519 -0x00,0x60,0x01,0x40,
81520 -0x01,0x00,0x21,0x34,
81521 -0x00,0x60,0x81,0x40,
81522 -0x08,0x00,0xE0,0x03,
81523 -0x00,0x00,0x00,0x00,
81524 -0xFF,0x00,0x84,0x30,
81525 -0xFF,0xFF,0xAC,0x30,
81526 -0xC0,0x48,0x04,0x00,
81527 -0x00,0x60,0x0E,0x40,
81528 -0x01,0x00,0xC1,0x35,
81529 -0x01,0x00,0x21,0x38,
81530 -0x00,0x60,0x81,0x40,
81531 -0x25,0xB0,0x02,0x3C,
81532 -0x40,0x02,0x4D,0x34,
81533 -0xF8,0xFF,0xE7,0x24,
81534 -0x21,0x40,0x00,0x00,
81535 -0x01,0x00,0x0F,0x24,
81536 -0x44,0x02,0x4B,0x34,
81537 -0x72,0x23,0x00,0x08,
81538 -0x01,0x80,0x0A,0x3C,
81539 -0x28,0x00,0x0F,0x11,
81540 -0x00,0x00,0x00,0x00,
81541 -0x01,0x00,0xE2,0x90,
81542 -0x00,0x00,0xE4,0x90,
81543 -0x02,0x00,0xE3,0x90,
81544 -0x03,0x00,0xE5,0x90,
81545 -0x00,0x12,0x02,0x00,
81546 -0x25,0x20,0x82,0x00,
81547 -0x00,0x1C,0x03,0x00,
81548 -0x25,0x20,0x83,0x00,
81549 -0x21,0x10,0x28,0x01,
81550 -0x00,0x2E,0x05,0x00,
81551 -0x01,0x00,0x08,0x25,
81552 -0x25,0x20,0x85,0x00,
81553 -0x25,0x10,0x4A,0x00,
81554 -0x06,0x00,0x03,0x2D,
81555 -0x00,0x00,0x64,0xAD,
81556 -0x04,0x00,0xE7,0x24,
81557 -0x00,0x00,0xA2,0xAD,
81558 -0x12,0x00,0x60,0x10,
81559 -0x00,0x00,0x00,0x00,
81560 -0xEA,0xFF,0x00,0x15,
81561 -0x00,0x00,0x00,0x00,
81562 -0x00,0x00,0xC2,0x90,
81563 -0x01,0x00,0xC3,0x90,
81564 -0x04,0x00,0xE7,0x24,
81565 -0x00,0x14,0x02,0x00,
81566 -0x25,0x10,0x82,0x01,
81567 -0x00,0x1E,0x03,0x00,
81568 -0x25,0x20,0x43,0x00,
81569 -0x21,0x10,0x28,0x01,
81570 -0x01,0x00,0x08,0x25,
81571 -0x25,0x10,0x4A,0x00,
81572 -0x06,0x00,0x03,0x2D,
81573 -0x00,0x00,0x64,0xAD,
81574 -0x00,0x00,0xA2,0xAD,
81575 -0xF0,0xFF,0x60,0x14,
81576 -0x00,0x00,0x00,0x00,
81577 -0x00,0x60,0x8E,0x40,
81578 -0x08,0x00,0xE0,0x03,
81579 -0x00,0x00,0x00,0x00,
81580 -0x03,0x00,0xC2,0x90,
81581 -0x02,0x00,0xC4,0x90,
81582 -0x04,0x00,0xC3,0x90,
81583 -0x05,0x00,0xC5,0x90,
81584 -0x64,0x23,0x00,0x08,
81585 -0x00,0x12,0x02,0x00,
81586 -0xFF,0xFF,0x84,0x30,
81587 -0x42,0xB0,0x08,0x3C,
81588 -0x80,0x10,0x04,0x00,
81589 -0x21,0x10,0x48,0x00,
81590 -0x04,0x00,0x46,0xAC,
81591 -0x00,0x00,0x07,0x91,
81592 -0x40,0x18,0x04,0x00,
81593 -0x03,0x00,0x06,0x24,
81594 -0xFF,0x00,0xE7,0x30,
81595 -0x04,0x30,0x66,0x00,
81596 -0x01,0x00,0x02,0x24,
81597 -0x04,0x10,0x62,0x00,
81598 -0x25,0x30,0xC7,0x00,
81599 -0xFF,0xFF,0xA5,0x30,
81600 -0x25,0x10,0x47,0x00,
81601 -0x02,0x00,0xA0,0x14,
81602 -0xFF,0x00,0xC7,0x30,
81603 -0xFF,0x00,0x47,0x30,
81604 -0x42,0xB0,0x02,0x3C,
81605 -0x00,0x00,0x47,0xA0,
81606 -0x08,0x00,0xE0,0x03,
81607 -0x00,0x00,0x00,0x00,
81608 -0x14,0x00,0x83,0x90,
81609 -0x01,0x00,0x02,0x24,
81610 -0x08,0x00,0x86,0xAC,
81611 -0x18,0x00,0x85,0xAC,
81612 -0x00,0x00,0x84,0xAC,
81613 -0x03,0x00,0x62,0x10,
81614 -0x04,0x00,0x84,0xAC,
81615 -0x99,0x59,0x00,0x08,
81616 -0x0C,0x00,0x80,0xAC,
81617 -0x0C,0x00,0x82,0x8C,
81618 -0x99,0x59,0x00,0x08,
81619 -0x10,0x00,0x82,0xAC,
81620 -0xC8,0xFF,0xBD,0x27,
81621 -0x28,0x00,0xB6,0xAF,
81622 -0x25,0xB0,0x02,0x3C,
81623 -0x02,0x80,0x16,0x3C,
81624 -0x2C,0x00,0xB7,0xAF,
81625 -0x24,0x00,0xB5,0xAF,
81626 -0x20,0x00,0xB4,0xAF,
81627 -0x1C,0x00,0xB3,0xAF,
81628 -0x18,0x00,0xB2,0xAF,
81629 -0x30,0x00,0xBF,0xAF,
81630 -0x14,0x00,0xB1,0xAF,
81631 -0x10,0x00,0xB0,0xAF,
81632 -0x18,0x03,0x55,0x34,
81633 -0x01,0x80,0x17,0x3C,
81634 -0x02,0x80,0x13,0x3C,
81635 -0x02,0x80,0x14,0x3C,
81636 -0x08,0xE4,0xD2,0x26,
81637 -0xB8,0x8E,0xE2,0x26,
81638 -0x00,0x00,0xA2,0xAE,
81639 -0x08,0xE4,0xD0,0x8E,
81640 -0x00,0x60,0x01,0x40,
81641 -0x01,0x00,0x21,0x34,
81642 -0x01,0x00,0x21,0x38,
81643 -0x00,0x60,0x81,0x40,
81644 -0x14,0x5E,0x71,0x8E,
81645 -0x00,0x00,0x00,0x00,
81646 -0x25,0x00,0x20,0x12,
81647 -0x00,0x00,0x00,0x00,
81648 -0x14,0x5E,0x60,0xAE,
81649 -0x00,0x60,0x01,0x40,
81650 -0x01,0x00,0x21,0x34,
81651 -0x00,0x60,0x81,0x40,
81652 -0x23,0x00,0x12,0x12,
81653 -0x08,0x0C,0x84,0x26,
81654 -0x14,0x00,0x03,0x92,
81655 -0x01,0x00,0x02,0x24,
81656 -0x2B,0x00,0x62,0x10,
81657 -0x00,0x00,0x00,0x00,
81658 -0x0A,0x00,0x60,0x14,
81659 -0x02,0x00,0x02,0x24,
81660 -0x0C,0x00,0x03,0x8E,
81661 -0x00,0x00,0x00,0x00,
81662 -0x2B,0x10,0x23,0x02,
81663 -0x1E,0x00,0x40,0x10,
81664 -0x23,0x10,0x71,0x00,
81665 -0x0C,0x00,0x02,0xAE,
81666 -0x00,0x00,0x10,0x8E,
81667 -0xCE,0x23,0x00,0x08,
81668 -0x00,0x00,0x00,0x00,
81669 -0xFC,0xFF,0x62,0x14,
81670 -0x00,0x00,0x00,0x00,
81671 -0x0C,0x00,0x03,0x8E,
81672 -0x00,0x00,0x00,0x00,
81673 -0xF8,0xFF,0x60,0x10,
81674 -0x2B,0x10,0x23,0x02,
81675 -0xF5,0xFF,0x40,0x14,
81676 -0x23,0x10,0x71,0x00,
81677 -0x08,0x00,0x02,0x8E,
81678 -0x18,0x00,0x04,0x8E,
81679 -0x09,0xF8,0x40,0x00,
81680 -0x0C,0x00,0x00,0xAE,
81681 -0x00,0x00,0x10,0x8E,
81682 -0xCE,0x23,0x00,0x08,
81683 -0x00,0x00,0x00,0x00,
81684 -0x00,0x60,0x01,0x40,
81685 -0x01,0x00,0x21,0x34,
81686 -0x00,0x60,0x81,0x40,
81687 -0x08,0x0C,0x84,0x26,
81688 -0x21,0x28,0x00,0x00,
81689 -0x21,0x30,0x00,0x00,
81690 -0x91,0x3C,0x00,0x0C,
81691 -0x21,0x38,0x00,0x00,
81692 -0xC0,0x23,0x00,0x08,
81693 -0xB8,0x8E,0xE2,0x26,
81694 -0x08,0x00,0x02,0x8E,
81695 -0x18,0x00,0x04,0x8E,
81696 -0x09,0xF8,0x40,0x00,
81697 -0x00,0x00,0x00,0x00,
81698 -0xDC,0x23,0x00,0x08,
81699 -0x0C,0x00,0x02,0xAE,
81700 -0x0C,0x00,0x03,0x8E,
81701 -0x00,0x00,0x00,0x00,
81702 -0x2B,0x10,0x23,0x02,
81703 -0xD9,0xFF,0x40,0x14,
81704 -0x23,0x10,0x71,0x00,
81705 -0x08,0x00,0x02,0x8E,
81706 -0x18,0x00,0x04,0x8E,
81707 -0x09,0xF8,0x40,0x00,
81708 -0x00,0x00,0x00,0x00,
81709 -0x10,0x00,0x03,0x8E,
81710 -0x00,0x00,0x00,0x00,
81711 -0x0C,0x00,0x03,0xAE,
81712 -0x00,0x00,0x10,0x8E,
81713 -0xCE,0x23,0x00,0x08,
81714 -0x00,0x00,0x00,0x00,
81715 -0x02,0x80,0x02,0x3C,
81716 -0x9C,0x57,0x42,0x24,
81717 -0xC0,0x20,0x04,0x00,
81718 -0x21,0x20,0x82,0x00,
81719 -0x21,0x28,0x00,0x00,
81720 -0x00,0x60,0x06,0x40,
81721 -0x01,0x00,0xC1,0x34,
81722 -0x01,0x00,0x21,0x38,
81723 -0x00,0x60,0x81,0x40,
81724 -0x00,0x00,0x82,0x8C,
81725 -0x00,0x00,0x00,0x00,
81726 -0x09,0x00,0x44,0x10,
81727 -0x00,0x00,0x00,0x00,
81728 -0x04,0x00,0x43,0x8C,
81729 -0x21,0x28,0x40,0x00,
81730 -0x00,0x00,0x42,0x8C,
81731 -0x00,0x00,0x00,0x00,
81732 -0x00,0x00,0x62,0xAC,
81733 -0x04,0x00,0x43,0xAC,
81734 -0x00,0x00,0xA5,0xAC,
81735 -0x04,0x00,0xA5,0xAC,
81736 -0x00,0x60,0x86,0x40,
81737 -0x08,0x00,0xE0,0x03,
81738 -0x21,0x10,0xA0,0x00,
81739 -0x21,0x18,0x80,0x00,
81740 -0xE8,0xFF,0xBD,0x27,
81741 -0x01,0x01,0x62,0x2C,
81742 -0x10,0x00,0xBF,0xAF,
81743 -0x01,0x00,0x04,0x24,
81744 -0x01,0x02,0x65,0x2C,
81745 -0x0A,0x00,0x40,0x14,
81746 -0x21,0x30,0x00,0x00,
81747 -0x02,0x00,0x04,0x24,
81748 -0x07,0x00,0xA0,0x14,
81749 -0x01,0x08,0x62,0x2C,
81750 -0x05,0x00,0x40,0x14,
81751 -0x03,0x00,0x04,0x24,
81752 -0x10,0x00,0xBF,0x8F,
81753 -0x21,0x10,0xC0,0x00,
81754 -0x08,0x00,0xE0,0x03,
81755 -0x18,0x00,0xBD,0x27,
81756 -0x0D,0x24,0x00,0x0C,
81757 -0x00,0x00,0x00,0x00,
81758 -0x10,0x00,0xBF,0x8F,
81759 -0x21,0x30,0x40,0x00,
81760 -0x21,0x10,0xC0,0x00,
81761 -0x08,0x00,0xE0,0x03,
81762 -0x18,0x00,0xBD,0x27,
81763 -0x00,0x60,0x06,0x40,
81764 -0x01,0x00,0xC1,0x34,
81765 -0x01,0x00,0x21,0x38,
81766 -0x00,0x60,0x81,0x40,
81767 -0x10,0x00,0x83,0x8C,
81768 -0x02,0x80,0x02,0x3C,
81769 -0x9C,0x57,0x42,0x24,
81770 -0xC0,0x18,0x03,0x00,
81771 -0x21,0x18,0x62,0x00,
81772 -0x00,0x00,0x65,0x8C,
81773 -0x02,0x80,0x07,0x3C,
81774 -0x02,0x80,0x08,0x3C,
81775 -0x00,0x00,0x85,0xAC,
81776 -0x04,0x00,0xA4,0xAC,
81777 -0x04,0x00,0x83,0xAC,
81778 -0xD0,0x5E,0xE5,0x8C,
81779 -0x00,0x00,0x00,0x00,
81780 -0x05,0x00,0xA0,0x10,
81781 -0x00,0x00,0x64,0xAC,
81782 -0xBC,0x5E,0x02,0x8D,
81783 -0xD0,0x5E,0xE0,0xAC,
81784 -0x25,0x10,0x45,0x00,
81785 -0xBC,0x5E,0x02,0xAD,
81786 -0x00,0x60,0x86,0x40,
81787 -0x08,0x00,0xE0,0x03,
81788 -0x00,0x00,0x00,0x00,
81789 -0xFF,0x00,0xA5,0x30,
81790 -0x25,0xB0,0x02,0x3C,
81791 -0x21,0x28,0xA2,0x00,
81792 -0xFF,0x00,0x84,0x30,
81793 -0x60,0x01,0xA4,0xA0,
81794 -0x08,0x00,0xE0,0x03,
81795 -0x00,0x00,0x00,0x00,
81796 -0xFF,0x00,0x84,0x30,
81797 -0x01,0x00,0x03,0x24,
81798 -0x10,0x00,0x02,0x3C,
81799 -0x04,0x18,0x83,0x00,
81800 -0xF0,0x70,0x42,0x34,
81801 -0x15,0x00,0x84,0x2C,
81802 -0x06,0x00,0x80,0x10,
81803 -0x24,0x28,0x62,0x00,
81804 -0x0F,0x00,0x63,0x30,
81805 -0x04,0x00,0xA0,0x14,
81806 -0x01,0x00,0x02,0x24,
81807 -0x02,0x00,0x60,0x14,
81808 -0x02,0x00,0x02,0x24,
81809 -0x21,0x10,0x00,0x00,
81810 -0x08,0x00,0xE0,0x03,
81811 -0x00,0x00,0x00,0x00,
81812 -0xFF,0x00,0xA5,0x30,
81813 -0x04,0x00,0xA2,0x2C,
81814 -0x14,0x00,0x40,0x10,
81815 -0xFF,0x00,0x84,0x30,
81816 -0x02,0x80,0x03,0x3C,
81817 -0xDE,0x5D,0x62,0x90,
81818 -0x00,0x00,0x00,0x00,
81819 -0xEF,0xFF,0x42,0x24,
81820 -0xFF,0x00,0x42,0x30,
81821 -0x02,0x00,0x42,0x2C,
81822 -0x0E,0x00,0x40,0x10,
81823 -0x02,0x00,0x03,0x24,
81824 -0x24,0x00,0x83,0x10,
81825 -0x0F,0x10,0x02,0x3C,
81826 -0x03,0x00,0x82,0x28,
81827 -0x14,0x00,0x40,0x10,
81828 -0x03,0x00,0x02,0x24,
81829 -0x01,0x00,0x02,0x24,
81830 -0x2F,0x00,0x82,0x10,
81831 -0x00,0x00,0x00,0x00,
81832 -0xFF,0x1F,0x02,0x3C,
81833 -0x08,0x00,0xE0,0x03,
81834 -0xFF,0xFF,0x42,0x34,
81835 -0x08,0x00,0xE0,0x03,
81836 -0x00,0x00,0x00,0x00,
81837 -0x35,0x00,0x83,0x10,
81838 -0x0F,0x1F,0x02,0x3C,
81839 -0x03,0x00,0x82,0x28,
81840 -0x16,0x00,0x40,0x10,
81841 -0x03,0x00,0x02,0x24,
81842 -0x01,0x00,0x02,0x24,
81843 -0xF4,0xFF,0x82,0x14,
81844 -0x00,0x00,0x00,0x00,
81845 -0x0F,0x1F,0x02,0x3C,
81846 -0x08,0x00,0xE0,0x03,
81847 -0x00,0x80,0x42,0x34,
81848 -0xF0,0xFF,0x82,0x14,
81849 -0xFF,0x1F,0x02,0x3C,
81850 -0x01,0x00,0x02,0x24,
81851 -0x29,0x00,0xA2,0x10,
81852 -0x0F,0x10,0x02,0x3C,
81853 -0x02,0x00,0xA2,0x28,
81854 -0x1F,0x00,0x40,0x14,
81855 -0x00,0x00,0x00,0x00,
81856 -0x28,0x00,0xA3,0x10,
81857 -0x00,0x00,0x00,0x00,
81858 -0xE5,0xFF,0xA4,0x14,
81859 -0x00,0x00,0x00,0x00,
81860 -0x0F,0x10,0x02,0x3C,
81861 -0x08,0x00,0xE0,0x03,
81862 -0x00,0xF0,0x42,0x34,
81863 -0xE1,0xFF,0x82,0x14,
81864 -0xFF,0x1F,0x02,0x3C,
81865 -0x01,0x00,0x02,0x24,
81866 -0x1C,0x00,0xA2,0x10,
81867 -0x0F,0x00,0x02,0x3C,
81868 -0x02,0x00,0xA2,0x28,
81869 -0x0B,0x00,0x40,0x14,
81870 -0x00,0x00,0x00,0x00,
81871 -0x1C,0x00,0xA3,0x10,
81872 -0x00,0x00,0x00,0x00,
81873 -0xD6,0xFF,0xA4,0x14,
81874 -0x00,0x00,0x00,0x00,
81875 -0x0F,0x00,0x02,0x3C,
81876 -0x08,0x00,0xE0,0x03,
81877 -0x00,0xF0,0x42,0x34,
81878 -0x0F,0x10,0x02,0x3C,
81879 -0x08,0x00,0xE0,0x03,
81880 -0x00,0x80,0x42,0x34,
81881 -0xCE,0xFF,0xA0,0x14,
81882 -0x00,0x00,0x00,0x00,
81883 -0x0F,0x00,0x02,0x3C,
81884 -0x08,0x00,0xE0,0x03,
81885 -0x15,0xF0,0x42,0x34,
81886 -0xC9,0xFF,0xA0,0x14,
81887 -0x00,0x00,0x00,0x00,
81888 -0x0F,0x10,0x02,0x3C,
81889 -0x08,0x00,0xE0,0x03,
81890 -0x15,0xF0,0x42,0x34,
81891 -0x08,0x00,0xE0,0x03,
81892 -0x00,0xF0,0x42,0x34,
81893 -0x08,0x00,0xE0,0x03,
81894 -0x10,0xF0,0x42,0x34,
81895 -0x08,0x00,0xE0,0x03,
81896 -0x10,0xF0,0x42,0x34,
81897 -0x0F,0x10,0x02,0x3C,
81898 -0x08,0x00,0xE0,0x03,
81899 -0x05,0xF0,0x42,0x34,
81900 -0x0F,0x00,0x02,0x3C,
81901 -0x08,0x00,0xE0,0x03,
81902 -0x05,0xF0,0x42,0x34,
81903 -0xC0,0x40,0x04,0x00,
81904 -0x21,0x18,0x04,0x01,
81905 -0x80,0x18,0x03,0x00,
81906 -0x21,0x18,0x64,0x00,
81907 -0x02,0x80,0x02,0x3C,
81908 -0x80,0x18,0x03,0x00,
81909 -0x30,0x1F,0x42,0x24,
81910 -0x21,0x18,0x62,0x00,
81911 -0x18,0x24,0x66,0x8C,
81912 -0x21,0x38,0x60,0x00,
81913 -0x1E,0x24,0x60,0xA0,
81914 -0x1F,0x24,0x60,0xA0,
81915 -0x1C,0x00,0x05,0x24,
81916 -0xDA,0x24,0x00,0x08,
81917 -0x01,0x00,0x03,0x24,
81918 -0x08,0x00,0xA0,0x04,
81919 -0x21,0x10,0x04,0x01,
81920 -0x04,0x10,0xA3,0x00,
81921 -0x24,0x10,0xC2,0x00,
81922 -0xFB,0xFF,0x40,0x10,
81923 -0xFF,0xFF,0xA5,0x24,
81924 -0x01,0x00,0xA5,0x24,
81925 -0x1E,0x24,0xE5,0xA0,
81926 -0x21,0x10,0x04,0x01,
81927 -0x80,0x10,0x02,0x00,
81928 -0x21,0x10,0x44,0x00,
81929 -0x02,0x80,0x03,0x3C,
81930 -0x80,0x10,0x02,0x00,
81931 -0x30,0x1F,0x63,0x24,
81932 -0x21,0x18,0x43,0x00,
81933 -0x18,0x24,0x66,0x8C,
81934 -0x21,0x28,0x00,0x00,
81935 -0xEE,0x24,0x00,0x08,
81936 -0x01,0x00,0x07,0x24,
81937 -0x1D,0x00,0xA2,0x28,
81938 -0x08,0x00,0x40,0x10,
81939 -0x00,0x00,0x00,0x00,
81940 -0x04,0x10,0xA7,0x00,
81941 -0x24,0x10,0xC2,0x00,
81942 -0xFA,0xFF,0x40,0x10,
81943 -0x01,0x00,0xA5,0x24,
81944 -0xFF,0xFF,0xA5,0x24,
81945 -0x08,0x00,0xE0,0x03,
81946 -0x1F,0x24,0x65,0xA0,
81947 -0x08,0x00,0xE0,0x03,
81948 -0x00,0x00,0x00,0x00,
81949 -0xD8,0xFF,0xBD,0x27,
81950 -0x02,0x80,0x02,0x3C,
81951 -0x20,0x00,0xB4,0xAF,
81952 -0x1C,0x00,0xB3,0xAF,
81953 -0x14,0x00,0xB1,0xAF,
81954 -0x10,0x00,0xB0,0xAF,
81955 -0x21,0x88,0x00,0x00,
81956 -0x30,0x1F,0x50,0x24,
81957 -0xFF,0xF1,0x14,0x24,
81958 -0x25,0xB0,0x13,0x3C,
81959 -0x24,0x00,0xBF,0xAF,
81960 -0x08,0x25,0x00,0x08,
81961 -0x18,0x00,0xB2,0xAF,
81962 -0x01,0x00,0x31,0x26,
81963 -0x20,0x00,0x22,0x2E,
81964 -0x2A,0x00,0x40,0x10,
81965 -0x94,0x00,0x10,0x26,
81966 -0x1C,0x24,0x06,0x8E,
81967 -0x01,0x00,0x03,0x24,
81968 -0x02,0x13,0x06,0x00,
81969 -0x01,0x00,0x45,0x30,
81970 -0xF7,0xFF,0xA3,0x14,
81971 -0x42,0x1A,0x06,0x00,
81972 -0x0C,0x24,0x02,0x8E,
81973 -0x07,0x00,0x64,0x30,
81974 -0x02,0x11,0x02,0x00,
81975 -0x7F,0x00,0x43,0x30,
81976 -0x27,0x00,0x85,0x10,
81977 -0x07,0x00,0xD2,0x30,
81978 -0x02,0x00,0x82,0x28,
81979 -0x31,0x00,0x40,0x14,
81980 -0x02,0x00,0x02,0x24,
81981 -0x28,0x00,0x82,0x10,
81982 -0x03,0x00,0x02,0x24,
81983 -0x31,0x00,0x82,0x10,
81984 -0x1A,0x00,0x62,0x2C,
81985 -0x1C,0x24,0x02,0x8E,
81986 -0x04,0x00,0x43,0x2E,
81987 -0x42,0x12,0x02,0x00,
81988 -0x0A,0x00,0x60,0x10,
81989 -0x07,0x00,0x44,0x30,
81990 -0x6E,0x24,0x00,0x0C,
81991 -0x21,0x28,0x40,0x02,
81992 -0x80,0x18,0x12,0x00,
81993 -0x21,0x18,0x73,0x00,
81994 -0x14,0x24,0x04,0x8E,
81995 -0x84,0x01,0x65,0x8C,
81996 -0x24,0x20,0x82,0x00,
81997 -0x24,0x28,0xA4,0x00,
81998 -0x18,0x24,0x05,0xAE,
81999 -0xC9,0x24,0x00,0x0C,
82000 -0x21,0x20,0x20,0x02,
82001 -0x21,0x10,0x33,0x02,
82002 -0x01,0x00,0x31,0x26,
82003 -0x60,0x01,0x43,0x90,
82004 -0x20,0x00,0x22,0x2E,
82005 -0xD8,0xFF,0x40,0x14,
82006 -0x94,0x00,0x10,0x26,
82007 -0x24,0x00,0xBF,0x8F,
82008 -0x20,0x00,0xB4,0x8F,
82009 -0x1C,0x00,0xB3,0x8F,
82010 -0x18,0x00,0xB2,0x8F,
82011 -0x14,0x00,0xB1,0x8F,
82012 -0x10,0x00,0xB0,0x8F,
82013 -0x21,0x10,0x00,0x00,
82014 -0x08,0x00,0xE0,0x03,
82015 -0x28,0x00,0xBD,0x27,
82016 -0x32,0x00,0x62,0x2C,
82017 -0xDF,0xFF,0x40,0x10,
82018 -0x24,0x10,0xD4,0x00,
82019 -0x00,0x04,0x42,0x34,
82020 -0x1B,0x25,0x00,0x08,
82021 -0x1C,0x24,0x02,0xAE,
82022 -0x38,0x00,0x62,0x2C,
82023 -0x0D,0x00,0x40,0x14,
82024 -0x14,0x00,0x62,0x2C,
82025 -0x24,0x10,0xD4,0x00,
82026 -0x00,0x02,0x42,0x34,
82027 -0x1B,0x25,0x00,0x08,
82028 -0x1C,0x24,0x02,0xAE,
82029 -0xD3,0xFF,0x80,0x14,
82030 -0x24,0x10,0xD4,0x00,
82031 -0x1B,0x25,0x00,0x08,
82032 -0x1C,0x24,0x02,0xAE,
82033 -0xCF,0xFF,0x40,0x14,
82034 -0x24,0x10,0xD4,0x00,
82035 -0x3E,0x25,0x00,0x08,
82036 -0x00,0x04,0x42,0x34,
82037 -0xCB,0xFF,0x40,0x10,
82038 -0x24,0x10,0xD4,0x00,
82039 -0x00,0x06,0x42,0x34,
82040 -0x1B,0x25,0x00,0x08,
82041 -0x1C,0x24,0x02,0xAE,
82042 -0x08,0x00,0xE0,0x03,
82043 -0x00,0x00,0x00,0x00,
82044 -0xE0,0xFF,0xBD,0x27,
82045 -0x10,0x00,0xB0,0xAF,
82046 -0xC0,0x80,0x04,0x00,
82047 -0x21,0x80,0x04,0x02,
82048 -0x80,0x80,0x10,0x00,
82049 -0x21,0x80,0x04,0x02,
82050 -0x02,0x80,0x02,0x3C,
82051 -0x30,0x1F,0x42,0x24,
82052 -0x80,0x80,0x10,0x00,
82053 -0x18,0x00,0xBF,0xAF,
82054 -0x14,0x00,0xB1,0xAF,
82055 -0x21,0x80,0x02,0x02,
82056 -0x1C,0x24,0x03,0x8E,
82057 -0x25,0xB0,0x02,0x3C,
82058 -0x80,0x01,0x45,0x34,
82059 -0x07,0x00,0x63,0x30,
82060 -0x80,0x18,0x03,0x00,
82061 -0x21,0x18,0x62,0x00,
82062 -0x00,0x00,0xA6,0x90,
82063 -0x14,0x24,0x05,0x8E,
82064 -0x84,0x01,0x62,0x8C,
82065 -0x21,0x88,0x80,0x00,
82066 -0x24,0x10,0x45,0x00,
82067 -0xC9,0x24,0x00,0x0C,
82068 -0x18,0x24,0x02,0xAE,
82069 -0x1E,0x24,0x04,0x92,
82070 -0xFF,0x00,0x25,0x32,
82071 -0x18,0x00,0xBF,0x8F,
82072 -0x14,0x00,0xB1,0x8F,
82073 -0x10,0x00,0xB0,0x8F,
82074 -0x57,0x24,0x00,0x08,
82075 -0x20,0x00,0xBD,0x27,
82076 -0xFF,0xFF,0x84,0x30,
82077 -0x00,0x02,0x82,0x30,
82078 -0x07,0x00,0x03,0x24,
82079 -0x0D,0x00,0x40,0x14,
82080 -0x0B,0x00,0x84,0x30,
82081 -0x0C,0x00,0x82,0x2C,
82082 -0x0A,0x00,0x40,0x10,
82083 -0x00,0x00,0x00,0x00,
82084 -0x02,0x80,0x03,0x3C,
82085 -0x80,0x10,0x04,0x00,
82086 -0x74,0xED,0x63,0x24,
82087 -0x21,0x10,0x43,0x00,
82088 -0x00,0x00,0x44,0x8C,
82089 -0x00,0x00,0x00,0x00,
82090 -0x08,0x00,0x80,0x00,
82091 -0x00,0x00,0x00,0x00,
82092 -0x07,0x00,0x03,0x24,
82093 -0x08,0x00,0xE0,0x03,
82094 -0x21,0x10,0x60,0x00,
82095 -0x06,0x00,0x03,0x24,
82096 -0x08,0x00,0xE0,0x03,
82097 -0x21,0x10,0x60,0x00,
82098 -0x05,0x00,0x03,0x24,
82099 -0x08,0x00,0xE0,0x03,
82100 -0x21,0x10,0x60,0x00,
82101 -0x04,0x00,0x03,0x24,
82102 -0x08,0x00,0xE0,0x03,
82103 -0x21,0x10,0x60,0x00,
82104 -0x03,0x00,0x03,0x24,
82105 -0x08,0x00,0xE0,0x03,
82106 -0x21,0x10,0x60,0x00,
82107 -0x02,0x00,0x03,0x24,
82108 -0x08,0x00,0xE0,0x03,
82109 -0x21,0x10,0x60,0x00,
82110 -0x01,0x00,0x03,0x24,
82111 -0x08,0x00,0xE0,0x03,
82112 -0x21,0x10,0x60,0x00,
82113 -0x21,0x18,0x00,0x00,
82114 -0x08,0x00,0xE0,0x03,
82115 -0x21,0x10,0x60,0x00,
82116 -0xA8,0xFF,0xBD,0x27,
82117 -0x02,0x80,0x02,0x3C,
82118 -0x50,0x00,0xBE,0xAF,
82119 -0x4C,0x00,0xB7,0xAF,
82120 -0x48,0x00,0xB6,0xAF,
82121 -0x44,0x00,0xB5,0xAF,
82122 -0x3C,0x00,0xB3,0xAF,
82123 -0x38,0x00,0xB2,0xAF,
82124 -0x54,0x00,0xBF,0xAF,
82125 -0x40,0x00,0xB4,0xAF,
82126 -0x34,0x00,0xB1,0xAF,
82127 -0x30,0x00,0xB0,0xAF,
82128 -0xA4,0xED,0x42,0x24,
82129 -0x00,0x00,0x54,0x8C,
82130 -0x21,0x98,0x00,0x00,
82131 -0x21,0xA8,0x00,0x00,
82132 -0x21,0xB0,0x00,0x00,
82133 -0x10,0x00,0xA0,0xAF,
82134 -0x21,0xB8,0x00,0x00,
82135 -0x14,0x00,0xA0,0xAF,
82136 -0x21,0xF0,0x00,0x00,
82137 -0x18,0x00,0xA0,0xAF,
82138 -0x1C,0x00,0xA0,0xAF,
82139 -0x20,0x00,0xA0,0xAF,
82140 -0x24,0x00,0xA0,0xAF,
82141 -0x28,0x00,0xA0,0xAF,
82142 -0x2C,0x00,0xA0,0xAF,
82143 -0x21,0x90,0x80,0x02,
82144 -0x1C,0x24,0x42,0x8E,
82145 -0x00,0x00,0x00,0x00,
82146 -0x02,0x13,0x02,0x00,
82147 -0x01,0x00,0x42,0x30,
82148 -0x68,0x00,0x40,0x10,
82149 -0x25,0xB0,0x02,0x3C,
82150 -0x21,0x10,0x62,0x02,
82151 -0x60,0x01,0x44,0x90,
82152 -0x04,0x24,0x43,0x8E,
82153 -0x00,0x24,0x46,0x8E,
82154 -0xFF,0x00,0x8B,0x30,
82155 -0x02,0x80,0x04,0x3C,
82156 -0x30,0x1F,0x84,0x24,
82157 -0x21,0x10,0x64,0x01,
82158 -0xE7,0x04,0x44,0x90,
82159 -0xCA,0x04,0x45,0x90,
82160 -0xE8,0x23,0x47,0x8E,
82161 -0x18,0x00,0x64,0x00,
82162 -0x12,0x18,0x00,0x00,
82163 -0x00,0x00,0x00,0x00,
82164 -0x00,0x00,0x00,0x00,
82165 -0x18,0x00,0xC5,0x00,
82166 -0x12,0x30,0x00,0x00,
82167 -0x21,0x30,0xC3,0x00,
82168 -0x2B,0x10,0xE6,0x00,
82169 -0x02,0x01,0x40,0x14,
82170 -0x23,0x10,0xE6,0x00,
82171 -0xE8,0x23,0x42,0xAE,
82172 -0x04,0x24,0x44,0x8E,
82173 -0x00,0x24,0x47,0x8E,
82174 -0xEC,0x23,0x48,0x8E,
82175 -0xF0,0x23,0x45,0x8E,
82176 -0xF8,0x23,0x46,0x8E,
82177 -0xFC,0x23,0x43,0x8E,
82178 -0x21,0x38,0xE4,0x00,
82179 -0x02,0x80,0x04,0x3C,
82180 -0x30,0x1F,0x84,0x24,
82181 -0x21,0x10,0x64,0x01,
82182 -0x21,0x40,0x05,0x01,
82183 -0x21,0x30,0xC3,0x00,
82184 -0x3E,0x05,0x42,0x90,
82185 -0xE8,0x23,0x4A,0x8E,
82186 -0x0C,0x00,0xE0,0x10,
82187 -0x21,0x48,0x00,0x00,
82188 -0x2B,0x48,0x47,0x00,
82189 -0x0B,0x00,0x20,0x15,
82190 -0x02,0x80,0x02,0x3C,
82191 -0x07,0x00,0x62,0x2D,
82192 -0x4B,0x01,0x40,0x14,
82193 -0xC0,0x10,0x07,0x00,
82194 -0x0C,0x00,0x02,0x24,
82195 -0x47,0x01,0x62,0x11,
82196 -0x0D,0x00,0x02,0x24,
82197 -0x46,0x01,0x62,0x11,
82198 -0xC0,0x10,0x07,0x00,
82199 -0x6C,0x00,0x20,0x11,
82200 -0x02,0x80,0x02,0x3C,
82201 -0x30,0x1F,0x42,0x24,
82202 -0x80,0x18,0x0B,0x00,
82203 -0x21,0x18,0x62,0x00,
82204 -0x21,0x20,0x4B,0x02,
82205 -0x5A,0x24,0x85,0x90,
82206 -0x60,0x05,0x62,0x8C,
82207 -0x00,0x00,0x00,0x00,
82208 -0x04,0x10,0xA2,0x00,
82209 -0x2B,0x10,0x4A,0x00,
82210 -0x61,0x00,0x40,0x10,
82211 -0x00,0x00,0x00,0x00,
82212 -0x78,0x24,0x42,0x8E,
82213 -0x01,0x00,0x07,0x24,
82214 -0x04,0x18,0x67,0x01,
82215 -0x24,0x10,0x43,0x00,
82216 -0xE1,0x00,0x40,0x10,
82217 -0x1C,0x00,0x62,0x2D,
82218 -0x21,0x28,0x4B,0x02,
82219 -0x20,0x24,0xA6,0x90,
82220 -0x5A,0x24,0xA2,0x90,
82221 -0x0A,0x00,0x04,0x24,
82222 -0xFF,0x00,0xC3,0x30,
82223 -0x04,0x20,0x44,0x00,
82224 -0x2A,0x18,0x64,0x00,
82225 -0xD8,0x00,0x60,0x10,
82226 -0x1C,0x00,0x62,0x2D,
82227 -0x01,0x00,0xC2,0x24,
82228 -0xFF,0x00,0x43,0x30,
82229 -0x37,0x01,0x64,0x10,
82230 -0x20,0x24,0xA2,0xA0,
82231 -0x02,0x80,0x04,0x3C,
82232 -0x30,0x1F,0x85,0x24,
82233 -0x80,0x10,0x0B,0x00,
82234 -0x21,0x10,0x45,0x00,
82235 -0xD4,0x05,0x44,0x8C,
82236 -0x60,0x05,0x43,0x8C,
82237 -0x18,0x00,0xA2,0x8F,
82238 -0x00,0x00,0x00,0x00,
82239 -0x21,0x30,0x45,0x00,
82240 -0x40,0x10,0x04,0x00,
82241 -0x21,0x10,0x44,0x00,
82242 -0x21,0x18,0x62,0x00,
82243 -0x82,0x50,0x03,0x00,
82244 -0xE8,0x23,0xCA,0xAC,
82245 -0x30,0x38,0xA3,0x8C,
82246 -0xFF,0xFF,0x02,0x34,
82247 -0x03,0x00,0x62,0x10,
82248 -0x21,0x20,0x60,0x01,
82249 -0x57,0x24,0x00,0x0C,
82250 -0xFF,0x00,0x65,0x32,
82251 -0x9E,0x00,0x60,0x12,
82252 -0x02,0x80,0x03,0x3C,
82253 -0x02,0x80,0x04,0x3C,
82254 -0x30,0x1F,0x82,0x24,
82255 -0x21,0x10,0xA2,0x02,
82256 -0xFC,0x23,0x40,0xAC,
82257 -0x00,0x24,0x40,0xAC,
82258 -0x04,0x24,0x40,0xAC,
82259 -0xEC,0x23,0x40,0xAC,
82260 -0xF0,0x23,0x40,0xAC,
82261 -0xF4,0x23,0x40,0xAC,
82262 -0xF8,0x23,0x40,0xAC,
82263 -0x2C,0x00,0xA2,0x8F,
82264 -0x28,0x00,0xA4,0x8F,
82265 -0x01,0x00,0x73,0x26,
82266 -0x94,0x00,0x42,0x24,
82267 -0x94,0x00,0x84,0x24,
82268 -0x2C,0x00,0xA2,0xAF,
82269 -0x28,0x00,0xA4,0xAF,
82270 -0x24,0x00,0xA2,0x8F,
82271 -0x20,0x00,0xA4,0x8F,
82272 -0x20,0x00,0x63,0x2A,
82273 -0x94,0x00,0x42,0x24,
82274 -0x94,0x00,0x84,0x24,
82275 -0x24,0x00,0xA2,0xAF,
82276 -0x20,0x00,0xA4,0xAF,
82277 -0x1C,0x00,0xA2,0x8F,
82278 -0x18,0x00,0xA4,0x8F,
82279 -0x94,0x00,0x52,0x26,
82280 -0x94,0x00,0x42,0x24,
82281 -0x94,0x00,0x84,0x24,
82282 -0x1C,0x00,0xA2,0xAF,
82283 -0x18,0x00,0xA4,0xAF,
82284 -0x14,0x00,0xA2,0x8F,
82285 -0x10,0x00,0xA4,0x8F,
82286 -0x94,0x00,0xDE,0x27,
82287 -0x94,0x00,0x42,0x24,
82288 -0x94,0x00,0x84,0x24,
82289 -0x14,0x00,0xA2,0xAF,
82290 -0x94,0x00,0xF7,0x26,
82291 -0x10,0x00,0xA4,0xAF,
82292 -0x94,0x00,0x94,0x26,
82293 -0x94,0x00,0xD6,0x26,
82294 -0x69,0xFF,0x60,0x14,
82295 -0x94,0x00,0xB5,0x26,
82296 -0x54,0x00,0xBF,0x8F,
82297 -0x50,0x00,0xBE,0x8F,
82298 -0x4C,0x00,0xB7,0x8F,
82299 -0x48,0x00,0xB6,0x8F,
82300 -0x44,0x00,0xB5,0x8F,
82301 -0x40,0x00,0xB4,0x8F,
82302 -0x3C,0x00,0xB3,0x8F,
82303 -0x38,0x00,0xB2,0x8F,
82304 -0x34,0x00,0xB1,0x8F,
82305 -0x30,0x00,0xB0,0x8F,
82306 -0x08,0x00,0xE0,0x03,
82307 -0x58,0x00,0xBD,0x27,
82308 -0x79,0x00,0xE0,0x10,
82309 -0x00,0x00,0x00,0x00,
82310 -0x79,0x00,0x20,0x15,
82311 -0x02,0x80,0x03,0x3C,
82312 -0x40,0x10,0x07,0x00,
82313 -0x21,0x10,0x47,0x00,
82314 -0x82,0x10,0x02,0x00,
82315 -0x2B,0x10,0x46,0x00,
82316 -0xBE,0xFF,0x40,0x10,
82317 -0x02,0x80,0x04,0x3C,
82318 -0x30,0x1F,0x88,0x24,
82319 -0x21,0x20,0xC8,0x03,
82320 -0x21,0x30,0x8B,0x00,
82321 -0x78,0x24,0x83,0x8C,
82322 -0x01,0x00,0x05,0x24,
82323 -0x04,0x10,0x65,0x01,
82324 -0x3D,0x24,0xC7,0x90,
82325 -0x27,0x10,0x02,0x00,
82326 -0x24,0x18,0x62,0x00,
82327 -0x78,0x24,0x83,0xAC,
82328 -0x09,0x00,0xE5,0x10,
82329 -0x20,0x24,0xC0,0xA0,
82330 -0x14,0x00,0xA2,0x8F,
82331 -0x21,0x38,0x00,0x00,
82332 -0x21,0x20,0x48,0x00,
82333 -0x21,0x18,0x87,0x00,
82334 -0x01,0x00,0xE7,0x24,
82335 -0x1D,0x00,0xE2,0x28,
82336 -0xFC,0xFF,0x40,0x14,
82337 -0x5A,0x24,0x60,0xA0,
82338 -0x02,0x80,0x04,0x3C,
82339 -0x30,0x1F,0x83,0x24,
82340 -0x21,0x10,0xE3,0x02,
82341 -0x21,0x10,0x4B,0x00,
82342 -0x3D,0x24,0x40,0xA0,
82343 -0x21,0x50,0x60,0x00,
82344 -0x02,0x80,0x02,0x3C,
82345 -0x02,0x80,0x03,0x3C,
82346 -0x78,0xE8,0x49,0x24,
82347 -0x04,0xE8,0x68,0x24,
82348 -0x21,0x38,0x00,0x00,
82349 -0x80,0x18,0x07,0x00,
82350 -0x21,0x10,0x69,0x00,
82351 -0x21,0x20,0x68,0x00,
82352 -0x00,0x00,0x46,0x8C,
82353 -0x00,0x00,0x85,0x8C,
82354 -0x01,0x00,0xE7,0x24,
82355 -0x21,0x18,0x6A,0x00,
82356 -0x1D,0x00,0xE2,0x28,
82357 -0x60,0x05,0x65,0xAC,
82358 -0xF6,0xFF,0x40,0x14,
82359 -0xD4,0x05,0x66,0xAC,
82360 -0x15,0x00,0x60,0x11,
82361 -0x02,0x80,0x04,0x3C,
82362 -0x1F,0x24,0x82,0x92,
82363 -0xFF,0xFF,0x67,0x25,
82364 -0x2A,0x10,0xE2,0x00,
82365 -0x10,0x00,0x40,0x14,
82366 -0x02,0x80,0x03,0x3C,
82367 -0x10,0x00,0xA4,0x8F,
82368 -0x30,0x1F,0x62,0x24,
82369 -0x21,0x10,0x82,0x00,
82370 -0x1F,0x24,0x45,0x90,
82371 -0x18,0x24,0x44,0x8C,
82372 -0x01,0x00,0x06,0x24,
82373 -0x04,0x18,0xE6,0x00,
82374 -0x24,0x10,0x83,0x00,
82375 -0xB9,0x00,0x43,0x10,
82376 -0x00,0x00,0x00,0x00,
82377 -0xFF,0xFF,0xE7,0x24,
82378 -0x2A,0x10,0xE5,0x00,
82379 -0xFA,0xFF,0x40,0x10,
82380 -0x04,0x18,0xE6,0x00,
82381 -0x02,0x80,0x04,0x3C,
82382 -0x30,0x1F,0x83,0x24,
82383 -0x80,0x10,0x0B,0x00,
82384 -0x21,0x10,0x43,0x00,
82385 -0xD4,0x05,0x45,0x8C,
82386 -0x60,0x05,0x44,0x8C,
82387 -0x02,0x80,0x03,0x3C,
82388 -0x40,0x10,0x05,0x00,
82389 -0xDE,0x5D,0x66,0x90,
82390 -0x21,0x10,0x45,0x00,
82391 -0x21,0x20,0x82,0x00,
82392 -0x22,0x00,0x02,0x24,
82393 -0x9D,0x00,0xC2,0x10,
82394 -0x82,0x50,0x04,0x00,
82395 -0x78,0x24,0x83,0x8E,
82396 -0x01,0x00,0x02,0x24,
82397 -0x04,0x10,0x62,0x01,
82398 -0x25,0x18,0x62,0x00,
82399 -0x78,0x24,0x83,0xAE,
82400 -0x02,0x80,0x02,0x3C,
82401 -0x30,0x1F,0x43,0x24,
82402 -0x21,0x10,0xC3,0x02,
82403 -0xE8,0x23,0x4A,0xAC,
82404 -0x30,0x38,0x64,0x8C,
82405 -0xFF,0xFF,0x02,0x34,
82406 -0x62,0xFF,0x82,0x14,
82407 -0x21,0x20,0x60,0x01,
82408 -0x64,0xFF,0x60,0x16,
82409 -0x02,0x80,0x03,0x3C,
82410 -0x30,0x1F,0x70,0x24,
82411 -0xF0,0x23,0x05,0x96,
82412 -0xEC,0x23,0x02,0x96,
82413 -0x25,0xB0,0x11,0x3C,
82414 -0x00,0x2C,0x05,0x00,
82415 -0x21,0x28,0x45,0x00,
82416 -0xB5,0x59,0x00,0x0C,
82417 -0x68,0x0C,0x24,0x36,
82418 -0xFC,0x23,0x02,0x8E,
82419 -0xF8,0x23,0x05,0x8E,
82420 -0xF4,0x23,0x03,0x96,
82421 -0x6C,0x0C,0x24,0x36,
82422 -0x21,0x28,0xA2,0x00,
82423 -0x00,0x2C,0x05,0x00,
82424 -0xB5,0x59,0x00,0x0C,
82425 -0x21,0x28,0x65,0x00,
82426 -0x28,0x26,0x00,0x08,
82427 -0x02,0x80,0x04,0x3C,
82428 -0xD6,0x25,0x00,0x08,
82429 -0xE8,0x23,0x40,0xAE,
82430 -0x4C,0xFF,0x20,0x11,
82431 -0x02,0x80,0x03,0x3C,
82432 -0x30,0x1F,0x62,0x24,
82433 -0x80,0x18,0x0B,0x00,
82434 -0x21,0x18,0x62,0x00,
82435 -0xD4,0x05,0x64,0x8C,
82436 -0x00,0x00,0x00,0x00,
82437 -0x2B,0x20,0x44,0x01,
82438 -0x44,0xFF,0x80,0x10,
82439 -0x02,0x80,0x04,0x3C,
82440 -0x69,0x26,0x00,0x08,
82441 -0x30,0x1F,0x88,0x24,
82442 -0x2D,0xFF,0x40,0x10,
82443 -0x02,0x80,0x04,0x3C,
82444 -0x21,0x20,0x4B,0x02,
82445 -0x3D,0x24,0x83,0x90,
82446 -0x01,0x00,0x02,0x24,
82447 -0x53,0x00,0x62,0x10,
82448 -0x02,0x80,0x02,0x3C,
82449 -0x2C,0x00,0xA3,0x8F,
82450 -0x30,0x1F,0x42,0x24,
82451 -0x21,0x38,0x00,0x00,
82452 -0x21,0x20,0x62,0x00,
82453 -0x21,0x18,0x87,0x00,
82454 -0x01,0x00,0xE7,0x24,
82455 -0x1D,0x00,0xE2,0x28,
82456 -0xFC,0xFF,0x40,0x14,
82457 -0x5A,0x24,0x60,0xA0,
82458 -0x28,0x00,0xA4,0x8F,
82459 -0x02,0x80,0x03,0x3C,
82460 -0x30,0x1F,0x65,0x24,
82461 -0x21,0x30,0x85,0x00,
82462 -0x78,0x24,0xC2,0x8C,
82463 -0x01,0x00,0x03,0x24,
82464 -0x04,0x18,0x63,0x01,
82465 -0x27,0x18,0x03,0x00,
82466 -0x21,0x20,0xCB,0x00,
82467 -0x24,0x10,0x43,0x00,
82468 -0x3D,0x24,0x80,0xA0,
82469 -0x78,0x24,0xC2,0xAC,
82470 -0x12,0x00,0x60,0x15,
82471 -0x20,0x24,0x80,0xA0,
82472 -0x1E,0x24,0xC2,0x90,
82473 -0x00,0x00,0x00,0x00,
82474 -0x0E,0x00,0x40,0x10,
82475 -0x01,0x00,0x07,0x24,
82476 -0x24,0x00,0xA3,0x8F,
82477 -0x01,0x00,0x06,0x24,
82478 -0x21,0x10,0x65,0x00,
82479 -0x1E,0x24,0x44,0x90,
82480 -0x18,0x24,0x45,0x8C,
82481 -0x04,0x18,0xE6,0x00,
82482 -0x24,0x10,0xA3,0x00,
82483 -0x4B,0x00,0x43,0x10,
82484 -0x00,0x00,0x00,0x00,
82485 -0x01,0x00,0xE7,0x24,
82486 -0x2A,0x10,0x87,0x00,
82487 -0xFA,0xFF,0x40,0x10,
82488 -0x04,0x18,0xE6,0x00,
82489 -0x02,0x80,0x02,0x3C,
82490 -0x30,0x1F,0x44,0x24,
82491 -0x20,0x00,0xA2,0x8F,
82492 -0x01,0x00,0x67,0x25,
82493 -0x21,0x18,0x44,0x00,
82494 -0x1E,0x24,0x62,0x90,
82495 -0x00,0x00,0x00,0x00,
82496 -0x2A,0x10,0x47,0x00,
82497 -0x0E,0x00,0x40,0x14,
82498 -0x01,0x00,0x06,0x24,
82499 -0x1C,0x00,0xA3,0x8F,
82500 -0x00,0x00,0x00,0x00,
82501 -0x21,0x10,0x64,0x00,
82502 -0x1E,0x24,0x45,0x90,
82503 -0x18,0x24,0x44,0x8C,
82504 -0x04,0x18,0xE6,0x00,
82505 -0x24,0x10,0x83,0x00,
82506 -0x31,0x00,0x43,0x10,
82507 -0x00,0x00,0x00,0x00,
82508 -0x01,0x00,0xE7,0x24,
82509 -0x2A,0x10,0xA7,0x00,
82510 -0xFA,0xFF,0x40,0x10,
82511 -0x04,0x18,0xE6,0x00,
82512 -0x02,0x80,0x02,0x3C,
82513 -0xDE,0x5D,0x44,0x90,
82514 -0x22,0x00,0x03,0x24,
82515 -0xE4,0xFE,0x83,0x14,
82516 -0x02,0x80,0x04,0x3C,
82517 -0xEE,0xFF,0x62,0x25,
82518 -0xFF,0x00,0x42,0x30,
82519 -0x02,0x00,0x42,0x2C,
82520 -0x18,0x00,0x03,0x24,
82521 -0x12,0x26,0x00,0x08,
82522 -0x0B,0x58,0x62,0x00,
82523 -0xC0,0x10,0x07,0x00,
82524 -0x23,0x10,0x47,0x00,
82525 -0xC2,0x10,0x02,0x00,
82526 -0x2B,0x10,0x48,0x00,
82527 -0xC4,0xFE,0x40,0x14,
82528 -0x00,0x00,0x00,0x00,
82529 -0xF1,0x25,0x00,0x08,
82530 -0x00,0x00,0x00,0x00,
82531 -0x18,0x00,0x62,0x2D,
82532 -0x0A,0x00,0x40,0x14,
82533 -0x05,0x00,0x62,0x2D,
82534 -0x5A,0x24,0x83,0x90,
82535 -0x00,0x00,0x00,0x00,
82536 -0x05,0x00,0x62,0x2C,
82537 -0xB0,0xFF,0x40,0x10,
82538 -0x01,0x00,0x62,0x24,
82539 -0xF4,0x26,0x00,0x08,
82540 -0x5A,0x24,0x82,0xA0,
82541 -0x11,0x26,0x00,0x08,
82542 -0x3D,0x24,0xA7,0xA0,
82543 -0x04,0x00,0x40,0x10,
82544 -0x00,0x00,0x00,0x00,
82545 -0x5A,0x24,0x83,0x90,
82546 -0x43,0x27,0x00,0x08,
82547 -0x03,0x00,0x62,0x2C,
82548 -0x5A,0x24,0x83,0x90,
82549 -0x43,0x27,0x00,0x08,
82550 -0x04,0x00,0x62,0x2C,
82551 -0x13,0x00,0x02,0x24,
82552 -0x62,0xFF,0x62,0x15,
82553 -0x02,0x80,0x02,0x3C,
82554 -0xBC,0x26,0x00,0x08,
82555 -0x30,0x1F,0x43,0x24,
82556 -0xFF,0x00,0xEB,0x30,
82557 -0x2B,0x27,0x00,0x08,
82558 -0x02,0x80,0x02,0x3C,
82559 -0x13,0x27,0x00,0x08,
82560 -0xFF,0x00,0xEB,0x30,
82561 -0xA7,0x26,0x00,0x08,
82562 -0xFF,0x00,0xEB,0x30,
82563 -0xD8,0xFF,0xBD,0x27,
82564 -0x02,0x80,0x02,0x3C,
82565 -0x14,0x00,0xB1,0xAF,
82566 -0x24,0x00,0xBF,0xAF,
82567 -0x20,0x00,0xB4,0xAF,
82568 -0x1C,0x00,0xB3,0xAF,
82569 -0x18,0x00,0xB2,0xAF,
82570 -0x10,0x00,0xB0,0xAF,
82571 -0x30,0x1F,0x45,0x24,
82572 -0xA9,0x37,0xA4,0x90,
82573 -0xA4,0x37,0xA3,0x8C,
82574 -0xA0,0x37,0xA2,0x8C,
82575 -0x21,0x88,0x64,0x00,
82576 -0x2B,0x10,0x22,0x02,
82577 -0x60,0x00,0x40,0x10,
82578 -0x21,0x80,0xA0,0x00,
82579 -0x02,0x80,0x14,0x3C,
82580 -0x21,0x98,0xA0,0x00,
82581 -0x76,0x27,0x00,0x08,
82582 -0x21,0x90,0xA0,0x00,
82583 -0xA0,0x37,0x42,0x8E,
82584 -0x10,0x00,0x31,0x26,
82585 -0x2B,0x10,0x22,0x02,
82586 -0x57,0x00,0x40,0x10,
82587 -0x21,0x80,0x40,0x02,
82588 -0xA9,0x37,0x02,0x92,
82589 -0xFF,0xFF,0x23,0x32,
82590 -0x02,0x80,0x05,0x3C,
82591 -0x10,0x00,0x42,0x24,
82592 -0x25,0x28,0x65,0x00,
82593 -0x98,0x55,0x84,0x26,
82594 -0x10,0x00,0x06,0x24,
82595 -0x10,0x52,0x00,0x0C,
82596 -0xA9,0x37,0x02,0xA2,
82597 -0x6C,0x36,0x06,0x8E,
82598 -0x00,0x00,0x00,0x00,
82599 -0x42,0x24,0x06,0x00,
82600 -0x1F,0x00,0x84,0x30,
82601 -0xC0,0x10,0x04,0x00,
82602 -0x21,0x10,0x44,0x00,
82603 -0x80,0x10,0x02,0x00,
82604 -0x21,0x10,0x44,0x00,
82605 -0x80,0x10,0x02,0x00,
82606 -0x21,0x38,0x50,0x00,
82607 -0x1C,0x24,0xE3,0x8C,
82608 -0x00,0x00,0x00,0x00,
82609 -0x02,0x1B,0x03,0x00,
82610 -0x01,0x00,0x63,0x30,
82611 -0xE3,0xFF,0x60,0x10,
82612 -0x25,0xB0,0x02,0x3C,
82613 -0x68,0x36,0x05,0x8E,
82614 -0x21,0x10,0x82,0x00,
82615 -0x60,0x01,0x44,0x90,
82616 -0x82,0x1D,0x05,0x00,
82617 -0x3F,0x00,0x63,0x30,
82618 -0x04,0x00,0x0A,0x24,
82619 -0x05,0x00,0x62,0x28,
82620 -0x21,0x40,0x40,0x01,
82621 -0x0B,0x40,0x62,0x00,
82622 -0x07,0x00,0xA0,0x04,
82623 -0xFF,0x00,0x89,0x30,
82624 -0x08,0x24,0xE2,0x8C,
82625 -0x04,0x00,0x08,0x24,
82626 -0x01,0x00,0x42,0x24,
82627 -0x08,0x24,0xE2,0xAC,
82628 -0x6C,0x36,0x66,0x8E,
82629 -0x00,0x00,0x00,0x00,
82630 -0x02,0x13,0x06,0x00,
82631 -0x1F,0x00,0x42,0x30,
82632 -0x08,0x00,0x42,0x28,
82633 -0xCD,0xFF,0x40,0x10,
82634 -0x00,0x00,0x00,0x00,
82635 -0x68,0x36,0x62,0x8E,
82636 -0x00,0x00,0x00,0x00,
82637 -0x3F,0x00,0x42,0x30,
82638 -0xC8,0xFF,0x49,0x14,
82639 -0x00,0x00,0x00,0x00,
82640 -0x29,0x00,0x00,0x11,
82641 -0x01,0x00,0x02,0x24,
82642 -0x2E,0x00,0x02,0x11,
82643 -0x02,0x00,0x02,0x24,
82644 -0x33,0x00,0x02,0x11,
82645 -0x03,0x00,0x02,0x24,
82646 -0x38,0x00,0x02,0x11,
82647 -0x00,0x00,0x00,0x00,
82648 -0x3B,0x00,0x0A,0x11,
82649 -0x00,0x00,0x00,0x00,
82650 -0x0C,0x24,0xE2,0x8C,
82651 -0x21,0x18,0x33,0x01,
82652 -0x04,0x05,0x64,0x90,
82653 -0x02,0x11,0x02,0x00,
82654 -0x2B,0x10,0x44,0x00,
82655 -0x3E,0x00,0x40,0x14,
82656 -0x00,0x00,0x00,0x00,
82657 -0x00,0x24,0xE3,0x8C,
82658 -0x80,0x10,0x09,0x00,
82659 -0x21,0x10,0x49,0x00,
82660 -0x01,0x00,0x63,0x24,
82661 -0x21,0x10,0x53,0x00,
82662 -0x00,0x24,0xE3,0xAC,
82663 -0x21,0x10,0x48,0x00,
82664 -0xA8,0x03,0x44,0x90,
82665 -0xE8,0x23,0xE3,0x8C,
82666 -0x00,0x00,0x00,0x00,
82667 -0x21,0x18,0x64,0x00,
82668 -0xE8,0x23,0xE3,0xAC,
82669 -0xA0,0x37,0x42,0x8E,
82670 -0x10,0x00,0x31,0x26,
82671 -0x2B,0x10,0x22,0x02,
82672 -0xAB,0xFF,0x40,0x14,
82673 -0x21,0x80,0x40,0x02,
82674 -0x24,0x00,0xBF,0x8F,
82675 -0x20,0x00,0xB4,0x8F,
82676 -0x1C,0x00,0xB3,0x8F,
82677 -0x18,0x00,0xB2,0x8F,
82678 -0x14,0x00,0xB1,0x8F,
82679 -0x10,0x00,0xB0,0x8F,
82680 -0x08,0x00,0xE0,0x03,
82681 -0x28,0x00,0xBD,0x27,
82682 -0xEC,0x23,0xE2,0x8C,
82683 -0x00,0x00,0x00,0x00,
82684 -0x01,0x00,0x42,0x24,
82685 -0xEC,0x23,0xE2,0xAC,
82686 -0x01,0x00,0x02,0x24,
82687 -0xD4,0xFF,0x02,0x15,
82688 -0x02,0x00,0x02,0x24,
82689 -0xF0,0x23,0xE2,0x8C,
82690 -0x00,0x00,0x00,0x00,
82691 -0x01,0x00,0x42,0x24,
82692 -0xF0,0x23,0xE2,0xAC,
82693 -0x02,0x00,0x02,0x24,
82694 -0xCF,0xFF,0x02,0x15,
82695 -0x03,0x00,0x02,0x24,
82696 -0xF4,0x23,0xE2,0x8C,
82697 -0x00,0x00,0x00,0x00,
82698 -0x01,0x00,0x42,0x24,
82699 -0xF4,0x23,0xE2,0xAC,
82700 -0x03,0x00,0x02,0x24,
82701 -0xCA,0xFF,0x02,0x15,
82702 -0x00,0x00,0x00,0x00,
82703 -0xF8,0x23,0xE2,0x8C,
82704 -0x00,0x00,0x00,0x00,
82705 -0x01,0x00,0x42,0x24,
82706 -0xC7,0xFF,0x0A,0x15,
82707 -0xF8,0x23,0xE2,0xAC,
82708 -0xFC,0x23,0xE2,0x8C,
82709 -0x21,0x18,0x33,0x01,
82710 -0x01,0x00,0x42,0x24,
82711 -0xFC,0x23,0xE2,0xAC,
82712 -0x0C,0x24,0xE2,0x8C,
82713 -0x04,0x05,0x64,0x90,
82714 -0x02,0x11,0x02,0x00,
82715 -0x2B,0x10,0x44,0x00,
82716 -0xC4,0xFF,0x40,0x10,
82717 -0x00,0x00,0x00,0x00,
82718 -0x04,0x24,0xE3,0x8C,
82719 -0x80,0x10,0x09,0x00,
82720 -0x21,0x10,0x49,0x00,
82721 -0x01,0x00,0x63,0x24,
82722 -0x21,0x10,0x53,0x00,
82723 -0x04,0x24,0xE3,0xAC,
82724 -0x21,0x10,0x48,0x00,
82725 -0x39,0x04,0x44,0x90,
82726 -0xE8,0x23,0xE3,0x8C,
82727 -0x00,0x00,0x00,0x00,
82728 -0x21,0x18,0x64,0x00,
82729 -0xC7,0x27,0x00,0x08,
82730 -0xE8,0x23,0xE3,0xAC,
82731 -0x23,0x10,0xA4,0x00,
82732 -0x2B,0x18,0xA4,0x00,
82733 -0x23,0x20,0x85,0x00,
82734 -0x08,0x00,0xE0,0x03,
82735 -0x0B,0x10,0x83,0x00,
82736 -0x20,0xFF,0xBD,0x27,
82737 -0xCC,0x00,0xB5,0xAF,
82738 -0xDC,0x00,0xBF,0xAF,
82739 -0xD8,0x00,0xBE,0xAF,
82740 -0xD4,0x00,0xB7,0xAF,
82741 -0xD0,0x00,0xB6,0xAF,
82742 -0xC8,0x00,0xB4,0xAF,
82743 -0xC4,0x00,0xB3,0xAF,
82744 -0xC0,0x00,0xB2,0xAF,
82745 -0xBC,0x00,0xB1,0xAF,
82746 -0xB8,0x00,0xB0,0xAF,
82747 -0x21,0xA8,0x00,0x00,
82748 -0x40,0x11,0x15,0x00,
82749 -0x10,0x00,0xA3,0x27,
82750 -0x21,0x10,0x43,0x00,
82751 -0x07,0x00,0x16,0x24,
82752 -0xFF,0xFF,0xD6,0x26,
82753 -0x00,0x00,0x40,0xAC,
82754 -0xFD,0xFF,0xC1,0x06,
82755 -0x04,0x00,0x42,0x24,
82756 -0x01,0x00,0xB5,0x26,
82757 -0x03,0x00,0xA2,0x2E,
82758 -0xF6,0xFF,0x40,0x14,
82759 -0x40,0x11,0x15,0x00,
82760 -0x25,0xB0,0x10,0x3C,
82761 -0xC4,0x02,0x02,0x36,
82762 -0x00,0x00,0x40,0xAC,
82763 -0x04,0x00,0x03,0x36,
82764 -0x00,0x00,0x62,0x8C,
82765 -0x04,0x0C,0x03,0x36,
82766 -0x00,0x00,0x63,0x8C,
82767 -0x08,0x0C,0x04,0x36,
82768 -0x0F,0x00,0x11,0x3C,
82769 -0xAC,0x00,0xA3,0xAF,
82770 -0x00,0x00,0x84,0x8C,
82771 -0x24,0x10,0x51,0x00,
82772 -0x02,0xF4,0x02,0x00,
82773 -0xB0,0x00,0xA4,0xAF,
82774 -0x00,0x60,0x12,0x40,
82775 -0x01,0x00,0x41,0x36,
82776 -0x01,0x00,0x21,0x38,
82777 -0x00,0x60,0x81,0x40,
82778 -0x21,0x20,0x00,0x00,
82779 -0x8A,0x47,0x00,0x0C,
82780 -0xFF,0xFF,0x25,0x36,
82781 -0x70,0x00,0xA2,0xAF,
82782 -0x00,0x60,0x92,0x40,
82783 -0x54,0x22,0x00,0x0C,
82784 -0x64,0x00,0x04,0x24,
82785 -0xE6,0x44,0x00,0x0C,
82786 -0x01,0x00,0x04,0x24,
82787 -0x00,0x60,0x12,0x40,
82788 -0x01,0x00,0x41,0x36,
82789 -0x01,0x00,0x21,0x38,
82790 -0x00,0x60,0x81,0x40,
82791 -0x21,0x20,0x00,0x00,
82792 -0x8A,0x47,0x00,0x0C,
82793 -0xFF,0xFF,0x25,0x36,
82794 -0x74,0x00,0xA2,0xAF,
82795 -0x00,0x60,0x92,0x40,
82796 -0x54,0x22,0x00,0x0C,
82797 -0x64,0x00,0x04,0x24,
82798 -0xE6,0x44,0x00,0x0C,
82799 -0x21,0x20,0x00,0x00,
82800 -0xE0,0x0E,0x02,0x36,
82801 -0x21,0x20,0x40,0x00,
82802 -0x00,0x00,0x42,0x8C,
82803 -0xDC,0x0E,0x12,0x36,
82804 -0x70,0x0E,0x13,0x36,
82805 -0x78,0x00,0xA2,0xAF,
82806 -0x00,0x00,0x42,0x8E,
82807 -0x74,0x0E,0x14,0x36,
82808 -0x78,0x0E,0x15,0x36,
82809 -0x7C,0x00,0xA2,0xAF,
82810 -0x00,0x00,0x63,0x8E,
82811 -0x7C,0x0E,0x16,0x36,
82812 -0x80,0x0E,0x17,0x36,
82813 -0x80,0x00,0xA3,0xAF,
82814 -0x00,0x00,0x82,0x8E,
82815 -0xD4,0x0E,0x10,0x36,
82816 -0xED,0x3F,0x11,0x3C,
82817 -0x84,0x00,0xA2,0xAF,
82818 -0x00,0x00,0xA3,0x8E,
82819 -0xFB,0x92,0x25,0x36,
82820 -0x88,0x00,0xA3,0xAF,
82821 -0x00,0x00,0xC2,0x8E,
82822 -0x00,0x00,0x00,0x00,
82823 -0x8C,0x00,0xA2,0xAF,
82824 -0x00,0x00,0xE3,0x8E,
82825 -0x25,0xB0,0x02,0x3C,
82826 -0x84,0x0E,0x42,0x34,
82827 -0x90,0x00,0xA3,0xAF,
82828 -0x00,0x00,0x42,0x8C,
82829 -0x25,0xB0,0x03,0x3C,
82830 -0x88,0x0E,0x63,0x34,
82831 -0x94,0x00,0xA2,0xAF,
82832 -0x00,0x00,0x63,0x8C,
82833 -0x25,0xB0,0x02,0x3C,
82834 -0x8C,0x0E,0x42,0x34,
82835 -0x98,0x00,0xA3,0xAF,
82836 -0x00,0x00,0x42,0x8C,
82837 -0x25,0xB0,0x03,0x3C,
82838 -0xD0,0x0E,0x63,0x34,
82839 -0x9C,0x00,0xA2,0xAF,
82840 -0x00,0x00,0x63,0x8C,
82841 -0x00,0x00,0x00,0x00,
82842 -0xA0,0x00,0xA3,0xAF,
82843 -0x00,0x00,0x02,0x8E,
82844 -0x25,0xB0,0x03,0x3C,
82845 -0xD8,0x0E,0x63,0x34,
82846 -0xA4,0x00,0xA2,0xAF,
82847 -0x00,0x00,0x63,0x8C,
82848 -0x02,0x5C,0x00,0x0C,
82849 -0xA8,0x00,0xA3,0xAF,
82850 -0x21,0x20,0x40,0x02,
82851 -0x02,0x5C,0x00,0x0C,
82852 -0xFB,0x92,0x25,0x36,
82853 -0x21,0x20,0x60,0x02,
82854 -0x02,0x5C,0x00,0x0C,
82855 -0xFB,0x92,0x25,0x36,
82856 -0x21,0x20,0x80,0x02,
82857 -0x02,0x5C,0x00,0x0C,
82858 -0xFB,0x92,0x25,0x36,
82859 -0x21,0x20,0xA0,0x02,
82860 -0x02,0x5C,0x00,0x0C,
82861 -0xFB,0x92,0x25,0x36,
82862 -0x21,0x20,0xC0,0x02,
82863 -0x02,0x5C,0x00,0x0C,
82864 -0xFB,0x92,0x25,0x36,
82865 -0x21,0x20,0xE0,0x02,
82866 -0x02,0x5C,0x00,0x0C,
82867 -0xFB,0x92,0x25,0x36,
82868 -0x02,0x80,0x02,0x3C,
82869 -0xA8,0xED,0x42,0x24,
82870 -0x00,0x00,0x44,0x8C,
82871 -0xFB,0x92,0x25,0x36,
82872 -0x02,0x5C,0x00,0x0C,
82873 -0x25,0xB0,0x13,0x3C,
82874 -0x02,0x80,0x03,0x3C,
82875 -0xAC,0xED,0x63,0x24,
82876 -0x00,0x00,0x64,0x8C,
82877 -0xFB,0x92,0x25,0x36,
82878 -0x02,0x5C,0x00,0x0C,
82879 -0x21,0xB0,0x00,0x00,
82880 -0x02,0x80,0x02,0x3C,
82881 -0xB0,0xED,0x42,0x24,
82882 -0x00,0x00,0x44,0x8C,
82883 -0xFB,0x92,0x25,0x36,
82884 -0x02,0x5C,0x00,0x0C,
82885 -0xFF,0x03,0x14,0x3C,
82886 -0x02,0x80,0x03,0x3C,
82887 -0xB4,0xED,0x63,0x24,
82888 -0x00,0x00,0x64,0x8C,
82889 -0xFB,0x92,0x25,0x36,
82890 -0x02,0x5C,0x00,0x0C,
82891 -0x10,0x00,0xB7,0x27,
82892 -0x21,0x20,0x00,0x02,
82893 -0x02,0x5C,0x00,0x0C,
82894 -0xFB,0x92,0x25,0x36,
82895 -0x02,0x80,0x02,0x3C,
82896 -0xB8,0xED,0x42,0x24,
82897 -0x00,0x00,0x44,0x8C,
82898 -0x02,0x5C,0x00,0x0C,
82899 -0xFB,0x92,0x25,0x36,
82900 -0xE4,0x28,0x00,0x08,
82901 -0x21,0xA8,0x00,0x00,
82902 -0x6E,0x00,0xC2,0x13,
82903 -0x02,0x80,0x02,0x3C,
82904 -0xAC,0x0E,0x62,0x36,
82905 -0x94,0x0E,0x63,0x36,
82906 -0x00,0x00,0x48,0x8C,
82907 -0x00,0x00,0x64,0x8C,
82908 -0xB4,0x0E,0x62,0x36,
82909 -0x9C,0x0E,0x63,0x36,
82910 -0x00,0x00,0x45,0x8C,
82911 -0x00,0x00,0x66,0x8C,
82912 -0x25,0xB0,0x03,0x3C,
82913 -0xBC,0x0E,0x63,0x34,
82914 -0x00,0x00,0x67,0x8C,
82915 -0x24,0x20,0x94,0x00,
82916 -0x00,0xD8,0x02,0x3C,
82917 -0x24,0x10,0x02,0x01,
82918 -0x24,0x28,0xB4,0x00,
82919 -0x24,0x30,0xD4,0x00,
82920 -0x24,0x38,0xF4,0x00,
82921 -0x02,0x24,0x04,0x00,
82922 -0x20,0x01,0x03,0x24,
82923 -0x01,0x00,0x42,0x2C,
82924 -0x02,0x2C,0x05,0x00,
82925 -0x02,0x34,0x06,0x00,
82926 -0xE8,0x00,0x83,0x10,
82927 -0x02,0x3C,0x07,0x00,
82928 -0xE6,0x00,0xA3,0x10,
82929 -0x20,0x00,0x03,0x24,
82930 -0xE4,0x00,0xC3,0x10,
82931 -0x00,0x00,0x00,0x00,
82932 -0xE2,0x00,0xE3,0x10,
82933 -0x01,0x00,0x08,0x24,
82934 -0x80,0x00,0x03,0x24,
82935 -0x08,0x00,0x83,0x10,
82936 -0x21,0x20,0x00,0x00,
82937 -0x06,0x00,0xA3,0x10,
82938 -0x21,0x20,0x00,0x00,
82939 -0xE0,0x03,0x03,0x24,
82940 -0x03,0x00,0xC3,0x10,
82941 -0x00,0x00,0x00,0x00,
82942 -0xDB,0x00,0xE3,0x10,
82943 -0x01,0x00,0x04,0x24,
82944 -0x05,0x00,0x40,0x10,
82945 -0x00,0x00,0x00,0x00,
82946 -0x03,0x00,0x00,0x11,
82947 -0x00,0x00,0x00,0x00,
82948 -0xD7,0x00,0x80,0x14,
82949 -0x94,0x0E,0x63,0x36,
82950 -0x01,0x00,0xB5,0x26,
82951 -0x0A,0x00,0xA2,0x2E,
82952 -0x01,0x01,0x40,0x10,
82953 -0x00,0x00,0x00,0x00,
82954 -0xCB,0xFF,0xC0,0x17,
82955 -0x01,0x00,0x02,0x24,
82956 -0xA0,0x00,0x03,0x3C,
82957 -0x30,0x54,0x65,0x34,
82958 -0x02,0x5C,0x00,0x0C,
82959 -0x04,0x0C,0x64,0x36,
82960 -0x08,0x00,0x05,0x3C,
82961 -0xE4,0x00,0xA5,0x34,
82962 -0x02,0x5C,0x00,0x0C,
82963 -0x08,0x0C,0x64,0x36,
82964 -0x28,0x0E,0x64,0x36,
82965 -0x02,0x5C,0x00,0x0C,
82966 -0x80,0x80,0x05,0x3C,
82967 -0x14,0x02,0x02,0x3C,
82968 -0x48,0x01,0x45,0x34,
82969 -0x02,0x5C,0x00,0x0C,
82970 -0x40,0x0E,0x64,0x36,
82971 -0x16,0x68,0x05,0x3C,
82972 -0xA2,0x04,0xA5,0x34,
82973 -0x02,0x5C,0x00,0x0C,
82974 -0x44,0x0E,0x64,0x36,
82975 -0x4C,0x0E,0x64,0x36,
82976 -0x02,0x5C,0x00,0x0C,
82977 -0xD1,0x28,0x05,0x24,
82978 -0x14,0x02,0x03,0x3C,
82979 -0x4D,0x01,0x65,0x34,
82980 -0x02,0x5C,0x00,0x0C,
82981 -0x60,0x0E,0x64,0x36,
82982 -0x16,0x28,0x05,0x3C,
82983 -0xBA,0x08,0xA5,0x34,
82984 -0x02,0x5C,0x00,0x0C,
82985 -0x64,0x0E,0x64,0x36,
82986 -0x6C,0x0E,0x64,0x36,
82987 -0x02,0x5C,0x00,0x0C,
82988 -0xD1,0x28,0x05,0x24,
82989 -0x00,0xFB,0x05,0x3C,
82990 -0x01,0x00,0xA5,0x34,
82991 -0x02,0x5C,0x00,0x0C,
82992 -0x48,0x0E,0x64,0x36,
82993 -0x00,0xF8,0x05,0x3C,
82994 -0x01,0x00,0xA5,0x34,
82995 -0x02,0x5C,0x00,0x0C,
82996 -0x48,0x0E,0x64,0x36,
82997 -0x25,0x22,0x00,0x0C,
82998 -0x03,0x00,0x04,0x24,
82999 -0xA0,0x00,0x02,0x3C,
83000 -0x33,0x54,0x45,0x34,
83001 -0x02,0x5C,0x00,0x0C,
83002 -0x04,0x0C,0x64,0x36,
83003 -0x08,0x0C,0x64,0x36,
83004 -0x02,0x5C,0x00,0x0C,
83005 -0xE4,0x00,0x05,0x24,
83006 -0x28,0x0E,0x64,0x36,
83007 -0x02,0x5C,0x00,0x0C,
83008 -0x21,0x28,0x00,0x00,
83009 -0x01,0x00,0x02,0x24,
83010 -0x96,0xFF,0xC2,0x17,
83011 -0xAC,0x0E,0x62,0x36,
83012 -0x02,0x80,0x02,0x3C,
83013 -0xBC,0xED,0x42,0x24,
83014 -0x25,0xB0,0x03,0x3C,
83015 -0x00,0x00,0x44,0x8C,
83016 -0x20,0x08,0x63,0x34,
83017 -0x00,0x00,0x71,0x8C,
83018 -0x00,0x01,0x03,0x3C,
83019 -0x00,0x01,0x65,0x34,
83020 -0x02,0x5C,0x00,0x0C,
83021 -0x25,0xB0,0x12,0x3C,
83022 -0x00,0x01,0x02,0x3C,
83023 -0x00,0x01,0x45,0x34,
83024 -0x02,0x5C,0x00,0x0C,
83025 -0x28,0x08,0x44,0x36,
83026 -0xA0,0x00,0x03,0x3C,
83027 -0x30,0x54,0x65,0x34,
83028 -0x02,0x5C,0x00,0x0C,
83029 -0x04,0x0C,0x44,0x36,
83030 -0x08,0x00,0x05,0x3C,
83031 -0xE4,0x00,0xA5,0x34,
83032 -0x02,0x5C,0x00,0x0C,
83033 -0x08,0x0C,0x44,0x36,
83034 -0x28,0x0E,0x44,0x36,
83035 -0x02,0x5C,0x00,0x0C,
83036 -0x80,0x80,0x05,0x3C,
83037 -0x00,0x01,0x02,0x3C,
83038 -0x00,0x7C,0x45,0x34,
83039 -0x02,0x5C,0x00,0x0C,
83040 -0x30,0x0E,0x44,0x36,
83041 -0x00,0x01,0x03,0x3C,
83042 -0x00,0x48,0x65,0x34,
83043 -0x02,0x5C,0x00,0x0C,
83044 -0x34,0x0E,0x44,0x36,
83045 -0x00,0x10,0x02,0x3C,
83046 -0x1F,0xDC,0x45,0x34,
83047 -0x02,0x5C,0x00,0x0C,
83048 -0x38,0x0E,0x44,0x36,
83049 -0x00,0x10,0x03,0x3C,
83050 -0x1F,0x8C,0x65,0x34,
83051 -0x02,0x5C,0x00,0x0C,
83052 -0x3C,0x0E,0x44,0x36,
83053 -0x14,0x02,0x02,0x3C,
83054 -0x02,0x01,0x45,0x34,
83055 -0x02,0x5C,0x00,0x0C,
83056 -0x40,0x0E,0x44,0x36,
83057 -0x16,0x68,0x05,0x3C,
83058 -0xC7,0x04,0xA5,0x34,
83059 -0x02,0x5C,0x00,0x0C,
83060 -0x44,0x0E,0x44,0x36,
83061 -0x4C,0x0E,0x44,0x36,
83062 -0x02,0x5C,0x00,0x0C,
83063 -0xD1,0x28,0x05,0x24,
83064 -0x6C,0x0E,0x44,0x36,
83065 -0x02,0x5C,0x00,0x0C,
83066 -0xD1,0x28,0x05,0x24,
83067 -0x00,0x01,0x03,0x3C,
83068 -0x00,0x7C,0x65,0x34,
83069 -0x02,0x5C,0x00,0x0C,
83070 -0x50,0x0E,0x44,0x36,
83071 -0x00,0x01,0x02,0x3C,
83072 -0x00,0x48,0x45,0x34,
83073 -0x02,0x5C,0x00,0x0C,
83074 -0x54,0x0E,0x44,0x36,
83075 -0x00,0x10,0x03,0x3C,
83076 -0x23,0xDC,0x65,0x34,
83077 -0x02,0x5C,0x00,0x0C,
83078 -0x58,0x0E,0x44,0x36,
83079 -0x00,0x10,0x02,0x3C,
83080 -0x23,0x8C,0x45,0x34,
83081 -0x02,0x5C,0x00,0x0C,
83082 -0x5C,0x0E,0x44,0x36,
83083 -0x14,0x02,0x03,0x3C,
83084 -0x02,0x01,0x65,0x34,
83085 -0x02,0x5C,0x00,0x0C,
83086 -0x60,0x0E,0x44,0x36,
83087 -0x16,0x28,0x05,0x3C,
83088 -0x07,0x0D,0xA5,0x34,
83089 -0x02,0x5C,0x00,0x0C,
83090 -0x64,0x0E,0x44,0x36,
83091 -0x48,0x0E,0x44,0x36,
83092 -0x02,0x5C,0x00,0x0C,
83093 -0x00,0xFB,0x05,0x3C,
83094 -0x00,0xF8,0x05,0x3C,
83095 -0x02,0x5C,0x00,0x0C,
83096 -0x48,0x0E,0x44,0x36,
83097 -0x00,0x02,0x10,0x3C,
83098 -0x25,0x22,0x00,0x0C,
83099 -0x03,0x00,0x04,0x24,
83100 -0x4C,0x0E,0x44,0x36,
83101 -0x02,0x5C,0x00,0x0C,
83102 -0xD1,0x28,0x05,0x36,
83103 -0xD1,0x28,0x05,0x36,
83104 -0x02,0x5C,0x00,0x0C,
83105 -0x6C,0x0E,0x44,0x36,
83106 -0x48,0x0E,0x44,0x36,
83107 -0x02,0x5C,0x00,0x0C,
83108 -0x00,0xFB,0x05,0x3C,
83109 -0x00,0xF8,0x05,0x3C,
83110 -0x02,0x5C,0x00,0x0C,
83111 -0x48,0x0E,0x44,0x36,
83112 -0x25,0x22,0x00,0x0C,
83113 -0x03,0x00,0x04,0x24,
83114 -0xAC,0x00,0xA5,0x8F,
83115 -0x04,0x0C,0x44,0x36,
83116 -0x02,0x5C,0x00,0x0C,
83117 -0x00,0x01,0x31,0x32,
83118 -0xB0,0x00,0xA5,0x8F,
83119 -0x08,0x0C,0x44,0x36,
83120 -0x02,0x5C,0x00,0x0C,
83121 -0x2B,0x88,0x11,0x00,
83122 -0x28,0x0E,0x44,0x36,
83123 -0x02,0x5C,0x00,0x0C,
83124 -0x21,0x28,0x00,0x00,
83125 -0x23,0xFF,0x20,0x16,
83126 -0xAC,0x0E,0x62,0x36,
83127 -0x02,0x80,0x02,0x3C,
83128 -0xBC,0xED,0x42,0x24,
83129 -0x00,0x00,0x44,0x8C,
83130 -0x02,0x5C,0x00,0x0C,
83131 -0x00,0x01,0x05,0x3C,
83132 -0x28,0x08,0x44,0x36,
83133 -0x02,0x5C,0x00,0x0C,
83134 -0x00,0x01,0x05,0x3C,
83135 -0xAC,0x0E,0x62,0x36,
83136 -0x94,0x0E,0x63,0x36,
83137 -0x00,0x00,0x48,0x8C,
83138 -0x00,0x00,0x64,0x8C,
83139 -0xB4,0x0E,0x62,0x36,
83140 -0x9C,0x0E,0x63,0x36,
83141 -0x00,0x00,0x45,0x8C,
83142 -0x00,0x00,0x66,0x8C,
83143 -0x25,0xB0,0x03,0x3C,
83144 -0xBC,0x0E,0x63,0x34,
83145 -0x00,0x00,0x67,0x8C,
83146 -0x24,0x20,0x94,0x00,
83147 -0x00,0xD8,0x02,0x3C,
83148 -0x24,0x10,0x02,0x01,
83149 -0x24,0x28,0xB4,0x00,
83150 -0x24,0x30,0xD4,0x00,
83151 -0x24,0x38,0xF4,0x00,
83152 -0x02,0x24,0x04,0x00,
83153 -0x20,0x01,0x03,0x24,
83154 -0x01,0x00,0x42,0x2C,
83155 -0x02,0x2C,0x05,0x00,
83156 -0x02,0x34,0x06,0x00,
83157 -0x1A,0xFF,0x83,0x14,
83158 -0x02,0x3C,0x07,0x00,
83159 -0x80,0x00,0x03,0x24,
83160 -0x20,0xFF,0x83,0x14,
83161 -0x21,0x40,0x00,0x00,
83162 -0xDA,0x28,0x00,0x08,
83163 -0x21,0x20,0x00,0x00,
83164 -0x00,0x00,0x62,0x8C,
83165 -0x9C,0x0E,0x65,0x36,
83166 -0xA4,0x0E,0x66,0x36,
83167 -0x24,0x10,0x54,0x00,
83168 -0x02,0x14,0x02,0x00,
83169 -0x00,0x00,0xE2,0xAE,
83170 -0x00,0x00,0xA4,0x8C,
83171 -0xAC,0x0E,0x67,0x36,
83172 -0xB4,0x0E,0x65,0x36,
83173 -0x24,0x20,0x94,0x00,
83174 -0x02,0x24,0x04,0x00,
83175 -0x04,0x00,0xE4,0xAE,
83176 -0x00,0x00,0xC3,0x8C,
83177 -0xC4,0x0E,0x64,0x36,
83178 -0x24,0x18,0x74,0x00,
83179 -0x02,0x1C,0x03,0x00,
83180 -0x08,0x00,0xE3,0xAE,
83181 -0x00,0x00,0xE2,0x8C,
83182 -0x00,0x00,0x00,0x00,
83183 -0x24,0x10,0x54,0x00,
83184 -0x02,0x14,0x02,0x00,
83185 -0x0C,0x00,0xE2,0xAE,
83186 -0x00,0x00,0xA3,0x8C,
83187 -0x00,0x00,0x00,0x00,
83188 -0x24,0x18,0x74,0x00,
83189 -0x02,0x1C,0x03,0x00,
83190 -0x10,0x00,0xE3,0xAE,
83191 -0x25,0xB0,0x03,0x3C,
83192 -0xBC,0x0E,0x63,0x34,
83193 -0x00,0x00,0x62,0x8C,
83194 -0x00,0x00,0x00,0x00,
83195 -0x24,0x10,0x54,0x00,
83196 -0x02,0x14,0x02,0x00,
83197 -0x14,0x00,0xE2,0xAE,
83198 -0x00,0x00,0x83,0x8C,
83199 -0x00,0x00,0x00,0x00,
83200 -0x24,0x18,0x74,0x00,
83201 -0x02,0x1C,0x03,0x00,
83202 -0x18,0x00,0xE3,0xAE,
83203 -0x25,0xB0,0x03,0x3C,
83204 -0xCC,0x0E,0x63,0x34,
83205 -0x00,0x00,0x62,0x8C,
83206 -0x00,0x00,0x00,0x00,
83207 -0x24,0x10,0x54,0x00,
83208 -0x02,0x14,0x02,0x00,
83209 -0x1C,0x00,0xE2,0xAE,
83210 -0x01,0x00,0xD6,0x26,
83211 -0x03,0x00,0xC2,0x2E,
83212 -0xC7,0xFE,0x40,0x14,
83213 -0x20,0x00,0xF7,0x26,
83214 -0x10,0x00,0xB0,0x8F,
83215 -0x00,0x00,0x00,0x00,
83216 -0x49,0x01,0x00,0x16,
83217 -0x00,0x00,0x00,0x00,
83218 -0x30,0x00,0xB1,0x8F,
83219 -0x00,0x00,0x00,0x00,
83220 -0x06,0x00,0x20,0x16,
83221 -0x21,0x20,0x00,0x02,
83222 -0x50,0x00,0xA2,0x8F,
83223 -0x00,0x00,0x00,0x00,
83224 -0x29,0x00,0x40,0x10,
83225 -0xFF,0x00,0x05,0x24,
83226 -0x21,0x20,0x00,0x02,
83227 -0x05,0x28,0x00,0x0C,
83228 -0x21,0x28,0x20,0x02,
83229 -0x03,0x00,0x42,0x2C,
83230 -0x08,0x00,0x40,0x10,
83231 -0x00,0x00,0x00,0x00,
83232 -0x34,0x00,0xA5,0x8F,
83233 -0x14,0x00,0xA4,0x8F,
83234 -0x05,0x28,0x00,0x0C,
83235 -0x00,0x00,0x00,0x00,
83236 -0x03,0x00,0x42,0x2C,
83237 -0x1C,0x00,0x40,0x14,
83238 -0x21,0x28,0x00,0x00,
83239 -0x50,0x00,0xB2,0x8F,
83240 -0x21,0x20,0x00,0x02,
83241 -0x05,0x28,0x00,0x0C,
83242 -0x21,0x28,0x40,0x02,
83243 -0x03,0x00,0x42,0x2C,
83244 -0x09,0x00,0x40,0x10,
83245 -0x21,0x20,0x20,0x02,
83246 -0x54,0x00,0xA5,0x8F,
83247 -0x14,0x00,0xA4,0x8F,
83248 -0x05,0x28,0x00,0x0C,
83249 -0x00,0x00,0x00,0x00,
83250 -0x03,0x00,0x42,0x2C,
83251 -0x0E,0x00,0x40,0x14,
83252 -0x21,0x28,0x00,0x00,
83253 -0x21,0x20,0x20,0x02,
83254 -0x05,0x28,0x00,0x0C,
83255 -0x21,0x28,0x40,0x02,
83256 -0x03,0x00,0x42,0x2C,
83257 -0xE0,0x00,0x40,0x10,
83258 -0x00,0x00,0x00,0x00,
83259 -0x54,0x00,0xA5,0x8F,
83260 -0x34,0x00,0xA4,0x8F,
83261 -0x05,0x28,0x00,0x0C,
83262 -0x00,0x00,0x00,0x00,
83263 -0x03,0x00,0x42,0x2C,
83264 -0xD9,0x00,0x40,0x10,
83265 -0x01,0x00,0x05,0x24,
83266 -0xFF,0x00,0x02,0x24,
83267 -0xDB,0x00,0xA2,0x10,
83268 -0x25,0xB0,0x03,0x3C,
83269 -0x10,0x00,0xA2,0x27,
83270 -0x40,0x29,0x05,0x00,
83271 -0x02,0x80,0x0F,0x3C,
83272 -0x21,0x28,0xA2,0x00,
83273 -0x30,0x1F,0xEC,0x25,
83274 -0x00,0x00,0xA6,0x8C,
83275 -0x0C,0x00,0xA7,0x8C,
83276 -0x0C,0x00,0x83,0x8D,
83277 -0x10,0x00,0x84,0x8D,
83278 -0x04,0x00,0xA8,0x8C,
83279 -0x10,0x00,0xA9,0x8C,
83280 -0x00,0xFC,0x02,0x24,
83281 -0x08,0x00,0xAA,0x8C,
83282 -0x14,0x00,0xAB,0x8C,
83283 -0x24,0x20,0x82,0x00,
83284 -0xFF,0x03,0xC6,0x30,
83285 -0x24,0x18,0x62,0x00,
83286 -0xFF,0x03,0xE7,0x30,
83287 -0xF0,0xFF,0x02,0x3C,
83288 -0xFF,0x03,0x42,0x34,
83289 -0x25,0x18,0x66,0x00,
83290 -0x25,0x20,0x87,0x00,
83291 -0xFF,0x03,0x08,0x31,
83292 -0xFF,0x03,0x29,0x31,
83293 -0x24,0x20,0x82,0x00,
83294 -0x24,0x18,0x62,0x00,
83295 -0x80,0x42,0x08,0x00,
83296 -0x80,0x4A,0x09,0x00,
83297 -0x0F,0xC0,0x02,0x3C,
83298 -0x1C,0x00,0xA6,0x8C,
83299 -0x18,0x00,0xA7,0x8C,
83300 -0xFF,0xFF,0x42,0x34,
83301 -0x25,0x18,0x68,0x00,
83302 -0x25,0x20,0x89,0x00,
83303 -0xFF,0x03,0x4A,0x31,
83304 -0xFF,0x03,0x6B,0x31,
83305 -0x24,0x20,0x82,0x00,
83306 -0x00,0x55,0x0A,0x00,
83307 -0x24,0x18,0x62,0x00,
83308 -0x00,0x5D,0x0B,0x00,
83309 -0x25,0x18,0x6A,0x00,
83310 -0x25,0x20,0x8B,0x00,
83311 -0x16,0x00,0x86,0xA5,
83312 -0x0C,0x00,0x83,0xAD,
83313 -0x10,0x00,0x84,0xAD,
83314 -0x14,0x00,0x87,0xA5,
83315 -0x30,0x1F,0xF1,0x25,
83316 -0x10,0x00,0x22,0x8E,
83317 -0x01,0x00,0x03,0x24,
83318 -0x82,0x17,0x02,0x00,
83319 -0x4D,0x00,0x43,0x10,
83320 -0x25,0xB0,0x12,0x3C,
83321 -0x0C,0x00,0x23,0x8E,
83322 -0x80,0x0C,0x44,0x36,
83323 -0x00,0x00,0x88,0x8C,
83324 -0x00,0x02,0x62,0x30,
83325 -0xC0,0xFF,0x13,0x3C,
83326 -0x82,0x6D,0x08,0x00,
83327 -0x03,0x00,0x40,0x10,
83328 -0xFF,0x03,0x65,0x30,
83329 -0x00,0xFC,0x02,0x24,
83330 -0x25,0x28,0xA2,0x00,
83331 -0x18,0x00,0xAD,0x00,
83332 -0x82,0x62,0x03,0x00,
83333 -0xFF,0x03,0x8C,0x31,
83334 -0x00,0x02,0x83,0x31,
83335 -0x12,0x10,0x00,0x00,
83336 -0x02,0x12,0x02,0x00,
83337 -0x03,0x00,0x60,0x10,
83338 -0xFF,0x03,0x46,0x30,
83339 -0x00,0xFC,0x02,0x24,
83340 -0x25,0x60,0x82,0x01,
83341 -0x18,0x00,0x8D,0x01,
83342 -0x00,0xFC,0x74,0x36,
83343 -0x24,0x28,0x14,0x01,
83344 -0x12,0x80,0x00,0x00,
83345 -0x02,0x82,0x10,0x00,
83346 -0x3F,0x00,0x02,0x32,
83347 -0x00,0x14,0x02,0x00,
83348 -0x25,0x28,0xA2,0x00,
83349 -0x02,0x5C,0x00,0x0C,
83350 -0x25,0x28,0xA6,0x00,
83351 -0x94,0x0C,0x44,0x36,
83352 -0x00,0x00,0x85,0x8C,
83353 -0xFF,0x0F,0x02,0x3C,
83354 -0xFF,0xFF,0x55,0x34,
83355 -0xC0,0x03,0x10,0x32,
83356 -0x24,0x28,0xB5,0x00,
83357 -0x80,0x85,0x10,0x00,
83358 -0x02,0x5C,0x00,0x0C,
83359 -0x25,0x28,0xB0,0x00,
83360 -0x10,0x00,0x2C,0x8E,
83361 -0x88,0x0C,0x44,0x36,
83362 -0x00,0x00,0x88,0x8C,
83363 -0x82,0x2A,0x0C,0x00,
83364 -0xFF,0x03,0xA5,0x30,
83365 -0x24,0x10,0x13,0x01,
83366 -0x00,0x02,0xA3,0x30,
83367 -0x03,0x00,0x60,0x10,
83368 -0x82,0x6D,0x02,0x00,
83369 -0x00,0xFC,0x02,0x24,
83370 -0x25,0x28,0xA2,0x00,
83371 -0x18,0x00,0xAD,0x00,
83372 -0x02,0x65,0x0C,0x00,
83373 -0xFF,0x03,0x8C,0x31,
83374 -0x00,0x02,0x83,0x31,
83375 -0x12,0x10,0x00,0x00,
83376 -0x02,0x12,0x02,0x00,
83377 -0x03,0x00,0x60,0x10,
83378 -0xFF,0x03,0x46,0x30,
83379 -0x00,0xFC,0x02,0x24,
83380 -0x25,0x60,0x82,0x01,
83381 -0x18,0x00,0x8D,0x01,
83382 -0x24,0x28,0x14,0x01,
83383 -0x12,0x80,0x00,0x00,
83384 -0x02,0x82,0x10,0x00,
83385 -0x3F,0x00,0x02,0x32,
83386 -0x00,0x14,0x02,0x00,
83387 -0x25,0x28,0xA2,0x00,
83388 -0x02,0x5C,0x00,0x0C,
83389 -0x25,0x28,0xA6,0x00,
83390 -0x9C,0x0C,0x44,0x36,
83391 -0x00,0x00,0x85,0x8C,
83392 -0xC0,0x03,0x10,0x32,
83393 -0x80,0x85,0x10,0x00,
83394 -0x24,0x28,0xB5,0x00,
83395 -0x02,0x5C,0x00,0x0C,
83396 -0x25,0x28,0xB0,0x00,
83397 -0x78,0x00,0xA5,0x8F,
83398 -0x25,0xB0,0x10,0x3C,
83399 -0x02,0x5C,0x00,0x0C,
83400 -0xE0,0x0E,0x04,0x36,
83401 -0x7C,0x00,0xA5,0x8F,
83402 -0x02,0x5C,0x00,0x0C,
83403 -0xDC,0x0E,0x04,0x36,
83404 -0x80,0x00,0xA5,0x8F,
83405 -0x02,0x5C,0x00,0x0C,
83406 -0x70,0x0E,0x04,0x36,
83407 -0x84,0x00,0xA5,0x8F,
83408 -0x02,0x5C,0x00,0x0C,
83409 -0x74,0x0E,0x04,0x36,
83410 -0x88,0x00,0xA5,0x8F,
83411 -0x02,0x5C,0x00,0x0C,
83412 -0x78,0x0E,0x04,0x36,
83413 -0x8C,0x00,0xA5,0x8F,
83414 -0x02,0x5C,0x00,0x0C,
83415 -0x7C,0x0E,0x04,0x36,
83416 -0x90,0x00,0xA5,0x8F,
83417 -0x02,0x5C,0x00,0x0C,
83418 -0x80,0x0E,0x04,0x36,
83419 -0x94,0x00,0xA5,0x8F,
83420 -0x02,0x5C,0x00,0x0C,
83421 -0x84,0x0E,0x04,0x36,
83422 -0x98,0x00,0xA5,0x8F,
83423 -0x02,0x5C,0x00,0x0C,
83424 -0x88,0x0E,0x04,0x36,
83425 -0x9C,0x00,0xA5,0x8F,
83426 -0x02,0x5C,0x00,0x0C,
83427 -0x8C,0x0E,0x04,0x36,
83428 -0xA0,0x00,0xA5,0x8F,
83429 -0x02,0x5C,0x00,0x0C,
83430 -0xD0,0x0E,0x04,0x36,
83431 -0xA4,0x00,0xA5,0x8F,
83432 -0x02,0x5C,0x00,0x0C,
83433 -0xD4,0x0E,0x04,0x36,
83434 -0xA8,0x00,0xA5,0x8F,
83435 -0x88,0x0E,0x04,0x36,
83436 -0x02,0x5C,0x00,0x0C,
83437 -0x0F,0x00,0x10,0x3C,
83438 -0x70,0x00,0xA6,0x8F,
83439 -0xFF,0xFF,0x05,0x36,
83440 -0x5F,0x47,0x00,0x0C,
83441 -0x21,0x20,0x00,0x00,
83442 -0x54,0x22,0x00,0x0C,
83443 -0x64,0x00,0x04,0x24,
83444 -0xE6,0x44,0x00,0x0C,
83445 -0x01,0x00,0x04,0x24,
83446 -0x74,0x00,0xA6,0x8F,
83447 -0xFF,0xFF,0x05,0x36,
83448 -0x5F,0x47,0x00,0x0C,
83449 -0x21,0x20,0x00,0x00,
83450 -0x54,0x22,0x00,0x0C,
83451 -0x64,0x00,0x04,0x24,
83452 -0xE6,0x44,0x00,0x0C,
83453 -0x21,0x20,0x00,0x00,
83454 -0xFF,0xFF,0x05,0x36,
83455 -0x8A,0x47,0x00,0x0C,
83456 -0x1E,0x00,0x04,0x24,
83457 -0x21,0x88,0x40,0x00,
83458 -0xFD,0xFF,0x06,0x24,
83459 -0x01,0x00,0x42,0x34,
83460 -0x24,0x30,0x46,0x00,
83461 -0xFF,0xFF,0x05,0x36,
83462 -0x5F,0x47,0x00,0x0C,
83463 -0x1E,0x00,0x04,0x24,
83464 -0x25,0x22,0x00,0x0C,
83465 -0x03,0x00,0x04,0x24,
83466 -0xFF,0xFF,0x05,0x36,
83467 -0x03,0x00,0x26,0x36,
83468 -0x5F,0x47,0x00,0x0C,
83469 -0x1E,0x00,0x04,0x24,
83470 -0xDC,0x00,0xBF,0x8F,
83471 -0xD8,0x00,0xBE,0x8F,
83472 -0xD4,0x00,0xB7,0x8F,
83473 -0xD0,0x00,0xB6,0x8F,
83474 -0xCC,0x00,0xB5,0x8F,
83475 -0xC8,0x00,0xB4,0x8F,
83476 -0xC4,0x00,0xB3,0x8F,
83477 -0xC0,0x00,0xB2,0x8F,
83478 -0xBC,0x00,0xB1,0x8F,
83479 -0xB8,0x00,0xB0,0x8F,
83480 -0x08,0x00,0xE0,0x03,
83481 -0xE0,0x00,0xBD,0x27,
83482 -0xFF,0x00,0x05,0x24,
83483 -0xFF,0x00,0x02,0x24,
83484 -0x29,0xFF,0xA2,0x14,
83485 -0x10,0x00,0xA2,0x27,
83486 -0x25,0xB0,0x03,0x3C,
83487 -0x94,0x0E,0x62,0x34,
83488 -0x9C,0x0E,0x64,0x34,
83489 -0xA4,0x0E,0x65,0x34,
83490 -0xAC,0x0E,0x66,0x34,
83491 -0x02,0x80,0x0F,0x3C,
83492 -0x00,0x00,0x49,0x8C,
83493 -0x30,0x1F,0xED,0x25,
83494 -0x00,0x00,0x8C,0x8C,
83495 -0x00,0x00,0xAE,0x8C,
83496 -0x00,0x00,0xC7,0x8C,
83497 -0xB4,0x0E,0x62,0x34,
83498 -0x0C,0x00,0xA4,0x8D,
83499 -0x10,0x00,0xA5,0x8D,
83500 -0x00,0x00,0x4A,0x8C,
83501 -0xFF,0x03,0x06,0x3C,
83502 -0x00,0xFC,0x08,0x24,
83503 -0xBC,0x0E,0x62,0x34,
83504 -0x24,0x48,0x26,0x01,
83505 -0x24,0x38,0xE6,0x00,
83506 -0x00,0x00,0x4B,0x8C,
83507 -0x24,0x28,0xA8,0x00,
83508 -0x24,0x20,0x88,0x00,
83509 -0x02,0x3C,0x07,0x00,
83510 -0xCC,0x0E,0x68,0x34,
83511 -0x02,0x4C,0x09,0x00,
83512 -0xC4,0x0E,0x63,0x34,
83513 -0xF0,0xFF,0x02,0x3C,
83514 -0xFF,0x03,0x42,0x34,
83515 -0x25,0x28,0xA7,0x00,
83516 -0x25,0x20,0x89,0x00,
83517 -0x00,0x00,0x67,0x8C,
83518 -0x24,0x60,0x86,0x01,
83519 -0x00,0x00,0x03,0x8D,
83520 -0x24,0x50,0x46,0x01,
83521 -0x24,0x28,0xA2,0x00,
83522 -0x24,0x20,0x82,0x00,
83523 -0x82,0x61,0x0C,0x00,
83524 -0x82,0x51,0x0A,0x00,
83525 -0x0F,0xC0,0x02,0x3C,
83526 -0xFF,0xFF,0x42,0x34,
83527 -0x25,0x20,0x8C,0x00,
83528 -0x25,0x28,0xAA,0x00,
83529 -0x24,0x70,0xC6,0x01,
83530 -0x24,0x58,0x66,0x01,
83531 -0x24,0x28,0xA2,0x00,
83532 -0x24,0x18,0x66,0x00,
83533 -0x00,0x71,0x0E,0x00,
83534 -0x24,0x20,0x82,0x00,
83535 -0x00,0x59,0x0B,0x00,
83536 -0x24,0x38,0xE6,0x00,
83537 -0x25,0x20,0x8E,0x00,
83538 -0x25,0x28,0xAB,0x00,
83539 -0x02,0x3C,0x07,0x00,
83540 -0x02,0x1C,0x03,0x00,
83541 -0x16,0x00,0xA3,0xA5,
83542 -0x0C,0x00,0xA4,0xAD,
83543 -0x10,0x00,0xA5,0xAD,
83544 -0x4D,0x2A,0x00,0x08,
83545 -0x14,0x00,0xA7,0xA5,
83546 -0x30,0x00,0xB1,0x8F,
83547 -0xF5,0x29,0x00,0x08,
83548 -0x21,0x20,0x00,0x02,
83549 -0x25,0xB0,0x05,0x3C,
83550 -0x4C,0x00,0xA2,0x34,
83551 -0x02,0x80,0x07,0x3C,
83552 -0x00,0x00,0x43,0x90,
83553 -0x30,0x1F,0xE4,0x24,
83554 -0xC1,0x1B,0x82,0x90,
83555 -0x03,0x00,0x66,0x30,
83556 -0x24,0x00,0x46,0x10,
83557 -0x00,0x00,0x00,0x00,
83558 -0x18,0x00,0xC0,0x14,
83559 -0x25,0xB0,0x03,0x3C,
83560 -0xE6,0x02,0x82,0x90,
83561 -0x00,0x00,0x00,0x00,
83562 -0x15,0x00,0x40,0x14,
83563 -0x58,0x00,0x62,0x34,
83564 -0x1C,0x00,0x02,0x24,
83565 -0x50,0x0C,0xA3,0x34,
83566 -0x00,0x00,0x62,0xA0,
83567 -0x21,0x10,0x00,0x00,
83568 -0x01,0x00,0x42,0x24,
83569 -0xFF,0x00,0x42,0x30,
83570 -0x06,0x00,0x43,0x2C,
83571 -0xFD,0xFF,0x60,0x14,
83572 -0x01,0x00,0x42,0x24,
83573 -0x25,0xB0,0x02,0x3C,
83574 -0x58,0x0C,0x42,0x34,
83575 -0x1C,0x00,0x03,0x24,
83576 -0x00,0x00,0x43,0xA0,
83577 -0x21,0x10,0x00,0x00,
83578 -0x01,0x00,0x42,0x24,
83579 -0xFF,0x00,0x42,0x30,
83580 -0x06,0x00,0x43,0x2C,
83581 -0xFC,0xFF,0x60,0x14,
83582 -0x25,0xB0,0x03,0x3C,
83583 -0x58,0x00,0x62,0x34,
83584 -0x00,0x00,0x45,0x8C,
83585 -0x29,0xB0,0x04,0x3C,
83586 -0x5C,0x00,0x63,0x34,
83587 -0x00,0x00,0x85,0xAC,
83588 -0x00,0x00,0x65,0x8C,
83589 -0x30,0x1F,0xE2,0x24,
83590 -0x04,0x00,0x84,0x34,
83591 -0xC1,0x1B,0x46,0xA0,
83592 -0x00,0x00,0x85,0xAC,
83593 -0x08,0x00,0xE0,0x03,
83594 -0x21,0x10,0x00,0x00,
83595 -0x25,0xB0,0x02,0x3C,
83596 -0xE8,0xFF,0xBD,0x27,
83597 -0x10,0x00,0xBF,0xAF,
83598 -0x2D,0x0A,0x46,0x34,
83599 -0xA2,0x0D,0x43,0x34,
83600 -0xA4,0x0D,0x44,0x34,
83601 -0xA6,0x0D,0x45,0x34,
83602 -0xA8,0x0D,0x42,0x34,
83603 -0x00,0x00,0x67,0x94,
83604 -0x00,0x00,0x88,0x94,
83605 -0x00,0x00,0xA9,0x94,
83606 -0x00,0x00,0x44,0x94,
83607 -0x00,0x00,0xC3,0x90,
83608 -0x02,0x80,0x0A,0x3C,
83609 -0x30,0x1F,0x42,0x25,
83610 -0x40,0x00,0x63,0x34,
83611 -0xFF,0x00,0x63,0x30,
83612 -0xDE,0x02,0x44,0xA4,
83613 -0x00,0x00,0xC3,0xA0,
83614 -0xD8,0x02,0x47,0xA4,
83615 -0xDA,0x02,0x48,0xA4,
83616 -0xDC,0x02,0x49,0xA4,
83617 -0x21,0x10,0x00,0x00,
83618 -0x01,0x00,0x42,0x24,
83619 -0xFF,0x00,0x42,0x30,
83620 -0x06,0x00,0x43,0x2C,
83621 -0xFD,0xFF,0x60,0x14,
83622 -0x01,0x00,0x42,0x24,
83623 -0x25,0xB0,0x07,0x3C,
83624 -0x5B,0x0A,0xE2,0x34,
83625 -0x00,0x00,0x44,0x90,
83626 -0x30,0x1F,0x46,0x25,
83627 -0x5C,0x0A,0xE2,0x34,
83628 -0x00,0x00,0x45,0x90,
83629 -0xD8,0x02,0xC3,0x94,
83630 -0xDA,0x02,0xC2,0x94,
83631 -0xDC,0x02,0xC9,0x94,
83632 -0xDE,0x02,0xC8,0x94,
83633 -0xFF,0x00,0x84,0x30,
83634 -0x21,0x18,0x62,0x00,
83635 -0x00,0x22,0x04,0x00,
83636 -0xFF,0x00,0xA5,0x30,
83637 -0x21,0x20,0x85,0x00,
83638 -0x21,0x18,0x69,0x00,
83639 -0xFF,0xFF,0x82,0x30,
83640 -0x21,0x18,0x68,0x00,
83641 -0x21,0x18,0x62,0x00,
83642 -0x64,0x0C,0xE7,0x34,
83643 -0xFF,0xFF,0x42,0x30,
83644 -0xE0,0x02,0xC3,0xAC,
83645 -0x00,0x00,0xE2,0xA4,
83646 -0xE4,0x02,0xC4,0xA4,
83647 -0x21,0x10,0x00,0x00,
83648 -0x01,0x00,0x42,0x24,
83649 -0xFF,0x00,0x42,0x30,
83650 -0x06,0x00,0x43,0x2C,
83651 -0xFD,0xFF,0x60,0x14,
83652 -0x01,0x00,0x42,0x24,
83653 -0x30,0x1F,0x42,0x8D,
83654 -0x01,0x00,0x03,0x24,
83655 -0x0F,0x00,0x44,0x30,
83656 -0x07,0x00,0x83,0x10,
83657 -0x30,0x1F,0x45,0x25,
83658 -0xB6,0x5F,0x00,0x0C,
83659 -0x00,0x00,0x00,0x00,
83660 -0x10,0x00,0xBF,0x8F,
83661 -0x21,0x10,0x00,0x00,
83662 -0x08,0x00,0xE0,0x03,
83663 -0x18,0x00,0xBD,0x27,
83664 -0xE4,0x02,0xA2,0x8C,
83665 -0x00,0x00,0x00,0x00,
83666 -0x02,0x17,0x02,0x00,
83667 -0x03,0x00,0x42,0x30,
83668 -0xF5,0xFF,0x40,0x14,
83669 -0x25,0xB0,0x02,0x3C,
83670 -0x4C,0x00,0x42,0x34,
83671 -0x00,0x00,0x43,0x90,
83672 -0x00,0x00,0x00,0x00,
83673 -0x03,0x00,0x63,0x30,
83674 -0x3F,0x00,0x64,0x10,
83675 -0x30,0x1F,0x44,0x25,
83676 -0xE6,0x02,0x82,0x90,
83677 -0x00,0x00,0x00,0x00,
83678 -0x07,0x00,0x40,0x14,
83679 -0x01,0x00,0x03,0x24,
83680 -0x30,0x1F,0x42,0x8D,
83681 -0x00,0x00,0x00,0x00,
83682 -0x02,0x12,0x02,0x00,
83683 -0x0F,0x00,0x42,0x30,
83684 -0x3C,0x00,0x43,0x10,
83685 -0x25,0xB0,0x02,0x3C,
83686 -0x30,0x1F,0x45,0x25,
83687 -0xE6,0x02,0xA3,0x90,
83688 -0xFF,0x00,0x02,0x24,
83689 -0xE0,0xFF,0x62,0x14,
83690 -0x25,0xB0,0x03,0x3C,
83691 -0xC8,0x02,0xA2,0x94,
83692 -0xE0,0x02,0xA6,0x8C,
83693 -0x50,0x0C,0x63,0x34,
83694 -0x00,0x00,0x64,0x90,
83695 -0x2B,0x10,0xC2,0x00,
83696 -0x85,0x00,0x40,0x10,
83697 -0x7F,0x00,0x84,0x30,
83698 -0xFF,0xFF,0x82,0x24,
83699 -0xFF,0x00,0x44,0x30,
83700 -0x30,0x1F,0x45,0x25,
83701 -0xD0,0x02,0xA3,0x90,
83702 -0x00,0x00,0x00,0x00,
83703 -0x2B,0x10,0x64,0x00,
83704 -0x78,0x00,0x40,0x10,
83705 -0x00,0x00,0x00,0x00,
83706 -0x21,0x20,0x60,0x00,
83707 -0x30,0x1F,0x43,0x25,
83708 -0xE0,0x02,0x62,0x8C,
83709 -0x00,0x00,0x00,0x00,
83710 -0x11,0x27,0x42,0x2C,
83711 -0x6D,0x00,0x40,0x14,
83712 -0x3A,0x00,0x82,0x2C,
83713 -0x32,0x00,0x04,0x24,
83714 -0x44,0x00,0x03,0x24,
83715 -0x25,0xB0,0x02,0x3C,
83716 -0x30,0x0C,0x42,0x34,
83717 -0x00,0x00,0x43,0xA0,
83718 -0x25,0xB0,0x02,0x3C,
83719 -0x50,0x0C,0x42,0x34,
83720 -0x00,0x00,0x44,0xA0,
83721 -0x21,0x10,0x00,0x00,
83722 -0x01,0x00,0x42,0x24,
83723 -0xFF,0x00,0x42,0x30,
83724 -0x06,0x00,0x43,0x2C,
83725 -0xFD,0xFF,0x60,0x14,
83726 -0x01,0x00,0x42,0x24,
83727 -0x25,0xB0,0x02,0x3C,
83728 -0x58,0x0C,0x42,0x34,
83729 -0x00,0x00,0x44,0xA0,
83730 -0x21,0x10,0x00,0x00,
83731 -0x01,0x00,0x42,0x24,
83732 -0xFF,0x00,0x42,0x30,
83733 -0x06,0x00,0x43,0x2C,
83734 -0xFD,0xFF,0x60,0x14,
83735 -0x01,0x00,0x42,0x24,
83736 -0xA4,0x2B,0x00,0x08,
83737 -0x00,0x00,0x00,0x00,
83738 -0xE6,0x02,0xA2,0x90,
83739 -0x00,0x00,0x00,0x00,
83740 -0xBF,0xFF,0x40,0x14,
83741 -0x00,0x00,0x00,0x00,
83742 -0xFF,0xFF,0x02,0x24,
83743 -0xB6,0x2B,0x00,0x08,
83744 -0xE6,0x02,0xA2,0xA0,
83745 -0x4C,0x00,0x42,0x34,
83746 -0x00,0x00,0x43,0x90,
83747 -0x00,0x00,0x00,0x00,
83748 -0x03,0x00,0x63,0x30,
83749 -0xA4,0xFF,0x60,0x10,
83750 -0xFF,0xFF,0x02,0x34,
83751 -0x80,0x36,0x83,0x8C,
83752 -0x00,0x00,0x00,0x00,
83753 -0xA0,0xFF,0x62,0x10,
83754 -0x00,0x00,0x00,0x00,
83755 -0xE0,0x02,0x83,0x8C,
83756 -0x00,0x00,0x00,0x00,
83757 -0x65,0x00,0x62,0x2C,
83758 -0x59,0x00,0x40,0x14,
83759 -0x28,0x00,0x62,0x2C,
83760 -0xD2,0x02,0x83,0x90,
83761 -0x00,0x00,0x00,0x00,
83762 -0x00,0x16,0x03,0x00,
83763 -0x03,0x16,0x02,0x00,
83764 -0xFE,0xFF,0x42,0x24,
83765 -0xFC,0xFF,0x42,0x28,
83766 -0x02,0x00,0x40,0x10,
83767 -0xFE,0xFF,0x62,0x24,
83768 -0xFC,0xFF,0x02,0x24,
83769 -0xD2,0x02,0x82,0xA0,
83770 -0x30,0x1F,0x45,0x25,
83771 -0x80,0x36,0xA2,0x8C,
83772 -0xD2,0x02,0xA3,0x90,
83773 -0xCE,0x02,0xA6,0x90,
83774 -0x02,0x11,0x02,0x00,
83775 -0x7F,0x00,0x42,0x30,
83776 -0x0A,0x00,0x44,0x24,
83777 -0x23,0x18,0x83,0x00,
83778 -0x00,0x26,0x03,0x00,
83779 -0x03,0x26,0x04,0x00,
83780 -0xFF,0x00,0xC2,0x30,
83781 -0x2A,0x10,0x44,0x00,
83782 -0x4D,0x00,0x40,0x10,
83783 -0x00,0x00,0x00,0x00,
83784 -0x00,0x26,0x06,0x00,
83785 -0x03,0x26,0x04,0x00,
83786 -0x30,0x1F,0x43,0x25,
83787 -0xE0,0x02,0x62,0x8C,
83788 -0x00,0x00,0x00,0x00,
83789 -0x11,0x27,0x42,0x2C,
83790 -0x33,0x00,0x40,0x14,
83791 -0x3A,0x00,0x82,0x28,
83792 -0x32,0x00,0x82,0x28,
83793 -0x30,0x00,0x40,0x10,
83794 -0x3A,0x00,0x82,0x28,
83795 -0x32,0x00,0x04,0x24,
83796 -0x44,0x00,0x03,0x24,
83797 -0x25,0xB0,0x02,0x3C,
83798 -0x30,0x0C,0x42,0x34,
83799 -0x00,0x00,0x43,0xA0,
83800 -0x25,0xB0,0x02,0x3C,
83801 -0x50,0x0C,0x42,0x34,
83802 -0xFF,0x00,0x84,0x30,
83803 -0x00,0x00,0x44,0xA0,
83804 -0x21,0x10,0x00,0x00,
83805 -0x01,0x00,0x42,0x24,
83806 -0xFF,0x00,0x42,0x30,
83807 -0x06,0x00,0x43,0x2C,
83808 -0xFD,0xFF,0x60,0x14,
83809 -0x01,0x00,0x42,0x24,
83810 -0x25,0xB0,0x02,0x3C,
83811 -0x58,0x0C,0x42,0x34,
83812 -0x00,0x00,0x44,0xA0,
83813 -0x21,0x10,0x00,0x00,
83814 -0x01,0x00,0x42,0x24,
83815 -0xFF,0x00,0x42,0x30,
83816 -0x06,0x00,0x43,0x2C,
83817 -0xFD,0xFF,0x60,0x14,
83818 -0x01,0x00,0x42,0x24,
83819 -0xA4,0x2B,0x00,0x08,
83820 -0x00,0x00,0x00,0x00,
83821 -0x95,0xFF,0x40,0x10,
83822 -0x48,0x00,0x03,0x24,
83823 -0xDD,0x2B,0x00,0x08,
83824 -0x44,0x00,0x03,0x24,
83825 -0xD1,0x02,0xA3,0x90,
83826 -0x00,0x00,0x00,0x00,
83827 -0x2B,0x10,0x83,0x00,
83828 -0xD5,0x2B,0x00,0x08,
83829 -0x0B,0x20,0x62,0x00,
83830 -0xCA,0x02,0xA2,0x94,
83831 -0x00,0x00,0x00,0x00,
83832 -0x2B,0x10,0xC2,0x00,
83833 -0x7A,0xFF,0x40,0x14,
83834 -0x00,0x00,0x00,0x00,
83835 -0xCC,0x02,0xA2,0x94,
83836 -0x00,0x00,0x00,0x00,
83837 -0x2B,0x10,0xC2,0x00,
83838 -0x07,0x00,0x40,0x10,
83839 -0x00,0x00,0x00,0x00,
83840 -0xCD,0x2B,0x00,0x08,
83841 -0x01,0x00,0x82,0x24,
83842 -0xD2,0xFF,0x40,0x10,
83843 -0x48,0x00,0x03,0x24,
83844 -0x2F,0x2C,0x00,0x08,
83845 -0x44,0x00,0x03,0x24,
83846 -0xCD,0x2B,0x00,0x08,
83847 -0x02,0x00,0x82,0x24,
83848 -0xB2,0xFF,0x40,0x10,
83849 -0x30,0x1F,0x45,0x25,
83850 -0xD2,0x02,0x83,0x90,
83851 -0x00,0x00,0x00,0x00,
83852 -0x00,0x16,0x03,0x00,
83853 -0x03,0x16,0x02,0x00,
83854 -0x02,0x00,0x42,0x24,
83855 -0x0D,0x00,0x42,0x28,
83856 -0x09,0x00,0x40,0x14,
83857 -0x00,0x00,0x00,0x00,
83858 -0x13,0x2C,0x00,0x08,
83859 -0x0C,0x00,0x02,0x24,
83860 -0xCF,0x02,0xA3,0x80,
83861 -0x00,0x00,0x00,0x00,
83862 -0xFF,0x00,0x62,0x30,
83863 -0x2A,0x10,0x82,0x00,
83864 -0x24,0x2C,0x00,0x08,
83865 -0x0B,0x20,0x62,0x00,
83866 -0x13,0x2C,0x00,0x08,
83867 -0x02,0x00,0x62,0x24,
83868 -0xC0,0xFF,0xBD,0x27,
83869 -0x28,0x00,0xB4,0xAF,
83870 -0x25,0xB0,0x14,0x3C,
83871 -0x20,0x00,0xB2,0xAF,
83872 -0x1C,0x00,0xB1,0xAF,
83873 -0x18,0x00,0xB0,0xAF,
83874 -0x3C,0x00,0xBF,0xAF,
83875 -0x38,0x00,0xBE,0xAF,
83876 -0x34,0x00,0xB7,0xAF,
83877 -0x30,0x00,0xB6,0xAF,
83878 -0x2C,0x00,0xB5,0xAF,
83879 -0x24,0x00,0xB3,0xAF,
83880 -0xD8,0x00,0x86,0x36,
83881 -0x00,0x00,0xC3,0x90,
83882 -0x02,0x80,0x02,0x3C,
83883 -0x30,0x1F,0x51,0x24,
83884 -0x2A,0xB0,0x10,0x3C,
83885 -0xA0,0xFF,0x02,0x24,
83886 -0x25,0x18,0x62,0x00,
83887 -0x34,0x00,0x05,0x36,
83888 -0xFE,0xFF,0x02,0x24,
83889 -0xBC,0x02,0x33,0x92,
83890 -0x40,0x00,0x04,0x24,
83891 -0x00,0x00,0xC3,0xA0,
83892 -0x00,0x00,0xA2,0xA0,
83893 -0x25,0x24,0x00,0x0C,
83894 -0x00,0x9E,0x13,0x00,
83895 -0x21,0x90,0x40,0x00,
83896 -0x8A,0x00,0x40,0x12,
83897 -0x00,0x40,0x02,0x3C,
83898 -0x08,0x00,0x43,0x8E,
83899 -0xB0,0x03,0x82,0x36,
83900 -0x25,0xB0,0x1E,0x3C,
83901 -0x21,0x20,0x40,0x02,
83902 -0x00,0x00,0x43,0xAC,
83903 -0x0C,0x4D,0x00,0x0C,
83904 -0x21,0xB8,0x20,0x02,
83905 -0x42,0x00,0xD5,0x37,
83906 -0x03,0x0C,0xD1,0x37,
83907 -0x17,0x0E,0xD6,0x37,
83908 -0x04,0x00,0x14,0x24,
83909 -0x2A,0xB0,0x03,0x3C,
83910 -0x06,0x00,0x63,0x34,
83911 -0x00,0x00,0x62,0x94,
83912 -0x00,0x00,0x00,0x00,
83913 -0x00,0xFF,0x42,0x30,
83914 -0x0A,0x00,0x40,0x18,
83915 -0x00,0x00,0x00,0x00,
83916 -0x02,0x80,0x04,0x3C,
83917 -0x8C,0xF0,0x84,0x24,
83918 -0x00,0x00,0x83,0x8C,
83919 -0x00,0x00,0x00,0x00,
83920 -0x00,0x00,0x62,0x94,
83921 -0x00,0x00,0x00,0x00,
83922 -0x00,0xFF,0x42,0x30,
83923 -0xFC,0xFF,0x40,0x1C,
83924 -0x00,0x00,0x00,0x00,
83925 -0x08,0x00,0x45,0x8E,
83926 -0x20,0x10,0x06,0x3C,
83927 -0x01,0x00,0x04,0x24,
83928 -0x00,0xFE,0xC6,0x34,
83929 -0x40,0x00,0x07,0x24,
83930 -0x73,0x01,0x00,0x0C,
83931 -0x10,0x00,0xA4,0xAF,
83932 -0xB0,0x01,0x00,0x0C,
83933 -0x01,0x00,0x04,0x24,
83934 -0x02,0x80,0x02,0x3C,
83935 -0x90,0xF0,0x42,0x24,
83936 -0x00,0x00,0x45,0x8C,
83937 -0x01,0x00,0x03,0x24,
83938 -0x21,0x20,0x00,0x00,
83939 -0x00,0x00,0xA3,0xA0,
83940 -0xFF,0xFF,0x03,0x24,
83941 -0x00,0x00,0xA3,0xA2,
83942 -0x00,0x00,0x22,0x92,
83943 -0x00,0x00,0x00,0x00,
83944 -0xFF,0x00,0x42,0x30,
83945 -0x40,0x00,0x42,0x34,
83946 -0x00,0x00,0x22,0xA2,
83947 -0x01,0x00,0x82,0x24,
83948 -0xFF,0x00,0x44,0x30,
83949 -0x06,0x00,0x83,0x2C,
83950 -0xFD,0xFF,0x60,0x14,
83951 -0x01,0x00,0x82,0x24,
83952 -0x02,0x00,0x02,0x24,
83953 -0x02,0x80,0x04,0x3C,
83954 -0x00,0x00,0xA2,0xA0,
83955 -0x30,0x1F,0x83,0x24,
83956 -0xC1,0x02,0x62,0x90,
83957 -0x00,0x00,0xC4,0x92,
83958 -0x21,0x28,0x00,0x00,
83959 -0x00,0x00,0xC2,0xA2,
83960 -0xFF,0x00,0x90,0x30,
83961 -0x01,0x00,0xA2,0x24,
83962 -0xFF,0x00,0x45,0x30,
83963 -0x06,0x00,0xA3,0x2C,
83964 -0xFD,0xFF,0x60,0x14,
83965 -0x01,0x00,0xA2,0x24,
83966 -0xEF,0xFF,0x02,0x24,
83967 -0x64,0x00,0x04,0x24,
83968 -0x00,0x00,0xA2,0xA2,
83969 -0x54,0x22,0x00,0x0C,
83970 -0x00,0x00,0x00,0x00,
83971 -0x00,0x00,0x22,0x92,
83972 -0x21,0x20,0x00,0x00,
83973 -0xBF,0x00,0x42,0x30,
83974 -0x00,0x00,0x22,0xA2,
83975 -0x01,0x00,0x82,0x24,
83976 -0xFF,0x00,0x44,0x30,
83977 -0x06,0x00,0x83,0x2C,
83978 -0xFD,0xFF,0x60,0x14,
83979 -0x01,0x00,0x82,0x24,
83980 -0x54,0x22,0x00,0x0C,
83981 -0x84,0x03,0x04,0x24,
83982 -0xF4,0x08,0xC2,0x37,
83983 -0x00,0x00,0x43,0x8C,
83984 -0x00,0x80,0x04,0x3C,
83985 -0xDF,0x07,0x84,0x34,
83986 -0x00,0x00,0xD0,0xA2,
83987 -0x21,0x10,0x00,0x00,
83988 -0x24,0x28,0x64,0x00,
83989 -0x01,0x00,0x42,0x24,
83990 -0xFF,0x00,0x42,0x30,
83991 -0x06,0x00,0x43,0x2C,
83992 -0xFD,0xFF,0x60,0x14,
83993 -0x01,0x00,0x42,0x24,
83994 -0x00,0x00,0xA0,0xA2,
83995 -0x00,0x00,0x22,0x92,
83996 -0x21,0x20,0x00,0x00,
83997 -0xFF,0x00,0x42,0x30,
83998 -0x40,0x00,0x42,0x34,
83999 -0x00,0x00,0x22,0xA2,
84000 -0x01,0x00,0x82,0x24,
84001 -0xFF,0x00,0x44,0x30,
84002 -0x06,0x00,0x83,0x2C,
84003 -0xFD,0xFF,0x60,0x14,
84004 -0x01,0x00,0x82,0x24,
84005 -0xBE,0x02,0xE2,0x92,
84006 -0x1F,0x00,0xA3,0x30,
84007 -0x2B,0x10,0x62,0x00,
84008 -0x0A,0x00,0x40,0x10,
84009 -0x02,0x80,0x02,0x3C,
84010 -0xBF,0x02,0xE2,0x92,
84011 -0x00,0x00,0x00,0x00,
84012 -0x2B,0x10,0x43,0x00,
84013 -0x05,0x00,0x40,0x10,
84014 -0x02,0x80,0x02,0x3C,
84015 -0x01,0x00,0x02,0x3C,
84016 -0x25,0x10,0x62,0x00,
84017 -0x21,0x98,0x62,0x02,
84018 -0x02,0x80,0x02,0x3C,
84019 -0xDE,0x5D,0x43,0x90,
84020 -0x22,0x00,0x02,0x24,
84021 -0x19,0x00,0x62,0x10,
84022 -0x92,0x00,0x02,0x24,
84023 -0x18,0x00,0x62,0x10,
84024 -0x02,0x80,0x03,0x3C,
84025 -0xFF,0xFF,0x94,0x26,
84026 -0x54,0x22,0x00,0x0C,
84027 -0xF4,0x01,0x04,0x24,
84028 -0x89,0xFF,0x81,0x06,
84029 -0x2A,0xB0,0x03,0x3C,
84030 -0x04,0x00,0x40,0x12,
84031 -0x21,0x10,0x60,0x02,
84032 -0x3D,0x24,0x00,0x0C,
84033 -0x21,0x20,0x40,0x02,
84034 -0x21,0x10,0x60,0x02,
84035 -0x3C,0x00,0xBF,0x8F,
84036 -0x38,0x00,0xBE,0x8F,
84037 -0x34,0x00,0xB7,0x8F,
84038 -0x30,0x00,0xB6,0x8F,
84039 -0x2C,0x00,0xB5,0x8F,
84040 -0x28,0x00,0xB4,0x8F,
84041 -0x24,0x00,0xB3,0x8F,
84042 -0x20,0x00,0xB2,0x8F,
84043 -0x1C,0x00,0xB1,0x8F,
84044 -0x18,0x00,0xB0,0x8F,
84045 -0x08,0x00,0xE0,0x03,
84046 -0x40,0x00,0xBD,0x27,
84047 -0x02,0x80,0x03,0x3C,
84048 -0x30,0x1F,0x63,0x24,
84049 -0xBE,0x02,0x62,0x90,
84050 -0xC0,0x07,0xA3,0x30,
84051 -0x82,0x19,0x03,0x00,
84052 -0x2B,0x10,0x62,0x00,
84053 -0xE3,0xFF,0x40,0x10,
84054 -0x02,0x80,0x04,0x3C,
84055 -0x30,0x1F,0x84,0x24,
84056 -0xBF,0x02,0x82,0x90,
84057 -0x00,0x00,0x00,0x00,
84058 -0x2B,0x10,0x43,0x00,
84059 -0xDD,0xFF,0x40,0x10,
84060 -0x00,0x12,0x03,0x00,
84061 -0x10,0x00,0x03,0x3C,
84062 -0x25,0x10,0x43,0x00,
84063 -0x13,0x2D,0x00,0x08,
84064 -0x21,0x98,0x62,0x02,
84065 -0xE0,0xFF,0xBD,0x27,
84066 -0x10,0x00,0xB0,0xAF,
84067 -0x0F,0x00,0x10,0x3C,
84068 -0xFF,0xFF,0x05,0x36,
84069 -0xF0,0xF8,0x06,0x34,
84070 -0x15,0x00,0x04,0x24,
84071 -0x1C,0x00,0xBF,0xAF,
84072 -0x18,0x00,0xB2,0xAF,
84073 -0x5F,0x47,0x00,0x0C,
84074 -0x14,0x00,0xB1,0xAF,
84075 -0x54,0x22,0x00,0x0C,
84076 -0x64,0x00,0x04,0x24,
84077 -0x02,0x80,0x12,0x3C,
84078 -0xFF,0xFF,0x05,0x36,
84079 -0x56,0x30,0x06,0x24,
84080 -0x5F,0x47,0x00,0x0C,
84081 -0x1A,0x00,0x04,0x24,
84082 -0x30,0x1F,0x51,0x26,
84083 -0x54,0x22,0x00,0x0C,
84084 -0x64,0x00,0x04,0x24,
84085 -0x04,0x03,0x23,0x92,
84086 -0x04,0x00,0x02,0x24,
84087 -0x20,0x00,0x62,0x10,
84088 -0x25,0xB0,0x02,0x3C,
84089 -0x14,0x03,0x25,0x8E,
84090 -0x25,0xB0,0x10,0x3C,
84091 -0x43,0x60,0x00,0x0C,
84092 -0x00,0x0E,0x04,0x36,
84093 -0x14,0x03,0x25,0x8E,
84094 -0x43,0x60,0x00,0x0C,
84095 -0x04,0x0E,0x04,0x36,
84096 -0x18,0x03,0x25,0x8E,
84097 -0x43,0x60,0x00,0x0C,
84098 -0x08,0x0E,0x04,0x36,
84099 -0x14,0x03,0x25,0x8E,
84100 -0x43,0x60,0x00,0x0C,
84101 -0x10,0x0E,0x04,0x36,
84102 -0x14,0x03,0x25,0x8E,
84103 -0x43,0x60,0x00,0x0C,
84104 -0x14,0x0E,0x04,0x36,
84105 -0x14,0x03,0x25,0x8E,
84106 -0x43,0x60,0x00,0x0C,
84107 -0x18,0x0E,0x04,0x36,
84108 -0x14,0x03,0x25,0x8E,
84109 -0x43,0x60,0x00,0x0C,
84110 -0x1C,0x0E,0x04,0x36,
84111 -0x30,0x1F,0x43,0x26,
84112 -0x1C,0x00,0xBF,0x8F,
84113 -0x18,0x00,0xB2,0x8F,
84114 -0x14,0x00,0xB1,0x8F,
84115 -0x10,0x00,0xB0,0x8F,
84116 -0x04,0x00,0x02,0x24,
84117 -0x20,0x00,0xBD,0x27,
84118 -0x08,0x00,0xE0,0x03,
84119 -0x04,0x03,0x62,0xA0,
84120 -0x00,0x0E,0x42,0x34,
84121 -0x00,0x00,0x43,0x8C,
84122 -0x14,0x03,0x25,0x8E,
84123 -0x00,0x00,0x00,0x00,
84124 -0xDE,0xFF,0x65,0x14,
84125 -0x25,0xB0,0x10,0x3C,
84126 -0x6A,0x2D,0x00,0x08,
84127 -0x30,0x1F,0x43,0x26,
84128 -0xE0,0xFF,0xBD,0x27,
84129 -0x10,0x00,0xB0,0xAF,
84130 -0x0F,0x00,0x10,0x3C,
84131 -0xFF,0xFF,0x05,0x36,
84132 -0xF0,0xF8,0x06,0x34,
84133 -0x15,0x00,0x04,0x24,
84134 -0x1C,0x00,0xBF,0xAF,
84135 -0x18,0x00,0xB2,0xAF,
84136 -0x5F,0x47,0x00,0x0C,
84137 -0x14,0x00,0xB1,0xAF,
84138 -0x54,0x22,0x00,0x0C,
84139 -0x64,0x00,0x04,0x24,
84140 -0xFF,0xFF,0x05,0x36,
84141 -0x56,0x30,0x06,0x24,
84142 -0x5F,0x47,0x00,0x0C,
84143 -0x1A,0x00,0x04,0x24,
84144 -0x02,0x80,0x10,0x3C,
84145 -0x54,0x22,0x00,0x0C,
84146 -0x64,0x00,0x04,0x24,
84147 -0x30,0x1F,0x02,0x26,
84148 -0x04,0x03,0x46,0x90,
84149 -0x25,0xB0,0x11,0x3C,
84150 -0x10,0x10,0x12,0x3C,
84151 -0x01,0x00,0x03,0x24,
84152 -0x00,0x0E,0x24,0x36,
84153 -0x1E,0x00,0xC3,0x10,
84154 -0x10,0x10,0x45,0x36,
84155 -0x43,0x60,0x00,0x0C,
84156 -0x00,0x00,0x00,0x00,
84157 -0x04,0x0E,0x24,0x36,
84158 -0x43,0x60,0x00,0x0C,
84159 -0x10,0x10,0x45,0x36,
84160 -0x08,0x0E,0x24,0x36,
84161 -0x43,0x60,0x00,0x0C,
84162 -0x10,0x10,0x05,0x24,
84163 -0x10,0x0E,0x24,0x36,
84164 -0x43,0x60,0x00,0x0C,
84165 -0x10,0x10,0x45,0x36,
84166 -0x14,0x0E,0x24,0x36,
84167 -0x43,0x60,0x00,0x0C,
84168 -0x10,0x10,0x45,0x36,
84169 -0x18,0x0E,0x24,0x36,
84170 -0x43,0x60,0x00,0x0C,
84171 -0x10,0x10,0x45,0x36,
84172 -0x1C,0x0E,0x24,0x36,
84173 -0x43,0x60,0x00,0x0C,
84174 -0x10,0x10,0x45,0x36,
84175 -0x30,0x1F,0x03,0x26,
84176 -0x1C,0x00,0xBF,0x8F,
84177 -0x18,0x00,0xB2,0x8F,
84178 -0x14,0x00,0xB1,0x8F,
84179 -0x10,0x00,0xB0,0x8F,
84180 -0x01,0x00,0x02,0x24,
84181 -0x20,0x00,0xBD,0x27,
84182 -0x08,0x00,0xE0,0x03,
84183 -0x04,0x03,0x62,0xA0,
84184 -0x00,0x00,0x86,0x8C,
84185 -0x00,0x00,0x00,0x00,
84186 -0xE0,0xFF,0xC5,0x14,
84187 -0x30,0x1F,0x03,0x26,
84188 -0x1C,0x00,0xBF,0x8F,
84189 -0x18,0x00,0xB2,0x8F,
84190 -0x14,0x00,0xB1,0x8F,
84191 -0x10,0x00,0xB0,0x8F,
84192 -0x01,0x00,0x02,0x24,
84193 -0x20,0x00,0xBD,0x27,
84194 -0x08,0x00,0xE0,0x03,
84195 -0x04,0x03,0x62,0xA0,
84196 -0xD8,0xFF,0xBD,0x27,
84197 -0x1C,0x00,0xB3,0xAF,
84198 -0x02,0x80,0x13,0x3C,
84199 -0x14,0x00,0xB1,0xAF,
84200 -0x30,0x1F,0x71,0x26,
84201 -0x0C,0x03,0x26,0x8E,
84202 -0x10,0x00,0xB0,0xAF,
84203 -0x0F,0x00,0x10,0x3C,
84204 -0xFF,0xFF,0x05,0x36,
84205 -0x15,0x00,0x04,0x24,
84206 -0x20,0x00,0xBF,0xAF,
84207 -0x5F,0x47,0x00,0x0C,
84208 -0x18,0x00,0xB2,0xAF,
84209 -0x54,0x22,0x00,0x0C,
84210 -0x64,0x00,0x04,0x24,
84211 -0x10,0x03,0x26,0x8E,
84212 -0xFF,0xFF,0x05,0x36,
84213 -0x5F,0x47,0x00,0x0C,
84214 -0x1A,0x00,0x04,0x24,
84215 -0x54,0x22,0x00,0x0C,
84216 -0x64,0x00,0x04,0x24,
84217 -0x04,0x03,0x22,0x92,
84218 -0x25,0xB0,0x12,0x3C,
84219 -0x08,0x00,0x40,0x14,
84220 -0x08,0x0E,0x44,0x36,
84221 -0x25,0xB0,0x02,0x3C,
84222 -0x00,0x0E,0x42,0x34,
84223 -0x00,0x00,0x45,0x8C,
84224 -0xEC,0x02,0x23,0x8E,
84225 -0x00,0x00,0x00,0x00,
84226 -0x17,0x00,0xA3,0x10,
84227 -0x30,0x1F,0x62,0x26,
84228 -0xE8,0x02,0x25,0x8E,
84229 -0x43,0x60,0x00,0x0C,
84230 -0x00,0x00,0x00,0x00,
84231 -0xEC,0x02,0x25,0x8E,
84232 -0x43,0x60,0x00,0x0C,
84233 -0x00,0x0E,0x44,0x36,
84234 -0xF0,0x02,0x25,0x8E,
84235 -0x43,0x60,0x00,0x0C,
84236 -0x04,0x0E,0x44,0x36,
84237 -0xF4,0x02,0x25,0x8E,
84238 -0x43,0x60,0x00,0x0C,
84239 -0x10,0x0E,0x44,0x36,
84240 -0xF8,0x02,0x25,0x8E,
84241 -0x43,0x60,0x00,0x0C,
84242 -0x14,0x0E,0x44,0x36,
84243 -0xFC,0x02,0x25,0x8E,
84244 -0x43,0x60,0x00,0x0C,
84245 -0x18,0x0E,0x44,0x36,
84246 -0x00,0x03,0x25,0x8E,
84247 -0x43,0x60,0x00,0x0C,
84248 -0x1C,0x0E,0x44,0x36,
84249 -0x30,0x1F,0x62,0x26,
84250 -0x20,0x00,0xBF,0x8F,
84251 -0x1C,0x00,0xB3,0x8F,
84252 -0x18,0x00,0xB2,0x8F,
84253 -0x14,0x00,0xB1,0x8F,
84254 -0x10,0x00,0xB0,0x8F,
84255 -0x28,0x00,0xBD,0x27,
84256 -0x08,0x00,0xE0,0x03,
84257 -0x04,0x03,0x40,0xA0,
84258 -0xE0,0xFF,0xBD,0x27,
84259 -0x18,0x00,0xB2,0xAF,
84260 -0x02,0x80,0x12,0x3C,
84261 -0x14,0x00,0xB1,0xAF,
84262 -0x30,0x1F,0x51,0x26,
84263 -0x0C,0x03,0x26,0x8E,
84264 -0x10,0x00,0xB0,0xAF,
84265 -0x0F,0x00,0x10,0x3C,
84266 -0xFF,0xFF,0x05,0x36,
84267 -0x1C,0x00,0xBF,0xAF,
84268 -0x5F,0x47,0x00,0x0C,
84269 -0x15,0x00,0x04,0x24,
84270 -0x54,0x22,0x00,0x0C,
84271 -0x64,0x00,0x04,0x24,
84272 -0x10,0x03,0x26,0x8E,
84273 -0xFF,0xFF,0x05,0x36,
84274 -0x5F,0x47,0x00,0x0C,
84275 -0x1A,0x00,0x04,0x24,
84276 -0x54,0x22,0x00,0x0C,
84277 -0x64,0x00,0x04,0x24,
84278 -0x04,0x03,0x23,0x92,
84279 -0x03,0x00,0x02,0x24,
84280 -0x2C,0x00,0x62,0x10,
84281 -0x25,0xB0,0x02,0x3C,
84282 -0xEC,0x02,0x25,0x8E,
84283 -0x25,0xB0,0x10,0x3C,
84284 -0x43,0x60,0x00,0x0C,
84285 -0x00,0x0E,0x04,0x36,
84286 -0xF0,0x02,0x25,0x8E,
84287 -0x43,0x60,0x00,0x0C,
84288 -0x04,0x0E,0x04,0x36,
84289 -0xF4,0x02,0x25,0x8E,
84290 -0x43,0x60,0x00,0x0C,
84291 -0x10,0x0E,0x04,0x36,
84292 -0xF8,0x02,0x25,0x8E,
84293 -0x43,0x60,0x00,0x0C,
84294 -0x14,0x0E,0x04,0x36,
84295 -0xFC,0x02,0x25,0x8E,
84296 -0x43,0x60,0x00,0x0C,
84297 -0x18,0x0E,0x04,0x36,
84298 -0x00,0x03,0x25,0x8E,
84299 -0x43,0x60,0x00,0x0C,
84300 -0x1C,0x0E,0x04,0x36,
84301 -0x08,0x03,0x24,0x8E,
84302 -0xE8,0x02,0x22,0x8E,
84303 -0x00,0x00,0x00,0x00,
84304 -0x21,0x28,0x44,0x00,
84305 -0x00,0xFF,0xA3,0x30,
84306 -0xFF,0xFF,0x02,0x3C,
84307 -0xFF,0x00,0x42,0x34,
84308 -0x01,0x3F,0x63,0x2C,
84309 -0x24,0x10,0xA2,0x00,
84310 -0x0C,0x00,0x60,0x10,
84311 -0x08,0x0E,0x04,0x36,
84312 -0x43,0x60,0x00,0x0C,
84313 -0x00,0x00,0x00,0x00,
84314 -0x30,0x1F,0x43,0x26,
84315 -0x1C,0x00,0xBF,0x8F,
84316 -0x18,0x00,0xB2,0x8F,
84317 -0x14,0x00,0xB1,0x8F,
84318 -0x10,0x00,0xB0,0x8F,
84319 -0x03,0x00,0x02,0x24,
84320 -0x20,0x00,0xBD,0x27,
84321 -0x08,0x00,0xE0,0x03,
84322 -0x04,0x03,0x62,0xA0,
84323 -0x32,0x2E,0x00,0x08,
84324 -0x00,0x3F,0x45,0x34,
84325 -0x00,0x0E,0x42,0x34,
84326 -0x00,0x00,0x43,0x8C,
84327 -0xEC,0x02,0x25,0x8E,
84328 -0x00,0x00,0x00,0x00,
84329 -0xD2,0xFF,0x65,0x14,
84330 -0x25,0xB0,0x10,0x3C,
84331 -0x35,0x2E,0x00,0x08,
84332 -0x30,0x1F,0x43,0x26,
84333 -0xD8,0xFF,0xBD,0x27,
84334 -0x18,0x00,0xB2,0xAF,
84335 -0x02,0x80,0x12,0x3C,
84336 -0x20,0x00,0xB4,0xAF,
84337 -0x24,0x00,0xBF,0xAF,
84338 -0x1C,0x00,0xB3,0xAF,
84339 -0x14,0x00,0xB1,0xAF,
84340 -0x10,0x00,0xB0,0xAF,
84341 -0x30,0x1F,0x44,0x26,
84342 -0x0C,0x24,0x82,0x8C,
84343 -0x30,0x1F,0x43,0x8E,
84344 -0x04,0x03,0x93,0x90,
84345 -0x02,0x11,0x02,0x00,
84346 -0x7F,0x00,0x54,0x30,
84347 -0xF0,0xF0,0x63,0x30,
84348 -0x00,0x10,0x02,0x24,
84349 -0x6A,0x00,0x62,0x10,
84350 -0x01,0x00,0x02,0x24,
84351 -0x25,0xB0,0x08,0x3C,
84352 -0x4C,0x00,0x03,0x35,
84353 -0x00,0x00,0x62,0x90,
84354 -0x00,0x00,0x00,0x00,
84355 -0x03,0x00,0x42,0x30,
84356 -0x08,0x00,0x40,0x10,
84357 -0x30,0x1F,0x45,0x26,
84358 -0x30,0x1F,0x42,0x8E,
84359 -0x00,0x00,0x00,0x00,
84360 -0x02,0x13,0x02,0x00,
84361 -0x0F,0x00,0x42,0x30,
84362 -0x2F,0x00,0x40,0x10,
84363 -0x00,0x0E,0x05,0x35,
84364 -0x30,0x1F,0x45,0x26,
84365 -0x04,0x03,0xA2,0x8C,
84366 -0x00,0x00,0x00,0x00,
84367 -0x02,0x12,0x02,0x00,
84368 -0x0F,0x00,0x40,0x14,
84369 -0x30,0x1F,0x42,0x26,
84370 -0x25,0xB0,0x02,0x3C,
84371 -0x84,0x01,0x42,0x34,
84372 -0x00,0x00,0x44,0x8C,
84373 -0x0D,0x00,0x03,0x24,
84374 -0x7C,0x00,0x83,0x10,
84375 -0x3E,0x00,0x02,0x24,
84376 -0x4A,0x00,0x03,0x24,
84377 -0x1F,0x03,0xA2,0xA0,
84378 -0x1C,0x03,0xA3,0xA0,
84379 -0x45,0x00,0x02,0x24,
84380 -0x43,0x00,0x03,0x24,
84381 -0x1D,0x03,0xA2,0xA0,
84382 -0x1E,0x03,0xA3,0xA0,
84383 -0x30,0x1F,0x42,0x26,
84384 -0x0C,0x24,0x43,0x8C,
84385 -0x25,0xB0,0x02,0x3C,
84386 -0x60,0x0C,0x42,0x34,
84387 -0x02,0x19,0x03,0x00,
84388 -0xFF,0x00,0x63,0x30,
84389 -0x00,0x00,0x43,0xA0,
84390 -0x21,0x10,0x00,0x00,
84391 -0x01,0x00,0x42,0x24,
84392 -0xFF,0x00,0x42,0x30,
84393 -0x06,0x00,0x43,0x2C,
84394 -0xFD,0xFF,0x60,0x14,
84395 -0x01,0x00,0x42,0x24,
84396 -0x30,0x1F,0x45,0x8E,
84397 -0x10,0x10,0x02,0x24,
84398 -0xF0,0xF0,0xA3,0x30,
84399 -0x3F,0x00,0x62,0x10,
84400 -0x30,0x1F,0x44,0x26,
84401 -0x24,0x00,0xBF,0x8F,
84402 -0x20,0x00,0xB4,0x8F,
84403 -0x1C,0x00,0xB3,0x8F,
84404 -0x18,0x00,0xB2,0x8F,
84405 -0x14,0x00,0xB1,0x8F,
84406 -0x10,0x00,0xB0,0x8F,
84407 -0x21,0x10,0x00,0x00,
84408 -0x08,0x00,0xE0,0x03,
84409 -0x28,0x00,0xBD,0x27,
84410 -0x00,0x00,0xA2,0x8C,
84411 -0x00,0x00,0x00,0x00,
84412 -0x5F,0x00,0x40,0x10,
84413 -0x10,0x0E,0x07,0x35,
84414 -0x00,0x60,0x01,0x40,
84415 -0x01,0x00,0x21,0x34,
84416 -0x01,0x00,0x21,0x38,
84417 -0x00,0x60,0x81,0x40,
84418 -0x08,0x0E,0x02,0x35,
84419 -0x04,0x0E,0x03,0x35,
84420 -0x00,0x00,0x44,0x8C,
84421 -0x00,0x00,0xA5,0x8C,
84422 -0x00,0x00,0x66,0x8C,
84423 -0x02,0x80,0x02,0x3C,
84424 -0x30,0x1F,0x49,0x24,
84425 -0xE8,0x02,0x24,0xAD,
84426 -0xEC,0x02,0x25,0xAD,
84427 -0xF0,0x02,0x26,0xAD,
84428 -0x14,0x0E,0x04,0x35,
84429 -0x02,0x80,0x02,0x3C,
84430 -0x18,0x0E,0x05,0x35,
84431 -0x00,0x00,0xE7,0x8C,
84432 -0x1C,0x0E,0x06,0x35,
84433 -0x00,0x00,0x83,0x8C,
84434 -0xDE,0x5D,0x4A,0x90,
84435 -0x00,0x00,0xA2,0x8C,
84436 -0x00,0x00,0xC4,0x8C,
84437 -0xF4,0x02,0x27,0xAD,
84438 -0xFC,0x02,0x22,0xAD,
84439 -0x22,0x00,0x02,0x24,
84440 -0xF8,0x02,0x23,0xAD,
84441 -0x5B,0x00,0x42,0x11,
84442 -0x00,0x03,0x24,0xAD,
84443 -0x92,0x00,0x02,0x24,
84444 -0x59,0x00,0x42,0x11,
84445 -0x0D,0x08,0x02,0x35,
84446 -0x00,0x60,0x01,0x40,
84447 -0x01,0x00,0x21,0x34,
84448 -0x00,0x60,0x81,0x40,
84449 -0x30,0x1F,0x43,0x8E,
84450 -0xFF,0xFF,0x02,0x3C,
84451 -0xFF,0x0F,0x42,0x34,
84452 -0x24,0x18,0x62,0x00,
84453 -0x00,0x10,0x63,0x34,
84454 -0x66,0x2E,0x00,0x08,
84455 -0x30,0x1F,0x43,0xAE,
84456 -0x3A,0x00,0x62,0x12,
84457 -0x04,0x00,0x02,0x24,
84458 -0x38,0x00,0x62,0x12,
84459 -0x30,0x1F,0x43,0x26,
84460 -0xFF,0xFF,0x02,0x24,
84461 -0x59,0x2E,0x00,0x08,
84462 -0x04,0x03,0x62,0xA0,
84463 -0x0C,0x24,0x83,0x8C,
84464 -0xFF,0xFF,0x02,0x34,
84465 -0xBF,0xFF,0x62,0x10,
84466 -0x02,0x12,0x05,0x00,
84467 -0x0F,0x00,0x45,0x30,
84468 -0x01,0x00,0x03,0x24,
84469 -0xBB,0xFF,0xA3,0x14,
84470 -0x25,0xB0,0x02,0x3C,
84471 -0x4C,0x00,0x42,0x34,
84472 -0x00,0x00,0x43,0x90,
84473 -0x00,0x00,0x00,0x00,
84474 -0x03,0x00,0x63,0x30,
84475 -0xB5,0xFF,0x60,0x10,
84476 -0x03,0x00,0x02,0x24,
84477 -0x65,0x00,0x62,0x12,
84478 -0x04,0x00,0x62,0x2A,
84479 -0x47,0x00,0x40,0x10,
84480 -0x00,0x00,0x00,0x00,
84481 -0x6A,0x00,0x60,0x12,
84482 -0x00,0x00,0x00,0x00,
84483 -0xAD,0xFF,0x65,0x16,
84484 -0x00,0x00,0x00,0x00,
84485 -0x1C,0x03,0x82,0x90,
84486 -0x00,0x00,0x00,0x00,
84487 -0x2B,0x10,0x82,0x02,
84488 -0x56,0x00,0x40,0x10,
84489 -0x00,0x00,0x00,0x00,
84490 -0x1F,0x03,0x82,0x90,
84491 -0x00,0x00,0x00,0x00,
84492 -0x2B,0x10,0x54,0x00,
84493 -0x48,0x00,0x40,0x14,
84494 -0x00,0x00,0x00,0x00,
84495 -0xBE,0x2D,0x00,0x0C,
84496 -0x00,0x00,0x00,0x00,
84497 -0x8B,0x2E,0x00,0x08,
84498 -0x00,0x00,0x00,0x00,
84499 -0x3B,0x00,0x02,0x24,
84500 -0x46,0x00,0x03,0x24,
84501 -0x1F,0x03,0xA2,0xA0,
84502 -0x1C,0x03,0xA3,0xA0,
84503 -0x41,0x00,0x02,0x24,
84504 -0x40,0x00,0x03,0x24,
84505 -0x1D,0x03,0xA2,0xA0,
84506 -0x79,0x2E,0x00,0x08,
84507 -0x1E,0x03,0xA3,0xA0,
84508 -0x00,0x00,0xE3,0x8C,
84509 -0x3F,0x3F,0x02,0x3C,
84510 -0x3F,0x3F,0x42,0x34,
84511 -0x9E,0xFF,0x62,0x14,
84512 -0x00,0x00,0x00,0x00,
84513 -0x67,0x2E,0x00,0x08,
84514 -0x30,0x1F,0x45,0x26,
84515 -0x0F,0x00,0x10,0x3C,
84516 -0x01,0x00,0x11,0x3C,
84517 -0xFF,0xFF,0x05,0x36,
84518 -0xF4,0x98,0x26,0x36,
84519 -0x5F,0x47,0x00,0x0C,
84520 -0x15,0x00,0x04,0x24,
84521 -0x54,0x22,0x00,0x0C,
84522 -0x64,0x00,0x04,0x24,
84523 -0xFF,0xFF,0x05,0x36,
84524 -0x56,0x30,0x26,0x36,
84525 -0x5F,0x47,0x00,0x0C,
84526 -0x1A,0x00,0x04,0x24,
84527 -0x54,0x22,0x00,0x0C,
84528 -0x64,0x00,0x04,0x24,
84529 -0x30,0x1F,0x43,0x26,
84530 -0xFF,0xFF,0x02,0x24,
84531 -0x59,0x2E,0x00,0x08,
84532 -0x04,0x03,0x62,0xA0,
84533 -0x0D,0x08,0x02,0x35,
84534 -0x00,0x00,0x43,0x90,
84535 -0x00,0x00,0x00,0x00,
84536 -0x0F,0x00,0x63,0x30,
84537 -0x08,0x00,0x62,0x2C,
84538 -0x0F,0x00,0x63,0x38,
84539 -0xA2,0xFF,0x40,0x14,
84540 -0x01,0x00,0x65,0x24,
84541 -0x00,0x16,0x05,0x00,
84542 -0x00,0x24,0x05,0x00,
84543 -0x00,0x1A,0x05,0x00,
84544 -0x25,0x10,0x44,0x00,
84545 -0x25,0x10,0x43,0x00,
84546 -0x25,0x10,0x45,0x00,
84547 -0x25,0x18,0x65,0x00,
84548 -0x18,0x03,0x23,0xAD,
84549 -0xB8,0x2E,0x00,0x08,
84550 -0x14,0x03,0x22,0xAD,
84551 -0x04,0x00,0x02,0x24,
84552 -0x11,0x00,0x62,0x12,
84553 -0xFF,0x00,0x02,0x24,
84554 -0x66,0xFF,0x62,0x16,
84555 -0x00,0x00,0x00,0x00,
84556 -0x1E,0x03,0x82,0x90,
84557 -0x00,0x00,0x00,0x00,
84558 -0x2B,0x10,0x82,0x02,
84559 -0x21,0x00,0x40,0x14,
84560 -0x00,0x00,0x00,0x00,
84561 -0x1C,0x03,0x82,0x90,
84562 -0x00,0x00,0x00,0x00,
84563 -0x2B,0x10,0x82,0x02,
84564 -0x0A,0x00,0x40,0x10,
84565 -0x00,0x00,0x00,0x00,
84566 -0x7A,0x2D,0x00,0x0C,
84567 -0x00,0x00,0x00,0x00,
84568 -0x8B,0x2E,0x00,0x08,
84569 -0x00,0x00,0x00,0x00,
84570 -0x1D,0x03,0x82,0x90,
84571 -0x00,0x00,0x00,0x00,
84572 -0x2B,0x10,0x54,0x00,
84573 -0xF8,0xFF,0x40,0x10,
84574 -0x00,0x00,0x00,0x00,
84575 -0x3B,0x2D,0x00,0x0C,
84576 -0x00,0x00,0x00,0x00,
84577 -0x8B,0x2E,0x00,0x08,
84578 -0x00,0x00,0x00,0x00,
84579 -0x20,0x03,0x82,0x90,
84580 -0x00,0x00,0x00,0x00,
84581 -0x2B,0x10,0x82,0x02,
84582 -0xA8,0xFF,0x40,0x10,
84583 -0x00,0x00,0x00,0x00,
84584 -0xFC,0x2D,0x00,0x0C,
84585 -0x00,0x00,0x00,0x00,
84586 -0x8B,0x2E,0x00,0x08,
84587 -0x00,0x00,0x00,0x00,
84588 -0x1E,0x03,0x82,0x90,
84589 -0x00,0x00,0x00,0x00,
84590 -0x2B,0x10,0x82,0x02,
84591 -0xE6,0xFF,0x40,0x10,
84592 -0x00,0x00,0x00,0x00,
84593 -0x21,0x03,0x82,0x90,
84594 -0x00,0x00,0x00,0x00,
84595 -0x2B,0x10,0x54,0x00,
84596 -0x9A,0xFF,0x40,0x14,
84597 -0x00,0x00,0x00,0x00,
84598 -0xFC,0x2D,0x00,0x0C,
84599 -0x00,0x00,0x00,0x00,
84600 -0x8B,0x2E,0x00,0x08,
84601 -0x00,0x00,0x00,0x00,
84602 -0x02,0x80,0x08,0x3C,
84603 -0x30,0x1F,0x05,0x25,
84604 -0x80,0x36,0xA4,0x8C,
84605 -0xE6,0x02,0xA3,0x90,
84606 -0x02,0x11,0x04,0x00,
84607 -0x26,0x00,0x60,0x14,
84608 -0x7F,0x00,0x46,0x30,
84609 -0x25,0xB0,0x07,0x3C,
84610 -0x4C,0x00,0xE2,0x34,
84611 -0x00,0x00,0x43,0x90,
84612 -0x00,0x00,0x00,0x00,
84613 -0x20,0x00,0x60,0x10,
84614 -0x00,0x00,0x00,0x00,
84615 -0xFF,0xFF,0x02,0x34,
84616 -0x1D,0x00,0x82,0x10,
84617 -0x00,0x00,0x00,0x00,
84618 -0x00,0x08,0xE3,0x34,
84619 -0x00,0x00,0x62,0x90,
84620 -0x00,0x00,0x00,0x00,
84621 -0x01,0x00,0x42,0x30,
84622 -0x19,0x00,0x40,0x10,
84623 -0x4B,0x00,0xC2,0x2C,
84624 -0x3E,0x00,0x40,0x10,
84625 -0x01,0x00,0x04,0x24,
84626 -0xD8,0xFF,0xC2,0x24,
84627 -0x1E,0x00,0x42,0x2C,
84628 -0x49,0x00,0x40,0x10,
84629 -0x23,0x00,0xC2,0x2C,
84630 -0x30,0x1F,0x04,0x25,
84631 -0xD3,0x02,0x82,0x90,
84632 -0x00,0x00,0x00,0x00,
84633 -0x44,0x00,0x40,0x10,
84634 -0x23,0x00,0xC2,0x2C,
84635 -0x25,0xB0,0x02,0x3C,
84636 -0x87,0x0C,0x42,0x34,
84637 -0x20,0x00,0x03,0x24,
84638 -0x00,0x00,0x43,0xA0,
84639 -0xD3,0x02,0x80,0xA0,
84640 -0x21,0x10,0x00,0x00,
84641 -0x01,0x00,0x42,0x24,
84642 -0xFF,0x00,0x42,0x30,
84643 -0x06,0x00,0x43,0x2C,
84644 -0xFC,0xFF,0x60,0x14,
84645 -0x00,0x00,0x00,0x00,
84646 -0x08,0x00,0xE0,0x03,
84647 -0x21,0x10,0x00,0x00,
84648 -0x17,0x00,0x40,0x10,
84649 -0x01,0x00,0x04,0x24,
84650 -0xD8,0xFF,0xC2,0x24,
84651 -0x1E,0x00,0x42,0x2C,
84652 -0x44,0x00,0x40,0x10,
84653 -0x23,0x00,0xC2,0x2C,
84654 -0x30,0x1F,0x04,0x25,
84655 -0xD3,0x02,0x82,0x90,
84656 -0x00,0x00,0x00,0x00,
84657 -0x3F,0x00,0x40,0x10,
84658 -0x23,0x00,0xC2,0x2C,
84659 -0x25,0xB0,0x02,0x3C,
84660 -0x30,0x0C,0x42,0x34,
84661 -0x44,0x00,0x03,0x24,
84662 -0x00,0x00,0x43,0xA0,
84663 -0xD3,0x02,0x80,0xA0,
84664 -0x21,0x10,0x00,0x00,
84665 -0x01,0x00,0x42,0x24,
84666 -0xFF,0x00,0x42,0x30,
84667 -0x06,0x00,0x43,0x2C,
84668 -0xFC,0xFF,0x60,0x14,
84669 -0x00,0x00,0x00,0x00,
84670 -0x08,0x00,0xE0,0x03,
84671 -0x21,0x10,0x00,0x00,
84672 -0xD3,0x02,0xA2,0x90,
84673 -0x00,0x00,0x00,0x00,
84674 -0xE7,0xFF,0x44,0x10,
84675 -0x43,0x00,0x02,0x24,
84676 -0x30,0x0C,0xE3,0x34,
84677 -0xD3,0x02,0xA4,0xA0,
84678 -0x00,0x00,0x62,0xA0,
84679 -0x21,0x10,0x00,0x00,
84680 -0x01,0x00,0x42,0x24,
84681 -0xFF,0x00,0x42,0x30,
84682 -0x06,0x00,0x43,0x2C,
84683 -0xFC,0xFF,0x60,0x14,
84684 -0x00,0x00,0x00,0x00,
84685 -0x08,0x00,0xE0,0x03,
84686 -0x21,0x10,0x00,0x00,
84687 -0xD3,0x02,0xA2,0x90,
84688 -0x00,0x00,0x00,0x00,
84689 -0xC0,0xFF,0x44,0x10,
84690 -0x10,0x00,0x02,0x24,
84691 -0x87,0x0C,0xE3,0x34,
84692 -0xD3,0x02,0xA4,0xA0,
84693 -0x00,0x00,0x62,0xA0,
84694 -0x21,0x10,0x00,0x00,
84695 -0x01,0x00,0x42,0x24,
84696 -0xFF,0x00,0x42,0x30,
84697 -0x06,0x00,0x43,0x2C,
84698 -0xFC,0xFF,0x60,0x14,
84699 -0x00,0x00,0x00,0x00,
84700 -0x08,0x00,0xE0,0x03,
84701 -0x21,0x10,0x00,0x00,
84702 -0xC7,0xFF,0x40,0x10,
84703 -0x00,0x00,0x00,0x00,
84704 -0x30,0x1F,0x04,0x25,
84705 -0xD3,0x02,0x82,0x90,
84706 -0x02,0x00,0x03,0x24,
84707 -0xC2,0xFF,0x43,0x10,
84708 -0x00,0x00,0x00,0x00,
84709 -0x25,0xB0,0x02,0x3C,
84710 -0x87,0x0C,0x42,0x34,
84711 -0xD3,0x02,0x83,0xA0,
84712 -0x00,0x00,0x40,0xA0,
84713 -0x21,0x10,0x00,0x00,
84714 -0x01,0x00,0x42,0x24,
84715 -0xFF,0x00,0x42,0x30,
84716 -0x06,0x00,0x43,0x2C,
84717 -0xFC,0xFF,0x60,0x14,
84718 -0x00,0x00,0x00,0x00,
84719 -0x08,0x00,0xE0,0x03,
84720 -0x21,0x10,0x00,0x00,
84721 -0xB4,0xFF,0x40,0x10,
84722 -0x00,0x00,0x00,0x00,
84723 -0x30,0x1F,0x04,0x25,
84724 -0xD3,0x02,0x82,0x90,
84725 -0x02,0x00,0x03,0x24,
84726 -0xAF,0xFF,0x43,0x10,
84727 -0x00,0x00,0x00,0x00,
84728 -0x25,0xB0,0x02,0x3C,
84729 -0xD3,0x02,0x83,0xA0,
84730 -0x30,0x0C,0x42,0x34,
84731 -0x42,0x00,0x03,0x24,
84732 -0x00,0x00,0x43,0xA0,
84733 -0x21,0x10,0x00,0x00,
84734 -0x01,0x00,0x42,0x24,
84735 -0xFF,0x00,0x42,0x30,
84736 -0x06,0x00,0x43,0x2C,
84737 -0xFC,0xFF,0x60,0x14,
84738 -0x00,0x00,0x00,0x00,
84739 -0x08,0x00,0xE0,0x03,
84740 -0x21,0x10,0x00,0x00,
84741 -0x25,0xB0,0x03,0x3C,
84742 -0x01,0x80,0x02,0x3C,
84743 -0x18,0x03,0x64,0x34,
84744 -0x7C,0xBF,0x42,0x24,
84745 -0x00,0x00,0x82,0xAC,
84746 -0x00,0x60,0x07,0x40,
84747 -0x01,0x00,0xE1,0x34,
84748 -0x01,0x00,0x21,0x38,
84749 -0x00,0x60,0x81,0x40,
84750 -0x20,0x80,0x02,0x3C,
84751 -0x30,0x03,0x63,0x34,
84752 -0x00,0x00,0x62,0xAC,
84753 -0x25,0xB0,0x06,0x3C,
84754 -0x01,0x80,0x02,0x3C,
84755 -0x7D,0xBF,0x45,0x24,
84756 -0x33,0x03,0xC3,0x34,
84757 -0x00,0x00,0x85,0xAC,
84758 -0x00,0x00,0x62,0x90,
84759 -0x00,0x00,0x00,0x00,
84760 -0x40,0x00,0x42,0x30,
84761 -0xFB,0xFF,0x40,0x10,
84762 -0x30,0x03,0xC2,0x34,
84763 -0x00,0x00,0x45,0x8C,
84764 -0x0F,0x00,0x03,0x3C,
84765 -0xFF,0xFF,0x63,0x34,
84766 -0x24,0x28,0xA3,0x00,
84767 -0x40,0x11,0x05,0x00,
84768 -0x23,0x10,0x45,0x00,
84769 -0x80,0x10,0x02,0x00,
84770 -0x21,0x10,0x45,0x00,
84771 -0xAF,0x0F,0x04,0x3C,
84772 -0xC0,0x10,0x02,0x00,
84773 -0x00,0xA0,0x84,0x34,
84774 -0x1B,0x00,0x82,0x00,
84775 -0x02,0x00,0x40,0x14,
84776 -0x00,0x00,0x00,0x00,
84777 -0x0D,0x00,0x07,0x00,
84778 -0x02,0x80,0x03,0x3C,
84779 -0x30,0x1F,0x63,0x24,
84780 -0xC2,0x28,0x05,0x00,
84781 -0xA0,0x3E,0x65,0xAC,
84782 -0x12,0x20,0x00,0x00,
84783 -0xA4,0x3E,0x64,0xAC,
84784 -0x00,0x60,0x87,0x40,
84785 -0x08,0x00,0xE0,0x03,
84786 -0x00,0x00,0x00,0x00,
84787 -0x01,0x00,0x03,0x24,
84788 -0x02,0x80,0x02,0x3C,
84789 -0x14,0x5F,0x43,0xA0,
84790 -0xD0,0x07,0x04,0x24,
84791 -0x02,0x80,0x02,0x3C,
84792 -0x02,0x80,0x03,0x3C,
84793 -0xE4,0x5E,0x44,0xAC,
84794 -0x13,0x5F,0x60,0xA0,
84795 -0x08,0x00,0xE0,0x03,
84796 -0x00,0x00,0x00,0x00,
84797 -0x2A,0xB0,0x04,0x3C,
84798 -0x28,0x00,0x85,0x34,
84799 -0x02,0x00,0x82,0x94,
84800 -0x04,0x00,0x84,0x24,
84801 -0x05,0x00,0x40,0x14,
84802 -0x2B,0x18,0xA4,0x00,
84803 -0xFB,0xFF,0x60,0x10,
84804 -0x01,0x00,0x02,0x24,
84805 -0x08,0x00,0xE0,0x03,
84806 -0x00,0x00,0x00,0x00,
84807 -0x08,0x00,0xE0,0x03,
84808 -0x21,0x10,0x00,0x00,
84809 -0x25,0xB0,0x03,0x3C,
84810 -0xBE,0x00,0x63,0x34,
84811 -0x00,0x00,0x62,0x94,
84812 -0x08,0x00,0xE0,0x03,
84813 -0x01,0x00,0x42,0x2C,
84814 -0xE8,0xFF,0xBD,0x27,
84815 -0x10,0x00,0xBF,0xAF,
84816 -0x17,0x30,0x00,0x0C,
84817 -0x00,0x00,0x00,0x00,
84818 -0x02,0x80,0x03,0x3C,
84819 -0x19,0x00,0x40,0x10,
84820 -0x74,0x57,0x64,0x24,
84821 -0x74,0x57,0x62,0x8C,
84822 -0x00,0x00,0x00,0x00,
84823 -0x15,0x00,0x44,0x14,
84824 -0x02,0x80,0x02,0x3C,
84825 -0x14,0x5F,0x43,0x90,
84826 -0x01,0x00,0x02,0x24,
84827 -0xFF,0x00,0x63,0x30,
84828 -0x10,0x00,0x62,0x10,
84829 -0x02,0x80,0x03,0x3C,
84830 -0xF5,0x5E,0x62,0x90,
84831 -0x00,0x00,0x00,0x00,
84832 -0x0F,0x00,0x42,0x30,
84833 -0x05,0x00,0x42,0x28,
84834 -0x0A,0x00,0x40,0x10,
84835 -0x01,0x00,0x04,0x24,
84836 -0x02,0x80,0x02,0x3C,
84837 -0x9C,0x5A,0x43,0x8C,
84838 -0x00,0x00,0x00,0x00,
84839 -0x05,0x00,0x60,0x14,
84840 -0x21,0x10,0x80,0x00,
84841 -0x10,0x00,0xBF,0x8F,
84842 -0x00,0x00,0x00,0x00,
84843 -0x08,0x00,0xE0,0x03,
84844 -0x18,0x00,0xBD,0x27,
84845 -0x10,0x00,0xBF,0x8F,
84846 -0x21,0x20,0x00,0x00,
84847 -0x21,0x10,0x80,0x00,
84848 -0x08,0x00,0xE0,0x03,
84849 -0x18,0x00,0xBD,0x27,
84850 -0xE8,0xFF,0xBD,0x27,
84851 -0x10,0x00,0xBF,0xAF,
84852 -0x17,0x30,0x00,0x0C,
84853 -0x00,0x00,0x00,0x00,
84854 -0x2C,0x00,0x40,0x10,
84855 -0x02,0x80,0x02,0x3C,
84856 -0x74,0x57,0x43,0x8C,
84857 -0x74,0x57,0x42,0x24,
84858 -0x28,0x00,0x62,0x14,
84859 -0x02,0x80,0x03,0x3C,
84860 -0x0C,0x5F,0x62,0x90,
84861 -0x01,0x00,0x04,0x24,
84862 -0xFF,0x00,0x42,0x30,
84863 -0x23,0x00,0x44,0x10,
84864 -0x02,0x80,0x03,0x3C,
84865 -0xF5,0x5E,0x62,0x90,
84866 -0x00,0x00,0x00,0x00,
84867 -0x0F,0x00,0x42,0x30,
84868 -0x03,0x00,0x42,0x28,
84869 -0x1D,0x00,0x40,0x10,
84870 -0x02,0x80,0x03,0x3C,
84871 -0x0E,0x5F,0x62,0x90,
84872 -0x00,0x00,0x00,0x00,
84873 -0x04,0x00,0x42,0x30,
84874 -0x18,0x00,0x40,0x14,
84875 -0x00,0x00,0x00,0x00,
84876 -0x0E,0x5F,0x62,0x90,
84877 -0x00,0x00,0x00,0x00,
84878 -0x10,0x00,0x42,0x30,
84879 -0x13,0x00,0x40,0x14,
84880 -0x02,0x80,0x03,0x3C,
84881 -0x14,0x5F,0x62,0x90,
84882 -0x00,0x00,0x00,0x00,
84883 -0xFF,0x00,0x42,0x30,
84884 -0x0E,0x00,0x44,0x10,
84885 -0x02,0x80,0x02,0x3C,
84886 -0x15,0x5F,0x43,0x90,
84887 -0x00,0x00,0x00,0x00,
84888 -0x0A,0x00,0x60,0x14,
84889 -0x02,0x80,0x02,0x3C,
84890 -0x30,0x1F,0x42,0x24,
84891 -0x6C,0x3B,0x43,0x8C,
84892 -0x00,0x00,0x00,0x00,
84893 -0x06,0x00,0x60,0x14,
84894 -0x21,0x18,0x00,0x00,
84895 -0x40,0x39,0x42,0x8C,
84896 -0x00,0x00,0x00,0x00,
84897 -0x02,0x00,0x40,0x14,
84898 -0x01,0x00,0x03,0x24,
84899 -0x21,0x18,0x00,0x00,
84900 -0x10,0x00,0xBF,0x8F,
84901 -0x21,0x10,0x60,0x00,
84902 -0x08,0x00,0xE0,0x03,
84903 -0x18,0x00,0xBD,0x27,
84904 -0xE8,0xFF,0xBD,0x27,
84905 -0x10,0x00,0xBF,0xAF,
84906 -0x23,0x30,0x00,0x0C,
84907 -0x00,0x00,0x00,0x00,
84908 -0x02,0x80,0x03,0x3C,
84909 -0x0E,0x00,0x40,0x10,
84910 -0x6C,0x57,0x65,0x24,
84911 -0x6C,0x57,0x62,0x8C,
84912 -0x02,0x80,0x04,0x3C,
84913 -0x64,0x57,0x86,0x24,
84914 -0x09,0x00,0x45,0x14,
84915 -0x01,0x00,0x03,0x24,
84916 -0x64,0x57,0x82,0x8C,
84917 -0x00,0x00,0x00,0x00,
84918 -0x05,0x00,0x46,0x14,
84919 -0x21,0x10,0x60,0x00,
84920 -0x10,0x00,0xBF,0x8F,
84921 -0x00,0x00,0x00,0x00,
84922 -0x08,0x00,0xE0,0x03,
84923 -0x18,0x00,0xBD,0x27,
84924 -0x10,0x00,0xBF,0x8F,
84925 -0x21,0x18,0x00,0x00,
84926 -0x21,0x10,0x60,0x00,
84927 -0x08,0x00,0xE0,0x03,
84928 -0x18,0x00,0xBD,0x27,
84929 -0xD8,0xFF,0xBD,0x27,
84930 -0x20,0x00,0xBF,0xAF,
84931 -0x1C,0x00,0xB3,0xAF,
84932 -0x18,0x00,0xB2,0xAF,
84933 -0x14,0x00,0xB1,0xAF,
84934 -0x10,0x00,0xB0,0xAF,
84935 -0xFF,0x00,0x84,0x30,
84936 -0x00,0x60,0x12,0x40,
84937 -0x01,0x00,0x41,0x36,
84938 -0x01,0x00,0x21,0x38,
84939 -0x00,0x60,0x81,0x40,
84940 -0x0E,0x00,0x80,0x10,
84941 -0x02,0x80,0x13,0x3C,
84942 -0x44,0x5F,0x62,0x92,
84943 -0x01,0x00,0x03,0x24,
84944 -0xFF,0x00,0x42,0x30,
84945 -0x39,0x00,0x43,0x10,
84946 -0x25,0xB0,0x03,0x3C,
84947 -0x00,0x60,0x92,0x40,
84948 -0x20,0x00,0xBF,0x8F,
84949 -0x1C,0x00,0xB3,0x8F,
84950 -0x18,0x00,0xB2,0x8F,
84951 -0x14,0x00,0xB1,0x8F,
84952 -0x10,0x00,0xB0,0x8F,
84953 -0x08,0x00,0xE0,0x03,
84954 -0x28,0x00,0xBD,0x27,
84955 -0x44,0x5F,0x62,0x92,
84956 -0x02,0x00,0x03,0x24,
84957 -0xFF,0x00,0x42,0x30,
84958 -0xF4,0xFF,0x43,0x14,
84959 -0x44,0x08,0x04,0x24,
84960 -0x94,0x60,0x00,0x0C,
84961 -0x21,0x28,0x00,0x00,
84962 -0x25,0xB0,0x03,0x3C,
84963 -0x04,0x0C,0x62,0x90,
84964 -0x21,0x20,0x00,0x00,
84965 -0xFD,0x00,0x42,0x30,
84966 -0x04,0x0C,0x62,0xA0,
84967 -0x01,0x00,0x82,0x24,
84968 -0xFF,0x00,0x44,0x30,
84969 -0x06,0x00,0x83,0x2C,
84970 -0xFD,0xFF,0x60,0x14,
84971 -0x01,0x00,0x82,0x24,
84972 -0x25,0xB0,0x03,0x3C,
84973 -0x04,0x0D,0x62,0x90,
84974 -0x21,0x20,0x00,0x00,
84975 -0xFD,0x00,0x42,0x30,
84976 -0x04,0x0D,0x62,0xA0,
84977 -0x01,0x00,0x82,0x24,
84978 -0xFF,0x00,0x44,0x30,
84979 -0x06,0x00,0x83,0x2C,
84980 -0xFD,0xFF,0x60,0x14,
84981 -0x01,0x00,0x82,0x24,
84982 -0x25,0xB0,0x11,0x3C,
84983 -0x70,0x0E,0x25,0x8E,
84984 -0x7F,0xFE,0x10,0x3C,
84985 -0xFF,0xFF,0x10,0x36,
84986 -0x24,0x28,0xB0,0x00,
84987 -0x94,0x60,0x00,0x0C,
84988 -0x70,0x0E,0x04,0x24,
84989 -0x8C,0x0E,0x25,0x8E,
84990 -0x8C,0x0E,0x04,0x24,
84991 -0x94,0x60,0x00,0x0C,
84992 -0x24,0x28,0xB0,0x00,
84993 -0x01,0x00,0x02,0x24,
84994 -0x44,0x5F,0x62,0xA2,
84995 -0x00,0x60,0x92,0x40,
84996 -0x20,0x00,0xBF,0x8F,
84997 -0x1C,0x00,0xB3,0x8F,
84998 -0x18,0x00,0xB2,0x8F,
84999 -0x14,0x00,0xB1,0x8F,
85000 -0x10,0x00,0xB0,0x8F,
85001 -0x08,0x00,0xE0,0x03,
85002 -0x28,0x00,0xBD,0x27,
85003 -0x04,0x0C,0x62,0x90,
85004 -0x21,0x20,0x00,0x00,
85005 -0xFF,0x00,0x42,0x30,
85006 -0x02,0x00,0x42,0x34,
85007 -0x04,0x0C,0x62,0xA0,
85008 -0x01,0x00,0x82,0x24,
85009 -0xFF,0x00,0x44,0x30,
85010 -0x06,0x00,0x83,0x2C,
85011 -0xFD,0xFF,0x60,0x14,
85012 -0x01,0x00,0x82,0x24,
85013 -0x25,0xB0,0x03,0x3C,
85014 -0x04,0x0D,0x62,0x90,
85015 -0x21,0x20,0x00,0x00,
85016 -0xFF,0x00,0x42,0x30,
85017 -0x02,0x00,0x42,0x34,
85018 -0x04,0x0D,0x62,0xA0,
85019 -0x01,0x00,0x82,0x24,
85020 -0xFF,0x00,0x44,0x30,
85021 -0x06,0x00,0x83,0x2C,
85022 -0xFD,0xFF,0x60,0x14,
85023 -0x01,0x00,0x82,0x24,
85024 -0x25,0xB0,0x10,0x3C,
85025 -0x70,0x0E,0x05,0x8E,
85026 -0x80,0x01,0x11,0x3C,
85027 -0x70,0x0E,0x04,0x24,
85028 -0x94,0x60,0x00,0x0C,
85029 -0x25,0x28,0xB1,0x00,
85030 -0x8C,0x0E,0x05,0x8E,
85031 -0x8C,0x0E,0x04,0x24,
85032 -0x94,0x60,0x00,0x0C,
85033 -0x25,0x28,0xB1,0x00,
85034 -0x03,0x00,0x05,0x3C,
85035 -0x59,0x01,0xA5,0x34,
85036 -0x94,0x60,0x00,0x0C,
85037 -0x44,0x08,0x04,0x24,
85038 -0x02,0x00,0x02,0x24,
85039 -0x44,0x5F,0x62,0xA2,
85040 -0xDD,0x30,0x00,0x08,
85041 -0x00,0x00,0x00,0x00,
85042 -0x25,0xB0,0x03,0x3C,
85043 -0xFC,0x37,0x02,0x24,
85044 -0x40,0x00,0x64,0x34,
85045 -0x00,0x00,0x82,0xA4,
85046 -0x42,0x00,0x65,0x34,
85047 -0x03,0x00,0x02,0x24,
85048 -0x00,0x00,0xA0,0xA0,
85049 -0x03,0x08,0x62,0xA0,
85050 -0x21,0x10,0x00,0x00,
85051 -0x01,0x00,0x42,0x24,
85052 -0xFF,0x00,0x42,0x30,
85053 -0x06,0x00,0x43,0x2C,
85054 -0xFC,0xFF,0x60,0x14,
85055 -0x00,0x00,0x00,0x00,
85056 -0x08,0x00,0xE0,0x03,
85057 -0x00,0x00,0x00,0x00,
85058 -0xE0,0xFF,0xBD,0x27,
85059 -0x18,0x00,0xBF,0xAF,
85060 -0x14,0x00,0xB1,0xAF,
85061 -0x10,0x00,0xB0,0xAF,
85062 -0x02,0x80,0x02,0x3C,
85063 -0xF4,0x5E,0x43,0x90,
85064 -0x00,0x00,0x00,0x00,
85065 -0x0B,0x00,0x60,0x10,
85066 -0x25,0xB0,0x10,0x3C,
85067 -0x02,0x80,0x03,0x3C,
85068 -0xDE,0x5D,0x62,0x90,
85069 -0x00,0x00,0x00,0x00,
85070 -0x02,0x00,0x42,0x30,
85071 -0x32,0x00,0x40,0x14,
85072 -0x00,0x02,0x05,0x3C,
85073 -0x00,0x08,0x04,0x24,
85074 -0xA9,0x45,0x00,0x0C,
85075 -0x21,0x30,0x00,0x00,
85076 -0x25,0xB0,0x10,0x3C,
85077 -0x21,0x00,0x06,0x36,
85078 -0x00,0x00,0xC2,0x90,
85079 -0x18,0x00,0x03,0x36,
85080 -0x42,0x00,0x05,0x36,
85081 -0x01,0x00,0x42,0x34,
85082 -0x00,0x00,0xC2,0xA0,
85083 -0x40,0x00,0x11,0x36,
85084 -0x00,0x00,0x60,0xA0,
85085 -0xFF,0xFF,0x02,0x24,
85086 -0xFC,0x57,0x03,0x24,
85087 -0x00,0x00,0xA2,0xA0,
85088 -0x64,0x00,0x04,0x24,
85089 -0x00,0x00,0x23,0xA6,
85090 -0x54,0x22,0x00,0x0C,
85091 -0x00,0x00,0x00,0x00,
85092 -0xFC,0x77,0x02,0x24,
85093 -0x00,0x00,0x22,0xA6,
85094 -0x54,0x22,0x00,0x0C,
85095 -0x0A,0x00,0x04,0x24,
85096 -0x03,0x08,0x00,0xA2,
85097 -0x21,0x10,0x00,0x00,
85098 -0x01,0x00,0x42,0x24,
85099 -0xFF,0x00,0x42,0x30,
85100 -0x06,0x00,0x43,0x2C,
85101 -0xFD,0xFF,0x60,0x14,
85102 -0x01,0x00,0x42,0x24,
85103 -0x0A,0x00,0x04,0x24,
85104 -0x54,0x22,0x00,0x0C,
85105 -0x25,0xB0,0x10,0x3C,
85106 -0x40,0x00,0x10,0x36,
85107 -0xFC,0x37,0x02,0x24,
85108 -0x00,0x00,0x02,0xA6,
85109 -0x54,0x22,0x00,0x0C,
85110 -0x0A,0x00,0x04,0x24,
85111 -0xFC,0x77,0x02,0x24,
85112 -0x00,0x00,0x02,0xA6,
85113 -0x54,0x22,0x00,0x0C,
85114 -0x0A,0x00,0x04,0x24,
85115 -0xFC,0x57,0x02,0x24,
85116 -0x00,0x00,0x02,0xA6,
85117 -0x18,0x00,0xBF,0x8F,
85118 -0x14,0x00,0xB1,0x8F,
85119 -0x10,0x00,0xB0,0x8F,
85120 -0x08,0x00,0xE0,0x03,
85121 -0x20,0x00,0xBD,0x27,
85122 -0x9B,0x30,0x00,0x0C,
85123 -0x21,0x20,0x00,0x00,
85124 -0x00,0x08,0x04,0x24,
85125 -0x00,0x02,0x05,0x3C,
85126 -0xA9,0x45,0x00,0x0C,
85127 -0x21,0x30,0x00,0x00,
85128 -0x2F,0x31,0x00,0x08,
85129 -0x25,0xB0,0x10,0x3C,
85130 -0xC0,0xFF,0xBD,0x27,
85131 -0x28,0x00,0xB4,0xAF,
85132 -0x20,0x00,0xB2,0xAF,
85133 -0x18,0x00,0xB0,0xAF,
85134 -0x3C,0x00,0xBF,0xAF,
85135 -0x38,0x00,0xBE,0xAF,
85136 -0x34,0x00,0xB7,0xAF,
85137 -0x30,0x00,0xB6,0xAF,
85138 -0x2C,0x00,0xB5,0xAF,
85139 -0x24,0x00,0xB3,0xAF,
85140 -0x1C,0x00,0xB1,0xAF,
85141 -0xFF,0x00,0x90,0x30,
85142 -0xFF,0x00,0xB2,0x30,
85143 -0x21,0xA0,0x00,0x00,
85144 -0x00,0x60,0x16,0x40,
85145 -0x01,0x00,0xC1,0x36,
85146 -0x01,0x00,0x21,0x38,
85147 -0x00,0x60,0x81,0x40,
85148 -0x02,0x80,0x13,0x3C,
85149 -0xF6,0x5E,0x62,0x92,
85150 -0x0F,0x00,0x11,0x32,
85151 -0x0F,0x00,0x42,0x30,
85152 -0x12,0x00,0x51,0x10,
85153 -0x04,0x00,0x02,0x32,
85154 -0x40,0x00,0x40,0x14,
85155 -0x00,0x00,0x00,0x00,
85156 -0xF6,0x5E,0x62,0x92,
85157 -0x0C,0x00,0x03,0x24,
85158 -0x0F,0x00,0x42,0x30,
85159 -0x8F,0x00,0x43,0x10,
85160 -0x08,0x00,0x02,0x32,
85161 -0xF6,0x5E,0x62,0x92,
85162 -0x04,0x00,0x03,0x24,
85163 -0x0F,0x00,0x42,0x30,
85164 -0xD2,0x01,0x43,0x10,
85165 -0x00,0x00,0x00,0x00,
85166 -0xF6,0x5E,0x62,0x92,
85167 -0x02,0x00,0x03,0x24,
85168 -0x0F,0x00,0x42,0x30,
85169 -0x9B,0x00,0x43,0x10,
85170 -0x06,0x00,0x02,0x32,
85171 -0x02,0x80,0x10,0x3C,
85172 -0xF5,0x5E,0x03,0x92,
85173 -0xF6,0x5E,0x62,0x92,
85174 -0x0F,0x00,0x63,0x30,
85175 -0x0F,0x00,0x42,0x30,
85176 -0x2A,0x10,0x43,0x00,
85177 -0x1C,0x00,0x40,0x14,
85178 -0x02,0x80,0x12,0x3C,
85179 -0xF5,0x5E,0x02,0x92,
85180 -0x00,0x00,0x00,0x00,
85181 -0x40,0x00,0x42,0x30,
85182 -0x17,0x00,0x40,0x10,
85183 -0x02,0x80,0x02,0x3C,
85184 -0xDA,0x5D,0x42,0x90,
85185 -0x00,0x00,0x00,0x00,
85186 -0x02,0x00,0x43,0x30,
85187 -0x52,0x00,0x60,0x14,
85188 -0x04,0x00,0x42,0x30,
85189 -0x10,0x00,0x40,0x10,
85190 -0x00,0x00,0x00,0x00,
85191 -0xF6,0x5E,0x43,0x92,
85192 -0x02,0x80,0x06,0x3C,
85193 -0x5C,0xE9,0xC5,0x90,
85194 -0x0F,0x00,0x63,0x30,
85195 -0x25,0xB0,0x02,0x3C,
85196 -0x25,0x18,0x65,0x00,
85197 -0xDD,0x02,0x42,0x34,
85198 -0x00,0x00,0x43,0xA0,
85199 -0xF5,0x5E,0x04,0x92,
85200 -0x80,0xFF,0x02,0x24,
85201 -0xBF,0xFF,0x03,0x24,
85202 -0x26,0x28,0xA2,0x00,
85203 -0x24,0x20,0x83,0x00,
85204 -0x5C,0xE9,0xC5,0xA0,
85205 -0xF5,0x5E,0x04,0xA2,
85206 -0x00,0x60,0x96,0x40,
85207 -0x3C,0x00,0xBF,0x8F,
85208 -0x38,0x00,0xBE,0x8F,
85209 -0x34,0x00,0xB7,0x8F,
85210 -0x30,0x00,0xB6,0x8F,
85211 -0x2C,0x00,0xB5,0x8F,
85212 -0x28,0x00,0xB4,0x8F,
85213 -0x24,0x00,0xB3,0x8F,
85214 -0x20,0x00,0xB2,0x8F,
85215 -0x1C,0x00,0xB1,0x8F,
85216 -0x18,0x00,0xB0,0x8F,
85217 -0x08,0x00,0xE0,0x03,
85218 -0x40,0x00,0xBD,0x27,
85219 -0xF6,0x5E,0x62,0x92,
85220 -0x00,0x00,0x00,0x00,
85221 -0x04,0x00,0x42,0x30,
85222 -0x4C,0x00,0x40,0x10,
85223 -0x00,0x00,0x00,0x00,
85224 -0xF6,0x5E,0x62,0x92,
85225 -0x00,0x00,0x00,0x00,
85226 -0x08,0x00,0x42,0x30,
85227 -0x03,0x00,0x40,0x10,
85228 -0x08,0x00,0x02,0x32,
85229 -0x1B,0x00,0x40,0x10,
85230 -0x02,0x80,0x03,0x3C,
85231 -0xF6,0x5E,0x62,0x92,
85232 -0x00,0x00,0x00,0x00,
85233 -0x08,0x00,0x42,0x30,
85234 -0x0C,0x00,0x40,0x14,
85235 -0x08,0x00,0x02,0x32,
85236 -0x0A,0x00,0x40,0x10,
85237 -0x00,0x00,0x00,0x00,
85238 -0x08,0x00,0x40,0x12,
85239 -0x02,0x80,0x03,0x3C,
85240 -0xE0,0x3A,0x62,0x94,
85241 -0x00,0x00,0x00,0x00,
85242 -0x00,0x01,0x42,0x30,
85243 -0x03,0x00,0x40,0x10,
85244 -0x00,0x00,0x00,0x00,
85245 -0xCD,0x4E,0x00,0x0C,
85246 -0x21,0x20,0x00,0x00,
85247 -0xF6,0x5E,0x62,0x92,
85248 -0xF0,0xFF,0x03,0x24,
85249 -0x24,0x10,0x43,0x00,
85250 -0xF6,0x5E,0x62,0xA2,
85251 -0xF6,0x5E,0x63,0x92,
85252 -0x00,0x00,0x00,0x00,
85253 -0x25,0x18,0x23,0x02,
85254 -0xF6,0x5E,0x63,0xA2,
85255 -0x8E,0x31,0x00,0x08,
85256 -0x02,0x80,0x10,0x3C,
85257 -0xE0,0x3A,0x62,0x94,
85258 -0x00,0x00,0x00,0x00,
85259 -0x00,0x01,0x42,0x30,
85260 -0xF2,0xFF,0x40,0x10,
85261 -0x02,0x80,0x02,0x3C,
85262 -0x14,0x5F,0x43,0x90,
85263 -0x00,0x00,0x00,0x00,
85264 -0xA2,0xFF,0x60,0x14,
85265 -0x01,0x00,0x04,0x24,
85266 -0xCD,0x4E,0x00,0x0C,
85267 -0x00,0x00,0x00,0x00,
85268 -0xD9,0x31,0x00,0x08,
85269 -0x00,0x00,0x00,0x00,
85270 -0x25,0x24,0x00,0x0C,
85271 -0x24,0x00,0x04,0x24,
85272 -0x76,0x01,0x40,0x10,
85273 -0x21,0x88,0x40,0x00,
85274 -0x02,0x80,0x02,0x3C,
85275 -0xF4,0x5E,0x45,0x90,
85276 -0xF6,0x5E,0x44,0x92,
85277 -0xF5,0x5E,0x02,0x92,
85278 -0xBF,0xFF,0x03,0x24,
85279 -0x0F,0x00,0x84,0x30,
85280 -0x24,0x10,0x43,0x00,
85281 -0xF5,0x5E,0x02,0xA2,
85282 -0x10,0x00,0xA5,0xA3,
85283 -0x11,0x00,0xA4,0xA3,
85284 -0x08,0x00,0x24,0x96,
85285 -0x02,0x80,0x02,0x3C,
85286 -0x10,0x00,0xA5,0x27,
85287 -0x25,0x20,0x82,0x00,
85288 -0x20,0x00,0x84,0x24,
85289 -0x5F,0x1E,0x00,0x0C,
85290 -0x01,0x00,0x06,0x24,
85291 -0x04,0x00,0x03,0x24,
85292 -0x17,0x00,0x02,0x24,
85293 -0x0C,0x00,0x23,0xAE,
85294 -0x14,0x00,0x22,0xAE,
85295 -0x30,0x09,0x00,0x0C,
85296 -0x21,0x20,0x20,0x02,
85297 -0xB0,0x31,0x00,0x08,
85298 -0x00,0x00,0x00,0x00,
85299 -0x0C,0x31,0x00,0x0C,
85300 -0x00,0x00,0x00,0x00,
85301 -0xC2,0x31,0x00,0x08,
85302 -0x00,0x00,0x00,0x00,
85303 -0x71,0xFF,0x40,0x14,
85304 -0x00,0x00,0x00,0x00,
85305 -0x28,0x30,0x00,0x0C,
85306 -0x00,0x00,0x00,0x00,
85307 -0x77,0xFF,0x40,0x10,
85308 -0x00,0x00,0x00,0x00,
85309 -0xF6,0x5E,0x62,0x92,
85310 -0xF0,0xFF,0x03,0x24,
85311 -0x24,0x10,0x43,0x00,
85312 -0xF6,0x5E,0x62,0xA2,
85313 -0x02,0x80,0x03,0x3C,
85314 -0xF6,0x5E,0x62,0x92,
85315 -0xE0,0x3A,0x64,0x94,
85316 -0x04,0x00,0x42,0x34,
85317 -0x00,0x01,0x84,0x30,
85318 -0xF6,0x5E,0x62,0xA2,
85319 -0x61,0xFF,0x80,0x10,
85320 -0x00,0x00,0x00,0x00,
85321 -0xCD,0x4E,0x00,0x0C,
85322 -0x01,0x00,0x04,0x24,
85323 -0x83,0x31,0x00,0x08,
85324 -0x00,0x00,0x00,0x00,
85325 -0x65,0xFF,0x40,0x14,
85326 -0x00,0x00,0x00,0x00,
85327 -0x82,0x30,0x00,0x0C,
85328 -0x00,0x00,0x00,0x00,
85329 -0x61,0xFF,0x40,0x10,
85330 -0x00,0x00,0x00,0x00,
85331 -0xF6,0x5E,0x62,0x92,
85332 -0xF0,0xFF,0x03,0x24,
85333 -0x41,0xB0,0x04,0x3C,
85334 -0x24,0x10,0x43,0x00,
85335 -0xF6,0x5E,0x62,0xA2,
85336 -0xF6,0x5E,0x63,0x92,
85337 -0x08,0x00,0x85,0x34,
85338 -0x82,0x00,0x02,0x24,
85339 -0x01,0x00,0x63,0x34,
85340 -0x02,0x80,0x1E,0x3C,
85341 -0xF6,0x5E,0x63,0xA2,
85342 -0x00,0x00,0x80,0xAC,
85343 -0x00,0x00,0xA2,0xA4,
85344 -0x42,0xB0,0x04,0x3C,
85345 -0x30,0x1F,0xC2,0x27,
85346 -0xB0,0x1B,0x45,0x94,
85347 -0x00,0x00,0x83,0x90,
85348 -0xBE,0xFF,0x02,0x24,
85349 -0x03,0x00,0x86,0x34,
85350 -0x24,0x18,0x62,0x00,
85351 -0x00,0x01,0xA5,0x30,
85352 -0x90,0xFF,0x02,0x24,
85353 -0x00,0x00,0x83,0xA0,
85354 -0x00,0x00,0xC2,0xA0,
85355 -0x38,0x00,0xA0,0x10,
85356 -0x25,0xB0,0x06,0x3C,
85357 -0x25,0xB0,0x04,0x3C,
85358 -0x84,0x00,0x82,0x34,
85359 -0x00,0x00,0x46,0x8C,
85360 -0x80,0x00,0x84,0x34,
85361 -0x00,0x00,0x82,0x8C,
85362 -0x02,0x80,0x0B,0x3C,
85363 -0x1C,0x5F,0x64,0x8D,
85364 -0x00,0x38,0x06,0x00,
85365 -0x21,0x30,0x00,0x00,
85366 -0x25,0xA0,0xC2,0x00,
85367 -0x21,0x18,0x00,0x00,
85368 -0x02,0x80,0x0A,0x3C,
85369 -0x25,0xA8,0xE3,0x00,
85370 -0x21,0x28,0x00,0x00,
85371 -0x24,0x5F,0x42,0x8D,
85372 -0x21,0x20,0x94,0x00,
85373 -0x2B,0x18,0x94,0x00,
85374 -0x21,0x28,0xB5,0x00,
85375 -0x21,0x28,0xA3,0x00,
85376 -0x2B,0x10,0xA2,0x00,
85377 -0x24,0x01,0x40,0x14,
85378 -0x00,0x00,0x00,0x00,
85379 -0x24,0x5F,0x42,0x8D,
85380 -0x00,0x00,0x00,0x00,
85381 -0x10,0x01,0x45,0x10,
85382 -0x01,0x00,0x05,0x24,
85383 -0x30,0x1F,0xC2,0x27,
85384 -0xA4,0x3E,0x43,0x8C,
85385 -0x42,0xB0,0x07,0x3C,
85386 -0x00,0x00,0xE6,0x90,
85387 -0x18,0x00,0x65,0x00,
85388 -0xFB,0xFF,0x02,0x24,
85389 -0x24,0x30,0xC2,0x00,
85390 -0x00,0x00,0xE6,0xA0,
85391 -0x67,0x46,0x06,0x3C,
85392 -0xCF,0xAC,0xC6,0x34,
85393 -0x01,0x00,0x04,0x24,
85394 -0x21,0x28,0x00,0x00,
85395 -0x12,0x18,0x00,0x00,
85396 -0x82,0x1A,0x03,0x00,
85397 -0x40,0x10,0x03,0x00,
85398 -0x21,0x10,0x43,0x00,
85399 -0xC0,0x10,0x02,0x00,
85400 -0x21,0x10,0x43,0x00,
85401 -0x80,0x10,0x02,0x00,
85402 -0x19,0x00,0x46,0x00,
85403 -0x10,0x30,0x00,0x00,
85404 -0x23,0x10,0x46,0x00,
85405 -0x42,0x10,0x02,0x00,
85406 -0x21,0x30,0xC2,0x00,
85407 -0x02,0x33,0x06,0x00,
85408 -0x01,0x00,0x02,0x24,
85409 -0x8C,0x23,0x00,0x0C,
85410 -0x0A,0x30,0x46,0x00,
85411 -0x25,0xB0,0x06,0x3C,
85412 -0xF2,0x02,0xC3,0x34,
85413 -0x88,0xFF,0x02,0x24,
85414 -0x00,0x00,0x62,0xA0,
85415 -0x11,0x00,0xC7,0x34,
85416 -0x00,0x00,0xE2,0x90,
85417 -0x08,0x00,0xC5,0x34,
85418 -0x30,0x1F,0xC4,0x27,
85419 -0x01,0x00,0x42,0x34,
85420 -0x00,0x00,0xE2,0xA0,
85421 -0x00,0x00,0xA3,0x94,
85422 -0xB0,0x1B,0x82,0x94,
85423 -0xFF,0xFF,0x64,0x30,
85424 -0x10,0x00,0x84,0x34,
85425 -0x00,0x00,0xA4,0xA4,
85426 -0xFB,0xFF,0x84,0x30,
85427 -0x00,0x00,0xA4,0xA4,
85428 -0x00,0x01,0x42,0x30,
85429 -0x02,0x00,0x84,0x34,
85430 -0x00,0x00,0xA4,0xA4,
85431 -0x04,0x00,0x40,0x10,
85432 -0x42,0xB0,0x02,0x3C,
85433 -0x22,0x00,0x03,0x24,
85434 -0x03,0x00,0x42,0x34,
85435 -0x00,0x00,0x43,0xA0,
85436 -0xFF,0xF7,0x84,0x30,
85437 -0x00,0x00,0xA4,0xA4,
85438 -0x28,0x00,0xC4,0x34,
85439 -0x00,0x00,0x83,0x94,
85440 -0xEF,0xFE,0x02,0x24,
85441 -0xFE,0xFF,0x08,0x24,
85442 -0x24,0x18,0x62,0x00,
85443 -0x00,0x00,0x83,0xA4,
85444 -0x00,0x00,0x82,0x94,
85445 -0x26,0x00,0xC5,0x34,
85446 -0x02,0x80,0x03,0x3C,
85447 -0x24,0x10,0x48,0x00,
85448 -0x00,0x00,0x82,0xA4,
85449 -0xDA,0x5D,0x64,0x90,
85450 -0x00,0x00,0xA2,0x94,
85451 -0x04,0x00,0x84,0x30,
85452 -0x00,0x24,0x42,0x34,
85453 -0x00,0x00,0xA2,0xA4,
85454 -0x09,0x00,0x80,0x10,
85455 -0x00,0x00,0x00,0x00,
85456 -0x00,0x00,0xA2,0x94,
85457 -0x00,0x00,0x00,0x00,
85458 -0x24,0x10,0x48,0x00,
85459 -0x00,0x00,0xA2,0xA4,
85460 -0x00,0x00,0xE3,0x90,
85461 -0xFD,0xFF,0x02,0x24,
85462 -0x24,0x18,0x62,0x00,
85463 -0x00,0x00,0xE3,0xA0,
85464 -0x00,0x68,0x02,0x40,
85465 -0x00,0x08,0x42,0x30,
85466 -0xFD,0xFF,0x40,0x10,
85467 -0x00,0x00,0x00,0x00,
85468 -0x25,0xB0,0x12,0x3C,
85469 -0x11,0x00,0x43,0x36,
85470 -0x00,0x00,0x62,0x90,
85471 -0x00,0x00,0x00,0x00,
85472 -0x02,0x00,0x42,0x34,
85473 -0x00,0x00,0x62,0xA0,
85474 -0x00,0x00,0x00,0x00,
85475 -0x00,0x00,0x00,0x00,
85476 -0x00,0x00,0x00,0x00,
85477 -0x00,0x00,0x00,0x00,
85478 -0x00,0x00,0x00,0x00,
85479 -0x26,0x00,0x44,0x36,
85480 -0x00,0x00,0x82,0x94,
85481 -0x00,0x00,0x00,0x00,
85482 -0x01,0x00,0x42,0x34,
85483 -0x00,0x00,0x82,0xA4,
85484 -0x00,0x00,0x00,0x00,
85485 -0x00,0x00,0x00,0x00,
85486 -0x00,0x00,0x00,0x00,
85487 -0x00,0x00,0x00,0x00,
85488 -0x00,0x00,0x00,0x00,
85489 -0x00,0x00,0x00,0x00,
85490 -0x00,0x00,0x00,0x00,
85491 -0x00,0x00,0x00,0x00,
85492 -0x00,0x00,0x83,0x94,
85493 -0xFF,0xDB,0x02,0x24,
85494 -0x28,0x00,0x45,0x36,
85495 -0x24,0x18,0x62,0x00,
85496 -0x00,0x00,0x83,0xA4,
85497 -0x00,0x00,0xA2,0x94,
85498 -0x00,0x00,0x00,0x00,
85499 -0x01,0x00,0x42,0x34,
85500 -0x00,0x00,0xA2,0xA4,
85501 -0x00,0x00,0x00,0x00,
85502 -0x00,0x00,0x00,0x00,
85503 -0x00,0x00,0x00,0x00,
85504 -0x00,0x00,0x00,0x00,
85505 -0x00,0x00,0x00,0x00,
85506 -0x00,0x00,0x00,0x00,
85507 -0x00,0x00,0x00,0x00,
85508 -0x00,0x00,0x00,0x00,
85509 -0x00,0x00,0xA2,0x94,
85510 -0x00,0x00,0x00,0x00,
85511 -0x10,0x01,0x42,0x34,
85512 -0x00,0x00,0xA2,0xA4,
85513 -0x08,0x00,0x51,0x36,
85514 -0x00,0x00,0x23,0x96,
85515 -0x30,0x1F,0xD7,0x27,
85516 -0xB0,0x1B,0xE2,0x96,
85517 -0xFF,0xFF,0x70,0x30,
85518 -0x00,0x18,0x10,0x36,
85519 -0x00,0x00,0x30,0xA6,
85520 -0x00,0x01,0x42,0x30,
85521 -0xFD,0xFF,0x10,0x32,
85522 -0x00,0x00,0x30,0xA6,
85523 -0x05,0x00,0x40,0x10,
85524 -0x42,0xB0,0x02,0x3C,
85525 -0x00,0x00,0x43,0x90,
85526 -0xFB,0xFF,0x04,0x24,
85527 -0x24,0x18,0x64,0x00,
85528 -0x00,0x00,0x43,0xA0,
85529 -0x04,0x00,0x10,0x36,
85530 -0x54,0x22,0x00,0x0C,
85531 -0x32,0x00,0x04,0x24,
85532 -0x00,0x00,0x30,0xA6,
85533 -0x22,0x00,0x02,0x24,
85534 -0xF2,0x02,0x43,0x36,
85535 -0xEF,0xFF,0x10,0x32,
85536 -0x00,0x00,0x30,0xA6,
85537 -0xC8,0x00,0x04,0x24,
85538 -0x00,0x00,0x62,0xA0,
85539 -0x54,0x22,0x00,0x0C,
85540 -0x00,0x00,0x00,0x00,
85541 -0xB0,0x1B,0xE2,0x96,
85542 -0x00,0x00,0x00,0x00,
85543 -0x00,0x01,0x42,0x30,
85544 -0x41,0x00,0x40,0x10,
85545 -0x42,0xB0,0x06,0x3C,
85546 -0x84,0x00,0x42,0x36,
85547 -0x00,0x00,0x44,0x8C,
85548 -0x80,0x00,0x46,0x36,
85549 -0x00,0x00,0xC2,0x8C,
85550 -0x00,0x28,0x04,0x00,
85551 -0x21,0x18,0x00,0x00,
85552 -0x21,0x20,0x00,0x00,
85553 -0x25,0x30,0x82,0x00,
85554 -0x25,0x38,0xA3,0x00,
85555 -0xA4,0x3E,0xE3,0x8E,
85556 -0x23,0x28,0xD4,0x00,
85557 -0x80,0x12,0x05,0x00,
85558 -0x1B,0x00,0x43,0x00,
85559 -0x02,0x00,0x60,0x14,
85560 -0x00,0x00,0x00,0x00,
85561 -0x0D,0x00,0x07,0x00,
85562 -0x02,0x80,0x0B,0x3C,
85563 -0x1C,0x5F,0x63,0x8D,
85564 -0x12,0x10,0x00,0x00,
85565 -0x23,0x10,0x45,0x00,
85566 -0x21,0x10,0x43,0x00,
85567 -0x1C,0x5F,0x62,0xAD,
85568 -0x1C,0x5F,0x63,0x8D,
85569 -0x42,0xB0,0x02,0x3C,
85570 -0x03,0x00,0x42,0x34,
85571 -0xC4,0x09,0x63,0x24,
85572 -0x1C,0x5F,0x63,0xAD,
85573 -0x00,0x00,0x43,0x90,
85574 -0x00,0x00,0x00,0x00,
85575 -0x20,0x00,0x63,0x30,
85576 -0x20,0x00,0x60,0x14,
85577 -0x00,0x00,0x00,0x00,
85578 -0x1C,0x5F,0x62,0x8D,
85579 -0x02,0x80,0x0A,0x3C,
85580 -0x24,0x5F,0x44,0x8D,
85581 -0x21,0x40,0x46,0x00,
85582 -0x2B,0x28,0x06,0x01,
85583 -0x21,0x48,0x67,0x00,
85584 -0x21,0x48,0x25,0x01,
85585 -0x2B,0x20,0x24,0x01,
85586 -0x59,0x00,0x80,0x14,
85587 -0x00,0x00,0x00,0x00,
85588 -0x24,0x5F,0x42,0x8D,
85589 -0x00,0x00,0x00,0x00,
85590 -0x47,0x00,0x49,0x10,
85591 -0x01,0x00,0x05,0x24,
85592 -0x42,0xB0,0x02,0x3C,
85593 -0x00,0x00,0x43,0x90,
85594 -0xFB,0xFF,0x04,0x24,
85595 -0x01,0x00,0x06,0x24,
85596 -0x24,0x18,0x64,0x00,
85597 -0x00,0x00,0x43,0xA0,
85598 -0x04,0x00,0xA0,0x10,
85599 -0x01,0x00,0x04,0x24,
85600 -0x80,0x10,0x05,0x00,
85601 -0x21,0x10,0x45,0x00,
85602 -0x80,0x30,0x02,0x00,
85603 -0x8C,0x23,0x00,0x0C,
85604 -0x21,0x28,0x00,0x00,
85605 -0x42,0xB0,0x02,0x3C,
85606 -0x22,0x00,0x03,0x24,
85607 -0x03,0x00,0x42,0x34,
85608 -0x00,0x00,0x43,0xA0,
85609 -0x42,0xB0,0x06,0x3C,
85610 -0x00,0x00,0xC2,0x90,
85611 -0x30,0x1F,0xC5,0x27,
85612 -0xD0,0x1B,0xA8,0x8C,
85613 -0xDC,0x1B,0xA7,0x94,
85614 -0x41,0xB0,0x03,0x3C,
85615 -0x41,0x00,0x42,0x34,
85616 -0x08,0x00,0x64,0x34,
85617 -0x00,0x00,0xC2,0xA0,
85618 -0x00,0x00,0x68,0xAC,
85619 -0x00,0x00,0x87,0xA4,
85620 -0xF6,0x5E,0x63,0x92,
85621 -0xF0,0xFF,0x02,0x24,
85622 -0xDC,0x1B,0xA7,0xA4,
85623 -0x24,0x18,0x62,0x00,
85624 -0xF6,0x5E,0x63,0xA2,
85625 -0xF6,0x5E,0x62,0x92,
85626 -0xD0,0x1B,0xA8,0xAC,
85627 -0x02,0x00,0x42,0x34,
85628 -0xF6,0x5E,0x62,0xA2,
85629 -0x8E,0x31,0x00,0x08,
85630 -0x02,0x80,0x10,0x3C,
85631 -0x4C,0x30,0x00,0x0C,
85632 -0x00,0x00,0x00,0x00,
85633 -0x31,0xFE,0x40,0x10,
85634 -0x00,0x00,0x00,0x00,
85635 -0x1C,0x31,0x00,0x0C,
85636 -0x00,0x00,0x00,0x00,
85637 -0xF6,0x5E,0x62,0x92,
85638 -0xF0,0xFF,0x03,0x24,
85639 -0x24,0x10,0x43,0x00,
85640 -0xF6,0x5E,0x62,0xA2,
85641 -0xF6,0x5E,0x63,0x92,
85642 -0x00,0x00,0x00,0x00,
85643 -0x02,0x00,0x63,0x34,
85644 -0xF6,0x5E,0x63,0xA2,
85645 -0x88,0x31,0x00,0x08,
85646 -0x00,0x00,0x00,0x00,
85647 -0x99,0x99,0x03,0x3C,
85648 -0x25,0xB0,0x02,0x3C,
85649 -0x97,0x99,0x63,0x34,
85650 -0x18,0x03,0x42,0x34,
85651 -0x00,0x00,0x43,0xAC,
85652 -0xB0,0x31,0x00,0x08,
85653 -0x00,0x00,0x00,0x00,
85654 -0x20,0x5F,0x42,0x8D,
85655 -0x00,0x00,0x00,0x00,
85656 -0x2B,0x10,0x82,0x00,
85657 -0x0C,0x00,0x40,0x14,
85658 -0x00,0x00,0x00,0x00,
85659 -0x20,0x5F,0x42,0x8D,
85660 -0x61,0x32,0x00,0x08,
85661 -0x01,0x00,0x05,0x24,
85662 -0x20,0x5F,0x42,0x8D,
85663 -0x00,0x00,0x00,0x00,
85664 -0x2B,0x10,0x02,0x01,
85665 -0x0A,0x00,0x40,0x14,
85666 -0x00,0x00,0x00,0x00,
85667 -0x20,0x5F,0x42,0x8D,
85668 -0x32,0x33,0x00,0x08,
85669 -0x01,0x00,0x05,0x24,
85670 -0x20,0x5F,0x42,0x8D,
85671 -0x24,0x5F,0x43,0x8D,
85672 -0x1C,0x5F,0x64,0x8D,
85673 -0x23,0x10,0x54,0x00,
85674 -0x61,0x32,0x00,0x08,
85675 -0x23,0x28,0x44,0x00,
85676 -0x20,0x5F,0x42,0x8D,
85677 -0x24,0x5F,0x43,0x8D,
85678 -0x1C,0x5F,0x64,0x8D,
85679 -0x23,0x10,0x46,0x00,
85680 -0x32,0x33,0x00,0x08,
85681 -0x23,0x28,0x44,0x00,
85682 -0x02,0x80,0x02,0x3C,
85683 -0xF4,0x5E,0x43,0x90,
85684 -0x00,0x00,0x00,0x00,
85685 -0x07,0x00,0x60,0x10,
85686 -0x02,0x80,0x02,0x3C,
85687 -0xF6,0x5E,0x43,0x90,
85688 -0x04,0x00,0x04,0x24,
85689 -0x0F,0x00,0x63,0x30,
85690 -0x04,0x00,0x63,0x28,
85691 -0x03,0x00,0x60,0x14,
85692 -0x01,0x00,0x05,0x24,
85693 -0x08,0x00,0xE0,0x03,
85694 -0x00,0x00,0x00,0x00,
85695 -0x64,0x31,0x00,0x08,
85696 -0x00,0x00,0x00,0x00,
85697 -0x01,0x80,0x02,0x3C,
85698 -0x25,0xB0,0x03,0x3C,
85699 -0xE8,0xFF,0xBD,0x27,
85700 -0x6C,0xCE,0x42,0x24,
85701 -0x18,0x03,0x63,0x34,
85702 -0x14,0x00,0xBF,0xAF,
85703 -0x10,0x00,0xB0,0xAF,
85704 -0x00,0x00,0x62,0xAC,
85705 -0x00,0x60,0x10,0x40,
85706 -0x01,0x00,0x01,0x36,
85707 -0x01,0x00,0x21,0x38,
85708 -0x00,0x60,0x81,0x40,
85709 -0x02,0x80,0x04,0x3C,
85710 -0x13,0x5F,0x82,0x90,
85711 -0x00,0x00,0x00,0x00,
85712 -0x0B,0x00,0x40,0x10,
85713 -0x01,0x00,0x05,0x24,
85714 -0xD0,0x07,0x03,0x24,
85715 -0x02,0x80,0x02,0x3C,
85716 -0xE4,0x5E,0x43,0xAC,
85717 -0x13,0x5F,0x80,0xA0,
85718 -0x00,0x60,0x90,0x40,
85719 -0x14,0x00,0xBF,0x8F,
85720 -0x10,0x00,0xB0,0x8F,
85721 -0x21,0x10,0x00,0x00,
85722 -0x08,0x00,0xE0,0x03,
85723 -0x18,0x00,0xBD,0x27,
85724 -0x02,0x80,0x03,0x3C,
85725 -0x01,0x00,0x04,0x24,
85726 -0x02,0x80,0x02,0x3C,
85727 -0x16,0x5F,0x44,0xA0,
85728 -0x14,0x5F,0x60,0xA0,
85729 -0x02,0x80,0x02,0x3C,
85730 -0xF5,0x5E,0x44,0x90,
85731 -0x64,0x31,0x00,0x0C,
85732 -0xFF,0x00,0x84,0x30,
85733 -0x00,0x60,0x90,0x40,
85734 -0x14,0x00,0xBF,0x8F,
85735 -0x10,0x00,0xB0,0x8F,
85736 -0x21,0x10,0x00,0x00,
85737 -0x08,0x00,0xE0,0x03,
85738 -0x18,0x00,0xBD,0x27,
85739 -0x42,0x11,0x05,0x00,
85740 -0x0F,0x00,0x46,0x30,
85741 -0xE8,0xFF,0xBD,0x27,
85742 -0x09,0x00,0xC3,0x28,
85743 -0x14,0x00,0xBF,0xAF,
85744 -0x15,0x00,0x60,0x10,
85745 -0x10,0x00,0xB0,0xAF,
85746 -0x82,0x16,0x05,0x00,
85747 -0x01,0x00,0x42,0x30,
85748 -0x15,0x00,0x40,0x10,
85749 -0x00,0xC0,0x02,0x3C,
85750 -0x24,0x10,0xA2,0x00,
85751 -0x48,0x00,0x40,0x14,
85752 -0xC2,0x15,0x04,0x00,
85753 -0x01,0x00,0x42,0x30,
85754 -0x55,0x00,0x40,0x10,
85755 -0x00,0x00,0x00,0x00,
85756 -0x02,0x80,0x03,0x3C,
85757 -0x50,0xE9,0x63,0x24,
85758 -0x21,0x18,0xC3,0x00,
85759 -0x02,0x80,0x04,0x3C,
85760 -0x0F,0x5F,0x85,0x90,
85761 -0x00,0x00,0x62,0x90,
85762 -0x00,0x00,0x00,0x00,
85763 -0x24,0x10,0x45,0x00,
85764 -0x4B,0x00,0x40,0x10,
85765 -0x00,0x00,0x00,0x00,
85766 -0x14,0x00,0xBF,0x8F,
85767 -0x10,0x00,0xB0,0x8F,
85768 -0x08,0x00,0xE0,0x03,
85769 -0x18,0x00,0xBD,0x27,
85770 -0x24,0x10,0xA2,0x00,
85771 -0x20,0x00,0x40,0x14,
85772 -0xC2,0x15,0x04,0x00,
85773 -0x01,0x00,0x42,0x30,
85774 -0x0B,0x00,0x40,0x10,
85775 -0x02,0x80,0x04,0x3C,
85776 -0x02,0x80,0x03,0x3C,
85777 -0x50,0xE9,0x63,0x24,
85778 -0x21,0x18,0xC3,0x00,
85779 -0x02,0x80,0x04,0x3C,
85780 -0x0F,0x5F,0x85,0x90,
85781 -0x00,0x00,0x62,0x90,
85782 -0x00,0x00,0x00,0x00,
85783 -0x24,0x10,0x45,0x00,
85784 -0x3C,0x00,0x40,0x14,
85785 -0x02,0x80,0x04,0x3C,
85786 -0x0E,0x5F,0x82,0x90,
85787 -0xFE,0xFF,0x03,0x24,
85788 -0x24,0x10,0x43,0x00,
85789 -0x0E,0x5F,0x82,0xA0,
85790 -0x0E,0x5F,0x82,0x90,
85791 -0x00,0x00,0x00,0x00,
85792 -0x07,0x00,0x42,0x30,
85793 -0xE4,0xFF,0x40,0x14,
85794 -0x02,0x80,0x02,0x3C,
85795 -0x0C,0x5F,0x40,0xA0,
85796 -0x02,0x80,0x03,0x3C,
85797 -0xF5,0x5E,0x64,0x90,
85798 -0x14,0x00,0xBF,0x8F,
85799 -0x10,0x00,0xB0,0x8F,
85800 -0x01,0x00,0x05,0x24,
85801 -0xFF,0x00,0x84,0x30,
85802 -0x64,0x31,0x00,0x08,
85803 -0x18,0x00,0xBD,0x27,
85804 -0x02,0x80,0x04,0x3C,
85805 -0x0E,0x5F,0x82,0x90,
85806 -0xFD,0xFF,0x03,0x24,
85807 -0x14,0x00,0xBF,0x8F,
85808 -0x24,0x10,0x43,0x00,
85809 -0x02,0x80,0x03,0x3C,
85810 -0x0E,0x5F,0x82,0xA0,
85811 -0x12,0x5F,0x60,0xA0,
85812 -0x42,0xB0,0x04,0x3C,
85813 -0x00,0x00,0x82,0x90,
85814 -0x10,0x00,0xB0,0x8F,
85815 -0xEF,0xFF,0x03,0x24,
85816 -0x24,0x10,0x43,0x00,
85817 -0x03,0x00,0x85,0x34,
85818 -0x40,0x00,0x03,0x24,
85819 -0x18,0x00,0xBD,0x27,
85820 -0x00,0x00,0x82,0xA0,
85821 -0x00,0x00,0xA3,0xA0,
85822 -0x08,0x00,0xE0,0x03,
85823 -0x00,0x00,0x00,0x00,
85824 -0x42,0xB0,0x07,0x3C,
85825 -0x00,0x00,0xE3,0x90,
85826 -0xEF,0xFF,0x02,0x24,
85827 -0x03,0x00,0xF0,0x34,
85828 -0x24,0x18,0x62,0x00,
85829 -0x40,0x00,0x02,0x24,
85830 -0x00,0x00,0xE3,0xA0,
85831 -0x02,0x00,0x04,0x24,
85832 -0x00,0x00,0x02,0xA2,
85833 -0x21,0x28,0x00,0x00,
85834 -0x8C,0x23,0x00,0x0C,
85835 -0x00,0xF0,0x06,0x34,
85836 -0x44,0x00,0x02,0x24,
85837 -0x00,0x00,0x02,0xA2,
85838 -0xE0,0x33,0x00,0x08,
85839 -0x00,0x00,0x00,0x00,
85840 -0x14,0x00,0xBF,0x8F,
85841 -0x10,0x00,0xB0,0x8F,
85842 -0x01,0x00,0x04,0x24,
85843 -0xFE,0x4E,0x00,0x08,
85844 -0x18,0x00,0xBD,0x27,
85845 -0x0E,0x5F,0x82,0x90,
85846 -0xF6,0x33,0x00,0x08,
85847 -0xFB,0xFF,0x03,0x24,
85848 -0x82,0x16,0x05,0x00,
85849 -0xE8,0xFF,0xBD,0x27,
85850 -0x01,0x00,0x42,0x30,
85851 -0x14,0x00,0xBF,0xAF,
85852 -0x0E,0x00,0x40,0x10,
85853 -0x10,0x00,0xB0,0xAF,
85854 -0x00,0xC0,0x02,0x3C,
85855 -0x24,0x10,0xA2,0x00,
85856 -0x37,0x00,0x40,0x14,
85857 -0x02,0x80,0x02,0x3C,
85858 -0x0D,0x5F,0x43,0x90,
85859 -0x02,0x00,0x02,0x24,
85860 -0xFF,0x00,0x63,0x30,
85861 -0x44,0x00,0x62,0x10,
85862 -0x01,0x00,0x04,0x24,
85863 -0x14,0x00,0xBF,0x8F,
85864 -0x10,0x00,0xB0,0x8F,
85865 -0xFE,0x4E,0x00,0x08,
85866 -0x18,0x00,0xBD,0x27,
85867 -0x00,0xC0,0x02,0x3C,
85868 -0x24,0x10,0xA2,0x00,
85869 -0x0E,0x00,0x40,0x14,
85870 -0x02,0x80,0x06,0x3C,
85871 -0x0E,0x5F,0xC2,0x90,
85872 -0xFE,0xFF,0x03,0x24,
85873 -0x24,0x10,0x43,0x00,
85874 -0x0E,0x5F,0xC2,0xA0,
85875 -0x0E,0x5F,0xC2,0x90,
85876 -0x00,0x00,0x00,0x00,
85877 -0x07,0x00,0x42,0x30,
85878 -0x18,0x00,0x40,0x10,
85879 -0x02,0x80,0x02,0x3C,
85880 -0x14,0x00,0xBF,0x8F,
85881 -0x10,0x00,0xB0,0x8F,
85882 -0x08,0x00,0xE0,0x03,
85883 -0x18,0x00,0xBD,0x27,
85884 -0x0E,0x5F,0xC2,0x90,
85885 -0xFD,0xFF,0x03,0x24,
85886 -0x42,0xB0,0x04,0x3C,
85887 -0x24,0x10,0x43,0x00,
85888 -0x02,0x80,0x03,0x3C,
85889 -0x0E,0x5F,0xC2,0xA0,
85890 -0x12,0x5F,0x60,0xA0,
85891 -0x00,0x00,0x82,0x90,
85892 -0xEF,0xFF,0x03,0x24,
85893 -0x03,0x00,0x85,0x34,
85894 -0x24,0x10,0x43,0x00,
85895 -0x40,0x00,0x03,0x24,
85896 -0x00,0x00,0x82,0xA0,
85897 -0x00,0x00,0xA3,0xA0,
85898 -0x0E,0x5F,0xC2,0x90,
85899 -0x00,0x00,0x00,0x00,
85900 -0x07,0x00,0x42,0x30,
85901 -0xEA,0xFF,0x40,0x14,
85902 -0x02,0x80,0x02,0x3C,
85903 -0x0C,0x5F,0x40,0xA0,
85904 -0x02,0x80,0x03,0x3C,
85905 -0xF5,0x5E,0x64,0x90,
85906 -0x14,0x00,0xBF,0x8F,
85907 -0x10,0x00,0xB0,0x8F,
85908 -0x01,0x00,0x05,0x24,
85909 -0xFF,0x00,0x84,0x30,
85910 -0x64,0x31,0x00,0x08,
85911 -0x18,0x00,0xBD,0x27,
85912 -0x42,0xB0,0x07,0x3C,
85913 -0x00,0x00,0xE3,0x90,
85914 -0xEF,0xFF,0x02,0x24,
85915 -0x03,0x00,0xF0,0x34,
85916 -0x24,0x18,0x62,0x00,
85917 -0x40,0x00,0x02,0x24,
85918 -0x00,0x00,0xE3,0xA0,
85919 -0x02,0x00,0x04,0x24,
85920 -0x00,0x00,0x02,0xA2,
85921 -0x21,0x28,0x00,0x00,
85922 -0x8C,0x23,0x00,0x0C,
85923 -0x00,0xF0,0x06,0x34,
85924 -0x44,0x00,0x02,0x24,
85925 -0x00,0x00,0x02,0xA2,
85926 -0x14,0x00,0xBF,0x8F,
85927 -0x10,0x00,0xB0,0x8F,
85928 -0x08,0x00,0xE0,0x03,
85929 -0x18,0x00,0xBD,0x27,
85930 -0x0D,0x30,0x00,0x0C,
85931 -0x00,0x00,0x00,0x00,
85932 -0x14,0x00,0xBF,0x8F,
85933 -0x10,0x00,0xB0,0x8F,
85934 -0x0C,0x00,0x04,0x24,
85935 -0x01,0x00,0x05,0x24,
85936 -0x64,0x31,0x00,0x08,
85937 -0x18,0x00,0xBD,0x27,
85938 -0x01,0x80,0x02,0x3C,
85939 -0x25,0xB0,0x03,0x3C,
85940 -0xE8,0xFF,0xBD,0x27,
85941 -0x30,0xD2,0x42,0x24,
85942 -0x18,0x03,0x63,0x34,
85943 -0x10,0x00,0xB0,0xAF,
85944 -0x00,0x00,0x62,0xAC,
85945 -0x02,0x80,0x10,0x3C,
85946 -0xF5,0x5E,0x02,0x92,
85947 -0x14,0x00,0xBF,0xAF,
85948 -0x0F,0x00,0x42,0x30,
85949 -0x03,0x00,0x42,0x28,
85950 -0x05,0x00,0x40,0x10,
85951 -0x01,0x00,0x05,0x24,
85952 -0x4C,0x30,0x00,0x0C,
85953 -0x00,0x00,0x00,0x00,
85954 -0x04,0x00,0x40,0x10,
85955 -0x01,0x00,0x05,0x24,
85956 -0xF5,0x5E,0x04,0x92,
85957 -0x64,0x31,0x00,0x0C,
85958 -0xFF,0x00,0x84,0x30,
85959 -0x02,0x80,0x04,0x3C,
85960 -0x30,0x1F,0x84,0x24,
85961 -0xE0,0x1B,0x83,0x94,
85962 -0xDC,0x1B,0x85,0x94,
85963 -0x14,0x00,0xBF,0x8F,
85964 -0x10,0x00,0xB0,0x8F,
85965 -0x02,0x00,0x63,0x30,
85966 -0x41,0xB0,0x02,0x3C,
85967 -0x25,0x18,0x65,0x00,
85968 -0x08,0x00,0x42,0x34,
85969 -0x18,0x00,0xBD,0x27,
85970 -0x00,0x00,0x43,0xA4,
85971 -0x08,0x00,0xE0,0x03,
85972 -0xDC,0x1B,0x83,0xA4,
85973 -0xE8,0xFF,0xBD,0x27,
85974 -0x10,0x00,0xB0,0xAF,
85975 -0x14,0x00,0xBF,0xAF,
85976 -0x02,0x80,0x10,0x3C,
85977 -0x08,0x14,0x04,0x26,
85978 -0x21,0x28,0x00,0x00,
85979 -0x21,0x30,0x00,0x00,
85980 -0x91,0x3C,0x00,0x0C,
85981 -0x21,0x38,0x00,0x00,
85982 -0xB4,0x34,0x00,0x08,
85983 -0x08,0x14,0x04,0x26,
85984 -0xE8,0xFF,0xBD,0x27,
85985 -0x10,0x00,0xBF,0xAF,
85986 -0xCF,0x61,0x00,0x0C,
85987 -0x21,0x38,0x00,0x00,
85988 -0x10,0x00,0xBF,0x8F,
85989 -0x00,0x00,0x00,0x00,
85990 -0x08,0x00,0xE0,0x03,
85991 -0x18,0x00,0xBD,0x27,
85992 -0xFF,0xFF,0x8D,0x30,
85993 -0x00,0x60,0x0F,0x40,
85994 -0x01,0x00,0xE1,0x35,
85995 -0x01,0x00,0x21,0x38,
85996 -0x00,0x60,0x81,0x40,
85997 -0x02,0x80,0x06,0x3C,
85998 -0x30,0x1F,0xCE,0x24,
85999 -0x2A,0x1C,0xC2,0x91,
86000 -0x00,0x00,0x00,0x00,
86001 -0x1D,0x00,0x40,0x10,
86002 -0x25,0xB0,0x03,0x3C,
86003 -0x38,0x02,0x64,0x34,
86004 -0x80,0xFF,0x02,0x24,
86005 -0x00,0x00,0x82,0xA0,
86006 -0x34,0x02,0x6A,0x34,
86007 -0xD2,0x01,0x65,0x34,
86008 -0xD6,0x01,0x66,0x34,
86009 -0xDA,0x01,0x67,0x34,
86010 -0xDE,0x01,0x63,0x34,
86011 -0x00,0x00,0xA8,0x94,
86012 -0x00,0x00,0xC9,0x94,
86013 -0x00,0x00,0xEB,0x94,
86014 -0x00,0x00,0x6C,0x94,
86015 -0x00,0x00,0x44,0x95,
86016 -0xB0,0xFE,0xA2,0x25,
86017 -0xFF,0xFF,0x4D,0x30,
86018 -0x28,0x1C,0xC4,0xA5,
86019 -0x00,0x00,0xA0,0xA4,
86020 -0x20,0x1C,0xC8,0xA5,
86021 -0x00,0x00,0xC0,0xA4,
86022 -0x22,0x1C,0xC9,0xA5,
86023 -0x00,0x00,0xE0,0xA4,
86024 -0x24,0x1C,0xCB,0xA5,
86025 -0x00,0x00,0x60,0xA4,
86026 -0x00,0x00,0x4D,0xA5,
86027 -0x26,0x1C,0xCC,0xA5,
86028 -0x00,0x60,0x8F,0x40,
86029 -0x08,0x00,0xE0,0x03,
86030 -0x00,0x00,0x00,0x00,
86031 -0x2A,0xB0,0x02,0x3C,
86032 -0x0A,0x00,0x45,0x34,
86033 -0x63,0x00,0x03,0x24,
86034 -0xFF,0xFF,0x04,0x34,
86035 -0x00,0x00,0xA2,0x90,
86036 -0x00,0x00,0x00,0x00,
86037 -0x0A,0x00,0x40,0x10,
86038 -0x30,0x1F,0xC2,0x24,
86039 -0x64,0x00,0x02,0x24,
86040 -0xFF,0xFF,0x42,0x24,
86041 -0xFF,0xFF,0x42,0x30,
86042 -0xFE,0xFF,0x40,0x14,
86043 -0xFF,0xFF,0x42,0x24,
86044 -0xFF,0xFF,0x62,0x24,
86045 -0xFF,0xFF,0x43,0x30,
86046 -0xF4,0xFF,0x64,0x14,
86047 -0x30,0x1F,0xC2,0x24,
86048 -0x28,0x1C,0x48,0x94,
86049 -0x26,0x1C,0x47,0x94,
86050 -0x20,0x1C,0x49,0x94,
86051 -0x22,0x1C,0x4A,0x94,
86052 -0x24,0x1C,0x4B,0x94,
86053 -0x25,0xB0,0x03,0x3C,
86054 -0x38,0x02,0x6C,0x34,
86055 -0x34,0x02,0x62,0x34,
86056 -0xD2,0x01,0x64,0x34,
86057 -0xD6,0x01,0x65,0x34,
86058 -0xDA,0x01,0x66,0x34,
86059 -0xDE,0x01,0x63,0x34,
86060 -0x00,0x00,0x48,0xA4,
86061 -0x00,0x00,0x89,0xA4,
86062 -0x00,0x00,0xAA,0xA4,
86063 -0x00,0x00,0xCB,0xA4,
86064 -0x00,0x00,0x67,0xA4,
86065 -0x00,0x00,0x80,0xA1,
86066 -0x00,0x60,0x8F,0x40,
86067 -0x08,0x00,0xE0,0x03,
86068 -0x00,0x00,0x00,0x00,
86069 -0xD0,0xFF,0xBD,0x27,
86070 -0x28,0x00,0xB4,0xAF,
86071 -0x2C,0x00,0xBF,0xAF,
86072 -0x24,0x00,0xB3,0xAF,
86073 -0x20,0x00,0xB2,0xAF,
86074 -0x1C,0x00,0xB1,0xAF,
86075 -0x18,0x00,0xB0,0xAF,
86076 -0xFF,0xFF,0x14,0x24,
86077 -0x02,0x80,0x13,0x3C,
86078 -0x41,0xB0,0x02,0x3C,
86079 -0x30,0x1F,0x63,0x26,
86080 -0x04,0x00,0x42,0x34,
86081 -0x00,0x00,0x45,0x8C,
86082 -0xD4,0x1B,0x64,0x8C,
86083 -0xD0,0x1B,0x66,0x8C,
86084 -0x02,0x80,0x02,0x3C,
86085 -0x08,0x5E,0x47,0x90,
86086 -0x25,0xB0,0x08,0x3C,
86087 -0xB0,0x03,0x02,0x35,
86088 -0x25,0x90,0x85,0x00,
86089 -0x00,0x00,0x52,0xAC,
86090 -0x00,0x00,0x46,0xAC,
86091 -0x01,0x00,0x02,0x24,
86092 -0x8D,0x03,0xE2,0x10,
86093 -0xD4,0x1B,0x72,0xAC,
86094 -0x30,0x1F,0x64,0x26,
86095 -0xD0,0x1B,0x82,0x8C,
86096 -0x00,0x00,0x00,0x00,
86097 -0x24,0x10,0x52,0x00,
86098 -0x01,0x00,0x42,0x30,
86099 -0x0E,0x00,0x40,0x10,
86100 -0x30,0x1F,0x67,0x26,
86101 -0x25,0xB0,0x10,0x3C,
86102 -0xB0,0x03,0x02,0x36,
86103 -0x01,0x00,0x05,0x24,
86104 -0x00,0x00,0x45,0xAC,
86105 -0x04,0x00,0x0B,0x36,
86106 -0xD4,0x1B,0x83,0x8C,
86107 -0x00,0x00,0x69,0x8D,
86108 -0x40,0x00,0x02,0x3C,
86109 -0x01,0x00,0x63,0x38,
86110 -0x24,0x10,0x22,0x01,
86111 -0x2A,0x01,0x40,0x10,
86112 -0xD4,0x1B,0x83,0xAC,
86113 -0x30,0x1F,0x67,0x26,
86114 -0xD0,0x1B,0xE8,0x8C,
86115 -0x00,0x00,0x00,0x00,
86116 -0x24,0x10,0x12,0x01,
86117 -0x04,0x00,0x42,0x30,
86118 -0x18,0x00,0x40,0x10,
86119 -0x30,0x1F,0x71,0x26,
86120 -0x25,0xB0,0x03,0x3C,
86121 -0xB0,0x03,0x64,0x34,
86122 -0x04,0x00,0x02,0x24,
86123 -0x00,0x00,0x82,0xAC,
86124 -0xD4,0x1B,0xE2,0x8C,
86125 -0xFC,0x00,0x63,0x34,
86126 -0xAC,0x1B,0xE5,0x94,
86127 -0xD0,0x37,0xE4,0x8C,
86128 -0x00,0x00,0x66,0x8C,
86129 -0x04,0x00,0x42,0x38,
86130 -0x21,0x48,0x85,0x00,
86131 -0x0A,0x00,0xC9,0x10,
86132 -0xD4,0x1B,0xE2,0xAC,
86133 -0x02,0x80,0x05,0x3C,
86134 -0xBC,0x5E,0xA2,0x8C,
86135 -0xFB,0xFF,0x04,0x24,
86136 -0x24,0x20,0x04,0x01,
86137 -0x00,0x10,0x42,0x34,
86138 -0x41,0xB0,0x03,0x3C,
86139 -0xBC,0x5E,0xA2,0xAC,
86140 -0x00,0x00,0x64,0xAC,
86141 -0xD0,0x1B,0xE4,0xAC,
86142 -0x30,0x1F,0x71,0x26,
86143 -0xD0,0x1B,0x22,0x8E,
86144 -0x00,0x00,0x00,0x00,
86145 -0x24,0x10,0x52,0x00,
86146 -0x08,0x00,0x42,0x30,
86147 -0x0A,0x00,0x40,0x10,
86148 -0x00,0x00,0x00,0x00,
86149 -0xB0,0x1B,0x22,0x96,
86150 -0x00,0x00,0x00,0x00,
86151 -0x04,0x00,0x42,0x30,
86152 -0x5D,0x03,0x40,0x14,
86153 -0x00,0x80,0x02,0x3C,
86154 -0xD4,0x1B,0x22,0x8E,
86155 -0x00,0x00,0x00,0x00,
86156 -0x08,0x00,0x42,0x38,
86157 -0xD4,0x1B,0x22,0xAE,
86158 -0x30,0x1F,0x70,0x26,
86159 -0xD0,0x1B,0x02,0x8E,
86160 -0x00,0x00,0x00,0x00,
86161 -0x24,0x20,0x52,0x00,
86162 -0x00,0x08,0x83,0x30,
86163 -0x06,0x00,0x60,0x10,
86164 -0x00,0x10,0x82,0x30,
86165 -0xD4,0x1B,0x02,0x8E,
86166 -0x00,0x00,0x00,0x00,
86167 -0x00,0x08,0x42,0x38,
86168 -0xD4,0x1B,0x02,0xAE,
86169 -0x00,0x10,0x82,0x30,
86170 -0x05,0x03,0x40,0x14,
86171 -0x00,0x00,0x00,0x00,
86172 -0x30,0x1F,0x70,0x26,
86173 -0xD0,0x1B,0x03,0x8E,
86174 -0x00,0x00,0x00,0x00,
86175 -0x24,0x10,0x72,0x00,
86176 -0x00,0x20,0x42,0x30,
86177 -0xF7,0x02,0x40,0x14,
86178 -0x00,0x00,0x00,0x00,
86179 -0x24,0x10,0x72,0x00,
86180 -0x00,0x80,0x42,0x30,
86181 -0xB9,0x01,0x40,0x14,
86182 -0x01,0x00,0x03,0x3C,
86183 -0x30,0x1F,0x70,0x26,
86184 -0xD0,0x1B,0x02,0x8E,
86185 -0x00,0x00,0x00,0x00,
86186 -0x24,0x10,0x52,0x00,
86187 -0x24,0x10,0x54,0x00,
86188 -0x24,0x10,0x43,0x00,
86189 -0xF1,0x01,0x40,0x14,
86190 -0x00,0x00,0x00,0x00,
86191 -0xD0,0x1B,0x02,0x8E,
86192 -0x02,0x00,0x03,0x3C,
86193 -0x24,0x10,0x52,0x00,
86194 -0x24,0x10,0x43,0x00,
86195 -0x28,0x02,0x40,0x14,
86196 -0x00,0x00,0x00,0x00,
86197 -0x30,0x1F,0x70,0x26,
86198 -0xD0,0x1B,0x02,0x8E,
86199 -0x04,0x00,0x03,0x3C,
86200 -0x24,0x10,0x52,0x00,
86201 -0x24,0x10,0x54,0x00,
86202 -0x24,0x10,0x43,0x00,
86203 -0x62,0x02,0x40,0x14,
86204 -0x00,0x00,0x00,0x00,
86205 -0x30,0x1F,0x70,0x26,
86206 -0xD0,0x1B,0x02,0x8E,
86207 -0x08,0x00,0x03,0x3C,
86208 -0x24,0x10,0x52,0x00,
86209 -0x24,0x10,0x43,0x00,
86210 -0x9B,0x02,0x40,0x14,
86211 -0x00,0x00,0x00,0x00,
86212 -0x30,0x1F,0x70,0x26,
86213 -0xD0,0x1B,0x02,0x8E,
86214 -0x10,0x00,0x03,0x3C,
86215 -0x24,0x10,0x52,0x00,
86216 -0x24,0x10,0x54,0x00,
86217 -0x24,0x10,0x43,0x00,
86218 -0x5A,0x01,0x40,0x14,
86219 -0x00,0x00,0x00,0x00,
86220 -0x30,0x1F,0x70,0x26,
86221 -0xD0,0x1B,0x02,0x8E,
86222 -0x20,0x00,0x03,0x3C,
86223 -0x24,0x10,0x52,0x00,
86224 -0x24,0x10,0x43,0x00,
86225 -0x18,0x01,0x40,0x14,
86226 -0x00,0x00,0x00,0x00,
86227 -0x30,0x1F,0x70,0x26,
86228 -0xD0,0x1B,0x02,0x8E,
86229 -0x40,0x00,0x03,0x3C,
86230 -0x24,0x10,0x52,0x00,
86231 -0x24,0x10,0x54,0x00,
86232 -0x24,0x10,0x43,0x00,
86233 -0xD6,0x00,0x40,0x14,
86234 -0x00,0x00,0x00,0x00,
86235 -0x30,0x1F,0x65,0x26,
86236 -0xD0,0x1B,0xA2,0x8C,
86237 -0x00,0x04,0x03,0x3C,
86238 -0x24,0x10,0x52,0x00,
86239 -0x24,0x10,0x43,0x00,
86240 -0x3D,0x00,0x40,0x10,
86241 -0x30,0x1F,0x66,0x26,
86242 -0x2A,0xB0,0x02,0x3C,
86243 -0x2C,0x00,0x43,0x34,
86244 -0x00,0x00,0x69,0x8C,
86245 -0xFF,0x00,0x02,0x24,
86246 -0xFF,0x00,0x24,0x31,
86247 -0x29,0x03,0x82,0x10,
86248 -0x00,0x80,0x22,0x31,
86249 -0xF9,0x02,0x40,0x14,
86250 -0x00,0x80,0x02,0x3C,
86251 -0x00,0xFF,0x02,0x3C,
86252 -0x24,0x10,0x22,0x01,
86253 -0x0B,0x00,0x40,0x10,
86254 -0xFF,0x00,0x02,0x24,
86255 -0xB8,0x36,0xA2,0x90,
86256 -0x20,0xB0,0x03,0x3C,
86257 -0x00,0x12,0x02,0x00,
86258 -0x21,0x10,0x43,0x00,
86259 -0x0C,0x00,0x49,0x8C,
86260 -0x25,0xB0,0x03,0x3C,
86261 -0xB0,0x03,0x63,0x34,
86262 -0x00,0x00,0x69,0xAC,
86263 -0xFF,0x00,0x24,0x31,
86264 -0xFF,0x00,0x02,0x24,
86265 -0x1B,0x00,0x82,0x10,
86266 -0x30,0x1F,0x70,0x26,
86267 -0xFF,0x00,0x23,0x31,
86268 -0x88,0x37,0x05,0x8E,
86269 -0x20,0x10,0x02,0x3C,
86270 -0x00,0x1A,0x03,0x00,
86271 -0x21,0x18,0x62,0x00,
86272 -0x21,0x30,0x60,0x00,
86273 -0x1C,0x37,0x03,0xAE,
86274 -0x0A,0x00,0x04,0x24,
86275 -0xB8,0x36,0x09,0xA2,
86276 -0x00,0x01,0x07,0x24,
86277 -0x73,0x01,0x00,0x0C,
86278 -0x10,0x00,0xA0,0xAF,
86279 -0xD0,0x1B,0x05,0x8E,
86280 -0x02,0x80,0x06,0x3C,
86281 -0xBC,0x5E,0xC4,0x8C,
86282 -0x00,0x04,0x02,0x3C,
86283 -0x27,0x10,0x02,0x00,
86284 -0x24,0x28,0xA2,0x00,
86285 -0x25,0xB0,0x02,0x3C,
86286 -0x00,0x40,0x84,0x34,
86287 -0xB0,0x03,0x42,0x34,
86288 -0x41,0xB0,0x03,0x3C,
86289 -0x00,0x00,0x44,0xAC,
86290 -0x00,0x00,0x65,0xAC,
86291 -0xBC,0x5E,0xC4,0xAC,
86292 -0xD0,0x1B,0x05,0xAE,
86293 -0x30,0x1F,0x65,0x26,
86294 -0xD4,0x1B,0xA4,0x8C,
86295 -0x00,0x04,0x03,0x3C,
86296 -0x25,0xB0,0x02,0x3C,
86297 -0x26,0x20,0x83,0x00,
86298 -0xB0,0x03,0x42,0x34,
86299 -0x00,0x00,0x44,0xAC,
86300 -0xD4,0x1B,0xA4,0xAC,
86301 -0x30,0x1F,0x66,0x26,
86302 -0xD0,0x1B,0xC7,0x8C,
86303 -0x00,0x08,0x04,0x3C,
86304 -0x24,0x28,0xF2,0x00,
86305 -0x24,0x10,0xA4,0x00,
86306 -0x08,0x00,0x40,0x10,
86307 -0x80,0x00,0x08,0x3C,
86308 -0xD4,0x1B,0xC3,0x8C,
86309 -0x25,0xB0,0x02,0x3C,
86310 -0xB0,0x03,0x42,0x34,
86311 -0x26,0x18,0x64,0x00,
86312 -0x00,0x00,0x44,0xAC,
86313 -0xD4,0x1B,0xC3,0xAC,
86314 -0x80,0x00,0x08,0x3C,
86315 -0x24,0x10,0xA8,0x00,
86316 -0x21,0x00,0x40,0x10,
86317 -0x00,0x00,0x00,0x00,
86318 -0xD4,0x1B,0xC3,0x8C,
86319 -0x25,0xB0,0x09,0x3C,
86320 -0xB0,0x03,0x2A,0x35,
86321 -0x2A,0xB0,0x02,0x3C,
86322 -0x00,0x00,0x43,0xAD,
86323 -0x36,0x00,0x42,0x34,
86324 -0x00,0x00,0x43,0x90,
86325 -0x23,0xB0,0x04,0x3C,
86326 -0xFF,0x1F,0x02,0x3C,
86327 -0xC0,0x18,0x03,0x00,
86328 -0xF0,0x07,0x63,0x30,
86329 -0x00,0x38,0xC5,0x8C,
86330 -0x21,0x18,0x64,0x00,
86331 -0xFF,0xFF,0x42,0x34,
86332 -0x24,0x18,0x62,0x00,
86333 -0xCE,0x02,0x65,0x10,
86334 -0x04,0x38,0xC3,0xAC,
86335 -0x02,0x80,0x05,0x3C,
86336 -0xBC,0x5E,0xA3,0x8C,
86337 -0x27,0x20,0x08,0x00,
86338 -0x24,0x20,0xE4,0x00,
86339 -0x00,0x08,0x63,0x34,
86340 -0x41,0xB0,0x02,0x3C,
86341 -0x00,0x00,0x43,0xAD,
86342 -0x00,0x00,0x44,0xAC,
86343 -0xBC,0x5E,0xA3,0xAC,
86344 -0xD0,0x1B,0xC4,0xAC,
86345 -0x30,0x1F,0x62,0x26,
86346 -0xD4,0x1B,0x43,0x8C,
86347 -0x80,0x00,0x04,0x3C,
86348 -0x26,0x18,0x64,0x00,
86349 -0xD4,0x1B,0x43,0xAC,
86350 -0x30,0x1F,0x66,0x26,
86351 -0xD0,0x1B,0xC3,0x8C,
86352 -0x00,0x01,0x05,0x3C,
86353 -0x24,0x20,0x72,0x00,
86354 -0x24,0x10,0x85,0x00,
86355 -0x06,0x00,0x40,0x10,
86356 -0x25,0xB0,0x02,0x3C,
86357 -0xD4,0x1B,0xC3,0x8C,
86358 -0xB0,0x03,0x42,0x34,
86359 -0x26,0x18,0x65,0x00,
86360 -0x00,0x00,0x45,0xAC,
86361 -0xD4,0x1B,0xC3,0xAC,
86362 -0x00,0x02,0x05,0x3C,
86363 -0x24,0x10,0x85,0x00,
86364 -0x06,0x00,0x40,0x10,
86365 -0x25,0xB0,0x02,0x3C,
86366 -0xD4,0x1B,0xC3,0x8C,
86367 -0xB0,0x03,0x42,0x34,
86368 -0x26,0x18,0x65,0x00,
86369 -0x00,0x00,0x45,0xAC,
86370 -0xD4,0x1B,0xC3,0xAC,
86371 -0x00,0x10,0x05,0x3C,
86372 -0x24,0x10,0x85,0x00,
86373 -0x0C,0x00,0x40,0x10,
86374 -0x30,0x1F,0x63,0x26,
86375 -0xB0,0x1B,0xC3,0x94,
86376 -0x00,0x00,0x00,0x00,
86377 -0x04,0x00,0x62,0x30,
86378 -0x02,0x00,0x40,0x10,
86379 -0x00,0x08,0x62,0x34,
86380 -0xB0,0x1B,0xC2,0xA4,
86381 -0xD4,0x1B,0xC2,0x8C,
86382 -0x00,0x00,0x00,0x00,
86383 -0x26,0x10,0x45,0x00,
86384 -0xD4,0x1B,0xC2,0xAC,
86385 -0x30,0x1F,0x63,0x26,
86386 -0xD0,0x1B,0x62,0x8C,
86387 -0x00,0x20,0x05,0x3C,
86388 -0x24,0x10,0x52,0x00,
86389 -0x24,0x10,0x45,0x00,
86390 -0x0B,0x00,0x40,0x10,
86391 -0x00,0x00,0x00,0x00,
86392 -0xB0,0x1B,0x64,0x94,
86393 -0x00,0x00,0x00,0x00,
86394 -0x04,0x00,0x82,0x30,
86395 -0x02,0x00,0x40,0x10,
86396 -0xFF,0xF7,0x82,0x30,
86397 -0xB0,0x1B,0x62,0xA4,
86398 -0xD4,0x1B,0x62,0x8C,
86399 -0x00,0x00,0x00,0x00,
86400 -0x26,0x10,0x45,0x00,
86401 -0xD4,0x1B,0x62,0xAC,
86402 -0x2C,0x00,0xBF,0x8F,
86403 -0x28,0x00,0xB4,0x8F,
86404 -0x24,0x00,0xB3,0x8F,
86405 -0x20,0x00,0xB2,0x8F,
86406 -0x1C,0x00,0xB1,0x8F,
86407 -0x18,0x00,0xB0,0x8F,
86408 -0x08,0x00,0xE0,0x03,
86409 -0x30,0x00,0xBD,0x27,
86410 -0x20,0xBD,0x02,0x3C,
86411 -0xEC,0x02,0x03,0x36,
86412 -0x4D,0x00,0x07,0x36,
86413 -0xF1,0x02,0x08,0x36,
86414 -0x08,0x00,0x06,0x24,
86415 -0x78,0x02,0x42,0x34,
86416 -0x00,0x00,0x45,0xA4,
86417 -0x00,0x00,0xE0,0xA0,
86418 -0x00,0x00,0x06,0xA1,
86419 -0x00,0x00,0x60,0xAC,
86420 -0x00,0x00,0x62,0x8C,
86421 -0xFF,0x00,0x04,0x3C,
86422 -0x00,0x00,0xE0,0xA0,
86423 -0xFF,0x00,0x49,0x30,
86424 -0x25,0x48,0x24,0x01,
86425 -0x00,0x00,0x06,0xA1,
86426 -0xF2,0x02,0x05,0x36,
86427 -0x00,0x00,0x64,0xAC,
86428 -0x0A,0x00,0x0A,0x36,
86429 -0x00,0x00,0x69,0xAC,
86430 -0x80,0xFF,0x03,0x24,
86431 -0x00,0x00,0xA0,0xA0,
86432 -0x00,0x00,0x43,0xA1,
86433 -0x00,0x00,0x62,0x8D,
86434 -0x80,0x00,0x03,0x3C,
86435 -0x24,0x10,0x43,0x00,
86436 -0x02,0x00,0x40,0x10,
86437 -0x84,0xFF,0x02,0x24,
86438 -0x00,0x00,0x42,0xA1,
86439 -0x25,0x22,0x00,0x0C,
86440 -0x01,0x00,0x04,0x24,
86441 -0x02,0x00,0x02,0x36,
86442 -0x00,0x00,0x43,0x94,
86443 -0xFF,0xBF,0x04,0x24,
86444 -0x24,0x18,0x64,0x00,
86445 -0x00,0x00,0x43,0xA4,
86446 -0x3C,0x35,0x00,0x08,
86447 -0x30,0x1F,0x67,0x26,
86448 -0x8C,0x33,0x00,0x0C,
86449 -0x00,0x00,0x00,0x00,
86450 -0x25,0xB0,0x02,0x3C,
86451 -0x2A,0xB0,0x06,0x3C,
86452 -0xB0,0x03,0x42,0x34,
86453 -0x00,0x00,0x54,0xAC,
86454 -0x28,0x00,0xC3,0x34,
86455 -0x00,0x00,0x69,0x8C,
86456 -0xFF,0x00,0x05,0x24,
86457 -0xFF,0x00,0x24,0x31,
86458 -0x6D,0x03,0x85,0x10,
86459 -0x25,0xBD,0x02,0x3C,
86460 -0x00,0x80,0x22,0x31,
86461 -0x59,0x02,0x40,0x10,
86462 -0x00,0xFF,0x02,0x3C,
86463 -0x00,0x80,0x02,0x3C,
86464 -0x00,0x00,0x62,0xAC,
86465 -0xFF,0x00,0x02,0x24,
86466 -0x21,0x00,0x82,0x10,
86467 -0xFF,0x00,0x23,0x31,
86468 -0x30,0x1F,0x70,0x26,
86469 -0x58,0x37,0x05,0x8E,
86470 -0x20,0x10,0x02,0x3C,
86471 -0x00,0x1A,0x03,0x00,
86472 -0x21,0x18,0x62,0x00,
86473 -0x21,0x30,0x60,0x00,
86474 -0xA4,0x36,0x09,0xA2,
86475 -0xEC,0x36,0x03,0xAE,
86476 -0x06,0x00,0x04,0x24,
86477 -0x80,0x00,0x07,0x24,
86478 -0x73,0x01,0x00,0x0C,
86479 -0x10,0x00,0xA0,0xAF,
86480 -0x02,0x80,0x09,0x3C,
86481 -0xCC,0x5E,0x27,0x91,
86482 -0x02,0x80,0x08,0x3C,
86483 -0xBC,0x5E,0x05,0x8D,
86484 -0xD0,0x1B,0x06,0x8E,
86485 -0x60,0x00,0x02,0x3C,
86486 -0x02,0x00,0xE7,0x34,
86487 -0x27,0x10,0x02,0x00,
86488 -0x24,0x30,0xC2,0x00,
86489 -0x00,0x04,0xA5,0x34,
86490 -0x00,0x26,0x07,0x00,
86491 -0x25,0xB0,0x02,0x3C,
86492 -0x25,0x20,0x85,0x00,
86493 -0x80,0x03,0x42,0x34,
86494 -0x41,0xB0,0x03,0x3C,
86495 -0x00,0x00,0x44,0xAC,
86496 -0x00,0x00,0x66,0xAC,
86497 -0xBC,0x5E,0x05,0xAD,
86498 -0xCC,0x5E,0x27,0xA1,
86499 -0xD0,0x1B,0x06,0xAE,
86500 -0x30,0x1F,0x62,0x26,
86501 -0xD4,0x1B,0x43,0x8C,
86502 -0x40,0x00,0x04,0x3C,
86503 -0x26,0x18,0x64,0x00,
86504 -0xB5,0x35,0x00,0x08,
86505 -0xD4,0x1B,0x43,0xAC,
86506 -0x8C,0x33,0x00,0x0C,
86507 -0x00,0x00,0x00,0x00,
86508 -0x2A,0xB0,0x05,0x3C,
86509 -0x24,0x00,0xA3,0x34,
86510 -0x00,0x00,0x69,0x8C,
86511 -0xFF,0x00,0x06,0x24,
86512 -0xFF,0x00,0x24,0x31,
86513 -0x48,0x03,0x86,0x10,
86514 -0x25,0xB0,0x02,0x3C,
86515 -0x00,0x80,0x22,0x31,
86516 -0x64,0x02,0x40,0x10,
86517 -0x00,0xFF,0x02,0x3C,
86518 -0x00,0x80,0x02,0x3C,
86519 -0x00,0x00,0x62,0xAC,
86520 -0xFF,0x00,0x02,0x24,
86521 -0x25,0x00,0x82,0x10,
86522 -0x30,0x1F,0x70,0x26,
86523 -0xFF,0x00,0x23,0x31,
86524 -0x58,0x37,0x05,0x8E,
86525 -0x20,0x10,0x02,0x3C,
86526 -0x00,0x1A,0x03,0x00,
86527 -0x21,0x18,0x62,0x00,
86528 -0x21,0x30,0x60,0x00,
86529 -0xA0,0x36,0x09,0xA2,
86530 -0xEC,0x36,0x03,0xAE,
86531 -0x06,0x00,0x04,0x24,
86532 -0x80,0x00,0x07,0x24,
86533 -0x73,0x01,0x00,0x0C,
86534 -0x10,0x00,0xA0,0xAF,
86535 -0x02,0x80,0x0A,0x3C,
86536 -0xCC,0x5E,0x47,0x91,
86537 -0x02,0x80,0x09,0x3C,
86538 -0xBC,0x5E,0x25,0x8D,
86539 -0xD0,0x1B,0x06,0x8E,
86540 -0x60,0x00,0x02,0x3C,
86541 -0x04,0x00,0xE7,0x34,
86542 -0x27,0x10,0x02,0x00,
86543 -0x24,0x30,0xC2,0x00,
86544 -0x00,0x04,0xA5,0x34,
86545 -0x25,0xB0,0x03,0x3C,
86546 -0x40,0x00,0x02,0x3C,
86547 -0x00,0x26,0x07,0x00,
86548 -0x26,0xA0,0x82,0x02,
86549 -0xB0,0x03,0x68,0x34,
86550 -0x25,0x20,0x85,0x00,
86551 -0x80,0x03,0x63,0x34,
86552 -0x41,0xB0,0x02,0x3C,
86553 -0x00,0x00,0x64,0xAC,
86554 -0x00,0x00,0x46,0xAC,
86555 -0xBC,0x5E,0x25,0xAD,
86556 -0xCC,0x5E,0x47,0xA1,
86557 -0xD0,0x1B,0x06,0xAE,
86558 -0x00,0x00,0x14,0xAD,
86559 -0x30,0x1F,0x62,0x26,
86560 -0xD4,0x1B,0x43,0x8C,
86561 -0x20,0x00,0x04,0x3C,
86562 -0x26,0x18,0x64,0x00,
86563 -0xAD,0x35,0x00,0x08,
86564 -0xD4,0x1B,0x43,0xAC,
86565 -0x8C,0x33,0x00,0x0C,
86566 -0x00,0x00,0x00,0x00,
86567 -0x25,0xB0,0x05,0x3C,
86568 -0xB0,0x03,0xA2,0x34,
86569 -0x2A,0xB0,0x07,0x3C,
86570 -0x00,0x00,0x54,0xAC,
86571 -0x20,0x00,0xE3,0x34,
86572 -0x00,0x00,0x69,0x8C,
86573 -0xFF,0x00,0x06,0x24,
86574 -0xFF,0x00,0x24,0x31,
86575 -0x07,0x03,0x86,0x10,
86576 -0x90,0x03,0xA2,0x34,
86577 -0x00,0x80,0x22,0x31,
86578 -0x05,0x02,0x40,0x10,
86579 -0x00,0xFF,0x02,0x3C,
86580 -0x00,0x80,0x02,0x3C,
86581 -0x00,0x00,0x62,0xAC,
86582 -0xFF,0x00,0x02,0x24,
86583 -0x21,0x00,0x82,0x10,
86584 -0x30,0x1F,0x70,0x26,
86585 -0xFF,0x00,0x23,0x31,
86586 -0x4C,0x37,0x05,0x8E,
86587 -0x20,0x10,0x02,0x3C,
86588 -0x00,0x1A,0x03,0x00,
86589 -0x21,0x18,0x62,0x00,
86590 -0x21,0x30,0x60,0x00,
86591 -0xA8,0x36,0x09,0xA2,
86592 -0xE0,0x36,0x03,0xAE,
86593 -0x05,0x00,0x04,0x24,
86594 -0x80,0x00,0x07,0x24,
86595 -0x73,0x01,0x00,0x0C,
86596 -0x10,0x00,0xA0,0xAF,
86597 -0x02,0x80,0x09,0x3C,
86598 -0xCC,0x5E,0x27,0x91,
86599 -0x02,0x80,0x08,0x3C,
86600 -0xBC,0x5E,0x05,0x8D,
86601 -0xD0,0x1B,0x06,0x8E,
86602 -0x18,0x00,0x02,0x3C,
86603 -0x01,0x00,0xE7,0x34,
86604 -0x27,0x10,0x02,0x00,
86605 -0x24,0x30,0xC2,0x00,
86606 -0x00,0x02,0xA5,0x34,
86607 -0x00,0x26,0x07,0x00,
86608 -0x25,0xB0,0x02,0x3C,
86609 -0x25,0x20,0x85,0x00,
86610 -0x80,0x03,0x42,0x34,
86611 -0x41,0xB0,0x03,0x3C,
86612 -0x00,0x00,0x44,0xAC,
86613 -0x00,0x00,0x66,0xAC,
86614 -0xBC,0x5E,0x05,0xAD,
86615 -0xCC,0x5E,0x27,0xA1,
86616 -0xD0,0x1B,0x06,0xAE,
86617 -0x30,0x1F,0x62,0x26,
86618 -0xD4,0x1B,0x43,0x8C,
86619 -0x10,0x00,0x04,0x3C,
86620 -0x26,0x18,0x64,0x00,
86621 -0xA6,0x35,0x00,0x08,
86622 -0xD4,0x1B,0x43,0xAC,
86623 -0x8C,0x33,0x00,0x0C,
86624 -0x00,0x00,0x00,0x00,
86625 -0x2A,0xB0,0x05,0x3C,
86626 -0x0C,0x00,0xA3,0x34,
86627 -0x00,0x00,0x69,0x8C,
86628 -0xFF,0x00,0x06,0x24,
86629 -0xFF,0x00,0x24,0x31,
86630 -0xC6,0x02,0x86,0x10,
86631 -0x00,0x80,0x22,0x31,
86632 -0x54,0x02,0x40,0x10,
86633 -0x00,0xFF,0x02,0x3C,
86634 -0x00,0x80,0x02,0x3C,
86635 -0x00,0x00,0x62,0xAC,
86636 -0xFF,0x00,0x02,0x24,
86637 -0x24,0x00,0x82,0x10,
86638 -0x30,0x1F,0x70,0x26,
86639 -0xFF,0x00,0x23,0x31,
86640 -0x34,0x37,0x05,0x8E,
86641 -0x20,0x10,0x02,0x3C,
86642 -0x00,0x1A,0x03,0x00,
86643 -0x21,0x18,0x62,0x00,
86644 -0x21,0x30,0x60,0x00,
86645 -0x8C,0x36,0x09,0xA2,
86646 -0xC8,0x36,0x03,0xAE,
86647 -0x03,0x00,0x04,0x24,
86648 -0x80,0x00,0x07,0x24,
86649 -0x73,0x01,0x00,0x0C,
86650 -0x10,0x00,0xA0,0xAF,
86651 -0x02,0x80,0x0A,0x3C,
86652 -0xCC,0x5E,0x47,0x91,
86653 -0x02,0x80,0x09,0x3C,
86654 -0xBC,0x5E,0x25,0x8D,
86655 -0xD0,0x1B,0x06,0x8E,
86656 -0x01,0x00,0x08,0x3C,
86657 -0x80,0xFF,0x02,0x24,
86658 -0x25,0x38,0xE2,0x00,
86659 -0x00,0x80,0x03,0x35,
86660 -0x80,0x00,0xA5,0x34,
86661 -0x27,0x18,0x03,0x00,
86662 -0x00,0x26,0x07,0x00,
86663 -0x25,0xB0,0x02,0x3C,
86664 -0x24,0x30,0xC3,0x00,
86665 -0x25,0x20,0x85,0x00,
86666 -0x80,0x03,0x42,0x34,
86667 -0x41,0xB0,0x03,0x3C,
86668 -0x00,0x00,0x44,0xAC,
86669 -0x27,0xA0,0x08,0x00,
86670 -0x00,0x00,0x66,0xAC,
86671 -0xBC,0x5E,0x25,0xAD,
86672 -0xCC,0x5E,0x47,0xA1,
86673 -0xD0,0x1B,0x06,0xAE,
86674 -0x30,0x1F,0x63,0x26,
86675 -0xD4,0x1B,0x62,0x8C,
86676 -0x00,0x00,0x00,0x00,
86677 -0x00,0x80,0x42,0x38,
86678 -0xD4,0x1B,0x62,0xAC,
86679 -0x30,0x1F,0x70,0x26,
86680 -0xD0,0x1B,0x02,0x8E,
86681 -0x01,0x00,0x03,0x3C,
86682 -0x24,0x10,0x52,0x00,
86683 -0x24,0x10,0x54,0x00,
86684 -0x24,0x10,0x43,0x00,
86685 -0x11,0xFE,0x40,0x10,
86686 -0x00,0x00,0x00,0x00,
86687 -0x8C,0x33,0x00,0x0C,
86688 -0x00,0x00,0x00,0x00,
86689 -0x2A,0xB0,0x05,0x3C,
86690 -0x10,0x00,0xA3,0x34,
86691 -0x00,0x00,0x69,0x8C,
86692 -0xFF,0x00,0x06,0x24,
86693 -0xFF,0x00,0x24,0x31,
86694 -0x7C,0x02,0x86,0x10,
86695 -0x25,0xB0,0x02,0x3C,
86696 -0x00,0x80,0x22,0x31,
86697 -0xD0,0x01,0x40,0x10,
86698 -0x00,0x80,0x02,0x3C,
86699 -0x00,0x00,0x62,0xAC,
86700 -0xFF,0x00,0x02,0x24,
86701 -0x22,0x00,0x82,0x10,
86702 -0x30,0x1F,0x70,0x26,
86703 -0xFF,0x00,0x23,0x31,
86704 -0x34,0x37,0x05,0x8E,
86705 -0x20,0x10,0x02,0x3C,
86706 -0x00,0x1A,0x03,0x00,
86707 -0x21,0x18,0x62,0x00,
86708 -0x21,0x30,0x60,0x00,
86709 -0x90,0x36,0x09,0xA2,
86710 -0xC8,0x36,0x03,0xAE,
86711 -0x03,0x00,0x04,0x24,
86712 -0x80,0x00,0x07,0x24,
86713 -0x73,0x01,0x00,0x0C,
86714 -0x10,0x00,0xA0,0xAF,
86715 -0x02,0x80,0x09,0x3C,
86716 -0xCC,0x5E,0x27,0x91,
86717 -0x02,0x80,0x08,0x3C,
86718 -0xBC,0x5E,0x05,0x8D,
86719 -0xD0,0x1B,0x06,0x8E,
86720 -0x01,0x00,0x02,0x3C,
86721 -0x00,0x80,0x42,0x34,
86722 -0x40,0x00,0xE7,0x34,
86723 -0x27,0x10,0x02,0x00,
86724 -0x24,0x30,0xC2,0x00,
86725 -0x80,0x00,0xA5,0x34,
86726 -0x00,0x26,0x07,0x00,
86727 -0x25,0xB0,0x02,0x3C,
86728 -0x25,0x20,0x85,0x00,
86729 -0x80,0x03,0x42,0x34,
86730 -0x41,0xB0,0x03,0x3C,
86731 -0x00,0x00,0x44,0xAC,
86732 -0x00,0x00,0x66,0xAC,
86733 -0xBC,0x5E,0x05,0xAD,
86734 -0xCC,0x5E,0x27,0xA1,
86735 -0xD0,0x1B,0x06,0xAE,
86736 -0x30,0x1F,0x62,0x26,
86737 -0xD4,0x1B,0x43,0x8C,
86738 -0x01,0x00,0x04,0x3C,
86739 -0x30,0x1F,0x70,0x26,
86740 -0x26,0x18,0x64,0x00,
86741 -0xD4,0x1B,0x43,0xAC,
86742 -0xD0,0x1B,0x02,0x8E,
86743 -0x02,0x00,0x03,0x3C,
86744 -0x24,0x10,0x52,0x00,
86745 -0x24,0x10,0x43,0x00,
86746 -0xDB,0xFD,0x40,0x10,
86747 -0x00,0x00,0x00,0x00,
86748 -0x8C,0x33,0x00,0x0C,
86749 -0x00,0x00,0x00,0x00,
86750 -0x2A,0xB0,0x05,0x3C,
86751 -0x14,0x00,0xA3,0x34,
86752 -0x00,0x00,0x69,0x8C,
86753 -0xFF,0x00,0x06,0x24,
86754 -0xFF,0x00,0x24,0x31,
86755 -0x64,0x02,0x86,0x10,
86756 -0x25,0xB0,0x02,0x3C,
86757 -0x00,0x80,0x22,0x31,
86758 -0xFA,0x01,0x40,0x10,
86759 -0x00,0xFF,0x02,0x3C,
86760 -0x00,0x80,0x02,0x3C,
86761 -0x00,0x00,0x62,0xAC,
86762 -0xFF,0x00,0x02,0x24,
86763 -0x25,0x00,0x82,0x10,
86764 -0x30,0x1F,0x70,0x26,
86765 -0xFF,0x00,0x23,0x31,
86766 -0x40,0x37,0x05,0x8E,
86767 -0x20,0x10,0x02,0x3C,
86768 -0x00,0x1A,0x03,0x00,
86769 -0x21,0x18,0x62,0x00,
86770 -0x21,0x30,0x60,0x00,
86771 -0x94,0x36,0x09,0xA2,
86772 -0xD4,0x36,0x03,0xAE,
86773 -0x04,0x00,0x04,0x24,
86774 -0x80,0x00,0x07,0x24,
86775 -0x73,0x01,0x00,0x0C,
86776 -0x10,0x00,0xA0,0xAF,
86777 -0x02,0x80,0x0A,0x3C,
86778 -0xCC,0x5E,0x47,0x91,
86779 -0x02,0x80,0x09,0x3C,
86780 -0xBC,0x5E,0x25,0x8D,
86781 -0xD0,0x1B,0x06,0x8E,
86782 -0x06,0x00,0x02,0x3C,
86783 -0x20,0x00,0xE7,0x34,
86784 -0x27,0x10,0x02,0x00,
86785 -0x24,0x30,0xC2,0x00,
86786 -0x00,0x01,0xA5,0x34,
86787 -0x25,0xB0,0x03,0x3C,
86788 -0x04,0x00,0x02,0x3C,
86789 -0x00,0x26,0x07,0x00,
86790 -0x26,0xA0,0x82,0x02,
86791 -0xB0,0x03,0x68,0x34,
86792 -0x25,0x20,0x85,0x00,
86793 -0x80,0x03,0x63,0x34,
86794 -0x41,0xB0,0x02,0x3C,
86795 -0x00,0x00,0x64,0xAC,
86796 -0x00,0x00,0x46,0xAC,
86797 -0xBC,0x5E,0x25,0xAD,
86798 -0xCC,0x5E,0x47,0xA1,
86799 -0xD0,0x1B,0x06,0xAE,
86800 -0x00,0x00,0x14,0xAD,
86801 -0x30,0x1F,0x62,0x26,
86802 -0xD4,0x1B,0x43,0x8C,
86803 -0x02,0x00,0x04,0x3C,
86804 -0x30,0x1F,0x70,0x26,
86805 -0x26,0x18,0x64,0x00,
86806 -0xD4,0x1B,0x43,0xAC,
86807 -0xD0,0x1B,0x02,0x8E,
86808 -0x04,0x00,0x03,0x3C,
86809 -0x24,0x10,0x52,0x00,
86810 -0x24,0x10,0x54,0x00,
86811 -0x24,0x10,0x43,0x00,
86812 -0xA1,0xFD,0x40,0x10,
86813 -0x00,0x00,0x00,0x00,
86814 -0x8C,0x33,0x00,0x0C,
86815 -0x00,0x00,0x00,0x00,
86816 -0x25,0xB0,0x03,0x3C,
86817 -0xB0,0x03,0x62,0x34,
86818 -0x2A,0xB0,0x07,0x3C,
86819 -0x00,0x00,0x54,0xAC,
86820 -0x18,0x00,0xE5,0x34,
86821 -0x00,0x00,0xA9,0x8C,
86822 -0xFF,0x00,0x06,0x24,
86823 -0xFF,0x00,0x24,0x31,
86824 -0x16,0x02,0x86,0x10,
86825 -0x04,0x00,0x02,0x24,
86826 -0x00,0x80,0x22,0x31,
86827 -0xD6,0x01,0x40,0x10,
86828 -0x00,0xFF,0x02,0x3C,
86829 -0x00,0x80,0x02,0x3C,
86830 -0x00,0x00,0xA2,0xAC,
86831 -0xFF,0x00,0x02,0x24,
86832 -0x21,0x00,0x82,0x10,
86833 -0x30,0x1F,0x70,0x26,
86834 -0xFF,0x00,0x23,0x31,
86835 -0x40,0x37,0x05,0x8E,
86836 -0x20,0x10,0x02,0x3C,
86837 -0x00,0x1A,0x03,0x00,
86838 -0x21,0x18,0x62,0x00,
86839 -0x21,0x30,0x60,0x00,
86840 -0x98,0x36,0x09,0xA2,
86841 -0xD4,0x36,0x03,0xAE,
86842 -0x04,0x00,0x04,0x24,
86843 -0x80,0x00,0x07,0x24,
86844 -0x73,0x01,0x00,0x0C,
86845 -0x10,0x00,0xA0,0xAF,
86846 -0x02,0x80,0x09,0x3C,
86847 -0xCC,0x5E,0x27,0x91,
86848 -0x02,0x80,0x08,0x3C,
86849 -0xBC,0x5E,0x05,0x8D,
86850 -0xD0,0x1B,0x06,0x8E,
86851 -0x06,0x00,0x02,0x3C,
86852 -0x10,0x00,0xE7,0x34,
86853 -0x27,0x10,0x02,0x00,
86854 -0x24,0x30,0xC2,0x00,
86855 -0x00,0x01,0xA5,0x34,
86856 -0x00,0x26,0x07,0x00,
86857 -0x25,0xB0,0x02,0x3C,
86858 -0x25,0x20,0x85,0x00,
86859 -0x80,0x03,0x42,0x34,
86860 -0x41,0xB0,0x03,0x3C,
86861 -0x00,0x00,0x44,0xAC,
86862 -0x00,0x00,0x66,0xAC,
86863 -0xBC,0x5E,0x05,0xAD,
86864 -0xCC,0x5E,0x27,0xA1,
86865 -0xD0,0x1B,0x06,0xAE,
86866 -0x30,0x1F,0x62,0x26,
86867 -0xD4,0x1B,0x43,0x8C,
86868 -0x04,0x00,0x04,0x3C,
86869 -0x30,0x1F,0x70,0x26,
86870 -0x26,0x18,0x64,0x00,
86871 -0xD4,0x1B,0x43,0xAC,
86872 -0xD0,0x1B,0x02,0x8E,
86873 -0x08,0x00,0x03,0x3C,
86874 -0x24,0x10,0x52,0x00,
86875 -0x24,0x10,0x43,0x00,
86876 -0x68,0xFD,0x40,0x10,
86877 -0x00,0x00,0x00,0x00,
86878 -0x8C,0x33,0x00,0x0C,
86879 -0x00,0x00,0x00,0x00,
86880 -0x2A,0xB0,0x05,0x3C,
86881 -0x1C,0x00,0xA3,0x34,
86882 -0x00,0x00,0x69,0x8C,
86883 -0xFF,0x00,0x06,0x24,
86884 -0xFF,0x00,0x24,0x31,
86885 -0xDD,0x01,0x86,0x10,
86886 -0x25,0xB0,0x02,0x3C,
86887 -0x00,0x80,0x22,0x31,
86888 -0x33,0x01,0x40,0x10,
86889 -0x00,0xFF,0x02,0x3C,
86890 -0x00,0x80,0x02,0x3C,
86891 -0x00,0x00,0x62,0xAC,
86892 -0xFF,0x00,0x02,0x24,
86893 -0x25,0x00,0x82,0x10,
86894 -0x30,0x1F,0x70,0x26,
86895 -0xFF,0x00,0x23,0x31,
86896 -0x4C,0x37,0x05,0x8E,
86897 -0x20,0x10,0x02,0x3C,
86898 -0x00,0x1A,0x03,0x00,
86899 -0x21,0x18,0x62,0x00,
86900 -0x21,0x30,0x60,0x00,
86901 -0x9C,0x36,0x09,0xA2,
86902 -0xE0,0x36,0x03,0xAE,
86903 -0x05,0x00,0x04,0x24,
86904 -0x80,0x00,0x07,0x24,
86905 -0x73,0x01,0x00,0x0C,
86906 -0x10,0x00,0xA0,0xAF,
86907 -0x02,0x80,0x0A,0x3C,
86908 -0xCC,0x5E,0x47,0x91,
86909 -0x02,0x80,0x09,0x3C,
86910 -0xBC,0x5E,0x25,0x8D,
86911 -0xD0,0x1B,0x06,0x8E,
86912 -0x18,0x00,0x02,0x3C,
86913 -0x08,0x00,0xE7,0x34,
86914 -0x27,0x10,0x02,0x00,
86915 -0x24,0x30,0xC2,0x00,
86916 -0x00,0x02,0xA5,0x34,
86917 -0x25,0xB0,0x03,0x3C,
86918 -0x10,0x00,0x02,0x3C,
86919 -0x00,0x26,0x07,0x00,
86920 -0x26,0xA0,0x82,0x02,
86921 -0xB0,0x03,0x68,0x34,
86922 -0x25,0x20,0x85,0x00,
86923 -0x80,0x03,0x63,0x34,
86924 -0x41,0xB0,0x02,0x3C,
86925 -0x00,0x00,0x64,0xAC,
86926 -0x00,0x00,0x46,0xAC,
86927 -0xBC,0x5E,0x25,0xAD,
86928 -0xCC,0x5E,0x47,0xA1,
86929 -0xD0,0x1B,0x06,0xAE,
86930 -0x00,0x00,0x14,0xAD,
86931 -0x30,0x1F,0x62,0x26,
86932 -0xD4,0x1B,0x43,0x8C,
86933 -0x08,0x00,0x04,0x3C,
86934 -0x26,0x18,0x64,0x00,
86935 -0x9E,0x35,0x00,0x08,
86936 -0xD4,0x1B,0x43,0xAC,
86937 -0x8C,0x33,0x00,0x0C,
86938 -0x00,0x00,0x00,0x00,
86939 -0xD4,0x1B,0x02,0x8E,
86940 -0xD0,0x1B,0x03,0x8E,
86941 -0x00,0x20,0x42,0x38,
86942 -0x7D,0x35,0x00,0x08,
86943 -0xD4,0x1B,0x02,0xAE,
86944 -0x8C,0x33,0x00,0x0C,
86945 -0x00,0x00,0x00,0x00,
86946 -0x2A,0xB0,0x02,0x3C,
86947 -0x08,0x00,0x43,0x34,
86948 -0x00,0x00,0x69,0x8C,
86949 -0xFF,0x00,0x02,0x24,
86950 -0xFF,0x00,0x24,0x31,
86951 -0x2C,0x00,0x82,0x10,
86952 -0x00,0x80,0x22,0x31,
86953 -0x34,0x01,0x40,0x14,
86954 -0x00,0x80,0x02,0x3C,
86955 -0x00,0xFF,0x02,0x3C,
86956 -0x24,0x10,0x22,0x01,
86957 -0x0B,0x00,0x40,0x10,
86958 -0xFF,0x00,0x02,0x24,
86959 -0xB4,0x36,0x02,0x92,
86960 -0x20,0xB0,0x03,0x3C,
86961 -0x00,0x12,0x02,0x00,
86962 -0x21,0x10,0x43,0x00,
86963 -0x0C,0x00,0x49,0x8C,
86964 -0x25,0xB0,0x03,0x3C,
86965 -0xB0,0x03,0x63,0x34,
86966 -0x00,0x00,0x69,0xAC,
86967 -0xFF,0x00,0x24,0x31,
86968 -0xFF,0x00,0x02,0x24,
86969 -0x1A,0x00,0x82,0x10,
86970 -0x30,0x1F,0x70,0x26,
86971 -0xFF,0x00,0x23,0x31,
86972 -0x7C,0x37,0x05,0x8E,
86973 -0x20,0x10,0x02,0x3C,
86974 -0x00,0x1A,0x03,0x00,
86975 -0x21,0x18,0x62,0x00,
86976 -0x21,0x30,0x60,0x00,
86977 -0x10,0x37,0x03,0xAE,
86978 -0x01,0x00,0x04,0x24,
86979 -0xB4,0x36,0x09,0xA2,
86980 -0x80,0x00,0x07,0x24,
86981 -0x73,0x01,0x00,0x0C,
86982 -0x10,0x00,0xA0,0xAF,
86983 -0xD0,0x1B,0x05,0x8E,
86984 -0x02,0x80,0x06,0x3C,
86985 -0xBC,0x5E,0xC4,0x8C,
86986 -0xFF,0xC7,0x02,0x24,
86987 -0x24,0x28,0xA2,0x00,
86988 -0x25,0xB0,0x02,0x3C,
86989 -0x10,0x00,0x84,0x34,
86990 -0x80,0x03,0x42,0x34,
86991 -0x41,0xB0,0x03,0x3C,
86992 -0x00,0x00,0x44,0xAC,
86993 -0x00,0x00,0x65,0xAC,
86994 -0xBC,0x5E,0xC4,0xAC,
86995 -0xD0,0x1B,0x05,0xAE,
86996 -0x30,0x1F,0x63,0x26,
86997 -0xD4,0x1B,0x62,0x8C,
86998 -0x00,0x00,0x00,0x00,
86999 -0x00,0x10,0x42,0x38,
87000 -0x76,0x35,0x00,0x08,
87001 -0xD4,0x1B,0x62,0xAC,
87002 -0x56,0x01,0x02,0x35,
87003 -0x00,0x00,0x43,0x94,
87004 -0x00,0x00,0x00,0x00,
87005 -0x70,0xFC,0x60,0x10,
87006 -0x00,0x00,0x00,0x00,
87007 -0x93,0x55,0x00,0x0C,
87008 -0x07,0x00,0x04,0x24,
87009 -0x29,0x35,0x00,0x08,
87010 -0x30,0x1F,0x64,0x26,
87011 -0x00,0x00,0x62,0xAC,
87012 -0xD3,0x35,0x00,0x08,
87013 -0xFF,0x00,0x02,0x24,
87014 -0xF8,0x1D,0x24,0x96,
87015 -0x64,0x37,0x25,0x8E,
87016 -0xFF,0x0F,0x83,0x30,
87017 -0x25,0x28,0xA2,0x00,
87018 -0x00,0x19,0x03,0x00,
87019 -0x20,0x00,0xA6,0x24,
87020 -0x02,0x12,0x03,0x00,
87021 -0x01,0x00,0x84,0x24,
87022 -0xF8,0x1D,0x24,0xA6,
87023 -0x17,0x00,0xC2,0xA0,
87024 -0x16,0x00,0xC3,0xA0,
87025 -0x0C,0x00,0xA4,0x8C,
87026 -0x00,0xF0,0x02,0x3C,
87027 -0xFF,0xFF,0x42,0x34,
87028 -0xFF,0x0F,0x63,0x30,
87029 -0x00,0x1C,0x03,0x00,
87030 -0x24,0x20,0x82,0x00,
87031 -0x25,0x20,0x83,0x00,
87032 -0x0C,0x00,0xA4,0xAC,
87033 -0x64,0x37,0x25,0x8E,
87034 -0x01,0x00,0x10,0x24,
87035 -0x01,0x00,0x04,0x24,
87036 -0x31,0x10,0x06,0x3C,
87037 -0x00,0x01,0x07,0x24,
87038 -0x73,0x01,0x00,0x0C,
87039 -0x10,0x00,0xB0,0xAF,
87040 -0xB0,0x01,0x00,0x0C,
87041 -0x01,0x00,0x04,0x24,
87042 -0x2A,0xB0,0x02,0x3C,
87043 -0x01,0x00,0x42,0x34,
87044 -0x02,0x00,0x03,0x24,
87045 -0x00,0x00,0x50,0xA0,
87046 -0x00,0x00,0x43,0xA0,
87047 -0xD4,0x1B,0x22,0x8E,
87048 -0x00,0x00,0x00,0x00,
87049 -0x08,0x00,0x42,0x38,
87050 -0x68,0x35,0x00,0x08,
87051 -0xD4,0x1B,0x22,0xAE,
87052 -0xD0,0x03,0x23,0x35,
87053 -0x80,0x00,0x02,0x24,
87054 -0x00,0x00,0x62,0xAC,
87055 -0x24,0x36,0x00,0x08,
87056 -0x30,0x1F,0x62,0x26,
87057 -0x25,0xB0,0x02,0x3C,
87058 -0x01,0x00,0x03,0x24,
87059 -0x90,0x03,0x42,0x34,
87060 -0x00,0x00,0x43,0xAC,
87061 -0xF0,0x35,0x00,0x08,
87062 -0x30,0x1F,0x65,0x26,
87063 -0x24,0x10,0x22,0x01,
87064 -0xA9,0xFD,0x40,0x10,
87065 -0xFF,0x00,0x02,0x24,
87066 -0x47,0x00,0xC6,0x34,
87067 -0x00,0x00,0xC2,0x90,
87068 -0x00,0x00,0x00,0x00,
87069 -0xFF,0x00,0x44,0x30,
87070 -0x0E,0x00,0x85,0x10,
87071 -0x30,0x1F,0x62,0x26,
87072 -0xA4,0x36,0x04,0xA2,
87073 -0x00,0x00,0xC2,0x90,
87074 -0xFF,0x00,0x83,0x30,
87075 -0xFF,0x00,0x44,0x30,
87076 -0x07,0x00,0x83,0x10,
87077 -0x21,0x38,0x00,0x02,
87078 -0x21,0x28,0xC0,0x00,
87079 -0x00,0x00,0xA2,0x90,
87080 -0x21,0x18,0x80,0x00,
87081 -0xFD,0xFF,0x62,0x14,
87082 -0xFF,0x00,0x44,0x30,
87083 -0xA4,0x36,0xE3,0xA0,
87084 -0x30,0x1F,0x62,0x26,
87085 -0xA4,0x36,0x43,0x90,
87086 -0x20,0xB0,0x02,0x3C,
87087 -0x00,0x1A,0x03,0x00,
87088 -0x21,0x18,0x62,0x00,
87089 -0x0C,0x00,0x69,0x8C,
87090 -0x25,0xB0,0x02,0x3C,
87091 -0xB0,0x03,0x42,0x34,
87092 -0xFF,0x00,0x24,0x31,
87093 -0x00,0x00,0x49,0xAC,
87094 -0x9C,0x36,0x00,0x08,
87095 -0xFF,0x00,0x02,0x24,
87096 -0x24,0x10,0x22,0x01,
87097 -0xFD,0xFD,0x40,0x10,
87098 -0xFF,0x00,0x02,0x24,
87099 -0x45,0x00,0xE5,0x34,
87100 -0x00,0x00,0xA2,0x90,
87101 -0x00,0x00,0x00,0x00,
87102 -0xFF,0x00,0x44,0x30,
87103 -0x0E,0x00,0x86,0x10,
87104 -0x30,0x1F,0x62,0x26,
87105 -0xA8,0x36,0x04,0xA2,
87106 -0x00,0x00,0xA2,0x90,
87107 -0xFF,0x00,0x83,0x30,
87108 -0xFF,0x00,0x44,0x30,
87109 -0x08,0x00,0x83,0x10,
87110 -0x30,0x1F,0x62,0x26,
87111 -0x21,0x30,0x00,0x02,
87112 -0x00,0x00,0xA2,0x90,
87113 -0x21,0x18,0x80,0x00,
87114 -0xFD,0xFF,0x62,0x14,
87115 -0xFF,0x00,0x44,0x30,
87116 -0xA8,0x36,0xC3,0xA0,
87117 -0x30,0x1F,0x62,0x26,
87118 -0xA8,0x36,0x43,0x90,
87119 -0x20,0xB0,0x02,0x3C,
87120 -0x00,0x1A,0x03,0x00,
87121 -0x21,0x18,0x62,0x00,
87122 -0x0C,0x00,0x69,0x8C,
87123 -0x25,0xB0,0x02,0x3C,
87124 -0xB0,0x03,0x42,0x34,
87125 -0xFF,0x00,0x24,0x31,
87126 -0x00,0x00,0x49,0xAC,
87127 -0x11,0x37,0x00,0x08,
87128 -0xFF,0x00,0x02,0x24,
87129 -0x24,0x10,0x22,0x01,
87130 -0x9E,0xFD,0x40,0x10,
87131 -0xFF,0x00,0x02,0x24,
87132 -0x46,0x00,0xA5,0x34,
87133 -0x00,0x00,0xA2,0x90,
87134 -0x00,0x00,0x00,0x00,
87135 -0xFF,0x00,0x44,0x30,
87136 -0x0E,0x00,0x86,0x10,
87137 -0x30,0x1F,0x62,0x26,
87138 -0xA0,0x36,0x04,0xA2,
87139 -0x00,0x00,0xA2,0x90,
87140 -0xFF,0x00,0x83,0x30,
87141 -0xFF,0x00,0x44,0x30,
87142 -0x08,0x00,0x83,0x10,
87143 -0x30,0x1F,0x62,0x26,
87144 -0x21,0x30,0x00,0x02,
87145 -0x00,0x00,0xA2,0x90,
87146 -0x21,0x18,0x80,0x00,
87147 -0xFD,0xFF,0x62,0x14,
87148 -0xFF,0x00,0x44,0x30,
87149 -0xA0,0x36,0xC3,0xA0,
87150 -0x30,0x1F,0x62,0x26,
87151 -0xA0,0x36,0x43,0x90,
87152 -0x20,0xB0,0x02,0x3C,
87153 -0x00,0x1A,0x03,0x00,
87154 -0x21,0x18,0x62,0x00,
87155 -0x0C,0x00,0x69,0x8C,
87156 -0x25,0xB0,0x02,0x3C,
87157 -0xB0,0x03,0x42,0x34,
87158 -0xFF,0x00,0x24,0x31,
87159 -0x00,0x00,0x49,0xAC,
87160 -0xD3,0x36,0x00,0x08,
87161 -0xFF,0x00,0x02,0x24,
87162 -0x00,0xFF,0x02,0x3C,
87163 -0x24,0x10,0x22,0x01,
87164 -0x30,0xFE,0x40,0x10,
87165 -0xFF,0x00,0x02,0x24,
87166 -0x41,0x00,0xA5,0x34,
87167 -0x00,0x00,0xA2,0x90,
87168 -0x00,0x00,0x00,0x00,
87169 -0xFF,0x00,0x44,0x30,
87170 -0x0E,0x00,0x86,0x10,
87171 -0x30,0x1F,0x62,0x26,
87172 -0x90,0x36,0x04,0xA2,
87173 -0x00,0x00,0xA2,0x90,
87174 -0xFF,0x00,0x83,0x30,
87175 -0xFF,0x00,0x44,0x30,
87176 -0x08,0x00,0x83,0x10,
87177 -0x30,0x1F,0x62,0x26,
87178 -0x21,0x30,0x00,0x02,
87179 -0x00,0x00,0xA2,0x90,
87180 -0x21,0x18,0x80,0x00,
87181 -0xFD,0xFF,0x62,0x14,
87182 -0xFF,0x00,0x44,0x30,
87183 -0x90,0x36,0xC3,0xA0,
87184 -0x30,0x1F,0x62,0x26,
87185 -0x90,0x36,0x43,0x90,
87186 -0x20,0xB0,0x02,0x3C,
87187 -0x00,0x1A,0x03,0x00,
87188 -0x21,0x18,0x62,0x00,
87189 -0x0C,0x00,0x69,0x8C,
87190 -0x25,0xB0,0x02,0x3C,
87191 -0xB0,0x03,0x42,0x34,
87192 -0xFF,0x00,0x24,0x31,
87193 -0x00,0x00,0x49,0xAC,
87194 -0x87,0x37,0x00,0x08,
87195 -0xFF,0x00,0x02,0x24,
87196 -0x24,0x10,0x22,0x01,
87197 -0xCF,0xFE,0x40,0x10,
87198 -0xFF,0x00,0x02,0x24,
87199 -0x44,0x00,0xA5,0x34,
87200 -0x00,0x00,0xA2,0x90,
87201 -0x00,0x00,0x00,0x00,
87202 -0xFF,0x00,0x44,0x30,
87203 -0x0E,0x00,0x86,0x10,
87204 -0x30,0x1F,0x62,0x26,
87205 -0x9C,0x36,0x04,0xA2,
87206 -0x00,0x00,0xA2,0x90,
87207 -0xFF,0x00,0x83,0x30,
87208 -0xFF,0x00,0x44,0x30,
87209 -0x08,0x00,0x83,0x10,
87210 -0x30,0x1F,0x62,0x26,
87211 -0x21,0x30,0x00,0x02,
87212 -0x00,0x00,0xA2,0x90,
87213 -0x21,0x18,0x80,0x00,
87214 -0xFD,0xFF,0x62,0x14,
87215 -0xFF,0x00,0x44,0x30,
87216 -0x9C,0x36,0xC3,0xA0,
87217 -0x30,0x1F,0x62,0x26,
87218 -0x9C,0x36,0x43,0x90,
87219 -0x20,0xB0,0x02,0x3C,
87220 -0x00,0x1A,0x03,0x00,
87221 -0x21,0x18,0x62,0x00,
87222 -0x0C,0x00,0x69,0x8C,
87223 -0x25,0xB0,0x02,0x3C,
87224 -0xB0,0x03,0x42,0x34,
87225 -0xFF,0x00,0x24,0x31,
87226 -0x00,0x00,0x49,0xAC,
87227 -0x47,0x38,0x00,0x08,
87228 -0xFF,0x00,0x02,0x24,
87229 -0x24,0x10,0x22,0x01,
87230 -0xAE,0xFD,0x40,0x10,
87231 -0xFF,0x00,0x02,0x24,
87232 -0x40,0x00,0xA5,0x34,
87233 -0x00,0x00,0xA2,0x90,
87234 -0x00,0x00,0x00,0x00,
87235 -0xFF,0x00,0x44,0x30,
87236 -0x0E,0x00,0x86,0x10,
87237 -0x30,0x1F,0x62,0x26,
87238 -0x8C,0x36,0x04,0xA2,
87239 -0x00,0x00,0xA2,0x90,
87240 -0xFF,0x00,0x83,0x30,
87241 -0xFF,0x00,0x44,0x30,
87242 -0x08,0x00,0x83,0x10,
87243 -0x30,0x1F,0x62,0x26,
87244 -0x21,0x30,0x00,0x02,
87245 -0x00,0x00,0xA2,0x90,
87246 -0x21,0x18,0x80,0x00,
87247 -0xFD,0xFF,0x62,0x14,
87248 -0xFF,0x00,0x44,0x30,
87249 -0x8C,0x36,0xC3,0xA0,
87250 -0x30,0x1F,0x62,0x26,
87251 -0x8C,0x36,0x43,0x90,
87252 -0x20,0xB0,0x02,0x3C,
87253 -0x00,0x1A,0x03,0x00,
87254 -0x21,0x18,0x62,0x00,
87255 -0x0C,0x00,0x69,0x8C,
87256 -0x25,0xB0,0x02,0x3C,
87257 -0xB0,0x03,0x42,0x34,
87258 -0xFF,0x00,0x24,0x31,
87259 -0x00,0x00,0x49,0xAC,
87260 -0x47,0x37,0x00,0x08,
87261 -0xFF,0x00,0x02,0x24,
87262 -0x00,0x00,0x62,0xAC,
87263 -0x93,0x38,0x00,0x08,
87264 -0xFF,0x00,0x02,0x24,
87265 -0x24,0x10,0x22,0x01,
87266 -0x08,0xFE,0x40,0x10,
87267 -0xFF,0x00,0x02,0x24,
87268 -0x42,0x00,0xA5,0x34,
87269 -0x00,0x00,0xA2,0x90,
87270 -0x00,0x00,0x00,0x00,
87271 -0xFF,0x00,0x44,0x30,
87272 -0x0E,0x00,0x86,0x10,
87273 -0x30,0x1F,0x62,0x26,
87274 -0x94,0x36,0x04,0xA2,
87275 -0x00,0x00,0xA2,0x90,
87276 -0xFF,0x00,0x83,0x30,
87277 -0xFF,0x00,0x44,0x30,
87278 -0x08,0x00,0x83,0x10,
87279 -0x30,0x1F,0x62,0x26,
87280 -0x21,0x30,0x00,0x02,
87281 -0x00,0x00,0xA2,0x90,
87282 -0x21,0x18,0x80,0x00,
87283 -0xFD,0xFF,0x62,0x14,
87284 -0xFF,0x00,0x44,0x30,
87285 -0x94,0x36,0xC3,0xA0,
87286 -0x30,0x1F,0x62,0x26,
87287 -0x94,0x36,0x43,0x90,
87288 -0x20,0xB0,0x02,0x3C,
87289 -0x00,0x1A,0x03,0x00,
87290 -0x21,0x18,0x62,0x00,
87291 -0x0C,0x00,0x69,0x8C,
87292 -0x25,0xB0,0x02,0x3C,
87293 -0xB0,0x03,0x42,0x34,
87294 -0xFF,0x00,0x24,0x31,
87295 -0x00,0x00,0x49,0xAC,
87296 -0xC5,0x37,0x00,0x08,
87297 -0xFF,0x00,0x02,0x24,
87298 -0x24,0x10,0x22,0x01,
87299 -0x2C,0xFE,0x40,0x10,
87300 -0xFF,0x00,0x02,0x24,
87301 -0x43,0x00,0xE5,0x34,
87302 -0x00,0x00,0xA2,0x90,
87303 -0x00,0x00,0x00,0x00,
87304 -0xFF,0x00,0x44,0x30,
87305 -0x0E,0x00,0x86,0x10,
87306 -0x30,0x1F,0x62,0x26,
87307 -0x98,0x36,0x04,0xA2,
87308 -0x00,0x00,0xA2,0x90,
87309 -0xFF,0x00,0x83,0x30,
87310 -0xFF,0x00,0x44,0x30,
87311 -0x08,0x00,0x83,0x10,
87312 -0x30,0x1F,0x62,0x26,
87313 -0x21,0x30,0x00,0x02,
87314 -0x00,0x00,0xA2,0x90,
87315 -0x21,0x18,0x80,0x00,
87316 -0xFD,0xFF,0x62,0x14,
87317 -0xFF,0x00,0x44,0x30,
87318 -0x98,0x36,0xC3,0xA0,
87319 -0x30,0x1F,0x62,0x26,
87320 -0x98,0x36,0x43,0x90,
87321 -0x20,0xB0,0x02,0x3C,
87322 -0x00,0x1A,0x03,0x00,
87323 -0x21,0x18,0x62,0x00,
87324 -0x0C,0x00,0x69,0x8C,
87325 -0x25,0xB0,0x02,0x3C,
87326 -0xB0,0x03,0x42,0x34,
87327 -0xFF,0x00,0x24,0x31,
87328 -0x00,0x00,0x49,0xAC,
87329 -0x0A,0x38,0x00,0x08,
87330 -0xFF,0x00,0x02,0x24,
87331 -0x06,0x00,0x03,0x24,
87332 -0x90,0x03,0x42,0x34,
87333 -0x00,0x00,0x43,0xAC,
87334 -0xAB,0x37,0x00,0x08,
87335 -0x30,0x1F,0x62,0x26,
87336 -0x01,0x00,0x03,0x24,
87337 -0x90,0x03,0x42,0x34,
87338 -0x00,0x00,0x43,0xAC,
87339 -0xBF,0x36,0x00,0x08,
87340 -0x30,0x1F,0x62,0x26,
87341 -0x25,0xB0,0x02,0x3C,
87342 -0x07,0x00,0x03,0x24,
87343 -0x90,0x03,0x42,0x34,
87344 -0x00,0x00,0x43,0xAC,
87345 -0x30,0x1F,0x63,0x26,
87346 -0xD4,0x1B,0x62,0x8C,
87347 -0x00,0x00,0x00,0x00,
87348 -0x00,0x80,0x42,0x38,
87349 -0x71,0x37,0x00,0x08,
87350 -0xD4,0x1B,0x62,0xAC,
87351 -0x00,0x00,0x40,0xAC,
87352 -0x34,0x37,0x00,0x08,
87353 -0x30,0x1F,0x62,0x26,
87354 -0x02,0x00,0x03,0x24,
87355 -0x90,0x03,0x42,0x34,
87356 -0x00,0x00,0x43,0xAC,
87357 -0xFA,0x36,0x00,0x08,
87358 -0x30,0x1F,0x62,0x26,
87359 -0x90,0x03,0x63,0x34,
87360 -0x00,0x00,0x62,0xAC,
87361 -0x2D,0x38,0x00,0x08,
87362 -0x30,0x1F,0x62,0x26,
87363 -0x03,0x00,0x03,0x24,
87364 -0x90,0x03,0x42,0x34,
87365 -0x00,0x00,0x43,0xAC,
87366 -0x6E,0x38,0x00,0x08,
87367 -0x30,0x1F,0x62,0x26,
87368 -0x05,0x00,0x03,0x24,
87369 -0x90,0x03,0x42,0x34,
87370 -0x00,0x00,0x43,0xAC,
87371 -0xEC,0x37,0x00,0x08,
87372 -0x30,0x1F,0x62,0x26,
87373 -0xE0,0xFF,0xBD,0x27,
87374 -0x1C,0x00,0xBF,0xAF,
87375 -0x18,0x00,0xB2,0xAF,
87376 -0x14,0x00,0xB1,0xAF,
87377 -0x10,0x00,0xB0,0xAF,
87378 -0x25,0xB0,0x0C,0x3C,
87379 -0x01,0x80,0x02,0x3C,
87380 -0x18,0x03,0x83,0x35,
87381 -0x9C,0xE8,0x42,0x24,
87382 -0x02,0x80,0x12,0x3C,
87383 -0x41,0xB0,0x0B,0x3C,
87384 -0x00,0x00,0x62,0xAC,
87385 -0x30,0x1F,0x4A,0x26,
87386 -0x0A,0x00,0x62,0x35,
87387 -0x00,0x00,0x44,0x94,
87388 -0xDE,0x1B,0x43,0x95,
87389 -0xDC,0x1B,0x49,0x95,
87390 -0x25,0x30,0x64,0x00,
87391 -0xFF,0xFF,0xD0,0x30,
87392 -0x24,0x10,0x09,0x02,
87393 -0x02,0x00,0x42,0x30,
87394 -0xC2,0x00,0x40,0x10,
87395 -0xC0,0x03,0x83,0x35,
87396 -0x02,0x00,0x02,0x24,
87397 -0x00,0x00,0x62,0xAC,
87398 -0x02,0x80,0x08,0x3C,
87399 -0xBC,0x5E,0x04,0x8D,
87400 -0xDC,0x02,0x82,0x35,
87401 -0x00,0x00,0x47,0x90,
87402 -0xFD,0xFF,0x03,0x24,
87403 -0x00,0x80,0x02,0x3C,
87404 -0x24,0x18,0x23,0x01,
87405 -0x25,0x20,0x82,0x00,
87406 -0x02,0x00,0xC6,0x38,
87407 -0x08,0x00,0x65,0x35,
87408 -0x02,0x80,0x02,0x3C,
87409 -0xF5,0x5E,0x47,0xA0,
87410 -0xBC,0x5E,0x04,0xAD,
87411 -0xDE,0x1B,0x46,0xA5,
87412 -0x21,0x48,0x60,0x00,
87413 -0x00,0x00,0xA3,0xA4,
87414 -0xDC,0x1B,0x43,0xA5,
87415 -0x24,0x38,0x09,0x02,
87416 -0x04,0x00,0xE2,0x30,
87417 -0x0A,0x00,0x40,0x10,
87418 -0x08,0x00,0xE2,0x30,
87419 -0xDE,0x1B,0x43,0x95,
87420 -0x0C,0x00,0x64,0x35,
87421 -0xC0,0x03,0x85,0x35,
87422 -0x04,0x00,0x63,0x38,
87423 -0x04,0x00,0x02,0x24,
87424 -0x00,0x00,0x86,0x8C,
87425 -0x00,0x00,0xA2,0xAC,
87426 -0xDE,0x1B,0x43,0xA5,
87427 -0x08,0x00,0xE2,0x30,
87428 -0x08,0x00,0x40,0x10,
87429 -0x10,0x00,0xE2,0x30,
87430 -0xDE,0x1B,0x42,0x95,
87431 -0xC0,0x03,0x84,0x35,
87432 -0x08,0x00,0x03,0x24,
87433 -0x08,0x00,0x42,0x38,
87434 -0x00,0x00,0x83,0xAC,
87435 -0xDE,0x1B,0x42,0xA5,
87436 -0x10,0x00,0xE2,0x30,
87437 -0x08,0x00,0x40,0x10,
87438 -0x20,0x00,0xE2,0x30,
87439 -0xDE,0x1B,0x42,0x95,
87440 -0xC0,0x03,0x84,0x35,
87441 -0x10,0x00,0x03,0x24,
87442 -0x10,0x00,0x42,0x38,
87443 -0x00,0x00,0x83,0xAC,
87444 -0xDE,0x1B,0x42,0xA5,
87445 -0x20,0x00,0xE2,0x30,
87446 -0x08,0x00,0x40,0x10,
87447 -0x80,0x00,0xE2,0x30,
87448 -0xDE,0x1B,0x42,0x95,
87449 -0xC0,0x03,0x84,0x35,
87450 -0x20,0x00,0x03,0x24,
87451 -0x20,0x00,0x42,0x38,
87452 -0x00,0x00,0x83,0xAC,
87453 -0xDE,0x1B,0x42,0xA5,
87454 -0x80,0x00,0xE2,0x30,
87455 -0x74,0x00,0x40,0x10,
87456 -0x30,0x1F,0x47,0x26,
87457 -0xC0,0x03,0x83,0x35,
87458 -0x80,0x00,0x02,0x24,
87459 -0x42,0xB0,0x0B,0x3C,
87460 -0x00,0x00,0x62,0xAC,
87461 -0x03,0x00,0x71,0x35,
87462 -0xDE,0x1B,0x42,0x95,
87463 -0x00,0x00,0x23,0x92,
87464 -0x80,0x00,0x42,0x38,
87465 -0x20,0x00,0x63,0x30,
87466 -0x59,0x00,0x60,0x10,
87467 -0xDE,0x1B,0x42,0xA5,
87468 -0x20,0x00,0x02,0x24,
87469 -0x00,0x00,0x22,0xA2,
87470 -0x02,0x80,0x03,0x3C,
87471 -0x16,0x5F,0x62,0x90,
87472 -0x00,0x00,0x00,0x00,
87473 -0x75,0x00,0x40,0x14,
87474 -0x21,0x40,0x00,0x00,
87475 -0xB0,0x1B,0x42,0x95,
87476 -0x00,0x00,0x00,0x00,
87477 -0x00,0x01,0x42,0x30,
87478 -0x4E,0x00,0x40,0x10,
87479 -0x02,0x80,0x06,0x3C,
87480 -0x02,0x80,0x07,0x3C,
87481 -0xF4,0x5E,0xE2,0x90,
87482 -0x00,0x00,0x00,0x00,
87483 -0x49,0x00,0x40,0x10,
87484 -0x02,0x80,0x09,0x3C,
87485 -0x02,0x80,0x04,0x3C,
87486 -0x00,0x5F,0x82,0x8C,
87487 -0x20,0x5F,0x24,0x8D,
87488 -0x24,0x5F,0x25,0x8D,
87489 -0x21,0x18,0x00,0x00,
87490 -0x21,0x10,0x44,0x00,
87491 -0x2B,0x30,0x44,0x00,
87492 -0x21,0x18,0x65,0x00,
87493 -0x21,0x18,0x66,0x00,
87494 -0x20,0x5F,0x22,0xAD,
87495 -0x24,0x5F,0x23,0xAD,
87496 -0xF4,0x5E,0xE4,0x90,
87497 -0x02,0x00,0x02,0x24,
87498 -0xFF,0x00,0x84,0x30,
87499 -0x07,0x00,0x82,0x10,
87500 -0x02,0x80,0x04,0x3C,
87501 -0xF4,0x5E,0xE2,0x90,
87502 -0x03,0x00,0x03,0x24,
87503 -0xFF,0x00,0x42,0x30,
87504 -0x5A,0x00,0x43,0x14,
87505 -0x02,0x80,0x05,0x3C,
87506 -0x02,0x80,0x04,0x3C,
87507 -0x11,0x5F,0x82,0x90,
87508 -0x00,0x00,0x00,0x00,
87509 -0xFF,0xFF,0x42,0x24,
87510 -0x11,0x5F,0x82,0xA0,
87511 -0x11,0x5F,0x83,0x90,
87512 -0x00,0x00,0x00,0x00,
87513 -0x07,0x00,0x60,0x10,
87514 -0x02,0x80,0x02,0x3C,
87515 -0xFA,0x5E,0x43,0x90,
87516 -0x00,0x00,0x00,0x00,
87517 -0x03,0x00,0x60,0x14,
87518 -0x00,0x00,0x00,0x00,
87519 -0x5B,0x00,0x00,0x11,
87520 -0x80,0x00,0x86,0x35,
87521 -0x11,0x5F,0x82,0x90,
87522 -0x00,0x00,0x00,0x00,
87523 -0x06,0x00,0x40,0x14,
87524 -0x02,0x80,0x05,0x3C,
87525 -0x02,0x80,0x02,0x3C,
87526 -0x10,0x5F,0x43,0x90,
87527 -0x00,0x00,0x00,0x00,
87528 -0x11,0x5F,0x83,0xA0,
87529 -0x02,0x80,0x05,0x3C,
87530 -0x0E,0x5F,0xA2,0x90,
87531 -0x02,0x80,0x03,0x3C,
87532 -0x02,0x00,0x04,0x24,
87533 -0x10,0x00,0x42,0x34,
87534 -0x0E,0x5F,0xA2,0xA0,
87535 -0xF9,0x5E,0x62,0x90,
87536 -0x21,0x28,0x00,0x00,
87537 -0xFF,0x00,0x42,0x30,
87538 -0x80,0x30,0x02,0x00,
87539 -0x21,0x30,0xC2,0x00,
87540 -0x8C,0x23,0x00,0x0C,
87541 -0x00,0x33,0x06,0x00,
87542 -0x42,0xB0,0x02,0x3C,
87543 -0x44,0x00,0x04,0x24,
87544 -0x03,0x00,0x42,0x34,
87545 -0x00,0x00,0x44,0xA0,
87546 -0x02,0x80,0x03,0x3C,
87547 -0xF6,0x5E,0x62,0x90,
87548 -0x00,0x00,0x00,0x00,
87549 -0x0F,0x00,0x42,0x30,
87550 -0x04,0x00,0x42,0x28,
87551 -0x05,0x00,0x40,0x10,
87552 -0x02,0x80,0x06,0x3C,
87553 -0x04,0x00,0x04,0x24,
87554 -0x64,0x31,0x00,0x0C,
87555 -0x01,0x00,0x05,0x24,
87556 -0x02,0x80,0x06,0x3C,
87557 -0xBC,0x5E,0xC4,0x8C,
87558 -0x30,0x1F,0x47,0x26,
87559 -0xDC,0x1B,0xE5,0x94,
87560 -0x08,0x00,0x02,0x3C,
87561 -0x25,0x20,0x82,0x00,
87562 -0x41,0xB0,0x03,0x3C,
87563 -0x25,0xB0,0x02,0x3C,
87564 -0x7F,0xFF,0xA5,0x30,
87565 -0xB0,0x03,0x42,0x34,
87566 -0x08,0x00,0x63,0x34,
87567 -0x00,0x00,0x44,0xAC,
87568 -0x00,0x00,0x65,0xA4,
87569 -0xBC,0x5E,0xC4,0xAC,
87570 -0xDC,0x1B,0xE5,0xA4,
87571 -0x30,0x1F,0x47,0x26,
87572 -0xDC,0x1B,0xE2,0x94,
87573 -0x00,0x00,0x00,0x00,
87574 -0x24,0x10,0x50,0x00,
87575 -0x00,0x30,0x42,0x30,
87576 -0x06,0x00,0x40,0x10,
87577 -0x00,0x00,0x00,0x00,
87578 -0xDE,0x1B,0xE2,0x94,
87579 -0x00,0x00,0x00,0x00,
87580 -0x00,0x10,0x42,0x38,
87581 -0x00,0x20,0x42,0x34,
87582 -0xDE,0x1B,0xE2,0xA4,
87583 -0x1C,0x00,0xBF,0x8F,
87584 -0x18,0x00,0xB2,0x8F,
87585 -0x14,0x00,0xB1,0x8F,
87586 -0x10,0x00,0xB0,0x8F,
87587 -0x08,0x00,0xE0,0x03,
87588 -0x20,0x00,0xBD,0x27,
87589 -0x51,0x3A,0x00,0x08,
87590 -0xDE,0x1B,0x46,0xA5,
87591 -0x01,0x00,0x08,0x24,
87592 -0x16,0x5F,0x60,0xA0,
87593 -0x8D,0x3A,0x00,0x08,
87594 -0x00,0x00,0x00,0x00,
87595 -0x0E,0x5F,0xA2,0x90,
87596 -0x02,0x80,0x03,0x3C,
87597 -0x02,0x00,0x04,0x24,
87598 -0x10,0x00,0x42,0x34,
87599 -0x0E,0x5F,0xA2,0xA0,
87600 -0xF9,0x5E,0x62,0x90,
87601 -0x21,0x28,0x00,0x00,
87602 -0xFF,0x00,0x42,0x30,
87603 -0x80,0x30,0x02,0x00,
87604 -0x21,0x30,0xC2,0x00,
87605 -0x8C,0x23,0x00,0x0C,
87606 -0x00,0x33,0x06,0x00,
87607 -0x44,0x00,0x02,0x24,
87608 -0x00,0x00,0x22,0xA2,
87609 -0xD5,0x3A,0x00,0x08,
87610 -0x02,0x80,0x03,0x3C,
87611 -0x84,0x00,0x84,0x35,
87612 -0x00,0x00,0x82,0x8C,
87613 -0x02,0x80,0x08,0x3C,
87614 -0x00,0x00,0xC4,0x8C,
87615 -0x1C,0x5F,0x06,0x8D,
87616 -0x21,0x10,0x00,0x00,
87617 -0x20,0x5F,0x28,0x8D,
87618 -0x24,0x5F,0x29,0x8D,
87619 -0x00,0x00,0x65,0x91,
87620 -0x25,0x10,0x44,0x00,
87621 -0x21,0x10,0x46,0x00,
87622 -0xFB,0xFF,0x04,0x24,
87623 -0x24,0x28,0xA4,0x00,
87624 -0x23,0x40,0x02,0x01,
87625 -0x00,0x00,0x65,0xA1,
87626 -0x04,0x00,0x00,0x11,
87627 -0x01,0x00,0x06,0x24,
87628 -0x80,0x10,0x08,0x00,
87629 -0x21,0x10,0x48,0x00,
87630 -0x80,0x30,0x02,0x00,
87631 -0x01,0x00,0x04,0x24,
87632 -0x8C,0x23,0x00,0x0C,
87633 -0x21,0x28,0x00,0x00,
87634 -0x42,0xB0,0x02,0x3C,
87635 -0x22,0x00,0x03,0x24,
87636 -0x03,0x00,0x42,0x34,
87637 -0x00,0x00,0x43,0xA0,
87638 -0xDF,0x3A,0x00,0x08,
87639 -0x02,0x80,0x06,0x3C,
87640 -0xF0,0xFF,0xBD,0x27,
87641 -0x08,0x00,0xB2,0xAF,
87642 -0x04,0x00,0xB1,0xAF,
87643 -0x00,0x00,0xB0,0xAF,
87644 -0x00,0x40,0x09,0x40,
87645 -0x00,0x68,0x0A,0x40,
87646 -0x00,0x70,0x02,0x40,
87647 -0x00,0x60,0x0B,0x40,
87648 -0x25,0xB0,0x05,0x3C,
87649 -0x18,0x03,0xA7,0x34,
87650 -0x00,0x00,0xE6,0x8C,
87651 -0x01,0x80,0x02,0x3C,
87652 -0x1C,0x03,0xA3,0x34,
87653 -0xC8,0xEC,0x42,0x24,
87654 -0x00,0x00,0x66,0xAC,
87655 -0x00,0x00,0xE2,0xAC,
87656 -0x80,0x00,0x83,0x8C,
87657 -0x7C,0x02,0xA2,0x34,
87658 -0x80,0x02,0xA6,0x34,
87659 -0x84,0x02,0xA7,0x34,
87660 -0x88,0x02,0xA8,0x34,
87661 -0x00,0x00,0x43,0xAC,
87662 -0x00,0x00,0xC9,0xAC,
87663 -0x00,0x00,0xEA,0xAC,
87664 -0x00,0x00,0x0B,0xAD,
87665 -0x74,0x00,0x83,0x8C,
87666 -0x8C,0x02,0xA2,0x34,
87667 -0x90,0x02,0xA7,0x34,
87668 -0x00,0x00,0x43,0xAC,
87669 -0x08,0x00,0x86,0x8C,
87670 -0x94,0x02,0xA8,0x34,
87671 -0x98,0x02,0xA9,0x34,
87672 -0x00,0x00,0xE6,0xAC,
87673 -0x0C,0x00,0x82,0x8C,
87674 -0x9C,0x02,0xA6,0x34,
87675 -0xA0,0x02,0xA7,0x34,
87676 -0x00,0x00,0x02,0xAD,
87677 -0x10,0x00,0x83,0x8C,
87678 -0xA4,0x02,0xA8,0x34,
87679 -0xA8,0x02,0xAA,0x34,
87680 -0x00,0x00,0x23,0xAD,
87681 -0x14,0x00,0x82,0x8C,
87682 -0xAC,0x02,0xA9,0x34,
87683 -0xB0,0x02,0xAB,0x34,
87684 -0x00,0x00,0xC2,0xAC,
87685 -0x18,0x00,0x83,0x8C,
87686 -0xB4,0x02,0xAC,0x34,
87687 -0xB8,0x02,0xAD,0x34,
87688 -0x00,0x00,0xE3,0xAC,
87689 -0x1C,0x00,0x82,0x8C,
87690 -0xBC,0x02,0xA7,0x34,
87691 -0xC0,0x02,0xAE,0x34,
87692 -0x00,0x00,0x02,0xAD,
87693 -0x20,0x00,0x83,0x8C,
87694 -0xC4,0x02,0xA8,0x34,
87695 -0xC8,0x02,0xAF,0x34,
87696 -0x00,0x00,0x43,0xAD,
87697 -0x24,0x00,0x82,0x8C,
87698 -0xCC,0x02,0xAA,0x34,
87699 -0xD0,0x02,0xB0,0x34,
87700 -0x00,0x00,0x22,0xAD,
87701 -0x28,0x00,0x83,0x8C,
87702 -0xD4,0x02,0xA9,0x34,
87703 -0xD8,0x02,0xB1,0x34,
87704 -0x00,0x00,0x63,0xAD,
87705 -0x2C,0x00,0x86,0x8C,
87706 -0x70,0x02,0xAB,0x34,
87707 -0x74,0x02,0xB2,0x34,
87708 -0x00,0x00,0x86,0xAD,
87709 -0x30,0x00,0x82,0x8C,
87710 -0x78,0x02,0xA6,0x34,
87711 -0x6C,0x03,0xAC,0x34,
87712 -0x00,0x00,0xA2,0xAD,
87713 -0x34,0x00,0x83,0x8C,
87714 -0x02,0x80,0x02,0x3C,
87715 -0x00,0x00,0xE3,0xAC,
87716 -0x38,0x00,0x85,0x8C,
87717 -0x28,0xC7,0x47,0x8C,
87718 -0x00,0x00,0xC5,0xAD,
87719 -0x3C,0x00,0x82,0x8C,
87720 -0x00,0x00,0x00,0x00,
87721 -0x00,0x00,0x02,0xAD,
87722 -0x40,0x00,0x83,0x8C,
87723 -0x00,0x00,0x00,0x00,
87724 -0x00,0x00,0xE3,0xAD,
87725 -0x44,0x00,0x82,0x8C,
87726 -0x00,0x00,0x00,0x00,
87727 -0x00,0x00,0x42,0xAD,
87728 -0x48,0x00,0x83,0x8C,
87729 -0x00,0x00,0x00,0x00,
87730 -0x00,0x00,0x03,0xAE,
87731 -0x4C,0x00,0x82,0x8C,
87732 -0x00,0x00,0x00,0x00,
87733 -0x00,0x00,0x22,0xAD,
87734 -0x50,0x00,0x83,0x8C,
87735 -0x00,0x00,0x00,0x00,
87736 -0x00,0x00,0x23,0xAE,
87737 -0x54,0x00,0x82,0x8C,
87738 -0x00,0x00,0x00,0x00,
87739 -0x00,0x00,0x62,0xAD,
87740 -0x58,0x00,0x83,0x8C,
87741 -0x00,0x00,0x00,0x00,
87742 -0x00,0x00,0x43,0xAE,
87743 -0x5C,0x00,0x82,0x8C,
87744 -0x00,0x00,0x00,0x00,
87745 -0x00,0x00,0xC2,0xAC,
87746 -0x21,0x10,0xE0,0x00,
87747 -0x00,0x00,0x82,0xAD,
87748 -0x01,0x00,0xE7,0x24,
87749 -0x21,0x10,0xE0,0x00,
87750 -0x01,0x00,0xE7,0x24,
87751 -0x00,0x00,0x82,0xAD,
87752 -0x9D,0x3B,0x00,0x08,
87753 -0x21,0x10,0xE0,0x00,
87754 -0x01,0x80,0x1B,0x3C,
87755 -0x90,0xEE,0x7B,0x27,
87756 -0x25,0xB0,0x1A,0x3C,
87757 -0x18,0x03,0x5A,0x27,
87758 -0x00,0x00,0x5B,0xAF,
87759 -0x21,0xD8,0xA0,0x03,
87760 -0x82,0xDA,0x1B,0x00,
87761 -0x80,0xDA,0x1B,0x00,
87762 -0x08,0x00,0x7B,0x27,
87763 -0x04,0x00,0x61,0xAF,
87764 -0x08,0x00,0x62,0xAF,
87765 -0x0C,0x00,0x63,0xAF,
87766 -0x10,0x00,0x64,0xAF,
87767 -0x14,0x00,0x65,0xAF,
87768 -0x18,0x00,0x66,0xAF,
87769 -0x1C,0x00,0x67,0xAF,
87770 -0x20,0x00,0x68,0xAF,
87771 -0x24,0x00,0x69,0xAF,
87772 -0x28,0x00,0x6A,0xAF,
87773 -0x2C,0x00,0x6B,0xAF,
87774 -0x30,0x00,0x6C,0xAF,
87775 -0x34,0x00,0x6D,0xAF,
87776 -0x38,0x00,0x6E,0xAF,
87777 -0x3C,0x00,0x6F,0xAF,
87778 -0x12,0x40,0x00,0x00,
87779 -0x10,0x48,0x00,0x00,
87780 -0x00,0x70,0x0A,0x40,
87781 -0x40,0x00,0x70,0xAF,
87782 -0x44,0x00,0x71,0xAF,
87783 -0x48,0x00,0x72,0xAF,
87784 -0x4C,0x00,0x73,0xAF,
87785 -0x50,0x00,0x74,0xAF,
87786 -0x54,0x00,0x75,0xAF,
87787 -0x58,0x00,0x76,0xAF,
87788 -0x5C,0x00,0x77,0xAF,
87789 -0x60,0x00,0x78,0xAF,
87790 -0x64,0x00,0x79,0xAF,
87791 -0x68,0x00,0x7C,0xAF,
87792 -0x6C,0x00,0x7D,0xAF,
87793 -0x70,0x00,0x7E,0xAF,
87794 -0x74,0x00,0x7F,0xAF,
87795 -0x78,0x00,0x68,0xAF,
87796 -0x7C,0x00,0x69,0xAF,
87797 -0x80,0x00,0x6A,0xAF,
87798 -0x00,0x68,0x1A,0x40,
87799 -0x25,0xB0,0x1B,0x3C,
87800 -0x1C,0x03,0x7B,0x37,
87801 -0x00,0x00,0x00,0x00,
87802 -0x00,0x00,0x7A,0xAF,
87803 -0x7F,0x00,0x5B,0x33,
87804 -0x30,0x00,0x60,0x13,
87805 -0x00,0x00,0x00,0x00,
87806 -0x25,0xB0,0x1B,0x3C,
87807 -0x30,0x03,0x7B,0x37,
87808 -0x00,0x00,0x00,0x00,
87809 -0x00,0x00,0x7A,0xAF,
87810 -0x00,0x00,0x00,0x00,
87811 -0x21,0xD8,0xA0,0x03,
87812 -0x82,0xDA,0x1B,0x00,
87813 -0x80,0xDA,0x1B,0x00,
87814 -0x08,0x00,0x7B,0x27,
87815 -0x04,0x00,0x61,0xAF,
87816 -0x08,0x00,0x62,0xAF,
87817 -0x0C,0x00,0x63,0xAF,
87818 -0x10,0x00,0x64,0xAF,
87819 -0x14,0x00,0x65,0xAF,
87820 -0x18,0x00,0x66,0xAF,
87821 -0x1C,0x00,0x67,0xAF,
87822 -0x20,0x00,0x68,0xAF,
87823 -0x24,0x00,0x69,0xAF,
87824 -0x28,0x00,0x6A,0xAF,
87825 -0x2C,0x00,0x6B,0xAF,
87826 -0x30,0x00,0x6C,0xAF,
87827 -0x34,0x00,0x6D,0xAF,
87828 -0x38,0x00,0x6E,0xAF,
87829 -0x3C,0x00,0x6F,0xAF,
87830 -0x12,0x40,0x00,0x00,
87831 -0x10,0x48,0x00,0x00,
87832 -0x00,0x70,0x0A,0x40,
87833 -0x40,0x00,0x70,0xAF,
87834 -0x44,0x00,0x71,0xAF,
87835 -0x48,0x00,0x72,0xAF,
87836 -0x4C,0x00,0x73,0xAF,
87837 -0x50,0x00,0x74,0xAF,
87838 -0x54,0x00,0x75,0xAF,
87839 -0x58,0x00,0x76,0xAF,
87840 -0x5C,0x00,0x77,0xAF,
87841 -0x60,0x00,0x78,0xAF,
87842 -0x64,0x00,0x79,0xAF,
87843 -0x68,0x00,0x7C,0xAF,
87844 -0x6C,0x00,0x7D,0xAF,
87845 -0x70,0x00,0x7E,0xAF,
87846 -0x74,0x00,0x7F,0xAF,
87847 -0x78,0x00,0x68,0xAF,
87848 -0x7C,0x00,0x69,0xAF,
87849 -0x80,0x00,0x6A,0xAF,
87850 -0x32,0x3B,0x00,0x08,
87851 -0x21,0x20,0x60,0x03,
87852 -0x00,0x00,0x00,0x00,
87853 -0x25,0xB0,0x08,0x3C,
87854 -0x20,0x03,0x08,0x35,
87855 -0x00,0x00,0x00,0x00,
87856 -0x00,0x00,0x1A,0xAD,
87857 -0x00,0x04,0x5B,0x33,
87858 -0x0A,0x00,0x60,0x13,
87859 -0x00,0x00,0x00,0x00,
87860 -0x01,0x80,0x08,0x3C,
87861 -0x3C,0xD4,0x08,0x25,
87862 -0x00,0x00,0x00,0x00,
87863 -0x25,0xB0,0x1B,0x3C,
87864 -0x24,0x03,0x7B,0x37,
87865 -0x00,0x00,0x00,0x00,
87866 -0x00,0x00,0x68,0xAF,
87867 -0x09,0xF8,0x00,0x01,
87868 -0x00,0x00,0x00,0x00,
87869 -0x00,0x08,0x5B,0x33,
87870 -0x25,0xB0,0x08,0x3C,
87871 -0x28,0x03,0x08,0x35,
87872 -0x00,0x00,0x00,0x00,
87873 -0x00,0x00,0x1B,0xAD,
87874 -0x06,0x00,0x60,0x13,
87875 -0x00,0x00,0x00,0x00,
87876 -0x01,0x80,0x08,0x3C,
87877 -0x9C,0xE8,0x08,0x25,
87878 -0x00,0x00,0x00,0x00,
87879 -0x09,0xF8,0x00,0x01,
87880 -0x00,0x00,0x00,0x00,
87881 -0x02,0x80,0x1A,0x3C,
87882 -0xBC,0x5E,0x5A,0x27,
87883 -0x04,0x00,0x5B,0x97,
87884 -0x25,0xB0,0x08,0x3C,
87885 -0x30,0x03,0x08,0x35,
87886 -0x00,0x00,0x00,0x00,
87887 -0x00,0x00,0x1B,0xAD,
87888 -0x18,0x00,0x60,0x13,
87889 -0x00,0x00,0x00,0x00,
87890 -0x08,0xE4,0x9B,0x27,
87891 -0x00,0x00,0x00,0x00,
87892 -0x04,0x00,0x61,0x8F,
87893 -0xFC,0x03,0x70,0x7B,
87894 -0x7C,0x00,0x62,0x7B,
87895 -0xBC,0x00,0x64,0x7B,
87896 -0xFC,0x00,0x66,0x7B,
87897 -0x3C,0x01,0x68,0x7B,
87898 -0x13,0x00,0x00,0x02,
87899 -0x11,0x00,0x20,0x02,
87900 -0x7C,0x01,0x6A,0x7B,
87901 -0xBC,0x01,0x6C,0x7B,
87902 -0xFC,0x01,0x6E,0x7B,
87903 -0x3C,0x02,0x70,0x7B,
87904 -0x7C,0x02,0x72,0x7B,
87905 -0xBC,0x02,0x74,0x7B,
87906 -0xFC,0x02,0x76,0x7B,
87907 -0x3C,0x03,0x78,0x7B,
87908 -0x7C,0x03,0x7C,0x7B,
87909 -0xBC,0x03,0x7E,0x7B,
87910 -0x80,0x00,0x7B,0x8F,
87911 -0x8F,0x3C,0x00,0x08,
87912 -0x00,0x00,0x00,0x00,
87913 -0x21,0xD8,0xA0,0x03,
87914 -0x82,0xDA,0x1B,0x00,
87915 -0x80,0xDA,0x1B,0x00,
87916 -0x08,0x00,0x7B,0x27,
87917 -0x08,0x00,0x5B,0xAF,
87918 -0xFC,0xE7,0x9D,0x27,
87919 -0x00,0x00,0x4A,0x8F,
87920 -0x00,0x00,0x00,0x00,
87921 -0x21,0x00,0x40,0x11,
87922 -0x00,0x00,0x00,0x00,
87923 -0x02,0x80,0x08,0x3C,
87924 -0x1C,0x5E,0x08,0x25,
87925 -0x21,0x48,0x00,0x00,
87926 -0x21,0x58,0x00,0x00,
87927 -0x01,0x00,0x6B,0x25,
87928 -0x1A,0x00,0x40,0x11,
87929 -0x24,0x70,0x4B,0x01,
87930 -0x14,0x00,0xC0,0x11,
87931 -0x01,0x00,0x04,0x24,
87932 -0x00,0x00,0x00,0x00,
87933 -0x04,0x00,0x44,0xA3,
87934 -0x26,0x50,0x4B,0x01,
87935 -0x00,0x00,0x4A,0xAF,
87936 -0x80,0x80,0x09,0x00,
87937 -0x21,0x80,0x08,0x02,
87938 -0x00,0x00,0x10,0x8E,
87939 -0x00,0x00,0x00,0x00,
87940 -0x09,0xF8,0x00,0x02,
87941 -0x00,0x00,0x00,0x00,
87942 -0x01,0x80,0x1B,0x3C,
87943 -0x68,0xF1,0x7B,0x27,
87944 -0x25,0xB0,0x1A,0x3C,
87945 -0x18,0x03,0x5A,0x27,
87946 -0x00,0x00,0x5B,0xAF,
87947 -0x02,0x80,0x1A,0x3C,
87948 -0xBC,0x5E,0x5A,0x27,
87949 -0xE1,0xFF,0x00,0x10,
87950 -0x00,0x00,0x00,0x00,
87951 -0x01,0x00,0x29,0x25,
87952 -0x40,0x58,0x0B,0x00,
87953 -0x52,0x3C,0x00,0x08,
87954 -0x00,0x00,0x00,0x00,
87955 -0x02,0x80,0x1B,0x3C,
87956 -0xBC,0x5E,0x7B,0x27,
87957 -0x21,0x60,0x00,0x00,
87958 -0x04,0x00,0x6C,0xA7,
87959 -0x08,0x00,0x7A,0x8F,
87960 -0x00,0x00,0x00,0x00,
87961 -0xF8,0xFF,0x5A,0x27,
87962 -0x00,0x00,0x5A,0x8F,
87963 -0x00,0x00,0x00,0x00,
87964 -0x08,0x00,0x5A,0x27,
87965 -0x84,0x00,0x44,0x8F,
87966 -0x00,0x00,0x00,0x00,
87967 -0xF9,0xFF,0x80,0x10,
87968 -0x00,0x00,0x00,0x00,
87969 -0x04,0x00,0x41,0x8F,
87970 -0xFC,0x03,0x50,0x7B,
87971 -0x7C,0x00,0x42,0x7B,
87972 -0xBC,0x00,0x44,0x7B,
87973 -0xFC,0x00,0x46,0x7B,
87974 -0x3C,0x01,0x48,0x7B,
87975 -0x13,0x00,0x00,0x02,
87976 -0x11,0x00,0x20,0x02,
87977 -0x7C,0x01,0x4A,0x7B,
87978 -0xBC,0x01,0x4C,0x7B,
87979 -0xFC,0x01,0x4E,0x7B,
87980 -0x3C,0x02,0x50,0x7B,
87981 -0x7C,0x02,0x52,0x7B,
87982 -0xBC,0x02,0x54,0x7B,
87983 -0xFC,0x02,0x56,0x7B,
87984 -0x3C,0x03,0x58,0x7B,
87985 -0x7C,0x03,0x5C,0x7B,
87986 -0xBC,0x03,0x5E,0x7B,
87987 -0x80,0x00,0x5B,0x8F,
87988 -0x00,0x00,0x00,0x00,
87989 -0x08,0x00,0x60,0x03,
87990 -0x10,0x00,0x00,0x42,
87991 -0x00,0x60,0x05,0x40,
87992 -0x42,0x28,0x05,0x00,
87993 -0x40,0x28,0x05,0x00,
87994 -0x00,0x60,0x85,0x40,
87995 -0x04,0x00,0x81,0xAC,
87996 -0x08,0x00,0x82,0xAC,
87997 -0x0C,0x00,0x83,0xAC,
87998 -0x20,0x00,0x88,0xAC,
87999 -0x24,0x00,0x89,0xAC,
88000 -0x28,0x00,0x8A,0xAC,
88001 -0x2C,0x00,0x8B,0xAC,
88002 -0x30,0x00,0x8C,0xAC,
88003 -0x34,0x00,0x8D,0xAC,
88004 -0x38,0x00,0x8E,0xAC,
88005 -0x3C,0x00,0x8F,0xAC,
88006 -0x12,0x40,0x00,0x00,
88007 -0x10,0x48,0x00,0x00,
88008 -0x40,0x00,0x90,0xAC,
88009 -0x44,0x00,0x91,0xAC,
88010 -0x48,0x00,0x92,0xAC,
88011 -0x4C,0x00,0x93,0xAC,
88012 -0x50,0x00,0x94,0xAC,
88013 -0x54,0x00,0x95,0xAC,
88014 -0x58,0x00,0x96,0xAC,
88015 -0x5C,0x00,0x97,0xAC,
88016 -0x60,0x00,0x98,0xAC,
88017 -0x64,0x00,0x99,0xAC,
88018 -0x68,0x00,0x9C,0xAC,
88019 -0x6C,0x00,0x9D,0xAC,
88020 -0x70,0x00,0x9E,0xAC,
88021 -0x74,0x00,0x9F,0xAC,
88022 -0x78,0x00,0x88,0xAC,
88023 -0x7C,0x00,0x89,0xAC,
88024 -0x80,0x00,0x9F,0xAC,
88025 -0xF8,0xFF,0x84,0x24,
88026 -0x00,0x00,0x84,0x8C,
88027 -0x00,0x00,0x00,0x00,
88028 -0x08,0x00,0x84,0x24,
88029 -0x84,0x00,0x86,0x8C,
88030 -0x00,0x00,0x00,0x00,
88031 -0xF9,0xFF,0xC0,0x10,
88032 -0x00,0x00,0x00,0x00,
88033 -0x21,0xD8,0x80,0x00,
88034 -0x01,0x00,0xBA,0x34,
88035 -0x04,0x00,0x61,0x8F,
88036 -0xFC,0x03,0x70,0x7B,
88037 -0x7C,0x00,0x62,0x7B,
88038 -0xBC,0x00,0x64,0x7B,
88039 -0xFC,0x00,0x66,0x7B,
88040 -0x3C,0x01,0x68,0x7B,
88041 -0x13,0x00,0x00,0x02,
88042 -0x11,0x00,0x20,0x02,
88043 -0x7C,0x01,0x6A,0x7B,
88044 -0xBC,0x01,0x6C,0x7B,
88045 -0xFC,0x01,0x6E,0x7B,
88046 -0x3C,0x02,0x70,0x7B,
88047 -0x7C,0x02,0x72,0x7B,
88048 -0xBC,0x02,0x74,0x7B,
88049 -0xFC,0x02,0x76,0x7B,
88050 -0x3C,0x03,0x78,0x7B,
88051 -0x7C,0x03,0x7C,0x7B,
88052 -0xBC,0x03,0x7E,0x7B,
88053 -0x80,0x00,0x7B,0x8F,
88054 -0x00,0x00,0x00,0x00,
88055 -0x08,0x00,0x60,0x03,
88056 -0x00,0x60,0x9A,0x40,
88057 -0x00,0x60,0x05,0x40,
88058 -0x42,0x28,0x05,0x00,
88059 -0x40,0x28,0x05,0x00,
88060 -0x00,0x60,0x85,0x40,
88061 -0x04,0x00,0x81,0xAC,
88062 -0x08,0x00,0x82,0xAC,
88063 -0x0C,0x00,0x83,0xAC,
88064 -0x20,0x00,0x88,0xAC,
88065 -0x24,0x00,0x89,0xAC,
88066 -0x28,0x00,0x8A,0xAC,
88067 -0x2C,0x00,0x8B,0xAC,
88068 -0x30,0x00,0x8C,0xAC,
88069 -0x34,0x00,0x8D,0xAC,
88070 -0x38,0x00,0x8E,0xAC,
88071 -0x3C,0x00,0x8F,0xAC,
88072 -0x12,0x40,0x00,0x00,
88073 -0x10,0x48,0x00,0x00,
88074 -0x40,0x00,0x90,0xAC,
88075 -0x44,0x00,0x91,0xAC,
88076 -0x48,0x00,0x92,0xAC,
88077 -0x4C,0x00,0x93,0xAC,
88078 -0x50,0x00,0x94,0xAC,
88079 -0x54,0x00,0x94,0xAC,
88080 -0x58,0x00,0x96,0xAC,
88081 -0x5C,0x00,0x96,0xAC,
88082 -0x60,0x00,0x98,0xAC,
88083 -0x64,0x00,0x99,0xAC,
88084 -0x68,0x00,0x9C,0xAC,
88085 -0x6C,0x00,0x9D,0xAC,
88086 -0x70,0x00,0x9E,0xAC,
88087 -0x78,0x00,0x88,0xAC,
88088 -0x7C,0x00,0x89,0xAC,
88089 -0x80,0x00,0x9F,0xAC,
88090 -0x84,0x00,0x80,0xAC,
88091 -0xF8,0xFF,0x84,0x24,
88092 -0x00,0x00,0x84,0x8C,
88093 -0x00,0x00,0x00,0x00,
88094 -0x08,0x00,0x84,0x24,
88095 -0x84,0x00,0x86,0x8C,
88096 -0xFA,0xFF,0xC0,0x10,
88097 -0x00,0x00,0x00,0x00,
88098 -0x21,0xD8,0x80,0x00,
88099 -0x01,0x00,0xBA,0x24,
88100 -0x04,0x00,0x61,0x8F,
88101 -0xFC,0x03,0x70,0x7B,
88102 -0x7C,0x00,0x62,0x7B,
88103 -0xBC,0x00,0x64,0x7B,
88104 -0xFC,0x00,0x66,0x7B,
88105 -0x3C,0x01,0x68,0x7B,
88106 -0x13,0x00,0x00,0x02,
88107 -0x11,0x00,0x20,0x02,
88108 -0x7C,0x01,0x6A,0x7B,
88109 -0xBC,0x01,0x6C,0x7B,
88110 -0xFC,0x01,0x6E,0x7B,
88111 -0x3C,0x02,0x70,0x7B,
88112 -0x7C,0x02,0x72,0x7B,
88113 -0xBC,0x02,0x74,0x7B,
88114 -0xFC,0x02,0x76,0x7B,
88115 -0x3C,0x03,0x78,0x7B,
88116 -0x7C,0x03,0x7C,0x7B,
88117 -0xBC,0x03,0x7E,0x7B,
88118 -0x80,0x00,0x7B,0x8F,
88119 -0x08,0x00,0x60,0x03,
88120 -0x00,0x60,0x9A,0x40,
88121 -0x00,0x00,0x00,0x00,
88122 -0x00,0x00,0x00,0x00,
88123 -0x00,0x00,0x00,0x00,
88124 -0x00,0x00,0x00,0x00,
88125 -0x00,0x00,0x00,0x00,
88126 -0x00,0x00,0x00,0x00,
88127 -0x00,0x00,0x00,0x00,
88128 -0x00,0x00,0x00,0x00,
88129 -0x00,0x00,0x00,0x00,
88130 -0x00,0x00,0x00,0x00,
88131 -0x00,0x00,0x00,0x00,
88132 -0x00,0x00,0x00,0x00,
88133 -0x00,0x00,0x00,0x00,
88134 -0x00,0x00,0x00,0x00,
88135 -0x00,0x00,0x00,0x00,
88136 -0x00,0x00,0x00,0x00,
88137 -0x00,0x00,0x00,0x00,
88138 -0x00,0x00,0x00,0x00,
88139 -0x00,0x00,0x00,0x00,
88140 -0x00,0x00,0x00,0x00,
88141 -0x00,0x00,0x00,0x00,
88142 -0x00,0x00,0x00,0x00,
88143 -0x00,0x00,0x00,0x00,
88144 -0x00,0x00,0x00,0x00,
88145 -0x00,0x00,0x00,0x00,
88146 -0x00,0x00,0x00,0x00,
88147 -0x00,0x00,0x00,0x00,
88148 -0x00,0x00,0x00,0x00,
88149 -0x00,0x00,0x00,0x00,
88150 -0x00,0x00,0x00,0x00,
88151 -0x00,0x00,0x00,0x00,
88152 -0x00,0x00,0x00,0x00,
88153 -0x00,0x00,0x00,0x00,
88154 -0x00,0x00,0x00,0x00,
88155 -0x00,0x00,0x00,0x00,
88156 -0x00,0x00,0x00,0x00,
88157 -0x00,0x00,0x00,0x00,
88158 -0x00,0x00,0x00,0x00,
88159 -0x00,0x00,0x00,0x00,
88160 -0x00,0x00,0x00,0x00,
88161 -0x00,0x00,0x00,0x00,
88162 -0x00,0x00,0x00,0x00,
88163 -0x00,0x00,0x00,0x00,
88164 -0x00,0x00,0x00,0x00,
88165 -0x00,0x00,0x00,0x00,
88166 -0x00,0x00,0x00,0x00,
88167 -0x00,0x00,0x00,0x00,
88168 -0x00,0x00,0x00,0x00,
88169 -0x00,0x00,0x00,0x00,
88170 -0x00,0x00,0x00,0x00,
88171 -0x00,0x00,0x00,0x00,
88172 -0x00,0x00,0x00,0x00,
88173 -0x00,0x00,0x00,0x00,
88174 -0x00,0x00,0x00,0x00,
88175 -0x00,0x00,0x00,0x00,
88176 -0x00,0x00,0x00,0x00,
88177 -0x00,0x00,0x00,0x00,
88178 -0x00,0x00,0x00,0x00,
88179 -0x00,0x00,0x00,0x00,
88180 -0x00,0x00,0x00,0x00,
88181 -0x00,0x00,0x00,0x00,
88182 -0x00,0x00,0x00,0x00,
88183 -0x00,0x00,0x00,0x00,
88184 -0x00,0x00,0x00,0x00,
88185 -0x00,0x00,0x00,0x00,
88186 -0x00,0x00,0x00,0x00,
88187 -0x00,0x00,0x00,0x00,
88188 -0x00,0x00,0x00,0x00,
88189 -0x00,0x00,0x00,0x00,
88190 -0x00,0x00,0x00,0x00,
88191 -0x00,0x00,0x00,0x00,
88192 -0x00,0x00,0x00,0x00,
88193 -0x00,0x00,0x00,0x00,
88194 -0x00,0x00,0x00,0x00,
88195 -0x00,0x00,0x00,0x00,
88196 -0x00,0x00,0x00,0x00,
88197 -0x00,0x00,0x00,0x00,
88198 -0x00,0x00,0x00,0x00,
88199 -0x00,0x00,0x00,0x00,
88200 -0x00,0x00,0x00,0x00,
88201 -0x00,0x00,0x00,0x00,
88202 -0x00,0x00,0x00,0x00,
88203 -0x00,0x00,0x00,0x00,
88204 -0x00,0x00,0x00,0x00,
88205 -0x00,0x00,0x00,0x00,
88206 -0x00,0x00,0x00,0x00,
88207 -0x00,0x00,0x00,0x00,
88208 -0x00,0x00,0x00,0x00,
88209 -0x00,0x00,0x00,0x00,
88210 -0x00,0x00,0x00,0x00,
88211 -0x00,0x00,0x00,0x00,
88212 -0x00,0x00,0x00,0x00,
88213 -0x00,0x00,0x00,0x00,
88214 -0x00,0x00,0x00,0x00,
88215 -0x00,0x00,0x00,0x00,
88216 -0x00,0x00,0x00,0x00,
88217 -0x00,0x00,0x00,0x00,
88218 -0x00,0x00,0x00,0x00,
88219 -0x00,0x00,0x00,0x00,
88220 -0x00,0x00,0x00,0x00,
88221 -0x00,0x00,0x00,0x00,
88222 -0x00,0x00,0x00,0x00,
88223 -0x00,0x00,0x00,0x00,
88224 -0x00,0x00,0x00,0x00,
88225 -0x00,0x00,0x00,0x00,
88226 -0x00,0x00,0x00,0x00,
88227 -0x00,0x00,0x00,0x00,
88228 -0x00,0x00,0x00,0x00,
88229 -0x00,0x00,0x00,0x00,
88230 -0x00,0x00,0x00,0x00,
88231 -0x00,0x00,0x00,0x00,
88232 -0x00,0x00,0x00,0x00,
88233 -0x00,0x00,0x00,0x00,
88234 -0x00,0x00,0x00,0x00,
88235 -0x00,0x00,0x00,0x00,
88236 -0x00,0x00,0x00,0x00,
88237 -0x00,0x00,0x00,0x00,
88238 -0x00,0x00,0x00,0x00,
88239 -0x00,0x00,0x00,0x00,
88240 -0x00,0x00,0x00,0x00,
88241 -0x00,0x00,0x00,0x00,
88242 -0x00,0x00,0x00,0x00,
88243 -0x00,0x00,0x00,0x00,
88244 -0x00,0x00,0x00,0x00,
88245 -0x00,0x00,0x00,0x00,
88246 -0x00,0x00,0x00,0x00,
88247 -0x00,0x00,0x00,0x00,
88248 -0x00,0x00,0x00,0x00,
88249 -0x00,0x00,0x00,0x00,
88250 -0x00,0x00,0x00,0x00,
88251 -0x00,0x00,0x00,0x00,
88252 -0x00,0x00,0x00,0x00,
88253 -0x00,0x00,0x00,0x00,
88254 -0x00,0x00,0x00,0x00,
88255 -0x00,0x00,0x00,0x00,
88256 -0x00,0x00,0x00,0x00,
88257 -0x00,0x00,0x00,0x00,
88258 -0x00,0x00,0x00,0x00,
88259 -0x00,0x00,0x00,0x00,
88260 -0x00,0x00,0x00,0x00,
88261 -0x00,0x00,0x00,0x00,
88262 -0x00,0x00,0x00,0x00,
88263 -0x00,0x00,0x00,0x00,
88264 -0x00,0x00,0x00,0x00,
88265 -0x00,0x00,0x00,0x00,
88266 -0x00,0x00,0x00,0x00,
88267 -0x00,0x00,0x00,0x00,
88268 -0x00,0x00,0x00,0x00,
88269 -0x00,0x00,0x00,0x00,
88270 -0x00,0x00,0x00,0x00,
88271 -0x00,0x00,0x00,0x00,
88272 -0x00,0x00,0x00,0x00,
88273 -0x00,0x00,0x00,0x00,
88274 -0x00,0x00,0x00,0x00,
88275 -0x00,0x00,0x00,0x00,
88276 -0x00,0x00,0x00,0x00,
88277 -0x00,0x00,0x00,0x00,
88278 -0x00,0x00,0x00,0x00,
88279 -0x00,0x00,0x00,0x00,
88280 -0x00,0x00,0x00,0x00,
88281 -0x00,0x00,0x00,0x00,
88282 -0x00,0x00,0x00,0x00,
88283 -0x00,0x00,0x00,0x00,
88284 -0x00,0x00,0x00,0x00,
88285 -0x00,0x00,0x00,0x00,
88286 -0x00,0x00,0x00,0x00,
88287 -0x00,0x00,0x00,0x00,
88288 -0x00,0x00,0x00,0x00,
88289 -0x00,0x00,0x00,0x00,
88290 -0x00,0x00,0x00,0x00,
88291 -0x00,0x00,0x00,0x00,
88292 -0x00,0x00,0x00,0x00,
88293 -0x00,0x00,0x00,0x00,
88294 -0x00,0x00,0x00,0x00,
88295 -0x00,0x00,0x00,0x00,
88296 -0x00,0x00,0x00,0x00,
88297 -0x00,0x00,0x00,0x00,
88298 -0x00,0x00,0x00,0x00,
88299 -0x00,0x00,0x00,0x00,
88300 -0x00,0x00,0x00,0x00,
88301 -0x00,0x00,0x00,0x00,
88302 -0x00,0x00,0x00,0x00,
88303 -0x00,0x00,0x00,0x00,
88304 -0x00,0x00,0x00,0x00,
88305 -0x00,0x00,0x00,0x00,
88306 -0x00,0x00,0x00,0x00,
88307 -0x00,0x00,0x00,0x00,
88308 -0x00,0x00,0x00,0x00,
88309 -0x00,0x00,0x00,0x00,
88310 -0x00,0x00,0x00,0x00,
88311 -0x00,0x00,0x00,0x00,
88312 -0x00,0x00,0x00,0x00,
88313 -0x00,0x00,0x00,0x00,
88314 -0x00,0x00,0x00,0x00,
88315 -0x00,0x00,0x00,0x00,
88316 -0x00,0x00,0x00,0x00,
88317 -0x00,0x00,0x00,0x00,
88318 -0x00,0x00,0x00,0x00,
88319 -0x00,0x00,0x00,0x00,
88320 -0x00,0x00,0x00,0x00,
88321 -0x00,0x00,0x00,0x00,
88322 -0x00,0x00,0x00,0x00,
88323 -0x00,0x00,0x00,0x00,
88324 -0x00,0x00,0x00,0x00,
88325 -0x00,0x00,0x00,0x00,
88326 -0x00,0x00,0x00,0x00,
88327 -0x00,0x00,0x00,0x00,
88328 -0x00,0x00,0x00,0x00,
88329 -0x00,0x00,0x00,0x00,
88330 -0x00,0x00,0x00,0x00,
88331 -0x00,0x00,0x00,0x00,
88332 -0x00,0x00,0x00,0x00,
88333 -0x00,0x00,0x00,0x00,
88334 -0x00,0x00,0x00,0x00,
88335 -0x00,0x00,0x00,0x00,
88336 -0x00,0x00,0x00,0x00,
88337 -0x00,0x00,0x00,0x00,
88338 -0x00,0x00,0x00,0x00,
88339 -0x00,0x00,0x00,0x00,
88340 -0x00,0x00,0x00,0x00,
88341 -0x00,0x00,0x00,0x00,
88342 -0x00,0x00,0x00,0x00,
88343 -0x00,0x00,0x00,0x00,
88344 -0x00,0x00,0x00,0x00,
88345 -0x00,0x00,0x00,0x00,
88346 -0x00,0x00,0x00,0x00,
88347 -0x00,0x00,0x00,0x00,
88348 -0x00,0x00,0x00,0x00,
88349 -0x00,0x00,0x00,0x00,
88350 -0x00,0x00,0x00,0x00,
88351 -0x00,0x00,0x00,0x00,
88352 -0x00,0x00,0x00,0x00,
88353 -0x00,0x00,0x00,0x00,
88354 -0x00,0x00,0x00,0x00,
88355 -0x00,0x00,0x00,0x00,
88356 -0x00,0x00,0x00,0x00,
88357 -0x00,0x00,0x00,0x00,
88358 -0x83,0x4E,0x00,0x00,
88359 -0x00,0x00,0x00,0x00,
88360 -0x01,0x80,0x1B,0x3C,
88361 -0x00,0x00,0x7B,0x27,
88362 -0x25,0xB0,0x1A,0x3C,
88363 -0x18,0x03,0x5A,0x27,
88364 -0x00,0x00,0x5B,0xAF,
88365 -0x00,0x00,0x05,0x24,
88366 -0x03,0x00,0xA4,0x24,
88367 -0x00,0xA0,0x80,0x40,
88368 -0x00,0xA0,0x84,0x40,
88369 -0x01,0x80,0x04,0x3C,
88370 -0x40,0x00,0x84,0x24,
88371 -0x08,0x00,0x80,0x00,
88372 -0x00,0x00,0x00,0x00,
88373 -0x00,0x00,0x00,0x00,
88374 -0x00,0x00,0x00,0x00,
88375 -0x00,0x00,0x00,0x00,
88376 -0x01,0x80,0x1B,0x3C,
88377 -0x40,0x00,0x7B,0x27,
88378 -0x25,0xB0,0x1A,0x3C,
88379 -0x18,0x03,0x5A,0x27,
88380 -0x00,0x00,0x5B,0xAF,
88381 -0x02,0x80,0x1A,0x3C,
88382 -0x00,0x00,0x5A,0x27,
88383 -0xFC,0x03,0x5D,0x27,
88384 -0x02,0x80,0x1C,0x3C,
88385 -0x00,0x1C,0x9C,0x27,
88386 -0x00,0xF0,0x08,0x3C,
88387 -0x00,0x0C,0x08,0x35,
88388 -0x00,0x60,0x88,0x40,
88389 -0x02,0x80,0x04,0x3C,
88390 -0x00,0x00,0x84,0x24,
88391 -0xFF,0x7F,0x05,0x3C,
88392 -0xFF,0xFF,0xA5,0x34,
88393 -0x24,0x20,0x85,0x00,
88394 -0x00,0x20,0x84,0x4C,
88395 -0xFF,0xFF,0x05,0x34,
88396 -0x21,0x28,0xA4,0x00,
88397 -0x00,0x28,0x85,0x4C,
88398 -0x02,0x80,0x08,0x3C,
88399 -0x00,0x00,0x08,0x25,
88400 -0x00,0x00,0x00,0xAD,
88401 -0x03,0x80,0x09,0x3C,
88402 -0xFC,0xCC,0x29,0x25,
88403 -0x04,0x00,0x08,0x25,
88404 -0xFE,0xFF,0x09,0x15,
88405 -0x00,0x00,0x00,0xAD,
88406 -0x00,0x80,0x04,0x3C,
88407 -0x00,0x00,0x84,0x24,
88408 -0xFF,0x7F,0x05,0x3C,
88409 -0xFF,0xFF,0xA5,0x34,
88410 -0x24,0x20,0x85,0x00,
88411 -0x00,0x00,0x84,0x4C,
88412 -0xFF,0xFF,0x06,0x34,
88413 -0x21,0x30,0xC4,0x00,
88414 -0x24,0x30,0xC5,0x00,
88415 -0x00,0x08,0x86,0x4C,
88416 -0x00,0xA0,0x04,0x40,
88417 -0x10,0x00,0x84,0x34,
88418 -0x00,0xA0,0x84,0x40,
88419 -0x01,0x80,0x1B,0x3C,
88420 -0xEC,0x00,0x7B,0x27,
88421 -0x25,0xB0,0x1A,0x3C,
88422 -0x18,0x03,0x5A,0x27,
88423 -0x00,0x00,0x5B,0xAF,
88424 -0x00,0x00,0x00,0x00,
88425 -0x25,0xB0,0x04,0x3C,
88426 -0x44,0x00,0x84,0x34,
88427 -0x00,0x00,0x85,0x84,
88428 -0x20,0x00,0x06,0x24,
88429 -0x25,0x28,0xA6,0x00,
88430 -0x00,0x00,0x85,0xA4,
88431 -0x01,0x80,0x1B,0x3C,
88432 -0x1C,0x01,0x7B,0x27,
88433 -0x25,0xB0,0x1A,0x3C,
88434 -0x18,0x03,0x5A,0x27,
88435 -0x00,0x00,0x5B,0xAF,
88436 -0x25,0xB0,0x04,0x3C,
88437 -0x44,0x00,0x84,0x34,
88438 -0x00,0x00,0x85,0x8C,
88439 -0x00,0x00,0x00,0x00,
88440 -0x10,0x00,0xA5,0x30,
88441 -0xFC,0xFF,0xA0,0x10,
88442 -0x00,0x00,0x00,0x00,
88443 -0xFF,0x1F,0x07,0x3C,
88444 -0xFF,0xFF,0xE7,0x34,
88445 -0x02,0x80,0x05,0x3C,
88446 -0xD8,0x5D,0xA5,0x24,
88447 -0xFF,0xFF,0xA5,0x30,
88448 -0x40,0xB0,0x04,0x3C,
88449 -0x25,0x28,0xA4,0x00,
88450 -0x24,0x28,0xA7,0x00,
88451 -0x21,0x30,0x00,0x00,
88452 -0x43,0xB0,0x02,0x3C,
88453 -0x00,0x80,0x04,0x3C,
88454 -0x40,0x00,0x84,0x34,
88455 -0x00,0x00,0x45,0xAC,
88456 -0x04,0x00,0x46,0xAC,
88457 -0x08,0x00,0x44,0xAC,
88458 -0xEA,0x65,0x00,0x08,
88459 -0x00,0x00,0x00,0x00,
88460 -0x08,0x00,0xE0,0x03,
88461 -0x00,0x00,0x00,0x00,
88462 -0x09,0x00,0x02,0x24,
88463 -0xFF,0xFF,0x42,0x24,
88464 -0xFF,0xFF,0x41,0x04,
88465 -0xFF,0xFF,0x42,0x24,
88466 -0x08,0x00,0xE0,0x03,
88467 -0x01,0x00,0x42,0x24,
88468 -0x00,0x60,0x02,0x40,
88469 -0x01,0x00,0x41,0x34,
88470 -0x01,0x00,0x21,0x38,
88471 -0x00,0x60,0x81,0x40,
88472 -0x08,0x00,0xE0,0x03,
88473 -0x00,0x00,0x82,0xAC,
88474 -0x00,0x00,0x82,0x8C,
88475 -0x00,0x00,0x00,0x00,
88476 -0x21,0x18,0x40,0x00,
88477 -0x00,0x60,0x83,0x40,
88478 -0x08,0x00,0xE0,0x03,
88479 -0x00,0x00,0x82,0xAC,
88480 -0x00,0x60,0x01,0x40,
88481 -0x01,0x00,0x21,0x34,
88482 -0x00,0x60,0x81,0x40,
88483 -0x08,0x00,0xE0,0x03,
88484 -0x00,0x00,0x00,0x00,
88485 -0x00,0x60,0x01,0x40,
88486 -0x01,0x00,0x21,0x34,
88487 -0x01,0x00,0x21,0x38,
88488 -0x00,0x60,0x81,0x40,
88489 -0x08,0x00,0xE0,0x03,
88490 -0x00,0x00,0x00,0x00,
88491 -0x01,0x80,0x03,0x3C,
88492 -0x25,0xB0,0x02,0x3C,
88493 -0x0C,0x02,0x63,0x24,
88494 -0x18,0x03,0x42,0x34,
88495 -0x00,0x00,0x43,0xAC,
88496 -0x04,0x00,0x85,0x8C,
88497 -0x00,0xA0,0x03,0x3C,
88498 -0x01,0x00,0x02,0x24,
88499 -0x25,0x28,0xA3,0x00,
88500 -0x00,0x00,0xA4,0x8C,
88501 -0x08,0x00,0xE0,0x03,
88502 -0x00,0x00,0x00,0x00,
88503 -0x01,0x80,0x03,0x3C,
88504 -0x25,0xB0,0x02,0x3C,
88505 -0x3C,0x02,0x63,0x24,
88506 -0x18,0x03,0x42,0x34,
88507 -0x00,0x00,0x43,0xAC,
88508 -0x04,0x00,0x82,0x8C,
88509 -0x02,0x00,0x83,0x94,
88510 -0x00,0xA0,0x07,0x3C,
88511 -0x25,0x28,0x47,0x00,
88512 -0x00,0x00,0xA2,0x8C,
88513 -0x10,0x00,0x02,0x24,
88514 -0x13,0x00,0x62,0x10,
88515 -0x11,0x00,0x66,0x28,
88516 -0x06,0x00,0xC0,0x10,
88517 -0x20,0x00,0x02,0x24,
88518 -0x08,0x00,0x02,0x24,
88519 -0x17,0x00,0x62,0x10,
88520 -0x00,0x00,0x00,0x00,
88521 -0x08,0x00,0xE0,0x03,
88522 -0x01,0x00,0x02,0x24,
88523 -0xFD,0xFF,0x62,0x14,
88524 -0x00,0x00,0x00,0x00,
88525 -0x08,0x00,0x83,0x8C,
88526 -0x00,0x00,0x00,0x00,
88527 -0x00,0x00,0xA3,0xAC,
88528 -0x04,0x00,0x82,0x8C,
88529 -0x00,0x00,0x00,0x00,
88530 -0x25,0x10,0x47,0x00,
88531 -0x00,0x00,0x42,0x8C,
88532 -0x08,0x00,0xE0,0x03,
88533 -0x01,0x00,0x02,0x24,
88534 -0x08,0x00,0x82,0x8C,
88535 -0x00,0x00,0x00,0x00,
88536 -0x00,0x00,0xA2,0xA4,
88537 -0x04,0x00,0x83,0x8C,
88538 -0x00,0x00,0x00,0x00,
88539 -0x25,0x18,0x67,0x00,
88540 -0x00,0x00,0x62,0x94,
88541 -0x08,0x00,0xE0,0x03,
88542 -0x01,0x00,0x02,0x24,
88543 -0x08,0x00,0x82,0x8C,
88544 -0x00,0x00,0x00,0x00,
88545 -0x00,0x00,0xA2,0xA0,
88546 -0x04,0x00,0x83,0x8C,
88547 -0x00,0x00,0x00,0x00,
88548 -0x25,0x18,0x67,0x00,
88549 -0x00,0x00,0x62,0x90,
88550 -0x08,0x00,0xE0,0x03,
88551 -0x01,0x00,0x02,0x24,
88552 -0x02,0x80,0x02,0x3C,
88553 -0x30,0x1F,0x47,0x24,
88554 -0x30,0x37,0xE3,0x90,
88555 -0xFF,0xFF,0xA5,0x30,
88556 -0x09,0x00,0xA3,0x10,
88557 -0x21,0x20,0xC0,0x00,
88558 -0xA0,0x37,0xE2,0x8C,
88559 -0x00,0x00,0x00,0x00,
88560 -0x08,0x00,0xC2,0xAC,
88561 -0xAA,0x37,0xE3,0x94,
88562 -0x0E,0x00,0x02,0x24,
88563 -0x14,0x00,0xC2,0xAC,
88564 -0x30,0x09,0x00,0x08,
88565 -0x0C,0x00,0xC3,0xAC,
88566 -0x08,0x00,0xE0,0x03,
88567 -0x00,0x00,0x00,0x00,
88568 -0xE0,0xFF,0xBD,0x27,
88569 -0x14,0x00,0xB1,0xAF,
88570 -0x02,0x80,0x11,0x3C,
88571 -0x1C,0x00,0xBF,0xAF,
88572 -0x18,0x00,0xB2,0xAF,
88573 -0x10,0x00,0xB0,0xAF,
88574 -0x30,0x1F,0x31,0x26,
88575 -0x88,0x37,0x30,0x96,
88576 -0x02,0x80,0x02,0x3C,
88577 -0x01,0x80,0x03,0x3C,
88578 -0x25,0x80,0x02,0x02,
88579 -0x25,0xB0,0x02,0x3C,
88580 -0x40,0x03,0x63,0x24,
88581 -0x18,0x03,0x42,0x34,
88582 -0x60,0x00,0x04,0x26,
88583 -0x80,0x00,0x05,0x26,
88584 -0x00,0x00,0x43,0xAC,
88585 -0x5F,0x1E,0x00,0x0C,
88586 -0x03,0x00,0x06,0x24,
88587 -0x21,0x20,0x00,0x02,
88588 -0x21,0x28,0x00,0x00,
88589 -0x08,0x52,0x00,0x0C,
88590 -0x08,0x00,0x06,0x24,
88591 -0x88,0x37,0x22,0x8E,
88592 -0x0C,0x00,0x03,0x24,
88593 -0x0C,0x00,0x43,0xAE,
88594 -0x08,0x00,0x42,0xAE,
88595 -0x12,0x00,0x02,0x24,
88596 -0x14,0x00,0x42,0xAE,
88597 -0x21,0x20,0x40,0x02,
88598 -0x1C,0x00,0xBF,0x8F,
88599 -0x18,0x00,0xB2,0x8F,
88600 -0x14,0x00,0xB1,0x8F,
88601 -0x10,0x00,0xB0,0x8F,
88602 -0x30,0x09,0x00,0x08,
88603 -0x20,0x00,0xBD,0x27,
88604 -0x08,0x00,0xE0,0x03,
88605 -0x00,0x00,0x00,0x00,
88606 -0x08,0x00,0xE0,0x03,
88607 -0x21,0x10,0x00,0x00,
88608 -0x08,0x00,0xE0,0x03,
88609 -0x21,0x10,0x00,0x00,
88610 -0x08,0x00,0xE0,0x03,
88611 -0x21,0x10,0x00,0x00,
88612 -0xE0,0xFF,0xBD,0x27,
88613 -0x18,0x00,0xB2,0xAF,
88614 -0x1C,0x00,0xBF,0xAF,
88615 -0x14,0x00,0xB1,0xAF,
88616 -0x10,0x00,0xB0,0xAF,
88617 -0x21,0x30,0x80,0x00,
88618 -0x21,0x90,0x00,0x00,
88619 -0x00,0x60,0x11,0x40,
88620 -0x01,0x00,0x21,0x36,
88621 -0x01,0x00,0x21,0x38,
88622 -0x00,0x60,0x81,0x40,
88623 -0x0D,0x00,0x83,0x90,
88624 -0x00,0x00,0x00,0x00,
88625 -0x02,0x00,0x60,0x14,
88626 -0x02,0x80,0x02,0x3C,
88627 -0x01,0x00,0x03,0x24,
88628 -0xF8,0x5E,0x43,0xA0,
88629 -0x0C,0x00,0xC2,0x90,
88630 -0x02,0x80,0x05,0x3C,
88631 -0x0D,0x5F,0xA2,0xA0,
88632 -0x00,0x00,0xC4,0x90,
88633 -0x05,0x00,0x02,0x24,
88634 -0xFF,0x00,0x83,0x30,
88635 -0x41,0x00,0x62,0x10,
88636 -0x00,0x00,0x00,0x00,
88637 -0x03,0x00,0x02,0x24,
88638 -0x31,0x00,0x62,0x10,
88639 -0xFF,0x00,0x84,0x30,
88640 -0x09,0x00,0x82,0x2C,
88641 -0x25,0x00,0x40,0x10,
88642 -0x02,0x80,0x10,0x3C,
88643 -0xF4,0x5E,0x02,0x92,
88644 -0x00,0x00,0x00,0x00,
88645 -0xFF,0x00,0x42,0x30,
88646 -0x21,0x00,0x82,0x10,
88647 -0x00,0x00,0x00,0x00,
88648 -0xB6,0x60,0x00,0x0C,
88649 -0x00,0x00,0x00,0x00,
88650 -0xF4,0x5E,0x02,0x92,
88651 -0x00,0x00,0x00,0x00,
88652 -0x34,0x00,0x40,0x10,
88653 -0x02,0x80,0x03,0x3C,
88654 -0xE0,0x3A,0x62,0x94,
88655 -0x00,0x00,0x00,0x00,
88656 -0x00,0x01,0x42,0x30,
88657 -0x51,0x00,0x40,0x10,
88658 -0x02,0x80,0x02,0x3C,
88659 -0x02,0x80,0x03,0x3C,
88660 -0x15,0x5F,0x62,0x90,
88661 -0x00,0x00,0x00,0x00,
88662 -0x11,0x00,0x40,0x14,
88663 -0x00,0x00,0x00,0x00,
88664 -0x15,0x5F,0x62,0x90,
88665 -0x00,0x00,0x00,0x00,
88666 -0x01,0x00,0x42,0x24,
88667 -0x15,0x5F,0x62,0xA0,
88668 -0x02,0x80,0x03,0x3C,
88669 -0xF6,0x5E,0x62,0x90,
88670 -0x00,0x00,0x00,0x00,
88671 -0x0F,0x00,0x42,0x30,
88672 -0x04,0x00,0x42,0x28,
88673 -0x06,0x00,0x40,0x10,
88674 -0x04,0x00,0x04,0x24,
88675 -0x64,0x31,0x00,0x0C,
88676 -0x01,0x00,0x05,0x24,
88677 -0x40,0x41,0x00,0x08,
88678 -0x00,0x00,0x00,0x00,
88679 -0x04,0x00,0x12,0x24,
88680 -0x00,0x60,0x91,0x40,
88681 -0x21,0x10,0x40,0x02,
88682 -0x1C,0x00,0xBF,0x8F,
88683 -0x18,0x00,0xB2,0x8F,
88684 -0x14,0x00,0xB1,0x8F,
88685 -0x10,0x00,0xB0,0x8F,
88686 -0x08,0x00,0xE0,0x03,
88687 -0x20,0x00,0xBD,0x27,
88688 -0x0B,0x00,0xC2,0x90,
88689 -0x00,0x00,0x00,0x00,
88690 -0x03,0x00,0x40,0x14,
88691 -0x02,0x80,0x03,0x3C,
88692 -0x02,0x80,0x03,0x3C,
88693 -0x01,0x00,0x02,0x24,
88694 -0x10,0x5F,0x62,0xA0,
88695 -0x10,0x5F,0x63,0x90,
88696 -0x02,0x80,0x02,0x3C,
88697 -0x11,0x5F,0x43,0xA0,
88698 -0x00,0x00,0xC4,0x90,
88699 -0x18,0x41,0x00,0x08,
88700 -0xFF,0x00,0x84,0x30,
88701 -0x0D,0x5F,0xA0,0xA0,
88702 -0x00,0x00,0xC4,0x90,
88703 -0x15,0x41,0x00,0x08,
88704 -0xFF,0x00,0x83,0x30,
88705 -0x42,0xB0,0x06,0x3C,
88706 -0x00,0x00,0xC3,0x90,
88707 -0xEF,0xFF,0x02,0x24,
88708 -0x03,0x00,0xC7,0x34,
88709 -0x24,0x18,0x62,0x00,
88710 -0x40,0x00,0x02,0x24,
88711 -0x00,0x00,0xC3,0xA0,
88712 -0x0C,0x00,0x04,0x24,
88713 -0x00,0x00,0xE2,0xA0,
88714 -0x64,0x31,0x00,0x0C,
88715 -0x01,0x00,0x05,0x24,
88716 -0x02,0x80,0x03,0x3C,
88717 -0xDE,0x5D,0x62,0x90,
88718 -0x00,0x00,0x00,0x00,
88719 -0x02,0x00,0x42,0x30,
88720 -0x15,0x00,0x40,0x14,
88721 -0x00,0x00,0x00,0x00,
88722 -0x00,0x08,0x04,0x24,
88723 -0x00,0x02,0x05,0x3C,
88724 -0xA9,0x45,0x00,0x0C,
88725 -0x01,0x00,0x06,0x24,
88726 -0x02,0x80,0x02,0x3C,
88727 -0x30,0x1F,0x42,0x24,
88728 -0x2A,0x1C,0x43,0x90,
88729 -0x00,0x00,0x00,0x00,
88730 -0xCD,0xFF,0x60,0x10,
88731 -0x00,0x00,0x00,0x00,
88732 -0x50,0x39,0x44,0x94,
88733 -0x2A,0x1C,0x40,0xA0,
88734 -0x00,0xC0,0x84,0x24,
88735 -0xC2,0x34,0x00,0x0C,
88736 -0xFF,0xFF,0x84,0x30,
88737 -0x40,0x41,0x00,0x08,
88738 -0x00,0x00,0x00,0x00,
88739 -0x15,0x5F,0x40,0xA0,
88740 -0x40,0x41,0x00,0x08,
88741 -0x00,0x00,0x00,0x00,
88742 -0x9B,0x30,0x00,0x0C,
88743 -0x01,0x00,0x04,0x24,
88744 -0x6B,0x41,0x00,0x08,
88745 -0x00,0x08,0x04,0x24,
88746 -0x08,0x00,0xE0,0x03,
88747 -0x21,0x10,0x00,0x00,
88748 -0xE0,0xFF,0xBD,0x27,
88749 -0x14,0x00,0xB1,0xAF,
88750 -0x02,0x80,0x11,0x3C,
88751 -0x10,0x00,0xB0,0xAF,
88752 -0x30,0x1F,0x30,0x26,
88753 -0xB0,0x1B,0x07,0x96,
88754 -0x18,0x00,0xBF,0xAF,
88755 -0xFF,0xFF,0xE3,0x30,
88756 -0x00,0x01,0x62,0x30,
88757 -0x0E,0x00,0x40,0x10,
88758 -0x01,0x00,0x66,0x30,
88759 -0x02,0x80,0x04,0x3C,
88760 -0x88,0x58,0x84,0x24,
88761 -0x03,0x00,0x05,0x24,
88762 -0x17,0x00,0xC0,0x14,
88763 -0x04,0x00,0x62,0x30,
88764 -0x02,0x00,0x40,0x10,
88765 -0xFB,0xF6,0xE3,0x30,
88766 -0xB0,0x1B,0x03,0xA6,
88767 -0xA3,0x51,0x00,0x0C,
88768 -0x00,0x00,0x00,0x00,
88769 -0x25,0xB0,0x02,0x3C,
88770 -0x4C,0x00,0x42,0x34,
88771 -0x00,0x00,0x40,0xA0,
88772 -0x21,0x20,0x00,0x00,
88773 -0x12,0x0D,0x00,0x0C,
88774 -0x21,0x28,0x00,0x00,
88775 -0x30,0x1F,0x23,0x26,
88776 -0x18,0x00,0xBF,0x8F,
88777 -0x14,0x00,0xB1,0x8F,
88778 -0x10,0x00,0xB0,0x8F,
88779 -0x21,0x10,0x00,0x00,
88780 -0x20,0x00,0xBD,0x27,
88781 -0x10,0x3E,0x60,0xAC,
88782 -0xEC,0x38,0x60,0xAC,
88783 -0x08,0x39,0x60,0xAC,
88784 -0x08,0x00,0xE0,0x03,
88785 -0x50,0x3E,0x60,0xAC,
88786 -0x6C,0x4C,0x00,0x0C,
88787 -0x00,0x00,0x00,0x00,
88788 -0xB0,0x1B,0x02,0x96,
88789 -0x00,0x00,0x00,0x00,
88790 -0xFE,0xFE,0x42,0x30,
88791 -0xA3,0x51,0x00,0x0C,
88792 -0xB0,0x1B,0x02,0xA6,
88793 -0x25,0xB0,0x02,0x3C,
88794 -0x4C,0x00,0x42,0x34,
88795 -0x00,0x00,0x40,0xA0,
88796 -0x9D,0x41,0x00,0x08,
88797 -0x21,0x20,0x00,0x00,
88798 -0x08,0x00,0xE0,0x03,
88799 -0x21,0x10,0x00,0x00,
88800 -0x08,0x00,0xE0,0x03,
88801 -0x21,0x10,0x00,0x00,
88802 -0xE8,0xFF,0xBD,0x27,
88803 -0x10,0x00,0xBF,0xAF,
88804 -0x01,0x00,0x83,0x90,
88805 -0x02,0x80,0x02,0x3C,
88806 -0x21,0x38,0x80,0x00,
88807 -0xB0,0x5C,0x43,0xAC,
88808 -0x01,0x00,0x84,0x90,
88809 -0x00,0x00,0xE2,0x90,
88810 -0x02,0x80,0x06,0x3C,
88811 -0xFF,0x00,0x85,0x30,
88812 -0x80,0x10,0x02,0x00,
88813 -0x25,0x28,0xA2,0x00,
88814 -0xE8,0xDD,0xC6,0x24,
88815 -0xFF,0x00,0x84,0x30,
88816 -0x00,0x80,0xA5,0x34,
88817 -0x4E,0x23,0x00,0x0C,
88818 -0x03,0x00,0xE7,0x24,
88819 -0x10,0x00,0xBF,0x8F,
88820 -0x21,0x10,0x00,0x00,
88821 -0x08,0x00,0xE0,0x03,
88822 -0x18,0x00,0xBD,0x27,
88823 -0xE0,0xFF,0xBD,0x27,
88824 -0x18,0x00,0xB0,0xAF,
88825 -0x02,0x80,0x03,0x3C,
88826 -0x1C,0x00,0xBF,0xAF,
88827 -0xE0,0x3A,0x62,0x94,
88828 -0x00,0x00,0x00,0x00,
88829 -0x01,0x00,0x43,0x30,
88830 -0x00,0x01,0x42,0x30,
88831 -0x04,0x00,0x40,0x10,
88832 -0x21,0x80,0x80,0x00,
88833 -0x02,0x80,0x04,0x3C,
88834 -0x06,0x00,0x60,0x14,
88835 -0xE0,0xD7,0x84,0x24,
88836 -0x1C,0x00,0xBF,0x8F,
88837 -0x18,0x00,0xB0,0x8F,
88838 -0x21,0x10,0x00,0x00,
88839 -0x08,0x00,0xE0,0x03,
88840 -0x20,0x00,0xBD,0x27,
88841 -0x2F,0x55,0x00,0x0C,
88842 -0x00,0x00,0x00,0x00,
88843 -0x06,0x00,0x07,0x92,
88844 -0x07,0x00,0x02,0x26,
88845 -0x21,0x20,0x00,0x02,
88846 -0x80,0x38,0x07,0x00,
88847 -0x00,0x80,0xE7,0x34,
88848 -0x05,0x00,0x05,0x24,
88849 -0x21,0x30,0x00,0x00,
88850 -0x1E,0x51,0x00,0x0C,
88851 -0x10,0x00,0xA2,0xAF,
88852 -0x1C,0x00,0xBF,0x8F,
88853 -0x18,0x00,0xB0,0x8F,
88854 -0x21,0x10,0x00,0x00,
88855 -0x08,0x00,0xE0,0x03,
88856 -0x20,0x00,0xBD,0x27,
88857 -0x08,0x00,0xE0,0x03,
88858 -0x21,0x10,0x00,0x00,
88859 -0x08,0x00,0xE0,0x03,
88860 -0x21,0x10,0x00,0x00,
88861 -0x08,0x00,0xE0,0x03,
88862 -0x21,0x10,0x00,0x00,
88863 -0x08,0x00,0xE0,0x03,
88864 -0x21,0x10,0x00,0x00,
88865 -0x08,0x00,0xE0,0x03,
88866 -0x21,0x10,0x00,0x00,
88867 -0x08,0x00,0xE0,0x03,
88868 -0x21,0x10,0x00,0x00,
88869 -0x08,0x00,0xE0,0x03,
88870 -0x21,0x10,0x00,0x00,
88871 -0x08,0x00,0xE0,0x03,
88872 -0x21,0x10,0x00,0x00,
88873 -0x08,0x00,0xE0,0x03,
88874 -0x01,0x00,0x02,0x24,
88875 -0x08,0x00,0xE0,0x03,
88876 -0x21,0x10,0x00,0x00,
88877 -0x08,0x00,0xE0,0x03,
88878 -0x01,0x00,0x02,0x24,
88879 -0x08,0x00,0xE0,0x03,
88880 -0x21,0x10,0x00,0x00,
88881 -0x08,0x00,0xE0,0x03,
88882 -0x21,0x10,0x00,0x00,
88883 -0x08,0x00,0xE0,0x03,
88884 -0x01,0x00,0x02,0x24,
88885 -0x08,0x00,0xE0,0x03,
88886 -0x21,0x10,0x00,0x00,
88887 -0x08,0x00,0xE0,0x03,
88888 -0x01,0x00,0x02,0x24,
88889 -0x08,0x00,0xE0,0x03,
88890 -0x21,0x10,0x00,0x00,
88891 -0x08,0x00,0xE0,0x03,
88892 -0x00,0x00,0x00,0x00,
88893 -0x08,0x00,0xE0,0x03,
88894 -0x01,0x00,0x02,0x24,
88895 -0x08,0x00,0xE0,0x03,
88896 -0x01,0x00,0x02,0x24,
88897 -0x08,0x00,0xE0,0x03,
88898 -0x21,0x10,0x00,0x00,
88899 -0x08,0x00,0xE0,0x03,
88900 -0x01,0x00,0x02,0x24,
88901 -0x08,0x00,0xE0,0x03,
88902 -0x21,0x10,0x00,0x00,
88903 -0x08,0x00,0xE0,0x03,
88904 -0x21,0x10,0x00,0x00,
88905 -0x08,0x00,0xE0,0x03,
88906 -0x21,0x10,0x00,0x00,
88907 -0x08,0x00,0xE0,0x03,
88908 -0x21,0x10,0x00,0x00,
88909 -0x08,0x00,0xE0,0x03,
88910 -0x21,0x10,0x00,0x00,
88911 -0x08,0x00,0xE0,0x03,
88912 -0x21,0x10,0x00,0x00,
88913 -0x08,0x00,0xE0,0x03,
88914 -0x21,0x10,0x00,0x00,
88915 -0x08,0x00,0xE0,0x03,
88916 -0x21,0x10,0x00,0x00,
88917 -0xE8,0xFF,0xBD,0x27,
88918 -0x02,0x80,0x02,0x3C,
88919 -0x10,0x00,0xB0,0xAF,
88920 -0x14,0x00,0xBF,0xAF,
88921 -0x30,0x1F,0x45,0x24,
88922 -0x50,0x3E,0xA3,0x8C,
88923 -0x00,0x00,0x00,0x00,
88924 -0x06,0x00,0x60,0x14,
88925 -0x21,0x80,0x80,0x00,
88926 -0x14,0x00,0xBF,0x8F,
88927 -0x10,0x00,0xB0,0x8F,
88928 -0x21,0x10,0x00,0x00,
88929 -0x08,0x00,0xE0,0x03,
88930 -0x18,0x00,0xBD,0x27,
88931 -0x4C,0x3E,0xA2,0x90,
88932 -0x00,0x00,0x00,0x00,
88933 -0x21,0x10,0x45,0x00,
88934 -0x44,0x3E,0x40,0xA0,
88935 -0x00,0x00,0x84,0x8C,
88936 -0x6D,0x1D,0x00,0x0C,
88937 -0x00,0x00,0x00,0x00,
88938 -0x00,0x00,0x06,0x8E,
88939 -0x03,0x00,0x04,0x24,
88940 -0x90,0x14,0x00,0x0C,
88941 -0x21,0x28,0x00,0x00,
88942 -0x14,0x00,0xBF,0x8F,
88943 -0x10,0x00,0xB0,0x8F,
88944 -0x21,0x10,0x00,0x00,
88945 -0x08,0x00,0xE0,0x03,
88946 -0x18,0x00,0xBD,0x27,
88947 -0x00,0x00,0x84,0x90,
88948 -0x4F,0x0C,0x00,0x08,
88949 -0x00,0x00,0x00,0x00,
88950 -0xE0,0xFF,0xBD,0x27,
88951 -0x18,0x00,0xBF,0xAF,
88952 -0x14,0x00,0xB1,0xAF,
88953 -0x10,0x00,0xB0,0xAF,
88954 -0x00,0x00,0x86,0x90,
88955 -0x21,0x80,0x80,0x00,
88956 -0x00,0x7F,0x05,0x24,
88957 -0xA9,0x45,0x00,0x0C,
88958 -0x08,0x0E,0x04,0x24,
88959 -0x00,0x00,0x05,0x92,
88960 -0x7F,0x7F,0x11,0x3C,
88961 -0x00,0x0E,0x04,0x24,
88962 -0x00,0x14,0x05,0x00,
88963 -0x00,0x86,0x05,0x00,
88964 -0x00,0x1A,0x05,0x00,
88965 -0x25,0x80,0x02,0x02,
88966 -0x25,0x80,0x03,0x02,
88967 -0x25,0x80,0x05,0x02,
88968 -0x21,0x30,0x00,0x02,
88969 -0xA9,0x45,0x00,0x0C,
88970 -0x7F,0x7F,0x25,0x36,
88971 -0x7F,0x7F,0x25,0x36,
88972 -0x21,0x30,0x00,0x02,
88973 -0xA9,0x45,0x00,0x0C,
88974 -0x04,0x0E,0x04,0x24,
88975 -0x7F,0x7F,0x25,0x36,
88976 -0x21,0x30,0x00,0x02,
88977 -0xA9,0x45,0x00,0x0C,
88978 -0x10,0x0E,0x04,0x24,
88979 -0x7F,0x7F,0x25,0x36,
88980 -0x21,0x30,0x00,0x02,
88981 -0xA9,0x45,0x00,0x0C,
88982 -0x14,0x0E,0x04,0x24,
88983 -0x7F,0x7F,0x25,0x36,
88984 -0x21,0x30,0x00,0x02,
88985 -0xA9,0x45,0x00,0x0C,
88986 -0x18,0x0E,0x04,0x24,
88987 -0x7F,0x7F,0x25,0x36,
88988 -0x21,0x30,0x00,0x02,
88989 -0x18,0x00,0xBF,0x8F,
88990 -0x14,0x00,0xB1,0x8F,
88991 -0x10,0x00,0xB0,0x8F,
88992 -0x1C,0x0E,0x04,0x24,
88993 -0xA9,0x45,0x00,0x08,
88994 -0x20,0x00,0xBD,0x27,
88995 -0xD0,0xFF,0xBD,0x27,
88996 -0x24,0x00,0xB3,0xAF,
88997 -0x20,0x00,0xB2,0xAF,
88998 -0x1C,0x00,0xB1,0xAF,
88999 -0x18,0x00,0xB0,0xAF,
89000 -0x28,0x00,0xBF,0xAF,
89001 -0x00,0x00,0x85,0x94,
89002 -0x02,0x00,0x02,0x24,
89003 -0x21,0x98,0x80,0x00,
89004 -0x10,0x00,0xA0,0xA3,
89005 -0x21,0x80,0x00,0x00,
89006 -0x21,0x30,0x00,0x00,
89007 -0x21,0x88,0x00,0x00,
89008 -0x66,0x00,0xA2,0x10,
89009 -0x10,0x00,0xB2,0x27,
89010 -0x03,0x00,0xA2,0x28,
89011 -0x26,0x00,0x40,0x14,
89012 -0x01,0x00,0x02,0x24,
89013 -0x03,0x00,0x02,0x24,
89014 -0x75,0x00,0xA2,0x10,
89015 -0x24,0x08,0x04,0x24,
89016 -0x0C,0x09,0x04,0x24,
89017 -0xA9,0x45,0x00,0x0C,
89018 -0xFF,0xFF,0x05,0x24,
89019 -0x04,0x08,0x04,0x24,
89020 -0x21,0x30,0x00,0x02,
89021 -0xA9,0x45,0x00,0x0C,
89022 -0x0F,0x00,0x05,0x24,
89023 -0x02,0x00,0x64,0x96,
89024 -0x02,0x00,0x02,0x24,
89025 -0x35,0x00,0x82,0x10,
89026 -0x03,0x00,0x82,0x28,
89027 -0x4B,0x00,0x40,0x10,
89028 -0x03,0x00,0x02,0x24,
89029 -0x01,0x00,0x02,0x24,
89030 -0x60,0x00,0x82,0x10,
89031 -0x21,0x30,0x20,0x02,
89032 -0x04,0x0C,0x04,0x24,
89033 -0xA9,0x45,0x00,0x0C,
89034 -0x0F,0x00,0x05,0x24,
89035 -0x21,0x30,0x20,0x02,
89036 -0x04,0x0D,0x04,0x24,
89037 -0xA9,0x45,0x00,0x0C,
89038 -0x0F,0x00,0x05,0x24,
89039 -0x10,0x00,0xA6,0x93,
89040 -0x04,0x0A,0x04,0x24,
89041 -0xA9,0x45,0x00,0x0C,
89042 -0x00,0xFF,0x05,0x3C,
89043 -0x28,0x00,0xBF,0x8F,
89044 -0x24,0x00,0xB3,0x8F,
89045 -0x20,0x00,0xB2,0x8F,
89046 -0x1C,0x00,0xB1,0x8F,
89047 -0x18,0x00,0xB0,0x8F,
89048 -0x08,0x00,0xE0,0x03,
89049 -0x30,0x00,0xBD,0x27,
89050 -0xDE,0xFF,0xA2,0x14,
89051 -0x0C,0x09,0x04,0x24,
89052 -0x24,0x08,0x04,0x24,
89053 -0x0E,0x00,0x05,0x24,
89054 -0xA9,0x45,0x00,0x0C,
89055 -0x02,0x00,0x06,0x24,
89056 -0x2C,0x08,0x04,0x24,
89057 -0x01,0x00,0x06,0x24,
89058 -0xA9,0x45,0x00,0x0C,
89059 -0x0E,0x00,0x05,0x24,
89060 -0x10,0x00,0xA2,0x93,
89061 -0x80,0xFF,0x03,0x24,
89062 -0x11,0x11,0x04,0x3C,
89063 -0x0F,0x00,0x42,0x30,
89064 -0x25,0x10,0x43,0x00,
89065 -0x11,0x11,0x86,0x34,
89066 -0x03,0x00,0x10,0x24,
89067 -0x10,0x00,0xA2,0xA3,
89068 -0x0C,0x09,0x04,0x24,
89069 -0xA9,0x45,0x00,0x0C,
89070 -0xFF,0xFF,0x05,0x24,
89071 -0x04,0x08,0x04,0x24,
89072 -0x21,0x30,0x00,0x02,
89073 -0xA9,0x45,0x00,0x0C,
89074 -0x0F,0x00,0x05,0x24,
89075 -0x02,0x00,0x64,0x96,
89076 -0x02,0x00,0x02,0x24,
89077 -0xCD,0xFF,0x82,0x14,
89078 -0x03,0x00,0x82,0x28,
89079 -0x00,0x00,0x42,0x92,
89080 -0x02,0x00,0x11,0x24,
89081 -0xF5,0x00,0x42,0x30,
89082 -0x05,0x00,0x42,0x34,
89083 -0x00,0x00,0x42,0xA2,
89084 -0x21,0x30,0x20,0x02,
89085 -0x04,0x0C,0x04,0x24,
89086 -0xA9,0x45,0x00,0x0C,
89087 -0x0F,0x00,0x05,0x24,
89088 -0x21,0x30,0x20,0x02,
89089 -0x04,0x0D,0x04,0x24,
89090 -0xA9,0x45,0x00,0x0C,
89091 -0x0F,0x00,0x05,0x24,
89092 -0x10,0x00,0xA6,0x93,
89093 -0x04,0x0A,0x04,0x24,
89094 -0xA9,0x45,0x00,0x0C,
89095 -0x00,0xFF,0x05,0x3C,
89096 -0x28,0x00,0xBF,0x8F,
89097 -0x24,0x00,0xB3,0x8F,
89098 -0x20,0x00,0xB2,0x8F,
89099 -0x1C,0x00,0xB1,0x8F,
89100 -0x18,0x00,0xB0,0x8F,
89101 -0x08,0x00,0xE0,0x03,
89102 -0x30,0x00,0xBD,0x27,
89103 -0xB8,0xFF,0x82,0x14,
89104 -0x21,0x30,0x20,0x02,
89105 -0x00,0x00,0x42,0x92,
89106 -0x03,0x00,0x11,0x24,
89107 -0xF0,0x00,0x42,0x30,
89108 -0x01,0x00,0x42,0x34,
89109 -0xD4,0x42,0x00,0x08,
89110 -0x00,0x00,0x42,0xA2,
89111 -0x24,0x08,0x04,0x24,
89112 -0x0E,0x00,0x05,0x24,
89113 -0xA9,0x45,0x00,0x0C,
89114 -0x01,0x00,0x06,0x24,
89115 -0x02,0x00,0x06,0x24,
89116 -0x2C,0x08,0x04,0x24,
89117 -0xA9,0x45,0x00,0x0C,
89118 -0x0E,0x00,0x05,0x24,
89119 -0x10,0x00,0xA2,0x93,
89120 -0x22,0x22,0x03,0x3C,
89121 -0x22,0x22,0x66,0x34,
89122 -0x0F,0x00,0x42,0x30,
89123 -0x40,0x00,0x42,0x34,
89124 -0x03,0x00,0x10,0x24,
89125 -0xC4,0x42,0x00,0x08,
89126 -0x10,0x00,0xA2,0xA3,
89127 -0x00,0x00,0x42,0x92,
89128 -0x01,0x00,0x11,0x24,
89129 -0xF0,0x00,0x42,0x30,
89130 -0xD4,0x42,0x00,0x08,
89131 -0x00,0x00,0x42,0xA2,
89132 -0x0E,0x00,0x05,0x24,
89133 -0xA9,0x45,0x00,0x0C,
89134 -0x02,0x00,0x06,0x24,
89135 -0x02,0x00,0x06,0x24,
89136 -0x2C,0x08,0x04,0x24,
89137 -0xA9,0x45,0x00,0x0C,
89138 -0x0E,0x00,0x05,0x24,
89139 -0x10,0x00,0xA2,0x93,
89140 -0xC0,0xFF,0x03,0x24,
89141 -0x03,0x00,0x10,0x24,
89142 -0x0F,0x00,0x42,0x30,
89143 -0x25,0x10,0x43,0x00,
89144 -0x32,0x03,0x03,0x3C,
89145 -0x33,0x13,0x66,0x34,
89146 -0x90,0x42,0x00,0x08,
89147 -0x10,0x00,0xA2,0xA3,
89148 -0x00,0x00,0x86,0x8C,
89149 -0x00,0x0F,0x05,0x3C,
89150 -0xA9,0x45,0x00,0x08,
89151 -0x80,0x08,0x04,0x24,
89152 -0xE8,0xFF,0xBD,0x27,
89153 -0x10,0x00,0xB0,0xAF,
89154 -0x21,0x80,0x80,0x00,
89155 -0x02,0x80,0x04,0x3C,
89156 -0x14,0x00,0xBF,0xAF,
89157 -0x2F,0x55,0x00,0x0C,
89158 -0xF0,0xD7,0x84,0x24,
89159 -0x00,0x00,0x02,0x92,
89160 -0x00,0x0D,0x04,0x24,
89161 -0x00,0x10,0x05,0x3C,
89162 -0x21,0x00,0x40,0x10,
89163 -0x21,0x30,0x00,0x00,
89164 -0x00,0x08,0x04,0x24,
89165 -0xCB,0x45,0x00,0x0C,
89166 -0x00,0x02,0x05,0x3C,
89167 -0x00,0x08,0x04,0x24,
89168 -0x00,0x02,0x05,0x3C,
89169 -0x32,0x00,0x40,0x10,
89170 -0x01,0x00,0x06,0x24,
89171 -0x00,0x0A,0x04,0x24,
89172 -0x03,0x00,0x05,0x24,
89173 -0xA9,0x45,0x00,0x0C,
89174 -0x21,0x30,0x00,0x00,
89175 -0x00,0x0A,0x04,0x24,
89176 -0x08,0x00,0x05,0x24,
89177 -0xA9,0x45,0x00,0x0C,
89178 -0x01,0x00,0x06,0x24,
89179 -0x00,0x0D,0x04,0x24,
89180 -0x00,0x10,0x05,0x3C,
89181 -0xA9,0x45,0x00,0x0C,
89182 -0x21,0x30,0x00,0x00,
89183 -0x00,0x0D,0x04,0x24,
89184 -0x00,0x20,0x05,0x3C,
89185 -0xA9,0x45,0x00,0x0C,
89186 -0x01,0x00,0x06,0x24,
89187 -0x00,0x0D,0x04,0x24,
89188 -0x00,0x40,0x05,0x3C,
89189 -0x21,0x30,0x00,0x00,
89190 -0xA9,0x45,0x00,0x0C,
89191 -0x00,0x00,0x00,0x00,
89192 -0x14,0x00,0xBF,0x8F,
89193 -0x10,0x00,0xB0,0x8F,
89194 -0x08,0x00,0xE0,0x03,
89195 -0x18,0x00,0xBD,0x27,
89196 -0xA9,0x45,0x00,0x0C,
89197 -0x00,0x00,0x00,0x00,
89198 -0x00,0x0D,0x04,0x24,
89199 -0x00,0x20,0x05,0x3C,
89200 -0xA9,0x45,0x00,0x0C,
89201 -0x21,0x30,0x00,0x00,
89202 -0x00,0x40,0x05,0x3C,
89203 -0x21,0x30,0x00,0x00,
89204 -0xA9,0x45,0x00,0x0C,
89205 -0x00,0x0D,0x04,0x24,
89206 -0x54,0x22,0x00,0x0C,
89207 -0x10,0x27,0x04,0x24,
89208 -0x00,0x0F,0x04,0x24,
89209 -0x00,0x01,0x05,0x24,
89210 -0xA9,0x45,0x00,0x0C,
89211 -0x21,0x30,0x00,0x00,
89212 -0x00,0x0F,0x04,0x24,
89213 -0x00,0x01,0x05,0x24,
89214 -0xA9,0x45,0x00,0x0C,
89215 -0x01,0x00,0x06,0x24,
89216 -0x14,0x00,0xBF,0x8F,
89217 -0x10,0x00,0xB0,0x8F,
89218 -0x08,0x00,0xE0,0x03,
89219 -0x18,0x00,0xBD,0x27,
89220 -0xA9,0x45,0x00,0x0C,
89221 -0x00,0x00,0x00,0x00,
89222 -0x00,0x0A,0x04,0x24,
89223 -0x03,0x00,0x05,0x24,
89224 -0xA9,0x45,0x00,0x0C,
89225 -0x21,0x30,0x00,0x00,
89226 -0x00,0x0A,0x04,0x24,
89227 -0x08,0x00,0x05,0x24,
89228 -0xA9,0x45,0x00,0x0C,
89229 -0x01,0x00,0x06,0x24,
89230 -0x00,0x0D,0x04,0x24,
89231 -0x00,0x10,0x05,0x3C,
89232 -0xA9,0x45,0x00,0x0C,
89233 -0x21,0x30,0x00,0x00,
89234 -0x00,0x0D,0x04,0x24,
89235 -0x00,0x20,0x05,0x3C,
89236 -0xA9,0x45,0x00,0x0C,
89237 -0x01,0x00,0x06,0x24,
89238 -0x00,0x0D,0x04,0x24,
89239 -0x00,0x40,0x05,0x3C,
89240 -0x3E,0x43,0x00,0x08,
89241 -0x21,0x30,0x00,0x00,
89242 -0xE0,0xFF,0xBD,0x27,
89243 -0x10,0x00,0xB0,0xAF,
89244 -0x21,0x80,0x80,0x00,
89245 -0x02,0x80,0x04,0x3C,
89246 -0x18,0x00,0xB2,0xAF,
89247 -0x14,0x00,0xB1,0xAF,
89248 -0x1C,0x00,0xBF,0xAF,
89249 -0x2F,0x55,0x00,0x0C,
89250 -0x08,0xD8,0x84,0x24,
89251 -0x00,0x00,0x02,0x92,
89252 -0x0F,0x00,0x12,0x3C,
89253 -0x0F,0x00,0x11,0x3C,
89254 -0x00,0x08,0x04,0x24,
89255 -0x00,0x01,0x05,0x3C,
89256 -0x20,0x00,0x40,0x10,
89257 -0x21,0x30,0x00,0x00,
89258 -0xA9,0x45,0x00,0x0C,
89259 -0x00,0x00,0x00,0x00,
89260 -0x00,0x02,0x05,0x3C,
89261 -0x21,0x30,0x00,0x00,
89262 -0xA9,0x45,0x00,0x0C,
89263 -0x00,0x08,0x04,0x24,
89264 -0x01,0x00,0x04,0x92,
89265 -0xE6,0x44,0x00,0x0C,
89266 -0x00,0x00,0x00,0x00,
89267 -0x0D,0x00,0x06,0x3C,
89268 -0xFF,0xFF,0x45,0x36,
89269 -0x00,0x40,0xC6,0x34,
89270 -0x5F,0x47,0x00,0x0C,
89271 -0x21,0x00,0x04,0x24,
89272 -0x54,0x22,0x00,0x0C,
89273 -0x64,0x00,0x04,0x24,
89274 -0xE6,0x44,0x00,0x0C,
89275 -0x21,0x20,0x00,0x00,
89276 -0x02,0x00,0x06,0x3C,
89277 -0xFF,0xFF,0x45,0x36,
89278 -0x1F,0x00,0xC6,0x34,
89279 -0x5F,0x47,0x00,0x0C,
89280 -0x21,0x20,0x00,0x00,
89281 -0x54,0x22,0x00,0x0C,
89282 -0x64,0x00,0x04,0x24,
89283 -0x1C,0x00,0xBF,0x8F,
89284 -0x18,0x00,0xB2,0x8F,
89285 -0x14,0x00,0xB1,0x8F,
89286 -0x10,0x00,0xB0,0x8F,
89287 -0x08,0x00,0xE0,0x03,
89288 -0x20,0x00,0xBD,0x27,
89289 -0xA9,0x45,0x00,0x0C,
89290 -0x01,0x00,0x06,0x24,
89291 -0x00,0x02,0x05,0x3C,
89292 -0x01,0x00,0x06,0x24,
89293 -0xA9,0x45,0x00,0x0C,
89294 -0x00,0x08,0x04,0x24,
89295 -0x01,0x00,0x04,0x92,
89296 -0xE6,0x44,0x00,0x0C,
89297 -0x00,0x00,0x00,0x00,
89298 -0x05,0x00,0x06,0x3C,
89299 -0xFF,0xFF,0x25,0x36,
89300 -0x00,0x40,0xC6,0x34,
89301 -0x5F,0x47,0x00,0x0C,
89302 -0x21,0x00,0x04,0x24,
89303 -0x54,0x22,0x00,0x0C,
89304 -0x64,0x00,0x04,0x24,
89305 -0xFF,0xFF,0x25,0x36,
89306 -0x21,0x20,0x00,0x00,
89307 -0x5F,0x47,0x00,0x0C,
89308 -0x03,0x00,0x06,0x3C,
89309 -0x54,0x22,0x00,0x0C,
89310 -0x64,0x00,0x04,0x24,
89311 -0x1C,0x00,0xBF,0x8F,
89312 -0x18,0x00,0xB2,0x8F,
89313 -0x14,0x00,0xB1,0x8F,
89314 -0x10,0x00,0xB0,0x8F,
89315 -0x08,0x00,0xE0,0x03,
89316 -0x20,0x00,0xBD,0x27,
89317 -0xE8,0xFF,0xBD,0x27,
89318 -0x10,0x00,0xB0,0xAF,
89319 -0x21,0x80,0x80,0x00,
89320 -0x02,0x80,0x04,0x3C,
89321 -0x14,0x00,0xBF,0xAF,
89322 -0x2F,0x55,0x00,0x0C,
89323 -0x20,0xD8,0x84,0x24,
89324 -0x00,0x00,0x02,0x92,
89325 -0x00,0x00,0x00,0x00,
89326 -0x0A,0x00,0x40,0x10,
89327 -0x00,0x0A,0x04,0x24,
89328 -0x04,0x00,0x02,0x8E,
89329 -0x00,0x08,0x04,0x24,
89330 -0x04,0x00,0x42,0x2C,
89331 -0x1C,0x00,0x40,0x14,
89332 -0x00,0x01,0x05,0x3C,
89333 -0x14,0x00,0xBF,0x8F,
89334 -0x10,0x00,0xB0,0x8F,
89335 -0x08,0x00,0xE0,0x03,
89336 -0x18,0x00,0xBD,0x27,
89337 -0x04,0x00,0x02,0x8E,
89338 -0x03,0x00,0x05,0x24,
89339 -0x04,0x00,0x42,0x2C,
89340 -0xF8,0xFF,0x40,0x10,
89341 -0x21,0x30,0x00,0x00,
89342 -0xA9,0x45,0x00,0x0C,
89343 -0x00,0x00,0x00,0x00,
89344 -0x00,0x0A,0x04,0x24,
89345 -0x08,0x00,0x05,0x24,
89346 -0xA9,0x45,0x00,0x0C,
89347 -0x01,0x00,0x06,0x24,
89348 -0x00,0x0F,0x04,0x24,
89349 -0x00,0x01,0x05,0x24,
89350 -0xA9,0x45,0x00,0x0C,
89351 -0x21,0x30,0x00,0x00,
89352 -0x00,0x0F,0x04,0x24,
89353 -0x00,0x01,0x05,0x24,
89354 -0xA9,0x45,0x00,0x0C,
89355 -0x01,0x00,0x06,0x24,
89356 -0x14,0x00,0xBF,0x8F,
89357 -0x10,0x00,0xB0,0x8F,
89358 -0x08,0x00,0xE0,0x03,
89359 -0x18,0x00,0xBD,0x27,
89360 -0xCB,0x45,0x00,0x0C,
89361 -0x00,0x00,0x00,0x00,
89362 -0x00,0x08,0x04,0x24,
89363 -0x00,0x01,0x05,0x3C,
89364 -0x1B,0x00,0x40,0x10,
89365 -0x01,0x00,0x06,0x24,
89366 -0x00,0x0D,0x04,0x24,
89367 -0x00,0x10,0x05,0x3C,
89368 -0xA9,0x45,0x00,0x0C,
89369 -0x21,0x30,0x00,0x00,
89370 -0x00,0x0D,0x04,0x24,
89371 -0x00,0x20,0x05,0x3C,
89372 -0xA9,0x45,0x00,0x0C,
89373 -0x21,0x30,0x00,0x00,
89374 -0x00,0x0D,0x04,0x24,
89375 -0x00,0x40,0x05,0x3C,
89376 -0xA9,0x45,0x00,0x0C,
89377 -0x21,0x30,0x00,0x00,
89378 -0x00,0x0A,0x04,0x24,
89379 -0x03,0x00,0x05,0x24,
89380 -0xA9,0x45,0x00,0x0C,
89381 -0x02,0x00,0x06,0x24,
89382 -0x00,0x0A,0x04,0x24,
89383 -0x08,0x00,0x05,0x24,
89384 -0xA9,0x45,0x00,0x0C,
89385 -0x21,0x30,0x00,0x00,
89386 -0x00,0x0A,0x04,0x24,
89387 -0x00,0x30,0x05,0x24,
89388 -0xA9,0x45,0x00,0x0C,
89389 -0x21,0x30,0x00,0x00,
89390 -0xE4,0x43,0x00,0x08,
89391 -0x00,0x00,0x00,0x00,
89392 -0xA9,0x45,0x00,0x0C,
89393 -0x00,0x00,0x00,0x00,
89394 -0xEF,0x43,0x00,0x08,
89395 -0x00,0x0D,0x04,0x24,
89396 -0xE8,0xFF,0xBD,0x27,
89397 -0x10,0x00,0xB0,0xAF,
89398 -0x21,0x80,0x80,0x00,
89399 -0x02,0x80,0x04,0x3C,
89400 -0x14,0x00,0xBF,0xAF,
89401 -0x2F,0x55,0x00,0x0C,
89402 -0x40,0xD8,0x84,0x24,
89403 -0x04,0x00,0x03,0x8E,
89404 -0x00,0x00,0x00,0x00,
89405 -0x04,0x00,0x62,0x2C,
89406 -0x2C,0x00,0x40,0x14,
89407 -0xFC,0xFF,0x62,0x24,
89408 -0x18,0x00,0x42,0x2C,
89409 -0x05,0x00,0x40,0x14,
89410 -0x00,0x00,0x00,0x00,
89411 -0x14,0x00,0xBF,0x8F,
89412 -0x10,0x00,0xB0,0x8F,
89413 -0x08,0x00,0xE0,0x03,
89414 -0x18,0x00,0xBD,0x27,
89415 -0x02,0x80,0x04,0x3C,
89416 -0x2F,0x55,0x00,0x0C,
89417 -0x6C,0xD8,0x84,0x24,
89418 -0x00,0x00,0x02,0x92,
89419 -0x00,0x00,0x00,0x00,
89420 -0x54,0x00,0x40,0x10,
89421 -0x00,0x0D,0x04,0x24,
89422 -0x00,0x08,0x04,0x24,
89423 -0xCB,0x45,0x00,0x0C,
89424 -0x00,0x02,0x05,0x3C,
89425 -0x63,0x00,0x40,0x10,
89426 -0x00,0x08,0x04,0x24,
89427 -0x00,0x0A,0x04,0x24,
89428 -0x03,0x00,0x05,0x24,
89429 -0xA9,0x45,0x00,0x0C,
89430 -0x21,0x30,0x00,0x00,
89431 -0x00,0x0A,0x04,0x24,
89432 -0x08,0x00,0x05,0x24,
89433 -0xA9,0x45,0x00,0x0C,
89434 -0x01,0x00,0x06,0x24,
89435 -0x00,0x0D,0x04,0x24,
89436 -0x00,0x10,0x05,0x3C,
89437 -0xA9,0x45,0x00,0x0C,
89438 -0x01,0x00,0x06,0x24,
89439 -0x00,0x0D,0x04,0x24,
89440 -0x00,0x20,0x05,0x3C,
89441 -0xA9,0x45,0x00,0x0C,
89442 -0x21,0x30,0x00,0x00,
89443 -0x00,0x0D,0x04,0x24,
89444 -0x00,0x40,0x05,0x3C,
89445 -0xA9,0x45,0x00,0x0C,
89446 -0x21,0x30,0x00,0x00,
89447 -0x14,0x00,0xBF,0x8F,
89448 -0x10,0x00,0xB0,0x8F,
89449 -0x08,0x00,0xE0,0x03,
89450 -0x18,0x00,0xBD,0x27,
89451 -0x02,0x80,0x04,0x3C,
89452 -0x2F,0x55,0x00,0x0C,
89453 -0x58,0xD8,0x84,0x24,
89454 -0x00,0x00,0x02,0x92,
89455 -0x00,0x00,0x00,0x00,
89456 -0x21,0x00,0x40,0x10,
89457 -0x00,0x0A,0x04,0x24,
89458 -0x00,0x08,0x04,0x24,
89459 -0xCB,0x45,0x00,0x0C,
89460 -0x00,0x01,0x05,0x3C,
89461 -0x3A,0x00,0x40,0x10,
89462 -0x00,0x08,0x04,0x24,
89463 -0x00,0x0D,0x04,0x24,
89464 -0x00,0x10,0x05,0x3C,
89465 -0xA9,0x45,0x00,0x0C,
89466 -0x21,0x30,0x00,0x00,
89467 -0x00,0x0D,0x04,0x24,
89468 -0x00,0x20,0x05,0x3C,
89469 -0xA9,0x45,0x00,0x0C,
89470 -0x21,0x30,0x00,0x00,
89471 -0x00,0x0D,0x04,0x24,
89472 -0x00,0x40,0x05,0x3C,
89473 -0xA9,0x45,0x00,0x0C,
89474 -0x21,0x30,0x00,0x00,
89475 -0x04,0x00,0x06,0x8E,
89476 -0x00,0x0A,0x04,0x24,
89477 -0xA9,0x45,0x00,0x0C,
89478 -0x00,0x30,0x05,0x24,
89479 -0x00,0x0A,0x04,0x24,
89480 -0x03,0x00,0x05,0x24,
89481 -0xA9,0x45,0x00,0x0C,
89482 -0x02,0x00,0x06,0x24,
89483 -0x00,0x0A,0x04,0x24,
89484 -0x08,0x00,0x05,0x24,
89485 -0x01,0x00,0x06,0x24,
89486 -0xA9,0x45,0x00,0x0C,
89487 -0x00,0x00,0x00,0x00,
89488 -0x3F,0x44,0x00,0x08,
89489 -0x00,0x00,0x00,0x00,
89490 -0x03,0x00,0x05,0x24,
89491 -0xA9,0x45,0x00,0x0C,
89492 -0x21,0x30,0x00,0x00,
89493 -0x00,0x0A,0x04,0x24,
89494 -0x08,0x00,0x05,0x24,
89495 -0xA9,0x45,0x00,0x0C,
89496 -0x01,0x00,0x06,0x24,
89497 -0x00,0x0F,0x04,0x24,
89498 -0x00,0x01,0x05,0x24,
89499 -0xA9,0x45,0x00,0x0C,
89500 -0x21,0x30,0x00,0x00,
89501 -0x00,0x0F,0x04,0x24,
89502 -0x00,0x01,0x05,0x24,
89503 -0x66,0x44,0x00,0x08,
89504 -0x01,0x00,0x06,0x24,
89505 -0x00,0x10,0x05,0x3C,
89506 -0xA9,0x45,0x00,0x0C,
89507 -0x21,0x30,0x00,0x00,
89508 -0x00,0x0D,0x04,0x24,
89509 -0x00,0x20,0x05,0x3C,
89510 -0xA9,0x45,0x00,0x0C,
89511 -0x21,0x30,0x00,0x00,
89512 -0x00,0x40,0x05,0x3C,
89513 -0x21,0x30,0x00,0x00,
89514 -0xA9,0x45,0x00,0x0C,
89515 -0x00,0x0D,0x04,0x24,
89516 -0x54,0x22,0x00,0x0C,
89517 -0x10,0x27,0x04,0x24,
89518 -0x72,0x44,0x00,0x08,
89519 -0x00,0x0F,0x04,0x24,
89520 -0x00,0x01,0x05,0x3C,
89521 -0xA9,0x45,0x00,0x0C,
89522 -0x01,0x00,0x06,0x24,
89523 -0x50,0x44,0x00,0x08,
89524 -0x00,0x0D,0x04,0x24,
89525 -0x00,0x02,0x05,0x3C,
89526 -0xA9,0x45,0x00,0x0C,
89527 -0x01,0x00,0x06,0x24,
89528 -0x2C,0x44,0x00,0x08,
89529 -0x00,0x0A,0x04,0x24,
89530 -0xE8,0xFF,0xBD,0x27,
89531 -0x25,0xB0,0x02,0x3C,
89532 -0x14,0x00,0xBF,0xAF,
89533 -0x10,0x00,0xB0,0xAF,
89534 -0x03,0x02,0x42,0x34,
89535 -0x00,0x00,0x43,0x90,
89536 -0x00,0x00,0x90,0x90,
89537 -0x25,0xB0,0x02,0x3C,
89538 -0xFF,0x00,0x63,0x30,
89539 -0xFB,0x00,0x65,0x30,
89540 -0x00,0x00,0x04,0x3A,
89541 -0x04,0x00,0x63,0x34,
89542 -0x0B,0x18,0xA4,0x00,
89543 -0x03,0x02,0x42,0x34,
89544 -0x00,0x00,0x43,0xA0,
89545 -0x12,0x00,0x00,0x12,
89546 -0x01,0x00,0x02,0x24,
89547 -0x22,0x00,0x02,0x12,
89548 -0x00,0x08,0x04,0x24,
89549 -0x1A,0x00,0x00,0x12,
89550 -0x01,0x00,0x02,0x24,
89551 -0x08,0x00,0x02,0x16,
89552 -0x00,0x00,0x00,0x00,
89553 -0xE6,0x44,0x00,0x0C,
89554 -0x21,0x20,0x00,0x00,
89555 -0x18,0x00,0x04,0x24,
89556 -0x00,0x0C,0x05,0x24,
89557 -0x21,0x30,0x00,0x00,
89558 -0x5F,0x47,0x00,0x0C,
89559 -0x00,0x00,0x00,0x00,
89560 -0x14,0x00,0xBF,0x8F,
89561 -0x10,0x00,0xB0,0x8F,
89562 -0x08,0x00,0xE0,0x03,
89563 -0x18,0x00,0xBD,0x27,
89564 -0x00,0x08,0x04,0x24,
89565 -0x01,0x00,0x05,0x24,
89566 -0xA9,0x45,0x00,0x0C,
89567 -0x21,0x30,0x00,0x00,
89568 -0x00,0x09,0x04,0x24,
89569 -0x01,0x00,0x05,0x24,
89570 -0xA9,0x45,0x00,0x0C,
89571 -0x21,0x30,0x00,0x00,
89572 -0x84,0x08,0x04,0x24,
89573 -0xFF,0xFF,0x05,0x24,
89574 -0xA9,0x45,0x00,0x0C,
89575 -0x58,0x00,0x06,0x24,
89576 -0xE6,0x44,0x00,0x0C,
89577 -0x21,0x20,0x00,0x00,
89578 -0x18,0x00,0x04,0x24,
89579 -0x00,0x0C,0x05,0x24,
89580 -0xAE,0x44,0x00,0x08,
89581 -0x01,0x00,0x06,0x24,
89582 -0x01,0x00,0x05,0x24,
89583 -0xA9,0x45,0x00,0x0C,
89584 -0x01,0x00,0x06,0x24,
89585 -0x00,0x09,0x04,0x24,
89586 -0x01,0x00,0x05,0x24,
89587 -0xA9,0x45,0x00,0x0C,
89588 -0x01,0x00,0x06,0x24,
89589 -0x00,0x0A,0x04,0x24,
89590 -0x10,0x00,0x05,0x24,
89591 -0xA9,0x45,0x00,0x0C,
89592 -0x21,0x30,0x00,0x00,
89593 -0x00,0x0D,0x04,0x24,
89594 -0x00,0x0C,0x05,0x24,
89595 -0xA9,0x45,0x00,0x0C,
89596 -0x21,0x30,0x00,0x00,
89597 -0x84,0x08,0x04,0x24,
89598 -0xFF,0xFF,0x05,0x24,
89599 -0xA9,0x45,0x00,0x0C,
89600 -0x18,0x00,0x06,0x24,
89601 -0xA5,0x44,0x00,0x08,
89602 -0x00,0x00,0x00,0x00,
89603 -0x25,0xB0,0x02,0x3C,
89604 -0x21,0x20,0x82,0x00,
89605 -0x00,0x00,0x85,0xAC,
89606 -0x21,0x10,0x00,0x00,
89607 -0x01,0x00,0x42,0x24,
89608 -0xFF,0x00,0x42,0x30,
89609 -0x06,0x00,0x43,0x2C,
89610 -0xFC,0xFF,0x60,0x14,
89611 -0x00,0x00,0x00,0x00,
89612 -0x08,0x00,0xE0,0x03,
89613 -0x00,0x00,0x00,0x00,
89614 -0x25,0xB0,0x05,0x3C,
89615 -0x01,0x80,0x03,0x3C,
89616 -0x21,0x38,0x80,0x00,
89617 -0x18,0x03,0xA2,0x34,
89618 -0x98,0x13,0x63,0x24,
89619 -0x01,0x00,0x04,0x24,
89620 -0x00,0x00,0x43,0xAC,
89621 -0x35,0x00,0xE4,0x10,
89622 -0x00,0x00,0x00,0x00,
89623 -0x08,0x00,0xE0,0x10,
89624 -0x20,0x08,0xA2,0x34,
89625 -0x02,0x00,0x02,0x24,
89626 -0x83,0x00,0xE2,0x10,
89627 -0x03,0x00,0x02,0x24,
89628 -0x5A,0x00,0xE2,0x10,
89629 -0x00,0x00,0x00,0x00,
89630 -0x08,0x00,0xE0,0x03,
89631 -0x00,0x00,0x00,0x00,
89632 -0x02,0x80,0x03,0x3C,
89633 -0x00,0x00,0x44,0x8C,
89634 -0x30,0x1F,0x66,0x24,
89635 -0x70,0x08,0x02,0x24,
89636 -0xE0,0x08,0x03,0x24,
89637 -0x34,0x1C,0xC2,0xAC,
89638 -0x40,0x08,0x02,0x24,
89639 -0x38,0x1C,0xC3,0xAC,
89640 -0x44,0x1C,0xC2,0xAC,
89641 -0x78,0x08,0x03,0x24,
89642 -0x0C,0x08,0x02,0x24,
89643 -0x48,0x1C,0xC3,0xAC,
89644 -0x4C,0x1C,0xC2,0xAC,
89645 -0x10,0x08,0x03,0x24,
89646 -0x20,0x08,0x02,0x24,
89647 -0x50,0x1C,0xC3,0xAC,
89648 -0x54,0x1C,0xC2,0xAC,
89649 -0x24,0x08,0x03,0x24,
89650 -0x58,0x08,0x02,0x24,
89651 -0x58,0x1C,0xC3,0xAC,
89652 -0x5C,0x1C,0xC2,0xAC,
89653 -0x50,0x0C,0x03,0x24,
89654 -0x54,0x0C,0x02,0x24,
89655 -0x60,0x1C,0xC3,0xAC,
89656 -0x64,0x1C,0xC2,0xAC,
89657 -0x14,0x0C,0x03,0x24,
89658 -0x10,0x0C,0x02,0x24,
89659 -0x60,0x08,0x05,0x24,
89660 -0x68,0x1C,0xC3,0xAC,
89661 -0x6C,0x1C,0xC2,0xAC,
89662 -0x80,0x0C,0x03,0x24,
89663 -0x84,0x0C,0x02,0x24,
89664 -0x00,0x01,0x84,0x30,
89665 -0x74,0x1C,0xC2,0xAC,
89666 -0x40,0x1C,0xC5,0xAC,
89667 -0x70,0x1C,0xC3,0xAC,
89668 -0x31,0x1C,0xC0,0xA0,
89669 -0x3C,0x1C,0xC5,0xAC,
89670 -0x02,0x00,0x80,0x10,
89671 -0xA0,0x08,0x02,0x24,
89672 -0xB8,0x08,0x02,0x24,
89673 -0x08,0x00,0xE0,0x03,
89674 -0x78,0x1C,0xC2,0xAC,
89675 -0x28,0x08,0xA2,0x34,
89676 -0x02,0x80,0x03,0x3C,
89677 -0x00,0x00,0x44,0x8C,
89678 -0x30,0x1F,0x66,0x24,
89679 -0x70,0x08,0x02,0x24,
89680 -0xE0,0x08,0x03,0x24,
89681 -0x34,0x1C,0xC2,0xAC,
89682 -0x44,0x08,0x02,0x24,
89683 -0x38,0x1C,0xC3,0xAC,
89684 -0x44,0x1C,0xC2,0xAC,
89685 -0x78,0x08,0x03,0x24,
89686 -0x0C,0x08,0x02,0x24,
89687 -0x48,0x1C,0xC3,0xAC,
89688 -0x4C,0x1C,0xC2,0xAC,
89689 -0x14,0x08,0x03,0x24,
89690 -0x28,0x08,0x02,0x24,
89691 -0x50,0x1C,0xC3,0xAC,
89692 -0x54,0x1C,0xC2,0xAC,
89693 -0x2C,0x08,0x03,0x24,
89694 -0x58,0x08,0x02,0x24,
89695 -0x58,0x1C,0xC3,0xAC,
89696 -0x5C,0x1C,0xC2,0xAC,
89697 -0x58,0x0C,0x03,0x24,
89698 -0x5C,0x0C,0x02,0x24,
89699 -0x60,0x1C,0xC3,0xAC,
89700 -0x64,0x1C,0xC2,0xAC,
89701 -0x1C,0x0C,0x03,0x24,
89702 -0x18,0x0C,0x02,0x24,
89703 -0x64,0x08,0x05,0x24,
89704 -0x68,0x1C,0xC3,0xAC,
89705 -0x6C,0x1C,0xC2,0xAC,
89706 -0x88,0x0C,0x03,0x24,
89707 -0x8C,0x0C,0x02,0x24,
89708 -0x00,0x01,0x84,0x30,
89709 -0x74,0x1C,0xC2,0xAC,
89710 -0x31,0x1C,0xC7,0xA0,
89711 -0x40,0x1C,0xC5,0xAC,
89712 -0x70,0x1C,0xC3,0xAC,
89713 -0x3C,0x1C,0xC5,0xAC,
89714 -0xD6,0xFF,0x80,0x10,
89715 -0xA4,0x08,0x02,0x24,
89716 -0xBC,0x08,0x02,0x24,
89717 -0x08,0x00,0xE0,0x03,
89718 -0x78,0x1C,0xC2,0xAC,
89719 -0x02,0x80,0x02,0x3C,
89720 -0x30,0x1F,0x42,0x24,
89721 -0xAC,0x08,0x03,0x24,
89722 -0x78,0x1C,0x43,0xAC,
89723 -0x74,0x08,0x03,0x24,
89724 -0xE4,0x08,0x04,0x24,
89725 -0x34,0x1C,0x43,0xAC,
89726 -0x4C,0x08,0x03,0x24,
89727 -0x38,0x1C,0x44,0xAC,
89728 -0x44,0x1C,0x43,0xAC,
89729 -0x7C,0x08,0x04,0x24,
89730 -0x0C,0x08,0x03,0x24,
89731 -0x48,0x1C,0x44,0xAC,
89732 -0x4C,0x1C,0x43,0xAC,
89733 -0x1C,0x08,0x04,0x24,
89734 -0x38,0x08,0x03,0x24,
89735 -0x50,0x1C,0x44,0xAC,
89736 -0x54,0x1C,0x43,0xAC,
89737 -0x3C,0x08,0x04,0x24,
89738 -0x5C,0x08,0x03,0x24,
89739 -0x58,0x1C,0x44,0xAC,
89740 -0x5C,0x1C,0x43,0xAC,
89741 -0x68,0x0C,0x04,0x24,
89742 -0x6C,0x0C,0x03,0x24,
89743 -0x60,0x1C,0x44,0xAC,
89744 -0x64,0x1C,0x43,0xAC,
89745 -0x2C,0x0C,0x04,0x24,
89746 -0x28,0x0C,0x03,0x24,
89747 -0x6C,0x08,0x05,0x24,
89748 -0x68,0x1C,0x44,0xAC,
89749 -0x6C,0x1C,0x43,0xAC,
89750 -0x98,0x0C,0x04,0x24,
89751 -0x9C,0x0C,0x03,0x24,
89752 -0x31,0x1C,0x47,0xA0,
89753 -0x40,0x1C,0x45,0xAC,
89754 -0x70,0x1C,0x44,0xAC,
89755 -0x74,0x1C,0x43,0xAC,
89756 -0x08,0x00,0xE0,0x03,
89757 -0x3C,0x1C,0x45,0xAC,
89758 -0x02,0x80,0x02,0x3C,
89759 -0x30,0x1F,0x42,0x24,
89760 -0xA8,0x08,0x03,0x24,
89761 -0x78,0x1C,0x43,0xAC,
89762 -0x74,0x08,0x03,0x24,
89763 -0xE4,0x08,0x04,0x24,
89764 -0x34,0x1C,0x43,0xAC,
89765 -0x48,0x08,0x03,0x24,
89766 -0x38,0x1C,0x44,0xAC,
89767 -0x44,0x1C,0x43,0xAC,
89768 -0x7C,0x08,0x04,0x24,
89769 -0x0C,0x08,0x03,0x24,
89770 -0x48,0x1C,0x44,0xAC,
89771 -0x4C,0x1C,0x43,0xAC,
89772 -0x18,0x08,0x04,0x24,
89773 -0x30,0x08,0x03,0x24,
89774 -0x50,0x1C,0x44,0xAC,
89775 -0x54,0x1C,0x43,0xAC,
89776 -0x34,0x08,0x04,0x24,
89777 -0x5C,0x08,0x03,0x24,
89778 -0x58,0x1C,0x44,0xAC,
89779 -0x5C,0x1C,0x43,0xAC,
89780 -0x60,0x0C,0x04,0x24,
89781 -0x64,0x0C,0x03,0x24,
89782 -0x60,0x1C,0x44,0xAC,
89783 -0x64,0x1C,0x43,0xAC,
89784 -0x24,0x0C,0x04,0x24,
89785 -0x20,0x0C,0x03,0x24,
89786 -0x68,0x08,0x05,0x24,
89787 -0x68,0x1C,0x44,0xAC,
89788 -0x6C,0x1C,0x43,0xAC,
89789 -0x90,0x0C,0x04,0x24,
89790 -0x94,0x0C,0x03,0x24,
89791 -0x31,0x1C,0x47,0xA0,
89792 -0x40,0x1C,0x45,0xAC,
89793 -0x70,0x1C,0x44,0xAC,
89794 -0x74,0x1C,0x43,0xAC,
89795 -0x08,0x00,0xE0,0x03,
89796 -0x3C,0x1C,0x45,0xAC,
89797 -0xA2,0x45,0x00,0x08,
89798 -0x21,0x18,0x00,0x00,
89799 -0x20,0x00,0x62,0x2C,
89800 -0x06,0x00,0x40,0x10,
89801 -0x00,0x00,0x00,0x00,
89802 -0x06,0x10,0x64,0x00,
89803 -0x01,0x00,0x42,0x30,
89804 -0xFA,0xFF,0x40,0x10,
89805 -0x01,0x00,0x63,0x24,
89806 -0xFF,0xFF,0x63,0x24,
89807 -0x08,0x00,0xE0,0x03,
89808 -0x21,0x10,0x60,0x00,
89809 -0xD8,0xFF,0xBD,0x27,
89810 -0x14,0x00,0xB1,0xAF,
89811 -0x25,0xB0,0x02,0x3C,
89812 -0x21,0x88,0xA0,0x00,
89813 -0xFF,0xFF,0x03,0x24,
89814 -0x1C,0x00,0xB3,0xAF,
89815 -0x18,0x00,0xB2,0xAF,
89816 -0x10,0x00,0xB0,0xAF,
89817 -0x20,0x00,0xBF,0xAF,
89818 -0x21,0x98,0xC0,0x00,
89819 -0x21,0x28,0xC0,0x00,
89820 -0x21,0x90,0x80,0x00,
89821 -0x09,0x00,0x23,0x12,
89822 -0x21,0x80,0x82,0x00,
89823 -0x00,0x00,0x10,0x8E,
89824 -0x9D,0x45,0x00,0x0C,
89825 -0x21,0x20,0x20,0x02,
89826 -0x27,0x28,0x11,0x00,
89827 -0x24,0x28,0xB0,0x00,
89828 -0x04,0x10,0x53,0x00,
89829 -0x25,0x28,0xA2,0x00,
89830 -0x21,0x20,0x40,0x02,
89831 -0x20,0x00,0xBF,0x8F,
89832 -0x1C,0x00,0xB3,0x8F,
89833 -0x18,0x00,0xB2,0x8F,
89834 -0x14,0x00,0xB1,0x8F,
89835 -0x10,0x00,0xB0,0x8F,
89836 -0xDB,0x44,0x00,0x08,
89837 -0x28,0x00,0xBD,0x27,
89838 -0x02,0x80,0x02,0x3C,
89839 -0x21,0x30,0x80,0x00,
89840 -0x74,0x3B,0x44,0x8C,
89841 -0xA9,0x45,0x00,0x08,
89842 -0xFF,0xFF,0x05,0x24,
89843 -0xE0,0xFF,0xBD,0x27,
89844 -0x25,0xB0,0x02,0x3C,
89845 -0x18,0x00,0xBF,0xAF,
89846 -0x14,0x00,0xB1,0xAF,
89847 -0x10,0x00,0xB0,0xAF,
89848 -0x21,0x20,0x82,0x00,
89849 -0x00,0x00,0x90,0x8C,
89850 -0x21,0x88,0xA0,0x00,
89851 -0x9D,0x45,0x00,0x0C,
89852 -0x21,0x20,0xA0,0x00,
89853 -0x24,0x80,0x11,0x02,
89854 -0x06,0x10,0x50,0x00,
89855 -0x18,0x00,0xBF,0x8F,
89856 -0x14,0x00,0xB1,0x8F,
89857 -0x10,0x00,0xB0,0x8F,
89858 -0x08,0x00,0xE0,0x03,
89859 -0x20,0x00,0xBD,0x27,
89860 -0xD8,0xFF,0xBD,0x27,
89861 -0x14,0x00,0xB1,0xAF,
89862 -0x02,0x80,0x11,0x3C,
89863 -0x20,0x00,0xBF,0xAF,
89864 -0x18,0x00,0xB2,0xAF,
89865 -0x1C,0x00,0xB3,0xAF,
89866 -0x10,0x00,0xB0,0xAF,
89867 -0x30,0x1F,0x31,0x26,
89868 -0x58,0x1C,0x23,0x8E,
89869 -0x25,0xB0,0x02,0x3C,
89870 -0x24,0x08,0x53,0x8C,
89871 -0x21,0x18,0x62,0x00,
89872 -0x00,0x00,0x70,0x8C,
89873 -0x7F,0x80,0x02,0x3C,
89874 -0xFF,0xFF,0x42,0x34,
89875 -0xFF,0x7F,0x05,0x3C,
89876 -0x24,0x80,0x02,0x02,
89877 -0xC0,0x25,0x04,0x00,
89878 -0xFF,0xFF,0xA5,0x34,
89879 -0x24,0x28,0x65,0x02,
89880 -0x25,0x80,0x04,0x02,
89881 -0xDB,0x44,0x00,0x0C,
89882 -0x24,0x08,0x04,0x24,
89883 -0x25,0x22,0x00,0x0C,
89884 -0x01,0x00,0x04,0x24,
89885 -0x00,0x80,0x12,0x3C,
89886 -0x58,0x1C,0x24,0x8E,
89887 -0x25,0x80,0x12,0x02,
89888 -0xDB,0x44,0x00,0x0C,
89889 -0x21,0x28,0x00,0x02,
89890 -0x25,0x22,0x00,0x0C,
89891 -0x01,0x00,0x04,0x24,
89892 -0x25,0x28,0x72,0x02,
89893 -0xDB,0x44,0x00,0x0C,
89894 -0x24,0x08,0x04,0x24,
89895 -0x25,0x22,0x00,0x0C,
89896 -0x01,0x00,0x04,0x24,
89897 -0x78,0x1C,0x24,0x8E,
89898 -0x0F,0x00,0x05,0x3C,
89899 -0x20,0x00,0xBF,0x8F,
89900 -0x1C,0x00,0xB3,0x8F,
89901 -0x18,0x00,0xB2,0x8F,
89902 -0x14,0x00,0xB1,0x8F,
89903 -0x10,0x00,0xB0,0x8F,
89904 -0xFF,0xFF,0xA5,0x34,
89905 -0xCB,0x45,0x00,0x08,
89906 -0x28,0x00,0xBD,0x27,
89907 -0xE0,0xFF,0xBD,0x27,
89908 -0x14,0x00,0xB1,0xAF,
89909 -0x02,0x80,0x11,0x3C,
89910 -0x10,0x00,0xB0,0xAF,
89911 -0x18,0x00,0xBF,0xAF,
89912 -0x30,0x1F,0x27,0x26,
89913 -0x33,0x1C,0xE5,0x90,
89914 -0x01,0x80,0x03,0x3C,
89915 -0x25,0xB0,0x02,0x3C,
89916 -0x2C,0x18,0x63,0x24,
89917 -0x18,0x03,0x42,0x34,
89918 -0x02,0x00,0x06,0x24,
89919 -0x00,0x00,0x43,0xAC,
89920 -0x34,0x00,0xA6,0x10,
89921 -0x21,0x80,0x80,0x00,
89922 -0x03,0x00,0x03,0x24,
89923 -0x3A,0x00,0xA3,0x10,
89924 -0x2E,0x00,0x02,0x2E,
89925 -0x10,0x00,0x02,0x2E,
89926 -0x07,0x00,0x40,0x10,
89927 -0x00,0x00,0x00,0x00,
89928 -0xFF,0x00,0x04,0x32,
89929 -0x18,0x00,0xBF,0x8F,
89930 -0x14,0x00,0xB1,0x8F,
89931 -0x10,0x00,0xB0,0x8F,
89932 -0xDC,0x45,0x00,0x08,
89933 -0x20,0x00,0xBD,0x27,
89934 -0xFA,0xFF,0xA6,0x14,
89935 -0xFF,0x00,0x04,0x32,
89936 -0x31,0x1C,0xE4,0x90,
89937 -0x01,0x00,0x02,0x24,
89938 -0x33,0x00,0x82,0x10,
89939 -0x02,0x00,0x82,0x28,
89940 -0x38,0x00,0x40,0x14,
89941 -0x00,0x00,0x00,0x00,
89942 -0x38,0x00,0x85,0x10,
89943 -0x30,0x1F,0x22,0x26,
89944 -0x2E,0x00,0x83,0x10,
89945 -0x00,0x00,0x00,0x00,
89946 -0x00,0x08,0x04,0x24,
89947 -0xCB,0x45,0x00,0x0C,
89948 -0xFF,0xFF,0x05,0x24,
89949 -0xFF,0xFC,0x06,0x3C,
89950 -0xFF,0xFF,0xC6,0x34,
89951 -0x24,0x30,0x46,0x00,
89952 -0x00,0x08,0x04,0x24,
89953 -0xA9,0x45,0x00,0x0C,
89954 -0xFF,0xFF,0x05,0x24,
89955 -0x30,0x1F,0x22,0x26,
89956 -0x31,0x1C,0x44,0x90,
89957 -0x01,0x00,0x03,0x24,
89958 -0x07,0x00,0x83,0x10,
89959 -0x02,0x00,0x82,0x28,
89960 -0x2C,0x00,0x40,0x14,
89961 -0x02,0x00,0x02,0x24,
89962 -0x2C,0x00,0x82,0x10,
89963 -0x03,0x00,0x02,0x24,
89964 -0xDB,0xFF,0x82,0x14,
89965 -0x00,0x00,0x00,0x00,
89966 -0x30,0x1F,0x22,0x26,
89967 -0x34,0x1C,0x44,0x8C,
89968 -0x0F,0x00,0x05,0x3C,
89969 -0xA9,0x45,0x00,0x0C,
89970 -0x21,0x30,0x00,0x00,
89971 -0x21,0x46,0x00,0x08,
89972 -0xFF,0x00,0x04,0x32,
89973 -0x25,0x00,0x82,0x2C,
89974 -0xCC,0xFF,0x40,0x14,
89975 -0x03,0x00,0x03,0x24,
89976 -0x18,0x00,0xBF,0x8F,
89977 -0x14,0x00,0xB1,0x8F,
89978 -0x10,0x00,0xB0,0x8F,
89979 -0x21,0x10,0x00,0x00,
89980 -0x08,0x00,0xE0,0x03,
89981 -0x20,0x00,0xBD,0x27,
89982 -0xC7,0xFF,0x40,0x14,
89983 -0x10,0x00,0x02,0x2E,
89984 -0x18,0x00,0xBF,0x8F,
89985 -0x14,0x00,0xB1,0x8F,
89986 -0x10,0x00,0xB0,0x8F,
89987 -0x21,0x10,0x00,0x00,
89988 -0x08,0x00,0xE0,0x03,
89989 -0x20,0x00,0xBD,0x27,
89990 -0x30,0x1F,0x22,0x26,
89991 -0x34,0x1C,0x44,0x8C,
89992 -0x0F,0x00,0x05,0x3C,
89993 -0xA9,0x45,0x00,0x0C,
89994 -0x0F,0x00,0x06,0x24,
89995 -0x33,0x46,0x00,0x08,
89996 -0x00,0x08,0x04,0x24,
89997 -0xCC,0xFF,0x80,0x14,
89998 -0x30,0x1F,0x22,0x26,
89999 -0x34,0x1C,0x44,0x8C,
90000 -0x0F,0x00,0x05,0x24,
90001 -0xA9,0x45,0x00,0x0C,
90002 -0x0F,0x00,0x06,0x24,
90003 -0x33,0x46,0x00,0x08,
90004 -0x00,0x08,0x04,0x24,
90005 -0xB2,0xFF,0x80,0x14,
90006 -0x00,0x00,0x00,0x00,
90007 -0x30,0x1F,0x22,0x26,
90008 -0x34,0x1C,0x44,0x8C,
90009 -0x0F,0x00,0x05,0x24,
90010 -0xA9,0x45,0x00,0x0C,
90011 -0x21,0x30,0x00,0x00,
90012 -0x21,0x46,0x00,0x08,
90013 -0xFF,0x00,0x04,0x32,
90014 -0xE0,0xFF,0xBD,0x27,
90015 -0x14,0x00,0xB1,0xAF,
90016 -0x02,0x80,0x11,0x3C,
90017 -0x30,0x1F,0x28,0x26,
90018 -0x33,0x1C,0x06,0x91,
90019 -0x01,0x80,0x03,0x3C,
90020 -0x25,0xB0,0x02,0x3C,
90021 -0xD8,0x19,0x63,0x24,
90022 -0x18,0x03,0x42,0x34,
90023 -0x02,0x00,0x07,0x24,
90024 -0x18,0x00,0xB2,0xAF,
90025 -0x10,0x00,0xB0,0xAF,
90026 -0x1C,0x00,0xBF,0xAF,
90027 -0x00,0x00,0x43,0xAC,
90028 -0x21,0x90,0xA0,0x00,
90029 -0x39,0x00,0xC7,0x10,
90030 -0xFF,0x00,0x90,0x30,
90031 -0x03,0x00,0x03,0x24,
90032 -0x3F,0x00,0xC3,0x10,
90033 -0x2E,0x00,0x02,0x2E,
90034 -0x10,0x00,0x02,0x2E,
90035 -0x0C,0x00,0x40,0x10,
90036 -0x00,0x00,0x00,0x00,
90037 -0x0F,0x00,0x04,0x3C,
90038 -0xFF,0xFF,0x84,0x34,
90039 -0x24,0x20,0x44,0x02,
90040 -0x00,0x15,0x10,0x00,
90041 -0x1C,0x00,0xBF,0x8F,
90042 -0x18,0x00,0xB2,0x8F,
90043 -0x14,0x00,0xB1,0x8F,
90044 -0x10,0x00,0xB0,0x8F,
90045 -0x25,0x20,0x44,0x00,
90046 -0xC6,0x45,0x00,0x08,
90047 -0x20,0x00,0xBD,0x27,
90048 -0xF5,0xFF,0xC7,0x14,
90049 -0x0F,0x00,0x04,0x3C,
90050 -0x31,0x1C,0x04,0x91,
90051 -0x01,0x00,0x02,0x24,
90052 -0x33,0x00,0x82,0x10,
90053 -0x02,0x00,0x82,0x28,
90054 -0x38,0x00,0x40,0x14,
90055 -0x00,0x00,0x00,0x00,
90056 -0x38,0x00,0x86,0x10,
90057 -0x30,0x1F,0x22,0x26,
90058 -0x2E,0x00,0x83,0x10,
90059 -0x00,0x00,0x00,0x00,
90060 -0x00,0x08,0x04,0x24,
90061 -0xCB,0x45,0x00,0x0C,
90062 -0xFF,0xFF,0x05,0x24,
90063 -0xFF,0xFC,0x06,0x3C,
90064 -0xFF,0xFF,0xC6,0x34,
90065 -0x24,0x30,0x46,0x00,
90066 -0x00,0x08,0x04,0x24,
90067 -0xA9,0x45,0x00,0x0C,
90068 -0xFF,0xFF,0x05,0x24,
90069 -0x30,0x1F,0x22,0x26,
90070 -0x31,0x1C,0x44,0x90,
90071 -0x01,0x00,0x03,0x24,
90072 -0x07,0x00,0x83,0x10,
90073 -0x02,0x00,0x82,0x28,
90074 -0x2C,0x00,0x40,0x14,
90075 -0x02,0x00,0x02,0x24,
90076 -0x2C,0x00,0x82,0x10,
90077 -0x03,0x00,0x02,0x24,
90078 -0xD6,0xFF,0x82,0x14,
90079 -0x00,0x00,0x00,0x00,
90080 -0x30,0x1F,0x22,0x26,
90081 -0x34,0x1C,0x44,0x8C,
90082 -0x0F,0x00,0x05,0x3C,
90083 -0xA9,0x45,0x00,0x0C,
90084 -0x21,0x30,0x00,0x00,
90085 -0x8E,0x46,0x00,0x08,
90086 -0x0F,0x00,0x04,0x3C,
90087 -0x25,0x00,0x02,0x2E,
90088 -0xC7,0xFF,0x40,0x14,
90089 -0x03,0x00,0x03,0x24,
90090 -0x1C,0x00,0xBF,0x8F,
90091 -0x18,0x00,0xB2,0x8F,
90092 -0x14,0x00,0xB1,0x8F,
90093 -0x10,0x00,0xB0,0x8F,
90094 -0x08,0x00,0xE0,0x03,
90095 -0x20,0x00,0xBD,0x27,
90096 -0xC1,0xFF,0x40,0x14,
90097 -0x00,0x00,0x00,0x00,
90098 -0x1C,0x00,0xBF,0x8F,
90099 -0x18,0x00,0xB2,0x8F,
90100 -0x14,0x00,0xB1,0x8F,
90101 -0x10,0x00,0xB0,0x8F,
90102 -0x08,0x00,0xE0,0x03,
90103 -0x20,0x00,0xBD,0x27,
90104 -0x30,0x1F,0x22,0x26,
90105 -0x34,0x1C,0x44,0x8C,
90106 -0x0F,0x00,0x05,0x3C,
90107 -0xA9,0x45,0x00,0x0C,
90108 -0x0F,0x00,0x06,0x24,
90109 -0xA5,0x46,0x00,0x08,
90110 -0x00,0x08,0x04,0x24,
90111 -0xCC,0xFF,0x80,0x14,
90112 -0x30,0x1F,0x22,0x26,
90113 -0x34,0x1C,0x44,0x8C,
90114 -0x0F,0x00,0x05,0x24,
90115 -0xA9,0x45,0x00,0x0C,
90116 -0x0F,0x00,0x06,0x24,
90117 -0xA5,0x46,0x00,0x08,
90118 -0x00,0x08,0x04,0x24,
90119 -0xAD,0xFF,0x80,0x14,
90120 -0x00,0x00,0x00,0x00,
90121 -0x30,0x1F,0x22,0x26,
90122 -0x34,0x1C,0x44,0x8C,
90123 -0x0F,0x00,0x05,0x24,
90124 -0xA9,0x45,0x00,0x0C,
90125 -0x21,0x30,0x00,0x00,
90126 -0x8E,0x46,0x00,0x08,
90127 -0x0F,0x00,0x04,0x3C,
90128 -0xE8,0xFF,0xBD,0x27,
90129 -0x10,0x00,0xB0,0xAF,
90130 -0x21,0x80,0x80,0x00,
90131 -0x14,0x00,0xBF,0xAF,
90132 -0xDC,0x45,0x00,0x0C,
90133 -0x21,0x20,0x00,0x00,
90134 -0x40,0x01,0x44,0x34,
90135 -0x21,0x18,0x40,0x00,
90136 -0x1F,0x00,0x02,0x2E,
90137 -0x00,0x23,0x04,0x00,
90138 -0x10,0x00,0x40,0x10,
90139 -0x10,0x00,0x05,0x2E,
90140 -0x00,0x01,0x64,0x34,
90141 -0x06,0x00,0xA0,0x10,
90142 -0x00,0x23,0x04,0x00,
90143 -0x21,0x10,0x00,0x02,
90144 -0x14,0x00,0xBF,0x8F,
90145 -0x10,0x00,0xB0,0x8F,
90146 -0x08,0x00,0xE0,0x03,
90147 -0x18,0x00,0xBD,0x27,
90148 -0xC6,0x45,0x00,0x0C,
90149 -0xF1,0xFF,0x10,0x26,
90150 -0x21,0x10,0x00,0x02,
90151 -0x14,0x00,0xBF,0x8F,
90152 -0x10,0x00,0xB0,0x8F,
90153 -0x08,0x00,0xE0,0x03,
90154 -0x18,0x00,0xBD,0x27,
90155 -0xC6,0x45,0x00,0x0C,
90156 -0xE2,0xFF,0x10,0x26,
90157 -0x21,0x10,0x00,0x02,
90158 -0x14,0x00,0xBF,0x8F,
90159 -0x10,0x00,0xB0,0x8F,
90160 -0x08,0x00,0xE0,0x03,
90161 -0x18,0x00,0xBD,0x27,
90162 -0xE0,0xFF,0xBD,0x27,
90163 -0x25,0xB0,0x02,0x3C,
90164 -0x18,0x00,0xBF,0xAF,
90165 -0x14,0x00,0xB1,0xAF,
90166 -0x10,0x00,0xB0,0xAF,
90167 -0x21,0x20,0x82,0x00,
90168 -0x00,0x00,0x90,0x8C,
90169 -0x21,0x88,0xA0,0x00,
90170 -0x9D,0x45,0x00,0x0C,
90171 -0x21,0x20,0xA0,0x00,
90172 -0x24,0x80,0x11,0x02,
90173 -0x06,0x10,0x50,0x00,
90174 -0x18,0x00,0xBF,0x8F,
90175 -0x14,0x00,0xB1,0x8F,
90176 -0x10,0x00,0xB0,0x8F,
90177 -0x08,0x00,0xE0,0x03,
90178 -0x20,0x00,0xBD,0x27,
90179 -0xD8,0xFF,0xBD,0x27,
90180 -0x25,0xB0,0x02,0x3C,
90181 -0x18,0x00,0xB2,0xAF,
90182 -0x21,0x90,0x82,0x00,
90183 -0xFF,0xFF,0x02,0x24,
90184 -0x1C,0x00,0xB3,0xAF,
90185 -0x14,0x00,0xB1,0xAF,
90186 -0x20,0x00,0xBF,0xAF,
90187 -0x10,0x00,0xB0,0xAF,
90188 -0x21,0x88,0xA0,0x00,
90189 -0x21,0x20,0xA0,0x00,
90190 -0x21,0x18,0x40,0x02,
90191 -0x10,0x00,0xA2,0x10,
90192 -0x21,0x98,0xC0,0x00,
90193 -0x00,0x00,0x50,0x8E,
90194 -0x9D,0x45,0x00,0x0C,
90195 -0x00,0x00,0x00,0x00,
90196 -0x27,0x18,0x11,0x00,
90197 -0x24,0x18,0x70,0x00,
90198 -0x04,0x10,0x53,0x00,
90199 -0x25,0x18,0x62,0x00,
90200 -0x00,0x00,0x43,0xAE,
90201 -0x20,0x00,0xBF,0x8F,
90202 -0x1C,0x00,0xB3,0x8F,
90203 -0x18,0x00,0xB2,0x8F,
90204 -0x14,0x00,0xB1,0x8F,
90205 -0x10,0x00,0xB0,0x8F,
90206 -0x08,0x00,0xE0,0x03,
90207 -0x28,0x00,0xBD,0x27,
90208 -0x20,0x00,0xBF,0x8F,
90209 -0x1C,0x00,0xB3,0x8F,
90210 -0x18,0x00,0xB2,0x8F,
90211 -0x14,0x00,0xB1,0x8F,
90212 -0x10,0x00,0xB0,0x8F,
90213 -0x28,0x00,0xBD,0x27,
90214 -0x00,0x00,0x66,0xAC,
90215 -0x08,0x00,0xE0,0x03,
90216 -0x00,0x00,0x00,0x00,
90217 -0x25,0xB0,0x02,0x3C,
90218 -0x21,0x38,0x82,0x00,
90219 -0xFF,0xFF,0x02,0x24,
90220 -0x27,0x40,0x05,0x00,
90221 -0x08,0x00,0xA2,0x10,
90222 -0x24,0x18,0xC5,0x00,
90223 -0x00,0x00,0xE2,0x8C,
90224 -0x00,0x00,0x00,0x00,
90225 -0x24,0x10,0x02,0x01,
90226 -0x25,0x10,0x43,0x00,
90227 -0x00,0x00,0xE2,0xAC,
90228 -0x08,0x00,0xE0,0x03,
90229 -0x00,0x00,0x00,0x00,
90230 -0x00,0x00,0xE6,0xAC,
90231 -0x08,0x00,0xE0,0x03,
90232 -0x00,0x00,0x00,0x00,
90233 -0x21,0x38,0xA0,0x00,
90234 -0x25,0xB0,0x02,0x3C,
90235 -0xFF,0xFF,0x03,0x24,
90236 -0x27,0x48,0x05,0x00,
90237 -0x24,0x40,0xC7,0x00,
90238 -0x21,0x28,0xC0,0x00,
90239 -0x05,0x00,0xE3,0x10,
90240 -0x21,0x30,0x82,0x00,
90241 -0x00,0x00,0xC5,0x8C,
90242 -0x00,0x00,0x00,0x00,
90243 -0x24,0x28,0x25,0x01,
90244 -0x25,0x28,0xA8,0x00,
90245 -0xDB,0x44,0x00,0x08,
90246 -0x00,0x00,0x00,0x00,
90247 -0x01,0x80,0x02,0x3C,
90248 -0x25,0xB0,0x03,0x3C,
90249 -0xD8,0xFF,0xBD,0x27,
90250 -0x7C,0x1D,0x42,0x24,
90251 -0x18,0x03,0x63,0x34,
90252 -0x20,0x00,0xB4,0xAF,
90253 -0x1C,0x00,0xB3,0xAF,
90254 -0x14,0x00,0xB1,0xAF,
90255 -0x24,0x00,0xBF,0xAF,
90256 -0x18,0x00,0xB2,0xAF,
90257 -0x10,0x00,0xB0,0xAF,
90258 -0x00,0x00,0x62,0xAC,
90259 -0x21,0x88,0xA0,0x00,
90260 -0x21,0x98,0xC0,0x00,
90261 -0x21,0xA0,0x80,0x00,
90262 -0x00,0x60,0x12,0x40,
90263 -0x01,0x00,0x41,0x36,
90264 -0x01,0x00,0x21,0x38,
90265 -0x00,0x60,0x81,0x40,
90266 -0x0F,0x00,0x02,0x3C,
90267 -0xFF,0xFF,0x42,0x34,
90268 -0x0A,0x00,0x22,0x12,
90269 -0x21,0x28,0xC0,0x00,
90270 -0x0B,0x46,0x00,0x0C,
90271 -0x00,0x00,0x00,0x00,
90272 -0x21,0x20,0x20,0x02,
90273 -0x9D,0x45,0x00,0x0C,
90274 -0x21,0x80,0x40,0x00,
90275 -0x27,0x28,0x11,0x00,
90276 -0x24,0x28,0xB0,0x00,
90277 -0x04,0x10,0x53,0x00,
90278 -0x25,0x28,0xA2,0x00,
90279 -0x76,0x46,0x00,0x0C,
90280 -0xFF,0x00,0x84,0x32,
90281 -0x00,0x60,0x92,0x40,
90282 -0x24,0x00,0xBF,0x8F,
90283 -0x20,0x00,0xB4,0x8F,
90284 -0x1C,0x00,0xB3,0x8F,
90285 -0x18,0x00,0xB2,0x8F,
90286 -0x14,0x00,0xB1,0x8F,
90287 -0x10,0x00,0xB0,0x8F,
90288 -0x08,0x00,0xE0,0x03,
90289 -0x28,0x00,0xBD,0x27,
90290 -0x01,0x80,0x03,0x3C,
90291 -0x25,0xB0,0x02,0x3C,
90292 -0x28,0x1E,0x63,0x24,
90293 -0x18,0x03,0x42,0x34,
90294 -0xE0,0xFF,0xBD,0x27,
90295 -0x00,0x00,0x43,0xAC,
90296 -0x18,0x00,0xBF,0xAF,
90297 -0x14,0x00,0xB1,0xAF,
90298 -0x10,0x00,0xB0,0xAF,
90299 -0x0B,0x46,0x00,0x0C,
90300 -0x21,0x88,0xA0,0x00,
90301 -0x21,0x80,0x40,0x00,
90302 -0x9D,0x45,0x00,0x0C,
90303 -0x21,0x20,0x20,0x02,
90304 -0x24,0x80,0x11,0x02,
90305 -0x06,0x10,0x50,0x00,
90306 -0x18,0x00,0xBF,0x8F,
90307 -0x14,0x00,0xB1,0x8F,
90308 -0x10,0x00,0xB0,0x8F,
90309 -0x08,0x00,0xE0,0x03,
90310 -0x20,0x00,0xBD,0x27,
90311 -0xD0,0xFF,0xBD,0x27,
90312 -0x24,0x00,0xB5,0xAF,
90313 -0xFF,0x00,0x84,0x30,
90314 -0x21,0xA8,0xC0,0x00,
90315 -0x28,0x00,0xB6,0xAF,
90316 -0x1C,0x00,0xB3,0xAF,
90317 -0x2C,0x00,0xBF,0xAF,
90318 -0x20,0x00,0xB4,0xAF,
90319 -0x18,0x00,0xB2,0xAF,
90320 -0x14,0x00,0xB1,0xAF,
90321 -0x10,0x00,0xB0,0xAF,
90322 -0x21,0xB0,0xA0,0x00,
90323 -0xE6,0x44,0x00,0x0C,
90324 -0x21,0x98,0x00,0x00,
90325 -0x21,0x00,0xA0,0x16,
90326 -0x80,0x10,0x13,0x00,
90327 -0xDD,0x47,0x00,0x08,
90328 -0x00,0x00,0x00,0x00,
90329 -0xFD,0x00,0x02,0x24,
90330 -0x23,0x00,0x02,0x12,
90331 -0x05,0x00,0x04,0x24,
90332 -0xFC,0x00,0x02,0x24,
90333 -0x37,0x00,0x02,0x12,
90334 -0x00,0x00,0x00,0x00,
90335 -0xFB,0x00,0x02,0x24,
90336 -0x30,0x00,0x02,0x12,
90337 -0x32,0x00,0x04,0x24,
90338 -0xFA,0x00,0x02,0x24,
90339 -0x2D,0x00,0x02,0x12,
90340 -0x05,0x00,0x04,0x24,
90341 -0xF9,0x00,0x02,0x24,
90342 -0x29,0x00,0x02,0x12,
90343 -0x0F,0x00,0x05,0x3C,
90344 -0x04,0x00,0xD1,0x8C,
90345 -0xFF,0xFF,0xA5,0x34,
90346 -0x21,0x20,0x00,0x02,
90347 -0x5F,0x47,0x00,0x0C,
90348 -0x21,0x30,0x20,0x02,
90349 -0x25,0x22,0x00,0x0C,
90350 -0x01,0x00,0x04,0x24,
90351 -0x19,0x00,0x02,0x24,
90352 -0x28,0x00,0x02,0x12,
90353 -0x21,0x90,0x00,0x00,
90354 -0x02,0x00,0x62,0x26,
90355 -0xFF,0x00,0x53,0x30,
90356 -0x2B,0x18,0x75,0x02,
90357 -0x0F,0x00,0x60,0x10,
90358 -0x80,0x10,0x13,0x00,
90359 -0x21,0x30,0x56,0x00,
90360 -0x00,0x00,0xD0,0x8C,
90361 -0xFF,0x00,0x02,0x24,
90362 -0x0A,0x00,0x02,0x12,
90363 -0xFE,0x00,0x02,0x24,
90364 -0xDC,0xFF,0x02,0x16,
90365 -0x32,0x00,0x04,0x24,
90366 -0x25,0x22,0x00,0x0C,
90367 -0x00,0x00,0x00,0x00,
90368 -0x02,0x00,0x62,0x26,
90369 -0xFF,0x00,0x53,0x30,
90370 -0x2B,0x18,0x75,0x02,
90371 -0xF3,0xFF,0x60,0x14,
90372 -0x80,0x10,0x13,0x00,
90373 -0x2C,0x00,0xBF,0x8F,
90374 -0x28,0x00,0xB6,0x8F,
90375 -0x24,0x00,0xB5,0x8F,
90376 -0x20,0x00,0xB4,0x8F,
90377 -0x1C,0x00,0xB3,0x8F,
90378 -0x18,0x00,0xB2,0x8F,
90379 -0x14,0x00,0xB1,0x8F,
90380 -0x10,0x00,0xB0,0x8F,
90381 -0x01,0x00,0x02,0x24,
90382 -0x08,0x00,0xE0,0x03,
90383 -0x30,0x00,0xBD,0x27,
90384 -0x01,0x00,0x04,0x24,
90385 -0x54,0x22,0x00,0x0C,
90386 -0x00,0x00,0x00,0x00,
90387 -0xCB,0x47,0x00,0x08,
90388 -0x02,0x00,0x62,0x26,
90389 -0x25,0x22,0x00,0x0C,
90390 -0x01,0x00,0x04,0x24,
90391 -0xD9,0x47,0x00,0x08,
90392 -0x02,0x00,0x62,0x26,
90393 -0x0F,0x00,0x14,0x3C,
90394 -0x21,0x20,0x00,0x02,
90395 -0x8A,0x47,0x00,0x0C,
90396 -0xFF,0xFF,0x85,0x36,
90397 -0x21,0x20,0x00,0x02,
90398 -0xFF,0xFF,0x85,0x36,
90399 -0xD2,0xFF,0x51,0x10,
90400 -0x21,0x30,0x20,0x02,
90401 -0x5F,0x47,0x00,0x0C,
90402 -0x00,0x00,0x00,0x00,
90403 -0x25,0x22,0x00,0x0C,
90404 -0x01,0x00,0x04,0x24,
90405 -0x01,0x00,0x42,0x26,
90406 -0xFF,0x00,0x52,0x30,
90407 -0x0A,0x00,0x43,0x2E,
90408 -0xF2,0xFF,0x60,0x14,
90409 -0x21,0x20,0x00,0x02,
90410 -0xE6,0x44,0x00,0x0C,
90411 -0x21,0x20,0x00,0x00,
90412 -0x2C,0x00,0xBF,0x8F,
90413 -0x28,0x00,0xB6,0x8F,
90414 -0x24,0x00,0xB5,0x8F,
90415 -0x20,0x00,0xB4,0x8F,
90416 -0x1C,0x00,0xB3,0x8F,
90417 -0x18,0x00,0xB2,0x8F,
90418 -0x14,0x00,0xB1,0x8F,
90419 -0x10,0x00,0xB0,0x8F,
90420 -0x21,0x10,0x00,0x00,
90421 -0x08,0x00,0xE0,0x03,
90422 -0x30,0x00,0xBD,0x27,
90423 -0xB8,0xFF,0xBD,0x27,
90424 -0x02,0x80,0x02,0x3C,
90425 -0x44,0x00,0xBF,0xAF,
90426 -0x40,0x00,0xBE,0xAF,
90427 -0x3C,0x00,0xB7,0xAF,
90428 -0x38,0x00,0xB6,0xAF,
90429 -0x34,0x00,0xB5,0xAF,
90430 -0x30,0x00,0xB4,0xAF,
90431 -0x2C,0x00,0xB3,0xAF,
90432 -0x28,0x00,0xB2,0xAF,
90433 -0x24,0x00,0xB1,0xAF,
90434 -0x20,0x00,0xB0,0xAF,
90435 -0x30,0x1F,0x57,0x24,
90436 -0x64,0x37,0xE3,0x96,
90437 -0x02,0x80,0x02,0x3C,
90438 -0x02,0x80,0x05,0x3C,
90439 -0x25,0xA0,0x62,0x00,
90440 -0xF0,0xDD,0xA5,0x24,
90441 -0x24,0x00,0x84,0x26,
90442 -0x06,0x00,0x06,0x24,
90443 -0x02,0x80,0x02,0x3C,
90444 -0x20,0x00,0x80,0xA6,
90445 -0x10,0x52,0x00,0x0C,
90446 -0x84,0x58,0x56,0x24,
90447 -0x02,0x80,0x05,0x3C,
90448 -0x18,0x3B,0xA5,0x24,
90449 -0x2A,0x00,0x84,0x26,
90450 -0x10,0x52,0x00,0x0C,
90451 -0x06,0x00,0x06,0x24,
90452 -0x02,0x80,0x05,0x3C,
90453 -0x88,0x58,0xA5,0x24,
90454 -0x06,0x00,0x06,0x24,
90455 -0x10,0x52,0x00,0x0C,
90456 -0x30,0x00,0x84,0x26,
90457 -0x20,0x00,0x83,0x96,
90458 -0x74,0x00,0xD0,0x26,
90459 -0x21,0x20,0x00,0x02,
90460 -0x03,0xFF,0x63,0x30,
90461 -0x80,0x00,0x63,0x34,
90462 -0x20,0x00,0x83,0xA6,
90463 -0x20,0x00,0x1E,0x24,
90464 -0x40,0x00,0x93,0x26,
90465 -0x17,0x4F,0x00,0x0C,
90466 -0x1C,0x00,0xBE,0xAF,
90467 -0x21,0x28,0x40,0x00,
90468 -0x21,0x20,0x60,0x02,
90469 -0x10,0x52,0x00,0x0C,
90470 -0x02,0x00,0x06,0x24,
90471 -0x1C,0x00,0xA2,0x8F,
90472 -0x21,0x20,0x00,0x02,
90473 -0x42,0x00,0x93,0x26,
90474 -0x02,0x00,0x42,0x24,
90475 -0x32,0x4F,0x00,0x0C,
90476 -0x1C,0x00,0xA2,0xAF,
90477 -0x21,0x28,0x40,0x00,
90478 -0x21,0x20,0x60,0x02,
90479 -0x10,0x52,0x00,0x0C,
90480 -0x02,0x00,0x06,0x24,
90481 -0x1C,0x00,0xA2,0x8F,
90482 -0x0C,0x00,0xC6,0x8E,
90483 -0x1C,0x00,0xB0,0x27,
90484 -0x21,0x28,0x00,0x00,
90485 -0x10,0x00,0xC7,0x26,
90486 -0x02,0x00,0x42,0x24,
90487 -0x44,0x00,0x84,0x26,
90488 -0x60,0x00,0xD1,0x26,
90489 -0x1C,0x00,0xA2,0xAF,
90490 -0x41,0x4F,0x00,0x0C,
90491 -0x10,0x00,0xB0,0xAF,
90492 -0x21,0x20,0x20,0x02,
90493 -0x37,0x50,0x00,0x0C,
90494 -0x21,0x98,0x40,0x00,
90495 -0x09,0x00,0x52,0x2C,
90496 -0x08,0x00,0x06,0x24,
90497 -0x21,0x20,0x60,0x02,
90498 -0x0B,0x30,0x52,0x00,
90499 -0x21,0x38,0x20,0x02,
90500 -0x01,0x00,0x05,0x24,
90501 -0x21,0xA8,0x40,0x00,
90502 -0x41,0x4F,0x00,0x0C,
90503 -0x10,0x00,0xB0,0xAF,
90504 -0x21,0x20,0x40,0x00,
90505 -0x03,0x00,0x05,0x24,
90506 -0x01,0x00,0x06,0x24,
90507 -0x48,0x00,0xC7,0x26,
90508 -0x41,0x4F,0x00,0x0C,
90509 -0x10,0x00,0xB0,0xAF,
90510 -0x21,0x20,0x40,0x00,
90511 -0x06,0x00,0x05,0x24,
90512 -0x02,0x00,0x06,0x24,
90513 -0x18,0x00,0xA7,0x27,
90514 -0x18,0x00,0xA0,0xA7,
90515 -0x41,0x4F,0x00,0x0C,
90516 -0x10,0x00,0xB0,0xAF,
90517 -0x18,0x00,0xA5,0x97,
90518 -0x02,0x80,0x04,0x3C,
90519 -0x68,0xDF,0x84,0x24,
90520 -0x2F,0x55,0x00,0x0C,
90521 -0x21,0x98,0x40,0x00,
90522 -0x13,0x00,0x40,0x12,
90523 -0x21,0x20,0x60,0x02,
90524 -0x1C,0x00,0xA2,0x8F,
90525 -0x00,0x00,0x00,0x00,
90526 -0x20,0x00,0x42,0x24,
90527 -0x01,0x01,0x42,0x2C,
90528 -0x18,0x00,0x40,0x14,
90529 -0x21,0x20,0x80,0x02,
90530 -0x44,0x00,0xBF,0x8F,
90531 -0x40,0x00,0xBE,0x8F,
90532 -0x3C,0x00,0xB7,0x8F,
90533 -0x38,0x00,0xB6,0x8F,
90534 -0x34,0x00,0xB5,0x8F,
90535 -0x30,0x00,0xB4,0x8F,
90536 -0x2C,0x00,0xB3,0x8F,
90537 -0x28,0x00,0xB2,0x8F,
90538 -0x24,0x00,0xB1,0x8F,
90539 -0x20,0x00,0xB0,0x8F,
90540 -0x08,0x00,0xE0,0x03,
90541 -0x48,0x00,0xBD,0x27,
90542 -0xF8,0xFF,0xA6,0x26,
90543 -0x68,0x00,0xC7,0x26,
90544 -0x32,0x00,0x05,0x24,
90545 -0x41,0x4F,0x00,0x0C,
90546 -0x10,0x00,0xB0,0xAF,
90547 -0x1C,0x00,0xA2,0x8F,
90548 -0x00,0x00,0x00,0x00,
90549 -0x20,0x00,0x42,0x24,
90550 -0x01,0x01,0x42,0x2C,
90551 -0xEA,0xFF,0x40,0x10,
90552 -0x21,0x20,0x80,0x02,
90553 -0x21,0x28,0x00,0x00,
90554 -0x08,0x52,0x00,0x0C,
90555 -0x08,0x00,0x06,0x24,
90556 -0x08,0x00,0x84,0x8E,
90557 -0x04,0x00,0x85,0x8E,
90558 -0xFF,0xDF,0x02,0x3C,
90559 -0x10,0x00,0x86,0x8E,
90560 -0x14,0x00,0x87,0x8E,
90561 -0xFF,0xFF,0x42,0x34,
90562 -0x1C,0x00,0xA8,0x8F,
90563 -0x24,0x20,0x82,0x00,
90564 -0x00,0x40,0x03,0x3C,
90565 -0xFF,0xE0,0x02,0x24,
90566 -0x24,0x28,0xA2,0x00,
90567 -0x25,0x20,0x83,0x00,
90568 -0x00,0x80,0x02,0x3C,
90569 -0xFF,0x81,0x03,0x24,
90570 -0x24,0x38,0xE3,0x00,
90571 -0x25,0x30,0xC2,0x00,
90572 -0x00,0x10,0xA5,0x34,
90573 -0x80,0x00,0x84,0x34,
90574 -0x08,0x00,0x84,0xAE,
90575 -0x00,0x00,0x88,0xA6,
90576 -0x02,0x00,0x9E,0xA2,
90577 -0x14,0x00,0x87,0xAE,
90578 -0x04,0x00,0x85,0xAE,
90579 -0x10,0x00,0x86,0xAE,
90580 -0xF8,0x36,0xE6,0x8E,
90581 -0x64,0x37,0xE5,0x8E,
90582 -0x01,0x00,0x04,0x24,
90583 -0x00,0x01,0x07,0x24,
90584 -0x01,0x00,0x02,0x24,
90585 -0x73,0x01,0x00,0x0C,
90586 -0x10,0x00,0xA2,0xAF,
90587 -0xB0,0x01,0x00,0x0C,
90588 -0x01,0x00,0x04,0x24,
90589 -0x44,0x00,0xBF,0x8F,
90590 -0x40,0x00,0xBE,0x8F,
90591 -0x3C,0x00,0xB7,0x8F,
90592 -0x38,0x00,0xB6,0x8F,
90593 -0x34,0x00,0xB5,0x8F,
90594 -0x30,0x00,0xB4,0x8F,
90595 -0x2C,0x00,0xB3,0x8F,
90596 -0x28,0x00,0xB2,0x8F,
90597 -0x24,0x00,0xB1,0x8F,
90598 -0x20,0x00,0xB0,0x8F,
90599 -0x08,0x00,0xE0,0x03,
90600 -0x48,0x00,0xBD,0x27,
90601 -0xE8,0xFF,0xBD,0x27,
90602 -0x10,0x00,0xB0,0xAF,
90603 -0x14,0x00,0xBF,0xAF,
90604 -0x25,0x24,0x00,0x0C,
90605 -0x24,0x00,0x04,0x24,
90606 -0x21,0x30,0x40,0x00,
90607 -0x02,0x80,0x05,0x3C,
90608 -0x02,0x80,0x02,0x3C,
90609 -0x30,0x1F,0x50,0x24,
90610 -0x21,0x20,0xC0,0x00,
90611 -0x13,0x00,0xC0,0x10,
90612 -0x48,0xEA,0xA5,0x24,
90613 -0x04,0x00,0x02,0x24,
90614 -0x09,0x00,0x03,0x24,
90615 -0x0C,0x00,0xC2,0xAC,
90616 -0x14,0x00,0xC3,0xAC,
90617 -0x08,0x00,0xC5,0x94,
90618 -0xA4,0x3B,0x03,0x8E,
90619 -0x02,0x80,0x02,0x3C,
90620 -0x25,0x28,0xA2,0x00,
90621 -0x30,0x09,0x00,0x0C,
90622 -0x20,0x00,0xA3,0xAC,
90623 -0xA8,0x3B,0x06,0x8E,
90624 -0xA4,0x3B,0x05,0x8E,
90625 -0x02,0x80,0x04,0x3C,
90626 -0x14,0x00,0xBF,0x8F,
90627 -0x10,0x00,0xB0,0x8F,
90628 -0x80,0xDF,0x84,0x24,
90629 -0x2F,0x55,0x00,0x08,
90630 -0x18,0x00,0xBD,0x27,
90631 -0x02,0x80,0x04,0x3C,
90632 -0x14,0x00,0xBF,0x8F,
90633 -0x10,0x00,0xB0,0x8F,
90634 -0x74,0xDF,0x84,0x24,
90635 -0x2F,0x55,0x00,0x08,
90636 -0x18,0x00,0xBD,0x27,
90637 -0xD8,0xFF,0xBD,0x27,
90638 -0x18,0x00,0xB2,0xAF,
90639 -0x14,0x00,0xB1,0xAF,
90640 -0x10,0x00,0xB0,0xAF,
90641 -0x24,0x00,0xBF,0xAF,
90642 -0x20,0x00,0xB4,0xAF,
90643 -0x1C,0x00,0xB3,0xAF,
90644 -0x02,0x00,0x82,0x90,
90645 -0x02,0x80,0x12,0x3C,
90646 -0x30,0x1F,0x51,0x26,
90647 -0xB0,0x1B,0x25,0x96,
90648 -0x0F,0x00,0x42,0x30,
90649 -0xC0,0x10,0x02,0x00,
90650 -0x21,0x80,0x44,0x00,
90651 -0x00,0x01,0xA3,0x30,
90652 -0x04,0x00,0x60,0x10,
90653 -0x18,0x00,0x04,0x26,
90654 -0x00,0x10,0xA2,0x30,
90655 -0x0B,0x00,0x40,0x10,
90656 -0x04,0x00,0xA2,0x30,
90657 -0x21,0x18,0x00,0x00,
90658 -0x24,0x00,0xBF,0x8F,
90659 -0x20,0x00,0xB4,0x8F,
90660 -0x1C,0x00,0xB3,0x8F,
90661 -0x18,0x00,0xB2,0x8F,
90662 -0x14,0x00,0xB1,0x8F,
90663 -0x10,0x00,0xB0,0x8F,
90664 -0x21,0x10,0x60,0x00,
90665 -0x08,0x00,0xE0,0x03,
90666 -0x28,0x00,0xBD,0x27,
90667 -0xF5,0xFF,0x40,0x14,
90668 -0x00,0x00,0x00,0x00,
90669 -0x55,0x50,0x00,0x0C,
90670 -0x00,0x00,0x00,0x00,
90671 -0x02,0x80,0x04,0x3C,
90672 -0x18,0x3B,0x84,0x24,
90673 -0x21,0x28,0x40,0x00,
90674 -0x39,0x52,0x00,0x0C,
90675 -0x06,0x00,0x06,0x24,
90676 -0xED,0xFF,0x40,0x14,
90677 -0x21,0x18,0x00,0x00,
90678 -0x02,0x80,0x02,0x3C,
90679 -0x88,0x58,0x53,0x24,
90680 -0x22,0x00,0x14,0x26,
90681 -0x21,0x20,0x80,0x02,
90682 -0x21,0x28,0x60,0x02,
90683 -0x39,0x52,0x00,0x0C,
90684 -0x06,0x00,0x06,0x24,
90685 -0xE4,0xFF,0x40,0x14,
90686 -0x21,0x18,0x00,0x00,
90687 -0x28,0x00,0x04,0x26,
90688 -0x21,0x28,0x60,0x02,
90689 -0x39,0x52,0x00,0x0C,
90690 -0x06,0x00,0x06,0x24,
90691 -0xDE,0xFF,0x40,0x14,
90692 -0x21,0x18,0x00,0x00,
90693 -0x02,0x80,0x04,0x3C,
90694 -0x2F,0x55,0x00,0x0C,
90695 -0xE8,0xDF,0x84,0x24,
90696 -0xB0,0x1B,0x24,0x96,
90697 -0x00,0x00,0x00,0x00,
90698 -0xFF,0xFF,0x83,0x30,
90699 -0x01,0x00,0x62,0x30,
90700 -0x08,0x00,0x40,0x10,
90701 -0x00,0x20,0x62,0x30,
90702 -0x15,0x00,0x40,0x10,
90703 -0xFF,0xDE,0x82,0x30,
90704 -0xFE,0xFF,0x04,0x24,
90705 -0xB0,0x1B,0x22,0xA6,
90706 -0xD0,0x38,0x20,0xAE,
90707 -0x48,0x0E,0x00,0x0C,
90708 -0xB4,0x38,0x20,0xAE,
90709 -0x25,0xB0,0x02,0x3C,
90710 -0x30,0x1F,0x50,0x26,
90711 -0x4C,0x00,0x42,0x34,
90712 -0x00,0x00,0x40,0xA0,
90713 -0x21,0x20,0x00,0x00,
90714 -0x21,0x28,0x00,0x00,
90715 -0x12,0x0D,0x00,0x0C,
90716 -0xA1,0x3B,0x00,0xA2,
90717 -0x10,0x3E,0x00,0xAE,
90718 -0xEC,0x38,0x00,0xAE,
90719 -0x08,0x39,0x00,0xAE,
90720 -0xA3,0x51,0x00,0x0C,
90721 -0x50,0x3E,0x00,0xAE,
90722 -0xFA,0x48,0x00,0x08,
90723 -0x21,0x18,0x00,0x00,
90724 -0x76,0x0E,0x00,0x0C,
90725 -0x21,0x20,0x80,0x02,
90726 -0xBB,0xFF,0x40,0x14,
90727 -0xFF,0xFF,0x03,0x24,
90728 -0xB0,0x1B,0x22,0x96,
90729 -0x00,0x00,0x00,0x00,
90730 -0xFF,0xFE,0x42,0x30,
90731 -0x2D,0x49,0x00,0x08,
90732 -0xB0,0x1B,0x22,0xA6,
90733 -0xD0,0xFF,0xBD,0x27,
90734 -0x20,0x00,0xB4,0xAF,
90735 -0x02,0x80,0x14,0x3C,
90736 -0x14,0x00,0xB1,0xAF,
90737 -0x28,0x00,0xBF,0xAF,
90738 -0x24,0x00,0xB5,0xAF,
90739 -0x1C,0x00,0xB3,0xAF,
90740 -0x18,0x00,0xB2,0xAF,
90741 -0x10,0x00,0xB0,0xAF,
90742 -0x30,0x1F,0x91,0x26,
90743 -0xB0,0x1B,0x23,0x96,
90744 -0x00,0x00,0x00,0x00,
90745 -0x10,0x00,0x62,0x30,
90746 -0x3A,0x00,0x40,0x14,
90747 -0x00,0x01,0x62,0x30,
90748 -0x2E,0x00,0x40,0x10,
90749 -0x00,0x10,0x62,0x30,
90750 -0x29,0x00,0x40,0x14,
90751 -0x01,0x00,0x62,0x30,
90752 -0x1D,0x00,0x40,0x14,
90753 -0x04,0x00,0x62,0x30,
90754 -0x25,0x00,0x40,0x10,
90755 -0x02,0x80,0x02,0x3C,
90756 -0x21,0x90,0x20,0x02,
90757 -0x2B,0x3D,0x55,0x24,
90758 -0x01,0x00,0x13,0x24,
90759 -0xF0,0x00,0x10,0x24,
90760 -0x65,0x49,0x00,0x08,
90761 -0x19,0x00,0x11,0x24,
90762 -0xFF,0xFF,0x31,0x26,
90763 -0x1C,0x00,0x20,0x06,
90764 -0x28,0x00,0x10,0x26,
90765 -0x21,0x18,0x12,0x02,
90766 -0xFA,0x1D,0x62,0x90,
90767 -0x00,0x00,0x00,0x00,
90768 -0xF9,0xFF,0x53,0x14,
90769 -0x00,0x00,0x00,0x00,
90770 -0x0C,0x1E,0x62,0x8C,
90771 -0x00,0x00,0x00,0x00,
90772 -0x33,0x00,0x40,0x10,
90773 -0x21,0x20,0x15,0x02,
90774 -0x00,0x60,0x02,0x40,
90775 -0x01,0x00,0x41,0x34,
90776 -0x01,0x00,0x21,0x38,
90777 -0x00,0x60,0x81,0x40,
90778 -0x0C,0x1E,0x60,0xAC,
90779 -0x00,0x60,0x82,0x40,
90780 -0x63,0x49,0x00,0x08,
90781 -0xFF,0xFF,0x31,0x26,
90782 -0xD4,0x1E,0x22,0x8E,
90783 -0x00,0x00,0x00,0x00,
90784 -0x2F,0x00,0x40,0x10,
90785 -0x02,0x80,0x04,0x3C,
90786 -0x00,0x60,0x02,0x40,
90787 -0x01,0x00,0x41,0x34,
90788 -0x01,0x00,0x21,0x38,
90789 -0x00,0x60,0x81,0x40,
90790 -0xD4,0x1E,0x20,0xAE,
90791 -0x00,0x60,0x82,0x40,
90792 -0x53,0x1E,0x00,0x0C,
90793 -0x30,0x1F,0x90,0x26,
90794 -0xEC,0x38,0x02,0xAE,
90795 -0x28,0x00,0xBF,0x8F,
90796 -0x24,0x00,0xB5,0x8F,
90797 -0x20,0x00,0xB4,0x8F,
90798 -0x1C,0x00,0xB3,0x8F,
90799 -0x18,0x00,0xB2,0x8F,
90800 -0x14,0x00,0xB1,0x8F,
90801 -0x10,0x00,0xB0,0x8F,
90802 -0x21,0x10,0x00,0x00,
90803 -0x08,0x00,0xE0,0x03,
90804 -0x30,0x00,0xBD,0x27,
90805 -0x02,0x80,0x04,0x3C,
90806 -0x2F,0x55,0x00,0x0C,
90807 -0xF8,0xDF,0x84,0x24,
90808 -0xB0,0x1B,0x22,0x96,
90809 -0xEC,0x38,0x20,0xAE,
90810 -0xFD,0xFF,0x04,0x24,
90811 -0xEF,0xDF,0x42,0x30,
90812 -0x48,0x0E,0x00,0x0C,
90813 -0xB0,0x1B,0x22,0xA6,
90814 -0x28,0x00,0xBF,0x8F,
90815 -0x24,0x00,0xB5,0x8F,
90816 -0x20,0x00,0xB4,0x8F,
90817 -0x1C,0x00,0xB3,0x8F,
90818 -0x18,0x00,0xB2,0x8F,
90819 -0x14,0x00,0xB1,0x8F,
90820 -0x10,0x00,0xB0,0x8F,
90821 -0x21,0x10,0x00,0x00,
90822 -0x08,0x00,0xE0,0x03,
90823 -0x30,0x00,0xBD,0x27,
90824 -0x8E,0x3E,0x42,0x92,
90825 -0x00,0x00,0x00,0x00,
90826 -0xFF,0xFF,0x42,0x24,
90827 -0x8E,0x3E,0x42,0xA2,
90828 -0x76,0x0E,0x00,0x0C,
90829 -0xFA,0x1D,0x60,0xA0,
90830 -0x63,0x49,0x00,0x08,
90831 -0xFF,0xFF,0x31,0x26,
90832 -0x2F,0x55,0x00,0x0C,
90833 -0x18,0xE0,0x84,0x24,
90834 -0xB0,0x1B,0x23,0x96,
90835 -0x25,0xB0,0x02,0x3C,
90836 -0x4C,0x00,0x42,0x34,
90837 -0xFE,0xFE,0x63,0x30,
90838 -0xB0,0x1B,0x23,0xA6,
90839 -0x21,0x20,0x00,0x00,
90840 -0x00,0x00,0x40,0xA0,
90841 -0x21,0x28,0x00,0x00,
90842 -0xA1,0x3B,0x20,0xA2,
90843 -0x12,0x0D,0x00,0x0C,
90844 -0xC2,0x1E,0x20,0xA2,
90845 -0x02,0x80,0x04,0x3C,
90846 -0x76,0x0E,0x00,0x0C,
90847 -0x88,0x58,0x84,0x24,
90848 -0x83,0x49,0x00,0x08,
90849 -0x00,0x00,0x00,0x00,
90850 -0x08,0x00,0xE0,0x03,
90851 -0x21,0x10,0x00,0x00,
90852 -0xA8,0xFF,0xBD,0x27,
90853 -0x48,0x00,0xB6,0xAF,
90854 -0x3C,0x00,0xB3,0xAF,
90855 -0x38,0x00,0xB2,0xAF,
90856 -0x30,0x00,0xB0,0xAF,
90857 -0x54,0x00,0xBF,0xAF,
90858 -0x50,0x00,0xBE,0xAF,
90859 -0x4C,0x00,0xB7,0xAF,
90860 -0x44,0x00,0xB5,0xAF,
90861 -0x40,0x00,0xB4,0xAF,
90862 -0x34,0x00,0xB1,0xAF,
90863 -0x02,0x00,0x82,0x90,
90864 -0x00,0x00,0x83,0x8C,
90865 -0x21,0xB0,0x00,0x00,
90866 -0x0F,0x00,0x42,0x30,
90867 -0xC0,0x10,0x02,0x00,
90868 -0x21,0x80,0x44,0x00,
90869 -0x18,0x00,0x12,0x26,
90870 -0x21,0x20,0x40,0x02,
90871 -0x55,0x50,0x00,0x0C,
90872 -0xFF,0x3F,0x73,0x30,
90873 -0x02,0x80,0x04,0x3C,
90874 -0x18,0x3B,0x84,0x24,
90875 -0x21,0x28,0x40,0x00,
90876 -0x39,0x52,0x00,0x0C,
90877 -0x06,0x00,0x06,0x24,
90878 -0x0B,0x00,0x40,0x14,
90879 -0x02,0x80,0x15,0x3C,
90880 -0x30,0x1F,0xB1,0x26,
90881 -0xB0,0x1B,0x23,0x96,
90882 -0x00,0x00,0x00,0x00,
90883 -0x01,0x00,0x62,0x30,
90884 -0x05,0x00,0x40,0x10,
90885 -0x00,0x10,0x62,0x30,
90886 -0x03,0x00,0x40,0x14,
90887 -0x00,0x01,0x62,0x30,
90888 -0x0E,0x00,0x40,0x10,
90889 -0x20,0x00,0xB4,0x27,
90890 -0x54,0x00,0xBF,0x8F,
90891 -0x50,0x00,0xBE,0x8F,
90892 -0x4C,0x00,0xB7,0x8F,
90893 -0x48,0x00,0xB6,0x8F,
90894 -0x44,0x00,0xB5,0x8F,
90895 -0x40,0x00,0xB4,0x8F,
90896 -0x3C,0x00,0xB3,0x8F,
90897 -0x38,0x00,0xB2,0x8F,
90898 -0x34,0x00,0xB1,0x8F,
90899 -0x30,0x00,0xB0,0x8F,
90900 -0x21,0x10,0x00,0x00,
90901 -0x08,0x00,0xE0,0x03,
90902 -0x58,0x00,0xBD,0x27,
90903 -0x32,0x00,0x05,0x26,
90904 -0x21,0x20,0x80,0x02,
90905 -0x10,0x52,0x00,0x0C,
90906 -0x02,0x00,0x06,0x24,
90907 -0x20,0x00,0xA5,0x97,
90908 -0x00,0x00,0x00,0x00,
90909 -0xC2,0x00,0xA0,0x14,
90910 -0x02,0x80,0x04,0x3C,
90911 -0x21,0x20,0x80,0x02,
90912 -0x34,0x00,0x05,0x26,
90913 -0x10,0x52,0x00,0x0C,
90914 -0x02,0x00,0x06,0x24,
90915 -0x20,0x00,0xA2,0x97,
90916 -0x21,0x20,0x80,0x02,
90917 -0x30,0x00,0x05,0x26,
90918 -0xFF,0x3F,0x42,0x30,
90919 -0x02,0x00,0x06,0x24,
90920 -0x50,0x39,0x22,0xA6,
90921 -0x10,0x52,0x00,0x0C,
90922 -0x28,0x00,0xA2,0xAF,
90923 -0x20,0x00,0xA3,0x97,
90924 -0x21,0x40,0x20,0x02,
90925 -0x00,0x04,0x63,0x30,
90926 -0x02,0x00,0x60,0x14,
90927 -0x09,0x00,0x02,0x24,
90928 -0x14,0x00,0x02,0x24,
90929 -0x1E,0x00,0x5E,0x26,
90930 -0xE2,0xFF,0x74,0x26,
90931 -0x21,0x20,0xC0,0x03,
90932 -0x01,0x00,0x05,0x24,
90933 -0x24,0x00,0xA6,0x27,
90934 -0x21,0x38,0x80,0x02,
90935 -0x55,0x1D,0x00,0x0C,
90936 -0x0C,0x3E,0x02,0xA1,
90937 -0xA8,0x00,0x40,0x10,
90938 -0x02,0x00,0x45,0x24,
90939 -0x24,0x00,0xA6,0x8F,
90940 -0x10,0x52,0x00,0x0C,
90941 -0x10,0x00,0xA4,0x27,
90942 -0x21,0x20,0xC0,0x03,
90943 -0x32,0x00,0x05,0x24,
90944 -0x24,0x00,0xA6,0x27,
90945 -0x24,0x00,0xB7,0x8F,
90946 -0x55,0x1D,0x00,0x0C,
90947 -0x21,0x38,0x80,0x02,
90948 -0x08,0x00,0x40,0x10,
90949 -0x10,0x00,0xA4,0x27,
90950 -0x24,0x00,0xA6,0x8F,
90951 -0x21,0x20,0x97,0x00,
90952 -0x10,0x52,0x00,0x0C,
90953 -0x02,0x00,0x45,0x24,
90954 -0x24,0x00,0xA3,0x8F,
90955 -0x00,0x00,0x00,0x00,
90956 -0x21,0xB8,0xE3,0x02,
90957 -0x02,0x80,0x02,0x3C,
90958 -0xEA,0x5D,0x44,0x90,
90959 -0x02,0x00,0x03,0x24,
90960 -0xE5,0x00,0x83,0x10,
90961 -0x21,0x20,0xC0,0x03,
90962 -0x30,0x1F,0xA4,0x26,
90963 -0x10,0x3E,0x82,0x8C,
90964 -0x00,0x00,0x00,0x00,
90965 -0x22,0x00,0x40,0x10,
90966 -0x30,0x1F,0xB1,0x26,
90967 -0x02,0x80,0x02,0x3C,
90968 -0xE6,0x5D,0x43,0x90,
90969 -0x00,0x00,0x00,0x00,
90970 -0x1D,0x00,0x60,0x14,
90971 -0x23,0x10,0xD2,0x03,
90972 -0x2B,0x10,0x53,0x00,
90973 -0x1A,0x00,0x40,0x10,
90974 -0x21,0x80,0xC0,0x03,
90975 -0x02,0x80,0x11,0x3C,
90976 -0x21,0x20,0x00,0x02,
90977 -0xDD,0x00,0x05,0x24,
90978 -0x24,0x00,0xA6,0x27,
90979 -0x55,0x1D,0x00,0x0C,
90980 -0x21,0x38,0x80,0x02,
90981 -0x21,0x80,0x40,0x00,
90982 -0x02,0x00,0x44,0x24,
90983 -0xC8,0xDD,0x25,0x26,
90984 -0x0E,0x01,0x40,0x10,
90985 -0x06,0x00,0x06,0x24,
90986 -0x39,0x52,0x00,0x0C,
90987 -0x00,0x00,0x00,0x00,
90988 -0x10,0x01,0x40,0x10,
90989 -0x00,0x00,0x00,0x00,
90990 -0x24,0x00,0xA2,0x8F,
90991 -0x00,0x00,0x00,0x00,
90992 -0x21,0x18,0x02,0x02,
90993 -0x02,0x00,0x70,0x24,
90994 -0x23,0x20,0x12,0x02,
90995 -0x03,0x01,0x40,0x10,
90996 -0x2B,0x20,0x93,0x00,
90997 -0xEB,0xFF,0x80,0x14,
90998 -0x21,0x20,0x00,0x02,
90999 -0x30,0x1F,0xB1,0x26,
91000 -0x50,0x3E,0x22,0x8E,
91001 -0x00,0x00,0x00,0x00,
91002 -0x6A,0x00,0x40,0x14,
91003 -0x24,0x00,0xA6,0x27,
91004 -0x53,0x1E,0x00,0x0C,
91005 -0x30,0x1F,0xB2,0x26,
91006 -0x25,0xB0,0x14,0x3C,
91007 -0xB0,0x1B,0x45,0x96,
91008 -0x02,0x00,0x03,0x24,
91009 -0x4C,0x00,0x84,0x36,
91010 -0x00,0x00,0x83,0xA0,
91011 -0xEC,0x38,0x42,0xAE,
91012 -0x02,0x00,0x02,0x3C,
91013 -0x00,0x01,0xA5,0x34,
91014 -0x20,0xBF,0x42,0x34,
91015 -0x08,0x39,0x42,0xAE,
91016 -0x21,0x0E,0x00,0x0C,
91017 -0xB0,0x1B,0x45,0xA6,
91018 -0x10,0x00,0xA4,0x27,
91019 -0x7D,0x50,0x00,0x0C,
91020 -0x21,0x28,0xE0,0x02,
91021 -0x0F,0x00,0x50,0x30,
91022 -0x10,0x00,0xA4,0x27,
91023 -0x96,0x50,0x00,0x0C,
91024 -0x21,0x28,0xE0,0x02,
91025 -0x40,0x02,0x13,0x36,
91026 -0x02,0x80,0x04,0x3C,
91027 -0x21,0x88,0x40,0x00,
91028 -0x21,0x30,0x40,0x00,
91029 -0x21,0x28,0x60,0x02,
91030 -0x2F,0x55,0x00,0x0C,
91031 -0x6C,0xE0,0x84,0x24,
91032 -0x21,0x20,0x60,0x02,
91033 -0xC1,0x5B,0x00,0x0C,
91034 -0x21,0x28,0x20,0x02,
91035 -0x21,0x28,0xE0,0x02,
91036 -0xC2,0x50,0x00,0x0C,
91037 -0x10,0x00,0xA4,0x27,
91038 -0x21,0x88,0x40,0x00,
91039 -0x50,0x3E,0x42,0x8E,
91040 -0x00,0x00,0x00,0x00,
91041 -0x16,0x00,0x40,0x10,
91042 -0x50,0x00,0x13,0x36,
91043 -0x5B,0x3E,0x42,0x92,
91044 -0x5C,0x3E,0x43,0x92,
91045 -0x0A,0x3E,0x44,0x92,
91046 -0x00,0x13,0x02,0x00,
91047 -0x00,0x1D,0x03,0x00,
91048 -0x25,0x10,0x43,0x00,
91049 -0x04,0x00,0x03,0x24,
91050 -0xA0,0x00,0x83,0x10,
91051 -0x25,0x88,0x22,0x02,
91052 -0x54,0x3E,0x43,0x8E,
91053 -0x00,0x00,0x00,0x00,
91054 -0x07,0x00,0x60,0x14,
91055 -0x01,0x00,0x02,0x24,
91056 -0x58,0x3E,0x42,0x96,
91057 -0x00,0x00,0x00,0x00,
91058 -0x20,0x00,0x42,0x30,
91059 -0xA1,0x00,0x40,0x14,
91060 -0x00,0x10,0x02,0x3C,
91061 -0x01,0x00,0x02,0x24,
91062 -0x98,0x00,0x62,0x10,
91063 -0x00,0x00,0x00,0x00,
91064 -0x02,0x80,0x04,0x3C,
91065 -0x80,0xE0,0x84,0x24,
91066 -0x21,0x28,0x60,0x02,
91067 -0x21,0x38,0xC0,0x02,
91068 -0x2F,0x55,0x00,0x0C,
91069 -0x21,0x30,0x20,0x02,
91070 -0x21,0x20,0x60,0x02,
91071 -0xC1,0x5B,0x00,0x0C,
91072 -0x21,0x28,0x20,0x02,
91073 -0x30,0x1F,0xA2,0x26,
91074 -0xB0,0x1B,0x43,0x94,
91075 -0x0A,0x3E,0x44,0x90,
91076 -0xB4,0x38,0x40,0xAC,
91077 -0xFF,0xDF,0x63,0x30,
91078 -0xB0,0x1B,0x43,0xA4,
91079 -0x04,0x00,0x03,0x24,
91080 -0xD0,0x38,0x40,0xAC,
91081 -0x94,0x3E,0x40,0xAC,
91082 -0x06,0x00,0x83,0x10,
91083 -0x98,0x3E,0x40,0xAC,
91084 -0x28,0x00,0xA4,0x8F,
91085 -0x48,0x0E,0x00,0x0C,
91086 -0x00,0x00,0x00,0x00,
91087 -0xE2,0x49,0x00,0x08,
91088 -0x00,0x00,0x00,0x00,
91089 -0x25,0xB0,0x06,0x3C,
91090 -0x64,0x03,0xC6,0x34,
91091 -0x30,0x1F,0xA4,0x8E,
91092 -0x00,0x00,0xC5,0x90,
91093 -0x0F,0xFF,0x02,0x24,
91094 -0xFD,0xFF,0x03,0x24,
91095 -0x24,0x20,0x82,0x00,
91096 -0x24,0x28,0xA3,0x00,
91097 -0x30,0x1F,0xA4,0xAE,
91098 -0x00,0x00,0xC5,0xA0,
91099 -0x28,0x00,0xA4,0x8F,
91100 -0x48,0x0E,0x00,0x0C,
91101 -0x00,0x00,0x00,0x00,
91102 -0xE2,0x49,0x00,0x08,
91103 -0x00,0x00,0x00,0x00,
91104 -0x2F,0x55,0x00,0x0C,
91105 -0x50,0xE0,0x84,0x24,
91106 -0xFF,0xFF,0x02,0x24,
91107 -0x99,0x4A,0x00,0x08,
91108 -0x28,0x00,0xA2,0xAF,
91109 -0x21,0x20,0xC0,0x03,
91110 -0x2D,0x00,0x05,0x24,
91111 -0x55,0x1D,0x00,0x0C,
91112 -0x21,0x38,0x80,0x02,
91113 -0x91,0x00,0x40,0x10,
91114 -0x00,0x00,0x00,0x00,
91115 -0x24,0x00,0xAB,0x8F,
91116 -0x00,0x00,0x00,0x00,
91117 -0x1F,0x00,0x60,0x19,
91118 -0x21,0x40,0x00,0x00,
91119 -0x02,0x00,0x49,0x24,
91120 -0x21,0x50,0x20,0x02,
91121 -0x02,0x00,0x0C,0x24,
91122 -0xD5,0x4A,0x00,0x08,
91123 -0x21,0x68,0x20,0x01,
91124 -0x58,0x3E,0x82,0x90,
91125 -0x00,0x00,0x23,0x91,
91126 -0x00,0x00,0x00,0x00,
91127 -0x24,0x10,0x43,0x00,
91128 -0x58,0x3E,0x82,0xA0,
91129 -0x01,0x00,0x08,0x25,
91130 -0x2A,0x10,0x0B,0x01,
91131 -0x11,0x00,0x40,0x10,
91132 -0x01,0x00,0x29,0x25,
91133 -0xF6,0xFF,0x0C,0x15,
91134 -0x21,0x20,0x0A,0x01,
91135 -0x5A,0x3E,0x43,0x91,
91136 -0x00,0x00,0x25,0x91,
91137 -0x02,0x00,0xA2,0x91,
91138 -0x1C,0x00,0x64,0x30,
91139 -0x1C,0x00,0xA5,0x30,
91140 -0x03,0x00,0x42,0x30,
91141 -0x03,0x00,0x63,0x30,
91142 -0x2A,0x30,0x43,0x00,
91143 -0x2A,0x38,0xA4,0x00,
91144 -0x0A,0x10,0x66,0x00,
91145 -0x0A,0x20,0xA7,0x00,
91146 -0x25,0x10,0x44,0x00,
91147 -0xD1,0x4A,0x00,0x08,
91148 -0x5A,0x3E,0x42,0xA1,
91149 -0x02,0x80,0x02,0x3C,
91150 -0xDE,0x5D,0x43,0x90,
91151 -0x02,0x80,0x02,0x3C,
91152 -0x3C,0xE3,0x47,0x24,
91153 -0x10,0x00,0x65,0x30,
91154 -0x02,0x80,0x02,0x3C,
91155 -0x02,0x80,0x03,0x3C,
91156 -0x4C,0xE3,0x66,0x24,
91157 -0x30,0x1F,0x44,0x24,
91158 -0xF8,0x4A,0x00,0x08,
91159 -0x21,0x40,0x00,0x00,
91160 -0x00,0x00,0x43,0x90,
91161 -0x5B,0x3E,0x82,0x90,
91162 -0x01,0x00,0x08,0x25,
91163 -0x24,0x10,0x43,0x00,
91164 -0x5B,0x3E,0x82,0xA0,
91165 -0x10,0x00,0x02,0x29,
91166 -0x07,0x00,0x40,0x10,
91167 -0x01,0x00,0x84,0x24,
91168 -0x21,0x10,0x07,0x01,
91169 -0xF6,0xFF,0xA0,0x14,
91170 -0x21,0x18,0x06,0x01,
91171 -0x00,0x00,0x63,0x90,
91172 -0xF1,0x4A,0x00,0x08,
91173 -0x00,0x00,0x00,0x00,
91174 -0x21,0x20,0xC0,0x03,
91175 -0x21,0x38,0x80,0x02,
91176 -0x3D,0x00,0x05,0x24,
91177 -0x55,0x1D,0x00,0x0C,
91178 -0x24,0x00,0xA6,0x27,
91179 -0x48,0x00,0x40,0x10,
91180 -0x00,0x00,0x00,0x00,
91181 -0x24,0x00,0xA6,0x8F,
91182 -0x02,0x80,0x04,0x3C,
91183 -0xA8,0x5D,0x84,0x24,
91184 -0x10,0x52,0x00,0x0C,
91185 -0x02,0x00,0x45,0x24,
91186 -0x90,0x0D,0x00,0x0C,
91187 -0x00,0x00,0x00,0x00,
91188 -0x54,0x4A,0x00,0x08,
91189 -0x00,0x00,0x00,0x00,
91190 -0x2A,0x00,0x05,0x24,
91191 -0x24,0x00,0xA6,0x27,
91192 -0x55,0x1D,0x00,0x0C,
91193 -0x21,0x38,0x80,0x02,
91194 -0x30,0x00,0x40,0x10,
91195 -0x30,0x1F,0xA5,0x26,
91196 -0x02,0x00,0x42,0x90,
91197 -0x00,0x00,0x00,0x00,
91198 -0x02,0x00,0x42,0x30,
91199 -0x2B,0x00,0x40,0x10,
91200 -0x02,0x80,0x02,0x3C,
91201 -0xEB,0x5D,0x44,0x90,
91202 -0x01,0x00,0x03,0x24,
91203 -0x3E,0x00,0x83,0x10,
91204 -0x30,0x1F,0xA2,0x26,
91205 -0x10,0x23,0x43,0x8C,
91206 -0xFF,0xEF,0x04,0x24,
91207 -0x00,0x08,0x63,0x34,
91208 -0x24,0x18,0x64,0x00,
91209 -0x2A,0x4A,0x00,0x08,
91210 -0x10,0x23,0x43,0xAC,
91211 -0xF6,0x01,0x82,0x36,
91212 -0x00,0x00,0x40,0xA4,
91213 -0x91,0x4A,0x00,0x08,
91214 -0x02,0x80,0x04,0x3C,
91215 -0x58,0x3E,0x42,0x96,
91216 -0x00,0x00,0x00,0x00,
91217 -0x40,0x00,0x42,0x30,
91218 -0x66,0xFF,0x40,0x10,
91219 -0x02,0x80,0x04,0x3C,
91220 -0x00,0x10,0x02,0x3C,
91221 -0x25,0x88,0x22,0x02,
91222 -0x0F,0x00,0x08,0x24,
91223 -0x01,0x00,0x03,0x24,
91224 -0x0C,0x00,0x02,0x25,
91225 -0x04,0x10,0x43,0x00,
91226 -0x24,0x10,0x51,0x00,
91227 -0x16,0x00,0x40,0x14,
91228 -0x00,0x00,0x00,0x00,
91229 -0xFF,0xFF,0x08,0x25,
91230 -0xFA,0xFF,0x01,0x05,
91231 -0x0C,0x00,0x02,0x25,
91232 -0x00,0x12,0x16,0x00,
91233 -0x00,0x1B,0x16,0x00,
91234 -0x25,0x18,0x62,0x00,
91235 -0x00,0x21,0x16,0x00,
91236 -0x25,0x18,0x64,0x00,
91237 -0x25,0xB0,0x02,0x3C,
91238 -0x25,0x18,0x76,0x00,
91239 -0xF6,0x01,0x42,0x34,
91240 -0x00,0x00,0x43,0xA4,
91241 -0x91,0x4A,0x00,0x08,
91242 -0x02,0x80,0x04,0x3C,
91243 -0x10,0x23,0xA2,0x8C,
91244 -0xFF,0xF7,0x03,0x24,
91245 -0xFF,0xEF,0x04,0x24,
91246 -0x24,0x10,0x43,0x00,
91247 -0x24,0x10,0x44,0x00,
91248 -0x2A,0x4A,0x00,0x08,
91249 -0x10,0x23,0xA2,0xAC,
91250 -0x38,0x4B,0x00,0x08,
91251 -0xFF,0x00,0x16,0x31,
91252 -0x30,0x1F,0xA2,0x26,
91253 -0x54,0x4A,0x00,0x08,
91254 -0x50,0x3E,0x40,0xAC,
91255 -0x02,0x80,0x02,0x3C,
91256 -0x30,0x1F,0x42,0x24,
91257 -0x4F,0x4A,0x00,0x08,
91258 -0x10,0x3E,0x40,0xAC,
91259 -0x54,0x4A,0x00,0x08,
91260 -0x50,0x3E,0x20,0xAE,
91261 -0x21,0x20,0x00,0x02,
91262 -0x78,0x0F,0x00,0x0C,
91263 -0x21,0x28,0x00,0x00,
91264 -0x50,0x4A,0x00,0x08,
91265 -0x30,0x1F,0xB1,0x26,
91266 -0x10,0x23,0x43,0x8C,
91267 -0xFF,0xF7,0x04,0x24,
91268 -0x24,0x18,0x64,0x00,
91269 -0x00,0x10,0x63,0x34,
91270 -0x2A,0x4A,0x00,0x08,
91271 -0x10,0x23,0x43,0xAC,
91272 -0xD8,0xFF,0xBD,0x27,
91273 -0x1C,0x00,0xB1,0xAF,
91274 -0x18,0x00,0xB0,0xAF,
91275 -0x20,0x00,0xBF,0xAF,
91276 -0x02,0x00,0x82,0x90,
91277 -0x02,0x80,0x03,0x3C,
91278 -0xE0,0x3A,0x65,0x94,
91279 -0x0F,0x00,0x42,0x30,
91280 -0x00,0x00,0x83,0x8C,
91281 -0xC0,0x10,0x02,0x00,
91282 -0x21,0x20,0x44,0x00,
91283 -0x00,0x10,0xA8,0x30,
91284 -0x02,0x80,0x02,0x3C,
91285 -0x00,0x08,0xA5,0x30,
91286 -0x84,0x58,0x51,0x24,
91287 -0xFF,0x3F,0x63,0x30,
91288 -0x06,0x00,0xA0,0x10,
91289 -0x18,0x00,0x90,0x24,
91290 -0xE8,0xFF,0x67,0x24,
91291 -0x30,0x00,0x84,0x24,
91292 -0x21,0x28,0x00,0x00,
91293 -0x07,0x00,0x00,0x11,
91294 -0x10,0x00,0xA6,0x27,
91295 -0x20,0x00,0xBF,0x8F,
91296 -0x1C,0x00,0xB1,0x8F,
91297 -0x18,0x00,0xB0,0x8F,
91298 -0x21,0x10,0x00,0x00,
91299 -0x08,0x00,0xE0,0x03,
91300 -0x28,0x00,0xBD,0x27,
91301 -0x55,0x1D,0x00,0x0C,
91302 -0x00,0x00,0x00,0x00,
91303 -0xF7,0xFF,0x40,0x10,
91304 -0x00,0x00,0x00,0x00,
91305 -0x02,0x00,0x44,0x24,
91306 -0x10,0x00,0xA2,0x8F,
91307 -0x00,0x00,0x00,0x00,
91308 -0x06,0x00,0x40,0x10,
91309 -0x10,0x00,0x25,0x26,
91310 -0x0C,0x00,0x26,0x8E,
91311 -0x39,0x52,0x00,0x0C,
91312 -0x00,0x00,0x00,0x00,
91313 -0xED,0xFF,0x40,0x14,
91314 -0x00,0x00,0x00,0x00,
91315 -0x42,0x50,0x00,0x0C,
91316 -0x21,0x20,0x00,0x02,
91317 -0x01,0x10,0x00,0x0C,
91318 -0x21,0x20,0x40,0x00,
91319 -0x77,0x4B,0x00,0x08,
91320 -0x00,0x00,0x00,0x00,
91321 -0x08,0x00,0xE0,0x03,
91322 -0x21,0x10,0x00,0x00,
91323 -0xE8,0xFF,0xBD,0x27,
91324 -0x10,0x00,0xBF,0xAF,
91325 -0xE5,0x48,0x00,0x0C,
91326 -0xFE,0xFF,0x05,0x24,
91327 -0x10,0x00,0xBF,0x8F,
91328 -0x21,0x10,0x00,0x00,
91329 -0x08,0x00,0xE0,0x03,
91330 -0x18,0x00,0xBD,0x27,
91331 -0xE8,0xFF,0xBD,0x27,
91332 -0x10,0x00,0xBF,0xAF,
91333 -0xE5,0x48,0x00,0x0C,
91334 -0xFF,0xFF,0x05,0x24,
91335 -0x10,0x00,0xBF,0x8F,
91336 -0x21,0x10,0x00,0x00,
91337 -0x08,0x00,0xE0,0x03,
91338 -0x18,0x00,0xBD,0x27,
91339 -0x25,0xB0,0x03,0x3C,
91340 -0x01,0x80,0x02,0x3C,
91341 -0xB0,0x03,0x65,0x34,
91342 -0x8C,0x2E,0x42,0x24,
91343 -0x18,0x03,0x63,0x34,
91344 -0x00,0x00,0x62,0xAC,
91345 -0x00,0x00,0xA4,0xAC,
91346 -0x00,0x00,0x83,0x8C,
91347 -0x21,0x10,0x00,0x00,
91348 -0xFF,0x3F,0x63,0x30,
91349 -0x00,0x00,0xA3,0xAC,
91350 -0x08,0x00,0xE0,0x03,
91351 -0x00,0x00,0x00,0x00,
91352 -0xE8,0xFF,0xBD,0x27,
91353 -0x02,0x80,0x02,0x3C,
91354 -0x10,0x00,0xB0,0xAF,
91355 -0x14,0x00,0xBF,0xAF,
91356 -0x30,0x1F,0x50,0x24,
91357 -0x70,0x3D,0x03,0x8E,
91358 -0xFE,0xFF,0x04,0x24,
91359 -0x01,0x00,0x63,0x24,
91360 -0x05,0x00,0x62,0x2C,
91361 -0x12,0x00,0x40,0x10,
91362 -0x70,0x3D,0x03,0xAE,
91363 -0xB0,0x1B,0x02,0x96,
91364 -0x00,0x00,0x00,0x00,
91365 -0x00,0x01,0x42,0x30,
91366 -0x05,0x00,0x40,0x10,
91367 -0x00,0x00,0x00,0x00,
91368 -0x14,0x00,0xBF,0x8F,
91369 -0x10,0x00,0xB0,0x8F,
91370 -0x08,0x00,0xE0,0x03,
91371 -0x18,0x00,0xBD,0x27,
91372 -0xA5,0x12,0x00,0x0C,
91373 -0x00,0x00,0x00,0x00,
91374 -0xC8,0x00,0x03,0x24,
91375 -0xD0,0x38,0x03,0xAE,
91376 -0x14,0x00,0xBF,0x8F,
91377 -0x10,0x00,0xB0,0x8F,
91378 -0x08,0x00,0xE0,0x03,
91379 -0x18,0x00,0xBD,0x27,
91380 -0xB0,0x1B,0x02,0x96,
91381 -0x00,0x00,0x00,0x00,
91382 -0xFF,0xDF,0x42,0x30,
91383 -0x48,0x0E,0x00,0x0C,
91384 -0xB0,0x1B,0x02,0xA6,
91385 -0x14,0x00,0xBF,0x8F,
91386 -0x10,0x00,0xB0,0x8F,
91387 -0x08,0x00,0xE0,0x03,
91388 -0x18,0x00,0xBD,0x27,
91389 -0xD0,0xFF,0xBD,0x27,
91390 -0x28,0x00,0xB4,0xAF,
91391 -0x24,0x00,0xB3,0xAF,
91392 -0x20,0x00,0xB2,0xAF,
91393 -0x1C,0x00,0xB1,0xAF,
91394 -0x18,0x00,0xB0,0xAF,
91395 -0x2C,0x00,0xBF,0xAF,
91396 -0x02,0x00,0x82,0x90,
91397 -0x02,0x80,0x14,0x3C,
91398 -0x30,0x1F,0x92,0x26,
91399 -0xB0,0x1B,0x43,0x96,
91400 -0x00,0x00,0x85,0x8C,
91401 -0x0F,0x00,0x42,0x30,
91402 -0xC0,0x10,0x02,0x00,
91403 -0x21,0x80,0x44,0x00,
91404 -0x01,0x00,0x63,0x30,
91405 -0xFF,0x3F,0xB3,0x30,
91406 -0x18,0x00,0x11,0x26,
91407 -0x0A,0x00,0x60,0x14,
91408 -0x21,0x20,0x00,0x00,
91409 -0x2C,0x00,0xBF,0x8F,
91410 -0x28,0x00,0xB4,0x8F,
91411 -0x24,0x00,0xB3,0x8F,
91412 -0x20,0x00,0xB2,0x8F,
91413 -0x1C,0x00,0xB1,0x8F,
91414 -0x18,0x00,0xB0,0x8F,
91415 -0x21,0x10,0x80,0x00,
91416 -0x08,0x00,0xE0,0x03,
91417 -0x30,0x00,0xBD,0x27,
91418 -0x55,0x50,0x00,0x0C,
91419 -0x21,0x20,0x20,0x02,
91420 -0x02,0x80,0x04,0x3C,
91421 -0x18,0x3B,0x84,0x24,
91422 -0x21,0x28,0x40,0x00,
91423 -0x39,0x52,0x00,0x0C,
91424 -0x06,0x00,0x06,0x24,
91425 -0xEF,0xFF,0x40,0x14,
91426 -0x21,0x20,0x00,0x00,
91427 -0xB0,0x1B,0x42,0x96,
91428 -0x00,0x00,0x00,0x00,
91429 -0x00,0x10,0x42,0x30,
91430 -0xEA,0xFF,0x40,0x14,
91431 -0x00,0x00,0x00,0x00,
91432 -0x18,0x00,0x03,0x96,
91433 -0x04,0x00,0x04,0x24,
91434 -0x21,0x10,0x80,0x00,
91435 -0x00,0x40,0x63,0x30,
91436 -0x0A,0x10,0x03,0x00,
91437 -0x21,0x10,0x22,0x02,
91438 -0x1C,0x00,0x43,0x94,
91439 -0x1A,0x00,0x45,0x94,
91440 -0x2F,0x00,0x60,0x14,
91441 -0x02,0x00,0x02,0x24,
91442 -0x14,0x00,0xA2,0x10,
91443 -0x01,0x00,0x02,0x24,
91444 -0x0E,0x00,0xA4,0x14,
91445 -0x02,0x80,0x04,0x3C,
91446 -0x78,0x3D,0x43,0x8E,
91447 -0x00,0x00,0x00,0x00,
91448 -0x06,0x00,0x62,0x10,
91449 -0x30,0x1F,0x83,0x26,
91450 -0xB0,0x1B,0x62,0x94,
91451 -0xFF,0xFF,0x04,0x24,
91452 -0xFF,0xDF,0x42,0x30,
91453 -0xE9,0x4B,0x00,0x08,
91454 -0xB0,0x1B,0x62,0xA4,
91455 -0x84,0x14,0x00,0x0C,
91456 -0x00,0x00,0x00,0x00,
91457 -0xE9,0x4B,0x00,0x08,
91458 -0x21,0x20,0x00,0x00,
91459 -0x2F,0x55,0x00,0x0C,
91460 -0xEC,0xE1,0x84,0x24,
91461 -0x12,0x4C,0x00,0x08,
91462 -0x30,0x1F,0x83,0x26,
91463 -0x78,0x3D,0x43,0x8E,
91464 -0x00,0x00,0x00,0x00,
91465 -0xF5,0xFF,0x62,0x14,
91466 -0xE2,0xFF,0x67,0x26,
91467 -0x36,0x00,0x04,0x26,
91468 -0x10,0x00,0x05,0x24,
91469 -0x55,0x1D,0x00,0x0C,
91470 -0x10,0x00,0xA6,0x27,
91471 -0x16,0x00,0x40,0x10,
91472 -0x00,0x00,0x00,0x00,
91473 -0x10,0x00,0xA6,0x8F,
91474 -0x02,0x80,0x04,0x3C,
91475 -0xB8,0x5C,0x84,0x24,
91476 -0x10,0x52,0x00,0x0C,
91477 -0x02,0x00,0x45,0x24,
91478 -0xB0,0x1B,0x43,0x96,
91479 -0x21,0x20,0x00,0x00,
91480 -0x03,0x00,0x02,0x24,
91481 -0xDF,0xFF,0x63,0x30,
91482 -0x40,0x00,0x63,0x34,
91483 -0xB0,0x1B,0x43,0xA6,
91484 -0xBC,0x15,0x00,0x0C,
91485 -0x74,0x3D,0x42,0xAE,
91486 -0xE9,0x4B,0x00,0x08,
91487 -0x21,0x20,0x00,0x00,
91488 -0x02,0x80,0x04,0x3C,
91489 -0xBC,0xE1,0x84,0x24,
91490 -0x2F,0x55,0x00,0x0C,
91491 -0x21,0x28,0x60,0x00,
91492 -0x12,0x4C,0x00,0x08,
91493 -0x30,0x1F,0x83,0x26,
91494 -0x02,0x80,0x04,0x3C,
91495 -0x2F,0x55,0x00,0x0C,
91496 -0xD8,0xE1,0x84,0x24,
91497 -0x12,0x4C,0x00,0x08,
91498 -0x30,0x1F,0x83,0x26,
91499 -0xE8,0xFF,0xBD,0x27,
91500 -0x02,0x80,0x02,0x3C,
91501 -0x10,0x00,0xB0,0xAF,
91502 -0x14,0x00,0xBF,0xAF,
91503 -0x30,0x1F,0x50,0x24,
91504 -0x6C,0x3D,0x03,0x8E,
91505 -0xFF,0xFF,0x04,0x24,
91506 -0x01,0x00,0x63,0x24,
91507 -0x05,0x00,0x62,0x2C,
91508 -0x16,0x00,0x40,0x10,
91509 -0x6C,0x3D,0x03,0xAE,
91510 -0xB0,0x1B,0x03,0x96,
91511 -0xBF,0xFF,0x02,0x24,
91512 -0x21,0x20,0x00,0x00,
91513 -0x24,0x10,0x62,0x00,
91514 -0x80,0x00,0x63,0x30,
91515 -0x05,0x00,0x60,0x10,
91516 -0x20,0x00,0x45,0x34,
91517 -0x14,0x00,0xBF,0x8F,
91518 -0x10,0x00,0xB0,0x8F,
91519 -0x08,0x00,0xE0,0x03,
91520 -0x18,0x00,0xBD,0x27,
91521 -0x01,0x00,0x02,0x24,
91522 -0x74,0x3D,0x02,0xAE,
91523 -0xBC,0x15,0x00,0x0C,
91524 -0xB0,0x1B,0x05,0xA6,
91525 -0xC8,0x00,0x03,0x24,
91526 -0xB4,0x38,0x03,0xAE,
91527 -0x14,0x00,0xBF,0x8F,
91528 -0x10,0x00,0xB0,0x8F,
91529 -0x08,0x00,0xE0,0x03,
91530 -0x18,0x00,0xBD,0x27,
91531 -0xB0,0x1B,0x02,0x96,
91532 -0x00,0x00,0x00,0x00,
91533 -0xFF,0xDF,0x42,0x30,
91534 -0x48,0x0E,0x00,0x0C,
91535 -0xB0,0x1B,0x02,0xA6,
91536 -0x14,0x00,0xBF,0x8F,
91537 -0x10,0x00,0xB0,0x8F,
91538 -0x08,0x00,0xE0,0x03,
91539 -0x18,0x00,0xBD,0x27,
91540 -0xD0,0xFF,0xBD,0x27,
91541 -0x20,0x00,0xB2,0xAF,
91542 -0x21,0x90,0x80,0x00,
91543 -0x00,0x01,0x04,0x24,
91544 -0x24,0x00,0xB3,0xAF,
91545 -0x1C,0x00,0xB1,0xAF,
91546 -0x21,0x98,0xA0,0x00,
91547 -0x28,0x00,0xBF,0xAF,
91548 -0x25,0x24,0x00,0x0C,
91549 -0x18,0x00,0xB0,0xAF,
91550 -0x02,0x80,0x04,0x3C,
91551 -0x02,0x80,0x05,0x3C,
91552 -0x21,0x88,0x40,0x00,
91553 -0x20,0xE2,0x84,0x24,
91554 -0x37,0x00,0x40,0x10,
91555 -0x04,0xEB,0xA5,0x24,
91556 -0x2F,0x55,0x00,0x0C,
91557 -0x00,0x00,0x00,0x00,
91558 -0x08,0x00,0x30,0x96,
91559 -0x02,0x80,0x02,0x3C,
91560 -0x21,0x28,0x40,0x02,
91561 -0x25,0x80,0x02,0x02,
91562 -0x24,0x00,0x04,0x26,
91563 -0x20,0x00,0x00,0xA6,
91564 -0x10,0x52,0x00,0x0C,
91565 -0x06,0x00,0x06,0x24,
91566 -0x02,0x80,0x05,0x3C,
91567 -0x2A,0x00,0x04,0x26,
91568 -0x18,0x3B,0xA5,0x24,
91569 -0x10,0x52,0x00,0x0C,
91570 -0x06,0x00,0x06,0x24,
91571 -0x02,0x80,0x05,0x3C,
91572 -0x30,0x00,0x04,0x26,
91573 -0x88,0x58,0xA5,0x24,
91574 -0x10,0x52,0x00,0x0C,
91575 -0x06,0x00,0x06,0x24,
91576 -0x20,0x00,0x03,0x96,
91577 -0x18,0x00,0x02,0x24,
91578 -0x02,0x80,0x05,0x3C,
91579 -0x03,0xFF,0x63,0x30,
91580 -0xC0,0x00,0x63,0x34,
91581 -0x20,0x00,0x03,0xA6,
91582 -0x30,0x1F,0xA5,0x24,
91583 -0x0C,0x00,0x22,0xAE,
91584 -0xF8,0x1D,0xA3,0x94,
91585 -0x20,0x00,0x07,0x26,
91586 -0x38,0x00,0x04,0x26,
91587 -0xFF,0x0F,0x62,0x30,
91588 -0x00,0x11,0x02,0x00,
91589 -0x02,0x32,0x02,0x00,
91590 -0x01,0x00,0x63,0x24,
91591 -0xF8,0x1D,0xA3,0xA4,
91592 -0x17,0x00,0xE6,0xA0,
91593 -0x16,0x00,0xE2,0xA0,
91594 -0x10,0x00,0xA6,0x27,
91595 -0x0C,0x00,0x27,0x26,
91596 -0x02,0x00,0x05,0x24,
91597 -0x68,0x4F,0x00,0x0C,
91598 -0x10,0x00,0xB3,0xA7,
91599 -0x21,0x20,0x20,0x02,
91600 -0x21,0x28,0x00,0x00,
91601 -0xB9,0x0C,0x00,0x0C,
91602 -0x21,0x30,0x00,0x00,
91603 -0x28,0x00,0xBF,0x8F,
91604 -0x24,0x00,0xB3,0x8F,
91605 -0x20,0x00,0xB2,0x8F,
91606 -0x1C,0x00,0xB1,0x8F,
91607 -0x18,0x00,0xB0,0x8F,
91608 -0x08,0x00,0xE0,0x03,
91609 -0x30,0x00,0xBD,0x27,
91610 -0x02,0x80,0x04,0x3C,
91611 -0x2F,0x55,0x00,0x0C,
91612 -0x14,0xE2,0x84,0x24,
91613 -0x28,0x00,0xBF,0x8F,
91614 -0x24,0x00,0xB3,0x8F,
91615 -0x20,0x00,0xB2,0x8F,
91616 -0x1C,0x00,0xB1,0x8F,
91617 -0x18,0x00,0xB0,0x8F,
91618 -0x08,0x00,0xE0,0x03,
91619 -0x30,0x00,0xBD,0x27,
91620 -0xD0,0xFF,0xBD,0x27,
91621 -0x20,0x00,0xB2,0xAF,
91622 -0x21,0x90,0x80,0x00,
91623 -0x00,0x01,0x04,0x24,
91624 -0x24,0x00,0xB3,0xAF,
91625 -0x1C,0x00,0xB1,0xAF,
91626 -0x21,0x98,0xA0,0x00,
91627 -0x28,0x00,0xBF,0xAF,
91628 -0x25,0x24,0x00,0x0C,
91629 -0x18,0x00,0xB0,0xAF,
91630 -0x02,0x80,0x04,0x3C,
91631 -0x02,0x80,0x05,0x3C,
91632 -0x21,0x88,0x40,0x00,
91633 -0x3C,0xE2,0x84,0x24,
91634 -0x37,0x00,0x40,0x10,
91635 -0x14,0xEB,0xA5,0x24,
91636 -0x2F,0x55,0x00,0x0C,
91637 -0x00,0x00,0x00,0x00,
91638 -0x08,0x00,0x30,0x96,
91639 -0x02,0x80,0x02,0x3C,
91640 -0x21,0x28,0x40,0x02,
91641 -0x25,0x80,0x02,0x02,
91642 -0x24,0x00,0x04,0x26,
91643 -0x20,0x00,0x00,0xA6,
91644 -0x10,0x52,0x00,0x0C,
91645 -0x06,0x00,0x06,0x24,
91646 -0x02,0x80,0x05,0x3C,
91647 -0x2A,0x00,0x04,0x26,
91648 -0x18,0x3B,0xA5,0x24,
91649 -0x10,0x52,0x00,0x0C,
91650 -0x06,0x00,0x06,0x24,
91651 -0x02,0x80,0x05,0x3C,
91652 -0x30,0x00,0x04,0x26,
91653 -0x88,0x58,0xA5,0x24,
91654 -0x10,0x52,0x00,0x0C,
91655 -0x06,0x00,0x06,0x24,
91656 -0x20,0x00,0x03,0x96,
91657 -0x18,0x00,0x02,0x24,
91658 -0x02,0x80,0x05,0x3C,
91659 -0x03,0xFF,0x63,0x30,
91660 -0xA0,0x00,0x63,0x34,
91661 -0x20,0x00,0x03,0xA6,
91662 -0x30,0x1F,0xA5,0x24,
91663 -0x0C,0x00,0x22,0xAE,
91664 -0xF8,0x1D,0xA3,0x94,
91665 -0x20,0x00,0x07,0x26,
91666 -0x38,0x00,0x04,0x26,
91667 -0xFF,0x0F,0x62,0x30,
91668 -0x00,0x11,0x02,0x00,
91669 -0x02,0x32,0x02,0x00,
91670 -0x01,0x00,0x63,0x24,
91671 -0xF8,0x1D,0xA3,0xA4,
91672 -0x17,0x00,0xE6,0xA0,
91673 -0x16,0x00,0xE2,0xA0,
91674 -0x10,0x00,0xA6,0x27,
91675 -0x0C,0x00,0x27,0x26,
91676 -0x02,0x00,0x05,0x24,
91677 -0x68,0x4F,0x00,0x0C,
91678 -0x10,0x00,0xB3,0xA7,
91679 -0x21,0x20,0x20,0x02,
91680 -0x21,0x28,0x00,0x00,
91681 -0xB9,0x0C,0x00,0x0C,
91682 -0x21,0x30,0x00,0x00,
91683 -0x28,0x00,0xBF,0x8F,
91684 -0x24,0x00,0xB3,0x8F,
91685 -0x20,0x00,0xB2,0x8F,
91686 -0x1C,0x00,0xB1,0x8F,
91687 -0x18,0x00,0xB0,0x8F,
91688 -0x08,0x00,0xE0,0x03,
91689 -0x30,0x00,0xBD,0x27,
91690 -0x02,0x80,0x04,0x3C,
91691 -0x2F,0x55,0x00,0x0C,
91692 -0x30,0xE2,0x84,0x24,
91693 -0x28,0x00,0xBF,0x8F,
91694 -0x24,0x00,0xB3,0x8F,
91695 -0x20,0x00,0xB2,0x8F,
91696 -0x1C,0x00,0xB1,0x8F,
91697 -0x18,0x00,0xB0,0x8F,
91698 -0x08,0x00,0xE0,0x03,
91699 -0x30,0x00,0xBD,0x27,
91700 -0xC8,0xFF,0xBD,0x27,
91701 -0x2C,0x00,0xB1,0xAF,
91702 -0xFF,0xFF,0x05,0x24,
91703 -0x21,0x88,0x80,0x00,
91704 -0x02,0x00,0x06,0x24,
91705 -0x10,0x00,0xA4,0x27,
91706 -0x34,0x00,0xBF,0xAF,
91707 -0x30,0x00,0xB2,0xAF,
91708 -0x08,0x52,0x00,0x0C,
91709 -0x28,0x00,0xB0,0xAF,
91710 -0x08,0x00,0x30,0x96,
91711 -0x02,0x80,0x02,0x3C,
91712 -0x21,0x28,0x00,0x00,
91713 -0x25,0x80,0x02,0x02,
91714 -0x21,0x20,0x00,0x02,
91715 -0x08,0x52,0x00,0x0C,
91716 -0x10,0x00,0x06,0x24,
91717 -0x20,0x00,0x02,0x96,
91718 -0x24,0x00,0x04,0x26,
91719 -0x10,0x00,0xA5,0x27,
91720 -0x03,0xFF,0x42,0x30,
91721 -0xC8,0x00,0x42,0x34,
91722 -0x20,0x00,0x02,0xA6,
91723 -0x10,0x52,0x00,0x0C,
91724 -0x06,0x00,0x06,0x24,
91725 -0x25,0xB0,0x03,0x3C,
91726 -0x50,0x00,0x62,0x34,
91727 -0x00,0x00,0x44,0x8C,
91728 -0x54,0x00,0x65,0x34,
91729 -0x58,0x00,0x66,0x34,
91730 -0x18,0x00,0xA4,0xAF,
91731 -0x00,0x00,0xA2,0x8C,
91732 -0x5C,0x00,0x63,0x34,
91733 -0x2A,0x00,0x04,0x26,
91734 -0x1C,0x00,0xA2,0xAF,
91735 -0x00,0x00,0xC7,0x8C,
91736 -0x18,0x00,0xA5,0x27,
91737 -0x06,0x00,0x06,0x24,
91738 -0x20,0x00,0xA7,0xAF,
91739 -0x00,0x00,0x62,0x8C,
91740 -0x1A,0x00,0x12,0x24,
91741 -0x10,0x52,0x00,0x0C,
91742 -0x24,0x00,0xA2,0xAF,
91743 -0x30,0x00,0x04,0x26,
91744 -0x20,0x00,0xA5,0x27,
91745 -0x10,0x52,0x00,0x0C,
91746 -0x06,0x00,0x06,0x24,
91747 -0x13,0x00,0x03,0x24,
91748 -0x14,0x00,0x23,0xAE,
91749 -0x0C,0x00,0x32,0xAE,
91750 -0x08,0x00,0x05,0x8E,
91751 -0x04,0x00,0x04,0x8E,
91752 -0xFF,0xDF,0x02,0x3C,
91753 -0x14,0x00,0x06,0x8E,
91754 -0xFF,0xFF,0x42,0x34,
91755 -0x10,0x00,0x07,0x8E,
91756 -0xFF,0xE0,0x03,0x24,
91757 -0x24,0x28,0xA2,0x00,
91758 -0x00,0x40,0x02,0x3C,
91759 -0x24,0x20,0x83,0x00,
91760 -0x25,0x28,0xA2,0x00,
91761 -0xFF,0x81,0x03,0x24,
91762 -0xFE,0xFF,0x02,0x3C,
91763 -0x24,0x30,0xC3,0x00,
91764 -0xFF,0xFF,0x42,0x34,
91765 -0x00,0x12,0x84,0x34,
91766 -0x00,0x80,0x03,0x3C,
91767 -0x24,0x20,0x82,0x00,
91768 -0x25,0x38,0xE3,0x00,
91769 -0x00,0x26,0xC6,0x34,
91770 -0x80,0x00,0xA5,0x34,
91771 -0x20,0x00,0x02,0x24,
91772 -0x00,0x00,0x12,0xA6,
91773 -0x10,0x00,0x07,0xAE,
91774 -0x02,0x00,0x02,0xA2,
91775 -0x14,0x00,0x06,0xAE,
91776 -0x04,0x00,0x04,0xAE,
91777 -0x08,0x00,0x05,0xAE,
91778 -0x34,0x00,0xBF,0x8F,
91779 -0x30,0x00,0xB2,0x8F,
91780 -0x2C,0x00,0xB1,0x8F,
91781 -0x28,0x00,0xB0,0x8F,
91782 -0x08,0x00,0xE0,0x03,
91783 -0x38,0x00,0xBD,0x27,
91784 -0xC8,0xFF,0xBD,0x27,
91785 -0x1C,0x00,0xB1,0xAF,
91786 -0x01,0x80,0x02,0x3C,
91787 -0x25,0xB0,0x11,0x3C,
91788 -0x18,0x03,0x23,0x36,
91789 -0x80,0x35,0x42,0x24,
91790 -0x28,0x00,0xB4,0xAF,
91791 -0x20,0x00,0xB2,0xAF,
91792 -0x21,0xA0,0x80,0x00,
91793 -0x48,0x00,0xB2,0x93,
91794 -0xFF,0x00,0xE4,0x30,
91795 -0x00,0x00,0x62,0xAC,
91796 -0x24,0x00,0xB3,0xAF,
91797 -0x18,0x00,0xB0,0xAF,
91798 -0x30,0x00,0xBF,0xAF,
91799 -0x2C,0x00,0xB5,0xAF,
91800 -0xFF,0x00,0xB3,0x30,
91801 -0x0D,0x24,0x00,0x0C,
91802 -0xFF,0x00,0xD0,0x30,
91803 -0x66,0x00,0x40,0x10,
91804 -0x10,0x00,0xA2,0xAF,
91805 -0x08,0x00,0x44,0x8C,
91806 -0xB0,0x03,0x22,0x36,
91807 -0x00,0x00,0x44,0xAC,
91808 -0x10,0x00,0xA3,0x8F,
91809 -0x02,0x80,0x02,0x3C,
91810 -0x08,0x00,0x64,0x94,
91811 -0x00,0x00,0x00,0x00,
91812 -0x25,0x88,0x82,0x00,
91813 -0x41,0x00,0x40,0x16,
91814 -0x20,0x00,0x24,0x26,
91815 -0x48,0x00,0x02,0x24,
91816 -0x43,0x00,0x02,0x12,
91817 -0x20,0x00,0x30,0xA6,
91818 -0x04,0x00,0x02,0x24,
91819 -0x47,0x00,0x62,0x16,
91820 -0x21,0x28,0x80,0x02,
91821 -0xA4,0x00,0x02,0x24,
91822 -0x61,0x00,0x02,0x12,
91823 -0x02,0x80,0x02,0x3C,
91824 -0x10,0x00,0xA2,0x8F,
91825 -0x25,0xB0,0x10,0x3C,
91826 -0xB0,0x03,0x10,0x36,
91827 -0x0C,0x00,0x55,0xAC,
91828 -0x10,0x00,0xA2,0x8F,
91829 -0x12,0x00,0x03,0x24,
91830 -0x21,0x28,0x00,0x00,
91831 -0x14,0x00,0x43,0xAC,
91832 -0x00,0x00,0x15,0xAE,
91833 -0x10,0x00,0xA2,0x8F,
91834 -0x08,0x00,0x06,0x24,
91835 -0x08,0x00,0x43,0x8C,
91836 -0x00,0x00,0x00,0x00,
91837 -0x00,0x00,0x03,0xAE,
91838 -0x10,0x00,0xA2,0x8F,
91839 -0x02,0x80,0x03,0x3C,
91840 -0x08,0x00,0x44,0x94,
91841 -0x00,0x00,0x00,0x00,
91842 -0x25,0x88,0x83,0x00,
91843 -0x08,0x52,0x00,0x0C,
91844 -0x21,0x20,0x20,0x02,
91845 -0x14,0x00,0x25,0x8E,
91846 -0x08,0x00,0x24,0x8E,
91847 -0xFF,0xDF,0x02,0x3C,
91848 -0xFF,0x81,0x03,0x24,
91849 -0xFF,0xFF,0x42,0x34,
91850 -0x24,0x28,0xA3,0x00,
91851 -0x24,0x20,0x82,0x00,
91852 -0x00,0x40,0x03,0x3C,
91853 -0x25,0x20,0x83,0x00,
91854 -0x20,0x00,0x02,0x24,
91855 -0x00,0x24,0xA5,0x34,
91856 -0x00,0x00,0x35,0xA6,
91857 -0x02,0x00,0x22,0xA2,
91858 -0x08,0x00,0x24,0xAE,
91859 -0x14,0x00,0x25,0xAE,
91860 -0x02,0x80,0x02,0x3C,
91861 -0x10,0x00,0xA3,0x8F,
91862 -0x74,0x57,0x42,0x24,
91863 -0x04,0x00,0x44,0x8C,
91864 -0x00,0x00,0x62,0xAC,
91865 -0x04,0x00,0x43,0xAC,
91866 -0x10,0x00,0xA2,0x27,
91867 -0x00,0x00,0x83,0xAC,
91868 -0x04,0x00,0x64,0xAC,
91869 -0x30,0x00,0xBF,0x8F,
91870 -0x00,0x00,0x02,0xAE,
91871 -0x2C,0x00,0xB5,0x8F,
91872 -0x28,0x00,0xB4,0x8F,
91873 -0x24,0x00,0xB3,0x8F,
91874 -0x20,0x00,0xB2,0x8F,
91875 -0x1C,0x00,0xB1,0x8F,
91876 -0x18,0x00,0xB0,0x8F,
91877 -0x08,0x00,0xE0,0x03,
91878 -0x38,0x00,0xBD,0x27,
91879 -0x00,0x10,0x02,0x36,
91880 -0x20,0x00,0x22,0xA6,
91881 -0x48,0x00,0x02,0x24,
91882 -0xC0,0xFF,0x02,0x16,
91883 -0x04,0x00,0x02,0x24,
91884 -0x20,0x00,0x22,0x96,
91885 -0x00,0x00,0x00,0x00,
91886 -0x00,0x01,0x42,0x34,
91887 -0x20,0x00,0x22,0xA6,
91888 -0x04,0x00,0x02,0x24,
91889 -0xBB,0xFF,0x62,0x12,
91890 -0x21,0x28,0x80,0x02,
91891 -0x24,0x00,0x24,0x26,
91892 -0x10,0x52,0x00,0x0C,
91893 -0x06,0x00,0x06,0x24,
91894 -0x02,0x80,0x05,0x3C,
91895 -0x18,0x3B,0xA5,0x24,
91896 -0x2A,0x00,0x24,0x26,
91897 -0x10,0x52,0x00,0x0C,
91898 -0x06,0x00,0x06,0x24,
91899 -0x02,0x80,0x05,0x3C,
91900 -0x30,0x00,0x24,0x26,
91901 -0x88,0x58,0xA5,0x24,
91902 -0x10,0x52,0x00,0x0C,
91903 -0x06,0x00,0x06,0x24,
91904 -0x88,0x4D,0x00,0x08,
91905 -0x18,0x00,0x15,0x24,
91906 -0x02,0x80,0x04,0x3C,
91907 -0x02,0x80,0x05,0x3C,
91908 -0x4C,0xE2,0x84,0x24,
91909 -0x2F,0x55,0x00,0x0C,
91910 -0x24,0xEB,0xA5,0x24,
91911 -0x30,0x00,0xBF,0x8F,
91912 -0x2C,0x00,0xB5,0x8F,
91913 -0x28,0x00,0xB4,0x8F,
91914 -0x24,0x00,0xB3,0x8F,
91915 -0x20,0x00,0xB2,0x8F,
91916 -0x1C,0x00,0xB1,0x8F,
91917 -0x18,0x00,0xB0,0x8F,
91918 -0x08,0x00,0xE0,0x03,
91919 -0x38,0x00,0xBD,0x27,
91920 -0x80,0x58,0x43,0x94,
91921 -0x02,0x80,0x05,0x3C,
91922 -0x88,0x58,0xA5,0x24,
91923 -0x00,0xC0,0x63,0x24,
91924 -0xFF,0xFF,0x63,0x30,
91925 -0x02,0x12,0x03,0x00,
91926 -0x02,0x00,0x83,0xA0,
91927 -0x03,0x00,0x82,0xA0,
91928 -0x06,0x00,0x06,0x24,
91929 -0x10,0x52,0x00,0x0C,
91930 -0x24,0x00,0x24,0x26,
91931 -0x02,0x80,0x05,0x3C,
91932 -0x2A,0x00,0x24,0x26,
91933 -0x18,0x3B,0xA5,0x24,
91934 -0x10,0x52,0x00,0x0C,
91935 -0x06,0x00,0x06,0x24,
91936 -0x88,0x4D,0x00,0x08,
91937 -0x18,0x00,0x15,0x24,
91938 -0xB0,0xFF,0xBD,0x27,
91939 -0x3C,0x00,0xB5,0xAF,
91940 -0x38,0x00,0xB4,0xAF,
91941 -0xFF,0xFF,0xF5,0x30,
91942 -0x25,0xB0,0x14,0x3C,
91943 -0x01,0x80,0x02,0x3C,
91944 -0x2C,0x00,0xB1,0xAF,
91945 -0x18,0x03,0x83,0x36,
91946 -0xE8,0x37,0x42,0x24,
91947 -0x20,0x00,0xB1,0x26,
91948 -0x44,0x00,0xB7,0xAF,
91949 -0x34,0x00,0xB3,0xAF,
91950 -0x21,0xB8,0x80,0x00,
91951 -0x60,0x00,0xB3,0x93,
91952 -0x21,0x20,0x20,0x02,
91953 -0x00,0x00,0x62,0xAC,
91954 -0x40,0x00,0xB6,0xAF,
91955 -0x30,0x00,0xB2,0xAF,
91956 -0x48,0x00,0xBF,0xAF,
91957 -0x28,0x00,0xB0,0xAF,
91958 -0xFF,0x00,0xB6,0x30,
91959 -0x25,0x24,0x00,0x0C,
91960 -0xFF,0x00,0xD2,0x30,
91961 -0x11,0x00,0x40,0x14,
91962 -0x20,0x00,0xA2,0xAF,
91963 -0x02,0x80,0x04,0x3C,
91964 -0x02,0x80,0x05,0x3C,
91965 -0x58,0xE2,0x84,0x24,
91966 -0x2F,0x55,0x00,0x0C,
91967 -0x30,0xEB,0xA5,0x24,
91968 -0x48,0x00,0xBF,0x8F,
91969 -0x44,0x00,0xB7,0x8F,
91970 -0x40,0x00,0xB6,0x8F,
91971 -0x3C,0x00,0xB5,0x8F,
91972 -0x38,0x00,0xB4,0x8F,
91973 -0x34,0x00,0xB3,0x8F,
91974 -0x30,0x00,0xB2,0x8F,
91975 -0x2C,0x00,0xB1,0x8F,
91976 -0x28,0x00,0xB0,0x8F,
91977 -0x08,0x00,0xE0,0x03,
91978 -0x50,0x00,0xBD,0x27,
91979 -0x08,0x00,0x43,0x8C,
91980 -0xB0,0x03,0x82,0x36,
91981 -0x02,0x80,0x10,0x3C,
91982 -0x00,0x00,0x43,0xAC,
91983 -0x20,0x00,0xA2,0x8F,
91984 -0x21,0x30,0x20,0x02,
91985 -0x21,0x28,0x00,0x00,
91986 -0x08,0x00,0x44,0x94,
91987 -0xFF,0x51,0x00,0x0C,
91988 -0x25,0x20,0x90,0x00,
91989 -0x20,0x00,0xA3,0x8F,
91990 -0x00,0x00,0x00,0x00,
91991 -0x08,0x00,0x62,0x94,
91992 -0x00,0x00,0x00,0x00,
91993 -0x25,0x88,0x50,0x00,
91994 -0x51,0x00,0x60,0x16,
91995 -0x20,0x00,0x30,0x26,
91996 -0x20,0x00,0x32,0xA6,
91997 -0x48,0x00,0x02,0x24,
91998 -0x6C,0x00,0x42,0x12,
91999 -0x50,0x00,0x82,0x36,
92000 -0x04,0x00,0x02,0x24,
92001 -0x4D,0x00,0xC2,0x16,
92002 -0x21,0x28,0xE0,0x02,
92003 -0xA4,0x00,0x02,0x24,
92004 -0x7E,0x00,0x42,0x12,
92005 -0x02,0x80,0x02,0x3C,
92006 -0x20,0x00,0xA2,0x8F,
92007 -0x25,0xB0,0x10,0x3C,
92008 -0xB0,0x03,0x10,0x36,
92009 -0x0C,0x00,0x55,0xAC,
92010 -0x20,0x00,0xA2,0x8F,
92011 -0x12,0x00,0x03,0x24,
92012 -0x21,0x28,0x00,0x00,
92013 -0x14,0x00,0x43,0xAC,
92014 -0x00,0x00,0x15,0xAE,
92015 -0x20,0x00,0xA2,0x8F,
92016 -0x08,0x00,0x06,0x24,
92017 -0x08,0x00,0x43,0x8C,
92018 -0x00,0x00,0x00,0x00,
92019 -0x00,0x00,0x03,0xAE,
92020 -0x20,0x00,0xA2,0x8F,
92021 -0x02,0x80,0x03,0x3C,
92022 -0x08,0x00,0x44,0x94,
92023 -0x00,0x00,0x00,0x00,
92024 -0x25,0x88,0x83,0x00,
92025 -0x08,0x52,0x00,0x0C,
92026 -0x21,0x20,0x20,0x02,
92027 -0x04,0x00,0x25,0x8E,
92028 -0x08,0x00,0x26,0x8E,
92029 -0x14,0x00,0x27,0x8E,
92030 -0x10,0x00,0x24,0x8E,
92031 -0xFF,0xE0,0x03,0x24,
92032 -0xFF,0xDF,0x02,0x3C,
92033 -0x24,0x28,0xA3,0x00,
92034 -0xFF,0xFF,0x42,0x34,
92035 -0xFF,0x81,0x03,0x24,
92036 -0x24,0x38,0xE3,0x00,
92037 -0x24,0x30,0xC2,0x00,
92038 -0x00,0x80,0x03,0x3C,
92039 -0x00,0x40,0x02,0x3C,
92040 -0x25,0x30,0xC2,0x00,
92041 -0x25,0x20,0x83,0x00,
92042 -0x00,0x12,0xA5,0x34,
92043 -0x20,0x00,0x02,0x24,
92044 -0x10,0x00,0x24,0xAE,
92045 -0x00,0x00,0x35,0xA6,
92046 -0x02,0x00,0x22,0xA2,
92047 -0x04,0x00,0x25,0xAE,
92048 -0x14,0x00,0x27,0xAE,
92049 -0x08,0x00,0x26,0xAE,
92050 -0x00,0x60,0x05,0x40,
92051 -0x01,0x00,0xA1,0x34,
92052 -0x01,0x00,0x21,0x38,
92053 -0x00,0x60,0x81,0x40,
92054 -0x02,0x80,0x02,0x3C,
92055 -0x20,0x00,0xA3,0x8F,
92056 -0x74,0x57,0x42,0x24,
92057 -0x04,0x00,0x44,0x8C,
92058 -0x00,0x00,0x62,0xAC,
92059 -0x04,0x00,0x43,0xAC,
92060 -0x20,0x00,0xA2,0x27,
92061 -0x00,0x00,0x83,0xAC,
92062 -0x04,0x00,0x64,0xAC,
92063 -0x00,0x00,0x02,0xAE,
92064 -0x00,0x60,0x85,0x40,
92065 -0x48,0x00,0xBF,0x8F,
92066 -0x44,0x00,0xB7,0x8F,
92067 -0x40,0x00,0xB6,0x8F,
92068 -0x3C,0x00,0xB5,0x8F,
92069 -0x38,0x00,0xB4,0x8F,
92070 -0x34,0x00,0xB3,0x8F,
92071 -0x30,0x00,0xB2,0x8F,
92072 -0x2C,0x00,0xB1,0x8F,
92073 -0x28,0x00,0xB0,0x8F,
92074 -0x08,0x00,0xE0,0x03,
92075 -0x50,0x00,0xBD,0x27,
92076 -0x00,0x10,0x42,0x36,
92077 -0x35,0x4E,0x00,0x08,
92078 -0x20,0x00,0x22,0xA6,
92079 -0x24,0x00,0x24,0x26,
92080 -0x10,0x52,0x00,0x0C,
92081 -0x06,0x00,0x06,0x24,
92082 -0x02,0x80,0x05,0x3C,
92083 -0x18,0x3B,0xA5,0x24,
92084 -0x2A,0x00,0x24,0x26,
92085 -0x10,0x52,0x00,0x0C,
92086 -0x06,0x00,0x06,0x24,
92087 -0x02,0x80,0x05,0x3C,
92088 -0x30,0x00,0x24,0x26,
92089 -0x88,0x58,0xA5,0x24,
92090 -0x10,0x52,0x00,0x0C,
92091 -0x06,0x00,0x06,0x24,
92092 -0x02,0x80,0x05,0x3C,
92093 -0x30,0x1F,0xA5,0x24,
92094 -0xF8,0x1D,0xA6,0x94,
92095 -0x00,0x00,0x00,0x00,
92096 -0x01,0x00,0xC2,0x24,
92097 -0x00,0x21,0x06,0x00,
92098 -0xFF,0xFF,0x46,0x30,
92099 -0xFF,0xFF,0x84,0x30,
92100 -0x00,0x10,0xC2,0x2C,
92101 -0x0A,0x30,0x02,0x00,
92102 -0x02,0x1A,0x04,0x00,
92103 -0x17,0x00,0x03,0xA2,
92104 -0x16,0x00,0x04,0xA2,
92105 -0x3E,0x4E,0x00,0x08,
92106 -0xF8,0x1D,0xA6,0xA4,
92107 -0x00,0x00,0x43,0x8C,
92108 -0x54,0x00,0x84,0x36,
92109 -0x58,0x00,0x85,0x36,
92110 -0x10,0x00,0xA3,0xAF,
92111 -0x00,0x00,0x82,0x8C,
92112 -0x5C,0x00,0x87,0x36,
92113 -0x2A,0x00,0x24,0x26,
92114 -0x14,0x00,0xA2,0xAF,
92115 -0x00,0x00,0xA3,0x8C,
92116 -0x06,0x00,0x06,0x24,
92117 -0x10,0x00,0xA5,0x27,
92118 -0x18,0x00,0xA3,0xAF,
92119 -0x00,0x00,0xE2,0x8C,
92120 -0x10,0x52,0x00,0x0C,
92121 -0x1C,0x00,0xA2,0xAF,
92122 -0x30,0x00,0x24,0x26,
92123 -0x18,0x00,0xA5,0x27,
92124 -0x10,0x52,0x00,0x0C,
92125 -0x06,0x00,0x06,0x24,
92126 -0x20,0x00,0x23,0x96,
92127 -0x00,0x00,0x00,0x00,
92128 -0x00,0x01,0x63,0x34,
92129 -0x38,0x4E,0x00,0x08,
92130 -0x20,0x00,0x23,0xA6,
92131 -0x80,0x58,0x43,0x94,
92132 -0x02,0x80,0x05,0x3C,
92133 -0x24,0x00,0x24,0x26,
92134 -0x00,0xC0,0x63,0x24,
92135 -0xFF,0xFF,0x63,0x30,
92136 -0x02,0x12,0x03,0x00,
92137 -0x88,0x58,0xA5,0x24,
92138 -0x03,0x00,0x02,0xA2,
92139 -0x02,0x00,0x03,0xA2,
92140 -0x10,0x52,0x00,0x0C,
92141 -0x06,0x00,0x06,0x24,
92142 -0x02,0x80,0x05,0x3C,
92143 -0x2A,0x00,0x24,0x26,
92144 -0x18,0x3B,0xA5,0x24,
92145 -0x10,0x52,0x00,0x0C,
92146 -0x06,0x00,0x06,0x24,
92147 -0x3E,0x4E,0x00,0x08,
92148 -0x00,0x00,0x00,0x00,
92149 -0xE0,0xFF,0xBD,0x27,
92150 -0x18,0x00,0xB0,0xAF,
92151 -0xFF,0x00,0x90,0x30,
92152 -0x02,0x80,0x04,0x3C,
92153 -0x21,0x28,0x00,0x02,
92154 -0x1C,0x00,0xBF,0xAF,
92155 -0x2F,0x55,0x00,0x0C,
92156 -0x64,0xE2,0x84,0x24,
92157 -0x02,0x80,0x04,0x3C,
92158 -0x88,0x58,0x84,0x24,
92159 -0x08,0x00,0x05,0x24,
92160 -0x48,0x00,0x06,0x24,
92161 -0x18,0x00,0x07,0x24,
92162 -0xFA,0x4D,0x00,0x0C,
92163 -0x10,0x00,0xB0,0xAF,
92164 -0x1C,0x00,0xBF,0x8F,
92165 -0x18,0x00,0xB0,0x8F,
92166 -0x08,0x00,0xE0,0x03,
92167 -0x20,0x00,0xBD,0x27,
92168 -0xE0,0xFF,0xBD,0x27,
92169 -0x01,0x00,0x02,0x24,
92170 -0x21,0x28,0x00,0x00,
92171 -0x90,0x00,0x06,0x24,
92172 -0x21,0x38,0x00,0x00,
92173 -0x18,0x00,0xBF,0xAF,
92174 -0x60,0x4D,0x00,0x0C,
92175 -0x10,0x00,0xA2,0xAF,
92176 -0x18,0x00,0xBF,0x8F,
92177 -0x00,0x00,0x00,0x00,
92178 -0x08,0x00,0xE0,0x03,
92179 -0x20,0x00,0xBD,0x27,
92180 -0xD8,0xFF,0xBD,0x27,
92181 -0x20,0x00,0xB0,0xAF,
92182 -0xFF,0xFF,0x05,0x24,
92183 -0xFF,0x00,0x90,0x30,
92184 -0x02,0x00,0x06,0x24,
92185 -0x24,0x00,0xBF,0xAF,
92186 -0x08,0x52,0x00,0x0C,
92187 -0x18,0x00,0xA4,0x27,
92188 -0x18,0x00,0xA4,0x27,
92189 -0x08,0x00,0x05,0x24,
92190 -0xC8,0x00,0x06,0x24,
92191 -0x21,0x38,0x00,0x00,
92192 -0x60,0x4D,0x00,0x0C,
92193 -0x10,0x00,0xB0,0xAF,
92194 -0x24,0x00,0xBF,0x8F,
92195 -0x20,0x00,0xB0,0x8F,
92196 -0x08,0x00,0xE0,0x03,
92197 -0x28,0x00,0xBD,0x27,
92198 -0xE0,0xFF,0xBD,0x27,
92199 -0x02,0x80,0x05,0x3C,
92200 -0x1C,0x00,0xBF,0xAF,
92201 -0x18,0x00,0xB0,0xAF,
92202 -0x30,0x1F,0xA5,0x24,
92203 -0x50,0x39,0xA2,0x94,
92204 -0x01,0x00,0x03,0x24,
92205 -0xFF,0x00,0x90,0x30,
92206 -0x00,0xC0,0x42,0x24,
92207 -0xFF,0xFF,0x44,0x30,
92208 -0xC2,0x34,0x00,0x0C,
92209 -0x2A,0x1C,0xA3,0xA0,
92210 -0x02,0x80,0x04,0x3C,
92211 -0x88,0x58,0x84,0x24,
92212 -0x04,0x00,0x05,0x24,
92213 -0xA4,0x00,0x06,0x24,
92214 -0x10,0x00,0x07,0x24,
92215 -0xFA,0x4D,0x00,0x0C,
92216 -0x10,0x00,0xB0,0xAF,
92217 -0x1C,0x00,0xBF,0x8F,
92218 -0x18,0x00,0xB0,0x8F,
92219 -0x08,0x00,0xE0,0x03,
92220 -0x20,0x00,0xBD,0x27,
92221 -0x08,0x00,0xE0,0x03,
92222 -0x21,0x10,0x80,0x00,
92223 -0x08,0x00,0xE0,0x03,
92224 -0x08,0x00,0x82,0x24,
92225 -0xE0,0xFF,0xBD,0x27,
92226 -0x18,0x00,0xBF,0xAF,
92227 -0x17,0x4F,0x00,0x0C,
92228 -0x74,0x00,0x84,0x24,
92229 -0x21,0x28,0x40,0x00,
92230 -0x10,0x00,0xA4,0x27,
92231 -0x10,0x52,0x00,0x0C,
92232 -0x02,0x00,0x06,0x24,
92233 -0x10,0x00,0xA2,0x97,
92234 -0x18,0x00,0xBF,0x8F,
92235 -0x00,0x00,0x00,0x00,
92236 -0x08,0x00,0xE0,0x03,
92237 -0x20,0x00,0xBD,0x27,
92238 -0xE0,0xFF,0xBD,0x27,
92239 -0x18,0x00,0xBF,0xAF,
92240 -0x17,0x4F,0x00,0x0C,
92241 -0x10,0x00,0xA5,0xA7,
92242 -0x21,0x20,0x40,0x00,
92243 -0x10,0x00,0xA5,0x27,
92244 -0x10,0x52,0x00,0x0C,
92245 -0x02,0x00,0x06,0x24,
92246 -0x18,0x00,0xBF,0x8F,
92247 -0x00,0x00,0x00,0x00,
92248 -0x08,0x00,0xE0,0x03,
92249 -0x20,0x00,0xBD,0x27,
92250 -0x08,0x00,0xE0,0x03,
92251 -0x0A,0x00,0x82,0x24,
92252 -0xE0,0xFF,0xBD,0x27,
92253 -0x18,0x00,0xBF,0xAF,
92254 -0x32,0x4F,0x00,0x0C,
92255 -0x74,0x00,0x84,0x24,
92256 -0x21,0x28,0x40,0x00,
92257 -0x10,0x00,0xA4,0x27,
92258 -0x10,0x52,0x00,0x0C,
92259 -0x02,0x00,0x06,0x24,
92260 -0x10,0x00,0xA2,0x97,
92261 -0x18,0x00,0xBF,0x8F,
92262 -0x00,0x00,0x00,0x00,
92263 -0x08,0x00,0xE0,0x03,
92264 -0x20,0x00,0xBD,0x27,
92265 -0xE0,0xFF,0xBD,0x27,
92266 -0x10,0x00,0xB0,0xAF,
92267 -0x21,0x80,0x80,0x00,
92268 -0x00,0x00,0x05,0xA2,
92269 -0x01,0x00,0x06,0xA2,
92270 -0x18,0x00,0xB2,0xAF,
92271 -0x14,0x00,0xB1,0xAF,
92272 -0x1C,0x00,0xBF,0xAF,
92273 -0x21,0x88,0xC0,0x00,
92274 -0x02,0x00,0x84,0x24,
92275 -0x30,0x00,0xB2,0x8F,
92276 -0x0D,0x00,0xC0,0x14,
92277 -0x21,0x28,0xE0,0x00,
92278 -0x00,0x00,0x43,0x8E,
92279 -0x21,0x10,0x11,0x02,
92280 -0x1C,0x00,0xBF,0x8F,
92281 -0x21,0x18,0x71,0x00,
92282 -0x02,0x00,0x63,0x24,
92283 -0x00,0x00,0x43,0xAE,
92284 -0x14,0x00,0xB1,0x8F,
92285 -0x18,0x00,0xB2,0x8F,
92286 -0x10,0x00,0xB0,0x8F,
92287 -0x02,0x00,0x42,0x24,
92288 -0x08,0x00,0xE0,0x03,
92289 -0x20,0x00,0xBD,0x27,
92290 -0x10,0x52,0x00,0x0C,
92291 -0x00,0x00,0x00,0x00,
92292 -0x00,0x00,0x43,0x8E,
92293 -0x21,0x10,0x11,0x02,
92294 -0x1C,0x00,0xBF,0x8F,
92295 -0x21,0x18,0x71,0x00,
92296 -0x02,0x00,0x63,0x24,
92297 -0x00,0x00,0x43,0xAE,
92298 -0x14,0x00,0xB1,0x8F,
92299 -0x18,0x00,0xB2,0x8F,
92300 -0x10,0x00,0xB0,0x8F,
92301 -0x02,0x00,0x42,0x24,
92302 -0x08,0x00,0xE0,0x03,
92303 -0x20,0x00,0xBD,0x27,
92304 -0xE0,0xFF,0xBD,0x27,
92305 -0x10,0x00,0xB0,0xAF,
92306 -0x21,0x80,0xA0,0x00,
92307 -0x18,0x00,0xB2,0xAF,
92308 -0x21,0x28,0xC0,0x00,
92309 -0x21,0x90,0xE0,0x00,
92310 -0x21,0x30,0x00,0x02,
92311 -0x1C,0x00,0xBF,0xAF,
92312 -0x14,0x00,0xB1,0xAF,
92313 -0x10,0x52,0x00,0x0C,
92314 -0x21,0x88,0x80,0x00,
92315 -0x00,0x00,0x43,0x8E,
92316 -0x21,0x10,0x30,0x02,
92317 -0x1C,0x00,0xBF,0x8F,
92318 -0x21,0x18,0x70,0x00,
92319 -0x00,0x00,0x43,0xAE,
92320 -0x14,0x00,0xB1,0x8F,
92321 -0x18,0x00,0xB2,0x8F,
92322 -0x10,0x00,0xB0,0x8F,
92323 -0x08,0x00,0xE0,0x03,
92324 -0x20,0x00,0xBD,0x27,
92325 -0x7F,0x00,0x84,0x30,
92326 -0x6D,0x00,0x82,0x2C,
92327 -0x0A,0x00,0x40,0x10,
92328 -0x21,0x28,0x00,0x00,
92329 -0x02,0x80,0x03,0x3C,
92330 -0x80,0x10,0x04,0x00,
92331 -0x58,0xEB,0x63,0x24,
92332 -0x21,0x10,0x43,0x00,
92333 -0x00,0x00,0x44,0x8C,
92334 -0x00,0x00,0x00,0x00,
92335 -0x08,0x00,0x80,0x00,
92336 -0x00,0x00,0x00,0x00,
92337 -0x21,0x28,0x00,0x00,
92338 -0x08,0x00,0xE0,0x03,
92339 -0x21,0x10,0xA0,0x00,
92340 -0x0B,0x00,0x05,0x24,
92341 -0x08,0x00,0xE0,0x03,
92342 -0x21,0x10,0xA0,0x00,
92343 -0x0A,0x00,0x05,0x24,
92344 -0x08,0x00,0xE0,0x03,
92345 -0x21,0x10,0xA0,0x00,
92346 -0x09,0x00,0x05,0x24,
92347 -0x08,0x00,0xE0,0x03,
92348 -0x21,0x10,0xA0,0x00,
92349 -0x08,0x00,0x05,0x24,
92350 -0x08,0x00,0xE0,0x03,
92351 -0x21,0x10,0xA0,0x00,
92352 -0x07,0x00,0x05,0x24,
92353 -0x08,0x00,0xE0,0x03,
92354 -0x21,0x10,0xA0,0x00,
92355 -0x06,0x00,0x05,0x24,
92356 -0x08,0x00,0xE0,0x03,
92357 -0x21,0x10,0xA0,0x00,
92358 -0x03,0x00,0x05,0x24,
92359 -0x08,0x00,0xE0,0x03,
92360 -0x21,0x10,0xA0,0x00,
92361 -0x05,0x00,0x05,0x24,
92362 -0x08,0x00,0xE0,0x03,
92363 -0x21,0x10,0xA0,0x00,
92364 -0x04,0x00,0x05,0x24,
92365 -0x08,0x00,0xE0,0x03,
92366 -0x21,0x10,0xA0,0x00,
92367 -0x02,0x00,0x05,0x24,
92368 -0x08,0x00,0xE0,0x03,
92369 -0x21,0x10,0xA0,0x00,
92370 -0x01,0x00,0x05,0x24,
92371 -0x08,0x00,0xE0,0x03,
92372 -0x21,0x10,0xA0,0x00,
92373 -0x7F,0x00,0x84,0x30,
92374 -0x0C,0x00,0x82,0x2C,
92375 -0x0A,0x00,0x40,0x10,
92376 -0x21,0x18,0x00,0x00,
92377 -0x02,0x80,0x03,0x3C,
92378 -0x80,0x10,0x04,0x00,
92379 -0x0C,0xED,0x63,0x24,
92380 -0x21,0x10,0x43,0x00,
92381 -0x00,0x00,0x44,0x8C,
92382 -0x00,0x00,0x00,0x00,
92383 -0x08,0x00,0x80,0x00,
92384 -0x00,0x00,0x00,0x00,
92385 -0x6C,0x00,0x03,0x24,
92386 -0x08,0x00,0xE0,0x03,
92387 -0x21,0x10,0x60,0x00,
92388 -0x60,0x00,0x03,0x24,
92389 -0x08,0x00,0xE0,0x03,
92390 -0x21,0x10,0x60,0x00,
92391 -0x48,0x00,0x03,0x24,
92392 -0x08,0x00,0xE0,0x03,
92393 -0x21,0x10,0x60,0x00,
92394 -0x30,0x00,0x03,0x24,
92395 -0x08,0x00,0xE0,0x03,
92396 -0x21,0x10,0x60,0x00,
92397 -0x24,0x00,0x03,0x24,
92398 -0x08,0x00,0xE0,0x03,
92399 -0x21,0x10,0x60,0x00,
92400 -0x18,0x00,0x03,0x24,
92401 -0x08,0x00,0xE0,0x03,
92402 -0x21,0x10,0x60,0x00,
92403 -0x12,0x00,0x03,0x24,
92404 -0x08,0x00,0xE0,0x03,
92405 -0x21,0x10,0x60,0x00,
92406 -0x0C,0x00,0x03,0x24,
92407 -0x08,0x00,0xE0,0x03,
92408 -0x21,0x10,0x60,0x00,
92409 -0x16,0x00,0x03,0x24,
92410 -0x08,0x00,0xE0,0x03,
92411 -0x21,0x10,0x60,0x00,
92412 -0x0B,0x00,0x03,0x24,
92413 -0x08,0x00,0xE0,0x03,
92414 -0x21,0x10,0x60,0x00,
92415 -0x04,0x00,0x03,0x24,
92416 -0x08,0x00,0xE0,0x03,
92417 -0x21,0x10,0x60,0x00,
92418 -0x02,0x00,0x03,0x24,
92419 -0x08,0x00,0xE0,0x03,
92420 -0x21,0x10,0x60,0x00,
92421 -0xC8,0xFF,0xBD,0x27,
92422 -0x24,0x00,0xB5,0xAF,
92423 -0x02,0x80,0x15,0x3C,
92424 -0x2C,0x00,0xB7,0xAF,
92425 -0x28,0x00,0xB6,0xAF,
92426 -0x20,0x00,0xB4,0xAF,
92427 -0x1C,0x00,0xB3,0xAF,
92428 -0x30,0x00,0xBF,0xAF,
92429 -0x18,0x00,0xB2,0xAF,
92430 -0x14,0x00,0xB1,0xAF,
92431 -0x10,0x00,0xB0,0xAF,
92432 -0x21,0xB8,0x80,0x00,
92433 -0x21,0xA0,0x00,0x00,
92434 -0x21,0x98,0x00,0x00,
92435 -0x30,0x1F,0xB6,0x26,
92436 -0x30,0x1F,0xA2,0x26,
92437 -0x21,0x10,0x62,0x02,
92438 -0xFB,0x1B,0x51,0x90,
92439 -0xFE,0x00,0x03,0x24,
92440 -0x1E,0x00,0x23,0x12,
92441 -0xFF,0x00,0x02,0x24,
92442 -0x21,0x00,0x22,0x12,
92443 -0x21,0x10,0x80,0x02,
92444 -0xAD,0x4F,0x00,0x0C,
92445 -0x21,0x20,0x20,0x02,
92446 -0x21,0x88,0x40,0x00,
92447 -0x21,0x80,0x00,0x00,
92448 -0x21,0x90,0xC0,0x02,
92449 -0x21,0x10,0x12,0x02,
92450 -0xEE,0x1B,0x44,0x90,
92451 -0x00,0x00,0x00,0x00,
92452 -0x02,0x00,0x82,0x24,
92453 -0xFF,0x00,0x42,0x30,
92454 -0x02,0x00,0x42,0x2C,
92455 -0x05,0x00,0x40,0x14,
92456 -0x01,0x00,0x10,0x26,
92457 -0xAD,0x4F,0x00,0x0C,
92458 -0x00,0x00,0x00,0x00,
92459 -0x05,0x00,0x51,0x10,
92460 -0x01,0x00,0x03,0x24,
92461 -0x0D,0x00,0x02,0x2A,
92462 -0xF3,0xFF,0x40,0x14,
92463 -0x21,0x10,0x12,0x02,
92464 -0x21,0x18,0x00,0x00,
92465 -0x01,0x00,0x02,0x24,
92466 -0x14,0x00,0x62,0x10,
92467 -0xFF,0x00,0x22,0x32,
92468 -0x21,0x10,0xF4,0x02,
92469 -0x00,0x00,0x51,0xA0,
92470 -0x01,0x00,0x94,0x26,
92471 -0x01,0x00,0x73,0x26,
92472 -0x0D,0x00,0x62,0x2A,
92473 -0xDB,0xFF,0x40,0x14,
92474 -0x30,0x1F,0xA2,0x26,
92475 -0x21,0x10,0x80,0x02,
92476 -0x30,0x00,0xBF,0x8F,
92477 -0x2C,0x00,0xB7,0x8F,
92478 -0x28,0x00,0xB6,0x8F,
92479 -0x24,0x00,0xB5,0x8F,
92480 -0x20,0x00,0xB4,0x8F,
92481 -0x1C,0x00,0xB3,0x8F,
92482 -0x18,0x00,0xB2,0x8F,
92483 -0x14,0x00,0xB1,0x8F,
92484 -0x10,0x00,0xB0,0x8F,
92485 -0x08,0x00,0xE0,0x03,
92486 -0x38,0x00,0xBD,0x27,
92487 -0x0C,0x50,0x00,0x08,
92488 -0x80,0x00,0x51,0x34,
92489 -0xD0,0xFF,0xBD,0x27,
92490 -0x24,0x00,0xB1,0xAF,
92491 -0x20,0x00,0xB0,0xAF,
92492 -0x21,0x88,0x80,0x00,
92493 -0x21,0x80,0xA0,0x00,
92494 -0x0D,0x00,0x06,0x24,
92495 -0x21,0x28,0x00,0x00,
92496 -0x28,0x00,0xBF,0xAF,
92497 -0xFF,0x51,0x00,0x0C,
92498 -0x10,0x00,0xA4,0x27,
92499 -0xDD,0x4F,0x00,0x0C,
92500 -0x10,0x00,0xA4,0x27,
92501 -0x00,0x00,0x02,0xAE,
92502 -0x21,0x20,0x20,0x02,
92503 -0x10,0x00,0xA5,0x27,
92504 -0x10,0x52,0x00,0x0C,
92505 -0x21,0x30,0x40,0x00,
92506 -0x28,0x00,0xBF,0x8F,
92507 -0x24,0x00,0xB1,0x8F,
92508 -0x20,0x00,0xB0,0x8F,
92509 -0x08,0x00,0xE0,0x03,
92510 -0x30,0x00,0xBD,0x27,
92511 -0x21,0x28,0x00,0x00,
92512 -0x21,0x10,0x85,0x00,
92513 -0x00,0x00,0x43,0x90,
92514 -0x00,0x00,0x00,0x00,
92515 -0x04,0x00,0x60,0x10,
92516 -0x0D,0x00,0xA2,0x2C,
92517 -0xFA,0xFF,0x40,0x14,
92518 -0x01,0x00,0xA5,0x24,
92519 -0xFF,0xFF,0xA5,0x24,
92520 -0x08,0x00,0xE0,0x03,
92521 -0x21,0x10,0xA0,0x00,
92522 -0x00,0x00,0x82,0x94,
92523 -0x21,0x30,0x80,0x00,
92524 -0x10,0x00,0x85,0x24,
92525 -0x42,0x1A,0x02,0x00,
92526 -0xC2,0x11,0x02,0x00,
92527 -0x02,0x00,0x42,0x30,
92528 -0x01,0x00,0x63,0x30,
92529 -0x25,0x18,0x43,0x00,
92530 -0x01,0x00,0x04,0x24,
92531 -0x07,0x00,0x64,0x10,
92532 -0x00,0x00,0x00,0x00,
92533 -0x05,0x00,0x60,0x10,
92534 -0x0A,0x00,0xC5,0x24,
92535 -0x02,0x00,0x02,0x24,
92536 -0x02,0x00,0x62,0x10,
92537 -0x00,0x00,0x00,0x00,
92538 -0x18,0x00,0xC5,0x24,
92539 -0x08,0x00,0xE0,0x03,
92540 -0x21,0x10,0xA0,0x00,
92541 -0x00,0x00,0x82,0x94,
92542 -0x21,0x30,0x80,0x00,
92543 -0x04,0x00,0x85,0x24,
92544 -0x42,0x1A,0x02,0x00,
92545 -0xC2,0x11,0x02,0x00,
92546 -0x02,0x00,0x42,0x30,
92547 -0x01,0x00,0x63,0x30,
92548 -0x25,0x18,0x43,0x00,
92549 -0x01,0x00,0x04,0x24,
92550 -0x04,0x00,0x64,0x10,
92551 -0x00,0x00,0x00,0x00,
92552 -0x02,0x00,0x60,0x10,
92553 -0x00,0x00,0x00,0x00,
92554 -0x10,0x00,0xC5,0x24,
92555 -0x08,0x00,0xE0,0x03,
92556 -0x21,0x10,0xA0,0x00,
92557 -0x13,0x00,0xA0,0x18,
92558 -0x21,0x30,0x00,0x00,
92559 -0x02,0x00,0x07,0x24,
92560 -0x04,0x00,0x08,0x24,
92561 -0x0B,0x00,0x09,0x24,
92562 -0x16,0x00,0x0A,0x24,
92563 -0x21,0x10,0x86,0x00,
92564 -0x00,0x00,0x43,0x90,
92565 -0x01,0x00,0xC6,0x24,
92566 -0x7F,0x00,0x63,0x30,
92567 -0x07,0x00,0x67,0x10,
92568 -0x2A,0x10,0xC5,0x00,
92569 -0x05,0x00,0x68,0x10,
92570 -0x00,0x00,0x00,0x00,
92571 -0x03,0x00,0x69,0x10,
92572 -0x00,0x00,0x00,0x00,
92573 -0x05,0x00,0x6A,0x14,
92574 -0x00,0x00,0x00,0x00,
92575 -0xF3,0xFF,0x40,0x14,
92576 -0x00,0x00,0x00,0x00,
92577 -0x08,0x00,0xE0,0x03,
92578 -0x01,0x00,0x02,0x24,
92579 -0x08,0x00,0xE0,0x03,
92580 -0x21,0x10,0x00,0x00,
92581 -0xE8,0xFF,0xBD,0x27,
92582 -0x10,0x00,0xB0,0xAF,
92583 -0x14,0x00,0xBF,0xAF,
92584 -0x02,0x80,0x02,0x3C,
92585 -0x80,0x5D,0x43,0x8C,
92586 -0x08,0x00,0x10,0x24,
92587 -0x06,0x00,0xA0,0x14,
92588 -0x0A,0x80,0x03,0x00,
92589 -0x21,0x10,0x00,0x02,
92590 -0x14,0x00,0xBF,0x8F,
92591 -0x10,0x00,0xB0,0x8F,
92592 -0x08,0x00,0xE0,0x03,
92593 -0x18,0x00,0xBD,0x27,
92594 -0x65,0x50,0x00,0x0C,
92595 -0x00,0x00,0x00,0x00,
92596 -0x01,0x00,0x03,0x36,
92597 -0x01,0x00,0x42,0x38,
92598 -0x03,0x00,0x04,0x36,
92599 -0x21,0x80,0x60,0x00,
92600 -0x0B,0x80,0x82,0x00,
92601 -0x21,0x10,0x00,0x02,
92602 -0x14,0x00,0xBF,0x8F,
92603 -0x10,0x00,0xB0,0x8F,
92604 -0x08,0x00,0xE0,0x03,
92605 -0x18,0x00,0xBD,0x27,
92606 -0xD8,0xFF,0xBD,0x27,
92607 -0x14,0x00,0xB1,0xAF,
92608 -0x0E,0x00,0xA3,0x2C,
92609 -0x21,0x88,0xA0,0x00,
92610 -0x0D,0x00,0x02,0x24,
92611 -0x0A,0x88,0x43,0x00,
92612 -0x1C,0x00,0xB3,0xAF,
92613 -0x18,0x00,0xB2,0xAF,
92614 -0x10,0x00,0xB0,0xAF,
92615 -0x24,0x00,0xBF,0xAF,
92616 -0x20,0x00,0xB4,0xAF,
92617 -0x21,0x98,0x80,0x00,
92618 -0x21,0x90,0x00,0x00,
92619 -0x15,0x00,0x20,0x12,
92620 -0x21,0x80,0x00,0x00,
92621 -0xAA,0x50,0x00,0x08,
92622 -0x01,0x00,0x14,0x24,
92623 -0x2B,0x10,0x11,0x02,
92624 -0x11,0x00,0x40,0x10,
92625 -0x21,0x10,0x40,0x02,
92626 -0x21,0x18,0x70,0x02,
92627 -0x00,0x00,0x62,0x90,
92628 -0x00,0x00,0x00,0x00,
92629 -0xFF,0x00,0x44,0x30,
92630 -0x00,0x16,0x02,0x00,
92631 -0x03,0x16,0x02,0x00,
92632 -0xF6,0xFF,0x41,0x04,
92633 -0x01,0x00,0x10,0x26,
92634 -0x7D,0x4F,0x00,0x0C,
92635 -0x00,0x00,0x00,0x00,
92636 -0x04,0x10,0x54,0x00,
92637 -0x25,0x90,0x42,0x02,
92638 -0x2B,0x10,0x11,0x02,
92639 -0xF3,0xFF,0x40,0x14,
92640 -0x21,0x18,0x70,0x02,
92641 -0x21,0x10,0x40,0x02,
92642 -0x24,0x00,0xBF,0x8F,
92643 -0x20,0x00,0xB4,0x8F,
92644 -0x1C,0x00,0xB3,0x8F,
92645 -0x18,0x00,0xB2,0x8F,
92646 -0x14,0x00,0xB1,0x8F,
92647 -0x10,0x00,0xB0,0x8F,
92648 -0x08,0x00,0xE0,0x03,
92649 -0x28,0x00,0xBD,0x27,
92650 -0xD8,0xFF,0xBD,0x27,
92651 -0x14,0x00,0xB1,0xAF,
92652 -0x0E,0x00,0xA3,0x2C,
92653 -0x21,0x88,0xA0,0x00,
92654 -0x0D,0x00,0x02,0x24,
92655 -0x0A,0x88,0x43,0x00,
92656 -0x20,0x00,0xB4,0xAF,
92657 -0x18,0x00,0xB2,0xAF,
92658 -0x10,0x00,0xB0,0xAF,
92659 -0x24,0x00,0xBF,0xAF,
92660 -0x1C,0x00,0xB3,0xAF,
92661 -0x21,0xA0,0x80,0x00,
92662 -0x21,0x90,0x00,0x00,
92663 -0x0A,0x00,0x20,0x12,
92664 -0x21,0x80,0x00,0x00,
92665 -0x01,0x00,0x13,0x24,
92666 -0x21,0x10,0x90,0x02,
92667 -0x00,0x00,0x44,0x90,
92668 -0x7D,0x4F,0x00,0x0C,
92669 -0x01,0x00,0x10,0x26,
92670 -0x04,0x10,0x53,0x00,
92671 -0x2B,0x18,0x11,0x02,
92672 -0xF9,0xFF,0x60,0x14,
92673 -0x25,0x90,0x42,0x02,
92674 -0x21,0x10,0x40,0x02,
92675 -0x24,0x00,0xBF,0x8F,
92676 -0x20,0x00,0xB4,0x8F,
92677 -0x1C,0x00,0xB3,0x8F,
92678 -0x18,0x00,0xB2,0x8F,
92679 -0x14,0x00,0xB1,0x8F,
92680 -0x10,0x00,0xB0,0x8F,
92681 -0x08,0x00,0xE0,0x03,
92682 -0x28,0x00,0xBD,0x27,
92683 -0xE8,0xFF,0xBD,0x27,
92684 -0xFF,0xFF,0x02,0x24,
92685 -0x10,0x00,0xB0,0xAF,
92686 -0x14,0x00,0xBF,0xAF,
92687 -0x21,0x30,0xA0,0x00,
92688 -0x1B,0x00,0x82,0x10,
92689 -0x20,0x00,0x10,0x24,
92690 -0x20,0x00,0x82,0x28,
92691 -0x06,0x00,0x40,0x14,
92692 -0x80,0x18,0x04,0x00,
92693 -0x21,0x10,0x00,0x02,
92694 -0x14,0x00,0xBF,0x8F,
92695 -0x10,0x00,0xB0,0x8F,
92696 -0x08,0x00,0xE0,0x03,
92697 -0x18,0x00,0xBD,0x27,
92698 -0x21,0x18,0x64,0x00,
92699 -0x21,0x80,0x80,0x00,
92700 -0x02,0x80,0x02,0x3C,
92701 -0x02,0x80,0x04,0x3C,
92702 -0xC0,0x18,0x03,0x00,
92703 -0x30,0x1F,0x42,0x24,
92704 -0x2B,0x3D,0x84,0x24,
92705 -0x21,0x20,0x64,0x00,
92706 -0x21,0x18,0x62,0x00,
92707 -0x01,0x00,0x02,0x24,
92708 -0x06,0x00,0x06,0x24,
92709 -0x10,0x52,0x00,0x0C,
92710 -0xFA,0x1D,0x62,0xA0,
92711 -0x21,0x10,0x00,0x02,
92712 -0x14,0x00,0xBF,0x8F,
92713 -0x10,0x00,0xB0,0x8F,
92714 -0x08,0x00,0xE0,0x03,
92715 -0x18,0x00,0xBD,0x27,
92716 -0x02,0x80,0x02,0x3C,
92717 -0x30,0x1F,0x42,0x24,
92718 -0xC8,0x00,0x47,0x24,
92719 -0x05,0x00,0x10,0x24,
92720 -0xC2,0x1E,0x43,0x24,
92721 -0x10,0x51,0x00,0x08,
92722 -0xC8,0x00,0x05,0x24,
92723 -0x01,0x00,0x10,0x26,
92724 -0x20,0x00,0x02,0x2E,
92725 -0x28,0x00,0xA5,0x24,
92726 -0xDE,0xFF,0x40,0x10,
92727 -0x28,0x00,0xE7,0x24,
92728 -0x00,0x00,0x62,0x90,
92729 -0x00,0x00,0x00,0x00,
92730 -0xF8,0xFF,0x40,0x14,
92731 -0x28,0x00,0x63,0x24,
92732 -0x02,0x80,0x04,0x3C,
92733 -0x2B,0x3D,0x84,0x24,
92734 -0x01,0x00,0x02,0x24,
92735 -0x21,0x20,0xA4,0x00,
92736 -0xFA,0x1D,0xE2,0xA0,
92737 -0x21,0x28,0xC0,0x00,
92738 -0x10,0x52,0x00,0x0C,
92739 -0x06,0x00,0x06,0x24,
92740 -0x00,0x51,0x00,0x08,
92741 -0x21,0x10,0x00,0x02,
92742 -0xE0,0xFF,0xBD,0x27,
92743 -0x18,0x00,0xB2,0xAF,
92744 -0x14,0x00,0xB1,0xAF,
92745 -0x30,0x00,0xB2,0x8F,
92746 -0x21,0x88,0x80,0x00,
92747 -0x21,0x20,0xA0,0x00,
92748 -0x21,0x28,0x20,0x02,
92749 -0x10,0x00,0xB0,0xAF,
92750 -0x1C,0x00,0xBF,0xAF,
92751 -0xE3,0x50,0x00,0x0C,
92752 -0xFF,0xFF,0xF0,0x30,
92753 -0x20,0x00,0x03,0x24,
92754 -0x21,0x20,0x40,0x00,
92755 -0x21,0x28,0x00,0x02,
92756 -0x21,0x30,0x20,0x02,
92757 -0x07,0x00,0x43,0x10,
92758 -0x21,0x38,0x40,0x02,
92759 -0x1C,0x00,0xBF,0x8F,
92760 -0x18,0x00,0xB2,0x8F,
92761 -0x14,0x00,0xB1,0x8F,
92762 -0x10,0x00,0xB0,0x8F,
92763 -0x4E,0x23,0x00,0x08,
92764 -0x20,0x00,0xBD,0x27,
92765 -0x1C,0x00,0xBF,0x8F,
92766 -0x18,0x00,0xB2,0x8F,
92767 -0x14,0x00,0xB1,0x8F,
92768 -0x10,0x00,0xB0,0x8F,
92769 -0x08,0x00,0xE0,0x03,
92770 -0x20,0x00,0xBD,0x27,
92771 -0xD0,0xFF,0xBD,0x27,
92772 -0x02,0x80,0x02,0x3C,
92773 -0x02,0x80,0x03,0x3C,
92774 -0x24,0x00,0xB5,0xAF,
92775 -0x20,0x00,0xB4,0xAF,
92776 -0x1C,0x00,0xB3,0xAF,
92777 -0x18,0x00,0xB2,0xAF,
92778 -0x14,0x00,0xB1,0xAF,
92779 -0x10,0x00,0xB0,0xAF,
92780 -0x21,0xA8,0x80,0x00,
92781 -0x30,0x1F,0x54,0x24,
92782 -0x2B,0x3D,0x73,0x24,
92783 -0x05,0x00,0x11,0x24,
92784 -0x01,0x00,0x12,0x24,
92785 -0xC8,0x00,0x10,0x24,
92786 -0x50,0x51,0x00,0x08,
92787 -0x28,0x00,0xBF,0xAF,
92788 -0x01,0x00,0x31,0x26,
92789 -0x20,0x00,0x22,0x2A,
92790 -0x0E,0x00,0x40,0x10,
92791 -0x21,0x10,0x20,0x02,
92792 -0x21,0x10,0x14,0x02,
92793 -0xFA,0x1D,0x43,0x90,
92794 -0x21,0x20,0x13,0x02,
92795 -0x21,0x28,0xA0,0x02,
92796 -0x06,0x00,0x06,0x24,
92797 -0xF6,0xFF,0x72,0x14,
92798 -0x28,0x00,0x10,0x26,
92799 -0x39,0x52,0x00,0x0C,
92800 -0x00,0x00,0x00,0x00,
92801 -0xF3,0xFF,0x40,0x14,
92802 -0x01,0x00,0x31,0x26,
92803 -0xFF,0xFF,0x31,0x26,
92804 -0x21,0x10,0x20,0x02,
92805 -0x28,0x00,0xBF,0x8F,
92806 -0x24,0x00,0xB5,0x8F,
92807 -0x20,0x00,0xB4,0x8F,
92808 -0x1C,0x00,0xB3,0x8F,
92809 -0x18,0x00,0xB2,0x8F,
92810 -0x14,0x00,0xB1,0x8F,
92811 -0x10,0x00,0xB0,0x8F,
92812 -0x08,0x00,0xE0,0x03,
92813 -0x30,0x00,0xBD,0x27,
92814 -0xD0,0xFF,0xBD,0x27,
92815 -0x02,0x80,0x02,0x3C,
92816 -0x02,0x80,0x03,0x3C,
92817 -0x28,0x00,0xB6,0xAF,
92818 -0x24,0x00,0xB5,0xAF,
92819 -0x20,0x00,0xB4,0xAF,
92820 -0x1C,0x00,0xB3,0xAF,
92821 -0x14,0x00,0xB1,0xAF,
92822 -0x10,0x00,0xB0,0xAF,
92823 -0x21,0x98,0x80,0x00,
92824 -0x30,0x1F,0x56,0x24,
92825 -0x2B,0x3D,0x75,0x24,
92826 -0x21,0x88,0x00,0x00,
92827 -0x01,0x00,0x14,0x24,
92828 -0x21,0x80,0x00,0x00,
92829 -0x2C,0x00,0xBF,0xAF,
92830 -0x7C,0x51,0x00,0x08,
92831 -0x18,0x00,0xB2,0xAF,
92832 -0x01,0x00,0x31,0x26,
92833 -0x20,0x00,0x22,0x2A,
92834 -0x1E,0x00,0x40,0x10,
92835 -0x00,0x00,0x00,0x00,
92836 -0x21,0x90,0x16,0x02,
92837 -0xFA,0x1D,0x42,0x92,
92838 -0x21,0x20,0x15,0x02,
92839 -0x21,0x28,0x60,0x02,
92840 -0x06,0x00,0x06,0x24,
92841 -0xF6,0xFF,0x54,0x14,
92842 -0x28,0x00,0x10,0x26,
92843 -0x39,0x52,0x00,0x0C,
92844 -0x00,0x00,0x00,0x00,
92845 -0xF3,0xFF,0x40,0x14,
92846 -0x01,0x00,0x31,0x26,
92847 -0xFF,0xFF,0x31,0x26,
92848 -0x02,0x80,0x06,0x3C,
92849 -0x02,0x80,0x07,0x3C,
92850 -0x21,0x20,0x20,0x02,
92851 -0xFA,0x1D,0x40,0xA2,
92852 -0x2C,0x00,0xBF,0x8F,
92853 -0x28,0x00,0xB6,0x8F,
92854 -0x24,0x00,0xB5,0x8F,
92855 -0x20,0x00,0xB4,0x8F,
92856 -0x1C,0x00,0xB3,0x8F,
92857 -0x18,0x00,0xB2,0x8F,
92858 -0x14,0x00,0xB1,0x8F,
92859 -0x10,0x00,0xB0,0x8F,
92860 -0xE8,0xDD,0xC6,0x24,
92861 -0xD8,0xDD,0xE7,0x24,
92862 -0x21,0x28,0x00,0x00,
92863 -0x4E,0x23,0x00,0x08,
92864 -0x30,0x00,0xBD,0x27,
92865 -0x2C,0x00,0xBF,0x8F,
92866 -0x28,0x00,0xB6,0x8F,
92867 -0x24,0x00,0xB5,0x8F,
92868 -0x20,0x00,0xB4,0x8F,
92869 -0x1C,0x00,0xB3,0x8F,
92870 -0x18,0x00,0xB2,0x8F,
92871 -0x14,0x00,0xB1,0x8F,
92872 -0x10,0x00,0xB0,0x8F,
92873 -0x08,0x00,0xE0,0x03,
92874 -0x30,0x00,0xBD,0x27,
92875 -0xC8,0xFF,0xBD,0x27,
92876 -0x02,0x80,0x02,0x3C,
92877 -0x18,0x00,0xB2,0xAF,
92878 -0x30,0x1F,0x52,0x24,
92879 -0x30,0x00,0xBE,0xAF,
92880 -0x2C,0x00,0xB7,0xAF,
92881 -0x28,0x00,0xB6,0xAF,
92882 -0x24,0x00,0xB5,0xAF,
92883 -0x20,0x00,0xB4,0xAF,
92884 -0x1C,0x00,0xB3,0xAF,
92885 -0x14,0x00,0xB1,0xAF,
92886 -0x10,0x00,0xB0,0xAF,
92887 -0x34,0x00,0xBF,0xAF,
92888 -0x21,0x80,0x00,0x00,
92889 -0x02,0x80,0x1E,0x3C,
92890 -0x02,0x80,0x17,0x3C,
92891 -0x02,0x80,0x16,0x3C,
92892 -0x01,0x00,0x13,0x24,
92893 -0xFF,0xF7,0x15,0x24,
92894 -0xFF,0xEF,0x14,0x24,
92895 -0x21,0x88,0x40,0x02,
92896 -0xFA,0x1D,0x22,0x92,
92897 -0xC0,0x48,0x10,0x00,
92898 -0xEA,0x5D,0xC7,0x93,
92899 -0x41,0x00,0x53,0x10,
92900 -0x21,0x30,0x32,0x01,
92901 -0xE8,0x22,0xC2,0x8C,
92902 -0xBF,0xFF,0x03,0x24,
92903 -0x24,0x28,0x43,0x00,
92904 -0x80,0x07,0xA3,0x34,
92905 -0x24,0x10,0x75,0x00,
92906 -0x31,0x00,0xF3,0x10,
92907 -0x24,0x10,0x54,0x00,
92908 -0xE8,0x22,0xC2,0xAC,
92909 -0x21,0x48,0x32,0x01,
92910 -0xE8,0x22,0x23,0x8D,
92911 -0xFD,0xFF,0x02,0x3C,
92912 -0xFF,0xFF,0x42,0x34,
92913 -0x24,0x18,0x62,0x00,
92914 -0xFB,0xFF,0x02,0x3C,
92915 -0xFF,0xFF,0x42,0x34,
92916 -0x24,0x18,0x62,0x00,
92917 -0xE7,0xFF,0x02,0x3C,
92918 -0xFF,0xFF,0x42,0x34,
92919 -0x24,0x18,0x62,0x00,
92920 -0xFF,0xFD,0x02,0x3C,
92921 -0xFF,0xFF,0x42,0x34,
92922 -0xEC,0x22,0x28,0x8D,
92923 -0x24,0x18,0x62,0x00,
92924 -0xFF,0xFB,0x02,0x3C,
92925 -0xFF,0xFF,0x42,0x34,
92926 -0x24,0x18,0x62,0x00,
92927 -0xFF,0xE7,0x02,0x3C,
92928 -0xFF,0xFF,0x42,0x34,
92929 -0x1F,0x00,0x06,0x3C,
92930 -0x00,0x80,0x08,0x35,
92931 -0x24,0x18,0x62,0x00,
92932 -0x25,0x40,0x06,0x01,
92933 -0x21,0x20,0x00,0x02,
92934 -0xE8,0x22,0x23,0xAD,
92935 -0x01,0x00,0x10,0x26,
92936 -0x21,0x28,0x00,0x00,
92937 -0xE8,0xDD,0xE6,0x26,
92938 -0xD8,0xDD,0xC7,0x26,
92939 -0x4E,0x23,0x00,0x0C,
92940 -0xEC,0x22,0x28,0xAD,
92941 -0x20,0x00,0x03,0x2A,
92942 -0xD1,0xFF,0x60,0x14,
92943 -0x28,0x00,0x31,0x26,
92944 -0x34,0x00,0xBF,0x8F,
92945 -0x30,0x00,0xBE,0x8F,
92946 -0x2C,0x00,0xB7,0x8F,
92947 -0x28,0x00,0xB6,0x8F,
92948 -0x24,0x00,0xB5,0x8F,
92949 -0x20,0x00,0xB4,0x8F,
92950 -0x1C,0x00,0xB3,0x8F,
92951 -0x18,0x00,0xB2,0x8F,
92952 -0x14,0x00,0xB1,0x8F,
92953 -0x10,0x00,0xB0,0x8F,
92954 -0x08,0x00,0xE0,0x03,
92955 -0x38,0x00,0xBD,0x27,
92956 -0x02,0x80,0x02,0x3C,
92957 -0xEB,0x5D,0x44,0x90,
92958 -0x24,0x18,0x75,0x00,
92959 -0x80,0x0F,0xA2,0x34,
92960 -0x00,0x10,0x63,0x34,
92961 -0xCA,0xFF,0x87,0x14,
92962 -0x24,0x10,0x54,0x00,
92963 -0xC5,0x51,0x00,0x08,
92964 -0xE8,0x22,0xC3,0xAC,
92965 -0xBD,0x51,0x00,0x08,
92966 -0xFA,0x1D,0x20,0xA2,
92967 -0x04,0x52,0x00,0x08,
92968 -0xFF,0x00,0xA5,0x30,
92969 -0x00,0x00,0x85,0xA0,
92970 -0xFF,0xFF,0xC6,0x24,
92971 -0x01,0x00,0x84,0x24,
92972 -0xFC,0xFF,0xC0,0x14,
92973 -0x00,0x00,0x00,0x00,
92974 -0x08,0x00,0xE0,0x03,
92975 -0x00,0x00,0x00,0x00,
92976 -0x05,0x00,0xC0,0x10,
92977 -0x00,0x00,0x00,0x00,
92978 -0x00,0x00,0x85,0xAC,
92979 -0xFF,0xFF,0xC6,0x24,
92980 -0xFD,0xFF,0xC0,0x14,
92981 -0x04,0x00,0x84,0x24,
92982 -0x08,0x00,0xE0,0x03,
92983 -0x00,0x00,0x00,0x00,
92984 -0x21,0x38,0x80,0x00,
92985 -0x08,0x00,0xC0,0x10,
92986 -0xFF,0xFF,0xC3,0x24,
92987 -0xFF,0xFF,0x06,0x24,
92988 -0x00,0x00,0xA2,0x90,
92989 -0xFF,0xFF,0x63,0x24,
92990 -0x01,0x00,0xA5,0x24,
92991 -0x00,0x00,0xE2,0xA0,
92992 -0xFB,0xFF,0x66,0x14,
92993 -0x01,0x00,0xE7,0x24,
92994 -0x08,0x00,0xE0,0x03,
92995 -0x21,0x10,0x80,0x00,
92996 -0x2B,0x10,0xA4,0x00,
92997 -0x0D,0x00,0x40,0x14,
92998 -0xFF,0xFF,0x02,0x24,
92999 -0xFF,0xFF,0xC6,0x24,
93000 -0x08,0x00,0xC2,0x10,
93001 -0x21,0x18,0x80,0x00,
93002 -0xFF,0xFF,0x07,0x24,
93003 -0x00,0x00,0xA2,0x90,
93004 -0xFF,0xFF,0xC6,0x24,
93005 -0x01,0x00,0xA5,0x24,
93006 -0x00,0x00,0x62,0xA0,
93007 -0xFB,0xFF,0xC7,0x14,
93008 -0x01,0x00,0x63,0x24,
93009 -0x08,0x00,0xE0,0x03,
93010 -0x21,0x10,0x80,0x00,
93011 -0x21,0x28,0xA6,0x00,
93012 -0x21,0x18,0x86,0x00,
93013 -0xFF,0xFF,0xC6,0x24,
93014 -0xFA,0xFF,0xC2,0x10,
93015 -0x00,0x00,0x00,0x00,
93016 -0xFF,0xFF,0x07,0x24,
93017 -0xFF,0xFF,0xA5,0x24,
93018 -0x00,0x00,0xA2,0x90,
93019 -0xFF,0xFF,0x63,0x24,
93020 -0xFF,0xFF,0xC6,0x24,
93021 -0xFB,0xFF,0xC7,0x14,
93022 -0x00,0x00,0x62,0xA0,
93023 -0x08,0x00,0xE0,0x03,
93024 -0x21,0x10,0x80,0x00,
93025 -0x0C,0x00,0xC0,0x10,
93026 -0x00,0x00,0x00,0x00,
93027 -0x00,0x00,0x82,0x90,
93028 -0x00,0x00,0xA3,0x90,
93029 -0x01,0x00,0x84,0x24,
93030 -0x23,0x10,0x43,0x00,
93031 -0x00,0x16,0x02,0x00,
93032 -0x03,0x16,0x02,0x00,
93033 -0x04,0x00,0x40,0x14,
93034 -0x01,0x00,0xA5,0x24,
93035 -0xFF,0xFF,0xC6,0x24,
93036 -0xF6,0xFF,0xC0,0x14,
93037 -0x00,0x00,0x00,0x00,
93038 -0x08,0x00,0xE0,0x03,
93039 -0x21,0x10,0xC0,0x00,
93040 -0x4F,0x52,0x00,0x08,
93041 -0x21,0x18,0x86,0x00,
93042 -0x00,0x00,0x82,0x90,
93043 -0x00,0x00,0x00,0x00,
93044 -0x04,0x00,0x45,0x10,
93045 -0x00,0x00,0x00,0x00,
93046 -0x01,0x00,0x84,0x24,
93047 -0xFA,0xFF,0x83,0x14,
93048 -0x00,0x00,0x00,0x00,
93049 -0x08,0x00,0xE0,0x03,
93050 -0x21,0x10,0x80,0x00,
93051 -0x09,0x00,0xC0,0x10,
93052 -0xFF,0xFF,0xC3,0x24,
93053 -0xFF,0x00,0xA5,0x30,
93054 -0xFF,0xFF,0x06,0x24,
93055 -0x00,0x00,0x82,0x90,
93056 -0xFF,0xFF,0x63,0x24,
93057 -0x05,0x00,0x45,0x10,
93058 -0x01,0x00,0x84,0x24,
93059 -0xFB,0xFF,0x66,0x14,
93060 -0x00,0x00,0x00,0x00,
93061 -0x08,0x00,0xE0,0x03,
93062 -0x21,0x10,0x00,0x00,
93063 -0x08,0x00,0xE0,0x03,
93064 -0xFF,0xFF,0x82,0x24,
93065 -0x21,0x38,0x00,0x00,
93066 -0x1F,0x00,0xC0,0x10,
93067 -0x21,0x18,0x00,0x00,
93068 -0x02,0x80,0x02,0x3C,
93069 -0x40,0xF2,0x4B,0x24,
93070 -0x00,0x00,0x87,0x90,
93071 -0x00,0x00,0xA3,0x90,
93072 -0xFF,0xFF,0xC6,0x24,
93073 -0x01,0x00,0x84,0x24,
93074 -0x21,0x10,0xEB,0x00,
93075 -0x16,0x00,0xE0,0x10,
93076 -0x01,0x00,0xA5,0x24,
93077 -0x14,0x00,0x60,0x10,
93078 -0x21,0x48,0x6B,0x00,
93079 -0x10,0x00,0xE3,0x10,
93080 -0x20,0x00,0xE8,0x24,
93081 -0x00,0x00,0x42,0x90,
93082 -0x00,0x00,0x00,0x00,
93083 -0x01,0x00,0x42,0x30,
93084 -0x02,0x00,0x40,0x10,
93085 -0x20,0x00,0x6A,0x24,
93086 -0xFF,0x00,0x07,0x31,
93087 -0x00,0x00,0x22,0x91,
93088 -0x00,0x00,0x00,0x00,
93089 -0x01,0x00,0x42,0x30,
93090 -0x02,0x00,0x40,0x10,
93091 -0xFF,0x00,0xE7,0x30,
93092 -0xFF,0x00,0x43,0x31,
93093 -0xFF,0x00,0x63,0x30,
93094 -0x03,0x00,0xE3,0x14,
93095 -0x00,0x00,0x00,0x00,
93096 -0xE5,0xFF,0xC0,0x14,
93097 -0x00,0x00,0x00,0x00,
93098 -0x08,0x00,0xE0,0x03,
93099 -0x23,0x10,0xE3,0x00,
93100 -0x21,0x18,0x80,0x00,
93101 -0x00,0x00,0xA2,0x90,
93102 -0x01,0x00,0xA5,0x24,
93103 -0x00,0x00,0x82,0xA0,
93104 -0xFC,0xFF,0x40,0x14,
93105 -0x01,0x00,0x84,0x24,
93106 -0x08,0x00,0xE0,0x03,
93107 -0x21,0x10,0x60,0x00,
93108 -0x21,0x38,0x80,0x00,
93109 -0xFF,0xFF,0x03,0x24,
93110 -0xFF,0xFF,0xC6,0x24,
93111 -0x06,0x00,0xC3,0x10,
93112 -0x00,0x00,0x00,0x00,
93113 -0x00,0x00,0xA2,0x90,
93114 -0x01,0x00,0xA5,0x24,
93115 -0x00,0x00,0x82,0xA0,
93116 -0xF9,0xFF,0x40,0x14,
93117 -0x01,0x00,0x84,0x24,
93118 -0x08,0x00,0xE0,0x03,
93119 -0x21,0x10,0xE0,0x00,
93120 -0x00,0x00,0x82,0x80,
93121 -0x9E,0x52,0x00,0x08,
93122 -0x21,0x18,0x80,0x00,
93123 -0x01,0x00,0x84,0x24,
93124 -0x00,0x00,0x82,0x80,
93125 -0x00,0x00,0x00,0x00,
93126 -0xFC,0xFF,0x40,0x14,
93127 -0x00,0x00,0x00,0x00,
93128 -0x00,0x00,0xA2,0x90,
93129 -0x01,0x00,0xA5,0x24,
93130 -0x00,0x00,0x82,0xA0,
93131 -0xFC,0xFF,0x40,0x14,
93132 -0x01,0x00,0x84,0x24,
93133 -0x08,0x00,0xE0,0x03,
93134 -0x21,0x10,0x60,0x00,
93135 -0x12,0x00,0xC0,0x10,
93136 -0x21,0x18,0x80,0x00,
93137 -0x00,0x00,0x82,0x80,
93138 -0xAF,0x52,0x00,0x08,
93139 -0x00,0x00,0x00,0x00,
93140 -0x01,0x00,0x84,0x24,
93141 -0x00,0x00,0x82,0x80,
93142 -0x00,0x00,0x00,0x00,
93143 -0xFC,0xFF,0x40,0x14,
93144 -0x00,0x00,0x00,0x00,
93145 -0x00,0x00,0xA2,0x90,
93146 -0x01,0x00,0xA5,0x24,
93147 -0x00,0x00,0x82,0xA0,
93148 -0x05,0x00,0x40,0x10,
93149 -0x01,0x00,0x84,0x24,
93150 -0xFF,0xFF,0xC6,0x24,
93151 -0xF9,0xFF,0xC0,0x14,
93152 -0x00,0x00,0x00,0x00,
93153 -0x00,0x00,0x80,0xA0,
93154 -0x08,0x00,0xE0,0x03,
93155 -0x21,0x10,0x60,0x00,
93156 -0x00,0x00,0x83,0x90,
93157 -0x00,0x00,0xA2,0x90,
93158 -0x01,0x00,0x84,0x24,
93159 -0x23,0x10,0x62,0x00,
93160 -0x00,0x16,0x02,0x00,
93161 -0x03,0x16,0x02,0x00,
93162 -0x03,0x00,0x40,0x14,
93163 -0x01,0x00,0xA5,0x24,
93164 -0xF7,0xFF,0x60,0x14,
93165 -0x00,0x00,0x00,0x00,
93166 -0x08,0x00,0xE0,0x03,
93167 -0x00,0x00,0x00,0x00,
93168 -0x21,0x10,0x00,0x00,
93169 -0x0B,0x00,0xC0,0x10,
93170 -0x00,0x00,0x00,0x00,
93171 -0x00,0x00,0xA2,0x90,
93172 -0x00,0x00,0x83,0x90,
93173 -0xFF,0xFF,0xC6,0x24,
93174 -0x23,0x10,0x62,0x00,
93175 -0x00,0x16,0x02,0x00,
93176 -0x03,0x16,0x02,0x00,
93177 -0x03,0x00,0x40,0x14,
93178 -0x01,0x00,0xA5,0x24,
93179 -0xF5,0xFF,0x60,0x14,
93180 -0x01,0x00,0x84,0x24,
93181 -0x08,0x00,0xE0,0x03,
93182 -0x00,0x00,0x00,0x00,
93183 -0x00,0x00,0x83,0x80,
93184 -0x00,0x2E,0x05,0x00,
93185 -0x21,0x10,0x80,0x00,
93186 -0xE0,0x52,0x00,0x08,
93187 -0x03,0x2E,0x05,0x00,
93188 -0x07,0x00,0x60,0x10,
93189 -0x01,0x00,0x42,0x24,
93190 -0x00,0x00,0x43,0x80,
93191 -0x00,0x00,0x00,0x00,
93192 -0xFB,0xFF,0x65,0x14,
93193 -0x00,0x00,0x00,0x00,
93194 -0x08,0x00,0xE0,0x03,
93195 -0x00,0x00,0x00,0x00,
93196 -0x08,0x00,0xE0,0x03,
93197 -0x21,0x10,0x00,0x00,
93198 -0x00,0x00,0x82,0x80,
93199 -0xEC,0x52,0x00,0x08,
93200 -0x21,0x18,0x80,0x00,
93201 -0x01,0x00,0x63,0x24,
93202 -0x00,0x00,0x62,0x80,
93203 -0x00,0x00,0x00,0x00,
93204 -0xFC,0xFF,0x40,0x14,
93205 -0x23,0x10,0x64,0x00,
93206 -0x08,0x00,0xE0,0x03,
93207 -0x00,0x00,0x00,0x00,
93208 -0xE0,0xFF,0xBD,0x27,
93209 -0x10,0x00,0xB0,0xAF,
93210 -0x21,0x80,0xA0,0x00,
93211 -0x14,0x00,0xB1,0xAF,
93212 -0x18,0x00,0xBF,0xAF,
93213 -0x21,0x88,0x80,0x00,
93214 -0xE6,0x52,0x00,0x0C,
93215 -0x00,0x86,0x10,0x00,
93216 -0x21,0x18,0x51,0x00,
93217 -0x03,0x86,0x10,0x00,
93218 -0x00,0x00,0x62,0x80,
93219 -0x00,0x00,0x00,0x00,
93220 -0x0A,0x00,0x50,0x10,
93221 -0x21,0x10,0x60,0x00,
93222 -0xFF,0xFF,0x63,0x24,
93223 -0x2B,0x10,0x71,0x00,
93224 -0xF9,0xFF,0x40,0x10,
93225 -0x21,0x10,0x00,0x00,
93226 -0x18,0x00,0xBF,0x8F,
93227 -0x14,0x00,0xB1,0x8F,
93228 -0x10,0x00,0xB0,0x8F,
93229 -0x08,0x00,0xE0,0x03,
93230 -0x20,0x00,0xBD,0x27,
93231 -0x18,0x00,0xBF,0x8F,
93232 -0x14,0x00,0xB1,0x8F,
93233 -0x10,0x00,0xB0,0x8F,
93234 -0x08,0x00,0xE0,0x03,
93235 -0x20,0x00,0xBD,0x27,
93236 -0x21,0x30,0x80,0x00,
93237 -0x0D,0x00,0xA0,0x10,
93238 -0xFF,0xFF,0xA3,0x24,
93239 -0x00,0x00,0x82,0x80,
93240 -0x00,0x00,0x00,0x00,
93241 -0x09,0x00,0x40,0x10,
93242 -0x00,0x00,0x00,0x00,
93243 -0xFF,0xFF,0x05,0x24,
93244 -0xFF,0xFF,0x63,0x24,
93245 -0x05,0x00,0x65,0x10,
93246 -0x01,0x00,0xC6,0x24,
93247 -0x00,0x00,0xC2,0x80,
93248 -0x00,0x00,0x00,0x00,
93249 -0xFA,0xFF,0x40,0x14,
93250 -0x00,0x00,0x00,0x00,
93251 -0x08,0x00,0xE0,0x03,
93252 -0x23,0x10,0xC4,0x00,
93253 -0x00,0x00,0x82,0x90,
93254 -0x00,0x00,0x00,0x00,
93255 -0x19,0x00,0x40,0x10,
93256 -0x21,0x40,0x00,0x00,
93257 -0x00,0x00,0xA9,0x80,
93258 -0x00,0x00,0x00,0x00,
93259 -0x17,0x00,0x20,0x11,
93260 -0x21,0x30,0xA0,0x00,
93261 -0x00,0x3E,0x02,0x00,
93262 -0x03,0x3E,0x07,0x00,
93263 -0x21,0x18,0x20,0x01,
93264 -0x15,0x00,0xE3,0x10,
93265 -0x00,0x00,0x00,0x00,
93266 -0x01,0x00,0xC6,0x24,
93267 -0x00,0x00,0xC2,0x90,
93268 -0x00,0x00,0x00,0x00,
93269 -0x00,0x1E,0x02,0x00,
93270 -0x03,0x1E,0x03,0x00,
93271 -0xF8,0xFF,0x60,0x14,
93272 -0x00,0x16,0x02,0x00,
93273 -0x03,0x16,0x02,0x00,
93274 -0x06,0x00,0x40,0x10,
93275 -0x00,0x00,0x00,0x00,
93276 -0x01,0x00,0x84,0x24,
93277 -0x00,0x00,0x82,0x90,
93278 -0x00,0x00,0x00,0x00,
93279 -0xEB,0xFF,0x40,0x14,
93280 -0x01,0x00,0x08,0x25,
93281 -0x08,0x00,0xE0,0x03,
93282 -0x21,0x10,0x00,0x01,
93283 -0x00,0x00,0xA2,0x90,
93284 -0x31,0x53,0x00,0x08,
93285 -0x00,0x16,0x02,0x00,
93286 -0x00,0x00,0xC2,0x90,
93287 -0x31,0x53,0x00,0x08,
93288 -0x00,0x16,0x02,0x00,
93289 -0x00,0x00,0x87,0x90,
93290 -0x00,0x00,0x00,0x00,
93291 -0x14,0x00,0xE0,0x10,
93292 -0x21,0x10,0x80,0x00,
93293 -0x00,0x00,0xA4,0x90,
93294 -0x00,0x00,0x00,0x00,
93295 -0x00,0x1E,0x04,0x00,
93296 -0x03,0x1E,0x03,0x00,
93297 -0x09,0x00,0x60,0x10,
93298 -0x21,0x30,0xA0,0x00,
93299 -0x00,0x3E,0x07,0x00,
93300 -0x03,0x3E,0x07,0x00,
93301 -0x0B,0x00,0xE3,0x10,
93302 -0x01,0x00,0xC6,0x24,
93303 -0x00,0x00,0xC3,0x80,
93304 -0x00,0x00,0x00,0x00,
93305 -0xFB,0xFF,0x60,0x14,
93306 -0x00,0x00,0x00,0x00,
93307 -0x01,0x00,0x42,0x24,
93308 -0x00,0x00,0x47,0x90,
93309 -0x00,0x00,0x00,0x00,
93310 -0xF0,0xFF,0xE0,0x14,
93311 -0x00,0x00,0x00,0x00,
93312 -0x21,0x10,0x00,0x00,
93313 -0x08,0x00,0xE0,0x03,
93314 -0x00,0x00,0x00,0x00,
93315 -0xE0,0xFF,0xBD,0x27,
93316 -0x14,0x00,0xB1,0xAF,
93317 -0x10,0x00,0xB0,0xAF,
93318 -0x18,0x00,0xBF,0xAF,
93319 -0x21,0x80,0x80,0x00,
93320 -0x1D,0x00,0x80,0x10,
93321 -0x21,0x88,0xA0,0x00,
93322 -0x1D,0x53,0x00,0x0C,
93323 -0x21,0x20,0x00,0x02,
93324 -0x21,0x80,0x02,0x02,
93325 -0x00,0x00,0x02,0x82,
93326 -0x21,0x28,0x20,0x02,
93327 -0x21,0x20,0x00,0x02,
93328 -0x22,0x00,0x40,0x10,
93329 -0x21,0x18,0x00,0x00,
93330 -0x41,0x53,0x00,0x0C,
93331 -0x00,0x00,0x00,0x00,
93332 -0x05,0x00,0x40,0x10,
93333 -0x21,0x18,0x40,0x00,
93334 -0x00,0x00,0x42,0x80,
93335 -0x00,0x00,0x00,0x00,
93336 -0x0A,0x00,0x40,0x14,
93337 -0x00,0x00,0x00,0x00,
93338 -0x02,0x80,0x02,0x3C,
93339 -0x5C,0xF3,0x43,0xAC,
93340 -0x21,0x18,0x00,0x02,
93341 -0x18,0x00,0xBF,0x8F,
93342 -0x14,0x00,0xB1,0x8F,
93343 -0x10,0x00,0xB0,0x8F,
93344 -0x21,0x10,0x60,0x00,
93345 -0x08,0x00,0xE0,0x03,
93346 -0x20,0x00,0xBD,0x27,
93347 -0x00,0x00,0x60,0xA0,
93348 -0x72,0x53,0x00,0x08,
93349 -0x01,0x00,0x63,0x24,
93350 -0x02,0x80,0x02,0x3C,
93351 -0x5C,0xF3,0x50,0x8C,
93352 -0x00,0x00,0x00,0x00,
93353 -0xF3,0xFF,0x00,0x12,
93354 -0x21,0x18,0x00,0x00,
93355 -0x1D,0x53,0x00,0x0C,
93356 -0x21,0x20,0x00,0x02,
93357 -0x21,0x80,0x02,0x02,
93358 -0x00,0x00,0x02,0x82,
93359 -0x21,0x28,0x20,0x02,
93360 -0x21,0x20,0x00,0x02,
93361 -0xE0,0xFF,0x40,0x14,
93362 -0x21,0x18,0x00,0x00,
93363 -0x18,0x00,0xBF,0x8F,
93364 -0x14,0x00,0xB1,0x8F,
93365 -0x10,0x00,0xB0,0x8F,
93366 -0x02,0x80,0x02,0x3C,
93367 -0x5C,0xF3,0x40,0xAC,
93368 -0x20,0x00,0xBD,0x27,
93369 -0x08,0x00,0xE0,0x03,
93370 -0x21,0x10,0x60,0x00,
93371 -0xE0,0xFF,0xBD,0x27,
93372 -0x18,0x00,0xB2,0xAF,
93373 -0x14,0x00,0xB1,0xAF,
93374 -0x1C,0x00,0xBF,0xAF,
93375 -0x10,0x00,0xB0,0xAF,
93376 -0x00,0x00,0x90,0x8C,
93377 -0x21,0x90,0x80,0x00,
93378 -0x21,0x88,0xA0,0x00,
93379 -0x21,0x18,0x00,0x00,
93380 -0x0F,0x00,0x00,0x12,
93381 -0x21,0x20,0x00,0x02,
93382 -0x1D,0x53,0x00,0x0C,
93383 -0x00,0x00,0x00,0x00,
93384 -0x21,0x80,0x02,0x02,
93385 -0x00,0x00,0x02,0x82,
93386 -0x21,0x28,0x20,0x02,
93387 -0x21,0x20,0x00,0x02,
93388 -0x07,0x00,0x40,0x10,
93389 -0x21,0x18,0x00,0x00,
93390 -0x41,0x53,0x00,0x0C,
93391 -0x00,0x00,0x00,0x00,
93392 -0x21,0x18,0x40,0x00,
93393 -0x09,0x00,0x40,0x14,
93394 -0x00,0x00,0x42,0xAE,
93395 -0x21,0x18,0x00,0x02,
93396 -0x1C,0x00,0xBF,0x8F,
93397 -0x18,0x00,0xB2,0x8F,
93398 -0x14,0x00,0xB1,0x8F,
93399 -0x10,0x00,0xB0,0x8F,
93400 -0x21,0x10,0x60,0x00,
93401 -0x08,0x00,0xE0,0x03,
93402 -0x20,0x00,0xBD,0x27,
93403 -0x00,0x00,0x42,0x80,
93404 -0x00,0x00,0x00,0x00,
93405 -0xF5,0xFF,0x40,0x10,
93406 -0x01,0x00,0x64,0x24,
93407 -0x00,0x00,0x60,0xA0,
93408 -0xAB,0x53,0x00,0x08,
93409 -0x00,0x00,0x44,0xAE,
93410 -0xD8,0xFF,0xBD,0x27,
93411 -0x14,0x00,0xB1,0xAF,
93412 -0x21,0x88,0x80,0x00,
93413 -0x21,0x20,0xA0,0x00,
93414 -0x1C,0x00,0xB3,0xAF,
93415 -0x18,0x00,0xB2,0xAF,
93416 -0x20,0x00,0xBF,0xAF,
93417 -0x10,0x00,0xB0,0xAF,
93418 -0xE6,0x52,0x00,0x0C,
93419 -0x21,0x98,0xA0,0x00,
93420 -0x21,0x90,0x40,0x00,
93421 -0x08,0x00,0x40,0x16,
93422 -0x21,0x10,0x20,0x02,
93423 -0x20,0x00,0xBF,0x8F,
93424 -0x1C,0x00,0xB3,0x8F,
93425 -0x18,0x00,0xB2,0x8F,
93426 -0x14,0x00,0xB1,0x8F,
93427 -0x10,0x00,0xB0,0x8F,
93428 -0x08,0x00,0xE0,0x03,
93429 -0x28,0x00,0xBD,0x27,
93430 -0xE6,0x52,0x00,0x0C,
93431 -0x21,0x20,0x20,0x02,
93432 -0x21,0x80,0x40,0x00,
93433 -0x2A,0x10,0x52,0x00,
93434 -0x0A,0x00,0x40,0x14,
93435 -0x00,0x00,0x00,0x00,
93436 -0x21,0x20,0x20,0x02,
93437 -0x21,0x28,0x60,0x02,
93438 -0x21,0x30,0x40,0x02,
93439 -0x39,0x52,0x00,0x0C,
93440 -0xFF,0xFF,0x10,0x26,
93441 -0x0B,0x00,0x40,0x10,
93442 -0x2A,0x18,0x12,0x02,
93443 -0xF8,0xFF,0x60,0x10,
93444 -0x01,0x00,0x31,0x26,
93445 -0x20,0x00,0xBF,0x8F,
93446 -0x1C,0x00,0xB3,0x8F,
93447 -0x18,0x00,0xB2,0x8F,
93448 -0x14,0x00,0xB1,0x8F,
93449 -0x10,0x00,0xB0,0x8F,
93450 -0x21,0x10,0x00,0x00,
93451 -0x08,0x00,0xE0,0x03,
93452 -0x28,0x00,0xBD,0x27,
93453 -0xC7,0x53,0x00,0x08,
93454 -0x21,0x10,0x20,0x02,
93455 -0x00,0x00,0x87,0x90,
93456 -0x00,0x00,0x00,0x00,
93457 -0x27,0x00,0xE0,0x10,
93458 -0x00,0x00,0x00,0x00,
93459 -0x00,0x00,0xA6,0x90,
93460 -0x00,0x00,0x00,0x00,
93461 -0x0A,0x00,0xC0,0x10,
93462 -0xDF,0xFF,0x02,0x24,
93463 -0x24,0x18,0xC2,0x00,
93464 -0x24,0x10,0xE2,0x00,
93465 -0x00,0x16,0x02,0x00,
93466 -0x00,0x1E,0x03,0x00,
93467 -0x03,0x16,0x02,0x00,
93468 -0x03,0x1E,0x03,0x00,
93469 -0x0A,0x00,0x43,0x10,
93470 -0x00,0x00,0x00,0x00,
93471 -0xDF,0xFF,0x02,0x24,
93472 -0x24,0x18,0xC2,0x00,
93473 -0x24,0x10,0xE2,0x00,
93474 -0x00,0x16,0x02,0x00,
93475 -0x00,0x1E,0x03,0x00,
93476 -0x03,0x1E,0x03,0x00,
93477 -0x03,0x16,0x02,0x00,
93478 -0x08,0x00,0xE0,0x03,
93479 -0x23,0x10,0x43,0x00,
93480 -0x0A,0x54,0x00,0x08,
93481 -0xDF,0xFF,0x08,0x24,
93482 -0x00,0x00,0xA6,0x90,
93483 -0x00,0x00,0x00,0x00,
93484 -0x24,0x10,0x06,0x01,
93485 -0x00,0x16,0x02,0x00,
93486 -0xF0,0xFF,0xC0,0x10,
93487 -0x03,0x16,0x02,0x00,
93488 -0xEF,0xFF,0x62,0x14,
93489 -0xDF,0xFF,0x02,0x24,
93490 -0x01,0x00,0x84,0x24,
93491 -0x00,0x00,0x87,0x90,
93492 -0x01,0x00,0xA5,0x24,
93493 -0x24,0x10,0x07,0x01,
93494 -0x00,0x1E,0x02,0x00,
93495 -0xF2,0xFF,0xE0,0x14,
93496 -0x03,0x1E,0x03,0x00,
93497 -0x00,0x00,0xA6,0x90,
93498 -0xDF,0xFF,0x02,0x24,
93499 -0x24,0x18,0xC2,0x00,
93500 -0x24,0x10,0xE2,0x00,
93501 -0x00,0x16,0x02,0x00,
93502 -0x00,0x1E,0x03,0x00,
93503 -0x03,0x1E,0x03,0x00,
93504 -0x03,0x16,0x02,0x00,
93505 -0x08,0x00,0xE0,0x03,
93506 -0x23,0x10,0x43,0x00,
93507 -0xA8,0xFF,0xBD,0x27,
93508 -0x44,0x00,0xB5,0xAF,
93509 -0x40,0x00,0xB4,0xAF,
93510 -0x38,0x00,0xB2,0xAF,
93511 -0x34,0x00,0xB1,0xAF,
93512 -0x54,0x00,0xBF,0xAF,
93513 -0x50,0x00,0xBE,0xAF,
93514 -0x4C,0x00,0xB7,0xAF,
93515 -0x48,0x00,0xB6,0xAF,
93516 -0x3C,0x00,0xB3,0xAF,
93517 -0x30,0x00,0xB0,0xAF,
93518 -0x21,0x90,0xA0,0x00,
93519 -0x00,0x00,0xA5,0x90,
93520 -0x21,0xA0,0x80,0x00,
93521 -0x21,0xA8,0xC0,0x00,
93522 -0x00,0x26,0x05,0x00,
93523 -0x03,0x26,0x04,0x00,
93524 -0x11,0x00,0x80,0x10,
93525 -0x21,0x88,0x80,0x02,
93526 -0x25,0x00,0x02,0x24,
93527 -0x29,0x00,0x82,0x10,
93528 -0x0A,0x00,0x02,0x24,
93529 -0x1B,0x00,0x82,0x10,
93530 -0x00,0x00,0x00,0x00,
93531 -0x1E,0x00,0x80,0x12,
93532 -0x00,0x00,0x00,0x00,
93533 -0x00,0x00,0x25,0xA2,
93534 -0x01,0x00,0x31,0x26,
93535 -0x01,0x00,0x52,0x26,
93536 -0x00,0x00,0x45,0x92,
93537 -0x00,0x00,0x00,0x00,
93538 -0x00,0x26,0x05,0x00,
93539 -0x03,0x26,0x04,0x00,
93540 -0xF2,0xFF,0x80,0x14,
93541 -0x25,0x00,0x02,0x24,
93542 -0x02,0x00,0x80,0x12,
93543 -0x23,0x10,0x34,0x02,
93544 -0x00,0x00,0x20,0xA2,
93545 -0x54,0x00,0xBF,0x8F,
93546 -0x50,0x00,0xBE,0x8F,
93547 -0x4C,0x00,0xB7,0x8F,
93548 -0x48,0x00,0xB6,0x8F,
93549 -0x44,0x00,0xB5,0x8F,
93550 -0x40,0x00,0xB4,0x8F,
93551 -0x3C,0x00,0xB3,0x8F,
93552 -0x38,0x00,0xB2,0x8F,
93553 -0x34,0x00,0xB1,0x8F,
93554 -0x30,0x00,0xB0,0x8F,
93555 -0x08,0x00,0xE0,0x03,
93556 -0x58,0x00,0xBD,0x27,
93557 -0xE7,0xFF,0x80,0x16,
93558 -0x00,0x00,0x00,0x00,
93559 -0x77,0x55,0x00,0x0C,
93560 -0x0D,0x00,0x04,0x24,
93561 -0x0A,0x00,0x04,0x24,
93562 -0x77,0x55,0x00,0x0C,
93563 -0x01,0x00,0x52,0x26,
93564 -0x00,0x00,0x45,0x92,
93565 -0x00,0x00,0x00,0x00,
93566 -0x00,0x26,0x05,0x00,
93567 -0x3C,0x54,0x00,0x08,
93568 -0x03,0x26,0x04,0x00,
93569 -0x01,0x00,0x52,0x26,
93570 -0x00,0x00,0x45,0x92,
93571 -0x73,0x00,0x02,0x24,
93572 -0x00,0x1E,0x05,0x00,
93573 -0x03,0x1E,0x03,0x00,
93574 -0x2C,0x00,0x62,0x10,
93575 -0x10,0x00,0xB3,0x27,
93576 -0x23,0x00,0x02,0x24,
93577 -0x21,0xF0,0x60,0x02,
93578 -0x21,0x38,0x00,0x00,
93579 -0x34,0x00,0x62,0x10,
93580 -0x1C,0x00,0x04,0x24,
93581 -0x00,0x16,0x05,0x00,
93582 -0x03,0x16,0x02,0x00,
93583 -0x68,0x00,0x03,0x24,
93584 -0x36,0x00,0x43,0x10,
93585 -0x00,0x00,0x00,0x00,
93586 -0x00,0x16,0x05,0x00,
93587 -0x03,0x16,0x02,0x00,
93588 -0x39,0x00,0x43,0x10,
93589 -0x00,0x00,0x00,0x00,
93590 -0x20,0x00,0xA2,0x34,
93591 -0x00,0x16,0x02,0x00,
93592 -0x03,0x16,0x02,0x00,
93593 -0x78,0x00,0x03,0x24,
93594 -0x3C,0x00,0x43,0x10,
93595 -0x20,0x00,0xA6,0x30,
93596 -0x00,0x1E,0x05,0x00,
93597 -0x03,0x1E,0x03,0x00,
93598 -0x64,0x00,0x02,0x24,
93599 -0x49,0x00,0x62,0x10,
93600 -0x40,0x00,0x02,0x24,
93601 -0x81,0x00,0x62,0x10,
93602 -0x21,0x00,0x02,0x24,
93603 -0x92,0x00,0x62,0x10,
93604 -0x63,0x00,0x02,0x24,
93605 -0xA2,0x00,0x62,0x10,
93606 -0x11,0x00,0xB3,0x27,
93607 -0x10,0x00,0xA5,0xA3,
93608 -0x21,0x80,0xC0,0x03,
93609 -0x2B,0x10,0x13,0x02,
93610 -0xB4,0xFF,0x40,0x10,
93611 -0x00,0x00,0x00,0x00,
93612 -0x6C,0x00,0x80,0x12,
93613 -0x00,0x00,0x00,0x00,
93614 -0x00,0x00,0x02,0x92,
93615 -0x01,0x00,0x10,0x26,
93616 -0x00,0x00,0x22,0xA2,
93617 -0x81,0x54,0x00,0x08,
93618 -0x01,0x00,0x31,0x26,
93619 -0x00,0x00,0xA2,0x8E,
93620 -0x04,0x00,0xB5,0x26,
93621 -0x21,0x80,0x40,0x00,
93622 -0x00,0x00,0x02,0x92,
93623 -0x00,0x00,0x00,0x00,
93624 -0xA6,0xFF,0x40,0x10,
93625 -0x00,0x00,0x00,0x00,
93626 -0x63,0x00,0x80,0x12,
93627 -0x00,0x00,0x00,0x00,
93628 -0x00,0x00,0x22,0xA2,
93629 -0x01,0x00,0x10,0x26,
93630 -0x8E,0x54,0x00,0x08,
93631 -0x01,0x00,0x31,0x26,
93632 -0x01,0x00,0x52,0x26,
93633 -0x00,0x00,0x45,0x92,
93634 -0x68,0x00,0x03,0x24,
93635 -0x00,0x16,0x05,0x00,
93636 -0x03,0x16,0x02,0x00,
93637 -0xCC,0xFF,0x43,0x14,
93638 -0x01,0x00,0x07,0x24,
93639 -0x01,0x00,0x52,0x26,
93640 -0x00,0x00,0x45,0x92,
93641 -0x00,0x00,0x00,0x00,
93642 -0x00,0x16,0x05,0x00,
93643 -0x03,0x16,0x02,0x00,
93644 -0xC9,0xFF,0x43,0x14,
93645 -0x0C,0x00,0x04,0x24,
93646 -0x01,0x00,0x52,0x26,
93647 -0x00,0x00,0x45,0x92,
93648 -0x78,0x00,0x03,0x24,
93649 -0x20,0x00,0xA2,0x34,
93650 -0x00,0x16,0x02,0x00,
93651 -0x03,0x16,0x02,0x00,
93652 -0xC7,0xFF,0x43,0x14,
93653 -0x04,0x00,0x04,0x24,
93654 -0x20,0x00,0xA6,0x30,
93655 -0x00,0x00,0xA5,0x8E,
93656 -0x35,0x00,0xE0,0x14,
93657 -0x04,0x00,0xB5,0x26,
93658 -0xCD,0xFF,0x80,0x04,
93659 -0x02,0x80,0x02,0x3C,
93660 -0x48,0xED,0x42,0x24,
93661 -0x00,0x00,0x47,0x8C,
93662 -0x07,0x10,0x85,0x00,
93663 -0x0F,0x00,0x42,0x30,
93664 -0x21,0x10,0x47,0x00,
93665 -0x00,0x00,0x43,0x90,
93666 -0xFC,0xFF,0x84,0x24,
93667 -0x25,0x18,0xC3,0x00,
93668 -0x00,0x00,0x63,0xA2,
93669 -0xF8,0xFF,0x81,0x04,
93670 -0x01,0x00,0x73,0x26,
93671 -0x81,0x54,0x00,0x08,
93672 -0x21,0x80,0xC0,0x03,
93673 -0x00,0x00,0xA2,0x8E,
93674 -0x04,0x00,0xB5,0x26,
93675 -0x28,0x00,0x40,0x04,
93676 -0x21,0x28,0x40,0x00,
93677 -0x21,0x80,0x60,0x02,
93678 -0x02,0x80,0x02,0x3C,
93679 -0x4C,0xED,0x42,0x24,
93680 -0x00,0x00,0x46,0x8C,
93681 -0x00,0x00,0x00,0x00,
93682 -0x18,0x00,0xA6,0x00,
93683 -0xC3,0x27,0x05,0x00,
93684 -0x10,0x10,0x00,0x00,
93685 -0x83,0x10,0x02,0x00,
93686 -0x23,0x10,0x44,0x00,
93687 -0x80,0x18,0x02,0x00,
93688 -0x21,0x18,0x62,0x00,
93689 -0x40,0x18,0x03,0x00,
93690 -0x23,0x18,0xA3,0x00,
93691 -0x30,0x00,0x63,0x24,
93692 -0x00,0x00,0x63,0xA2,
93693 -0x21,0x28,0x40,0x00,
93694 -0xF3,0xFF,0x40,0x14,
93695 -0x01,0x00,0x73,0x26,
93696 -0xE1,0x54,0x00,0x08,
93697 -0xFF,0xFF,0x63,0x26,
93698 -0x00,0x00,0x65,0x80,
93699 -0x00,0x00,0x02,0x92,
93700 -0x00,0x00,0x00,0x00,
93701 -0x00,0x00,0x62,0xA0,
93702 -0x00,0x00,0x05,0xA2,
93703 -0xFF,0xFF,0x63,0x24,
93704 -0x01,0x00,0x10,0x26,
93705 -0x2B,0x10,0x03,0x02,
93706 -0xF7,0xFF,0x40,0x14,
93707 -0x00,0x00,0x00,0x00,
93708 -0x81,0x54,0x00,0x08,
93709 -0x21,0x80,0xC0,0x03,
93710 -0x58,0x00,0xC3,0x34,
93711 -0x30,0x00,0x02,0x24,
93712 -0x12,0x00,0xB3,0x27,
93713 -0x10,0x00,0xA2,0xA3,
93714 -0xB2,0x54,0x00,0x08,
93715 -0x11,0x00,0xA3,0xA3,
93716 -0x2D,0x00,0x02,0x24,
93717 -0x23,0x28,0x05,0x00,
93718 -0x11,0x00,0xB3,0x27,
93719 -0xC5,0x54,0x00,0x08,
93720 -0x10,0x00,0xA2,0xA3,
93721 -0x00,0x00,0x04,0x82,
93722 -0x77,0x55,0x00,0x0C,
93723 -0x01,0x00,0x10,0x26,
93724 -0x82,0x54,0x00,0x08,
93725 -0x2B,0x10,0x13,0x02,
93726 -0x00,0x00,0x04,0x82,
93727 -0x77,0x55,0x00,0x0C,
93728 -0x01,0x00,0x10,0x26,
93729 -0x8E,0x54,0x00,0x08,
93730 -0x00,0x00,0x00,0x00,
93731 -0x00,0x00,0xA3,0x8E,
93732 -0x28,0x00,0xB0,0x27,
93733 -0x2C,0x00,0xA4,0x27,
93734 -0x2B,0x10,0x04,0x02,
93735 -0x28,0x00,0xA3,0xAF,
93736 -0x0B,0x00,0x40,0x10,
93737 -0x04,0x00,0xB5,0x26,
93738 -0x21,0xB8,0x80,0x00,
93739 -0x02,0x80,0x16,0x3C,
93740 -0x00,0x00,0x06,0x92,
93741 -0x21,0x20,0x60,0x02,
93742 -0x01,0x00,0x10,0x26,
93743 -0x24,0x55,0x00,0x0C,
93744 -0xD0,0xE3,0xC5,0x26,
93745 -0x2B,0x18,0x17,0x02,
93746 -0xF9,0xFF,0x60,0x14,
93747 -0x21,0x98,0x62,0x02,
93748 -0x80,0x54,0x00,0x08,
93749 -0xFF,0xFF,0x73,0x26,
93750 -0x00,0x00,0xA2,0x8E,
93751 -0x00,0x00,0x00,0x00,
93752 -0x06,0x00,0x56,0x24,
93753 -0x21,0x80,0x40,0x00,
93754 -0x2B,0x10,0x56,0x00,
93755 -0xF8,0xFF,0x40,0x10,
93756 -0x04,0x00,0xB5,0x26,
93757 -0x02,0x80,0x17,0x3C,
93758 -0x00,0x00,0x06,0x82,
93759 -0x21,0x20,0x60,0x02,
93760 -0x01,0x00,0x10,0x26,
93761 -0x24,0x55,0x00,0x0C,
93762 -0xD4,0xE3,0xE5,0x26,
93763 -0x2B,0x18,0x16,0x02,
93764 -0xF9,0xFF,0x60,0x14,
93765 -0x21,0x98,0x62,0x02,
93766 -0x80,0x54,0x00,0x08,
93767 -0xFF,0xFF,0x73,0x26,
93768 -0x00,0x00,0xA2,0x8E,
93769 -0x04,0x00,0xB5,0x26,
93770 -0x80,0x54,0x00,0x08,
93771 -0x10,0x00,0xA2,0xA3,
93772 -0xE8,0xFF,0xBD,0x27,
93773 -0x20,0x00,0xA6,0xAF,
93774 -0x20,0x00,0xA6,0x27,
93775 -0x10,0x00,0xBF,0xAF,
93776 -0x24,0x00,0xA7,0xAF,
93777 -0x1B,0x54,0x00,0x0C,
93778 -0x1C,0x00,0xA5,0xAF,
93779 -0x10,0x00,0xBF,0x8F,
93780 -0x00,0x00,0x00,0x00,
93781 -0x08,0x00,0xE0,0x03,
93782 -0x18,0x00,0xBD,0x27,
93783 -0xE0,0xFF,0xBD,0x27,
93784 -0x18,0x00,0xBF,0xAF,
93785 -0x14,0x00,0xB1,0xAF,
93786 -0x10,0x00,0xB0,0xAF,
93787 -0x24,0x00,0xA5,0xAF,
93788 -0x28,0x00,0xA6,0xAF,
93789 -0x2C,0x00,0xA7,0xAF,
93790 -0x20,0x00,0xA4,0xAF,
93791 -0x00,0x60,0x11,0x40,
93792 -0x01,0x00,0x21,0x36,
93793 -0x01,0x00,0x21,0x38,
93794 -0x00,0x60,0x81,0x40,
93795 -0x25,0x24,0x00,0x0C,
93796 -0xA0,0x00,0x04,0x24,
93797 -0x19,0x00,0x40,0x10,
93798 -0x21,0x80,0x40,0x00,
93799 -0x08,0x00,0x44,0x94,
93800 -0x20,0x00,0xA5,0x8F,
93801 -0x02,0x80,0x02,0x3C,
93802 -0x25,0x20,0x82,0x00,
93803 -0x20,0x00,0x84,0x24,
93804 -0x1B,0x54,0x00,0x0C,
93805 -0x24,0x00,0xA6,0x27,
93806 -0x01,0x00,0x42,0x24,
93807 -0x13,0x00,0x03,0x24,
93808 -0x81,0x00,0x44,0x2C,
93809 -0x14,0x00,0x03,0xAE,
93810 -0x17,0x00,0x80,0x14,
93811 -0x0C,0x00,0x02,0xAE,
93812 -0x00,0x60,0x01,0x40,
93813 -0x01,0x00,0x21,0x34,
93814 -0x01,0x00,0x21,0x38,
93815 -0x00,0x60,0x81,0x40,
93816 -0x88,0x88,0x03,0x3C,
93817 -0x25,0xB0,0x02,0x3C,
93818 -0x88,0x88,0x63,0x34,
93819 -0x18,0x03,0x42,0x34,
93820 -0x00,0x00,0x43,0xAC,
93821 -0x55,0x55,0x00,0x08,
93822 -0x00,0x00,0x00,0x00,
93823 -0x00,0x60,0x91,0x40,
93824 -0x99,0x99,0x03,0x3C,
93825 -0x25,0xB0,0x02,0x3C,
93826 -0x99,0x99,0x63,0x34,
93827 -0x18,0x03,0x42,0x34,
93828 -0x00,0x00,0x43,0xAC,
93829 -0x18,0x00,0xBF,0x8F,
93830 -0x14,0x00,0xB1,0x8F,
93831 -0x10,0x00,0xB0,0x8F,
93832 -0x08,0x00,0xE0,0x03,
93833 -0x20,0x00,0xBD,0x27,
93834 -0x30,0x09,0x00,0x0C,
93835 -0x21,0x20,0x00,0x02,
93836 -0x00,0x60,0x91,0x40,
93837 -0x5D,0x55,0x00,0x08,
93838 -0x00,0x00,0x00,0x00,
93839 -0xE8,0xFF,0xBD,0x27,
93840 -0x10,0x00,0xBF,0xAF,
93841 -0x02,0x80,0x06,0x3C,
93842 -0x60,0xF3,0xC5,0x8C,
93843 -0x02,0x80,0x02,0x3C,
93844 -0x40,0xF3,0x42,0x24,
93845 -0x03,0x00,0xA3,0x30,
93846 -0x21,0x18,0x62,0x00,
93847 -0x00,0x00,0x64,0x80,
93848 -0x01,0x00,0xA5,0x24,
93849 -0x77,0x55,0x00,0x0C,
93850 -0x60,0xF3,0xC5,0xAC,
93851 -0x10,0x00,0xBF,0x8F,
93852 -0x08,0x00,0x04,0x24,
93853 -0x77,0x55,0x00,0x08,
93854 -0x18,0x00,0xBD,0x27,
93855 -0x00,0x26,0x04,0x00,
93856 -0x03,0x26,0x04,0x00,
93857 -0x00,0x00,0x84,0x48,
93858 -0x08,0x00,0xE0,0x03,
93859 -0x00,0x00,0x00,0x00,
93860 -0x00,0x26,0x04,0x00,
93861 -0x03,0x26,0x04,0x00,
93862 -0xF7,0xFF,0x82,0x24,
93863 -0x05,0x00,0x42,0x2C,
93864 -0x06,0x00,0x40,0x14,
93865 -0x21,0x18,0x00,0x00,
93866 -0x20,0x00,0x02,0x24,
93867 -0x03,0x00,0x82,0x10,
93868 -0x00,0x00,0x00,0x00,
93869 -0x08,0x00,0xE0,0x03,
93870 -0x21,0x10,0x60,0x00,
93871 -0x01,0x00,0x03,0x24,
93872 -0x08,0x00,0xE0,0x03,
93873 -0x21,0x10,0x60,0x00,
93874 -0x00,0x60,0x02,0x40,
93875 -0x01,0x00,0x41,0x34,
93876 -0x01,0x00,0x21,0x38,
93877 -0x00,0x60,0x81,0x40,
93878 -0x02,0x80,0x03,0x3C,
93879 -0xD4,0x5E,0x64,0xAC,
93880 -0x00,0x60,0x82,0x40,
93881 -0x08,0x00,0xE0,0x03,
93882 -0x00,0x00,0x00,0x00,
93883 -0x25,0xB0,0x05,0x3C,
93884 -0x01,0x00,0x06,0x24,
93885 -0x01,0x80,0x02,0x3C,
93886 -0x04,0x30,0x86,0x00,
93887 -0xF1,0x02,0xA7,0x34,
93888 -0xED,0x02,0xA4,0x34,
93889 -0x4C,0x56,0x42,0x24,
93890 -0x18,0x03,0xA5,0x34,
93891 -0x08,0x00,0x03,0x24,
93892 -0x00,0x00,0xA2,0xAC,
93893 -0x00,0x00,0xE3,0xA0,
93894 -0x00,0x00,0x80,0xA0,
93895 -0x00,0x00,0x86,0xA0,
93896 -0x00,0x00,0x80,0xA0,
93897 -0x00,0x00,0x86,0xA0,
93898 -0x00,0x00,0x80,0xA0,
93899 -0x00,0x00,0x86,0xA0,
93900 -0x00,0x00,0x80,0xA0,
93901 -0x00,0x00,0x86,0xA0,
93902 -0x00,0x00,0x80,0xA0,
93903 -0x00,0x00,0xE0,0xA0,
93904 -0x08,0x00,0xE0,0x03,
93905 -0x00,0x00,0x00,0x00,
93906 -0x00,0x00,0x82,0x8C,
93907 -0x08,0x00,0xE0,0x03,
93908 -0x00,0x00,0x00,0x00,
93909 -0xFF,0xFF,0xC6,0x30,
93910 -0x10,0x00,0x02,0x24,
93911 -0x0C,0x00,0xC2,0x10,
93912 -0x11,0x00,0xC3,0x28,
93913 -0x06,0x00,0x60,0x10,
93914 -0x20,0x00,0x02,0x24,
93915 -0x08,0x00,0x02,0x24,
93916 -0x0D,0x00,0xC2,0x10,
93917 -0x00,0x00,0x00,0x00,
93918 -0x08,0x00,0xE0,0x03,
93919 -0x00,0x00,0x00,0x00,
93920 -0x06,0x00,0xC2,0x10,
93921 -0x00,0x00,0x00,0x00,
93922 -0x08,0x00,0xE0,0x03,
93923 -0x00,0x00,0x00,0x00,
93924 -0x00,0x00,0x85,0xA4,
93925 -0x08,0x00,0xE0,0x03,
93926 -0x00,0x00,0x00,0x00,
93927 -0x00,0x00,0x85,0xAC,
93928 -0x08,0x00,0xE0,0x03,
93929 -0x00,0x00,0x00,0x00,
93930 -0x00,0x00,0x85,0xA0,
93931 -0x08,0x00,0xE0,0x03,
93932 -0x00,0x00,0x00,0x00,
93933 -0x08,0x00,0xE0,0x03,
93934 -0x21,0x10,0x00,0x00,
93935 -0x08,0x00,0xE0,0x03,
93936 -0x21,0x10,0x00,0x00,
93937 -0x25,0xB0,0x02,0x3C,
93938 -0x0A,0x00,0x42,0x34,
93939 -0x00,0x00,0x43,0x90,
93940 -0xFF,0xFF,0xA5,0x24,
93941 -0x00,0x2C,0x05,0x00,
93942 -0xFD,0x00,0x63,0x30,
93943 -0x03,0x2C,0x05,0x00,
93944 -0xFF,0xFF,0x87,0x30,
93945 -0x00,0x00,0x43,0xA0,
93946 -0x1A,0x00,0xA0,0x04,
93947 -0x00,0x00,0x00,0x00,
93948 -0x21,0x30,0x40,0x00,
93949 -0x07,0x10,0xA7,0x00,
93950 -0x01,0x00,0x42,0x30,
93951 -0xFD,0x00,0x64,0x30,
93952 -0x00,0x00,0x42,0x38,
93953 -0x02,0x00,0x63,0x34,
93954 -0x0A,0x18,0x82,0x00,
93955 -0x00,0x00,0xC3,0xA0,
93956 -0x04,0x00,0x63,0x34,
93957 -0x00,0x00,0xC3,0xA0,
93958 -0x09,0x00,0x02,0x24,
93959 -0xFF,0xFF,0x42,0x24,
93960 -0xFF,0xFF,0x41,0x04,
93961 -0xFF,0xFF,0x42,0x24,
93962 -0xFB,0x00,0x63,0x30,
93963 -0x00,0x00,0xC3,0xA0,
93964 -0x04,0x00,0x02,0x24,
93965 -0xFF,0xFF,0x42,0x24,
93966 -0xFF,0xFF,0x41,0x04,
93967 -0xFF,0xFF,0x42,0x24,
93968 -0xFF,0xFF,0xA2,0x24,
93969 -0x00,0x2C,0x02,0x00,
93970 -0x03,0x2C,0x05,0x00,
93971 -0xEA,0xFF,0xA1,0x04,
93972 -0x07,0x10,0xA7,0x00,
93973 -0x08,0x00,0xE0,0x03,
93974 -0x00,0x00,0x00,0x00,
93975 -0x25,0xB0,0x02,0x3C,
93976 -0x0A,0x00,0x42,0x34,
93977 -0x00,0x00,0x43,0x90,
93978 -0xFF,0xFF,0x84,0x24,
93979 -0x00,0x24,0x04,0x00,
93980 -0x03,0x24,0x04,0x00,
93981 -0xFF,0x00,0x65,0x30,
93982 -0x1D,0x00,0x80,0x04,
93983 -0x21,0x38,0x00,0x00,
93984 -0x21,0x30,0x40,0x00,
93985 -0x01,0x00,0x08,0x24,
93986 -0x04,0x00,0xA5,0x34,
93987 -0x00,0x00,0xC5,0xA0,
93988 -0x00,0x00,0xC2,0x90,
93989 -0x00,0x00,0x00,0x00,
93990 -0xFF,0x00,0x45,0x30,
93991 -0x01,0x00,0xA3,0x30,
93992 -0x05,0x00,0x60,0x10,
93993 -0x04,0x00,0x02,0x24,
93994 -0x04,0x10,0x88,0x00,
93995 -0x25,0x10,0x47,0x00,
93996 -0xFF,0xFF,0x47,0x30,
93997 -0x04,0x00,0x02,0x24,
93998 -0xFF,0xFF,0x42,0x24,
93999 -0xFF,0xFF,0x41,0x04,
94000 -0xFF,0xFF,0x42,0x24,
94001 -0xFB,0x00,0xA5,0x30,
94002 -0x00,0x00,0xC5,0xA0,
94003 -0x09,0x00,0x02,0x24,
94004 -0xFF,0xFF,0x42,0x24,
94005 -0xFF,0xFF,0x41,0x04,
94006 -0xFF,0xFF,0x42,0x24,
94007 -0xFF,0xFF,0x82,0x24,
94008 -0x00,0x24,0x02,0x00,
94009 -0x03,0x24,0x04,0x00,
94010 -0xE7,0xFF,0x81,0x04,
94011 -0x00,0x00,0x00,0x00,
94012 -0x08,0x00,0xE0,0x03,
94013 -0x21,0x10,0xE0,0x00,
94014 -0xE0,0xFF,0xBD,0x27,
94015 -0x10,0x00,0xB0,0xAF,
94016 -0x25,0xB0,0x10,0x3C,
94017 -0x0A,0x00,0x10,0x36,
94018 -0x18,0x00,0xBF,0xAF,
94019 -0x14,0x00,0xB1,0xAF,
94020 -0x00,0x00,0x02,0x92,
94021 -0xFF,0xFF,0x91,0x30,
94022 -0x03,0x00,0x05,0x24,
94023 -0xC0,0x00,0x42,0x30,
94024 -0x80,0x00,0x43,0x34,
94025 -0x00,0x00,0x03,0xA2,
94026 -0x04,0x00,0x63,0x34,
94027 -0x00,0x00,0x03,0xA2,
94028 -0xFB,0x00,0x63,0x30,
94029 -0x00,0x00,0x03,0xA2,
94030 -0x08,0x00,0x63,0x34,
94031 -0x00,0x00,0x03,0xA2,
94032 -0x04,0x00,0x63,0x34,
94033 -0x00,0x00,0x03,0xA2,
94034 -0xFB,0x00,0x63,0x30,
94035 -0x00,0x00,0x03,0xA2,
94036 -0xC9,0x55,0x00,0x0C,
94037 -0x06,0x00,0x04,0x24,
94038 -0x42,0x20,0x11,0x00,
94039 -0xC9,0x55,0x00,0x0C,
94040 -0x06,0x00,0x05,0x24,
94041 -0xEF,0x55,0x00,0x0C,
94042 -0x10,0x00,0x04,0x24,
94043 -0x00,0x00,0x03,0x92,
94044 -0x18,0x00,0xBF,0x8F,
94045 -0x14,0x00,0xB1,0x8F,
94046 -0xC0,0x00,0x63,0x30,
94047 -0x00,0x00,0x03,0xA2,
94048 -0x10,0x00,0xB0,0x8F,
94049 -0x08,0x00,0xE0,0x03,
94050 -0x20,0x00,0xBD,0x27,
94051 -0xE0,0xFF,0xBD,0x27,
94052 -0x14,0x00,0xB1,0xAF,
94053 -0xFF,0xFF,0xB1,0x30,
94054 -0x18,0x00,0xB2,0xAF,
94055 -0x10,0x00,0xB0,0xAF,
94056 -0x1C,0x00,0xBF,0xAF,
94057 -0x21,0x90,0xC0,0x00,
94058 -0x0A,0x00,0x20,0x12,
94059 -0xFF,0xFF,0x90,0x30,
94060 -0x16,0x56,0x00,0x0C,
94061 -0x21,0x20,0x00,0x02,
94062 -0xFE,0xFF,0x23,0x26,
94063 -0x02,0x00,0x04,0x26,
94064 -0x00,0x00,0x42,0xA6,
94065 -0xFF,0xFF,0x71,0x30,
94066 -0xFF,0xFF,0x90,0x30,
94067 -0xF8,0xFF,0x20,0x16,
94068 -0x02,0x00,0x52,0x26,
94069 -0x1C,0x00,0xBF,0x8F,
94070 -0x18,0x00,0xB2,0x8F,
94071 -0x14,0x00,0xB1,0x8F,
94072 -0x10,0x00,0xB0,0x8F,
94073 -0x08,0x00,0xE0,0x03,
94074 -0x20,0x00,0xBD,0x27,
94075 -0xC8,0xFF,0xBD,0x27,
94076 -0x25,0xB0,0x03,0x3C,
94077 -0x1C,0x00,0xB3,0xAF,
94078 -0x18,0x00,0xB2,0xAF,
94079 -0x14,0x00,0xB1,0xAF,
94080 -0x10,0x00,0xB0,0xAF,
94081 -0x34,0x00,0xBF,0xAF,
94082 -0x30,0x00,0xBE,0xAF,
94083 -0x2C,0x00,0xB7,0xAF,
94084 -0x28,0x00,0xB6,0xAF,
94085 -0x24,0x00,0xB5,0xAF,
94086 -0x20,0x00,0xB4,0xAF,
94087 -0x0A,0x00,0x67,0x34,
94088 -0x00,0x00,0xE2,0x90,
94089 -0xFF,0xFF,0xB2,0x30,
94090 -0x21,0x98,0xC0,0x00,
94091 -0xFF,0x00,0x91,0x30,
94092 -0x20,0x00,0x40,0x12,
94093 -0xFF,0x00,0x50,0x30,
94094 -0x21,0xA0,0xE0,0x00,
94095 -0x0C,0x00,0x77,0x34,
94096 -0x0B,0x00,0x76,0x34,
94097 -0x21,0xF0,0xE0,0x00,
94098 -0xC0,0xFF,0x15,0x24,
94099 -0x25,0x10,0x15,0x02,
94100 -0xFF,0x00,0x50,0x30,
94101 -0x00,0x00,0xD1,0xA2,
94102 -0x00,0x00,0x90,0xA2,
94103 -0x00,0x00,0x82,0x92,
94104 -0x00,0x00,0x00,0x00,
94105 -0xFF,0x00,0x50,0x30,
94106 -0xC0,0x00,0x03,0x32,
94107 -0x07,0x00,0x60,0x10,
94108 -0x21,0x20,0xC0,0x03,
94109 -0x00,0x00,0x82,0x90,
94110 -0x00,0x00,0x00,0x00,
94111 -0xFF,0x00,0x50,0x30,
94112 -0xC0,0x00,0x03,0x32,
94113 -0xFB,0xFF,0x60,0x14,
94114 -0x00,0x00,0x00,0x00,
94115 -0x00,0x00,0xE2,0x8E,
94116 -0x04,0x00,0x23,0x26,
94117 -0x64,0x00,0x04,0x24,
94118 -0x00,0x00,0x62,0xAE,
94119 -0x25,0x22,0x00,0x0C,
94120 -0xFF,0x00,0x71,0x30,
94121 -0xFC,0xFF,0x42,0x26,
94122 -0xFF,0xFF,0x52,0x30,
94123 -0xE7,0xFF,0x40,0x16,
94124 -0x04,0x00,0x73,0x26,
94125 -0x34,0x00,0xBF,0x8F,
94126 -0x30,0x00,0xBE,0x8F,
94127 -0x2C,0x00,0xB7,0x8F,
94128 -0x28,0x00,0xB6,0x8F,
94129 -0x24,0x00,0xB5,0x8F,
94130 -0x20,0x00,0xB4,0x8F,
94131 -0x1C,0x00,0xB3,0x8F,
94132 -0x18,0x00,0xB2,0x8F,
94133 -0x14,0x00,0xB1,0x8F,
94134 -0x10,0x00,0xB0,0x8F,
94135 -0x08,0x00,0xE0,0x03,
94136 -0x38,0x00,0xBD,0x27,
94137 -0x25,0xB0,0x06,0x3C,
94138 -0x31,0x00,0xC2,0x34,
94139 -0xFF,0xFF,0x84,0x30,
94140 -0x00,0x00,0x44,0xA0,
94141 -0x32,0x00,0xC7,0x34,
94142 -0x00,0x00,0xE3,0x90,
94143 -0xFC,0xFF,0x02,0x24,
94144 -0x02,0x22,0x04,0x00,
94145 -0x24,0x18,0x62,0x00,
94146 -0x03,0x00,0x84,0x30,
94147 -0x25,0x20,0x83,0x00,
94148 -0x33,0x00,0xC6,0x34,
94149 -0x72,0x00,0x02,0x24,
94150 -0x00,0x00,0xE4,0xA0,
94151 -0x00,0x00,0xC2,0xA0,
94152 -0x00,0x00,0xC3,0x90,
94153 -0x00,0x00,0x00,0x00,
94154 -0x00,0x1E,0x03,0x00,
94155 -0x03,0x1E,0x03,0x00,
94156 -0x05,0x00,0x61,0x04,
94157 -0x21,0x10,0x00,0x00,
94158 -0xB5,0x56,0x00,0x08,
94159 -0x25,0xB0,0x02,0x3C,
94160 -0x11,0x00,0x80,0x10,
94161 -0x00,0x00,0x00,0x00,
94162 -0x00,0x00,0xC3,0x90,
94163 -0x01,0x00,0x42,0x24,
94164 -0xFF,0x00,0x42,0x30,
94165 -0x00,0x1E,0x03,0x00,
94166 -0x03,0x1E,0x03,0x00,
94167 -0xF8,0xFF,0x61,0x04,
94168 -0x64,0x00,0x44,0x2C,
94169 -0x64,0x00,0x44,0x2C,
94170 -0x07,0x00,0x80,0x10,
94171 -0x00,0x00,0x00,0x00,
94172 -0x25,0xB0,0x02,0x3C,
94173 -0x30,0x00,0x42,0x34,
94174 -0x00,0x00,0x43,0x90,
94175 -0x01,0x00,0x02,0x24,
94176 -0x08,0x00,0xE0,0x03,
94177 -0x00,0x00,0xA3,0xA0,
94178 -0xFF,0xFF,0x02,0x24,
94179 -0x00,0x00,0xA2,0xA0,
94180 -0x08,0x00,0xE0,0x03,
94181 -0x21,0x10,0x00,0x00,
94182 -0x25,0xB0,0x06,0x3C,
94183 -0x31,0x00,0xC2,0x34,
94184 -0xFF,0xFF,0x84,0x30,
94185 -0x00,0x00,0x44,0xA0,
94186 -0x32,0x00,0xC3,0x34,
94187 -0x00,0x00,0x62,0x90,
94188 -0x02,0x22,0x04,0x00,
94189 -0x03,0x00,0x84,0x30,
94190 -0x25,0x20,0x82,0x00,
94191 -0x00,0x00,0x64,0xA0,
94192 -0x33,0x00,0xC7,0x34,
94193 -0xFF,0x00,0xA5,0x30,
94194 -0x30,0x00,0xC6,0x34,
94195 -0xF2,0xFF,0x03,0x24,
94196 -0x00,0x00,0xC5,0xA0,
94197 -0x00,0x00,0xE3,0xA0,
94198 -0x00,0x00,0xE2,0x90,
94199 -0x00,0x00,0x00,0x00,
94200 -0x00,0x16,0x02,0x00,
94201 -0x03,0x16,0x02,0x00,
94202 -0x03,0x00,0x40,0x04,
94203 -0x21,0x20,0x00,0x00,
94204 -0x08,0x00,0xE0,0x03,
94205 -0x01,0x00,0x02,0x24,
94206 -0xDA,0x56,0x00,0x08,
94207 -0x21,0x30,0xE0,0x00,
94208 -0x0B,0x00,0x40,0x10,
94209 -0x00,0x00,0x00,0x00,
94210 -0x00,0x00,0xC3,0x90,
94211 -0x01,0x00,0x82,0x24,
94212 -0xFF,0x00,0x44,0x30,
94213 -0x00,0x1E,0x03,0x00,
94214 -0x03,0x1E,0x03,0x00,
94215 -0xF8,0xFF,0x60,0x04,
94216 -0x64,0x00,0x82,0x2C,
94217 -0x64,0x00,0x82,0x2C,
94218 -0xF1,0xFF,0x40,0x14,
94219 -0x00,0x00,0x00,0x00,
94220 -0x08,0x00,0xE0,0x03,
94221 -0x21,0x10,0x00,0x00,
94222 -0xE0,0xFF,0xBD,0x27,
94223 -0x25,0xB0,0x02,0x3C,
94224 -0x18,0x00,0xB0,0xAF,
94225 -0xF8,0x02,0x45,0x34,
94226 -0x25,0xB0,0x10,0x3C,
94227 -0xFF,0x00,0x83,0x30,
94228 -0x01,0x00,0x02,0x24,
94229 -0x1C,0x00,0xBF,0xAF,
94230 -0x03,0x00,0x06,0x36,
94231 -0x0A,0x00,0x62,0x10,
94232 -0x0A,0x00,0x04,0x24,
94233 -0x00,0x00,0xA2,0x90,
94234 -0x1C,0x00,0xBF,0x8F,
94235 -0x18,0x00,0xB0,0x8F,
94236 -0xFE,0xFF,0x03,0x24,
94237 -0x24,0x10,0x43,0x00,
94238 -0x20,0x00,0xBD,0x27,
94239 -0x00,0x00,0xA2,0xA0,
94240 -0x08,0x00,0xE0,0x03,
94241 -0x00,0x00,0x00,0x00,
94242 -0x00,0x00,0xC2,0x90,
94243 -0x00,0x00,0x00,0x00,
94244 -0xFF,0x00,0x42,0x30,
94245 -0x20,0x00,0x43,0x34,
94246 -0x20,0x00,0x42,0x30,
94247 -0x02,0x00,0x40,0x14,
94248 -0x00,0x00,0x00,0x00,
94249 -0x00,0x00,0xC3,0xA0,
94250 -0x25,0x22,0x00,0x0C,
94251 -0x00,0x00,0x00,0x00,
94252 -0x01,0x00,0x04,0x36,
94253 -0x00,0x00,0x82,0x90,
94254 -0xFE,0xFF,0x03,0x24,
94255 -0xF8,0x02,0x06,0x36,
94256 -0x24,0x10,0x43,0x00,
94257 -0x00,0x00,0x82,0xA0,
94258 -0x00,0x00,0xC3,0x90,
94259 -0x10,0x00,0xA5,0x27,
94260 -0x21,0x20,0x00,0x00,
94261 -0x03,0x00,0x63,0x34,
94262 -0x00,0x00,0xC3,0xA0,
94263 -0x91,0x56,0x00,0x0C,
94264 -0x00,0x00,0x00,0x00,
94265 -0x1C,0x00,0xBF,0x8F,
94266 -0x18,0x00,0xB0,0x8F,
94267 -0x08,0x00,0xE0,0x03,
94268 -0x20,0x00,0xBD,0x27,
94269 -0xFF,0x00,0x84,0x30,
94270 -0x21,0x38,0x00,0x00,
94271 -0x21,0x28,0x00,0x00,
94272 -0x01,0x00,0xA3,0x24,
94273 -0x07,0x10,0xA4,0x00,
94274 -0x01,0x00,0x42,0x30,
94275 -0xFF,0x00,0x65,0x30,
94276 -0x01,0x00,0xE6,0x24,
94277 -0x02,0x00,0x40,0x14,
94278 -0x04,0x00,0xA3,0x2C,
94279 -0xFF,0x00,0xC7,0x30,
94280 -0xF7,0xFF,0x60,0x14,
94281 -0x21,0x10,0xE0,0x00,
94282 -0x08,0x00,0xE0,0x03,
94283 -0x00,0x00,0x00,0x00,
94284 -0xFF,0x00,0x8C,0x30,
94285 -0x21,0x48,0x00,0x00,
94286 -0x21,0x38,0x00,0x00,
94287 -0x40,0x10,0x07,0x00,
94288 -0xFF,0x00,0x42,0x30,
94289 -0x21,0x50,0x46,0x00,
94290 -0x01,0x00,0xE3,0x24,
94291 -0x07,0x10,0xEC,0x00,
94292 -0x01,0x00,0x42,0x30,
94293 -0xFF,0x00,0x67,0x30,
94294 -0x21,0x58,0x25,0x01,
94295 -0x01,0x00,0x24,0x25,
94296 -0x09,0x00,0x40,0x14,
94297 -0x04,0x00,0xE8,0x2C,
94298 -0x00,0x00,0x63,0x91,
94299 -0xFF,0x00,0x89,0x30,
94300 -0x21,0x20,0x25,0x01,
94301 -0x00,0x00,0x43,0xA1,
94302 -0x00,0x00,0x83,0x90,
94303 -0x01,0x00,0x22,0x25,
94304 -0xFF,0x00,0x49,0x30,
94305 -0x01,0x00,0x43,0xA1,
94306 -0xED,0xFF,0x00,0x15,
94307 -0x40,0x10,0x07,0x00,
94308 -0x08,0x00,0xE0,0x03,
94309 -0x00,0x00,0x00,0x00,
94310 -0xD8,0xFF,0xBD,0x27,
94311 -0x20,0x00,0xB2,0xAF,
94312 -0x1C,0x00,0xB1,0xAF,
94313 -0x18,0x00,0xB0,0xAF,
94314 -0x24,0x00,0xBF,0xAF,
94315 -0x01,0x00,0x12,0x24,
94316 -0x21,0x80,0x00,0x00,
94317 -0x57,0x57,0x00,0x08,
94318 -0xFF,0x00,0x11,0x24,
94319 -0x91,0x56,0x00,0x0C,
94320 -0x00,0x00,0x00,0x00,
94321 -0x10,0x00,0x40,0x10,
94322 -0x00,0x02,0x03,0x2E,
94323 -0x0F,0x00,0x60,0x10,
94324 -0x21,0x10,0x00,0x02,
94325 -0x10,0x00,0xA2,0x93,
94326 -0x00,0x00,0x00,0x00,
94327 -0x0A,0x00,0x51,0x10,
94328 -0x0F,0x00,0x44,0x30,
94329 -0x15,0x57,0x00,0x0C,
94330 -0x00,0x00,0x00,0x00,
94331 -0x40,0x10,0x02,0x00,
94332 -0x21,0x10,0x50,0x00,
94333 -0x01,0x00,0x42,0x24,
94334 -0xFF,0xFF,0x50,0x30,
94335 -0x21,0x20,0x00,0x02,
94336 -0xEE,0xFF,0x40,0x16,
94337 -0x10,0x00,0xA5,0x27,
94338 -0x21,0x10,0x00,0x02,
94339 -0x24,0x00,0xBF,0x8F,
94340 -0x20,0x00,0xB2,0x8F,
94341 -0x1C,0x00,0xB1,0x8F,
94342 -0x18,0x00,0xB0,0x8F,
94343 -0x08,0x00,0xE0,0x03,
94344 -0x28,0x00,0xBD,0x27,
94345 -0xB8,0xFF,0xBD,0x27,
94346 -0x3C,0x00,0xB7,0xAF,
94347 -0x38,0x00,0xB6,0xAF,
94348 -0x34,0x00,0xB5,0xAF,
94349 -0x30,0x00,0xB4,0xAF,
94350 -0x2C,0x00,0xB3,0xAF,
94351 -0x24,0x00,0xB1,0xAF,
94352 -0x20,0x00,0xB0,0xAF,
94353 -0x44,0x00,0xBF,0xAF,
94354 -0x40,0x00,0xBE,0xAF,
94355 -0x28,0x00,0xB2,0xAF,
94356 -0x21,0x98,0xA0,0x00,
94357 -0xFF,0x00,0x96,0x30,
94358 -0x01,0x00,0x10,0x24,
94359 -0x01,0x00,0x17,0x24,
94360 -0x21,0xA0,0x00,0x00,
94361 -0x21,0x88,0x00,0x00,
94362 -0x21,0xA8,0x00,0x00,
94363 -0x04,0x00,0xA0,0x10,
94364 -0x21,0x18,0x00,0x00,
94365 -0x10,0x00,0xC2,0x2E,
94366 -0x0E,0x00,0x40,0x14,
94367 -0x21,0x20,0xA0,0x00,
94368 -0x44,0x00,0xBF,0x8F,
94369 -0x40,0x00,0xBE,0x8F,
94370 -0x3C,0x00,0xB7,0x8F,
94371 -0x38,0x00,0xB6,0x8F,
94372 -0x34,0x00,0xB5,0x8F,
94373 -0x30,0x00,0xB4,0x8F,
94374 -0x2C,0x00,0xB3,0x8F,
94375 -0x28,0x00,0xB2,0x8F,
94376 -0x24,0x00,0xB1,0x8F,
94377 -0x20,0x00,0xB0,0x8F,
94378 -0x21,0x10,0x60,0x00,
94379 -0x08,0x00,0xE0,0x03,
94380 -0x48,0x00,0xBD,0x27,
94381 -0x08,0x00,0x06,0x24,
94382 -0xFF,0x51,0x00,0x0C,
94383 -0xFF,0x00,0x05,0x24,
94384 -0x18,0x00,0xA4,0x27,
94385 -0xFF,0x00,0x05,0x24,
94386 -0xFF,0x51,0x00,0x0C,
94387 -0x08,0x00,0x06,0x24,
94388 -0xE6,0x56,0x00,0x0C,
94389 -0x01,0x00,0x04,0x24,
94390 -0x96,0x57,0x00,0x08,
94391 -0x10,0x00,0xBE,0x27,
94392 -0x1C,0x00,0x40,0x14,
94393 -0x21,0x20,0xA0,0x02,
94394 -0x37,0x00,0xE0,0x12,
94395 -0x00,0x02,0x22,0x2E,
94396 -0x35,0x00,0x40,0x10,
94397 -0x00,0x00,0x00,0x00,
94398 -0x01,0x00,0x02,0x32,
94399 -0xF8,0xFF,0x40,0x10,
94400 -0x20,0x00,0x02,0x32,
94401 -0x21,0x20,0x20,0x02,
94402 -0x91,0x56,0x00,0x0C,
94403 -0x10,0x00,0xA5,0x27,
94404 -0x2D,0x00,0x40,0x10,
94405 -0xFF,0x00,0x02,0x24,
94406 -0x10,0x00,0xB0,0x93,
94407 -0x00,0x00,0x00,0x00,
94408 -0x29,0x00,0x02,0x12,
94409 -0x0F,0x00,0x15,0x32,
94410 -0x15,0x57,0x00,0x0C,
94411 -0x21,0x20,0xA0,0x02,
94412 -0x02,0x81,0x10,0x00,
94413 -0x10,0x00,0x16,0x12,
94414 -0x21,0xA0,0x40,0x00,
94415 -0x40,0x10,0x14,0x00,
94416 -0x21,0x10,0x51,0x00,
94417 -0x01,0x00,0x42,0x24,
94418 -0xFF,0xFF,0x51,0x30,
94419 -0x92,0x57,0x00,0x08,
94420 -0x01,0x00,0x10,0x24,
94421 -0x18,0x00,0xA5,0x27,
94422 -0x24,0x57,0x00,0x0C,
94423 -0x21,0x30,0x60,0x02,
94424 -0x40,0x10,0x14,0x00,
94425 -0x21,0x10,0x51,0x00,
94426 -0x01,0x00,0x42,0x24,
94427 -0xFF,0xFF,0x51,0x30,
94428 -0x92,0x57,0x00,0x08,
94429 -0x01,0x00,0x10,0x24,
94430 -0x40,0x90,0x02,0x00,
94431 -0x10,0x00,0x40,0x1A,
94432 -0x21,0x80,0x00,0x00,
94433 -0x21,0x20,0x30,0x02,
94434 -0x01,0x00,0x84,0x24,
94435 -0xFF,0xFF,0x84,0x30,
94436 -0x91,0x56,0x00,0x0C,
94437 -0x10,0x00,0xA5,0x27,
94438 -0x01,0x00,0x03,0x26,
94439 -0x21,0x20,0xD0,0x03,
94440 -0xFF,0x00,0x70,0x30,
94441 -0x04,0x00,0x40,0x10,
94442 -0x2A,0x18,0x12,0x02,
94443 -0x10,0x00,0xA2,0x93,
94444 -0x00,0x00,0x00,0x00,
94445 -0x08,0x00,0x82,0xA0,
94446 -0xF3,0xFF,0x60,0x14,
94447 -0x21,0x20,0x30,0x02,
94448 -0x92,0x57,0x00,0x08,
94449 -0x20,0x00,0x10,0x24,
94450 -0xE6,0x56,0x00,0x0C,
94451 -0x21,0x20,0x00,0x00,
94452 -0x00,0x00,0x63,0x92,
94453 -0xFF,0x00,0x02,0x24,
94454 -0x0F,0x00,0x62,0x10,
94455 -0x00,0x00,0x00,0x00,
94456 -0x01,0x00,0x03,0x24,
94457 -0x44,0x00,0xBF,0x8F,
94458 -0x40,0x00,0xBE,0x8F,
94459 -0x3C,0x00,0xB7,0x8F,
94460 -0x38,0x00,0xB6,0x8F,
94461 -0x34,0x00,0xB5,0x8F,
94462 -0x30,0x00,0xB4,0x8F,
94463 -0x2C,0x00,0xB3,0x8F,
94464 -0x28,0x00,0xB2,0x8F,
94465 -0x24,0x00,0xB1,0x8F,
94466 -0x20,0x00,0xB0,0x8F,
94467 -0x21,0x10,0x60,0x00,
94468 -0x08,0x00,0xE0,0x03,
94469 -0x48,0x00,0xBD,0x27,
94470 -0x01,0x00,0x62,0x92,
94471 -0x00,0x00,0x00,0x00,
94472 -0xF0,0xFF,0x43,0x14,
94473 -0x01,0x00,0x03,0x24,
94474 -0x02,0x00,0x63,0x92,
94475 -0x00,0x00,0x00,0x00,
94476 -0xEB,0xFF,0x62,0x14,
94477 -0x00,0x00,0x00,0x00,
94478 -0x03,0x00,0x62,0x92,
94479 -0x00,0x00,0x00,0x00,
94480 -0xE8,0xFF,0x43,0x14,
94481 -0x01,0x00,0x03,0x24,
94482 -0x04,0x00,0x63,0x92,
94483 -0x00,0x00,0x00,0x00,
94484 -0xE3,0xFF,0x62,0x14,
94485 -0x00,0x00,0x00,0x00,
94486 -0x05,0x00,0x62,0x92,
94487 -0x00,0x00,0x00,0x00,
94488 -0xDF,0xFF,0x43,0x14,
94489 -0x00,0x00,0x00,0x00,
94490 -0x06,0x00,0x67,0x92,
94491 -0x00,0x00,0x00,0x00,
94492 -0xDC,0xFF,0xE2,0x14,
94493 -0x01,0x00,0x03,0x24,
94494 -0x07,0x00,0x62,0x92,
94495 -0x00,0x00,0x00,0x00,
94496 -0x7F,0xFF,0x47,0x10,
94497 -0x21,0x18,0x00,0x00,
94498 -0xD1,0x57,0x00,0x08,
94499 -0x01,0x00,0x03,0x24,
94500 -0xC0,0xFF,0xBD,0x27,
94501 -0x38,0x00,0xBE,0xAF,
94502 -0x30,0x00,0xB6,0xAF,
94503 -0x2C,0x00,0xB5,0xAF,
94504 -0x21,0xF0,0xC0,0x00,
94505 -0xFF,0x00,0xB6,0x30,
94506 -0xFF,0xFF,0x95,0x30,
94507 -0xFF,0x00,0x05,0x24,
94508 -0x10,0x00,0xA4,0x27,
94509 -0x08,0x00,0x06,0x24,
94510 -0x34,0x00,0xB7,0xAF,
94511 -0x24,0x00,0xB3,0xAF,
94512 -0x3C,0x00,0xBF,0xAF,
94513 -0x28,0x00,0xB4,0xAF,
94514 -0x20,0x00,0xB2,0xAF,
94515 -0x1C,0x00,0xB1,0xAF,
94516 -0x18,0x00,0xB0,0xAF,
94517 -0xFF,0x51,0x00,0x0C,
94518 -0x0F,0x00,0x17,0x24,
94519 -0x21,0x98,0x00,0x00,
94520 -0x40,0x10,0x13,0x00,
94521 -0xFF,0x00,0x52,0x30,
94522 -0x07,0x10,0x76,0x02,
94523 -0x01,0x00,0x42,0x30,
94524 -0x21,0xA0,0x5E,0x02,
94525 -0x21,0x88,0xA0,0x02,
94526 -0x21,0x20,0xA0,0x02,
94527 -0x13,0x00,0x40,0x10,
94528 -0x01,0x00,0xA3,0x26,
94529 -0x01,0x00,0x62,0x26,
94530 -0xFF,0x00,0x53,0x30,
94531 -0x04,0x00,0x63,0x2E,
94532 -0xF4,0xFF,0x60,0x14,
94533 -0x40,0x10,0x13,0x00,
94534 -0x21,0x10,0xE0,0x02,
94535 -0x3C,0x00,0xBF,0x8F,
94536 -0x38,0x00,0xBE,0x8F,
94537 -0x34,0x00,0xB7,0x8F,
94538 -0x30,0x00,0xB6,0x8F,
94539 -0x2C,0x00,0xB5,0x8F,
94540 -0x28,0x00,0xB4,0x8F,
94541 -0x24,0x00,0xB3,0x8F,
94542 -0x20,0x00,0xB2,0x8F,
94543 -0x1C,0x00,0xB1,0x8F,
94544 -0x18,0x00,0xB0,0x8F,
94545 -0x08,0x00,0xE0,0x03,
94546 -0x40,0x00,0xBD,0x27,
94547 -0x00,0x00,0x85,0x92,
94548 -0xFF,0xFF,0x75,0x30,
94549 -0xBE,0x56,0x00,0x0C,
94550 -0x21,0x80,0xA0,0x02,
94551 -0x01,0x00,0x85,0x92,
94552 -0x21,0x20,0xA0,0x02,
94553 -0x01,0x00,0xA2,0x26,
94554 -0xBE,0x56,0x00,0x0C,
94555 -0xFF,0xFF,0x55,0x30,
94556 -0x10,0x00,0xA3,0x27,
94557 -0x21,0x90,0x72,0x00,
94558 -0x21,0x20,0x20,0x02,
94559 -0x91,0x56,0x00,0x0C,
94560 -0x21,0x28,0x40,0x02,
94561 -0x21,0x20,0x00,0x02,
94562 -0x91,0x56,0x00,0x0C,
94563 -0x01,0x00,0x45,0x26,
94564 -0x00,0x00,0x84,0x92,
94565 -0x00,0x00,0x42,0x92,
94566 -0x01,0x00,0x03,0x24,
94567 -0x04,0x18,0x63,0x02,
94568 -0x03,0x00,0x82,0x10,
94569 -0x27,0x30,0x03,0x00,
94570 -0x19,0x58,0x00,0x08,
94571 -0x24,0xB8,0xD7,0x00,
94572 -0x01,0x00,0x83,0x92,
94573 -0x01,0x00,0x42,0x92,
94574 -0x00,0x00,0x00,0x00,
94575 -0xD2,0xFF,0x62,0x10,
94576 -0x01,0x00,0x62,0x26,
94577 -0x1A,0x58,0x00,0x08,
94578 -0x24,0xB8,0xD7,0x00,
94579 -0x98,0xFF,0xBD,0x27,
94580 -0x50,0x00,0xB4,0xAF,
94581 -0xFF,0x00,0x94,0x30,
94582 -0x01,0x00,0x04,0x24,
94583 -0x64,0x00,0xBF,0xAF,
94584 -0x60,0x00,0xBE,0xAF,
94585 -0x5C,0x00,0xB7,0xAF,
94586 -0x58,0x00,0xB6,0xAF,
94587 -0x4C,0x00,0xB3,0xAF,
94588 -0x48,0x00,0xB2,0xAF,
94589 -0x44,0x00,0xB1,0xAF,
94590 -0x21,0x98,0xC0,0x00,
94591 -0xFF,0x00,0xB1,0x30,
94592 -0x54,0x00,0xB5,0xAF,
94593 -0xE6,0x56,0x00,0x0C,
94594 -0x40,0x00,0xB0,0xAF,
94595 -0x3E,0x57,0x00,0x0C,
94596 -0x01,0x00,0x16,0x24,
94597 -0x21,0x18,0x40,0x00,
94598 -0xFF,0x01,0x42,0x2C,
94599 -0x01,0x00,0x17,0x24,
94600 -0x01,0x00,0x1E,0x24,
94601 -0x21,0x90,0x00,0x00,
94602 -0x0E,0x00,0x40,0x14,
94603 -0x21,0x20,0x00,0x00,
94604 -0x64,0x00,0xBF,0x8F,
94605 -0x60,0x00,0xBE,0x8F,
94606 -0x5C,0x00,0xB7,0x8F,
94607 -0x58,0x00,0xB6,0x8F,
94608 -0x54,0x00,0xB5,0x8F,
94609 -0x50,0x00,0xB4,0x8F,
94610 -0x4C,0x00,0xB3,0x8F,
94611 -0x48,0x00,0xB2,0x8F,
94612 -0x44,0x00,0xB1,0x8F,
94613 -0x40,0x00,0xB0,0x8F,
94614 -0x21,0x10,0x80,0x00,
94615 -0x08,0x00,0xE0,0x03,
94616 -0x68,0x00,0xBD,0x27,
94617 -0xFF,0x01,0x02,0x24,
94618 -0x23,0x10,0x43,0x00,
94619 -0x1A,0x00,0xA4,0x27,
94620 -0xFF,0x00,0x05,0x24,
94621 -0x08,0x00,0x06,0x24,
94622 -0xFF,0xFF,0x50,0x30,
94623 -0x18,0x00,0xB4,0xA3,
94624 -0xFF,0x51,0x00,0x0C,
94625 -0x19,0x00,0xB1,0xA3,
94626 -0x21,0x20,0x20,0x02,
94627 -0x21,0x28,0x60,0x02,
94628 -0x24,0x57,0x00,0x0C,
94629 -0x1A,0x00,0xA6,0x27,
94630 -0x19,0x00,0xA4,0x93,
94631 -0x15,0x57,0x00,0x0C,
94632 -0x00,0x00,0x00,0x00,
94633 -0x21,0xA8,0x40,0x00,
94634 -0xFF,0xFF,0x42,0x30,
94635 -0x2B,0x10,0x02,0x02,
94636 -0xDF,0xFF,0x40,0x14,
94637 -0x21,0x20,0x00,0x00,
94638 -0x01,0x00,0x02,0x24,
94639 -0x09,0x00,0xC2,0x12,
94640 -0x20,0x00,0x02,0x24,
94641 -0x22,0x00,0xC2,0x12,
94642 -0x00,0x00,0x00,0x00,
94643 -0x3B,0x00,0xE0,0x12,
94644 -0x00,0x02,0x42,0x2E,
94645 -0x39,0x00,0x40,0x10,
94646 -0x01,0x00,0x02,0x24,
94647 -0xF9,0xFF,0xC2,0x16,
94648 -0x20,0x00,0x02,0x24,
94649 -0x21,0x20,0x40,0x02,
94650 -0x10,0x00,0xA5,0x27,
94651 -0x91,0x56,0x00,0x0C,
94652 -0x01,0x00,0x13,0x24,
94653 -0x41,0x00,0x40,0x10,
94654 -0xFF,0x00,0x02,0x24,
94655 -0x10,0x00,0xA5,0x93,
94656 -0x00,0x00,0x00,0x00,
94657 -0xFF,0x00,0xA4,0x30,
94658 -0x3C,0x00,0x82,0x10,
94659 -0x0F,0x00,0xA3,0x30,
94660 -0x02,0x11,0x04,0x00,
94661 -0x21,0x20,0x60,0x00,
94662 -0x29,0x00,0xA3,0xA3,
94663 -0x28,0x00,0xA2,0xA3,
94664 -0x15,0x57,0x00,0x0C,
94665 -0x11,0x00,0xA5,0xA3,
94666 -0x21,0x80,0x40,0x00,
94667 -0x28,0x00,0xA3,0x93,
94668 -0x18,0x00,0xA2,0x93,
94669 -0x00,0x00,0x00,0x00,
94670 -0x5F,0x00,0x62,0x10,
94671 -0x40,0x10,0x10,0x00,
94672 -0x21,0x10,0x52,0x00,
94673 -0x01,0x00,0x42,0x24,
94674 -0x8B,0x58,0x00,0x08,
94675 -0xFF,0xFF,0x52,0x30,
94676 -0x19,0x00,0xA5,0x93,
94677 -0x01,0x00,0x44,0x26,
94678 -0xFF,0xFF,0x84,0x30,
94679 -0xFC,0x57,0x00,0x0C,
94680 -0x1A,0x00,0xA6,0x27,
94681 -0x21,0x28,0x40,0x00,
94682 -0x0F,0x00,0x43,0x30,
94683 -0x0F,0x00,0x02,0x24,
94684 -0x12,0x00,0x62,0x10,
94685 -0x40,0x10,0x15,0x00,
94686 -0x21,0x10,0x52,0x00,
94687 -0x01,0x00,0x42,0x24,
94688 -0x21,0x20,0xA0,0x00,
94689 -0xFF,0xFF,0x52,0x30,
94690 -0x18,0x00,0xB4,0xA3,
94691 -0x15,0x57,0x00,0x0C,
94692 -0x19,0x00,0xA5,0xA3,
94693 -0x21,0xA8,0x40,0x00,
94694 -0x02,0x80,0x03,0x3C,
94695 -0x04,0xE4,0x62,0x8C,
94696 -0x02,0x80,0x04,0x3C,
94697 -0x01,0x00,0x16,0x24,
94698 -0x01,0x00,0x42,0x24,
94699 -0x04,0x00,0x43,0x28,
94700 -0xC6,0xFF,0x60,0x14,
94701 -0x04,0xE4,0x82,0xAC,
94702 -0x21,0xF0,0x00,0x00,
94703 -0xE6,0x56,0x00,0x0C,
94704 -0x21,0x20,0x00,0x00,
94705 -0x21,0x20,0xC0,0x03,
94706 -0x64,0x00,0xBF,0x8F,
94707 -0x60,0x00,0xBE,0x8F,
94708 -0x5C,0x00,0xB7,0x8F,
94709 -0x58,0x00,0xB6,0x8F,
94710 -0x54,0x00,0xB5,0x8F,
94711 -0x50,0x00,0xB4,0x8F,
94712 -0x4C,0x00,0xB3,0x8F,
94713 -0x48,0x00,0xB2,0x8F,
94714 -0x44,0x00,0xB1,0x8F,
94715 -0x40,0x00,0xB0,0x8F,
94716 -0x21,0x10,0x80,0x00,
94717 -0x08,0x00,0xE0,0x03,
94718 -0x68,0x00,0xBD,0x27,
94719 -0x3E,0x57,0x00,0x0C,
94720 -0x00,0x00,0x00,0x00,
94721 -0xFF,0x01,0x03,0x24,
94722 -0x23,0x18,0x62,0x00,
94723 -0xFF,0xFF,0x70,0x30,
94724 -0xFF,0xFF,0xA2,0x32,
94725 -0x2B,0x10,0x02,0x02,
94726 -0xE7,0xFF,0x40,0x14,
94727 -0x21,0x20,0x40,0x02,
94728 -0x18,0x00,0xB0,0x93,
94729 -0x19,0x00,0xA2,0x93,
94730 -0x00,0x81,0x10,0x00,
94731 -0x25,0x80,0x02,0x02,
94732 -0xFF,0x00,0x10,0x32,
94733 -0xBE,0x56,0x00,0x0C,
94734 -0x21,0x28,0x00,0x02,
94735 -0x21,0x20,0x40,0x02,
94736 -0x91,0x56,0x00,0x0C,
94737 -0x11,0x00,0xA5,0x27,
94738 -0x11,0x00,0xA3,0x93,
94739 -0x00,0x00,0x00,0x00,
94740 -0xFF,0x00,0x64,0x30,
94741 -0x9D,0xFF,0x90,0x10,
94742 -0x20,0x00,0x16,0x24,
94743 -0xFF,0x00,0x02,0x24,
94744 -0xCD,0xFF,0x82,0x10,
94745 -0x0F,0x00,0x63,0x30,
94746 -0x02,0x11,0x04,0x00,
94747 -0x21,0x20,0x60,0x00,
94748 -0x29,0x00,0xA3,0xA3,
94749 -0x15,0x57,0x00,0x0C,
94750 -0x28,0x00,0xA2,0xA3,
94751 -0x38,0x00,0xA4,0x27,
94752 -0xFF,0x00,0x05,0x24,
94753 -0x08,0x00,0x06,0x24,
94754 -0xFF,0x51,0x00,0x0C,
94755 -0x21,0x80,0x40,0x00,
94756 -0x28,0x00,0xA4,0x93,
94757 -0x61,0x57,0x00,0x0C,
94758 -0x38,0x00,0xA5,0x27,
94759 -0x1F,0x00,0x40,0x14,
94760 -0x01,0x00,0x44,0x26,
94761 -0x40,0x10,0x10,0x00,
94762 -0x21,0x10,0x52,0x00,
94763 -0x01,0x00,0x42,0x24,
94764 -0xBE,0x58,0x00,0x08,
94765 -0xFF,0xFF,0x52,0x30,
94766 -0x40,0x88,0x10,0x00,
94767 -0x27,0x00,0x20,0x1A,
94768 -0x21,0x80,0x00,0x00,
94769 -0xFF,0x00,0x16,0x24,
94770 -0x21,0x20,0x50,0x02,
94771 -0x01,0x00,0x84,0x24,
94772 -0xFF,0xFF,0x84,0x30,
94773 -0x91,0x56,0x00,0x0C,
94774 -0x10,0x00,0xA5,0x27,
94775 -0x01,0x00,0x03,0x26,
94776 -0xFF,0x00,0x70,0x30,
94777 -0x05,0x00,0x40,0x10,
94778 -0x2A,0x18,0x11,0x02,
94779 -0x10,0x00,0xA2,0x93,
94780 -0x00,0x00,0x00,0x00,
94781 -0x26,0x10,0x56,0x00,
94782 -0x0B,0x98,0x02,0x00,
94783 -0xF3,0xFF,0x60,0x14,
94784 -0x21,0x20,0x50,0x02,
94785 -0x15,0x00,0x60,0x16,
94786 -0x21,0x10,0x32,0x02,
94787 -0x01,0x00,0x42,0x24,
94788 -0xFF,0xFF,0x52,0x30,
94789 -0x8B,0x58,0x00,0x08,
94790 -0x01,0x00,0x16,0x24,
94791 -0x29,0x00,0xA5,0x93,
94792 -0xFF,0xFF,0x84,0x30,
94793 -0xFC,0x57,0x00,0x0C,
94794 -0x38,0x00,0xA6,0x27,
94795 -0x21,0x28,0x40,0x00,
94796 -0x0F,0x00,0x43,0x30,
94797 -0x0F,0x00,0x02,0x24,
94798 -0xDB,0xFF,0x62,0x10,
94799 -0x40,0x10,0x10,0x00,
94800 -0x28,0x00,0xA4,0x93,
94801 -0x4B,0x58,0x00,0x0C,
94802 -0x38,0x00,0xA6,0x27,
94803 -0x3E,0x57,0x00,0x0C,
94804 -0x00,0x00,0x00,0x00,
94805 -0xBE,0x58,0x00,0x08,
94806 -0x21,0x90,0x40,0x00,
94807 -0x19,0x00,0xA3,0x93,
94808 -0x29,0x00,0xA6,0x93,
94809 -0x0F,0x00,0x13,0x24,
94810 -0x0E,0x00,0x10,0x24,
94811 -0x25,0x18,0x66,0x00,
94812 -0x01,0x00,0x62,0x30,
94813 -0x0A,0x98,0x02,0x02,
94814 -0x02,0x00,0x64,0x30,
94815 -0xFD,0x00,0x62,0x32,
94816 -0x0A,0x98,0x44,0x00,
94817 -0x04,0x00,0x65,0x30,
94818 -0xFB,0x00,0x62,0x32,
94819 -0x0A,0x98,0x45,0x00,
94820 -0x08,0x00,0x63,0x30,
94821 -0xF7,0x00,0x62,0x32,
94822 -0x0A,0x98,0x43,0x00,
94823 -0x0F,0x00,0x64,0x32,
94824 -0x0F,0x00,0x16,0x24,
94825 -0x25,0x00,0x96,0x10,
94826 -0x21,0x28,0xC0,0x00,
94827 -0x01,0x00,0x44,0x26,
94828 -0xFF,0xFF,0x84,0x30,
94829 -0xFC,0x57,0x00,0x0C,
94830 -0x1A,0x00,0xA6,0x27,
94831 -0x21,0x28,0x40,0x00,
94832 -0x0F,0x00,0x42,0x30,
94833 -0x03,0x00,0x56,0x10,
94834 -0x21,0x20,0x80,0x02,
94835 -0x4B,0x58,0x00,0x0C,
94836 -0x38,0x00,0xA6,0x27,
94837 -0x19,0x00,0xA5,0x93,
94838 -0x00,0x00,0x00,0x00,
94839 -0x26,0x10,0x65,0x02,
94840 -0x01,0x00,0x42,0x30,
94841 -0x0A,0x80,0xC2,0x02,
94842 -0x26,0x18,0x65,0x02,
94843 -0x02,0x00,0x63,0x30,
94844 -0xFD,0x00,0x04,0x32,
94845 -0x0B,0x80,0x83,0x00,
94846 -0x26,0x10,0x65,0x02,
94847 -0x04,0x00,0x42,0x30,
94848 -0xFB,0x00,0x03,0x32,
94849 -0x0B,0x80,0x62,0x00,
94850 -0x26,0x28,0x65,0x02,
94851 -0x08,0x00,0xA5,0x30,
94852 -0xF7,0x00,0x02,0x32,
94853 -0x0B,0x80,0x45,0x00,
94854 -0x0F,0x00,0x03,0x32,
94855 -0x0D,0x00,0x76,0x10,
94856 -0x00,0x00,0x00,0x00,
94857 -0x3E,0x57,0x00,0x0C,
94858 -0x00,0x00,0x00,0x00,
94859 -0x21,0x90,0x40,0x00,
94860 -0x19,0x00,0xB0,0xA3,
94861 -0xBE,0x58,0x00,0x08,
94862 -0x18,0x00,0xB4,0xA3,
94863 -0x21,0x10,0x32,0x02,
94864 -0x01,0x00,0x42,0x24,
94865 -0xFF,0xFF,0x52,0x30,
94866 -0x01,0x00,0x16,0x24,
94867 -0x8B,0x58,0x00,0x08,
94868 -0x18,0x00,0xB4,0xA3,
94869 -0xBE,0x58,0x00,0x08,
94870 -0x21,0xB8,0x00,0x00,
94871 -0x01,0x80,0x02,0x3C,
94872 -0x25,0xB0,0x03,0x3C,
94873 -0xBC,0x65,0x42,0x24,
94874 -0x18,0x03,0x63,0x34,
94875 -0x00,0x00,0x62,0xAC,
94876 -0x00,0x00,0x83,0x90,
94877 -0x30,0x00,0x02,0x24,
94878 -0x05,0x00,0x62,0x10,
94879 -0x21,0x20,0x00,0x00,
94880 -0x31,0x00,0x02,0x24,
94881 -0x02,0x00,0x62,0x10,
94882 -0x01,0x00,0x04,0x24,
94883 -0x07,0x00,0x04,0x24,
94884 -0x93,0x55,0x00,0x08,
94885 -0x00,0x00,0x00,0x00,
94886 -0x01,0x80,0x02,0x3C,
94887 -0x25,0xB0,0x03,0x3C,
94888 -0xF8,0x65,0x42,0x24,
94889 -0x18,0x03,0x63,0x34,
94890 -0x02,0x80,0x04,0x3C,
94891 -0x00,0x00,0x62,0xAC,
94892 -0x08,0x00,0xE0,0x03,
94893 -0x14,0x5E,0x80,0xAC,
94894 -0x42,0xB0,0x02,0x3C,
94895 -0x03,0x00,0x47,0x34,
94896 -0x00,0x00,0xE3,0x90,
94897 -0xFF,0x00,0x84,0x30,
94898 -0x04,0x00,0x84,0x24,
94899 -0xFF,0x00,0x65,0x30,
94900 -0x01,0x00,0x02,0x24,
94901 -0x04,0x30,0x82,0x00,
94902 -0x07,0x18,0x85,0x00,
94903 -0x25,0xB0,0x02,0x3C,
94904 -0xE8,0x03,0x42,0x34,
94905 -0x01,0x00,0x63,0x30,
94906 -0x21,0x20,0xC0,0x00,
94907 -0x00,0x00,0x45,0xA0,
94908 -0x02,0x00,0x60,0x10,
94909 -0x00,0x00,0x00,0x00,
94910 -0x00,0x00,0xE6,0xA0,
94911 -0x08,0x00,0xE0,0x03,
94912 -0x24,0x10,0x85,0x00,
94913 -0x00,0x60,0x03,0x40,
94914 -0x01,0x00,0x61,0x34,
94915 -0x01,0x00,0x21,0x38,
94916 -0x00,0x60,0x81,0x40,
94917 -0x02,0x80,0x02,0x3C,
94918 -0x08,0xE4,0x42,0x24,
94919 -0x04,0x00,0x45,0x8C,
94920 -0x00,0x00,0x82,0xAC,
94921 -0x04,0x00,0x44,0xAC,
94922 -0x00,0x00,0xA4,0xAC,
94923 -0x04,0x00,0x85,0xAC,
94924 -0x00,0x60,0x83,0x40,
94925 -0x08,0x00,0xE0,0x03,
94926 -0x00,0x00,0x00,0x00,
94927 -0x00,0x60,0x03,0x40,
94928 -0x01,0x00,0x61,0x34,
94929 -0x01,0x00,0x21,0x38,
94930 -0x00,0x60,0x81,0x40,
94931 -0x04,0x00,0x85,0x8C,
94932 -0x00,0x00,0x82,0x8C,
94933 -0x00,0x00,0x00,0x00,
94934 -0x00,0x00,0xA2,0xAC,
94935 -0x04,0x00,0x45,0xAC,
94936 -0x00,0x00,0x84,0xAC,
94937 -0x04,0x00,0x84,0xAC,
94938 -0x00,0x60,0x83,0x40,
94939 -0x08,0x00,0xE0,0x03,
94940 -0x00,0x00,0x00,0x00,
94941 -0x00,0x00,0x85,0xAC,
94942 -0x21,0x10,0x00,0x00,
94943 -0x01,0x00,0x42,0x24,
94944 -0xFF,0x00,0x42,0x30,
94945 -0x06,0x00,0x43,0x2C,
94946 -0xFC,0xFF,0x60,0x14,
94947 -0x00,0x00,0x00,0x00,
94948 -0x08,0x00,0xE0,0x03,
94949 -0x00,0x00,0x00,0x00,
94950 -0x02,0x24,0x04,0x00,
94951 -0xFF,0x00,0x84,0x30,
94952 -0xC0,0x18,0x04,0x00,
94953 -0x21,0x18,0x64,0x00,
94954 -0x80,0x18,0x03,0x00,
94955 -0x21,0x18,0x64,0x00,
94956 -0x02,0x80,0x02,0x3C,
94957 -0x30,0x1F,0x42,0x24,
94958 -0x80,0x18,0x03,0x00,
94959 -0x21,0x18,0x62,0x00,
94960 -0x1C,0x24,0x64,0x8C,
94961 -0xFF,0xF1,0x02,0x24,
94962 -0x24,0x20,0x82,0x00,
94963 -0x08,0x00,0xE0,0x03,
94964 -0x1C,0x24,0x64,0xAC,
94965 -0x02,0x24,0x04,0x00,
94966 -0xFF,0x00,0x84,0x30,
94967 -0xC0,0x18,0x04,0x00,
94968 -0x21,0x18,0x64,0x00,
94969 -0x80,0x18,0x03,0x00,
94970 -0x21,0x18,0x64,0x00,
94971 -0x02,0x80,0x02,0x3C,
94972 -0x30,0x1F,0x42,0x24,
94973 -0x80,0x18,0x03,0x00,
94974 -0x21,0x18,0x62,0x00,
94975 -0x1C,0x24,0x64,0x8C,
94976 -0xFF,0xF1,0x02,0x24,
94977 -0x24,0x20,0x82,0x00,
94978 -0x00,0x02,0x84,0x34,
94979 -0x08,0x00,0xE0,0x03,
94980 -0x1C,0x24,0x64,0xAC,
94981 -0xE0,0xFF,0xBD,0x27,
94982 -0x10,0x00,0xB0,0xAF,
94983 -0xC0,0x80,0x04,0x00,
94984 -0x21,0x80,0x04,0x02,
94985 -0x80,0x80,0x10,0x00,
94986 -0x21,0x80,0x04,0x02,
94987 -0x02,0x80,0x02,0x3C,
94988 -0x30,0x1F,0x42,0x24,
94989 -0x80,0x80,0x10,0x00,
94990 -0x21,0x80,0x02,0x02,
94991 -0x1C,0x00,0xBF,0xAF,
94992 -0x18,0x00,0xB2,0xAF,
94993 -0x14,0x00,0xB1,0xAF,
94994 -0x1C,0x24,0x05,0x8E,
94995 -0xFF,0x1F,0x02,0x3C,
94996 -0x25,0xB0,0x12,0x3C,
94997 -0xFF,0xFF,0x42,0x34,
94998 -0x14,0x24,0x02,0xAE,
94999 -0x84,0x01,0x43,0x36,
95000 -0xF8,0xFF,0x02,0x24,
95001 -0x00,0x00,0x66,0x8C,
95002 -0x24,0x28,0xA2,0x00,
95003 -0xFF,0xFE,0x02,0x24,
95004 -0x24,0x28,0xA2,0x00,
95005 -0xFF,0xEF,0x03,0x24,
95006 -0x24,0x28,0xA3,0x00,
95007 -0x18,0x24,0x06,0xAE,
95008 -0x1C,0x24,0x05,0xAE,
95009 -0xC9,0x24,0x00,0x0C,
95010 -0x21,0x88,0x80,0x00,
95011 -0x1E,0x24,0x02,0x92,
95012 -0x21,0x88,0x32,0x02,
95013 -0x1C,0x00,0xBF,0x8F,
95014 -0x60,0x01,0x22,0xA2,
95015 -0x18,0x00,0xB2,0x8F,
95016 -0x08,0x24,0x00,0xAE,
95017 -0xEC,0x23,0x00,0xAE,
95018 -0xF0,0x23,0x00,0xAE,
95019 -0xF4,0x23,0x00,0xAE,
95020 -0xF8,0x23,0x00,0xAE,
95021 -0xFC,0x23,0x00,0xAE,
95022 -0x00,0x24,0x00,0xAE,
95023 -0x04,0x24,0x00,0xAE,
95024 -0x14,0x00,0xB1,0x8F,
95025 -0x10,0x00,0xB0,0x8F,
95026 -0x08,0x00,0xE0,0x03,
95027 -0x20,0x00,0xBD,0x27,
95028 -0xFF,0x00,0xA5,0x30,
95029 -0xC0,0x10,0x05,0x00,
95030 -0x21,0x10,0x45,0x00,
95031 -0x80,0x10,0x02,0x00,
95032 -0x21,0x10,0x45,0x00,
95033 -0x02,0x80,0x03,0x3C,
95034 -0x30,0x1F,0x63,0x24,
95035 -0x80,0x10,0x02,0x00,
95036 -0x21,0x10,0x43,0x00,
95037 -0x1C,0x24,0x43,0x8C,
95038 -0x25,0xB0,0x05,0x3C,
95039 -0xFF,0x00,0xC6,0x30,
95040 -0x21,0x30,0xC5,0x00,
95041 -0xAF,0x01,0xC2,0x90,
95042 -0x07,0x00,0x63,0x30,
95043 -0x80,0x18,0x03,0x00,
95044 -0x21,0x18,0x65,0x00,
95045 -0xFF,0x00,0x88,0x30,
95046 -0xFF,0x00,0x49,0x30,
95047 -0x84,0x01,0x66,0x8C,
95048 -0x21,0x50,0x00,0x00,
95049 -0x21,0x58,0x00,0x00,
95050 -0x2B,0x00,0x20,0x11,
95051 -0x21,0x20,0x00,0x01,
95052 -0x2B,0x00,0xC0,0x10,
95053 -0x2B,0x10,0x09,0x01,
95054 -0x21,0x28,0x00,0x00,
95055 -0x2D,0x5A,0x00,0x08,
95056 -0x01,0x00,0x07,0x24,
95057 -0xFF,0x00,0x65,0x30,
95058 -0x1D,0x00,0xA2,0x2C,
95059 -0x07,0x00,0x40,0x10,
95060 -0xFF,0xFF,0x02,0x25,
95061 -0x04,0x10,0xA7,0x00,
95062 -0x24,0x10,0x46,0x00,
95063 -0xF9,0xFF,0x40,0x10,
95064 -0x01,0x00,0xA3,0x24,
95065 -0x21,0x58,0xA0,0x00,
95066 -0xFF,0xFF,0x02,0x25,
95067 -0xFF,0x00,0x45,0x30,
95068 -0x2B,0x18,0xAB,0x00,
95069 -0x0F,0x00,0x60,0x14,
95070 -0x2B,0x10,0x49,0x01,
95071 -0x01,0x00,0x04,0x24,
95072 -0x04,0x10,0xA4,0x00,
95073 -0x24,0x10,0x46,0x00,
95074 -0xFF,0xFF,0xA7,0x24,
95075 -0x04,0x00,0x40,0x10,
95076 -0x01,0x00,0x43,0x25,
95077 -0x17,0x00,0x49,0x11,
95078 -0xFF,0x00,0x6A,0x30,
95079 -0x21,0x40,0xA0,0x00,
95080 -0xFF,0x00,0xE5,0x30,
95081 -0x2B,0x10,0xAB,0x00,
95082 -0xF6,0xFF,0x40,0x10,
95083 -0x04,0x10,0xA4,0x00,
95084 -0x2B,0x10,0x49,0x01,
95085 -0x08,0x00,0x40,0x10,
95086 -0x21,0x20,0x00,0x01,
95087 -0x23,0x10,0x2A,0x01,
95088 -0x2A,0x10,0x62,0x01,
95089 -0x04,0x00,0x40,0x14,
95090 -0x21,0x20,0x00,0x00,
95091 -0x23,0x10,0x69,0x01,
95092 -0x21,0x10,0x4A,0x00,
95093 -0xFF,0x00,0x44,0x30,
95094 -0x08,0x00,0xE0,0x03,
95095 -0x21,0x10,0x80,0x00,
95096 -0xFD,0xFF,0x40,0x14,
95097 -0x21,0x20,0x00,0x00,
95098 -0x23,0x10,0x09,0x01,
95099 -0x4E,0x5A,0x00,0x08,
95100 -0xFF,0x00,0x44,0x30,
95101 -0x21,0x20,0x00,0x01,
95102 -0x08,0x00,0xE0,0x03,
95103 -0x21,0x10,0x80,0x00,
95104 -0xFF,0x00,0x84,0x30,
95105 -0xC0,0x10,0x04,0x00,
95106 -0x21,0x10,0x44,0x00,
95107 -0x80,0x10,0x02,0x00,
95108 -0x21,0x10,0x44,0x00,
95109 -0x02,0x80,0x03,0x3C,
95110 -0x30,0x1F,0x63,0x24,
95111 -0x80,0x10,0x02,0x00,
95112 -0x21,0x10,0x43,0x00,
95113 -0x25,0xB0,0x06,0x3C,
95114 -0x1C,0x24,0x43,0x8C,
95115 -0xFF,0x00,0xA5,0x30,
95116 -0x21,0x20,0x86,0x00,
95117 -0x21,0x28,0xA6,0x00,
95118 -0x60,0x01,0x82,0x90,
95119 -0xAF,0x01,0xA4,0x90,
95120 -0x07,0x00,0x63,0x30,
95121 -0x80,0x18,0x03,0x00,
95122 -0x21,0x18,0x66,0x00,
95123 -0xFF,0x00,0x48,0x30,
95124 -0xFF,0x00,0x89,0x30,
95125 -0x84,0x01,0x66,0x8C,
95126 -0x21,0x50,0x00,0x00,
95127 -0x21,0x58,0x00,0x00,
95128 -0x2B,0x00,0x20,0x11,
95129 -0x21,0x20,0x00,0x01,
95130 -0x2B,0x00,0xC0,0x10,
95131 -0x2B,0x10,0x09,0x01,
95132 -0x21,0x28,0x00,0x00,
95133 -0x7B,0x5A,0x00,0x08,
95134 -0x01,0x00,0x07,0x24,
95135 -0xFF,0x00,0x65,0x30,
95136 -0x1D,0x00,0xA2,0x2C,
95137 -0x07,0x00,0x40,0x10,
95138 -0xFF,0xFF,0x02,0x25,
95139 -0x04,0x10,0xA7,0x00,
95140 -0x24,0x10,0x46,0x00,
95141 -0xF9,0xFF,0x40,0x10,
95142 -0x01,0x00,0xA3,0x24,
95143 -0x21,0x58,0xA0,0x00,
95144 -0xFF,0xFF,0x02,0x25,
95145 -0xFF,0x00,0x45,0x30,
95146 -0x2B,0x18,0xAB,0x00,
95147 -0x0F,0x00,0x60,0x14,
95148 -0x2B,0x10,0x49,0x01,
95149 -0x01,0x00,0x04,0x24,
95150 -0x04,0x10,0xA4,0x00,
95151 -0x24,0x10,0x46,0x00,
95152 -0xFF,0xFF,0xA7,0x24,
95153 -0x04,0x00,0x40,0x10,
95154 -0x01,0x00,0x43,0x25,
95155 -0x17,0x00,0x49,0x11,
95156 -0xFF,0x00,0x6A,0x30,
95157 -0x21,0x40,0xA0,0x00,
95158 -0xFF,0x00,0xE5,0x30,
95159 -0x2B,0x10,0xAB,0x00,
95160 -0xF6,0xFF,0x40,0x10,
95161 -0x04,0x10,0xA4,0x00,
95162 -0x2B,0x10,0x49,0x01,
95163 -0x08,0x00,0x40,0x10,
95164 -0x21,0x20,0x00,0x01,
95165 -0x23,0x10,0x2A,0x01,
95166 -0x2A,0x10,0x62,0x01,
95167 -0x04,0x00,0x40,0x14,
95168 -0x21,0x20,0x00,0x00,
95169 -0x23,0x10,0x69,0x01,
95170 -0x21,0x10,0x4A,0x00,
95171 -0xFF,0x00,0x44,0x30,
95172 -0x08,0x00,0xE0,0x03,
95173 -0x21,0x10,0x80,0x00,
95174 -0xFD,0xFF,0x40,0x14,
95175 -0x21,0x20,0x00,0x00,
95176 -0x23,0x10,0x09,0x01,
95177 -0x9C,0x5A,0x00,0x08,
95178 -0xFF,0x00,0x44,0x30,
95179 -0x21,0x20,0x00,0x01,
95180 -0x08,0x00,0xE0,0x03,
95181 -0x21,0x10,0x80,0x00,
95182 -0xE0,0xFF,0xBD,0x27,
95183 -0x02,0x80,0x02,0x3C,
95184 -0x10,0x00,0xB0,0xAF,
95185 -0x30,0x1F,0x50,0x24,
95186 -0x18,0x00,0xB2,0xAF,
95187 -0x14,0x00,0xB1,0xAF,
95188 -0x1C,0x00,0xBF,0xAF,
95189 -0x21,0x88,0x00,0x00,
95190 -0x21,0x90,0x00,0x02,
95191 -0xDD,0x59,0x00,0x0C,
95192 -0x21,0x20,0x20,0x02,
95193 -0x1E,0x24,0x02,0x92,
95194 -0x21,0x28,0x00,0x00,
95195 -0x80,0x10,0x02,0x00,
95196 -0x21,0x10,0x52,0x00,
95197 -0x60,0x05,0x44,0x8C,
95198 -0xD4,0x05,0x43,0x8C,
95199 -0x00,0x00,0x00,0x00,
95200 -0x21,0x18,0x64,0x00,
95201 -0x42,0x18,0x03,0x00,
95202 -0xE8,0x23,0x03,0xAE,
95203 -0x21,0x10,0x05,0x02,
95204 -0x01,0x00,0xA5,0x24,
95205 -0x1D,0x00,0xA3,0x28,
95206 -0x5A,0x24,0x40,0xA0,
95207 -0x20,0x24,0x40,0xA0,
95208 -0xFA,0xFF,0x60,0x14,
95209 -0x3D,0x24,0x40,0xA0,
95210 -0x01,0x00,0x31,0x26,
95211 -0x20,0x00,0x22,0x2A,
95212 -0x78,0x24,0x00,0xAE,
95213 -0xE9,0xFF,0x40,0x14,
95214 -0x94,0x00,0x10,0x26,
95215 -0x1C,0x00,0xBF,0x8F,
95216 -0x18,0x00,0xB2,0x8F,
95217 -0x14,0x00,0xB1,0x8F,
95218 -0x10,0x00,0xB0,0x8F,
95219 -0x08,0x00,0xE0,0x03,
95220 -0x20,0x00,0xBD,0x27,
95221 -0xD0,0xFF,0xBD,0x27,
95222 -0x28,0x00,0xB6,0xAF,
95223 -0x02,0x80,0x16,0x3C,
95224 -0x24,0x00,0xB5,0xAF,
95225 -0x30,0x1F,0xC6,0x26,
95226 -0x2C,0x00,0xBF,0xAF,
95227 -0x20,0x00,0xB4,0xAF,
95228 -0x1C,0x00,0xB3,0xAF,
95229 -0x18,0x00,0xB2,0xAF,
95230 -0x14,0x00,0xB1,0xAF,
95231 -0x10,0x00,0xB0,0xAF,
95232 -0x30,0x38,0xC2,0x8C,
95233 -0xFF,0x00,0x8D,0x30,
95234 -0xFF,0x00,0x03,0x24,
95235 -0xFF,0xFF,0x42,0x38,
95236 -0x21,0xA8,0x00,0x00,
95237 -0xFF,0xFF,0x04,0x34,
95238 -0x0A,0xA8,0x62,0x00,
95239 -0xA4,0x00,0xA0,0x11,
95240 -0x30,0x38,0xC4,0xAC,
95241 -0x02,0x80,0x02,0x3C,
95242 -0xE4,0xE7,0x45,0x24,
95243 -0x04,0x05,0xC4,0x24,
95244 -0xEB,0x5A,0x00,0x08,
95245 -0x21,0x80,0x00,0x00,
95246 -0x01,0x00,0x10,0x26,
95247 -0x00,0x00,0x82,0xA0,
95248 -0x1D,0x00,0x02,0x2A,
95249 -0x0B,0x00,0x40,0x10,
95250 -0x01,0x00,0x84,0x24,
95251 -0x21,0x10,0x05,0x02,
95252 -0x00,0x00,0x42,0x90,
95253 -0x00,0x00,0x00,0x00,
95254 -0xF7,0xFF,0x40,0x10,
95255 -0xFD,0xFF,0x43,0x24,
95256 -0x01,0x00,0x10,0x26,
95257 -0x1D,0x00,0x02,0x2A,
95258 -0x00,0x00,0x83,0xA0,
95259 -0xF7,0xFF,0x40,0x14,
95260 -0x01,0x00,0x84,0x24,
95261 -0x02,0x80,0x02,0x3C,
95262 -0x30,0x1F,0x4A,0x24,
95263 -0x02,0x80,0x03,0x3C,
95264 -0x02,0x80,0x02,0x3C,
95265 -0x7C,0xE5,0x6C,0x24,
95266 -0x04,0xE5,0x4B,0x24,
95267 -0x21,0x80,0x00,0x00,
95268 -0x21,0x48,0x00,0x00,
95269 -0x21,0x30,0x00,0x00,
95270 -0x21,0x40,0x2A,0x01,
95271 -0x21,0x38,0x2C,0x01,
95272 -0x21,0x10,0xE6,0x00,
95273 -0x91,0x00,0x44,0x90,
95274 -0x00,0x00,0x45,0x90,
95275 -0x21,0x18,0x06,0x01,
95276 -0x01,0x00,0xC6,0x24,
95277 -0x05,0x00,0xC2,0x28,
95278 -0x39,0x04,0x64,0xA0,
95279 -0xF8,0xFF,0x40,0x14,
95280 -0xA8,0x03,0x65,0xA0,
95281 -0x21,0x10,0x0B,0x02,
95282 -0x1D,0x00,0x44,0x90,
95283 -0x00,0x00,0x45,0x90,
95284 -0x21,0x18,0x0A,0x02,
95285 -0x01,0x00,0x10,0x26,
95286 -0x1D,0x00,0x02,0x2A,
95287 -0xE7,0x04,0x64,0xA0,
95288 -0xCA,0x04,0x65,0xA0,
95289 -0xEB,0xFF,0x40,0x14,
95290 -0x05,0x00,0x29,0x25,
95291 -0x9A,0x00,0xA0,0x11,
95292 -0x02,0x80,0x02,0x3C,
95293 -0x30,0x1F,0x48,0x24,
95294 -0x02,0x80,0x03,0x3C,
95295 -0x02,0x80,0x02,0x3C,
95296 -0x78,0xE8,0x69,0x24,
95297 -0x04,0xE8,0x47,0x24,
95298 -0x21,0x80,0x00,0x00,
95299 -0x80,0x18,0x10,0x00,
95300 -0x21,0x10,0x69,0x00,
95301 -0x21,0x20,0x67,0x00,
95302 -0x00,0x00,0x46,0x8C,
95303 -0x00,0x00,0x85,0x8C,
95304 -0x01,0x00,0x10,0x26,
95305 -0x21,0x18,0x68,0x00,
95306 -0x04,0x00,0x02,0x2A,
95307 -0x60,0x05,0x65,0xAC,
95308 -0xF6,0xFF,0x40,0x14,
95309 -0xD4,0x05,0x66,0xAC,
95310 -0x02,0x80,0x02,0x3C,
95311 -0x30,0x1F,0x49,0x24,
95312 -0x02,0x80,0x03,0x3C,
95313 -0x02,0x80,0x02,0x3C,
95314 -0x78,0xE8,0x68,0x24,
95315 -0x04,0xE8,0x47,0x24,
95316 -0x04,0x00,0x10,0x24,
95317 -0x80,0x20,0x10,0x00,
95318 -0x21,0x10,0x88,0x00,
95319 -0x21,0x30,0x87,0x00,
95320 -0x00,0x00,0x45,0x8C,
95321 -0x00,0x00,0xC3,0x8C,
95322 -0x01,0x00,0x10,0x26,
95323 -0x21,0x20,0x89,0x00,
95324 -0x82,0x28,0x05,0x00,
95325 -0x82,0x18,0x03,0x00,
95326 -0x1D,0x00,0x02,0x2A,
95327 -0x60,0x05,0x83,0xAC,
95328 -0xF4,0xFF,0x40,0x14,
95329 -0xD4,0x05,0x85,0xAC,
95330 -0x02,0x80,0x02,0x3C,
95331 -0x30,0x1F,0x53,0x24,
95332 -0x21,0x80,0x00,0x00,
95333 -0x21,0xA0,0x60,0x02,
95334 -0x21,0x90,0x00,0x00,
95335 -0x46,0x5B,0x00,0x08,
95336 -0x21,0x88,0x60,0x02,
95337 -0x01,0x00,0x10,0x26,
95338 -0x20,0x00,0x02,0x2A,
95339 -0x94,0x00,0x31,0x26,
95340 -0x32,0x00,0x40,0x10,
95341 -0x94,0x00,0x52,0x26,
95342 -0x1C,0x24,0x24,0x8E,
95343 -0x01,0x00,0x03,0x24,
95344 -0x02,0x13,0x04,0x00,
95345 -0x01,0x00,0x42,0x30,
95346 -0xF6,0xFF,0x43,0x14,
95347 -0x07,0x00,0x82,0x30,
95348 -0x25,0xB0,0x03,0x3C,
95349 -0x80,0x10,0x02,0x00,
95350 -0x21,0x10,0x43,0x00,
95351 -0x84,0x01,0x45,0x8C,
95352 -0x14,0x24,0x23,0x8E,
95353 -0x21,0x20,0x00,0x02,
95354 -0x24,0x28,0xA3,0x00,
95355 -0xC9,0x24,0x00,0x0C,
95356 -0x18,0x24,0x25,0xAE,
95357 -0x1E,0x24,0x24,0x92,
95358 -0x57,0x24,0x00,0x0C,
95359 -0xFF,0x00,0x05,0x32,
95360 -0x1E,0x24,0x23,0x92,
95361 -0xEC,0x23,0x20,0xAE,
95362 -0xF0,0x23,0x20,0xAE,
95363 -0x80,0x18,0x03,0x00,
95364 -0xF4,0x23,0x20,0xAE,
95365 -0xF8,0x23,0x20,0xAE,
95366 -0xFC,0x23,0x20,0xAE,
95367 -0x00,0x24,0x20,0xAE,
95368 -0x04,0x24,0x20,0xAE,
95369 -0x08,0x24,0x20,0xAE,
95370 -0x21,0x18,0x74,0x00,
95371 -0x60,0x05,0x64,0x8C,
95372 -0xD4,0x05,0x62,0x8C,
95373 -0x21,0x30,0x00,0x00,
95374 -0x21,0x28,0x53,0x02,
95375 -0x21,0x10,0x44,0x00,
95376 -0x42,0x10,0x02,0x00,
95377 -0xE8,0x23,0x22,0xAE,
95378 -0x21,0x10,0xA6,0x00,
95379 -0x01,0x00,0xC6,0x24,
95380 -0x1D,0x00,0xC3,0x28,
95381 -0x5A,0x24,0x40,0xA0,
95382 -0x20,0x24,0x40,0xA0,
95383 -0xFA,0xFF,0x60,0x14,
95384 -0x3D,0x24,0x40,0xA0,
95385 -0x01,0x00,0x10,0x26,
95386 -0x20,0x00,0x02,0x2A,
95387 -0x78,0x24,0xA0,0xAC,
95388 -0x94,0x00,0x31,0x26,
95389 -0xD0,0xFF,0x40,0x14,
95390 -0x94,0x00,0x52,0x26,
95391 -0x02,0x00,0xA0,0x16,
95392 -0x30,0x1F,0xC2,0x26,
95393 -0x30,0x38,0x40,0xAC,
95394 -0x2C,0x00,0xBF,0x8F,
95395 -0x28,0x00,0xB6,0x8F,
95396 -0x24,0x00,0xB5,0x8F,
95397 -0x20,0x00,0xB4,0x8F,
95398 -0x1C,0x00,0xB3,0x8F,
95399 -0x18,0x00,0xB2,0x8F,
95400 -0x14,0x00,0xB1,0x8F,
95401 -0x10,0x00,0xB0,0x8F,
95402 -0x08,0x00,0xE0,0x03,
95403 -0x30,0x00,0xBD,0x27,
95404 -0x02,0x80,0x02,0x3C,
95405 -0xE4,0xE7,0x45,0x24,
95406 -0x04,0x05,0xC4,0x24,
95407 -0x21,0x80,0x00,0x00,
95408 -0x21,0x10,0x05,0x02,
95409 -0x00,0x00,0x43,0x90,
95410 -0x01,0x00,0x10,0x26,
95411 -0x1D,0x00,0x02,0x2A,
95412 -0x00,0x00,0x83,0xA0,
95413 -0xFA,0xFF,0x40,0x14,
95414 -0x01,0x00,0x84,0x24,
95415 -0x02,0x80,0x02,0x3C,
95416 -0x30,0x1F,0x4A,0x24,
95417 -0x02,0x80,0x03,0x3C,
95418 -0x02,0x80,0x02,0x3C,
95419 -0xA0,0xE6,0x6C,0x24,
95420 -0x40,0xE5,0x4B,0x24,
95421 -0x21,0x80,0x00,0x00,
95422 -0x21,0x48,0x00,0x00,
95423 -0x21,0x30,0x00,0x00,
95424 -0x21,0x40,0x2A,0x01,
95425 -0x21,0x38,0x2C,0x01,
95426 -0x21,0x10,0xE6,0x00,
95427 -0x91,0x00,0x44,0x90,
95428 -0x00,0x00,0x45,0x90,
95429 -0x21,0x18,0x06,0x01,
95430 -0x01,0x00,0xC6,0x24,
95431 -0x05,0x00,0xC2,0x28,
95432 -0x39,0x04,0x64,0xA0,
95433 -0xF8,0xFF,0x40,0x14,
95434 -0xA8,0x03,0x65,0xA0,
95435 -0x21,0x10,0x0B,0x02,
95436 -0x1D,0x00,0x44,0x90,
95437 -0x00,0x00,0x45,0x90,
95438 -0x21,0x18,0x0A,0x02,
95439 -0x01,0x00,0x10,0x26,
95440 -0x1D,0x00,0x02,0x2A,
95441 -0xE7,0x04,0x64,0xA0,
95442 -0xCA,0x04,0x65,0xA0,
95443 -0xEB,0xFF,0x40,0x14,
95444 -0x05,0x00,0x29,0x25,
95445 -0x02,0x80,0x02,0x3C,
95446 -0x30,0x1F,0x49,0x24,
95447 -0x02,0x80,0x03,0x3C,
95448 -0x02,0x80,0x02,0x3C,
95449 -0x78,0xE8,0x68,0x24,
95450 -0x04,0xE8,0x47,0x24,
95451 -0x21,0x80,0x00,0x00,
95452 -0x80,0x18,0x10,0x00,
95453 -0x21,0x10,0x68,0x00,
95454 -0x21,0x20,0x67,0x00,
95455 -0x00,0x00,0x46,0x8C,
95456 -0x00,0x00,0x85,0x8C,
95457 -0x01,0x00,0x10,0x26,
95458 -0x21,0x18,0x69,0x00,
95459 -0x1D,0x00,0x02,0x2A,
95460 -0x60,0x05,0x65,0xAC,
95461 -0xF6,0xFF,0x40,0x14,
95462 -0xD4,0x05,0x66,0xAC,
95463 -0x3B,0x5B,0x00,0x08,
95464 -0x02,0x80,0x02,0x3C,
95465 -0xD8,0xFF,0xBD,0x27,
95466 -0xFF,0xFF,0x84,0x30,
95467 -0x18,0x00,0xB2,0xAF,
95468 -0xF0,0x01,0x92,0x30,
95469 -0x02,0x91,0x12,0x00,
95470 -0x14,0x00,0xB1,0xAF,
95471 -0xC0,0x88,0x12,0x00,
95472 -0x21,0x88,0x32,0x02,
95473 -0x80,0x88,0x11,0x00,
95474 -0x21,0x88,0x32,0x02,
95475 -0x02,0x80,0x02,0x3C,
95476 -0x30,0x1F,0x42,0x24,
95477 -0x80,0x88,0x11,0x00,
95478 -0x21,0x88,0x22,0x02,
95479 -0x20,0x00,0xBF,0xAF,
95480 -0x1C,0x00,0xB3,0xAF,
95481 -0x10,0x00,0xB0,0xAF,
95482 -0x1C,0x24,0x30,0x8E,
95483 -0x00,0x02,0x82,0x30,
95484 -0xFF,0xFE,0x03,0x24,
95485 -0x2B,0x10,0x02,0x00,
95486 -0x00,0x10,0x10,0x36,
95487 -0x24,0x80,0x03,0x02,
95488 -0x00,0x12,0x02,0x00,
95489 -0x25,0x80,0x02,0x02,
95490 -0x14,0x24,0x25,0xAE,
95491 -0x1C,0x24,0x30,0xAE,
95492 -0x76,0x25,0x00,0x0C,
95493 -0x21,0x98,0xA0,0x00,
95494 -0xF8,0xFF,0x03,0x24,
95495 -0x24,0x80,0x03,0x02,
95496 -0x07,0x00,0x42,0x30,
95497 -0x25,0x80,0x02,0x02,
95498 -0x07,0x00,0x03,0x32,
95499 -0x25,0xB0,0x02,0x3C,
95500 -0x80,0x18,0x03,0x00,
95501 -0x1C,0x24,0x30,0xAE,
95502 -0x21,0x18,0x62,0x00,
95503 -0x84,0x01,0x62,0x8C,
95504 -0x21,0x20,0x40,0x02,
95505 -0x24,0x10,0x53,0x00,
95506 -0xC9,0x24,0x00,0x0C,
95507 -0x18,0x24,0x22,0xAE,
95508 -0x1E,0x24,0x24,0x92,
95509 -0x21,0x28,0x40,0x02,
95510 -0x20,0x00,0xBF,0x8F,
95511 -0x1C,0x00,0xB3,0x8F,
95512 -0x18,0x00,0xB2,0x8F,
95513 -0x14,0x00,0xB1,0x8F,
95514 -0x10,0x00,0xB0,0x8F,
95515 -0x57,0x24,0x00,0x08,
95516 -0x28,0x00,0xBD,0x27,
95517 -0xDD,0x59,0x00,0x08,
95518 -0xFF,0x00,0x84,0x30,
95519 -0x02,0x80,0x02,0x3C,
95520 -0x30,0x1F,0x43,0x24,
95521 -0x1F,0x00,0x04,0x24,
95522 -0x1C,0x24,0x62,0x8C,
95523 -0xFF,0xFF,0x84,0x24,
95524 -0x00,0x10,0x42,0x34,
95525 -0x1C,0x24,0x62,0xAC,
95526 -0xFB,0xFF,0x81,0x04,
95527 -0x94,0x00,0x63,0x24,
95528 -0x08,0x00,0xE0,0x03,
95529 -0x00,0x00,0x00,0x00,
95530 -0x00,0x00,0x85,0xAC,
95531 -0x21,0x10,0x00,0x00,
95532 -0x01,0x00,0x42,0x24,
95533 -0xFF,0x00,0x42,0x30,
95534 -0x06,0x00,0x43,0x2C,
95535 -0xFC,0xFF,0x60,0x14,
95536 -0x00,0x00,0x00,0x00,
95537 -0x08,0x00,0xE0,0x03,
95538 -0x00,0x00,0x00,0x00,
95539 -0xE0,0xFF,0xBD,0x27,
95540 -0x44,0x00,0x02,0x24,
95541 -0x10,0x00,0xA2,0xA3,
95542 -0x49,0x00,0x03,0x24,
95543 -0x47,0x00,0x02,0x24,
95544 -0x02,0x80,0x07,0x3C,
95545 -0xD4,0xF3,0xE7,0x24,
95546 -0x11,0x00,0xA3,0xA3,
95547 -0x12,0x00,0xA2,0xA3,
95548 -0x10,0x27,0x03,0x24,
95549 -0x01,0x00,0x02,0x24,
95550 -0x01,0x80,0x06,0x3C,
95551 -0x10,0x00,0xA5,0x27,
95552 -0x21,0x20,0xE0,0x00,
95553 -0x20,0x73,0xC6,0x24,
95554 -0x0C,0x00,0xE3,0xAC,
95555 -0x14,0x00,0xE2,0xA0,
95556 -0x18,0x00,0xBF,0xAF,
95557 -0xA2,0x23,0x00,0x0C,
95558 -0x13,0x00,0xA0,0xA3,
95559 -0x18,0x00,0xBF,0x8F,
95560 -0x00,0x00,0x00,0x00,
95561 -0x08,0x00,0xE0,0x03,
95562 -0x20,0x00,0xBD,0x27,
95563 -0xD0,0xFF,0xBD,0x27,
95564 -0x25,0xB0,0x03,0x3C,
95565 -0x20,0x00,0xB4,0xAF,
95566 -0x1C,0x00,0xB3,0xAF,
95567 -0x2C,0x00,0xBF,0xAF,
95568 -0x28,0x00,0xB6,0xAF,
95569 -0x24,0x00,0xB5,0xAF,
95570 -0x18,0x00,0xB2,0xAF,
95571 -0x14,0x00,0xB1,0xAF,
95572 -0x10,0x00,0xB0,0xAF,
95573 -0x03,0x0D,0x64,0x34,
95574 -0x00,0x00,0x82,0x90,
95575 -0x00,0x00,0x00,0x00,
95576 -0xFF,0x00,0x54,0x30,
95577 -0x70,0x00,0x93,0x32,
95578 -0x5D,0x00,0x60,0x12,
95579 -0x42,0x00,0x63,0x34,
95580 -0x8F,0x00,0x82,0x32,
95581 -0x00,0x00,0x82,0xA0,
95582 -0x21,0x10,0x00,0x00,
95583 -0x01,0x00,0x42,0x24,
95584 -0xFF,0x00,0x42,0x30,
95585 -0x06,0x00,0x43,0x2C,
95586 -0xFD,0xFF,0x60,0x14,
95587 -0x01,0x00,0x42,0x24,
95588 -0x55,0x00,0x60,0x12,
95589 -0x00,0x00,0x00,0x00,
95590 -0x00,0x60,0x12,0x40,
95591 -0x01,0x00,0x41,0x36,
95592 -0x01,0x00,0x21,0x38,
95593 -0x00,0x60,0x81,0x40,
95594 -0x0F,0x00,0x11,0x3C,
95595 -0x21,0x20,0x00,0x00,
95596 -0x8A,0x47,0x00,0x0C,
95597 -0xFF,0xFF,0x25,0x36,
95598 -0x21,0xA8,0x40,0x00,
95599 -0x00,0x60,0x92,0x40,
95600 -0x54,0x22,0x00,0x0C,
95601 -0x64,0x00,0x04,0x24,
95602 -0xE6,0x44,0x00,0x0C,
95603 -0x01,0x00,0x04,0x24,
95604 -0x00,0x60,0x12,0x40,
95605 -0x01,0x00,0x41,0x36,
95606 -0x01,0x00,0x21,0x38,
95607 -0x00,0x60,0x81,0x40,
95608 -0x21,0x20,0x00,0x00,
95609 -0x8A,0x47,0x00,0x0C,
95610 -0xFF,0xFF,0x25,0x36,
95611 -0x21,0xB0,0x40,0x00,
95612 -0x00,0x60,0x92,0x40,
95613 -0x64,0x00,0x04,0x24,
95614 -0x54,0x22,0x00,0x0C,
95615 -0x08,0x00,0x10,0x3C,
95616 -0xFF,0xFF,0x10,0x36,
95617 -0xE6,0x44,0x00,0x0C,
95618 -0x21,0x20,0x00,0x00,
95619 -0x01,0x00,0x12,0x3C,
95620 -0x24,0x30,0xB0,0x02,
95621 -0x25,0x30,0xD2,0x00,
95622 -0xFF,0xFF,0x25,0x36,
95623 -0x5F,0x47,0x00,0x0C,
95624 -0x21,0x20,0x00,0x00,
95625 -0x54,0x22,0x00,0x0C,
95626 -0x64,0x00,0x04,0x24,
95627 -0x24,0x80,0xD0,0x02,
95628 -0xE6,0x44,0x00,0x0C,
95629 -0x01,0x00,0x04,0x24,
95630 -0x25,0x30,0x12,0x02,
95631 -0xFF,0xFF,0x25,0x36,
95632 -0x5F,0x47,0x00,0x0C,
95633 -0x21,0x20,0x00,0x00,
95634 -0x54,0x22,0x00,0x0C,
95635 -0x64,0x00,0x04,0x24,
95636 -0xE6,0x44,0x00,0x0C,
95637 -0x21,0x20,0x00,0x00,
95638 -0x00,0x60,0x12,0x40,
95639 -0x01,0x00,0x41,0x36,
95640 -0x01,0x00,0x21,0x38,
95641 -0x00,0x60,0x81,0x40,
95642 -0x0F,0x00,0x10,0x3C,
95643 -0x18,0x00,0x04,0x24,
95644 -0x8A,0x47,0x00,0x0C,
95645 -0xFF,0xFF,0x05,0x36,
95646 -0x21,0x88,0x40,0x00,
95647 -0x00,0x60,0x92,0x40,
95648 -0x54,0x22,0x00,0x0C,
95649 -0x64,0x00,0x04,0x24,
95650 -0x18,0x00,0x04,0x24,
95651 -0xFF,0xFF,0x05,0x36,
95652 -0x5F,0x47,0x00,0x0C,
95653 -0x00,0x80,0x26,0x36,
95654 -0x25,0x22,0x00,0x0C,
95655 -0x03,0x00,0x04,0x24,
95656 -0x25,0x00,0x60,0x16,
95657 -0x25,0xB0,0x02,0x3C,
95658 -0x2C,0x00,0xBF,0x8F,
95659 -0x28,0x00,0xB6,0x8F,
95660 -0x24,0x00,0xB5,0x8F,
95661 -0x20,0x00,0xB4,0x8F,
95662 -0x1C,0x00,0xB3,0x8F,
95663 -0x18,0x00,0xB2,0x8F,
95664 -0x14,0x00,0xB1,0x8F,
95665 -0x10,0x00,0xB0,0x8F,
95666 -0x25,0xB0,0x02,0x3C,
95667 -0x42,0x00,0x42,0x34,
95668 -0x30,0x00,0xBD,0x27,
95669 -0x00,0x00,0x40,0xA0,
95670 -0x08,0x00,0xE0,0x03,
95671 -0x00,0x00,0x00,0x00,
95672 -0xFF,0xFF,0x02,0x24,
95673 -0x00,0x00,0x62,0xA0,
95674 -0x00,0x60,0x12,0x40,
95675 -0x01,0x00,0x41,0x36,
95676 -0x01,0x00,0x21,0x38,
95677 -0x00,0x60,0x81,0x40,
95678 -0x0F,0x00,0x10,0x3C,
95679 -0x18,0x00,0x04,0x24,
95680 -0x8A,0x47,0x00,0x0C,
95681 -0xFF,0xFF,0x05,0x36,
95682 -0x21,0x88,0x40,0x00,
95683 -0x00,0x60,0x92,0x40,
95684 -0x54,0x22,0x00,0x0C,
95685 -0x64,0x00,0x04,0x24,
95686 -0x18,0x00,0x04,0x24,
95687 -0xFF,0xFF,0x05,0x36,
95688 -0x5F,0x47,0x00,0x0C,
95689 -0x00,0x80,0x26,0x36,
95690 -0x25,0x22,0x00,0x0C,
95691 -0x03,0x00,0x04,0x24,
95692 -0xDD,0xFF,0x60,0x12,
95693 -0x25,0xB0,0x02,0x3C,
95694 -0x03,0x0D,0x42,0x34,
95695 -0x00,0x00,0x54,0xA0,
95696 -0x21,0x10,0x00,0x00,
95697 -0x01,0x00,0x42,0x24,
95698 -0xFF,0x00,0x42,0x30,
95699 -0x06,0x00,0x43,0x2C,
95700 -0xFD,0xFF,0x60,0x14,
95701 -0x01,0x00,0x42,0x24,
95702 -0x0F,0x00,0x10,0x3C,
95703 -0x21,0x30,0xA0,0x02,
95704 -0xFF,0xFF,0x05,0x36,
95705 -0x5F,0x47,0x00,0x0C,
95706 -0x21,0x20,0x00,0x00,
95707 -0x54,0x22,0x00,0x0C,
95708 -0x64,0x00,0x04,0x24,
95709 -0xE6,0x44,0x00,0x0C,
95710 -0x01,0x00,0x04,0x24,
95711 -0xFF,0xFF,0x05,0x36,
95712 -0x21,0x30,0xC0,0x02,
95713 -0x5F,0x47,0x00,0x0C,
95714 -0x21,0x20,0x00,0x00,
95715 -0x54,0x22,0x00,0x0C,
95716 -0x64,0x00,0x04,0x24,
95717 -0x2C,0x00,0xBF,0x8F,
95718 -0x28,0x00,0xB6,0x8F,
95719 -0x24,0x00,0xB5,0x8F,
95720 -0x20,0x00,0xB4,0x8F,
95721 -0x1C,0x00,0xB3,0x8F,
95722 -0x18,0x00,0xB2,0x8F,
95723 -0x14,0x00,0xB1,0x8F,
95724 -0x10,0x00,0xB0,0x8F,
95725 -0x21,0x20,0x00,0x00,
95726 -0xE6,0x44,0x00,0x08,
95727 -0x30,0x00,0xBD,0x27,
95728 -0xC8,0xFF,0xBD,0x27,
95729 -0x28,0x00,0xB4,0xAF,
95730 -0x02,0x80,0x14,0x3C,
95731 -0x30,0x00,0xB6,0xAF,
95732 -0x34,0x00,0xBF,0xAF,
95733 -0x2C,0x00,0xB5,0xAF,
95734 -0x24,0x00,0xB3,0xAF,
95735 -0x20,0x00,0xB2,0xAF,
95736 -0x1C,0x00,0xB1,0xAF,
95737 -0x18,0x00,0xB0,0xAF,
95738 -0x30,0x1F,0x85,0x26,
95739 -0x0C,0x00,0xA2,0x8C,
95740 -0x00,0x00,0x00,0x00,
95741 -0x82,0x17,0x02,0x00,
95742 -0x01,0x00,0x42,0x30,
95743 -0x08,0x00,0x40,0x14,
95744 -0x06,0x00,0x16,0x24,
95745 -0x08,0x00,0xA2,0x8C,
95746 -0x01,0x00,0x03,0x24,
95747 -0x42,0x17,0x02,0x00,
95748 -0x03,0x00,0x42,0x30,
95749 -0x57,0x00,0x43,0x10,
95750 -0x25,0xB0,0x02,0x3C,
95751 -0x30,0x1F,0x85,0x26,
95752 -0x0C,0x00,0xA2,0x8C,
95753 -0x01,0x00,0x03,0x24,
95754 -0x82,0x17,0x02,0x00,
95755 -0x01,0x00,0x44,0x30,
95756 -0x0B,0x00,0x83,0x10,
95757 -0x21,0x10,0x00,0x00,
95758 -0x34,0x00,0xBF,0x8F,
95759 -0x30,0x00,0xB6,0x8F,
95760 -0x2C,0x00,0xB5,0x8F,
95761 -0x28,0x00,0xB4,0x8F,
95762 -0x24,0x00,0xB3,0x8F,
95763 -0x20,0x00,0xB2,0x8F,
95764 -0x1C,0x00,0xB1,0x8F,
95765 -0x18,0x00,0xB0,0x8F,
95766 -0x08,0x00,0xE0,0x03,
95767 -0x38,0x00,0xBD,0x27,
95768 -0x08,0x00,0xA2,0x8C,
95769 -0x00,0x00,0x00,0x00,
95770 -0x42,0x17,0x02,0x00,
95771 -0x03,0x00,0x43,0x30,
95772 -0xF1,0xFF,0x64,0x14,
95773 -0x21,0x10,0x00,0x00,
95774 -0x10,0x00,0xA2,0x8C,
95775 -0x00,0x00,0x00,0x00,
95776 -0x82,0x17,0x02,0x00,
95777 -0x50,0x02,0x43,0x10,
95778 -0x25,0xB0,0x02,0x3C,
95779 -0xC7,0x02,0xB3,0x90,
95780 -0x62,0x0C,0x42,0x34,
95781 -0xFF,0x00,0x63,0x32,
95782 -0x00,0x00,0x43,0xA0,
95783 -0x21,0x10,0x00,0x00,
95784 -0x01,0x00,0x42,0x24,
95785 -0xFF,0x00,0x42,0x30,
95786 -0x06,0x00,0x43,0x2C,
95787 -0xFD,0xFF,0x60,0x14,
95788 -0x01,0x00,0x42,0x24,
95789 -0x30,0x1F,0x90,0x26,
95790 -0xC6,0x02,0x02,0x92,
95791 -0x00,0x00,0x00,0x00,
95792 -0x83,0x00,0x40,0x10,
95793 -0x01,0x00,0x02,0x24,
95794 -0x25,0xB0,0x11,0x3C,
95795 -0x03,0x0D,0x23,0x36,
95796 -0x00,0x00,0x62,0x90,
95797 -0x00,0x00,0x00,0x00,
95798 -0x70,0x00,0x42,0x30,
95799 -0xA9,0x00,0x40,0x14,
95800 -0xCC,0x00,0x02,0x24,
95801 -0xC4,0x02,0x02,0x96,
95802 -0x00,0x00,0x00,0x00,
95803 -0x23,0x20,0x53,0x00,
95804 -0x2B,0x18,0x53,0x00,
95805 -0x23,0x10,0x62,0x02,
95806 -0x0A,0x10,0x83,0x00,
95807 -0x03,0x00,0x42,0x2C,
95808 -0x76,0x00,0x40,0x10,
95809 -0x00,0x00,0x00,0x00,
95810 -0xC4,0x02,0x03,0x92,
95811 -0x63,0x0C,0x22,0x36,
95812 -0x21,0x20,0x00,0x00,
95813 -0x00,0x00,0x43,0xA0,
95814 -0x01,0x00,0x82,0x24,
95815 -0xFF,0x00,0x44,0x30,
95816 -0x06,0x00,0x83,0x2C,
95817 -0xFD,0xFF,0x60,0x14,
95818 -0x01,0x00,0x82,0x24,
95819 -0x30,0x1F,0x83,0x26,
95820 -0xC3,0x02,0x62,0x90,
95821 -0x08,0x00,0x66,0x8C,
95822 -0xC2,0x02,0x73,0xA0,
95823 -0x23,0x20,0x53,0x00,
95824 -0x02,0x2C,0x06,0x00,
95825 -0x2B,0x40,0x62,0x02,
95826 -0x23,0x90,0x62,0x02,
95827 -0x0B,0x90,0x88,0x00,
95828 -0x3F,0x00,0xA7,0x30,
95829 -0x3F,0x00,0xC6,0x30,
95830 -0x24,0x00,0x02,0x24,
95831 -0x20,0x00,0x03,0x24,
95832 -0x23,0x10,0x46,0x00,
95833 -0x91,0x00,0x40,0x16,
95834 -0x23,0x20,0x67,0x00,
95835 -0xE6,0x5C,0x00,0x08,
95836 -0x00,0x00,0x00,0x00,
95837 -0x80,0x0C,0x42,0x34,
95838 -0x00,0x00,0x43,0x8C,
95839 -0x21,0x30,0xA0,0x00,
95840 -0xC0,0xFF,0x02,0x3C,
95841 -0x24,0x20,0x62,0x00,
95842 -0x21,0x88,0x00,0x00,
95843 -0xC0,0xFF,0x05,0x3C,
95844 -0x42,0x5D,0x00,0x08,
95845 -0x18,0x00,0xC3,0x24,
95846 -0x01,0x00,0x31,0x26,
95847 -0x25,0x00,0x22,0x2E,
95848 -0x0D,0x00,0x40,0x10,
95849 -0x02,0x80,0x02,0x3C,
95850 -0x00,0x00,0x62,0x8C,
95851 -0x00,0x00,0x00,0x00,
95852 -0x24,0x10,0x45,0x00,
95853 -0xF8,0xFF,0x44,0x14,
95854 -0x04,0x00,0x63,0x24,
95855 -0x08,0x00,0xC2,0x8C,
95856 -0xC0,0xFF,0x03,0x24,
95857 -0x3F,0x00,0x24,0x32,
95858 -0x24,0x10,0x43,0x00,
95859 -0x25,0x10,0x44,0x00,
95860 -0x08,0x00,0xC2,0xAC,
95861 -0x02,0x80,0x02,0x3C,
95862 -0xDE,0x5D,0x44,0x90,
95863 -0x22,0x00,0x03,0x24,
95864 -0x42,0x00,0x83,0x10,
95865 -0x92,0x00,0x02,0x24,
95866 -0x41,0x00,0x82,0x10,
95867 -0x25,0xB0,0x02,0x3C,
95868 -0x25,0xB0,0x02,0x3C,
95869 -0x24,0x0A,0x42,0x34,
95870 -0x00,0x00,0x44,0x8C,
95871 -0x3F,0x3F,0x03,0x3C,
95872 -0x3F,0x3F,0x63,0x34,
95873 -0x24,0x20,0x83,0x00,
95874 -0x02,0x80,0x02,0x3C,
95875 -0x02,0x80,0x03,0x3C,
95876 -0xDE,0x1F,0x53,0x24,
95877 -0xE6,0x20,0x72,0x24,
95878 -0x21,0x88,0x00,0x00,
95879 -0x69,0x5D,0x00,0x08,
95880 -0x10,0x00,0xA4,0xAF,
95881 -0x39,0x52,0x00,0x0C,
95882 -0x00,0x00,0x00,0x00,
95883 -0x4B,0x00,0x40,0x10,
95884 -0x30,0x1F,0x85,0x26,
95885 -0x01,0x00,0x31,0x26,
95886 -0x21,0x00,0x22,0x2E,
95887 -0x17,0x00,0x40,0x10,
95888 -0x30,0x1F,0x82,0x26,
95889 -0xC0,0x80,0x11,0x00,
95890 -0x10,0x00,0xA4,0x27,
95891 -0x21,0x28,0x13,0x02,
95892 -0x39,0x52,0x00,0x0C,
95893 -0x04,0x00,0x06,0x24,
95894 -0x21,0x28,0x12,0x02,
95895 -0x10,0x00,0xA4,0x27,
95896 -0xF0,0xFF,0x40,0x14,
95897 -0x04,0x00,0x06,0x24,
95898 -0x30,0x1F,0x85,0x26,
95899 -0x08,0x00,0xA3,0x8C,
95900 -0xC0,0xFF,0x02,0x3C,
95901 -0xFF,0xFF,0x42,0x34,
95902 -0x3F,0x00,0x24,0x32,
95903 -0x24,0x18,0x62,0x00,
95904 -0x00,0x24,0x04,0x00,
95905 -0xFF,0x7F,0x02,0x3C,
95906 -0x25,0x18,0x64,0x00,
95907 -0xFF,0xFF,0x42,0x34,
95908 -0x24,0x18,0x62,0x00,
95909 -0x08,0x00,0xA3,0xAC,
95910 -0x30,0x1F,0x82,0x26,
95911 -0x0C,0x00,0x43,0x8C,
95912 -0x00,0x40,0x04,0x3C,
95913 -0x30,0x1F,0x85,0x26,
95914 -0x25,0x18,0x64,0x00,
95915 -0x0C,0x00,0x43,0xAC,
95916 -0x0C,0x00,0xA2,0x8C,
95917 -0x01,0x00,0x03,0x24,
95918 -0x82,0x17,0x02,0x00,
95919 -0x01,0x00,0x44,0x30,
95920 -0x5D,0xFF,0x83,0x14,
95921 -0x21,0x10,0x00,0x00,
95922 -0xF0,0x5C,0x00,0x08,
95923 -0x00,0x00,0x00,0x00,
95924 -0xC6,0x02,0x02,0xA2,
95925 -0x0A,0x5D,0x00,0x08,
95926 -0xC4,0x02,0x13,0xA6,
95927 -0x23,0x5C,0x00,0x0C,
95928 -0x00,0x00,0x00,0x00,
95929 -0x1A,0x5D,0x00,0x08,
95930 -0xC4,0x02,0x13,0xA6,
95931 -0x25,0xB0,0x02,0x3C,
95932 -0x88,0x0C,0x42,0x34,
95933 -0x00,0x00,0x44,0x8C,
95934 -0x02,0x80,0x03,0x3C,
95935 -0x30,0x1F,0x66,0x24,
95936 -0xC0,0xFF,0x02,0x3C,
95937 -0x24,0x20,0x82,0x00,
95938 -0x21,0x88,0x00,0x00,
95939 -0xC0,0xFF,0x05,0x3C,
95940 -0xA2,0x5D,0x00,0x08,
95941 -0x18,0x00,0xC3,0x24,
95942 -0x01,0x00,0x31,0x26,
95943 -0x25,0x00,0x22,0x2E,
95944 -0xB4,0xFF,0x40,0x10,
95945 -0x25,0xB0,0x02,0x3C,
95946 -0x00,0x00,0x62,0x8C,
95947 -0x00,0x00,0x00,0x00,
95948 -0x24,0x10,0x45,0x00,
95949 -0xF8,0xFF,0x44,0x14,
95950 -0x04,0x00,0x63,0x24,
95951 -0x08,0x00,0xC2,0x8C,
95952 -0x3F,0x00,0x23,0x32,
95953 -0xFF,0xC0,0x04,0x24,
95954 -0x24,0x10,0x44,0x00,
95955 -0x00,0x1A,0x03,0x00,
95956 -0x25,0x10,0x43,0x00,
95957 -0x54,0x5D,0x00,0x08,
95958 -0x08,0x00,0xC2,0xAC,
95959 -0x08,0x00,0xA3,0x8C,
95960 -0xC0,0xFF,0x02,0x3C,
95961 -0xFF,0xFF,0x42,0x34,
95962 -0x3F,0x00,0x24,0x32,
95963 -0x24,0x18,0x62,0x00,
95964 -0x00,0x24,0x04,0x00,
95965 -0x25,0x18,0x64,0x00,
95966 -0x00,0x80,0x02,0x3C,
95967 -0x7D,0x5D,0x00,0x08,
95968 -0x25,0x18,0x62,0x00,
95969 -0x63,0x0C,0x23,0x36,
95970 -0x00,0x00,0x62,0xA0,
95971 -0x21,0x10,0x00,0x00,
95972 -0x01,0x00,0x42,0x24,
95973 -0xFF,0x00,0x42,0x30,
95974 -0x06,0x00,0x43,0x2C,
95975 -0xFD,0xFF,0x60,0x14,
95976 -0x01,0x00,0x42,0x24,
95977 -0x24,0x5D,0x00,0x08,
95978 -0x30,0x1F,0x83,0x26,
95979 -0x71,0x01,0x00,0x11,
95980 -0x23,0x28,0xF2,0x00,
95981 -0x2B,0x10,0x42,0x02,
95982 -0x21,0x18,0xD2,0x00,
95983 -0x00,0x00,0x42,0x38,
95984 -0x24,0x00,0x08,0x24,
95985 -0x2B,0x20,0x44,0x02,
95986 -0x0B,0x40,0x62,0x00,
95987 -0x06,0x00,0x80,0x10,
95988 -0x20,0x00,0x15,0x24,
95989 -0x30,0x1F,0x83,0x26,
95990 -0x0A,0x00,0x62,0x94,
95991 -0x00,0x00,0x00,0x00,
95992 -0x3F,0x00,0x42,0x30,
95993 -0x21,0xA8,0x52,0x00,
95994 -0x2B,0x28,0xC8,0x02,
95995 -0x5E,0x01,0xA0,0x10,
95996 -0x30,0x1F,0x82,0x26,
95997 -0x80,0x10,0x08,0x00,
95998 -0x30,0x1F,0x83,0x26,
95999 -0x21,0x10,0x43,0x00,
96000 -0x18,0x00,0x44,0x8C,
96001 -0x00,0x00,0x00,0x00,
96002 -0x82,0x25,0x04,0x00,
96003 -0x30,0x1F,0x86,0x26,
96004 -0x0C,0x00,0xC3,0x8C,
96005 -0x00,0x00,0x00,0x00,
96006 -0xFF,0x03,0x67,0x30,
96007 -0x47,0x01,0xE0,0x10,
96008 -0x00,0x02,0x62,0x30,
96009 -0x04,0x00,0x40,0x10,
96010 -0x18,0x00,0xE4,0x00,
96011 -0x00,0xFC,0x02,0x24,
96012 -0x25,0x38,0xE2,0x00,
96013 -0x18,0x00,0xE4,0x00,
96014 -0x82,0x82,0x03,0x00,
96015 -0xFF,0x03,0x10,0x32,
96016 -0x00,0x02,0x03,0x32,
96017 -0x12,0x10,0x00,0x00,
96018 -0x02,0x12,0x02,0x00,
96019 -0x03,0x00,0x60,0x10,
96020 -0xFF,0x03,0x45,0x30,
96021 -0x00,0xFC,0x02,0x24,
96022 -0x25,0x80,0x02,0x02,
96023 -0x18,0x00,0x04,0x02,
96024 -0x80,0x1D,0x04,0x00,
96025 -0x25,0xB0,0x11,0x3C,
96026 -0x80,0x0C,0x24,0x36,
96027 -0x94,0x0C,0x31,0x36,
96028 -0x12,0x80,0x00,0x00,
96029 -0x02,0x82,0x10,0x00,
96030 -0x3F,0x00,0x02,0x32,
96031 -0x00,0x14,0x02,0x00,
96032 -0x25,0x18,0x62,0x00,
96033 -0x25,0x18,0x65,0x00,
96034 -0x21,0x28,0x60,0x00,
96035 -0x02,0x5C,0x00,0x0C,
96036 -0x10,0x00,0xA3,0xAF,
96037 -0x00,0x00,0x23,0x8E,
96038 -0xFF,0x0F,0x02,0x3C,
96039 -0xC0,0x03,0x10,0x32,
96040 -0xFF,0xFF,0x42,0x34,
96041 -0x24,0x18,0x62,0x00,
96042 -0x80,0x85,0x10,0x00,
96043 -0x25,0x18,0x70,0x00,
96044 -0x21,0x20,0x20,0x02,
96045 -0x21,0x28,0x60,0x00,
96046 -0x10,0x00,0xA3,0xAF,
96047 -0x02,0x5C,0x00,0x0C,
96048 -0x00,0x00,0x00,0x00,
96049 -0x30,0x1F,0x83,0x26,
96050 -0x08,0x00,0x62,0x8C,
96051 -0x00,0x00,0x00,0x00,
96052 -0xB9,0x00,0x40,0x04,
96053 -0xC0,0x28,0x15,0x00,
96054 -0x21,0x10,0xA3,0x00,
96055 -0xAC,0x00,0x44,0x90,
96056 -0x25,0xB0,0x03,0x3C,
96057 -0x22,0x0A,0x63,0x34,
96058 -0x00,0x00,0x64,0xA0,
96059 -0x21,0x10,0x00,0x00,
96060 -0x01,0x00,0x42,0x24,
96061 -0xFF,0x00,0x42,0x30,
96062 -0x06,0x00,0x43,0x2C,
96063 -0xFD,0xFF,0x60,0x14,
96064 -0x01,0x00,0x42,0x24,
96065 -0x30,0x1F,0x82,0x26,
96066 -0x21,0x10,0xA2,0x00,
96067 -0xAD,0x00,0x44,0x90,
96068 -0x25,0xB0,0x03,0x3C,
96069 -0x23,0x0A,0x63,0x34,
96070 -0x00,0x00,0x64,0xA0,
96071 -0x21,0x10,0x00,0x00,
96072 -0x01,0x00,0x42,0x24,
96073 -0xFF,0x00,0x42,0x30,
96074 -0x06,0x00,0x43,0x2C,
96075 -0xFD,0xFF,0x60,0x14,
96076 -0x01,0x00,0x42,0x24,
96077 -0x30,0x1F,0x82,0x26,
96078 -0x21,0x10,0xA2,0x00,
96079 -0xAE,0x00,0x44,0x90,
96080 -0x25,0xB0,0x03,0x3C,
96081 -0x24,0x0A,0x63,0x34,
96082 -0x00,0x00,0x64,0xA0,
96083 -0x21,0x10,0x00,0x00,
96084 -0x01,0x00,0x42,0x24,
96085 -0xFF,0x00,0x42,0x30,
96086 -0x06,0x00,0x43,0x2C,
96087 -0xFD,0xFF,0x60,0x14,
96088 -0x01,0x00,0x42,0x24,
96089 -0x30,0x1F,0x82,0x26,
96090 -0x21,0x10,0xA2,0x00,
96091 -0xAF,0x00,0x44,0x90,
96092 -0x25,0xB0,0x03,0x3C,
96093 -0x25,0x0A,0x63,0x34,
96094 -0x00,0x00,0x64,0xA0,
96095 -0x21,0x10,0x00,0x00,
96096 -0x01,0x00,0x42,0x24,
96097 -0xFF,0x00,0x42,0x30,
96098 -0x06,0x00,0x43,0x2C,
96099 -0xFD,0xFF,0x60,0x14,
96100 -0x01,0x00,0x42,0x24,
96101 -0x30,0x1F,0x82,0x26,
96102 -0x21,0x10,0xA2,0x00,
96103 -0xB0,0x00,0x44,0x90,
96104 -0x25,0xB0,0x03,0x3C,
96105 -0x26,0x0A,0x63,0x34,
96106 -0x00,0x00,0x64,0xA0,
96107 -0x21,0x10,0x00,0x00,
96108 -0x01,0x00,0x42,0x24,
96109 -0xFF,0x00,0x42,0x30,
96110 -0x06,0x00,0x43,0x2C,
96111 -0xFD,0xFF,0x60,0x14,
96112 -0x01,0x00,0x42,0x24,
96113 -0x30,0x1F,0x82,0x26,
96114 -0x21,0x10,0xA2,0x00,
96115 -0xB1,0x00,0x44,0x90,
96116 -0x25,0xB0,0x03,0x3C,
96117 -0x27,0x0A,0x63,0x34,
96118 -0x00,0x00,0x64,0xA0,
96119 -0x21,0x10,0x00,0x00,
96120 -0x01,0x00,0x42,0x24,
96121 -0xFF,0x00,0x42,0x30,
96122 -0x06,0x00,0x43,0x2C,
96123 -0xFD,0xFF,0x60,0x14,
96124 -0x01,0x00,0x42,0x24,
96125 -0x30,0x1F,0x82,0x26,
96126 -0x21,0x10,0xA2,0x00,
96127 -0xB2,0x00,0x44,0x90,
96128 -0x25,0xB0,0x03,0x3C,
96129 -0x28,0x0A,0x63,0x34,
96130 -0x00,0x00,0x64,0xA0,
96131 -0x21,0x10,0x00,0x00,
96132 -0x01,0x00,0x42,0x24,
96133 -0xFF,0x00,0x42,0x30,
96134 -0x06,0x00,0x43,0x2C,
96135 -0xFD,0xFF,0x60,0x14,
96136 -0x01,0x00,0x42,0x24,
96137 -0x30,0x1F,0x82,0x26,
96138 -0x21,0x10,0xA2,0x00,
96139 -0xB3,0x00,0x44,0x90,
96140 -0x25,0xB0,0x03,0x3C,
96141 -0x29,0x0A,0x63,0x34,
96142 -0x00,0x00,0x64,0xA0,
96143 -0x21,0x10,0x00,0x00,
96144 -0x01,0x00,0x42,0x24,
96145 -0xFF,0x00,0x42,0x30,
96146 -0x06,0x00,0x43,0x2C,
96147 -0xFD,0xFF,0x60,0x14,
96148 -0x01,0x00,0x42,0x24,
96149 -0x02,0x80,0x02,0x3C,
96150 -0xDE,0x5D,0x44,0x90,
96151 -0x22,0x00,0x03,0x24,
96152 -0x03,0x00,0x83,0x10,
96153 -0x92,0x00,0x02,0x24,
96154 -0x73,0xFE,0x82,0x14,
96155 -0x21,0x10,0x00,0x00,
96156 -0x30,0x1F,0x82,0x26,
96157 -0x08,0x00,0x43,0x8C,
96158 -0x01,0x00,0x44,0x3A,
96159 -0x24,0x00,0x02,0x24,
96160 -0x02,0x1A,0x03,0x00,
96161 -0x3F,0x00,0x63,0x30,
96162 -0x01,0x00,0x84,0x30,
96163 -0xF3,0x00,0x80,0x10,
96164 -0x23,0x28,0x43,0x00,
96165 -0x42,0x18,0x12,0x00,
96166 -0x40,0x10,0x03,0x00,
96167 -0x21,0x90,0x43,0x00,
96168 -0x30,0x1F,0x83,0x26,
96169 -0xC3,0x02,0x62,0x90,
96170 -0x00,0x00,0x00,0x00,
96171 -0x2B,0x10,0x62,0x02,
96172 -0xB8,0x00,0x40,0x10,
96173 -0x2B,0x10,0x45,0x02,
96174 -0x06,0x00,0x40,0x10,
96175 -0x24,0x00,0x06,0x24,
96176 -0x08,0x00,0x62,0x8C,
96177 -0x00,0x00,0x00,0x00,
96178 -0x02,0x12,0x02,0x00,
96179 -0x3F,0x00,0x42,0x30,
96180 -0x21,0x30,0x52,0x00,
96181 -0x2B,0x28,0xC6,0x02,
96182 -0xB8,0x00,0xA0,0x10,
96183 -0x30,0x1F,0x82,0x26,
96184 -0x80,0x10,0x06,0x00,
96185 -0x30,0x1F,0x83,0x26,
96186 -0x21,0x10,0x43,0x00,
96187 -0x18,0x00,0x44,0x8C,
96188 -0x00,0x00,0x00,0x00,
96189 -0x82,0x25,0x04,0x00,
96190 -0x30,0x1F,0x83,0x26,
96191 -0x10,0x00,0x70,0x8C,
96192 -0x00,0x00,0x00,0x00,
96193 -0x82,0x3A,0x10,0x00,
96194 -0xFF,0x03,0xE7,0x30,
96195 -0xC5,0x00,0xE0,0x10,
96196 -0x00,0x02,0xE2,0x30,
96197 -0x04,0x00,0x40,0x10,
96198 -0x18,0x00,0xE4,0x00,
96199 -0x00,0xFC,0x02,0x24,
96200 -0x25,0x38,0xE2,0x00,
96201 -0x18,0x00,0xE4,0x00,
96202 -0x02,0x85,0x10,0x00,
96203 -0xFF,0x03,0x10,0x32,
96204 -0x00,0x02,0x03,0x32,
96205 -0x12,0x10,0x00,0x00,
96206 -0x02,0x12,0x02,0x00,
96207 -0x03,0x00,0x60,0x10,
96208 -0xFF,0x03,0x45,0x30,
96209 -0x00,0xFC,0x02,0x24,
96210 -0x25,0x80,0x02,0x02,
96211 -0x18,0x00,0x04,0x02,
96212 -0x80,0x1D,0x04,0x00,
96213 -0x25,0xB0,0x11,0x3C,
96214 -0x88,0x0C,0x24,0x36,
96215 -0x9C,0x0C,0x31,0x36,
96216 -0x12,0x80,0x00,0x00,
96217 -0x02,0x82,0x10,0x00,
96218 -0x3F,0x00,0x02,0x32,
96219 -0x00,0x14,0x02,0x00,
96220 -0x25,0x18,0x62,0x00,
96221 -0x25,0x18,0x65,0x00,
96222 -0x21,0x28,0x60,0x00,
96223 -0x02,0x5C,0x00,0x0C,
96224 -0x10,0x00,0xA3,0xAF,
96225 -0x00,0x00,0x23,0x8E,
96226 -0xFF,0x0F,0x02,0x3C,
96227 -0xFF,0xFF,0x42,0x34,
96228 -0xC0,0x03,0x10,0x32,
96229 -0x24,0x18,0x62,0x00,
96230 -0x80,0x85,0x10,0x00,
96231 -0x25,0x18,0x70,0x00,
96232 -0x21,0x20,0x20,0x02,
96233 -0x21,0x28,0x60,0x00,
96234 -0x02,0x5C,0x00,0x0C,
96235 -0x10,0x00,0xA3,0xAF,
96236 -0xE6,0x5C,0x00,0x08,
96237 -0x21,0x10,0x00,0x00,
96238 -0x21,0x10,0xA3,0x00,
96239 -0xB4,0x01,0x44,0x90,
96240 -0x25,0xB0,0x03,0x3C,
96241 -0x22,0x0A,0x63,0x34,
96242 -0x00,0x00,0x64,0xA0,
96243 -0x21,0x10,0x00,0x00,
96244 -0x01,0x00,0x42,0x24,
96245 -0xFF,0x00,0x42,0x30,
96246 -0x06,0x00,0x43,0x2C,
96247 -0xFD,0xFF,0x60,0x14,
96248 -0x01,0x00,0x42,0x24,
96249 -0x30,0x1F,0x82,0x26,
96250 -0x21,0x10,0xA2,0x00,
96251 -0xB5,0x01,0x44,0x90,
96252 -0x25,0xB0,0x03,0x3C,
96253 -0x23,0x0A,0x63,0x34,
96254 -0x00,0x00,0x64,0xA0,
96255 -0x21,0x10,0x00,0x00,
96256 -0x01,0x00,0x42,0x24,
96257 -0xFF,0x00,0x42,0x30,
96258 -0x06,0x00,0x43,0x2C,
96259 -0xFD,0xFF,0x60,0x14,
96260 -0x01,0x00,0x42,0x24,
96261 -0x30,0x1F,0x82,0x26,
96262 -0x21,0x10,0xA2,0x00,
96263 -0xB6,0x01,0x44,0x90,
96264 -0x25,0xB0,0x03,0x3C,
96265 -0x24,0x0A,0x63,0x34,
96266 -0x00,0x00,0x64,0xA0,
96267 -0x21,0x10,0x00,0x00,
96268 -0x01,0x00,0x42,0x24,
96269 -0xFF,0x00,0x42,0x30,
96270 -0x06,0x00,0x43,0x2C,
96271 -0xFD,0xFF,0x60,0x14,
96272 -0x01,0x00,0x42,0x24,
96273 -0x30,0x1F,0x82,0x26,
96274 -0x21,0x10,0xA2,0x00,
96275 -0xB7,0x01,0x44,0x90,
96276 -0x25,0xB0,0x03,0x3C,
96277 -0x25,0x0A,0x63,0x34,
96278 -0x00,0x00,0x64,0xA0,
96279 -0x21,0x10,0x00,0x00,
96280 -0x01,0x00,0x42,0x24,
96281 -0xFF,0x00,0x42,0x30,
96282 -0x06,0x00,0x43,0x2C,
96283 -0xFD,0xFF,0x60,0x14,
96284 -0x01,0x00,0x42,0x24,
96285 -0x30,0x1F,0x82,0x26,
96286 -0x21,0x10,0xA2,0x00,
96287 -0xB8,0x01,0x44,0x90,
96288 -0x25,0xB0,0x03,0x3C,
96289 -0x26,0x0A,0x63,0x34,
96290 -0x00,0x00,0x64,0xA0,
96291 -0x21,0x10,0x00,0x00,
96292 -0x01,0x00,0x42,0x24,
96293 -0xFF,0x00,0x42,0x30,
96294 -0x06,0x00,0x43,0x2C,
96295 -0xFD,0xFF,0x60,0x14,
96296 -0x01,0x00,0x42,0x24,
96297 -0x30,0x1F,0x82,0x26,
96298 -0x21,0x10,0xA2,0x00,
96299 -0xB9,0x01,0x44,0x90,
96300 -0x25,0xB0,0x03,0x3C,
96301 -0x27,0x0A,0x63,0x34,
96302 -0x00,0x00,0x64,0xA0,
96303 -0x21,0x10,0x00,0x00,
96304 -0x01,0x00,0x42,0x24,
96305 -0xFF,0x00,0x42,0x30,
96306 -0x06,0x00,0x43,0x2C,
96307 -0xFD,0xFF,0x60,0x14,
96308 -0x01,0x00,0x42,0x24,
96309 -0x30,0x1F,0x82,0x26,
96310 -0x21,0x10,0xA2,0x00,
96311 -0xBA,0x01,0x44,0x90,
96312 -0x25,0xB0,0x03,0x3C,
96313 -0x28,0x0A,0x63,0x34,
96314 -0x00,0x00,0x64,0xA0,
96315 -0x21,0x10,0x00,0x00,
96316 -0x01,0x00,0x42,0x24,
96317 -0xFF,0x00,0x42,0x30,
96318 -0x06,0x00,0x43,0x2C,
96319 -0xFD,0xFF,0x60,0x14,
96320 -0x01,0x00,0x42,0x24,
96321 -0x30,0x1F,0x82,0x26,
96322 -0x21,0x10,0xA2,0x00,
96323 -0xBB,0x01,0x44,0x90,
96324 -0x25,0xB0,0x03,0x3C,
96325 -0x29,0x0A,0x63,0x34,
96326 -0x00,0x00,0x64,0xA0,
96327 -0x21,0x10,0x00,0x00,
96328 -0x01,0x00,0x42,0x24,
96329 -0xFF,0x00,0x42,0x30,
96330 -0x06,0x00,0x43,0x2C,
96331 -0xFC,0xFF,0x60,0x14,
96332 -0x00,0x00,0x00,0x00,
96333 -0x6E,0x5E,0x00,0x08,
96334 -0x02,0x80,0x02,0x3C,
96335 -0x36,0x00,0xA0,0x10,
96336 -0x80,0x10,0x08,0x00,
96337 -0x21,0x10,0x46,0x00,
96338 -0x18,0x00,0x45,0x8C,
96339 -0x25,0xB0,0x04,0x3C,
96340 -0x02,0x5C,0x00,0x0C,
96341 -0x80,0x0C,0x84,0x34,
96342 -0x25,0xB0,0x04,0x3C,
96343 -0x94,0x0C,0x84,0x34,
96344 -0x07,0x5E,0x00,0x08,
96345 -0x21,0x28,0x00,0x00,
96346 -0x30,0x00,0x43,0x8C,
96347 -0xDB,0x5D,0x00,0x08,
96348 -0x82,0x25,0x03,0x00,
96349 -0x23,0x20,0xD2,0x00,
96350 -0x2B,0x10,0x46,0x02,
96351 -0x2B,0x18,0x47,0x02,
96352 -0x21,0x40,0x00,0x00,
96353 -0x21,0xA8,0x00,0x00,
96354 -0x0B,0x40,0x82,0x00,
96355 -0xD2,0x5D,0x00,0x08,
96356 -0x0B,0xA8,0xA3,0x00,
96357 -0x08,0x00,0x62,0x8C,
96358 -0x00,0x00,0x00,0x00,
96359 -0x02,0x12,0x02,0x00,
96360 -0x3F,0x00,0x42,0x30,
96361 -0x2B,0x18,0x42,0x02,
96362 -0x4A,0xFF,0x60,0x14,
96363 -0x23,0x30,0x52,0x00,
96364 -0x21,0x30,0x00,0x00,
96365 -0x21,0x28,0x00,0x00,
96366 -0x30,0x1F,0x82,0x26,
96367 -0x30,0x00,0x43,0x8C,
96368 -0x96,0x5E,0x00,0x08,
96369 -0x82,0x25,0x03,0x00,
96370 -0x0F,0x00,0x11,0x3C,
96371 -0xFF,0xFF,0x25,0x36,
96372 -0x60,0x00,0x06,0x24,
96373 -0x5F,0x47,0x00,0x0C,
96374 -0x24,0x00,0x04,0x24,
96375 -0x25,0x22,0x00,0x0C,
96376 -0xE8,0x03,0x04,0x24,
96377 -0x00,0x60,0x10,0x40,
96378 -0x01,0x00,0x01,0x36,
96379 -0x01,0x00,0x21,0x38,
96380 -0x00,0x60,0x81,0x40,
96381 -0x24,0x00,0x04,0x24,
96382 -0x8A,0x47,0x00,0x0C,
96383 -0xFF,0xFF,0x25,0x36,
96384 -0x1F,0x00,0x53,0x30,
96385 -0x00,0x60,0x90,0x40,
96386 -0x54,0x22,0x00,0x0C,
96387 -0x64,0x00,0x04,0x24,
96388 -0x06,0x5D,0x00,0x08,
96389 -0x30,0x1F,0x90,0x26,
96390 -0x30,0x00,0xC5,0x8C,
96391 -0x2C,0x5F,0x00,0x08,
96392 -0x25,0xB0,0x04,0x3C,
96393 -0x13,0x00,0xA0,0x10,
96394 -0x00,0x00,0x00,0x00,
96395 -0x80,0x10,0x06,0x00,
96396 -0x21,0x10,0x43,0x00,
96397 -0x18,0x00,0x45,0x8C,
96398 -0x25,0xB0,0x04,0x3C,
96399 -0x02,0x5C,0x00,0x0C,
96400 -0x88,0x0C,0x84,0x34,
96401 -0x25,0xB0,0x04,0x3C,
96402 -0x9C,0x0C,0x84,0x34,
96403 -0x02,0x5C,0x00,0x0C,
96404 -0x21,0x28,0x00,0x00,
96405 -0xE6,0x5C,0x00,0x08,
96406 -0x21,0x10,0x00,0x00,
96407 -0xFF,0xFF,0x43,0x26,
96408 -0x42,0x18,0x03,0x00,
96409 -0x40,0x10,0x03,0x00,
96410 -0x21,0x10,0x43,0x00,
96411 -0x80,0x5E,0x00,0x08,
96412 -0x01,0x00,0x52,0x24,
96413 -0x30,0x00,0x65,0x8C,
96414 -0x67,0x5F,0x00,0x08,
96415 -0x25,0xB0,0x04,0x3C,
96416 -0x00,0xFF,0x84,0x30,
96417 -0x02,0x22,0x04,0x00,
96418 -0x08,0x00,0x80,0x10,
96419 -0x02,0x80,0x02,0x3C,
96420 -0xFF,0x00,0x02,0x24,
96421 -0x04,0x00,0x82,0x10,
96422 -0xCC,0xFF,0x03,0x24,
96423 -0x02,0x80,0x02,0x3C,
96424 -0x08,0x00,0xE0,0x03,
96425 -0x16,0x22,0x43,0xA0,
96426 -0x02,0x80,0x02,0x3C,
96427 -0x08,0x00,0xE0,0x03,
96428 -0x16,0x22,0x44,0xA0,
96429 -0x02,0x24,0x04,0x00,
96430 -0xFF,0x00,0x84,0x30,
96431 -0xC0,0x10,0x04,0x00,
96432 -0x21,0x10,0x44,0x00,
96433 -0x80,0x10,0x02,0x00,
96434 -0x21,0x10,0x44,0x00,
96435 -0x02,0x80,0x03,0x3C,
96436 -0x80,0x10,0x02,0x00,
96437 -0x30,0x1F,0x63,0x24,
96438 -0x20,0x00,0x84,0x2C,
96439 -0x09,0x00,0x80,0x10,
96440 -0x21,0x10,0x43,0x00,
96441 -0x0C,0x24,0x43,0x8C,
96442 -0x25,0xB0,0x02,0x3C,
96443 -0x74,0x03,0x42,0x34,
96444 -0x02,0x19,0x03,0x00,
96445 -0x7F,0x00,0x63,0x30,
96446 -0x00,0x00,0x43,0xAC,
96447 -0x08,0x00,0xE0,0x03,
96448 -0x00,0x00,0x00,0x00,
96449 -0x02,0x80,0x02,0x3C,
96450 -0xB0,0x55,0x43,0x8C,
96451 -0x25,0xB0,0x02,0x3C,
96452 -0x74,0x03,0x42,0x34,
96453 -0x02,0x19,0x03,0x00,
96454 -0x7F,0x00,0x63,0x30,
96455 -0x00,0x00,0x43,0xAC,
96456 -0x08,0x00,0xE0,0x03,
96457 -0x00,0x00,0x00,0x00,
96458 -0xFF,0x00,0x85,0x30,
96459 -0xD2,0xFF,0xA3,0x24,
96460 -0xFE,0xFF,0xA2,0x24,
96461 -0xDA,0xFF,0xA4,0x24,
96462 -0x04,0x00,0x63,0x2C,
96463 -0x08,0x00,0x84,0x2C,
96464 -0x06,0x00,0x60,0x14,
96465 -0xFF,0x00,0x42,0x30,
96466 -0xF0,0xFF,0xA2,0x24,
96467 -0xFC,0xFF,0xA3,0x24,
96468 -0x16,0x00,0x46,0x2C,
96469 -0x03,0x00,0x80,0x10,
96470 -0xFF,0x00,0x62,0x30,
96471 -0x08,0x00,0xE0,0x03,
96472 -0x00,0x00,0x00,0x00,
96473 -0xFA,0xFF,0xA3,0x24,
96474 -0xFC,0xFF,0xC0,0x10,
96475 -0x21,0x10,0xA0,0x00,
96476 -0x08,0x00,0xE0,0x03,
96477 -0xFF,0x00,0x62,0x30,
96478 -0x25,0xB0,0x03,0x3C,
96479 -0x03,0x0D,0x63,0x34,
96480 -0x00,0x00,0x62,0x90,
96481 -0x21,0x20,0x00,0x00,
96482 -0xFF,0x00,0x42,0x30,
96483 -0x08,0x00,0x42,0x34,
96484 -0x00,0x00,0x62,0xA0,
96485 -0x01,0x00,0x82,0x24,
96486 -0xFF,0x00,0x44,0x30,
96487 -0x06,0x00,0x83,0x2C,
96488 -0xFD,0xFF,0x60,0x14,
96489 -0x01,0x00,0x82,0x24,
96490 -0x25,0xB0,0x03,0x3C,
96491 -0x03,0x0D,0x63,0x34,
96492 -0x00,0x00,0x62,0x90,
96493 -0x21,0x20,0x00,0x00,
96494 -0xF7,0x00,0x42,0x30,
96495 -0x00,0x00,0x62,0xA0,
96496 -0x01,0x00,0x82,0x24,
96497 -0xFF,0x00,0x44,0x30,
96498 -0x06,0x00,0x83,0x2C,
96499 -0xFD,0xFF,0x60,0x14,
96500 -0x01,0x00,0x82,0x24,
96501 -0x25,0xB0,0x03,0x3C,
96502 -0x2D,0x0A,0x63,0x34,
96503 -0x00,0x00,0x62,0x90,
96504 -0x21,0x20,0x00,0x00,
96505 -0x3F,0x00,0x42,0x30,
96506 -0x00,0x00,0x62,0xA0,
96507 -0x01,0x00,0x82,0x24,
96508 -0xFF,0x00,0x44,0x30,
96509 -0x06,0x00,0x83,0x2C,
96510 -0xFD,0xFF,0x60,0x14,
96511 -0x01,0x00,0x82,0x24,
96512 -0x25,0xB0,0x03,0x3C,
96513 -0x2D,0x0A,0x63,0x34,
96514 -0x00,0x00,0x62,0x90,
96515 -0x21,0x20,0x00,0x00,
96516 -0xFF,0x00,0x42,0x30,
96517 -0x80,0x00,0x42,0x34,
96518 -0x00,0x00,0x62,0xA0,
96519 -0x01,0x00,0x82,0x24,
96520 -0xFF,0x00,0x44,0x30,
96521 -0x06,0x00,0x83,0x2C,
96522 -0xFC,0xFF,0x60,0x14,
96523 -0x00,0x00,0x00,0x00,
96524 -0x08,0x00,0xE0,0x03,
96525 -0x00,0x00,0x00,0x00,
96526 -0x25,0xB0,0x02,0x3C,
96527 -0xFF,0x00,0x03,0x3C,
96528 -0x82,0x01,0x49,0x34,
96529 -0x81,0x01,0x48,0x34,
96530 -0x24,0x10,0x83,0x00,
96531 -0x02,0x3C,0x02,0x00,
96532 -0x00,0xFF,0x63,0x34,
96533 -0x02,0x80,0x02,0x3C,
96534 -0x30,0x1F,0x45,0x24,
96535 -0x02,0x32,0x04,0x00,
96536 -0x01,0x00,0x02,0x24,
96537 -0x24,0x20,0x83,0x00,
96538 -0xE6,0x1D,0xA2,0xA0,
96539 -0xD4,0x1D,0xA0,0xAC,
96540 -0xD8,0x1D,0xA0,0xAC,
96541 -0xDC,0x1D,0xA0,0xAC,
96542 -0x06,0x00,0x80,0x14,
96543 -0xE0,0x1D,0xA0,0xAC,
96544 -0x00,0x00,0x02,0x91,
96545 -0x00,0x00,0x23,0x91,
96546 -0xE4,0x1D,0xA2,0xA0,
96547 -0x08,0x00,0xE0,0x03,
96548 -0xE5,0x1D,0xA3,0xA0,
96549 -0xE5,0x1D,0xA7,0xA0,
96550 -0x08,0x00,0xE0,0x03,
96551 -0xE4,0x1D,0xA6,0xA0,
96552 -0x02,0x80,0x03,0x3C,
96553 -0x30,0x1F,0x63,0x24,
96554 -0xE5,0x1D,0x66,0x90,
96555 -0xE4,0x1D,0x65,0x90,
96556 -0x25,0xB0,0x02,0x3C,
96557 -0x82,0x01,0x44,0x34,
96558 -0x81,0x01,0x42,0x34,
96559 -0x00,0x00,0x45,0xA0,
96560 -0x00,0x00,0x86,0xA0,
96561 -0x08,0x00,0xE0,0x03,
96562 -0xE6,0x1D,0x60,0xA0,
96563 -0x02,0x80,0x08,0x3C,
96564 -0x30,0x1F,0x04,0x25,
96565 -0xE6,0x1D,0x82,0x90,
96566 -0x00,0x00,0x00,0x00,
96567 -0x15,0x00,0x40,0x10,
96568 -0x21,0x18,0x00,0x00,
96569 -0xD8,0x1D,0x82,0x8C,
96570 -0xD4,0x1D,0x85,0x8C,
96571 -0x25,0xB0,0x03,0x3C,
96572 -0x40,0x11,0x02,0x00,
96573 -0x2B,0x10,0xA2,0x00,
96574 -0x82,0x01,0x67,0x34,
96575 -0x0F,0x00,0x40,0x10,
96576 -0x81,0x01,0x66,0x34,
96577 -0xE5,0x1D,0x83,0x90,
96578 -0xE4,0x1D,0x82,0x90,
96579 -0xF0,0x00,0x63,0x30,
96580 -0x1F,0x00,0x42,0x30,
96581 -0x00,0x00,0xC2,0xA0,
96582 -0x00,0x00,0xE3,0xA0,
96583 -0x30,0x1F,0x02,0x25,
96584 -0x01,0x00,0x03,0x24,
96585 -0xE0,0x1D,0x40,0xAC,
96586 -0xD4,0x1D,0x40,0xAC,
96587 -0xD8,0x1D,0x40,0xAC,
96588 -0xDC,0x1D,0x40,0xAC,
96589 -0x08,0x00,0xE0,0x03,
96590 -0x21,0x10,0x60,0x00,
96591 -0xDC,0x1D,0x82,0x8C,
96592 -0x25,0xB0,0x03,0x3C,
96593 -0x82,0x01,0x69,0x34,
96594 -0x40,0x11,0x02,0x00,
96595 -0x2B,0x10,0xA2,0x00,
96596 -0x0E,0x00,0x40,0x14,
96597 -0x81,0x01,0x66,0x34,
96598 -0xE0,0x1D,0x82,0x8C,
96599 -0x00,0x00,0x00,0x00,
96600 -0x40,0x11,0x02,0x00,
96601 -0x2B,0x10,0xA2,0x00,
96602 -0x08,0x00,0x40,0x14,
96603 -0x00,0x00,0x00,0x00,
96604 -0xE5,0x1D,0x83,0x90,
96605 -0xE4,0x1D,0x82,0x90,
96606 -0x00,0x00,0x00,0x00,
96607 -0x00,0x00,0xC2,0xA0,
96608 -0x00,0x00,0x23,0xA1,
96609 -0x20,0x60,0x00,0x08,
96610 -0x30,0x1F,0x02,0x25,
96611 -0xE5,0x1D,0x83,0x90,
96612 -0xE4,0x1D,0x82,0x90,
96613 -0xF0,0x00,0x63,0x30,
96614 -0x7F,0x00,0x42,0x30,
96615 -0x00,0x00,0xC2,0xA0,
96616 -0x00,0x00,0x23,0xA1,
96617 -0x20,0x60,0x00,0x08,
96618 -0x30,0x1F,0x02,0x25,
96619 -0x00,0x00,0x85,0xAC,
96620 -0x21,0x10,0x00,0x00,
96621 -0x01,0x00,0x42,0x24,
96622 -0xFF,0x00,0x42,0x30,
96623 -0x06,0x00,0x43,0x2C,
96624 -0xFC,0xFF,0x60,0x14,
96625 -0x00,0x00,0x00,0x00,
96626 -0x08,0x00,0xE0,0x03,
96627 -0x00,0x00,0x00,0x00,
96628 -0x25,0xB0,0x03,0x3C,
96629 -0x33,0x02,0x65,0x34,
96630 -0x00,0x11,0x04,0x00,
96631 -0x00,0x00,0xA2,0xA0,
96632 -0x30,0x02,0x63,0x34,
96633 -0x00,0x00,0x65,0x8C,
96634 -0x0F,0x00,0x02,0x3C,
96635 -0xFF,0xFF,0x42,0x34,
96636 -0x24,0x28,0xA2,0x00,
96637 -0x01,0x00,0x03,0x24,
96638 -0x04,0x18,0x83,0x00,
96639 -0x02,0x00,0xA0,0x10,
96640 -0x21,0x10,0x00,0x00,
96641 -0xFF,0xFF,0x62,0x30,
96642 -0x08,0x00,0xE0,0x03,
96643 -0x00,0x00,0x00,0x00,
96644 -0xE0,0xFF,0xBD,0x27,
96645 -0x14,0x00,0xB1,0xAF,
96646 -0x25,0xB0,0x11,0x3C,
96647 -0x18,0x00,0xB2,0xAF,
96648 -0x4C,0x00,0x22,0x36,
96649 -0x1C,0x00,0xBF,0xAF,
96650 -0x10,0x00,0xB0,0xAF,
96651 -0x00,0x00,0x44,0x90,
96652 -0x02,0x80,0x03,0x3C,
96653 -0x02,0x00,0x02,0x24,
96654 -0xFF,0x00,0x84,0x30,
96655 -0x07,0x00,0x82,0x10,
96656 -0x30,0x1F,0x72,0x24,
96657 -0x1C,0x00,0xBF,0x8F,
96658 -0x18,0x00,0xB2,0x8F,
96659 -0x14,0x00,0xB1,0x8F,
96660 -0x10,0x00,0xB0,0x8F,
96661 -0x08,0x00,0xE0,0x03,
96662 -0x20,0x00,0xBD,0x27,
96663 -0x8A,0x36,0x43,0x96,
96664 -0x01,0x00,0x02,0x24,
96665 -0xF7,0xFF,0x62,0x14,
96666 -0x00,0x00,0x00,0x00,
96667 -0x02,0x80,0x02,0x3C,
96668 -0xF4,0x5E,0x43,0x90,
96669 -0x00,0x00,0x00,0x00,
96670 -0xF2,0xFF,0x60,0x14,
96671 -0x21,0x20,0x00,0x00,
96672 -0x4C,0x60,0x00,0x0C,
96673 -0x00,0x00,0x00,0x00,
96674 -0x04,0x00,0x04,0x24,
96675 -0x4C,0x60,0x00,0x0C,
96676 -0x21,0x80,0x40,0x00,
96677 -0x25,0x80,0x02,0x02,
96678 -0x02,0x80,0x04,0x3C,
96679 -0x33,0x02,0x23,0x36,
96680 -0x08,0x00,0x02,0x24,
96681 -0xFF,0xFF,0x10,0x32,
96682 -0x40,0x00,0x27,0x36,
96683 -0xEC,0xE8,0x84,0x24,
96684 -0x00,0x00,0x62,0xA0,
96685 -0xE3,0xFF,0x00,0x16,
96686 -0x00,0x00,0x00,0x00,
96687 -0x00,0x00,0xE2,0x94,
96688 -0x88,0x36,0x43,0x96,
96689 -0xFF,0xDF,0x42,0x30,
96690 -0x01,0x00,0x63,0x24,
96691 -0x00,0x20,0x46,0x34,
96692 -0x88,0x36,0x43,0xA6,
96693 -0xFF,0xFF,0x65,0x30,
96694 -0x00,0x00,0xE2,0xA4,
96695 -0x00,0x00,0xE6,0xA4,
96696 -0x2F,0x55,0x00,0x0C,
96697 -0x00,0x00,0x00,0x00,
96698 -0x69,0x60,0x00,0x08,
96699 -0x00,0x00,0x00,0x00,
96700 -0x25,0xB0,0x02,0x3C,
96701 -0x21,0x20,0x82,0x00,
96702 -0x00,0x00,0x85,0xAC,
96703 -0x21,0x10,0x00,0x00,
96704 -0x01,0x00,0x42,0x24,
96705 -0xFF,0x00,0x42,0x30,
96706 -0x06,0x00,0x43,0x2C,
96707 -0xFC,0xFF,0x60,0x14,
96708 -0x00,0x00,0x00,0x00,
96709 -0x08,0x00,0xE0,0x03,
96710 -0x00,0x00,0x00,0x00,
96711 -0xE8,0xFF,0xBD,0x27,
96712 -0x10,0x00,0xBF,0xAF,
96713 -0xDF,0x2F,0x00,0x0C,
96714 -0x00,0x00,0x00,0x00,
96715 -0x10,0x00,0xBF,0x8F,
96716 -0x02,0x80,0x02,0x3C,
96717 -0xE8,0x03,0x03,0x24,
96718 -0x34,0x5F,0x43,0xAC,
96719 -0x18,0x00,0xBD,0x27,
96720 -0x08,0x00,0xE0,0x03,
96721 -0x21,0x10,0x00,0x00,
96722 -0x08,0x00,0xE0,0x03,
96723 -0x00,0x00,0x00,0x00,
96724 -0x08,0x00,0xE0,0x03,
96725 -0x00,0x00,0x00,0x00,
96726 -0x08,0x00,0xE0,0x03,
96727 -0x00,0x00,0x00,0x00,
96728 -0x08,0x00,0xE0,0x03,
96729 -0x00,0x00,0x00,0x00,
96730 -0x08,0x00,0xE0,0x03,
96731 -0x00,0x00,0x00,0x00,
96732 -0x08,0x00,0xE0,0x03,
96733 -0x00,0x00,0x00,0x00,
96734 -0x02,0x80,0x02,0x3C,
96735 -0xFA,0x5E,0x40,0xA0,
96736 -0xFF,0x00,0x85,0x30,
96737 -0x02,0x80,0x03,0x3C,
96738 -0x02,0x80,0x02,0x3C,
96739 -0x0C,0x5F,0x60,0xA0,
96740 -0x08,0x00,0xA4,0x2C,
96741 -0x0E,0x5F,0x40,0xA0,
96742 -0x02,0x80,0x03,0x3C,
96743 -0x02,0x80,0x02,0x3C,
96744 -0x16,0x5F,0x60,0xA0,
96745 -0xF4,0x5E,0x45,0xA0,
96746 -0x2C,0x00,0x80,0x10,
96747 -0x02,0x80,0x03,0x3C,
96748 -0x80,0x10,0x05,0x00,
96749 -0x94,0xF0,0x63,0x24,
96750 -0x21,0x10,0x43,0x00,
96751 -0x00,0x00,0x44,0x8C,
96752 -0x00,0x00,0x00,0x00,
96753 -0x08,0x00,0x80,0x00,
96754 -0x00,0x00,0x00,0x00,
96755 -0x02,0x80,0x05,0x3C,
96756 -0x30,0x1F,0xA5,0x24,
96757 -0xD0,0x1B,0xA4,0x8C,
96758 -0x00,0x70,0x02,0x3C,
96759 -0x02,0x00,0x42,0x34,
96760 -0x25,0x20,0x82,0x00,
96761 -0x41,0xB0,0x03,0x3C,
96762 -0x00,0x00,0x64,0xAC,
96763 -0x08,0x00,0xE0,0x03,
96764 -0xD0,0x1B,0xA4,0xAC,
96765 -0x02,0x80,0x05,0x3C,
96766 -0x30,0x1F,0xA5,0x24,
96767 -0xD0,0x1B,0xA4,0x8C,
96768 -0x00,0x70,0x02,0x3C,
96769 -0x02,0x00,0x42,0x34,
96770 -0x27,0x10,0x02,0x00,
96771 -0x24,0x20,0x82,0x00,
96772 -0x41,0xB0,0x03,0x3C,
96773 -0x00,0x00,0x64,0xAC,
96774 -0x08,0x00,0xE0,0x03,
96775 -0xD0,0x1B,0xA4,0xAC,
96776 -0x02,0x80,0x05,0x3C,
96777 -0x30,0x1F,0xA5,0x24,
96778 -0xD0,0x1B,0xA4,0x8C,
96779 -0x00,0x70,0x02,0x3C,
96780 -0x27,0x10,0x02,0x00,
96781 -0x24,0x20,0x82,0x00,
96782 -0x02,0x80,0x07,0x3C,
96783 -0x41,0xB0,0x02,0x3C,
96784 -0x01,0x00,0x03,0x24,
96785 -0x00,0x00,0x44,0xAC,
96786 -0x10,0x5F,0xE3,0xA0,
96787 -0x10,0x5F,0xE6,0x90,
96788 -0x02,0x80,0x02,0x3C,
96789 -0xD0,0x1B,0xA4,0xAC,
96790 -0x11,0x5F,0x46,0xA0,
96791 -0x08,0x00,0xE0,0x03,
96792 -0x00,0x00,0x00,0x00,
96793 -0x02,0x80,0x05,0x3C,
96794 -0x30,0x1F,0xA5,0x24,
96795 -0xD0,0x1B,0xA4,0x8C,
96796 -0x00,0x70,0x02,0x3C,
96797 -0x27,0x10,0x02,0x00,
96798 -0x24,0x20,0x82,0x00,
96799 -0x41,0xB0,0x03,0x3C,
96800 -0x00,0x00,0x64,0xAC,
96801 -0x08,0x00,0xE0,0x03,
96802 -0xD0,0x1B,0xA4,0xAC,
96803 -0xE0,0xFF,0xBD,0x27,
96804 -0x10,0x00,0xB0,0xAF,
96805 -0x02,0x80,0x10,0x3C,
96806 -0xF4,0x5E,0x02,0x92,
96807 -0x18,0x00,0xB2,0xAF,
96808 -0x14,0x00,0xB1,0xAF,
96809 -0x1C,0x00,0xBF,0xAF,
96810 -0x21,0x90,0x80,0x00,
96811 -0x1C,0x00,0x40,0x10,
96812 -0xFF,0x00,0xB1,0x30,
96813 -0x02,0x80,0x03,0x3C,
96814 -0xDE,0x5D,0x62,0x90,
96815 -0x00,0x00,0x00,0x00,
96816 -0x02,0x00,0x42,0x30,
96817 -0x1C,0x00,0x40,0x14,
96818 -0x00,0x00,0x00,0x00,
96819 -0x00,0x08,0x04,0x24,
96820 -0x00,0x02,0x05,0x3C,
96821 -0xA9,0x45,0x00,0x0C,
96822 -0x01,0x00,0x06,0x24,
96823 -0x02,0x80,0x03,0x3C,
96824 -0xF6,0x5E,0x62,0x90,
96825 -0x00,0x00,0x00,0x00,
96826 -0x0F,0x00,0x42,0x30,
96827 -0x0C,0x00,0x42,0x28,
96828 -0x06,0x00,0x40,0x10,
96829 -0x08,0x00,0x02,0x24,
96830 -0x00,0x00,0x44,0x96,
96831 -0x00,0x00,0x00,0x00,
96832 -0x0C,0x00,0x83,0x30,
96833 -0x1B,0x00,0x62,0x10,
96834 -0x02,0x80,0x02,0x3C,
96835 -0xF4,0x5E,0x02,0x92,
96836 -0x05,0x00,0x03,0x24,
96837 -0xFF,0x00,0x42,0x30,
96838 -0x0B,0x00,0x43,0x10,
96839 -0x02,0x80,0x03,0x3C,
96840 -0x1C,0x00,0xBF,0x8F,
96841 -0x18,0x00,0xB2,0x8F,
96842 -0x14,0x00,0xB1,0x8F,
96843 -0x10,0x00,0xB0,0x8F,
96844 -0x08,0x00,0xE0,0x03,
96845 -0x20,0x00,0xBD,0x27,
96846 -0x9B,0x30,0x00,0x0C,
96847 -0x01,0x00,0x04,0x24,
96848 -0x0C,0x61,0x00,0x08,
96849 -0x00,0x08,0x04,0x24,
96850 -0x0F,0x5F,0x62,0x90,
96851 -0x00,0x00,0x00,0x00,
96852 -0x24,0x10,0x22,0x02,
96853 -0xF2,0xFF,0x40,0x10,
96854 -0x02,0x80,0x03,0x3C,
96855 -0x0E,0x5F,0x62,0x90,
96856 -0x00,0x00,0x00,0x00,
96857 -0x04,0x00,0x42,0x34,
96858 -0x0E,0x5F,0x62,0xA0,
96859 -0x20,0x61,0x00,0x08,
96860 -0x00,0x00,0x00,0x00,
96861 -0x0D,0x5F,0x43,0x90,
96862 -0x00,0x00,0x00,0x00,
96863 -0x03,0x00,0x60,0x14,
96864 -0x00,0x10,0x82,0x34,
96865 -0x1B,0x61,0x00,0x08,
96866 -0x00,0x00,0x42,0xA6,
96867 -0x0C,0x00,0x04,0x24,
96868 -0x64,0x31,0x00,0x0C,
96869 -0x21,0x28,0x00,0x00,
96870 -0x1B,0x61,0x00,0x08,
96871 -0x00,0x00,0x00,0x00,
96872 -0xE8,0xFF,0xBD,0x27,
96873 -0xFF,0x00,0xA5,0x30,
96874 -0x10,0x00,0xB0,0xAF,
96875 -0x14,0x00,0xBF,0xAF,
96876 -0x18,0x00,0xA0,0x14,
96877 -0xFF,0x00,0x90,0x30,
96878 -0x2C,0x00,0x00,0x12,
96879 -0x01,0x00,0x05,0x24,
96880 -0x02,0x80,0x03,0x3C,
96881 -0x01,0x00,0x07,0x24,
96882 -0x0C,0x5F,0x67,0xA0,
96883 -0x02,0x80,0x08,0x3C,
96884 -0x0E,0x5F,0x02,0x91,
96885 -0x02,0x00,0x04,0x24,
96886 -0x21,0x28,0x00,0x00,
96887 -0x02,0x00,0x42,0x34,
96888 -0x00,0xF0,0x06,0x34,
96889 -0x0E,0x5F,0x02,0xA1,
96890 -0x8C,0x23,0x00,0x0C,
96891 -0x00,0x00,0x00,0x00,
96892 -0x14,0x00,0xBF,0x8F,
96893 -0x10,0x00,0xB0,0x8F,
96894 -0x42,0xB0,0x02,0x3C,
96895 -0x44,0x00,0x03,0x24,
96896 -0x03,0x00,0x42,0x34,
96897 -0x18,0x00,0xBD,0x27,
96898 -0x00,0x00,0x43,0xA0,
96899 -0x08,0x00,0xE0,0x03,
96900 -0x00,0x00,0x00,0x00,
96901 -0x01,0x00,0x03,0x24,
96902 -0x02,0x80,0x02,0x3C,
96903 -0x0C,0x5F,0x43,0xA0,
96904 -0x02,0x80,0x02,0x3C,
96905 -0x0F,0x5F,0x43,0x90,
96906 -0x0F,0x00,0x02,0x24,
96907 -0x02,0x80,0x05,0x3C,
96908 -0x0F,0x00,0x63,0x30,
96909 -0x07,0x00,0x62,0x10,
96910 -0x01,0x00,0x04,0x24,
96911 -0x0E,0x5F,0xA2,0x90,
96912 -0x00,0x00,0x00,0x00,
96913 -0x01,0x00,0x42,0x34,
96914 -0x0E,0x5F,0xA2,0xA0,
96915 -0xFE,0x4E,0x00,0x0C,
96916 -0x00,0x00,0x00,0x00,
96917 -0xDB,0xFF,0x00,0x16,
96918 -0x02,0x80,0x03,0x3C,
96919 -0x14,0x00,0xBF,0x8F,
96920 -0x10,0x00,0xB0,0x8F,
96921 -0x08,0x00,0xE0,0x03,
96922 -0x18,0x00,0xBD,0x27,
96923 -0x02,0x80,0x02,0x3C,
96924 -0x0C,0x5F,0x40,0xA0,
96925 -0x02,0x80,0x03,0x3C,
96926 -0xF5,0x5E,0x64,0x90,
96927 -0x14,0x00,0xBF,0x8F,
96928 -0x10,0x00,0xB0,0x8F,
96929 -0xFF,0x00,0x84,0x30,
96930 -0x64,0x31,0x00,0x08,
96931 -0x18,0x00,0xBD,0x27,
96932 -0xE0,0xFF,0xBD,0x27,
96933 -0xFF,0x00,0xA5,0x30,
96934 -0x14,0x00,0xB1,0xAF,
96935 -0x18,0x00,0xBF,0xAF,
96936 -0x10,0x00,0xB0,0xAF,
96937 -0x03,0x00,0xA0,0x14,
96938 -0xFF,0x00,0x91,0x30,
96939 -0x3A,0x00,0x20,0x12,
96940 -0x02,0x80,0x02,0x3C,
96941 -0x02,0x80,0x10,0x3C,
96942 -0x0E,0x5F,0x02,0x92,
96943 -0xFB,0xFF,0x03,0x24,
96944 -0x24,0x10,0x43,0x00,
96945 -0x0E,0x5F,0x02,0xA2,
96946 -0x10,0x00,0xA0,0x14,
96947 -0x02,0x80,0x03,0x3C,
96948 -0x0E,0x5F,0x02,0x92,
96949 -0xFE,0xFF,0x03,0x24,
96950 -0x24,0x10,0x43,0x00,
96951 -0x0E,0x5F,0x02,0xA2,
96952 -0x19,0x00,0x20,0x16,
96953 -0x02,0x80,0x02,0x3C,
96954 -0x0E,0x5F,0x02,0x92,
96955 -0xFD,0xFF,0x03,0x24,
96956 -0x18,0x00,0xBF,0x8F,
96957 -0x24,0x10,0x43,0x00,
96958 -0x0E,0x5F,0x02,0xA2,
96959 -0x14,0x00,0xB1,0x8F,
96960 -0x10,0x00,0xB0,0x8F,
96961 -0x08,0x00,0xE0,0x03,
96962 -0x20,0x00,0xBD,0x27,
96963 -0x01,0x00,0x04,0x24,
96964 -0x0C,0x5F,0x64,0xA0,
96965 -0x0E,0x5F,0x02,0x92,
96966 -0x02,0x80,0x03,0x3C,
96967 -0x01,0x00,0x42,0x34,
96968 -0x0E,0x5F,0x02,0xA2,
96969 -0x0D,0x5F,0x62,0x90,
96970 -0x02,0x00,0x03,0x24,
96971 -0xFF,0x00,0x42,0x30,
96972 -0x23,0x00,0x43,0x10,
96973 -0x00,0x00,0x00,0x00,
96974 -0xFE,0x4E,0x00,0x0C,
96975 -0x01,0x00,0x04,0x24,
96976 -0xE9,0xFF,0x20,0x12,
96977 -0x02,0x80,0x02,0x3C,
96978 -0x01,0x00,0x04,0x24,
96979 -0x0C,0x5F,0x44,0xA0,
96980 -0x0E,0x5F,0x03,0x92,
96981 -0x02,0x00,0x04,0x24,
96982 -0x21,0x28,0x00,0x00,
96983 -0x02,0x00,0x63,0x34,
96984 -0x00,0xF0,0x06,0x34,
96985 -0x0E,0x5F,0x03,0xA2,
96986 -0x8C,0x23,0x00,0x0C,
96987 -0x00,0x00,0x00,0x00,
96988 -0x18,0x00,0xBF,0x8F,
96989 -0x14,0x00,0xB1,0x8F,
96990 -0x10,0x00,0xB0,0x8F,
96991 -0x42,0xB0,0x02,0x3C,
96992 -0x44,0x00,0x03,0x24,
96993 -0x03,0x00,0x42,0x34,
96994 -0x20,0x00,0xBD,0x27,
96995 -0x00,0x00,0x43,0xA0,
96996 -0x08,0x00,0xE0,0x03,
96997 -0x00,0x00,0x00,0x00,
96998 -0x0C,0x5F,0x40,0xA0,
96999 -0x02,0x80,0x03,0x3C,
97000 -0xF5,0x5E,0x64,0x90,
97001 -0x18,0x00,0xBF,0x8F,
97002 -0x14,0x00,0xB1,0x8F,
97003 -0x10,0x00,0xB0,0x8F,
97004 -0x01,0x00,0x05,0x24,
97005 -0xFF,0x00,0x84,0x30,
97006 -0x64,0x31,0x00,0x08,
97007 -0x20,0x00,0xBD,0x27,
97008 -0x0D,0x30,0x00,0x0C,
97009 -0x00,0x00,0x00,0x00,
97010 -0x0C,0x00,0x04,0x24,
97011 -0x64,0x31,0x00,0x0C,
97012 -0x01,0x00,0x05,0x24,
97013 -0x90,0x61,0x00,0x08,
97014 -0x00,0x00,0x00,0x00,
97015 -0xE8,0xFF,0xBD,0x27,
97016 -0x10,0x00,0xB2,0xAF,
97017 -0x0C,0x00,0xB1,0xAF,
97018 -0x08,0x00,0xB0,0xAF,
97019 -0x21,0x40,0xE0,0x00,
97020 -0x21,0x90,0xA0,0x03,
97021 -0x21,0x60,0xC0,0x00,
97022 -0x21,0x78,0x80,0x00,
97023 -0x45,0x00,0xE0,0x14,
97024 -0x21,0x50,0xA0,0x00,
97025 -0x2B,0x10,0xA6,0x00,
97026 -0x78,0x00,0x40,0x10,
97027 -0xFF,0xFF,0x02,0x34,
97028 -0x2B,0x10,0x46,0x00,
97029 -0x8F,0x01,0x40,0x10,
97030 -0x21,0x28,0xC0,0x00,
97031 -0xFF,0x00,0x02,0x3C,
97032 -0xFF,0xFF,0x42,0x34,
97033 -0x10,0x00,0x03,0x24,
97034 -0x2B,0x10,0x46,0x00,
97035 -0x18,0x00,0x04,0x24,
97036 -0x21,0x30,0x60,0x00,
97037 -0x0B,0x30,0x82,0x00,
97038 -0x02,0x80,0x03,0x3C,
97039 -0x06,0x10,0xC5,0x00,
97040 -0xB4,0xF0,0x63,0x24,
97041 -0x21,0x10,0x43,0x00,
97042 -0x00,0x00,0x44,0x90,
97043 -0x20,0x00,0x02,0x24,
97044 -0x21,0x20,0x86,0x00,
97045 -0x23,0x30,0x44,0x00,
97046 -0x08,0x00,0xC0,0x10,
97047 -0x02,0x4C,0x0C,0x00,
97048 -0x23,0x10,0x46,0x00,
97049 -0x06,0x10,0x4F,0x00,
97050 -0x04,0x18,0xCA,0x00,
97051 -0x25,0x50,0x62,0x00,
97052 -0x04,0x60,0xCC,0x00,
97053 -0x04,0x78,0xCF,0x00,
97054 -0x02,0x4C,0x0C,0x00,
97055 -0x1B,0x00,0x49,0x01,
97056 -0x02,0x00,0x20,0x15,
97057 -0x00,0x00,0x00,0x00,
97058 -0x0D,0x00,0x07,0x00,
97059 -0xFF,0xFF,0x87,0x31,
97060 -0x02,0x24,0x0F,0x00,
97061 -0x12,0x18,0x00,0x00,
97062 -0x10,0x28,0x00,0x00,
97063 -0x00,0x14,0x05,0x00,
97064 -0x25,0x28,0x44,0x00,
97065 -0x18,0x00,0x67,0x00,
97066 -0x12,0x58,0x00,0x00,
97067 -0x2B,0x18,0xAB,0x00,
97068 -0x00,0x00,0x00,0x00,
97069 -0x1B,0x00,0x49,0x01,
97070 -0x02,0x00,0x20,0x15,
97071 -0x00,0x00,0x00,0x00,
97072 -0x0D,0x00,0x07,0x00,
97073 -0x08,0x00,0x60,0x10,
97074 -0x00,0x00,0x00,0x00,
97075 -0x21,0x28,0xAC,0x00,
97076 -0x2B,0x10,0xAC,0x00,
97077 -0x04,0x00,0x40,0x14,
97078 -0x2B,0x10,0xAB,0x00,
97079 -0x00,0x00,0x42,0x38,
97080 -0x21,0x18,0xAC,0x00,
97081 -0x0B,0x28,0x62,0x00,
97082 -0x23,0x28,0xAB,0x00,
97083 -0x1B,0x00,0xA9,0x00,
97084 -0x02,0x00,0x20,0x15,
97085 -0x00,0x00,0x00,0x00,
97086 -0x0D,0x00,0x07,0x00,
97087 -0xFF,0xFF,0xE4,0x31,
97088 -0x12,0x18,0x00,0x00,
97089 -0x10,0x40,0x00,0x00,
97090 -0x00,0x00,0x00,0x00,
97091 -0x8F,0x62,0x00,0x08,
97092 -0x18,0x00,0x67,0x00,
97093 -0x2B,0x10,0xA7,0x00,
97094 -0x0A,0x00,0x40,0x10,
97095 -0xFF,0xFF,0x02,0x34,
97096 -0x10,0x00,0xB2,0x8F,
97097 -0x0C,0x00,0xB1,0x8F,
97098 -0x08,0x00,0xB0,0x8F,
97099 -0x21,0x10,0x80,0x00,
97100 -0x21,0x18,0xA0,0x00,
97101 -0x00,0x00,0xA4,0xAF,
97102 -0x04,0x00,0xA5,0xAF,
97103 -0x08,0x00,0xE0,0x03,
97104 -0x18,0x00,0xBD,0x27,
97105 -0x2B,0x10,0x47,0x00,
97106 -0xD2,0x00,0x40,0x10,
97107 -0x00,0x01,0xE3,0x2C,
97108 -0xFF,0x00,0x02,0x3C,
97109 -0x10,0x00,0x03,0x24,
97110 -0xFF,0xFF,0x42,0x34,
97111 -0x2B,0x10,0x47,0x00,
97112 -0x18,0x00,0x04,0x24,
97113 -0x21,0x28,0x60,0x00,
97114 -0x0B,0x28,0x82,0x00,
97115 -0x06,0x10,0xA8,0x00,
97116 -0x02,0x80,0x03,0x3C,
97117 -0xB4,0xF0,0x63,0x24,
97118 -0x21,0x10,0x43,0x00,
97119 -0x00,0x00,0x44,0x90,
97120 -0x20,0x00,0x02,0x24,
97121 -0x21,0x20,0x85,0x00,
97122 -0x23,0x30,0x44,0x00,
97123 -0xCE,0x00,0xC0,0x14,
97124 -0x23,0x38,0x46,0x00,
97125 -0x2B,0x10,0x0A,0x01,
97126 -0x04,0x00,0x40,0x14,
97127 -0x23,0x20,0xEC,0x01,
97128 -0x2B,0x10,0xEC,0x01,
97129 -0x05,0x00,0x40,0x14,
97130 -0x00,0x00,0x00,0x00,
97131 -0x2B,0x10,0xE4,0x01,
97132 -0x23,0x18,0x48,0x01,
97133 -0x23,0x50,0x62,0x00,
97134 -0x21,0x78,0x80,0x00,
97135 -0x04,0x00,0x40,0x12,
97136 -0x21,0xC0,0xE0,0x01,
97137 -0x21,0xC8,0x40,0x01,
97138 -0x00,0x00,0x58,0xAE,
97139 -0x04,0x00,0x59,0xAE,
97140 -0x00,0x00,0xA2,0x8F,
97141 -0x04,0x00,0xA3,0x8F,
97142 -0x10,0x00,0xB2,0x8F,
97143 -0x0C,0x00,0xB1,0x8F,
97144 -0x08,0x00,0xB0,0x8F,
97145 -0x08,0x00,0xE0,0x03,
97146 -0x18,0x00,0xBD,0x27,
97147 -0x53,0x00,0xC0,0x10,
97148 -0x01,0x00,0x02,0x24,
97149 -0xFF,0xFF,0x02,0x34,
97150 -0x2B,0x10,0x4C,0x00,
97151 -0x59,0x00,0x40,0x14,
97152 -0xFF,0x00,0x02,0x3C,
97153 -0x00,0x01,0x83,0x2D,
97154 -0x08,0x00,0x02,0x24,
97155 -0x21,0x28,0x00,0x00,
97156 -0x0A,0x28,0x43,0x00,
97157 -0x06,0x10,0xAC,0x00,
97158 -0x02,0x80,0x03,0x3C,
97159 -0xB4,0xF0,0x63,0x24,
97160 -0x21,0x10,0x43,0x00,
97161 -0x00,0x00,0x44,0x90,
97162 -0x20,0x00,0x02,0x24,
97163 -0x21,0x20,0x85,0x00,
97164 -0x23,0x30,0x44,0x00,
97165 -0x5B,0x00,0xC0,0x14,
97166 -0x00,0x00,0x00,0x00,
97167 -0x23,0x50,0x4C,0x01,
97168 -0x02,0x4C,0x0C,0x00,
97169 -0xFF,0xFF,0x8D,0x31,
97170 -0x1B,0x00,0x49,0x01,
97171 -0x02,0x00,0x20,0x15,
97172 -0x00,0x00,0x00,0x00,
97173 -0x0D,0x00,0x07,0x00,
97174 -0x02,0x24,0x0F,0x00,
97175 -0x12,0x18,0x00,0x00,
97176 -0x10,0x28,0x00,0x00,
97177 -0x00,0x14,0x05,0x00,
97178 -0x25,0x28,0x44,0x00,
97179 -0x18,0x00,0x6D,0x00,
97180 -0x12,0x58,0x00,0x00,
97181 -0x2B,0x18,0xAB,0x00,
97182 -0x00,0x00,0x00,0x00,
97183 -0x1B,0x00,0x49,0x01,
97184 -0x02,0x00,0x20,0x15,
97185 -0x00,0x00,0x00,0x00,
97186 -0x0D,0x00,0x07,0x00,
97187 -0x08,0x00,0x60,0x10,
97188 -0x00,0x00,0x00,0x00,
97189 -0x21,0x28,0xAC,0x00,
97190 -0x2B,0x10,0xAC,0x00,
97191 -0x04,0x00,0x40,0x14,
97192 -0x2B,0x10,0xAB,0x00,
97193 -0x00,0x00,0x42,0x38,
97194 -0x21,0x18,0xAC,0x00,
97195 -0x0B,0x28,0x62,0x00,
97196 -0x23,0x28,0xAB,0x00,
97197 -0x1B,0x00,0xA9,0x00,
97198 -0x02,0x00,0x20,0x15,
97199 -0x00,0x00,0x00,0x00,
97200 -0x0D,0x00,0x07,0x00,
97201 -0xFF,0xFF,0xE4,0x31,
97202 -0x12,0x18,0x00,0x00,
97203 -0x10,0x40,0x00,0x00,
97204 -0x00,0x00,0x00,0x00,
97205 -0x00,0x00,0x00,0x00,
97206 -0x18,0x00,0x6D,0x00,
97207 -0x00,0x14,0x08,0x00,
97208 -0x12,0x58,0x00,0x00,
97209 -0x25,0x40,0x44,0x00,
97210 -0x2B,0x18,0x0B,0x01,
97211 -0x1B,0x00,0xA9,0x00,
97212 -0x02,0x00,0x20,0x15,
97213 -0x00,0x00,0x00,0x00,
97214 -0x0D,0x00,0x07,0x00,
97215 -0x08,0x00,0x60,0x10,
97216 -0x00,0x00,0x00,0x00,
97217 -0x21,0x40,0x0C,0x01,
97218 -0x2B,0x10,0x0C,0x01,
97219 -0x04,0x00,0x40,0x14,
97220 -0x2B,0x10,0x0B,0x01,
97221 -0x21,0x18,0x0C,0x01,
97222 -0x00,0x00,0x42,0x38,
97223 -0x0B,0x40,0x62,0x00,
97224 -0xAB,0xFF,0x40,0x12,
97225 -0x23,0x78,0x0B,0x01,
97226 -0x06,0xC0,0xCF,0x00,
97227 -0x21,0xC8,0x00,0x00,
97228 -0x00,0x00,0x58,0xAE,
97229 -0x4C,0x62,0x00,0x08,
97230 -0x04,0x00,0x59,0xAE,
97231 -0x1B,0x00,0x47,0x00,
97232 -0x02,0x00,0xE0,0x14,
97233 -0x00,0x00,0x00,0x00,
97234 -0x0D,0x00,0x07,0x00,
97235 -0xFF,0xFF,0x02,0x34,
97236 -0x12,0x60,0x00,0x00,
97237 -0x2B,0x10,0x4C,0x00,
97238 -0xAB,0xFF,0x40,0x10,
97239 -0x00,0x01,0x83,0x2D,
97240 -0xFF,0x00,0x02,0x3C,
97241 -0x10,0x00,0x03,0x24,
97242 -0xFF,0xFF,0x42,0x34,
97243 -0x2B,0x10,0x4C,0x00,
97244 -0x18,0x00,0x04,0x24,
97245 -0x21,0x28,0x60,0x00,
97246 -0x0B,0x28,0x82,0x00,
97247 -0x02,0x80,0x03,0x3C,
97248 -0x06,0x10,0xAC,0x00,
97249 -0xB4,0xF0,0x63,0x24,
97250 -0x21,0x10,0x43,0x00,
97251 -0x00,0x00,0x44,0x90,
97252 -0x20,0x00,0x02,0x24,
97253 -0x21,0x20,0x85,0x00,
97254 -0x23,0x30,0x44,0x00,
97255 -0xA7,0xFF,0xC0,0x10,
97256 -0x00,0x00,0x00,0x00,
97257 -0x23,0x38,0x46,0x00,
97258 -0x04,0x60,0xCC,0x00,
97259 -0x06,0x58,0xEA,0x00,
97260 -0x02,0x4C,0x0C,0x00,
97261 -0x1B,0x00,0x69,0x01,
97262 -0x02,0x00,0x20,0x15,
97263 -0x00,0x00,0x00,0x00,
97264 -0x0D,0x00,0x07,0x00,
97265 -0xFF,0xFF,0x8D,0x31,
97266 -0x06,0x18,0xEF,0x00,
97267 -0x04,0x10,0xCA,0x00,
97268 -0x25,0x50,0x43,0x00,
97269 -0x02,0x24,0x0A,0x00,
97270 -0x12,0x28,0x00,0x00,
97271 -0x10,0x40,0x00,0x00,
97272 -0x00,0x14,0x08,0x00,
97273 -0x25,0x40,0x44,0x00,
97274 -0x18,0x00,0xAD,0x00,
97275 -0x12,0x28,0x00,0x00,
97276 -0x2B,0x18,0x05,0x01,
97277 -0x00,0x00,0x00,0x00,
97278 -0x1B,0x00,0x69,0x01,
97279 -0x02,0x00,0x20,0x15,
97280 -0x00,0x00,0x00,0x00,
97281 -0x0D,0x00,0x07,0x00,
97282 -0x05,0x00,0x60,0x10,
97283 -0x04,0x78,0xCF,0x00,
97284 -0x21,0x40,0x0C,0x01,
97285 -0x2B,0x10,0x0C,0x01,
97286 -0x93,0x00,0x40,0x10,
97287 -0x2B,0x10,0x05,0x01,
97288 -0x23,0x40,0x05,0x01,
97289 -0x1B,0x00,0x09,0x01,
97290 -0x02,0x00,0x20,0x15,
97291 -0x00,0x00,0x00,0x00,
97292 -0x0D,0x00,0x07,0x00,
97293 -0xFF,0xFF,0x44,0x31,
97294 -0x12,0x18,0x00,0x00,
97295 -0x10,0x58,0x00,0x00,
97296 -0x00,0x14,0x0B,0x00,
97297 -0x25,0x58,0x44,0x00,
97298 -0x18,0x00,0x6D,0x00,
97299 -0x12,0x28,0x00,0x00,
97300 -0x2B,0x18,0x65,0x01,
97301 -0x00,0x00,0x00,0x00,
97302 -0x1B,0x00,0x09,0x01,
97303 -0x02,0x00,0x20,0x15,
97304 -0x00,0x00,0x00,0x00,
97305 -0x0D,0x00,0x07,0x00,
97306 -0x77,0xFF,0x60,0x10,
97307 -0x23,0x50,0x65,0x01,
97308 -0x21,0x58,0x6C,0x01,
97309 -0x2B,0x10,0x6C,0x01,
97310 -0x04,0x00,0x40,0x14,
97311 -0x2B,0x10,0x65,0x01,
97312 -0x00,0x00,0x42,0x38,
97313 -0x21,0x18,0x6C,0x01,
97314 -0x0B,0x58,0x62,0x00,
97315 -0x6A,0x62,0x00,0x08,
97316 -0x23,0x50,0x65,0x01,
97317 -0x08,0x00,0x02,0x24,
97318 -0x21,0x28,0x00,0x00,
97319 -0x0A,0x28,0x43,0x00,
97320 -0x02,0x80,0x03,0x3C,
97321 -0x06,0x10,0xA8,0x00,
97322 -0xB4,0xF0,0x63,0x24,
97323 -0x21,0x10,0x43,0x00,
97324 -0x00,0x00,0x44,0x90,
97325 -0x20,0x00,0x02,0x24,
97326 -0x21,0x20,0x85,0x00,
97327 -0x23,0x30,0x44,0x00,
97328 -0x34,0xFF,0xC0,0x10,
97329 -0x23,0x38,0x46,0x00,
97330 -0x06,0x10,0xEC,0x00,
97331 -0x04,0x18,0xC8,0x00,
97332 -0x25,0x40,0x62,0x00,
97333 -0x06,0x58,0xEA,0x00,
97334 -0x02,0x6C,0x08,0x00,
97335 -0x1B,0x00,0x6D,0x01,
97336 -0x02,0x00,0xA0,0x15,
97337 -0x00,0x00,0x00,0x00,
97338 -0x0D,0x00,0x07,0x00,
97339 -0xFF,0xFF,0x11,0x31,
97340 -0x06,0x10,0xEF,0x00,
97341 -0x04,0x18,0xCA,0x00,
97342 -0x25,0x50,0x62,0x00,
97343 -0x02,0x24,0x0A,0x00,
97344 -0x04,0x60,0xCC,0x00,
97345 -0x12,0x80,0x00,0x00,
97346 -0x10,0x48,0x00,0x00,
97347 -0x00,0x14,0x09,0x00,
97348 -0x25,0x48,0x44,0x00,
97349 -0x12,0x28,0x00,0x00,
97350 -0x00,0x00,0x00,0x00,
97351 -0x00,0x00,0x00,0x00,
97352 -0x18,0x00,0x11,0x02,
97353 -0x12,0x70,0x00,0x00,
97354 -0x2B,0x18,0x2E,0x01,
97355 -0x00,0x00,0x00,0x00,
97356 -0x1B,0x00,0x6D,0x01,
97357 -0x02,0x00,0xA0,0x15,
97358 -0x00,0x00,0x00,0x00,
97359 -0x0D,0x00,0x07,0x00,
97360 -0x0A,0x00,0x60,0x10,
97361 -0x04,0x78,0xCF,0x00,
97362 -0x21,0x48,0x28,0x01,
97363 -0x2B,0x10,0x28,0x01,
97364 -0x06,0x00,0x40,0x14,
97365 -0xFF,0xFF,0xB0,0x24,
97366 -0x2B,0x10,0x2E,0x01,
97367 -0x03,0x00,0x40,0x10,
97368 -0x00,0x00,0x00,0x00,
97369 -0xFF,0xFF,0x10,0x26,
97370 -0x21,0x48,0x28,0x01,
97371 -0x23,0x48,0x2E,0x01,
97372 -0x1B,0x00,0x2D,0x01,
97373 -0x02,0x00,0xA0,0x15,
97374 -0x00,0x00,0x00,0x00,
97375 -0x0D,0x00,0x07,0x00,
97376 -0xFF,0xFF,0x44,0x31,
97377 -0x12,0x28,0x00,0x00,
97378 -0x10,0x58,0x00,0x00,
97379 -0x00,0x14,0x0B,0x00,
97380 -0x25,0x58,0x44,0x00,
97381 -0x18,0x00,0xB1,0x00,
97382 -0x12,0x70,0x00,0x00,
97383 -0x2B,0x18,0x6E,0x01,
97384 -0x00,0x00,0x00,0x00,
97385 -0x1B,0x00,0x2D,0x01,
97386 -0x02,0x00,0xA0,0x15,
97387 -0x00,0x00,0x00,0x00,
97388 -0x0D,0x00,0x07,0x00,
97389 -0x0B,0x00,0x60,0x10,
97390 -0x00,0x14,0x10,0x00,
97391 -0x21,0x58,0x68,0x01,
97392 -0x2B,0x10,0x68,0x01,
97393 -0x06,0x00,0x40,0x14,
97394 -0xFF,0xFF,0xA5,0x24,
97395 -0x2B,0x10,0x6E,0x01,
97396 -0x04,0x00,0x40,0x10,
97397 -0x00,0x14,0x10,0x00,
97398 -0xFF,0xFF,0xA5,0x24,
97399 -0x21,0x58,0x68,0x01,
97400 -0x00,0x14,0x10,0x00,
97401 -0x25,0x10,0x45,0x00,
97402 -0x23,0x58,0x6E,0x01,
97403 -0x19,0x00,0x4C,0x00,
97404 -0x10,0x28,0x00,0x00,
97405 -0x2B,0x18,0x65,0x01,
97406 -0x12,0x48,0x00,0x00,
97407 -0x05,0x00,0x60,0x14,
97408 -0x23,0x20,0x2C,0x01,
97409 -0x07,0x00,0xAB,0x14,
97410 -0x2B,0x10,0xE9,0x01,
97411 -0x05,0x00,0x40,0x10,
97412 -0x00,0x00,0x00,0x00,
97413 -0x2B,0x10,0x24,0x01,
97414 -0x23,0x18,0xA8,0x00,
97415 -0x23,0x28,0x62,0x00,
97416 -0x21,0x48,0x80,0x00,
97417 -0xEA,0xFE,0x40,0x12,
97418 -0x23,0x18,0xE9,0x01,
97419 -0x23,0x20,0x65,0x01,
97420 -0x2B,0x10,0xE3,0x01,
97421 -0x23,0x50,0x82,0x00,
97422 -0x04,0x28,0xEA,0x00,
97423 -0x06,0x18,0xC3,0x00,
97424 -0x25,0xC0,0xA3,0x00,
97425 -0x06,0xC8,0xCA,0x00,
97426 -0x00,0x00,0x58,0xAE,
97427 -0x4C,0x62,0x00,0x08,
97428 -0x04,0x00,0x59,0xAE,
97429 -0x00,0x01,0xC3,0x2C,
97430 -0x08,0x00,0x02,0x24,
97431 -0x21,0x30,0x00,0x00,
97432 -0xE6,0x61,0x00,0x08,
97433 -0x0A,0x30,0x43,0x00,
97434 -0x00,0x00,0x42,0x38,
97435 -0x21,0x18,0x0C,0x01,
97436 -0xE0,0x62,0x00,0x08,
97437 -0x0B,0x40,0x62,0x00,
97438 -0x25,0xB0,0x02,0x3C,
97439 -0xFF,0x00,0x03,0x3C,
97440 -0xEC,0x02,0x42,0x34,
97441 -0x00,0x00,0x43,0xAC,
97442 -0x08,0x00,0xE0,0x03,
97443 -0x00,0x00,0x00,0x00,
97444 -0x02,0x80,0x03,0x3C,
97445 -0x25,0xB0,0x02,0x3C,
97446 -0xF0,0x8D,0x63,0x24,
97447 -0x18,0x03,0x42,0x34,
97448 -0x00,0x00,0x43,0xAC,
97449 -0x08,0x00,0xE0,0x03,
97450 -0x00,0x00,0x00,0x00,
97451 -0x7F,0x00,0x02,0x3C,
97452 -0x0D,0xB8,0x44,0x34,
97453 -0x80,0x04,0x03,0x3C,
97454 -0x25,0x20,0x83,0x00,
97455 -0x00,0x08,0x02,0x3C,
97456 -0x25,0x20,0x82,0x00,
97457 -0x00,0x30,0x03,0x3C,
97458 -0x02,0x80,0x02,0x3C,
97459 -0x30,0x1F,0x42,0x24,
97460 -0x25,0x20,0x83,0x00,
97461 -0x41,0xB0,0x03,0x3C,
97462 -0x00,0x00,0x64,0xAC,
97463 -0xD8,0x1B,0x44,0xAC,
97464 -0xD0,0x1B,0x44,0xAC,
97465 -0x08,0x00,0x63,0x34,
97466 -0x86,0x00,0x04,0x24,
97467 -0x00,0x00,0x64,0xA4,
97468 -0xDC,0x1B,0x44,0xA4,
97469 -0xD4,0x1B,0x40,0xAC,
97470 -0xDE,0x1B,0x40,0xA4,
97471 -0x08,0x00,0xE0,0x03,
97472 -0xE0,0x1B,0x44,0xA4,
97473 -0x99,0x63,0x00,0x08,
97474 -0x00,0x00,0x00,0x00,
97475 -0x42,0xB0,0x03,0x3C,
97476 -0x01,0x00,0x63,0x34,
97477 -0x02,0x00,0x02,0x24,
97478 -0xE8,0xFF,0xBD,0x27,
97479 -0x00,0x00,0x62,0xA0,
97480 -0x10,0x00,0xBF,0xAF,
97481 -0xDF,0x2F,0x00,0x0C,
97482 -0x00,0x00,0x00,0x00,
97483 -0x21,0x20,0x00,0x00,
97484 -0x01,0x00,0x05,0x24,
97485 -0x8C,0x23,0x00,0x0C,
97486 -0x00,0x50,0x06,0x24,
97487 -0x1F,0x00,0x06,0x3C,
97488 -0x10,0x00,0xBF,0x8F,
97489 -0x00,0x40,0xC6,0x34,
97490 -0x03,0x00,0x04,0x24,
97491 -0x01,0x00,0x05,0x24,
97492 -0x8C,0x23,0x00,0x08,
97493 -0x18,0x00,0xBD,0x27,
97494 -0x25,0xB0,0x03,0x3C,
97495 -0x02,0x80,0x02,0x3C,
97496 -0xC8,0xFF,0xBD,0x27,
97497 -0x18,0x03,0x64,0x34,
97498 -0xB8,0x8E,0x42,0x24,
97499 -0x00,0x00,0x82,0xAC,
97500 -0x30,0x00,0xBE,0xAF,
97501 -0x2C,0x00,0xB7,0xAF,
97502 -0x28,0x00,0xB6,0xAF,
97503 -0x24,0x00,0xB5,0xAF,
97504 -0x20,0x00,0xB4,0xAF,
97505 -0x1C,0x00,0xB3,0xAF,
97506 -0x18,0x00,0xB2,0xAF,
97507 -0x14,0x00,0xB1,0xAF,
97508 -0x10,0x00,0xB0,0xAF,
97509 -0x34,0x00,0xBF,0xAF,
97510 -0xB6,0x00,0x63,0x34,
97511 -0x00,0x00,0x62,0x90,
97512 -0x02,0x80,0x03,0x3C,
97513 -0x30,0x1F,0x70,0x24,
97514 -0xAB,0x1B,0x02,0xA2,
97515 -0x28,0x6B,0x00,0x0C,
97516 -0x7A,0x36,0x00,0xA2,
97517 -0x48,0x01,0x03,0x24,
97518 -0x84,0x36,0x03,0xAE,
97519 -0x80,0x36,0x03,0xAE,
97520 -0xFD,0xFF,0x02,0x3C,
97521 -0xFB,0xFF,0x03,0x3C,
97522 -0x21,0x98,0x00,0x02,
97523 -0x21,0xA0,0x00,0x02,
97524 -0xFF,0xFF,0x55,0x34,
97525 -0xFF,0xFF,0x76,0x34,
97526 -0x21,0x88,0x00,0x00,
97527 -0x02,0x80,0x1E,0x3C,
97528 -0x02,0x80,0x17,0x3C,
97529 -0x21,0x90,0x00,0x02,
97530 -0x80,0x10,0x11,0x00,
97531 -0x21,0x10,0x51,0x00,
97532 -0xC0,0x10,0x02,0x00,
97533 -0x21,0x10,0x53,0x00,
97534 -0xE8,0x1D,0x42,0x24,
97535 -0x07,0x00,0x03,0x24,
97536 -0xFF,0xFF,0x63,0x24,
97537 -0x00,0x00,0x40,0xA4,
97538 -0xFD,0xFF,0x61,0x04,
97539 -0x02,0x00,0x42,0x24,
97540 -0xC0,0x80,0x11,0x00,
97541 -0x18,0x42,0xC4,0x27,
97542 -0x21,0x20,0x04,0x02,
97543 -0x21,0x28,0x00,0x00,
97544 -0x02,0x00,0x06,0x24,
97545 -0xF8,0x1D,0x40,0xA6,
97546 -0x08,0x52,0x00,0x0C,
97547 -0xFA,0x1D,0x40,0xA2,
97548 -0x21,0x20,0x13,0x02,
97549 -0xE8,0x22,0x83,0x8C,
97550 -0xEA,0x5D,0xE7,0x92,
97551 -0xBF,0xFF,0x02,0x24,
97552 -0x24,0x28,0x62,0x00,
97553 -0x01,0x00,0x02,0x24,
97554 -0x63,0x00,0xE2,0x10,
97555 -0x80,0x07,0xA6,0x34,
97556 -0xFF,0xF7,0x03,0x24,
97557 -0x24,0x10,0xC3,0x00,
97558 -0xFF,0xEF,0x03,0x24,
97559 -0x24,0x10,0x43,0x00,
97560 -0xE8,0x22,0x82,0xAC,
97561 -0x21,0x30,0x14,0x02,
97562 -0xE8,0x22,0xC4,0x8C,
97563 -0xE7,0xFF,0x02,0x3C,
97564 -0xFF,0xFF,0x42,0x34,
97565 -0x24,0x20,0x95,0x00,
97566 -0x24,0x20,0x96,0x00,
97567 -0xFF,0xFD,0x03,0x3C,
97568 -0x24,0x20,0x82,0x00,
97569 -0xFF,0xFF,0x63,0x34,
97570 -0xFF,0xFB,0x02,0x3C,
97571 -0x24,0x20,0x83,0x00,
97572 -0xEC,0x22,0xC5,0x8C,
97573 -0xFF,0xFF,0x42,0x34,
97574 -0xFF,0xE7,0x03,0x3C,
97575 -0x24,0x20,0x82,0x00,
97576 -0xFF,0xFF,0x63,0x34,
97577 -0xFF,0xFF,0x02,0x3C,
97578 -0x24,0x20,0x83,0x00,
97579 -0xFF,0x7F,0x42,0x34,
97580 -0xC0,0xFF,0x03,0x24,
97581 -0x24,0x28,0xA2,0x00,
97582 -0x24,0x20,0x83,0x00,
97583 -0x1F,0x00,0x02,0x3C,
97584 -0x01,0x00,0x31,0x26,
97585 -0x25,0x28,0xA2,0x00,
97586 -0x08,0x00,0x84,0x34,
97587 -0x20,0x00,0x22,0x2A,
97588 -0xE8,0x22,0xC4,0xAC,
97589 -0xEC,0x22,0xC5,0xAC,
97590 -0xC3,0xFF,0x40,0x14,
97591 -0x28,0x00,0x52,0x26,
97592 -0x25,0xB0,0x02,0x3C,
97593 -0x10,0x00,0x03,0x24,
97594 -0xB0,0x03,0x42,0x34,
97595 -0x02,0x80,0x04,0x3C,
97596 -0x00,0x00,0x43,0xAC,
97597 -0x58,0x22,0x84,0x24,
97598 -0x21,0x28,0x00,0x00,
97599 -0x08,0x52,0x00,0x0C,
97600 -0x20,0x00,0x06,0x24,
97601 -0x02,0x80,0x02,0x3C,
97602 -0xE9,0x5D,0x43,0x90,
97603 -0x00,0x00,0x00,0x00,
97604 -0x3A,0x00,0x60,0x10,
97605 -0x02,0x80,0x02,0x3C,
97606 -0x30,0x1F,0x50,0x24,
97607 -0x24,0x03,0x00,0xA2,
97608 -0x38,0x70,0x00,0x0C,
97609 -0x25,0x03,0x00,0xA2,
97610 -0x02,0x80,0x09,0x3C,
97611 -0x64,0x57,0x22,0x25,
97612 -0x02,0x80,0x0A,0x3C,
97613 -0x02,0x80,0x0B,0x3C,
97614 -0x02,0x80,0x0C,0x3C,
97615 -0x02,0x80,0x0D,0x3C,
97616 -0x02,0x80,0x0E,0x3C,
97617 -0x02,0x80,0x0F,0x3C,
97618 -0x04,0x00,0x42,0xAC,
97619 -0x64,0x57,0x22,0xAD,
97620 -0x6C,0x57,0x43,0x25,
97621 -0x74,0x57,0x64,0x25,
97622 -0x7C,0x57,0x85,0x25,
97623 -0x84,0x57,0xA6,0x25,
97624 -0x8C,0x57,0xC7,0x25,
97625 -0x94,0x57,0xE8,0x25,
97626 -0x09,0x00,0x02,0x24,
97627 -0x04,0x00,0x63,0xAC,
97628 -0x6C,0x57,0x43,0xAD,
97629 -0x04,0x00,0x84,0xAC,
97630 -0x74,0x57,0x64,0xAD,
97631 -0x04,0x00,0xA5,0xAC,
97632 -0x7C,0x57,0x85,0xAD,
97633 -0x04,0x00,0xC6,0xAC,
97634 -0x84,0x57,0xA6,0xAD,
97635 -0x04,0x00,0xE7,0xAC,
97636 -0x8C,0x57,0xC7,0xAD,
97637 -0x94,0x57,0xE8,0xAD,
97638 -0x04,0x00,0x08,0xAD,
97639 -0x34,0x00,0xBF,0x8F,
97640 -0x0C,0x3E,0x02,0xA2,
97641 -0x32,0x3B,0x00,0xA6,
97642 -0x8E,0x3E,0x00,0xA2,
97643 -0x30,0x00,0xBE,0x8F,
97644 -0x2C,0x00,0xB7,0x8F,
97645 -0x28,0x00,0xB6,0x8F,
97646 -0x24,0x00,0xB5,0x8F,
97647 -0x20,0x00,0xB4,0x8F,
97648 -0x1C,0x00,0xB3,0x8F,
97649 -0x18,0x00,0xB2,0x8F,
97650 -0x14,0x00,0xB1,0x8F,
97651 -0x10,0x00,0xB0,0x8F,
97652 -0x08,0x00,0xE0,0x03,
97653 -0x38,0x00,0xBD,0x27,
97654 -0x02,0x80,0x02,0x3C,
97655 -0xEB,0x5D,0x43,0x90,
97656 -0x00,0x00,0x00,0x00,
97657 -0x9C,0xFF,0x67,0x14,
97658 -0x80,0x0F,0xA2,0x34,
97659 -0xFF,0xF7,0x03,0x24,
97660 -0x24,0x10,0xC3,0x00,
97661 -0xF0,0x63,0x00,0x08,
97662 -0x00,0x10,0x42,0x34,
97663 -0xFA,0x6B,0x00,0x0C,
97664 -0x00,0x00,0x00,0x00,
97665 -0x50,0x6E,0x00,0x0C,
97666 -0x30,0x38,0x80,0xAE,
97667 -0x6E,0x6F,0x00,0x0C,
97668 -0x00,0x00,0x00,0x00,
97669 -0x02,0x80,0x03,0x3C,
97670 -0xDE,0x5D,0x64,0x90,
97671 -0x92,0x00,0x02,0x24,
97672 -0x03,0x00,0x82,0x10,
97673 -0x00,0x00,0x00,0x00,
97674 -0xCA,0x6F,0x00,0x0C,
97675 -0x00,0x00,0x00,0x00,
97676 -0xB0,0x6F,0x00,0x0C,
97677 -0x00,0x00,0x00,0x00,
97678 -0x6A,0x6E,0x00,0x0C,
97679 -0x00,0x00,0x00,0x00,
97680 -0x01,0x00,0x03,0x24,
97681 -0x8A,0x36,0x83,0xA6,
97682 -0x1E,0x70,0x00,0x0C,
97683 -0x88,0x36,0x80,0xA6,
97684 -0x1E,0x64,0x00,0x08,
97685 -0x02,0x80,0x02,0x3C,
97686 -0x02,0x80,0x03,0x3C,
97687 -0x25,0xB0,0x02,0x3C,
97688 -0xC8,0xFF,0xBD,0x27,
97689 -0xB8,0x91,0x63,0x24,
97690 -0x18,0x03,0x42,0x34,
97691 -0x18,0x00,0xB0,0xAF,
97692 -0x34,0x00,0xBF,0xAF,
97693 -0x30,0x00,0xB6,0xAF,
97694 -0x2C,0x00,0xB5,0xAF,
97695 -0x28,0x00,0xB4,0xAF,
97696 -0x24,0x00,0xB3,0xAF,
97697 -0x20,0x00,0xB2,0xAF,
97698 -0x1C,0x00,0xB1,0xAF,
97699 -0x00,0x00,0x43,0xAC,
97700 -0x21,0x80,0x00,0x00,
97701 -0x01,0x00,0x02,0x26,
97702 -0xFF,0xFF,0x50,0x30,
97703 -0x64,0x00,0x03,0x2E,
97704 -0xFD,0xFF,0x60,0x14,
97705 -0x01,0x00,0x02,0x26,
97706 -0x02,0x80,0x03,0x3C,
97707 -0xDB,0x5D,0x68,0x90,
97708 -0x02,0x80,0x02,0x3C,
97709 -0x02,0x80,0x03,0x3C,
97710 -0xD8,0x5D,0x4B,0x94,
97711 -0xF3,0x5D,0x6A,0x90,
97712 -0x02,0x80,0x02,0x3C,
97713 -0x02,0x80,0x03,0x3C,
97714 -0x02,0x80,0x14,0x3C,
97715 -0xFA,0x5D,0x67,0x90,
97716 -0xE8,0x5D,0x49,0x90,
97717 -0xDA,0x5D,0x83,0x92,
97718 -0x02,0x80,0x0C,0x3C,
97719 -0x02,0x80,0x02,0x3C,
97720 -0xF5,0x5D,0x46,0x90,
97721 -0xF8,0x5D,0x85,0x91,
97722 -0x25,0xB0,0x04,0x3C,
97723 -0xB0,0x03,0x82,0x34,
97724 -0x00,0x00,0x4B,0xAC,
97725 -0x00,0x00,0x48,0xAC,
97726 -0x00,0x00,0x49,0xAC,
97727 -0x00,0x00,0x43,0xAC,
97728 -0x02,0x80,0x03,0x3C,
97729 -0x00,0x00,0x4A,0xAC,
97730 -0x0A,0x00,0x88,0x34,
97731 -0x00,0x00,0x46,0xAC,
97732 -0x00,0x00,0x45,0xAC,
97733 -0x00,0x00,0x47,0xAC,
97734 -0x1A,0x5E,0x60,0xA4,
97735 -0x00,0x00,0x06,0x91,
97736 -0x02,0x80,0x02,0x3C,
97737 -0x0B,0x00,0x04,0x24,
97738 -0x02,0x80,0x16,0x3C,
97739 -0xE5,0x5D,0x44,0xA0,
97740 -0x02,0x80,0x02,0x3C,
97741 -0x30,0x1F,0xC5,0x26,
97742 -0x00,0x78,0x03,0x24,
97743 -0x08,0x5E,0x40,0xA0,
97744 -0xF0,0xFF,0x02,0x24,
97745 -0x01,0x00,0x07,0x24,
97746 -0x02,0x80,0x15,0x3C,
97747 -0xAC,0x1B,0xA3,0xA4,
97748 -0xAA,0x1B,0xA2,0xA0,
97749 -0xFF,0x07,0x03,0x24,
97750 -0xFF,0xFF,0x02,0x24,
97751 -0x20,0x00,0xC6,0x30,
97752 -0xF8,0x5D,0x87,0xA1,
97753 -0xA8,0x1B,0xA7,0xA0,
97754 -0xAE,0x1B,0xA3,0xA4,
97755 -0x48,0xF3,0xA2,0xA2,
97756 -0xB1,0x00,0xC0,0x10,
97757 -0xB0,0x1B,0xA0,0xA4,
97758 -0x00,0x00,0x02,0x91,
97759 -0x00,0x00,0x00,0x00,
97760 -0x10,0x00,0x42,0x30,
97761 -0xFB,0x00,0x40,0x14,
97762 -0x02,0x80,0x13,0x3C,
97763 -0x21,0x80,0x00,0x00,
97764 -0x21,0x88,0x00,0x00,
97765 -0xB8,0xF1,0x72,0x26,
97766 -0xFF,0x00,0x24,0x32,
97767 -0x61,0x57,0x00,0x0C,
97768 -0x21,0x28,0x12,0x02,
97769 -0x08,0x00,0x03,0x26,
97770 -0xFF,0xFF,0x70,0x30,
97771 -0x01,0x00,0x22,0x26,
97772 -0x80,0x00,0x03,0x2E,
97773 -0xF8,0xFF,0x60,0x14,
97774 -0xFF,0xFF,0x51,0x30,
97775 -0xDA,0x5D,0x83,0x92,
97776 -0x00,0x00,0x00,0x00,
97777 -0x02,0x00,0x62,0x30,
97778 -0xC1,0x00,0x40,0x14,
97779 -0x04,0x00,0x62,0x30,
97780 -0x9A,0x00,0x40,0x10,
97781 -0x25,0xB0,0x03,0x3C,
97782 -0x25,0xB0,0x04,0x3C,
97783 -0x02,0x80,0x05,0x3C,
97784 -0x06,0x00,0x06,0x24,
97785 -0x50,0x00,0x84,0x34,
97786 -0x10,0x52,0x00,0x0C,
97787 -0x07,0xF2,0xA5,0x24,
97788 -0xB8,0xF1,0x63,0x26,
97789 -0x7B,0x00,0x66,0x90,
97790 -0x00,0x00,0x00,0x00,
97791 -0x02,0x00,0xC2,0x2C,
97792 -0x04,0x00,0x40,0x14,
97793 -0x02,0x00,0x0B,0x24,
97794 -0x79,0x00,0x62,0x90,
97795 -0x00,0x00,0x00,0x00,
97796 -0x03,0x00,0x4B,0x30,
97797 -0x04,0x00,0xC2,0x2C,
97798 -0xDC,0x00,0x40,0x10,
97799 -0xB8,0xF1,0x62,0x26,
97800 -0x02,0x80,0x02,0x3C,
97801 -0x4A,0xF3,0x40,0xA0,
97802 -0x02,0x80,0x02,0x3C,
97803 -0xE7,0x5D,0x43,0x90,
97804 -0x01,0x00,0x02,0x24,
97805 -0x02,0x00,0x62,0x10,
97806 -0xFC,0xFF,0x08,0x24,
97807 -0x21,0x40,0x00,0x00,
97808 -0x02,0x80,0x02,0x3C,
97809 -0x02,0x80,0x03,0x3C,
97810 -0xB8,0xF1,0x4A,0x24,
97811 -0x30,0x1F,0x69,0x24,
97812 -0x21,0x60,0x00,0x00,
97813 -0x21,0x80,0x00,0x00,
97814 -0x01,0x00,0x02,0x26,
97815 -0x21,0x30,0x30,0x01,
97816 -0x03,0x00,0x03,0x2E,
97817 -0x08,0x00,0x04,0x2E,
97818 -0xFF,0xFF,0x50,0x30,
97819 -0x0E,0x00,0x07,0x2E,
97820 -0x04,0x00,0x60,0x14,
97821 -0x21,0x88,0x00,0x00,
97822 -0x01,0x00,0x11,0x24,
97823 -0x02,0x00,0x02,0x24,
97824 -0x0A,0x88,0x44,0x00,
97825 -0x21,0x10,0x51,0x01,
97826 -0x61,0x00,0x43,0x90,
97827 -0x55,0x00,0x44,0x90,
97828 -0x5B,0x00,0x45,0x90,
97829 -0x21,0x18,0x03,0x01,
97830 -0x21,0x20,0x04,0x01,
97831 -0x21,0x28,0x05,0x01,
97832 -0x9C,0x1D,0xC3,0xA0,
97833 -0x64,0x1D,0xC4,0xA0,
97834 -0xEB,0xFF,0xE0,0x14,
97835 -0x80,0x1D,0xC5,0xA0,
97836 -0x01,0x00,0x8C,0x25,
97837 -0x02,0x00,0x82,0x2D,
97838 -0x0E,0x00,0x29,0x25,
97839 -0xE5,0xFF,0x40,0x14,
97840 -0x03,0x00,0x4A,0x25,
97841 -0x02,0x80,0x02,0x3C,
97842 -0x02,0x80,0x03,0x3C,
97843 -0x30,0x1F,0x47,0x24,
97844 -0xB8,0xF1,0x66,0x24,
97845 -0x21,0x80,0x00,0x00,
97846 -0x03,0x00,0x02,0x2E,
97847 -0x21,0x20,0x07,0x02,
97848 -0xB9,0x00,0x40,0x10,
97849 -0x08,0x00,0x03,0x2E,
97850 -0x71,0x00,0xC3,0x90,
97851 -0x6E,0x00,0xC2,0x90,
97852 -0x00,0x00,0x00,0x00,
97853 -0xC6,0x1D,0x82,0xA0,
97854 -0xB8,0x1D,0x83,0xA0,
97855 -0x01,0x00,0x02,0x26,
97856 -0xFF,0xFF,0x50,0x30,
97857 -0x0E,0x00,0x03,0x2E,
97858 -0xF4,0xFF,0x60,0x14,
97859 -0x03,0x00,0x02,0x2E,
97860 -0x03,0x00,0x02,0x24,
97861 -0x2A,0x00,0x62,0x15,
97862 -0x02,0x80,0x02,0x3C,
97863 -0x02,0x80,0x03,0x3C,
97864 -0xB8,0xF1,0x4E,0x24,
97865 -0x34,0xD9,0x6F,0x24,
97866 -0x21,0x60,0x00,0x00,
97867 -0x21,0x68,0x00,0x00,
97868 -0x21,0x10,0xAE,0x01,
97869 -0x74,0x00,0x43,0x90,
97870 -0x21,0x80,0x00,0x00,
97871 -0x0F,0x00,0x6A,0x30,
97872 -0x02,0x49,0x03,0x00,
97873 -0x21,0x10,0xB0,0x01,
97874 -0x00,0x11,0x02,0x00,
97875 -0x21,0x58,0x4F,0x00,
97876 -0x21,0x38,0x00,0x00,
97877 -0x21,0x40,0x67,0x01,
97878 -0x00,0x00,0x03,0x91,
97879 -0x00,0x31,0x09,0x00,
97880 -0x01,0x00,0xE7,0x24,
97881 -0x02,0x11,0x03,0x00,
97882 -0x00,0x21,0x02,0x00,
97883 -0x0F,0x00,0x63,0x30,
97884 -0x2B,0x10,0x49,0x00,
97885 -0x0A,0x20,0xC2,0x00,
97886 -0x2B,0x28,0x6A,0x00,
97887 -0x00,0x00,0xA5,0x38,
97888 -0x25,0x18,0x83,0x00,
97889 -0xFF,0xFF,0xE7,0x30,
97890 -0x25,0x20,0x8A,0x00,
97891 -0x0A,0x18,0x85,0x00,
97892 -0x10,0x00,0xE2,0x2C,
97893 -0xEF,0xFF,0x40,0x14,
97894 -0x00,0x00,0x03,0xA1,
97895 -0x01,0x00,0x02,0x26,
97896 -0xFF,0xFF,0x50,0x30,
97897 -0x03,0x00,0x03,0x2E,
97898 -0xE7,0xFF,0x60,0x14,
97899 -0x21,0x10,0xB0,0x01,
97900 -0x01,0x00,0x8C,0x25,
97901 -0x02,0x00,0x82,0x2D,
97902 -0xDD,0xFF,0x40,0x14,
97903 -0x03,0x00,0xAD,0x25,
97904 -0xE6,0x56,0x00,0x0C,
97905 -0x01,0x00,0x04,0x24,
97906 -0x48,0xF3,0xA5,0x26,
97907 -0x91,0x56,0x00,0x0C,
97908 -0xFA,0x01,0x04,0x24,
97909 -0xE6,0x56,0x00,0x0C,
97910 -0x21,0x20,0x00,0x00,
97911 -0x02,0x80,0x04,0x3C,
97912 -0x25,0xB0,0x05,0x3C,
97913 -0x18,0x3B,0x84,0x24,
97914 -0x50,0x00,0xA5,0x34,
97915 -0x10,0x52,0x00,0x0C,
97916 -0x06,0x00,0x06,0x24,
97917 -0x30,0x1F,0xC5,0x26,
97918 -0x01,0x00,0x02,0x24,
97919 -0x06,0x00,0x03,0x24,
97920 -0x05,0x00,0x04,0x24,
97921 -0x33,0x1C,0xA2,0xA0,
97922 -0x8A,0x55,0x00,0x0C,
97923 -0x30,0x3B,0xA3,0xA0,
97924 -0x34,0x00,0xBF,0x8F,
97925 -0x30,0x00,0xB6,0x8F,
97926 -0x2C,0x00,0xB5,0x8F,
97927 -0x28,0x00,0xB4,0x8F,
97928 -0x24,0x00,0xB3,0x8F,
97929 -0x20,0x00,0xB2,0x8F,
97930 -0x1C,0x00,0xB1,0x8F,
97931 -0x18,0x00,0xB0,0x8F,
97932 -0x08,0x00,0xE0,0x03,
97933 -0x38,0x00,0xBD,0x27,
97934 -0x25,0xB0,0x03,0x3C,
97935 -0x4C,0x87,0x02,0x3C,
97936 -0x54,0x00,0x65,0x34,
97937 -0x00,0xE0,0x42,0x34,
97938 -0x50,0x00,0x63,0x34,
97939 -0x00,0x00,0x62,0xAC,
97940 -0x12,0x01,0x04,0x24,
97941 -0x02,0x80,0x02,0x3C,
97942 -0x00,0x00,0xA4,0xAC,
97943 -0x30,0x1F,0x46,0x24,
97944 -0x21,0x60,0x00,0x00,
97945 -0x10,0x00,0x05,0x24,
97946 -0x21,0x80,0x00,0x00,
97947 -0x01,0x00,0x02,0x26,
97948 -0x21,0x18,0xD0,0x00,
97949 -0xFF,0xFF,0x50,0x30,
97950 -0x0E,0x00,0x04,0x2E,
97951 -0x80,0x1D,0x65,0xA0,
97952 -0x64,0x1D,0x65,0xA0,
97953 -0xF9,0xFF,0x80,0x14,
97954 -0x9C,0x1D,0x65,0xA0,
97955 -0x01,0x00,0x8C,0x25,
97956 -0x02,0x00,0x82,0x2D,
97957 -0xF4,0xFF,0x40,0x14,
97958 -0x0E,0x00,0xC6,0x24,
97959 -0x02,0x80,0x02,0x3C,
97960 -0x30,0x1F,0x46,0x24,
97961 -0x21,0x80,0x00,0x00,
97962 -0x04,0x00,0x05,0x24,
97963 -0x01,0x00,0x02,0x26,
97964 -0x21,0x18,0x06,0x02,
97965 -0xFF,0xFF,0x50,0x30,
97966 -0x0E,0x00,0x04,0x2E,
97967 -0xC6,0x1D,0x60,0xA0,
97968 -0xFA,0xFF,0x80,0x14,
97969 -0xB8,0x1D,0x65,0xA0,
97970 -0x48,0x65,0x00,0x08,
97971 -0x00,0x00,0x00,0x00,
97972 -0x25,0xB0,0x04,0x3C,
97973 -0x02,0x80,0x05,0x3C,
97974 -0x50,0x00,0x84,0x34,
97975 -0xCA,0xF1,0xA5,0x24,
97976 -0x10,0x52,0x00,0x0C,
97977 -0x06,0x00,0x06,0x24,
97978 -0xB8,0xF1,0x62,0x92,
97979 -0xB8,0xF1,0x64,0x26,
97980 -0x01,0x00,0x85,0x90,
97981 -0x21,0x18,0x40,0x00,
97982 -0x10,0x00,0xA2,0xA3,
97983 -0x29,0x00,0x02,0x24,
97984 -0x11,0x00,0xA5,0xA3,
97985 -0x50,0x00,0x86,0x90,
97986 -0x3B,0x00,0x62,0x10,
97987 -0xFF,0x00,0xA3,0x30,
97988 -0xB8,0xF1,0x65,0x26,
97989 -0x68,0x00,0xA2,0x90,
97990 -0x02,0x80,0x03,0x3C,
97991 -0x04,0x00,0xC4,0x2C,
97992 -0x1F,0x00,0x42,0x30,
97993 -0x24,0x00,0x80,0x14,
97994 -0x49,0xF3,0x62,0xA0,
97995 -0x7A,0x00,0xA2,0x90,
97996 -0x79,0x00,0xA4,0x90,
97997 -0x02,0x80,0x03,0x3C,
97998 -0x04,0x00,0x42,0x30,
97999 -0x83,0x10,0x02,0x00,
98000 -0x03,0x00,0x8B,0x30,
98001 -0x4A,0xF3,0x62,0xA0,
98002 -0x06,0x00,0xC2,0x2C,
98003 -0x37,0xFF,0x40,0x14,
98004 -0x02,0x80,0x02,0x3C,
98005 -0xB8,0xF1,0x63,0x26,
98006 -0x69,0x00,0x62,0x90,
98007 -0x00,0x00,0x00,0x00,
98008 -0x01,0x00,0x42,0x30,
98009 -0x31,0xFF,0x40,0x14,
98010 -0x02,0x80,0x02,0x3C,
98011 -0xE8,0x64,0x00,0x08,
98012 -0x21,0x40,0x00,0x00,
98013 -0x21,0x20,0x00,0x00,
98014 -0x80,0x00,0x05,0x24,
98015 -0x53,0x56,0x00,0x0C,
98016 -0xB8,0xF1,0x66,0x26,
98017 -0xC7,0x64,0x00,0x08,
98018 -0x00,0x00,0x00,0x00,
98019 -0x7D,0x00,0x43,0x90,
98020 -0x69,0x00,0x44,0x90,
98021 -0x02,0x80,0x02,0x3C,
98022 -0x04,0x00,0x63,0x30,
98023 -0x01,0x00,0x84,0x30,
98024 -0x83,0x18,0x03,0x00,
98025 -0x01,0x00,0x84,0x2C,
98026 -0x1F,0xFF,0x80,0x10,
98027 -0x4A,0xF3,0x43,0xA0,
98028 -0xE8,0x64,0x00,0x08,
98029 -0x21,0x40,0x00,0x00,
98030 -0x02,0x80,0x02,0x3C,
98031 -0x02,0x00,0x0B,0x24,
98032 -0xAA,0x65,0x00,0x08,
98033 -0x4A,0xF3,0x40,0xA0,
98034 -0x21,0x28,0x07,0x02,
98035 -0x06,0x00,0x60,0x10,
98036 -0x21,0x20,0xA0,0x00,
98037 -0x67,0x00,0xC3,0x90,
98038 -0x6F,0x00,0xC2,0x90,
98039 -0xB8,0x1D,0xA3,0xA0,
98040 -0x17,0x65,0x00,0x08,
98041 -0xC6,0x1D,0xA2,0xA0,
98042 -0x72,0x00,0xC3,0x90,
98043 -0x70,0x00,0xC2,0x90,
98044 -0x16,0x65,0x00,0x08,
98045 -0xC6,0x1D,0x82,0xA0,
98046 -0x81,0x00,0x02,0x24,
98047 -0xC4,0xFF,0x62,0x14,
98048 -0x01,0x00,0x02,0x24,
98049 -0x54,0x00,0x83,0x90,
98050 -0x00,0x00,0x00,0x00,
98051 -0x0A,0x00,0x62,0x10,
98052 -0x02,0x00,0x02,0x24,
98053 -0x04,0x00,0x62,0x10,
98054 -0x11,0x00,0x03,0x24,
98055 -0x02,0x80,0x02,0x3C,
98056 -0x9C,0x65,0x00,0x08,
98057 -0xDE,0x5D,0x43,0xA0,
98058 -0x22,0x00,0x03,0x24,
98059 -0x02,0x80,0x02,0x3C,
98060 -0x9C,0x65,0x00,0x08,
98061 -0xDE,0x5D,0x43,0xA0,
98062 -0x12,0x00,0x03,0x24,
98063 -0x02,0x80,0x02,0x3C,
98064 -0x9C,0x65,0x00,0x08,
98065 -0xDE,0x5D,0x43,0xA0,
98066 -0xD8,0xFF,0xBD,0x27,
98067 -0x18,0x00,0xB0,0xAF,
98068 -0x02,0x80,0x02,0x3C,
98069 -0x25,0xB0,0x10,0x3C,
98070 -0x18,0x03,0x03,0x36,
98071 -0xA8,0x97,0x42,0x24,
98072 -0x00,0x00,0x62,0xAC,
98073 -0x20,0x00,0xB2,0xAF,
98074 -0x02,0x80,0x12,0x3C,
98075 -0x24,0x00,0xBF,0xAF,
98076 -0x6E,0x64,0x00,0x0C,
98077 -0x1C,0x00,0xB1,0xAF,
98078 -0x9C,0x66,0x00,0x0C,
98079 -0x00,0x00,0x00,0x00,
98080 -0x36,0x69,0x00,0x0C,
98081 -0x00,0x00,0x00,0x00,
98082 -0x1A,0x6A,0x00,0x0C,
98083 -0x00,0x00,0x00,0x00,
98084 -0x7C,0x6C,0x00,0x0C,
98085 -0x00,0x00,0x00,0x00,
98086 -0x82,0x69,0x00,0x0C,
98087 -0x00,0x00,0x00,0x00,
98088 -0x30,0x1F,0x43,0x26,
98089 -0x30,0x3B,0x64,0x90,
98090 -0x0D,0x0C,0x00,0x0C,
98091 -0x00,0x00,0x00,0x00,
98092 -0x76,0x63,0x00,0x0C,
98093 -0x00,0x00,0x00,0x00,
98094 -0x64,0x40,0x00,0x0C,
98095 -0x00,0x00,0x00,0x00,
98096 -0x44,0x00,0x03,0x36,
98097 -0x00,0x00,0x62,0x94,
98098 -0x00,0x00,0x00,0x00,
98099 -0x40,0x00,0x42,0x34,
98100 -0x00,0x00,0x62,0xA4,
98101 -0xAE,0x63,0x00,0x0C,
98102 -0x00,0x00,0x00,0x00,
98103 -0x7C,0x63,0x00,0x0C,
98104 -0x00,0x00,0x00,0x00,
98105 -0x9B,0x63,0x00,0x0C,
98106 -0x00,0x00,0x00,0x00,
98107 -0xE6,0x69,0x00,0x0C,
98108 -0x00,0x00,0x00,0x00,
98109 -0xA3,0x69,0x00,0x0C,
98110 -0x00,0x00,0x00,0x00,
98111 -0x00,0x80,0x04,0x3C,
98112 -0x74,0x6A,0x84,0x24,
98113 -0x03,0x6A,0x00,0x0C,
98114 -0x01,0x00,0x05,0x24,
98115 -0x00,0x80,0x04,0x3C,
98116 -0x6C,0x72,0x84,0x24,
98117 -0x03,0x6A,0x00,0x0C,
98118 -0x02,0x00,0x05,0x24,
98119 -0x00,0x80,0x04,0x3C,
98120 -0x48,0x7B,0x84,0x24,
98121 -0x03,0x6A,0x00,0x0C,
98122 -0x04,0x00,0x05,0x24,
98123 -0x7E,0x59,0x00,0x0C,
98124 -0x00,0x00,0x00,0x00,
98125 -0x01,0x80,0x04,0x3C,
98126 -0xB8,0x8E,0x84,0x24,
98127 -0x03,0x6A,0x00,0x0C,
98128 -0x03,0x00,0x05,0x24,
98129 -0x02,0x80,0x03,0x3C,
98130 -0xE8,0x5D,0x63,0x90,
98131 -0x00,0x00,0x00,0x00,
98132 -0x60,0x00,0x60,0x10,
98133 -0x43,0x00,0x02,0x36,
98134 -0x07,0x00,0x02,0x24,
98135 -0x0C,0x00,0x62,0x10,
98136 -0x03,0x00,0x02,0x24,
98137 -0x25,0xB0,0x04,0x3C,
98138 -0x43,0x00,0x85,0x34,
98139 -0x10,0x02,0x86,0x34,
98140 -0x10,0x00,0x03,0x24,
98141 -0x00,0x00,0xA2,0xA0,
98142 -0xD8,0x00,0x84,0x34,
98143 -0x00,0x00,0xC3,0xA0,
98144 -0x00,0x00,0x82,0x90,
98145 -0x80,0xFF,0x03,0x24,
98146 -0x25,0x10,0x43,0x00,
98147 -0x00,0x00,0x82,0xA0,
98148 -0xE0,0x6A,0x00,0x0C,
98149 -0x00,0x00,0x00,0x00,
98150 -0x42,0xB0,0x03,0x3C,
98151 -0x00,0x00,0x62,0x90,
98152 -0x25,0xB0,0x10,0x3C,
98153 -0x02,0x80,0x11,0x3C,
98154 -0x01,0x00,0x42,0x34,
98155 -0x00,0x00,0x62,0xA0,
98156 -0x83,0x63,0x00,0x0C,
98157 -0x00,0x00,0x00,0x00,
98158 -0x44,0x00,0x05,0x36,
98159 -0x00,0x00,0xA2,0x94,
98160 -0x02,0x80,0x03,0x3C,
98161 -0x8C,0xC6,0x64,0x8C,
98162 -0xC0,0x00,0x42,0x34,
98163 -0x00,0x00,0xA2,0xA4,
98164 -0x2F,0x55,0x00,0x0C,
98165 -0x80,0x0C,0x10,0x36,
98166 -0x02,0x80,0x02,0x3C,
98167 -0x02,0x80,0x03,0x3C,
98168 -0xDA,0x5D,0x45,0x90,
98169 -0xDF,0x5D,0x66,0x90,
98170 -0x02,0x80,0x04,0x3C,
98171 -0x2F,0x55,0x00,0x0C,
98172 -0x90,0xC6,0x84,0x24,
98173 -0x02,0x80,0x02,0x3C,
98174 -0x02,0x80,0x03,0x3C,
98175 -0xDE,0x5D,0x45,0x90,
98176 -0x48,0xF3,0x66,0x90,
98177 -0x02,0x80,0x02,0x3C,
98178 -0x02,0x80,0x03,0x3C,
98179 -0xE7,0x5D,0x47,0x90,
98180 -0x4A,0xF3,0x62,0x90,
98181 -0x02,0x80,0x04,0x3C,
98182 -0xA4,0xC6,0x84,0x24,
98183 -0x2F,0x55,0x00,0x0C,
98184 -0x10,0x00,0xA2,0xAF,
98185 -0x02,0x80,0x02,0x3C,
98186 -0x00,0x00,0x07,0x8E,
98187 -0xE6,0x5D,0x46,0x90,
98188 -0xE9,0x5D,0x25,0x92,
98189 -0x02,0x80,0x04,0x3C,
98190 -0x2F,0x55,0x00,0x0C,
98191 -0xC0,0xC6,0x84,0x24,
98192 -0x02,0x80,0x03,0x3C,
98193 -0x02,0x80,0x02,0x3C,
98194 -0xEB,0x5D,0x66,0x90,
98195 -0xEA,0x5D,0x45,0x90,
98196 -0x02,0x80,0x04,0x3C,
98197 -0x30,0x1F,0x50,0x26,
98198 -0x2F,0x55,0x00,0x0C,
98199 -0xDC,0xC6,0x84,0x24,
98200 -0xA0,0x3E,0x06,0x8E,
98201 -0xA4,0x3E,0x05,0x8E,
98202 -0x02,0x80,0x04,0x3C,
98203 -0x2F,0x55,0x00,0x0C,
98204 -0xF0,0xC6,0x84,0x24,
98205 -0x02,0x80,0x02,0x3C,
98206 -0x49,0xF3,0x45,0x90,
98207 -0x02,0x80,0x04,0x3C,
98208 -0x2F,0x55,0x00,0x0C,
98209 -0x10,0xC7,0x84,0x24,
98210 -0xE9,0x5D,0x23,0x92,
98211 -0x10,0x27,0x02,0x24,
98212 -0x02,0x80,0x04,0x3C,
98213 -0x0B,0x10,0x03,0x00,
98214 -0x40,0x39,0x02,0xAE,
98215 -0x08,0x00,0x84,0x24,
98216 -0x21,0x28,0x00,0x00,
98217 -0x21,0x30,0x00,0x00,
98218 -0x91,0x3C,0x00,0x0C,
98219 -0x21,0x38,0x00,0x00,
98220 -0x99,0x63,0x00,0x0C,
98221 -0x00,0x00,0x00,0x00,
98222 -0x24,0x00,0xBF,0x8F,
98223 -0x20,0x00,0xB2,0x8F,
98224 -0x1C,0x00,0xB1,0x8F,
98225 -0x18,0x00,0xB0,0x8F,
98226 -0x01,0x00,0x02,0x24,
98227 -0x08,0x00,0xE0,0x03,
98228 -0x28,0x00,0xBD,0x27,
98229 -0xD8,0x00,0x04,0x36,
98230 -0x00,0x00,0x40,0xA0,
98231 -0x38,0x66,0x00,0x08,
98232 -0x00,0x00,0x00,0x00,
98233 -0x21,0x20,0x00,0x00,
98234 -0x20,0xB0,0x06,0x3C,
98235 -0xFF,0xFF,0x05,0x34,
98236 -0x21,0x18,0x86,0x00,
98237 -0x04,0x00,0x84,0x24,
98238 -0x2A,0x10,0xA4,0x00,
98239 -0x00,0x00,0x60,0xAC,
98240 -0xFB,0xFF,0x40,0x10,
98241 -0x00,0x00,0x00,0x00,
98242 -0x08,0x00,0xE0,0x03,
98243 -0x00,0x00,0x00,0x00,
98244 -0xB8,0xFF,0xBD,0x27,
98245 -0x24,0x00,0xB1,0xAF,
98246 -0x44,0x00,0xBF,0xAF,
98247 -0x40,0x00,0xBE,0xAF,
98248 -0x3C,0x00,0xB7,0xAF,
98249 -0x38,0x00,0xB6,0xAF,
98250 -0x34,0x00,0xB5,0xAF,
98251 -0x30,0x00,0xB4,0xAF,
98252 -0x2C,0x00,0xB3,0xAF,
98253 -0x28,0x00,0xB2,0xAF,
98254 -0x20,0x00,0xB0,0xAF,
98255 -0x02,0x80,0x02,0x3C,
98256 -0xDA,0x5D,0x42,0x90,
98257 -0x25,0xB0,0x11,0x3C,
98258 -0x58,0x00,0x25,0x36,
98259 -0x10,0x00,0xA2,0xAF,
98260 -0x4C,0x81,0x02,0x3C,
98261 -0x00,0xE0,0x42,0x34,
98262 -0x00,0x00,0xA2,0xAC,
98263 -0xFF,0xFF,0x04,0x24,
98264 -0x96,0x01,0x03,0x24,
98265 -0x28,0x28,0x02,0x24,
98266 -0x5C,0x00,0x26,0x36,
98267 -0x60,0x00,0x27,0x36,
98268 -0x64,0x00,0x28,0x36,
98269 -0x8A,0x00,0x29,0x36,
98270 -0x00,0x00,0xC3,0xAC,
98271 -0x00,0x00,0xE4,0xAC,
98272 -0x00,0x00,0x04,0xAD,
98273 -0x00,0x00,0x22,0xA5,
98274 -0x0E,0x0E,0x02,0x3C,
98275 -0x09,0x00,0x03,0x24,
98276 -0x0A,0x0A,0x42,0x34,
98277 -0x89,0x00,0x2A,0x36,
98278 -0x8C,0x00,0x2B,0x36,
98279 -0x00,0x00,0x43,0xA1,
98280 -0x90,0x00,0x2C,0x36,
98281 -0x00,0x00,0x62,0xAD,
98282 -0x13,0x00,0x03,0x24,
98283 -0x30,0x00,0x02,0x24,
98284 -0x91,0x00,0x2D,0x36,
98285 -0x00,0x00,0x83,0xA1,
98286 -0x92,0x00,0x2E,0x36,
98287 -0x00,0x00,0xA2,0xA1,
98288 -0x3A,0x01,0x03,0x24,
98289 -0x21,0x00,0x02,0x24,
98290 -0xB5,0x00,0x2F,0x36,
98291 -0x00,0x00,0xC3,0xA5,
98292 -0x00,0x00,0xE2,0xA1,
98293 -0x10,0x00,0xA2,0x8F,
98294 -0x12,0x00,0x03,0x24,
98295 -0x89,0x01,0x43,0x10,
98296 -0x07,0x07,0x02,0x3C,
98297 -0x07,0x07,0x42,0x34,
98298 -0xA0,0x00,0x24,0x36,
98299 -0x00,0x00,0x82,0xAC,
98300 -0xA4,0x00,0x25,0x36,
98301 -0x00,0x07,0x03,0x24,
98302 -0x00,0xC0,0x02,0x3C,
98303 -0xA8,0x00,0x26,0x36,
98304 -0x00,0x00,0xA3,0xAC,
98305 -0x00,0xC4,0x42,0x34,
98306 -0x00,0x00,0xC2,0xAC,
98307 -0x02,0x80,0x03,0x3C,
98308 -0x30,0x1F,0x62,0x24,
98309 -0xAC,0x1B,0x45,0x94,
98310 -0xAE,0x1B,0x46,0x94,
98311 -0xAA,0x1B,0x42,0x90,
98312 -0x02,0x80,0x03,0x3C,
98313 -0x21,0xB0,0x07,0x3C,
98314 -0x14,0x00,0xA2,0xA3,
98315 -0xE9,0x5D,0x63,0x90,
98316 -0x20,0xB0,0x02,0x3C,
98317 -0xFF,0xFF,0x42,0x34,
98318 -0x18,0x00,0xA3,0xAF,
98319 -0x23,0xB0,0x03,0x3C,
98320 -0xFF,0xFF,0x63,0x34,
98321 -0x24,0xB0,0x08,0x3C,
98322 -0xFF,0x1F,0x04,0x3C,
98323 -0x25,0xB0,0x1E,0x3C,
98324 -0xFF,0xFF,0x84,0x34,
98325 -0x21,0x38,0xA7,0x00,
98326 -0x21,0x40,0xC8,0x00,
98327 -0x21,0x28,0xA2,0x00,
98328 -0x21,0x30,0xC3,0x00,
98329 -0x24,0x40,0x04,0x01,
98330 -0x24,0x28,0xA4,0x00,
98331 -0x24,0x38,0xE4,0x00,
98332 -0x24,0x30,0xC4,0x00,
98333 -0x35,0x00,0x02,0x24,
98334 -0x20,0x00,0xC4,0x37,
98335 -0x00,0x00,0x82,0xA0,
98336 -0x22,0x00,0x03,0x24,
98337 -0x09,0x00,0x02,0x24,
98338 -0x03,0x05,0xC9,0x37,
98339 -0x60,0x05,0xCA,0x37,
98340 -0xAC,0x00,0xCB,0x37,
98341 -0xF8,0x00,0xCC,0x37,
98342 -0xB0,0x00,0xCD,0x37,
98343 -0x08,0x01,0xCE,0x37,
98344 -0xD8,0x00,0xCF,0x37,
98345 -0x00,0x00,0x23,0xA1,
98346 -0x00,0x00,0x42,0xA1,
98347 -0x00,0x00,0x65,0xAD,
98348 -0x00,0x00,0x87,0xAD,
98349 -0x00,0x00,0xA6,0xAD,
98350 -0x00,0x00,0xC8,0xAD,
98351 -0x00,0x00,0xE0,0xA1,
98352 -0x14,0x00,0xA3,0x93,
98353 -0x25,0xB0,0x02,0x3C,
98354 -0xB4,0x00,0x42,0x34,
98355 -0x00,0x00,0x43,0xA0,
98356 -0xB6,0x00,0xD1,0x37,
98357 -0x04,0x00,0x02,0x24,
98358 -0x25,0xB0,0x03,0x3C,
98359 -0x00,0x00,0x22,0xA2,
98360 -0xB9,0x00,0x63,0x34,
98361 -0xFF,0xFF,0x02,0x24,
98362 -0x00,0x00,0x62,0xA0,
98363 -0x25,0xB0,0x03,0x3C,
98364 -0x0F,0x00,0x02,0x24,
98365 -0xBA,0x00,0x63,0x34,
98366 -0x00,0x00,0x62,0xA4,
98367 -0x16,0x01,0xD4,0x37,
98368 -0x3F,0x3F,0x03,0x24,
98369 -0x2F,0x00,0x02,0x3C,
98370 -0x00,0x00,0x83,0xA6,
98371 -0x17,0x32,0x42,0x34,
98372 -0xFF,0xCF,0x03,0x24,
98373 -0x18,0x01,0xD5,0x37,
98374 -0x1A,0x01,0xD6,0x37,
98375 -0xDC,0x00,0xD7,0x37,
98376 -0xD0,0x01,0xD8,0x37,
98377 -0x00,0x00,0xA0,0xA6,
98378 -0x00,0x00,0xC0,0xA6,
98379 -0x00,0x00,0xE3,0xAE,
98380 -0x00,0x00,0x02,0xAF,
98381 -0x5E,0x00,0x03,0x3C,
98382 -0x25,0xB0,0x02,0x3C,
98383 -0x17,0x43,0x63,0x34,
98384 -0xD4,0x01,0x42,0x34,
98385 -0x00,0x00,0x43,0xAC,
98386 -0x10,0x00,0x02,0x3C,
98387 -0x20,0x53,0x42,0x34,
98388 -0xD8,0x01,0xDF,0x37,
98389 -0x00,0x00,0xE2,0xAF,
98390 -0x25,0xB0,0x02,0x3C,
98391 -0x44,0xA4,0x03,0x34,
98392 -0xDC,0x01,0x42,0x34,
98393 -0x00,0x00,0x43,0xAC,
98394 -0x25,0xB0,0x03,0x3C,
98395 -0x1A,0x06,0x02,0x24,
98396 -0xE0,0x01,0x63,0x34,
98397 -0x00,0x00,0x62,0xA4,
98398 -0xC2,0x00,0x02,0x3C,
98399 -0x30,0x30,0x03,0x24,
98400 -0x51,0x10,0x42,0x34,
98401 -0xF4,0x01,0xD0,0x37,
98402 -0xF8,0x01,0xD3,0x37,
98403 -0x00,0x00,0x03,0xA6,
98404 -0x00,0x02,0xD2,0x37,
98405 -0x00,0x00,0x62,0xAE,
98406 -0x26,0x00,0x03,0x24,
98407 -0x03,0x02,0xD9,0x37,
98408 -0x04,0x00,0x02,0x24,
98409 -0x00,0x00,0x43,0xA6,
98410 -0x00,0x00,0x22,0xA3,
98411 -0x18,0x00,0xA3,0x8F,
98412 -0x00,0x00,0x00,0x00,
98413 -0xE5,0x00,0x60,0x14,
98414 -0x36,0x02,0xC2,0x37,
98415 -0x04,0x00,0x03,0x24,
98416 -0x00,0x00,0x43,0xA0,
98417 -0x02,0x80,0x0B,0x3C,
98418 -0xDE,0x5D,0x66,0x91,
98419 -0x25,0xB0,0x09,0x3C,
98420 -0x80,0x00,0x02,0x24,
98421 -0x34,0x02,0x24,0x35,
98422 -0x00,0x00,0x82,0xA4,
98423 -0x37,0x02,0x25,0x35,
98424 -0x53,0x00,0x03,0x24,
98425 -0x22,0x00,0x02,0x24,
98426 -0x00,0x00,0xA3,0xA0,
98427 -0xE6,0x00,0xC2,0x10,
98428 -0x1B,0x1B,0x02,0x3C,
98429 -0x13,0x13,0x02,0x3C,
98430 -0x13,0x13,0x42,0x34,
98431 -0x60,0x01,0x23,0x35,
98432 -0x64,0x01,0x24,0x35,
98433 -0x68,0x01,0x25,0x35,
98434 -0x7C,0x01,0x2A,0x35,
98435 -0x6C,0x01,0x26,0x35,
98436 -0x70,0x01,0x27,0x35,
98437 -0x74,0x01,0x28,0x35,
98438 -0x78,0x01,0x29,0x35,
98439 -0x00,0x00,0x62,0xAC,
98440 -0x00,0x00,0x82,0xAC,
98441 -0x00,0x00,0xA2,0xAC,
98442 -0x00,0x00,0xC2,0xAC,
98443 -0x00,0x00,0xE2,0xAC,
98444 -0x00,0x00,0x02,0xAD,
98445 -0x00,0x00,0x22,0xAD,
98446 -0x00,0x00,0x42,0xAD,
98447 -0xDE,0x5D,0x65,0x91,
98448 -0x25,0xB0,0x0C,0x3C,
98449 -0x01,0x00,0x03,0x3C,
98450 -0x80,0x01,0x82,0x35,
98451 -0x08,0x5F,0x63,0x34,
98452 -0x22,0x00,0x04,0x24,
98453 -0x00,0x00,0x43,0xAC,
98454 -0xE5,0x00,0xA4,0x10,
98455 -0x0F,0x1F,0x02,0x3C,
98456 -0x92,0x00,0x02,0x24,
98457 -0xE2,0x00,0xA2,0x10,
98458 -0x0F,0x1F,0x02,0x3C,
98459 -0x0F,0x10,0x02,0x3C,
98460 -0x00,0xF0,0x4F,0x34,
98461 -0xF7,0x01,0x91,0x35,
98462 -0x15,0xF0,0x4D,0x34,
98463 -0x77,0x00,0x0E,0x24,
98464 -0x84,0x01,0x87,0x35,
98465 -0x88,0x01,0x88,0x35,
98466 -0x10,0xF0,0x44,0x34,
98467 -0x8C,0x01,0x85,0x35,
98468 -0x05,0xF0,0x42,0x34,
98469 -0x00,0x00,0xED,0xAC,
98470 -0x90,0x01,0x83,0x35,
98471 -0x00,0x00,0x04,0xAD,
98472 -0x94,0x01,0x86,0x35,
98473 -0x00,0x00,0xA2,0xAC,
98474 -0xF5,0x0F,0x02,0x24,
98475 -0x00,0x00,0x6F,0xAC,
98476 -0x98,0x01,0x89,0x35,
98477 -0x00,0x00,0xC2,0xAC,
98478 -0x9C,0x01,0x8A,0x35,
98479 -0xA0,0x01,0x8B,0x35,
98480 -0xF0,0x0F,0x03,0x24,
98481 -0xF6,0x01,0x8C,0x35,
98482 -0x0D,0x00,0x02,0x24,
98483 -0x00,0x00,0x23,0xAD,
98484 -0x00,0x00,0x42,0xAD,
98485 -0x00,0x00,0x6D,0xAD,
98486 -0x02,0x80,0x02,0x3C,
98487 -0x00,0x00,0x8E,0xA1,
98488 -0x00,0x00,0x2E,0xA2,
98489 -0xFB,0x5D,0x42,0x90,
98490 -0x25,0xB0,0x1F,0x3C,
98491 -0xA7,0x01,0xE7,0x37,
98492 -0x1C,0x00,0xA2,0xAF,
98493 -0xFF,0xFF,0x02,0x24,
98494 -0x00,0x00,0xE2,0xA0,
98495 -0x05,0x06,0x03,0x3C,
98496 -0x25,0xB0,0x02,0x3C,
98497 -0x03,0x04,0x63,0x34,
98498 -0x0C,0x00,0x04,0x24,
98499 -0xFF,0xFF,0x05,0x24,
98500 -0x01,0x02,0x06,0x3C,
98501 -0xC2,0x01,0x42,0x34,
98502 -0xA8,0x01,0xE8,0x37,
98503 -0xAC,0x01,0xE9,0x37,
98504 -0xB0,0x01,0xEA,0x37,
98505 -0xB4,0x01,0xEB,0x37,
98506 -0xB8,0x01,0xEC,0x37,
98507 -0xBC,0x01,0xED,0x37,
98508 -0xC0,0x01,0xEE,0x37,
98509 -0xC1,0x01,0xEF,0x37,
98510 -0x00,0x00,0x05,0xAD,
98511 -0x00,0x00,0x25,0xAD,
98512 -0x00,0x00,0x46,0xAD,
98513 -0x00,0x00,0x63,0xAD,
98514 -0x00,0x00,0x86,0xAD,
98515 -0x00,0x00,0xA3,0xAD,
98516 -0x00,0x00,0xC4,0xA1,
98517 -0x25,0xB0,0x03,0x3C,
98518 -0x00,0x00,0xE4,0xA1,
98519 -0x00,0x00,0x44,0xA0,
98520 -0x25,0xB0,0x02,0x3C,
98521 -0x0D,0x00,0x17,0x24,
98522 -0x0E,0x00,0x18,0x24,
98523 -0xC4,0x01,0x63,0x34,
98524 -0xC5,0x01,0x42,0x34,
98525 -0xC3,0x01,0xF1,0x37,
98526 -0x00,0x00,0x37,0xA2,
98527 -0xC6,0x01,0xF4,0x37,
98528 -0x00,0x00,0x77,0xA0,
98529 -0xC7,0x01,0xF5,0x37,
98530 -0x00,0x00,0x58,0xA0,
98531 -0x0F,0x00,0x02,0x24,
98532 -0x00,0x00,0x98,0xA2,
98533 -0x00,0x00,0xA2,0xA2,
98534 -0xD3,0x01,0x02,0x3C,
98535 -0x46,0x00,0xF6,0x37,
98536 -0x48,0x00,0xFE,0x37,
98537 -0x0E,0xF0,0x42,0x34,
98538 -0x00,0x00,0xC0,0xA6,
98539 -0x00,0x00,0xC2,0xAF,
98540 -0x1C,0x00,0xA3,0x8F,
98541 -0x00,0x00,0x00,0x00,
98542 -0x09,0x00,0x60,0x10,
98543 -0x44,0x00,0xF7,0x37,
98544 -0x00,0x00,0xE2,0x8E,
98545 -0x00,0x02,0x03,0x3C,
98546 -0x25,0x10,0x43,0x00,
98547 -0x00,0x00,0xE2,0xAE,
98548 -0x00,0x00,0xC3,0x8F,
98549 -0x00,0x04,0x02,0x3C,
98550 -0x25,0x18,0x62,0x00,
98551 -0x00,0x00,0xC3,0xAF,
98552 -0x4C,0x00,0xE2,0x37,
98553 -0x00,0x00,0x40,0xA0,
98554 -0x4D,0x00,0xE3,0x37,
98555 -0xF1,0x02,0xE4,0x37,
98556 -0x08,0x00,0x02,0x24,
98557 -0x00,0x00,0x60,0xA0,
98558 -0x40,0x00,0xE6,0x37,
98559 -0x00,0x00,0x82,0xA0,
98560 -0x64,0x03,0xE5,0x37,
98561 -0xBC,0x00,0x03,0x24,
98562 -0xFC,0x37,0x02,0x24,
98563 -0x00,0x00,0xC3,0xA4,
98564 -0x00,0x00,0xA0,0xA0,
98565 -0x00,0x00,0xC2,0xA4,
98566 -0x02,0x80,0x02,0x3C,
98567 -0xD8,0x00,0xE9,0x37,
98568 -0x30,0x1F,0x43,0x24,
98569 -0x00,0x00,0x26,0x91,
98570 -0xAA,0x1B,0x64,0x90,
98571 -0x2A,0xB0,0x05,0x3C,
98572 -0xA0,0xFF,0x02,0x24,
98573 -0x26,0xB0,0x07,0x3C,
98574 -0x25,0x30,0xC2,0x00,
98575 -0x30,0x00,0xAD,0x34,
98576 -0x34,0x00,0xA8,0x34,
98577 -0x01,0x00,0x83,0x24,
98578 -0x38,0x00,0xA5,0x34,
98579 -0x20,0x20,0x02,0x24,
98580 -0x00,0x00,0x26,0xA1,
98581 -0x79,0x00,0xEA,0x34,
98582 -0x00,0x00,0x03,0xA1,
98583 -0x00,0x00,0xA2,0xA4,
98584 -0x40,0x00,0x03,0x24,
98585 -0x16,0x00,0x02,0x24,
98586 -0x00,0x00,0xA3,0xA1,
98587 -0x94,0x00,0xEB,0x37,
98588 -0x00,0x00,0x42,0xA1,
98589 -0x98,0x00,0xEC,0x37,
98590 -0x64,0x00,0x03,0x24,
98591 -0x22,0x00,0x02,0x24,
98592 -0x00,0x00,0x63,0xA5,
98593 -0x7C,0x00,0xF4,0x34,
98594 -0x00,0x00,0x82,0xA5,
98595 -0x7A,0x00,0xE7,0x34,
98596 -0x04,0x00,0x03,0x24,
98597 -0x20,0x0C,0x02,0x24,
98598 -0x00,0x00,0xE3,0xA0,
98599 -0x9C,0x00,0xEE,0x37,
98600 -0x00,0x00,0x82,0xA6,
98601 -0x9A,0x00,0xEF,0x37,
98602 -0x0A,0x00,0x03,0x24,
98603 -0xFF,0x03,0x02,0x24,
98604 -0x00,0x00,0xC3,0xA1,
98605 -0x00,0x00,0xE2,0xA5,
98606 -0x25,0xB0,0x02,0x3C,
98607 -0x02,0x00,0x03,0x24,
98608 -0x96,0x00,0x42,0x34,
98609 -0x00,0x00,0x43,0xA4,
98610 -0x89,0x00,0xF5,0x37,
98611 -0xB7,0x00,0xF1,0x37,
98612 -0x20,0x00,0x02,0x24,
98613 -0x09,0x00,0x03,0x24,
98614 -0x00,0x00,0x22,0xA2,
98615 -0x00,0x00,0xA3,0xA2,
98616 -0x00,0x00,0xE2,0x96,
98617 -0xFF,0xFD,0x03,0x24,
98618 -0x04,0x02,0x05,0x24,
98619 -0x24,0x10,0x43,0x00,
98620 -0x00,0x00,0xE2,0xA6,
98621 -0x00,0x00,0xE3,0x96,
98622 -0x29,0xB0,0x02,0x3C,
98623 -0x40,0x00,0x42,0x34,
98624 -0x00,0x02,0x63,0x34,
98625 -0x00,0x00,0xE3,0xA6,
98626 -0xFF,0x00,0x84,0x30,
98627 -0x00,0x00,0x45,0xA4,
98628 -0x73,0x22,0x00,0x0C,
98629 -0x00,0x00,0x00,0x00,
98630 -0x44,0x00,0xBF,0x8F,
98631 -0x40,0x00,0xBE,0x8F,
98632 -0x3C,0x00,0xB7,0x8F,
98633 -0x38,0x00,0xB6,0x8F,
98634 -0x34,0x00,0xB5,0x8F,
98635 -0x30,0x00,0xB4,0x8F,
98636 -0x2C,0x00,0xB3,0x8F,
98637 -0x28,0x00,0xB2,0x8F,
98638 -0x24,0x00,0xB1,0x8F,
98639 -0x20,0x00,0xB0,0x8F,
98640 -0x01,0x00,0x02,0x24,
98641 -0x08,0x00,0xE0,0x03,
98642 -0x48,0x00,0xBD,0x27,
98643 -0xFF,0xFF,0x03,0x24,
98644 -0x00,0x00,0x43,0xA0,
98645 -0x02,0x80,0x0B,0x3C,
98646 -0xDE,0x5D,0x66,0x91,
98647 -0x25,0xB0,0x09,0x3C,
98648 -0x80,0x00,0x02,0x24,
98649 -0x34,0x02,0x24,0x35,
98650 -0x00,0x00,0x82,0xA4,
98651 -0x37,0x02,0x25,0x35,
98652 -0x53,0x00,0x03,0x24,
98653 -0x22,0x00,0x02,0x24,
98654 -0x00,0x00,0xA3,0xA0,
98655 -0x1E,0xFF,0xC2,0x14,
98656 -0x13,0x13,0x02,0x3C,
98657 -0x1B,0x1B,0x02,0x3C,
98658 -0x1B,0x1B,0x42,0x34,
98659 -0x60,0x01,0x23,0x35,
98660 -0x64,0x01,0x24,0x35,
98661 -0x68,0x01,0x25,0x35,
98662 -0x7C,0x01,0x2A,0x35,
98663 -0x6C,0x01,0x26,0x35,
98664 -0x70,0x01,0x27,0x35,
98665 -0x74,0x01,0x28,0x35,
98666 -0x78,0x01,0x29,0x35,
98667 -0x00,0x00,0x62,0xAC,
98668 -0x00,0x00,0x82,0xAC,
98669 -0x00,0x00,0xA2,0xAC,
98670 -0x00,0x00,0xC2,0xAC,
98671 -0x00,0x00,0xE2,0xAC,
98672 -0x00,0x00,0x02,0xAD,
98673 -0x00,0x00,0x22,0xAD,
98674 -0x00,0x00,0x42,0xAD,
98675 -0xDE,0x5D,0x65,0x91,
98676 -0x25,0xB0,0x0C,0x3C,
98677 -0x01,0x00,0x03,0x3C,
98678 -0x80,0x01,0x82,0x35,
98679 -0x08,0x5F,0x63,0x34,
98680 -0x22,0x00,0x04,0x24,
98681 -0x00,0x00,0x43,0xAC,
98682 -0x1D,0xFF,0xA4,0x14,
98683 -0x0F,0x1F,0x02,0x3C,
98684 -0x00,0xF0,0x4F,0x34,
98685 -0xF7,0x01,0x91,0x35,
98686 -0x15,0xF0,0x4D,0x34,
98687 -0x78,0x67,0x00,0x08,
98688 -0xFF,0xFF,0x0E,0x24,
98689 -0x02,0x80,0x02,0x3C,
98690 -0xDF,0x5D,0x44,0x90,
98691 -0x06,0x00,0x03,0x24,
98692 -0x0C,0x00,0x83,0x10,
98693 -0x00,0x1C,0x02,0x3C,
98694 -0x00,0x1C,0x42,0x34,
98695 -0xA0,0x00,0x24,0x36,
98696 -0x00,0x00,0x82,0xAC,
98697 -0x00,0xE0,0x02,0x3C,
98698 -0xA4,0x00,0x25,0x36,
98699 -0x00,0x04,0x03,0x24,
98700 -0xA8,0x00,0x26,0x36,
98701 -0x00,0xB0,0x42,0x34,
98702 -0x00,0x00,0xA3,0xAC,
98703 -0xDA,0x66,0x00,0x08,
98704 -0x00,0x00,0x00,0x00,
98705 -0x16,0x16,0x02,0x3C,
98706 -0x07,0x07,0x42,0x34,
98707 -0xA0,0x00,0x23,0x36,
98708 -0x00,0x00,0x62,0xAC,
98709 -0x00,0xC0,0x02,0x3C,
98710 -0xA8,0x00,0x25,0x36,
98711 -0xA4,0x00,0x24,0x36,
98712 -0x00,0xB4,0x42,0x34,
98713 -0x00,0x00,0x80,0xAC,
98714 -0x00,0x00,0xA2,0xAC,
98715 -0xDC,0x66,0x00,0x08,
98716 -0x02,0x80,0x03,0x3C,
98717 -0xE8,0xFF,0xBD,0x27,
98718 -0x01,0x00,0x06,0x24,
98719 -0xE8,0x0E,0x04,0x24,
98720 -0x10,0x00,0xBF,0xAF,
98721 -0xA9,0x45,0x00,0x0C,
98722 -0x00,0x10,0x05,0x3C,
98723 -0x60,0x08,0x04,0x24,
98724 -0xCB,0x45,0x00,0x0C,
98725 -0xFF,0xFF,0x05,0x24,
98726 -0x20,0x04,0x06,0x3C,
98727 -0x20,0x04,0xC6,0x34,
98728 -0x25,0x30,0x46,0x00,
98729 -0x60,0x08,0x04,0x24,
98730 -0xA9,0x45,0x00,0x0C,
98731 -0xFF,0xFF,0x05,0x24,
98732 -0x70,0x08,0x04,0x24,
98733 -0x00,0x04,0x05,0x24,
98734 -0xA9,0x45,0x00,0x0C,
98735 -0x21,0x30,0x00,0x00,
98736 -0x00,0x20,0x06,0x3C,
98737 -0x80,0x00,0xC6,0x34,
98738 -0x80,0x0C,0x04,0x24,
98739 -0xA9,0x45,0x00,0x0C,
98740 -0xFF,0xFF,0x05,0x24,
98741 -0x00,0x40,0x06,0x3C,
98742 -0x10,0x00,0xBF,0x8F,
98743 -0x00,0x01,0xC6,0x34,
98744 -0x88,0x0C,0x04,0x24,
98745 -0xFF,0xFF,0x05,0x24,
98746 -0xA9,0x45,0x00,0x08,
98747 -0x18,0x00,0xBD,0x27,
98748 -0x10,0x00,0xA0,0x10,
98749 -0x21,0x38,0x00,0x00,
98750 -0x25,0xB0,0x08,0x3C,
98751 -0x00,0x00,0x82,0x8C,
98752 -0x04,0x00,0x83,0x8C,
98753 -0x21,0x30,0x00,0x00,
98754 -0x21,0x10,0x48,0x00,
98755 -0x00,0x00,0x43,0xAC,
98756 -0x01,0x00,0xC2,0x24,
98757 -0xFF,0x00,0x46,0x30,
98758 -0x06,0x00,0xC3,0x2C,
98759 -0xFD,0xFF,0x60,0x14,
98760 -0x01,0x00,0xC2,0x24,
98761 -0x02,0x00,0xE7,0x24,
98762 -0x2B,0x10,0xE5,0x00,
98763 -0xF3,0xFF,0x40,0x14,
98764 -0x08,0x00,0x84,0x24,
98765 -0x08,0x00,0xE0,0x03,
98766 -0x00,0x00,0x00,0x00,
98767 -0xE0,0xFF,0xBD,0x27,
98768 -0x18,0x00,0xB2,0xAF,
98769 -0x14,0x00,0xB1,0xAF,
98770 -0x1C,0x00,0xBF,0xAF,
98771 -0x10,0x00,0xB0,0xAF,
98772 -0x21,0x90,0xA0,0x00,
98773 -0x0B,0x00,0xA0,0x10,
98774 -0x21,0x88,0x00,0x00,
98775 -0x21,0x80,0x80,0x00,
98776 -0x00,0x00,0x04,0x8E,
98777 -0x04,0x00,0x05,0x8E,
98778 -0x08,0x00,0x06,0x8E,
98779 -0x03,0x00,0x31,0x26,
98780 -0xA9,0x45,0x00,0x0C,
98781 -0x0C,0x00,0x10,0x26,
98782 -0x2B,0x10,0x32,0x02,
98783 -0xF8,0xFF,0x40,0x14,
98784 -0x00,0x00,0x00,0x00,
98785 -0x1C,0x00,0xBF,0x8F,
98786 -0x18,0x00,0xB2,0x8F,
98787 -0x14,0x00,0xB1,0x8F,
98788 -0x10,0x00,0xB0,0x8F,
98789 -0x08,0x00,0xE0,0x03,
98790 -0x20,0x00,0xBD,0x27,
98791 -0x21,0x40,0x80,0x00,
98792 -0x21,0x48,0x00,0x00,
98793 -0x1E,0x00,0xA0,0x10,
98794 -0x21,0x38,0x00,0x00,
98795 -0x80,0x30,0x07,0x00,
98796 -0x21,0x10,0xC8,0x00,
98797 -0x00,0x00,0x43,0x8C,
98798 -0x00,0x00,0x00,0x00,
98799 -0x00,0xF2,0x63,0x24,
98800 -0x1D,0x00,0x62,0x2C,
98801 -0x12,0x00,0x40,0x10,
98802 -0x80,0x10,0x03,0x00,
98803 -0x02,0x80,0x03,0x3C,
98804 -0x64,0xE9,0x63,0x24,
98805 -0x21,0x10,0x43,0x00,
98806 -0x00,0x00,0x44,0x8C,
98807 -0x00,0x00,0x00,0x00,
98808 -0x08,0x00,0x80,0x00,
98809 -0x00,0x00,0x00,0x00,
98810 -0x21,0x10,0xC8,0x00,
98811 -0xC0,0x18,0x09,0x00,
98812 -0x23,0x18,0x69,0x00,
98813 -0x08,0x00,0x44,0x8C,
98814 -0x02,0x80,0x02,0x3C,
98815 -0x80,0x18,0x03,0x00,
98816 -0x30,0x1F,0x42,0x24,
98817 -0x21,0x18,0x62,0x00,
98818 -0x04,0x1D,0x64,0xAC,
98819 -0x01,0x00,0x29,0x25,
98820 -0x03,0x00,0xE7,0x24,
98821 -0x2B,0x10,0xE5,0x00,
98822 -0xE5,0xFF,0x40,0x14,
98823 -0x80,0x30,0x07,0x00,
98824 -0x08,0x00,0xE0,0x03,
98825 -0x00,0x00,0x00,0x00,
98826 -0x21,0x10,0xC8,0x00,
98827 -0xC0,0x18,0x09,0x00,
98828 -0x08,0x00,0x44,0x8C,
98829 -0x23,0x18,0x69,0x00,
98830 -0x02,0x80,0x02,0x3C,
98831 -0x30,0x1F,0x42,0x24,
98832 -0x80,0x18,0x03,0x00,
98833 -0x03,0x00,0xE7,0x24,
98834 -0x21,0x18,0x62,0x00,
98835 -0x2B,0x10,0xE5,0x00,
98836 -0xD6,0xFF,0x40,0x14,
98837 -0x00,0x1D,0x64,0xAC,
98838 -0xE0,0x68,0x00,0x08,
98839 -0x00,0x00,0x00,0x00,
98840 -0x21,0x10,0xC8,0x00,
98841 -0xC0,0x18,0x09,0x00,
98842 -0x08,0x00,0x44,0x8C,
98843 -0x23,0x18,0x69,0x00,
98844 -0x02,0x80,0x02,0x3C,
98845 -0x30,0x1F,0x42,0x24,
98846 -0x80,0x18,0x03,0x00,
98847 -0x03,0x00,0xE7,0x24,
98848 -0x21,0x18,0x62,0x00,
98849 -0x2B,0x10,0xE5,0x00,
98850 -0xC8,0xFF,0x40,0x14,
98851 -0xFC,0x1C,0x64,0xAC,
98852 -0xE0,0x68,0x00,0x08,
98853 -0x00,0x00,0x00,0x00,
98854 -0x21,0x10,0xC8,0x00,
98855 -0xC0,0x18,0x09,0x00,
98856 -0x08,0x00,0x44,0x8C,
98857 -0x23,0x18,0x69,0x00,
98858 -0x02,0x80,0x02,0x3C,
98859 -0x30,0x1F,0x42,0x24,
98860 -0x80,0x18,0x03,0x00,
98861 -0x03,0x00,0xE7,0x24,
98862 -0x21,0x18,0x62,0x00,
98863 -0x2B,0x10,0xE5,0x00,
98864 -0xBA,0xFF,0x40,0x14,
98865 -0xF8,0x1C,0x64,0xAC,
98866 -0xE0,0x68,0x00,0x08,
98867 -0x00,0x00,0x00,0x00,
98868 -0x21,0x10,0xC8,0x00,
98869 -0xC0,0x18,0x09,0x00,
98870 -0x08,0x00,0x44,0x8C,
98871 -0x23,0x18,0x69,0x00,
98872 -0x02,0x80,0x02,0x3C,
98873 -0x30,0x1F,0x42,0x24,
98874 -0x80,0x18,0x03,0x00,
98875 -0x03,0x00,0xE7,0x24,
98876 -0x21,0x18,0x62,0x00,
98877 -0x2B,0x10,0xE5,0x00,
98878 -0xAC,0xFF,0x40,0x14,
98879 -0x08,0x1D,0x64,0xAC,
98880 -0xE0,0x68,0x00,0x08,
98881 -0x00,0x00,0x00,0x00,
98882 -0x21,0x10,0xC8,0x00,
98883 -0xC0,0x18,0x09,0x00,
98884 -0x08,0x00,0x44,0x8C,
98885 -0x23,0x18,0x69,0x00,
98886 -0x02,0x80,0x02,0x3C,
98887 -0x30,0x1F,0x42,0x24,
98888 -0x80,0x18,0x03,0x00,
98889 -0x03,0x00,0xE7,0x24,
98890 -0x21,0x18,0x62,0x00,
98891 -0x2B,0x10,0xE5,0x00,
98892 -0x9E,0xFF,0x40,0x14,
98893 -0xF4,0x1C,0x64,0xAC,
98894 -0xE0,0x68,0x00,0x08,
98895 -0x00,0x00,0x00,0x00,
98896 -0x21,0x10,0xC8,0x00,
98897 -0xC0,0x18,0x09,0x00,
98898 -0x08,0x00,0x44,0x8C,
98899 -0x23,0x18,0x69,0x00,
98900 -0x02,0x80,0x02,0x3C,
98901 -0x30,0x1F,0x42,0x24,
98902 -0x80,0x18,0x03,0x00,
98903 -0x03,0x00,0xE7,0x24,
98904 -0x21,0x18,0x62,0x00,
98905 -0x2B,0x10,0xE5,0x00,
98906 -0x90,0xFF,0x40,0x14,
98907 -0xF0,0x1C,0x64,0xAC,
98908 -0xE0,0x68,0x00,0x08,
98909 -0x00,0x00,0x00,0x00,
98910 -0x25,0xB0,0x02,0x3C,
98911 -0xFC,0x37,0x03,0x24,
98912 -0x40,0x00,0x42,0x34,
98913 -0x02,0x80,0x04,0x3C,
98914 -0x00,0x00,0x43,0xA4,
98915 -0xE8,0xFF,0xBD,0x27,
98916 -0xA4,0xCF,0x84,0x24,
98917 -0x10,0x00,0xBF,0xAF,
98918 -0x94,0x68,0x00,0x0C,
98919 -0x74,0x01,0x05,0x24,
98920 -0x02,0x80,0x02,0x3C,
98921 -0xDE,0x5D,0x44,0x90,
98922 -0x12,0x00,0x03,0x24,
98923 -0x34,0x00,0x83,0x10,
98924 -0x13,0x00,0x82,0x28,
98925 -0x17,0x00,0x40,0x14,
98926 -0x11,0x00,0x02,0x24,
98927 -0x22,0x00,0x02,0x24,
98928 -0x36,0x00,0x82,0x10,
98929 -0x02,0x80,0x04,0x3C,
98930 -0x02,0x80,0x04,0x3C,
98931 -0x2C,0xCC,0x84,0x24,
98932 -0xBF,0x68,0x00,0x0C,
98933 -0x54,0x00,0x05,0x24,
98934 -0x02,0x80,0x02,0x3C,
98935 -0x4A,0xF3,0x44,0x90,
98936 -0x01,0x00,0x03,0x24,
98937 -0x1A,0x00,0x83,0x10,
98938 -0x00,0x00,0x00,0x00,
98939 -0x02,0x80,0x04,0x3C,
98940 -0x2C,0xC7,0x84,0x24,
98941 -0x94,0x68,0x00,0x0C,
98942 -0x40,0x01,0x05,0x24,
98943 -0x10,0x00,0xBF,0x8F,
98944 -0x84,0x08,0x04,0x24,
98945 -0xFF,0x00,0x05,0x24,
98946 -0x58,0x00,0x06,0x24,
98947 -0x1B,0x47,0x00,0x08,
98948 -0x18,0x00,0xBD,0x27,
98949 -0xED,0xFF,0x82,0x14,
98950 -0x02,0x80,0x04,0x3C,
98951 -0x02,0x80,0x04,0x3C,
98952 -0xE4,0xCE,0x84,0x24,
98953 -0xA7,0x68,0x00,0x0C,
98954 -0x30,0x00,0x05,0x24,
98955 -0x02,0x80,0x04,0x3C,
98956 -0x2C,0xCC,0x84,0x24,
98957 -0xBF,0x68,0x00,0x0C,
98958 -0x54,0x00,0x05,0x24,
98959 -0x02,0x80,0x02,0x3C,
98960 -0x4A,0xF3,0x44,0x90,
98961 -0x01,0x00,0x03,0x24,
98962 -0xE8,0xFF,0x83,0x14,
98963 -0x00,0x00,0x00,0x00,
98964 -0x75,0x68,0x00,0x0C,
98965 -0x00,0x00,0x00,0x00,
98966 -0x02,0x80,0x04,0x3C,
98967 -0x2C,0xC7,0x84,0x24,
98968 -0x94,0x68,0x00,0x0C,
98969 -0x40,0x01,0x05,0x24,
98970 -0x10,0x00,0xBF,0x8F,
98971 -0x84,0x08,0x04,0x24,
98972 -0xFF,0x00,0x05,0x24,
98973 -0x58,0x00,0x06,0x24,
98974 -0x1B,0x47,0x00,0x08,
98975 -0x18,0x00,0xBD,0x27,
98976 -0x02,0x80,0x04,0x3C,
98977 -0x30,0xCE,0x84,0x24,
98978 -0x2D,0x00,0x05,0x24,
98979 -0xA7,0x68,0x00,0x0C,
98980 -0x00,0x00,0x00,0x00,
98981 -0x64,0x69,0x00,0x08,
98982 -0x02,0x80,0x04,0x3C,
98983 -0x7C,0xCD,0x84,0x24,
98984 -0x7B,0x69,0x00,0x08,
98985 -0x2D,0x00,0x05,0x24,
98986 -0xE8,0xFF,0xBD,0x27,
98987 -0x10,0x00,0xB0,0xAF,
98988 -0x50,0x0C,0x04,0x24,
98989 -0xFF,0x00,0x05,0x24,
98990 -0x02,0x80,0x10,0x3C,
98991 -0x14,0x00,0xBF,0xAF,
98992 -0x0A,0x47,0x00,0x0C,
98993 -0x30,0x1F,0x10,0x26,
98994 -0x60,0x1D,0x02,0xA2,
98995 -0x58,0x0C,0x04,0x24,
98996 -0x0A,0x47,0x00,0x0C,
98997 -0xFF,0x00,0x05,0x24,
98998 -0x61,0x1D,0x02,0xA2,
98999 -0x60,0x0C,0x04,0x24,
99000 -0x0A,0x47,0x00,0x0C,
99001 -0xFF,0x00,0x05,0x24,
99002 -0x62,0x1D,0x02,0xA2,
99003 -0x68,0x0C,0x04,0x24,
99004 -0x0A,0x47,0x00,0x0C,
99005 -0xFF,0x00,0x05,0x24,
99006 -0x63,0x1D,0x02,0xA2,
99007 -0x38,0x0C,0x04,0x24,
99008 -0x0A,0x47,0x00,0x0C,
99009 -0xFF,0x00,0x05,0x24,
99010 -0xE8,0x1C,0x02,0xA2,
99011 -0x34,0x0C,0x04,0x24,
99012 -0x0A,0x47,0x00,0x0C,
99013 -0xFF,0xFF,0x05,0x24,
99014 -0xEC,0x1C,0x02,0xAE,
99015 -0x14,0x00,0xBF,0x8F,
99016 -0x10,0x00,0xB0,0x8F,
99017 -0x08,0x00,0xE0,0x03,
99018 -0x18,0x00,0xBD,0x27,
99019 -0x02,0x80,0x02,0x3C,
99020 -0x02,0x80,0x05,0x3C,
99021 -0x02,0x80,0x03,0x3C,
99022 -0x84,0xA7,0x42,0x24,
99023 -0xBC,0x5E,0x60,0xAC,
99024 -0x1C,0x5E,0xA2,0xAC,
99025 -0x02,0x80,0x03,0x3C,
99026 -0x00,0x80,0x02,0x3C,
99027 -0xC0,0x5E,0x60,0xA4,
99028 -0x1C,0x5E,0xA4,0x24,
99029 -0x88,0x0D,0x42,0x24,
99030 -0x02,0x80,0x03,0x3C,
99031 -0xC2,0x5E,0x60,0xA4,
99032 -0x08,0x00,0x82,0xAC,
99033 -0x00,0x80,0x03,0x3C,
99034 -0x00,0x80,0x02,0x3C,
99035 -0x02,0x80,0x06,0x3C,
99036 -0x88,0x10,0x42,0x24,
99037 -0xA4,0x0D,0x63,0x24,
99038 -0xC4,0x5E,0xC7,0x24,
99039 -0x14,0x00,0x82,0xAC,
99040 -0x10,0x00,0x83,0xAC,
99041 -0x02,0x80,0x02,0x3C,
99042 -0x02,0x80,0x03,0x3C,
99043 -0xC4,0x5E,0xC0,0xAC,
99044 -0x04,0x00,0xE0,0xAC,
99045 -0xCC,0x5E,0x40,0xA0,
99046 -0xD0,0x5E,0x60,0xAC,
99047 -0x01,0x80,0x02,0x3C,
99048 -0x30,0xD2,0x42,0x24,
99049 -0x7C,0x00,0x82,0xAC,
99050 -0x00,0x80,0x03,0x3C,
99051 -0x00,0x80,0x02,0x3C,
99052 -0xA4,0x10,0x63,0x24,
99053 -0x64,0x13,0x42,0x24,
99054 -0x1C,0x00,0x83,0xAC,
99055 -0x20,0x00,0x82,0xAC,
99056 -0x00,0x80,0x03,0x3C,
99057 -0x00,0x80,0x02,0x3C,
99058 -0x2C,0x16,0x63,0x24,
99059 -0xF0,0x18,0x42,0x24,
99060 -0x24,0x00,0x83,0xAC,
99061 -0x28,0x00,0x82,0xAC,
99062 -0x00,0x80,0x03,0x3C,
99063 -0x01,0x80,0x02,0x3C,
99064 -0xC8,0x2A,0x63,0x24,
99065 -0x98,0x01,0x42,0x24,
99066 -0x2C,0x00,0x83,0xAC,
99067 -0x50,0x00,0x82,0xAC,
99068 -0x00,0x80,0x03,0x3C,
99069 -0x00,0x80,0x02,0x3C,
99070 -0x10,0x1C,0x63,0x24,
99071 -0xFC,0x1D,0x42,0x24,
99072 -0x30,0x00,0x83,0xAC,
99073 -0x38,0x00,0x82,0xAC,
99074 -0x00,0x80,0x03,0x3C,
99075 -0x00,0x80,0x02,0x3C,
99076 -0x00,0x03,0x63,0x24,
99077 -0xB4,0x1B,0x42,0x24,
99078 -0x4C,0x00,0x83,0xAC,
99079 -0x08,0x00,0xE0,0x03,
99080 -0x3C,0x00,0x82,0xAC,
99081 -0x25,0xB0,0x02,0x3C,
99082 -0x08,0x00,0x42,0x34,
99083 -0x00,0x00,0x43,0x8C,
99084 -0x08,0x00,0xE0,0x03,
99085 -0x00,0x00,0x00,0x00,
99086 -0x02,0x80,0x0E,0x3C,
99087 -0x02,0x80,0x08,0x3C,
99088 -0x02,0x80,0x02,0x3C,
99089 -0x02,0x80,0x03,0x3C,
99090 -0xF8,0x03,0x4D,0x24,
99091 -0x00,0x1C,0x6C,0x24,
99092 -0x01,0x00,0x07,0x24,
99093 -0x00,0x00,0xCB,0x25,
99094 -0xFF,0xFF,0x0A,0x24,
99095 -0x00,0x04,0x09,0x25,
99096 -0x80,0x1A,0x07,0x00,
99097 -0x21,0x10,0x6B,0x00,
99098 -0x00,0x00,0x42,0xAC,
99099 -0x90,0x00,0x4A,0xAC,
99100 -0x00,0x04,0x04,0x8D,
99101 -0x01,0x00,0xE7,0x24,
99102 -0x08,0x00,0x45,0x24,
99103 -0x21,0x18,0x6D,0x00,
99104 -0x07,0x00,0xE6,0x28,
99105 -0x04,0x00,0x82,0xAC,
99106 -0x00,0x00,0x44,0xAC,
99107 -0x04,0x00,0x49,0xAC,
99108 -0x00,0x04,0x02,0xAD,
99109 -0x8C,0x00,0x40,0xAC,
99110 -0x6C,0x00,0xA3,0xAC,
99111 -0xF0,0xFF,0xC0,0x14,
99112 -0x68,0x00,0xAC,0xAC,
99113 -0x08,0x00,0xE0,0x03,
99114 -0x00,0x00,0xC9,0xAD,
99115 -0x07,0x00,0xA2,0x2C,
99116 -0x13,0x00,0x40,0x10,
99117 -0xFF,0xFF,0x07,0x24,
99118 -0x02,0x80,0x02,0x3C,
99119 -0x80,0x1A,0x05,0x00,
99120 -0x00,0x00,0x42,0x24,
99121 -0x0E,0x00,0xA0,0x10,
99122 -0x21,0x30,0x62,0x00,
99123 -0x90,0x00,0xC3,0x8C,
99124 -0xFF,0xFF,0x02,0x24,
99125 -0x0A,0x00,0x62,0x14,
99126 -0x00,0x00,0x00,0x00,
99127 -0x8C,0x00,0xC2,0x8C,
99128 -0x00,0x00,0x00,0x00,
99129 -0x06,0x00,0x40,0x14,
99130 -0x00,0x00,0x00,0x00,
99131 -0x01,0x00,0x02,0x24,
99132 -0x88,0x00,0xC4,0xAC,
99133 -0x8C,0x00,0xC2,0xAC,
99134 -0x90,0x00,0xC5,0xAC,
99135 -0x21,0x38,0xA0,0x00,
99136 -0x08,0x00,0xE0,0x03,
99137 -0x21,0x10,0xE0,0x00,
99138 -0x25,0xB0,0x06,0x3C,
99139 -0x02,0x80,0x02,0x3C,
99140 -0xE0,0xFF,0xBD,0x27,
99141 -0x68,0xA8,0x42,0x24,
99142 -0xDB,0xFF,0x03,0x24,
99143 -0x18,0x03,0xC4,0x34,
99144 -0x27,0x00,0xC5,0x34,
99145 -0x00,0x00,0x82,0xAC,
99146 -0x1C,0x00,0xBF,0xAF,
99147 -0x18,0x00,0xB2,0xAF,
99148 -0x14,0x00,0xB1,0xAF,
99149 -0x10,0x00,0xB0,0xAF,
99150 -0x00,0x00,0xA3,0xA0,
99151 -0x06,0x00,0xC2,0x34,
99152 -0x00,0x00,0x43,0x90,
99153 -0x00,0x00,0x00,0x00,
99154 -0x0F,0x00,0x63,0x30,
99155 -0x5A,0x00,0x60,0x14,
99156 -0x01,0x00,0x02,0x24,
99157 -0x1B,0x00,0xC3,0x34,
99158 -0x07,0x00,0x02,0x24,
99159 -0x00,0x00,0x62,0xA0,
99160 -0xE6,0x44,0x00,0x0C,
99161 -0x21,0x20,0x00,0x00,
99162 -0x02,0x80,0x02,0x3C,
99163 -0x30,0x1F,0x50,0x24,
99164 -0x34,0x1C,0x04,0x8E,
99165 -0xCB,0x45,0x00,0x0C,
99166 -0x10,0x00,0x05,0x24,
99167 -0x40,0x1C,0x04,0x8E,
99168 -0x10,0x00,0x05,0x3C,
99169 -0x01,0x00,0x06,0x24,
99170 -0xA9,0x45,0x00,0x0C,
99171 -0x21,0x90,0x40,0x00,
99172 -0x3C,0x1C,0x04,0x8E,
99173 -0x10,0x00,0x05,0x24,
99174 -0xA9,0x45,0x00,0x0C,
99175 -0x01,0x00,0x06,0x24,
99176 -0x58,0x1C,0x04,0x8E,
99177 -0x00,0x04,0x05,0x24,
99178 -0xA9,0x45,0x00,0x0C,
99179 -0x21,0x30,0x00,0x00,
99180 -0x58,0x1C,0x04,0x8E,
99181 -0x00,0x08,0x05,0x24,
99182 -0xA9,0x45,0x00,0x0C,
99183 -0x21,0x30,0x00,0x00,
99184 -0x02,0x80,0x05,0x3C,
99185 -0xEC,0xD9,0xA5,0x24,
99186 -0x21,0x20,0x00,0x00,
99187 -0x9F,0x47,0x00,0x0C,
99188 -0xCA,0x00,0x06,0x24,
99189 -0x31,0x00,0x40,0x10,
99190 -0x21,0x18,0x00,0x00,
99191 -0x02,0x80,0x02,0x3C,
99192 -0xE7,0x5D,0x43,0x90,
99193 -0x01,0x00,0x11,0x24,
99194 -0x57,0x00,0x71,0x10,
99195 -0x02,0x80,0x05,0x3C,
99196 -0x02,0x80,0x02,0x3C,
99197 -0x4A,0xF3,0x43,0x90,
99198 -0x00,0x00,0x00,0x00,
99199 -0x58,0x00,0x71,0x10,
99200 -0x02,0x80,0x05,0x3C,
99201 -0x34,0x1C,0x04,0x8E,
99202 -0x21,0x30,0x40,0x02,
99203 -0x10,0x00,0x05,0x24,
99204 -0xA9,0x45,0x00,0x0C,
99205 -0x02,0x80,0x11,0x3C,
99206 -0xDE,0x5D,0x23,0x92,
99207 -0x11,0x00,0x02,0x24,
99208 -0x2E,0x00,0x62,0x10,
99209 -0x00,0x08,0x04,0x24,
99210 -0xE6,0x44,0x00,0x0C,
99211 -0x01,0x00,0x04,0x24,
99212 -0x34,0x1C,0x04,0x8E,
99213 -0xCB,0x45,0x00,0x0C,
99214 -0x10,0x00,0x05,0x3C,
99215 -0x40,0x1C,0x04,0x8E,
99216 -0x10,0x00,0x05,0x3C,
99217 -0x01,0x00,0x06,0x24,
99218 -0xA9,0x45,0x00,0x0C,
99219 -0x21,0x90,0x40,0x00,
99220 -0x3C,0x1C,0x04,0x8E,
99221 -0x10,0x00,0x05,0x24,
99222 -0xA9,0x45,0x00,0x0C,
99223 -0x01,0x00,0x06,0x24,
99224 -0x58,0x1C,0x04,0x8E,
99225 -0x00,0x04,0x05,0x24,
99226 -0xA9,0x45,0x00,0x0C,
99227 -0x21,0x30,0x00,0x00,
99228 -0x58,0x1C,0x04,0x8E,
99229 -0x00,0x08,0x05,0x24,
99230 -0xA9,0x45,0x00,0x0C,
99231 -0x21,0x30,0x00,0x00,
99232 -0x02,0x80,0x05,0x3C,
99233 -0x94,0xD9,0xA5,0x24,
99234 -0x01,0x00,0x04,0x24,
99235 -0x9F,0x47,0x00,0x0C,
99236 -0x16,0x00,0x06,0x24,
99237 -0x0C,0x00,0x40,0x14,
99238 -0x21,0x18,0x00,0x00,
99239 -0x1C,0x00,0xBF,0x8F,
99240 -0x18,0x00,0xB2,0x8F,
99241 -0x14,0x00,0xB1,0x8F,
99242 -0x10,0x00,0xB0,0x8F,
99243 -0x21,0x10,0x60,0x00,
99244 -0x08,0x00,0xE0,0x03,
99245 -0x20,0x00,0xBD,0x27,
99246 -0xA9,0xFF,0x62,0x14,
99247 -0x1F,0x00,0xC3,0x34,
99248 -0x2F,0x6A,0x00,0x08,
99249 -0x07,0x00,0x02,0x24,
99250 -0x34,0x1C,0x04,0x8E,
99251 -0x21,0x30,0x40,0x02,
99252 -0xA9,0x45,0x00,0x0C,
99253 -0x10,0x00,0x05,0x3C,
99254 -0x00,0x08,0x04,0x24,
99255 -0x00,0x01,0x05,0x3C,
99256 -0xA9,0x45,0x00,0x0C,
99257 -0x01,0x00,0x06,0x24,
99258 -0x00,0x08,0x04,0x24,
99259 -0x00,0x02,0x05,0x3C,
99260 -0xA9,0x45,0x00,0x0C,
99261 -0x01,0x00,0x06,0x24,
99262 -0xDE,0x5D,0x23,0x92,
99263 -0x11,0x00,0x02,0x24,
99264 -0x1D,0x00,0x62,0x10,
99265 -0x00,0x08,0x04,0x24,
99266 -0xE6,0x44,0x00,0x0C,
99267 -0x21,0x20,0x00,0x00,
99268 -0x0F,0x00,0x05,0x3C,
99269 -0x0C,0x00,0x06,0x3C,
99270 -0xFF,0xFF,0xA5,0x34,
99271 -0x00,0xB4,0xC6,0x34,
99272 -0x5F,0x47,0x00,0x0C,
99273 -0x08,0x00,0x04,0x24,
99274 -0x1C,0x00,0xBF,0x8F,
99275 -0x18,0x00,0xB2,0x8F,
99276 -0x14,0x00,0xB1,0x8F,
99277 -0x10,0x00,0xB0,0x8F,
99278 -0x01,0x00,0x03,0x24,
99279 -0x21,0x10,0x60,0x00,
99280 -0x08,0x00,0xE0,0x03,
99281 -0x20,0x00,0xBD,0x27,
99282 -0x84,0xD8,0xA5,0x24,
99283 -0x21,0x20,0x00,0x00,
99284 -0x9F,0x47,0x00,0x0C,
99285 -0x16,0x00,0x06,0x24,
99286 -0x55,0x6A,0x00,0x08,
99287 -0x02,0x80,0x02,0x3C,
99288 -0xDC,0xD8,0xA5,0x24,
99289 -0x21,0x20,0x00,0x00,
99290 -0x9F,0x47,0x00,0x0C,
99291 -0x16,0x00,0x06,0x24,
99292 -0x59,0x6A,0x00,0x08,
99293 -0x00,0x00,0x00,0x00,
99294 -0x00,0xFF,0x05,0x3C,
99295 -0xA9,0x45,0x00,0x0C,
99296 -0x03,0x00,0x06,0x24,
99297 -0x9A,0x6A,0x00,0x08,
99298 -0x00,0x00,0x00,0x00,
99299 -0x08,0x00,0xE0,0x03,
99300 -0x00,0x00,0x00,0x00,
99301 -0xE8,0xFF,0xBD,0x27,
99302 -0x10,0x00,0xBF,0xAF,
99303 -0x02,0x80,0x02,0x3C,
99304 -0x61,0x5A,0x47,0x90,
99305 -0x02,0x80,0x04,0x3C,
99306 -0x02,0x80,0x05,0x3C,
99307 -0x03,0x00,0x03,0x24,
99308 -0x1E,0x3B,0x84,0x24,
99309 -0xAC,0xE3,0xA5,0x24,
99310 -0x0F,0x00,0xE3,0x10,
99311 -0x0D,0x00,0x06,0x24,
99312 -0x02,0x80,0x04,0x3C,
99313 -0x02,0x80,0x05,0x3C,
99314 -0x1E,0x3B,0x84,0x24,
99315 -0x5C,0xE3,0xA5,0x24,
99316 -0x10,0x52,0x00,0x0C,
99317 -0x0D,0x00,0x06,0x24,
99318 -0x02,0x80,0x04,0x3C,
99319 -0x02,0x80,0x05,0x3C,
99320 -0x10,0x00,0xBF,0x8F,
99321 -0x2B,0x3B,0x84,0x24,
99322 -0x6C,0xE3,0xA5,0x24,
99323 -0x0D,0x00,0x06,0x24,
99324 -0x10,0x52,0x00,0x08,
99325 -0x18,0x00,0xBD,0x27,
99326 -0x10,0x52,0x00,0x0C,
99327 -0x00,0x00,0x00,0x00,
99328 -0x02,0x80,0x04,0x3C,
99329 -0x02,0x80,0x05,0x3C,
99330 -0x10,0x00,0xBF,0x8F,
99331 -0x2B,0x3B,0x84,0x24,
99332 -0x9C,0xE3,0xA5,0x24,
99333 -0x0D,0x00,0x06,0x24,
99334 -0x10,0x52,0x00,0x08,
99335 -0x18,0x00,0xBD,0x27,
99336 -0xE0,0xFF,0xBD,0x27,
99337 -0x14,0x00,0xB1,0xAF,
99338 -0x10,0x00,0xB0,0xAF,
99339 -0x02,0x80,0x11,0x3C,
99340 -0x02,0x80,0x05,0x3C,
99341 -0x02,0x80,0x10,0x3C,
99342 -0x30,0x1F,0x10,0x26,
99343 -0x64,0x5A,0x24,0x26,
99344 -0x14,0xDD,0xA5,0x24,
99345 -0x34,0x00,0x06,0x24,
99346 -0x18,0x00,0xBF,0xAF,
99347 -0x10,0x52,0x00,0x0C,
99348 -0x64,0x5A,0x31,0x26,
99349 -0xBD,0x6A,0x00,0x0C,
99350 -0x68,0x3B,0x11,0xAE,
99351 -0x02,0x00,0x11,0x24,
99352 -0x02,0x80,0x04,0x3C,
99353 -0x00,0x80,0x06,0x3C,
99354 -0xA0,0x38,0x11,0xA2,
99355 -0xBC,0x57,0x84,0x24,
99356 -0xFC,0x64,0xC6,0x24,
99357 -0x21,0x28,0x00,0x00,
99358 -0xA2,0x23,0x00,0x0C,
99359 -0x98,0x38,0x00,0xAE,
99360 -0x02,0x80,0x04,0x3C,
99361 -0x01,0x80,0x06,0x3C,
99362 -0xBC,0x38,0x11,0xA2,
99363 -0xD8,0x57,0x84,0x24,
99364 -0x0C,0x31,0xC6,0x24,
99365 -0x21,0x28,0x00,0x00,
99366 -0xA2,0x23,0x00,0x0C,
99367 -0xB4,0x38,0x00,0xAE,
99368 -0x02,0x80,0x04,0x3C,
99369 -0x01,0x80,0x06,0x3C,
99370 -0xD8,0x38,0x11,0xA2,
99371 -0xF4,0x57,0x84,0x24,
99372 -0xC0,0x2E,0xC6,0x24,
99373 -0x21,0x28,0x00,0x00,
99374 -0xA2,0x23,0x00,0x0C,
99375 -0xD0,0x38,0x00,0xAE,
99376 -0x02,0x80,0x04,0x3C,
99377 -0x01,0x80,0x06,0x3C,
99378 -0xF4,0x38,0x11,0xA2,
99379 -0x10,0x58,0x84,0x24,
99380 -0x14,0x25,0xC6,0x24,
99381 -0x21,0x28,0x00,0x00,
99382 -0xA2,0x23,0x00,0x0C,
99383 -0xEC,0x38,0x00,0xAE,
99384 -0x02,0x80,0x04,0x3C,
99385 -0x00,0x80,0x06,0x3C,
99386 -0x10,0x39,0x11,0xA2,
99387 -0x2C,0x58,0x84,0x24,
99388 -0x58,0x64,0xC6,0x24,
99389 -0x21,0x28,0x00,0x00,
99390 -0xA2,0x23,0x00,0x0C,
99391 -0x08,0x39,0x00,0xAE,
99392 -0x02,0x80,0x04,0x3C,
99393 -0x00,0x80,0x06,0x3C,
99394 -0x48,0x39,0x11,0xA2,
99395 -0x40,0x39,0x00,0xAE,
99396 -0x64,0x58,0x84,0x24,
99397 -0x38,0x3B,0xC6,0x24,
99398 -0xA2,0x23,0x00,0x0C,
99399 -0x21,0x28,0x00,0x00,
99400 -0x02,0x80,0x02,0x3C,
99401 -0x49,0xF3,0x43,0x90,
99402 -0x18,0x00,0xBF,0x8F,
99403 -0x14,0x00,0xB1,0x8F,
99404 -0x9C,0x3E,0x03,0xA2,
99405 -0x10,0x00,0xB0,0x8F,
99406 -0x08,0x00,0xE0,0x03,
99407 -0x20,0x00,0xBD,0x27,
99408 -0x03,0x80,0x05,0x3C,
99409 -0x00,0x80,0xA5,0x24,
99410 -0x40,0x10,0x0D,0x3C,
99411 -0xFF,0xFF,0xA5,0x30,
99412 -0x02,0x80,0x02,0x3C,
99413 -0x30,0x1F,0x42,0x24,
99414 -0x25,0xC8,0xAD,0x00,
99415 -0x38,0x37,0x59,0xAC,
99416 -0x00,0x01,0x39,0x27,
99417 -0xE0,0xFF,0xBD,0x27,
99418 -0x44,0x37,0x59,0xAC,
99419 -0x00,0x01,0x39,0x27,
99420 -0x1C,0x00,0xB7,0xAF,
99421 -0x18,0x00,0xB6,0xAF,
99422 -0x14,0x00,0xB5,0xAF,
99423 -0x10,0x00,0xB4,0xAF,
99424 -0x0C,0x00,0xB3,0xAF,
99425 -0x08,0x00,0xB2,0xAF,
99426 -0x04,0x00,0xB1,0xAF,
99427 -0x00,0x00,0xB0,0xAF,
99428 -0x50,0x37,0x59,0xAC,
99429 -0x00,0x01,0x39,0x27,
99430 -0x5C,0x37,0x59,0xAC,
99431 -0xAA,0x1B,0x44,0x90,
99432 -0x00,0x01,0x39,0x27,
99433 -0x68,0x37,0x59,0xAC,
99434 -0x00,0x01,0x39,0x27,
99435 -0x74,0x37,0x59,0xAC,
99436 -0x20,0xB0,0x06,0x3C,
99437 -0x44,0x37,0x48,0x8C,
99438 -0x50,0x37,0x49,0x8C,
99439 -0x5C,0x37,0x4A,0x8C,
99440 -0x68,0x37,0x4B,0x8C,
99441 -0x74,0x37,0x4C,0x8C,
99442 -0x00,0x22,0x04,0x00,
99443 -0x00,0x01,0xC7,0x34,
99444 -0xFF,0x1F,0x03,0x3C,
99445 -0x00,0x01,0x39,0x27,
99446 -0xFF,0xFF,0x63,0x34,
99447 -0x21,0x38,0x87,0x00,
99448 -0x21,0x20,0x86,0x00,
99449 -0x24,0x38,0xE3,0x00,
99450 -0x20,0x10,0x06,0x3C,
99451 -0x24,0x20,0x83,0x00,
99452 -0x80,0x37,0x59,0xAC,
99453 -0x21,0x78,0x20,0x03,
99454 -0x25,0x28,0xAD,0x00,
99455 -0x25,0xB0,0x0E,0x3C,
99456 -0x00,0x01,0x39,0x27,
99457 -0x34,0x37,0x45,0xAC,
99458 -0x40,0x37,0x48,0xAC,
99459 -0x4C,0x37,0x49,0xAC,
99460 -0x58,0x37,0x4A,0xAC,
99461 -0xF8,0x36,0x44,0xAC,
99462 -0x64,0x37,0x4B,0xAC,
99463 -0x04,0x37,0x47,0xAC,
99464 -0x70,0x37,0x4C,0xAC,
99465 -0xAC,0x00,0xC3,0x35,
99466 -0xCC,0x36,0x46,0xAC,
99467 -0xC8,0x36,0x46,0xAC,
99468 -0xD8,0x36,0x46,0xAC,
99469 -0xD4,0x36,0x46,0xAC,
99470 -0xE4,0x36,0x46,0xAC,
99471 -0x8C,0x37,0x59,0xAC,
99472 -0xFC,0x36,0x44,0xAC,
99473 -0x08,0x37,0x47,0xAC,
99474 -0x7C,0x37,0x4F,0xAC,
99475 -0xE0,0x36,0x46,0xAC,
99476 -0xF0,0x36,0x46,0xAC,
99477 -0xEC,0x36,0x46,0xAC,
99478 -0x14,0x37,0x46,0xAC,
99479 -0x10,0x37,0x46,0xAC,
99480 -0x00,0x02,0x39,0x27,
99481 -0x00,0x00,0x68,0x8C,
99482 -0xAC,0x1B,0x47,0x94,
99483 -0xA4,0x37,0x59,0xAC,
99484 -0xB0,0x00,0xC3,0x35,
99485 -0x00,0x00,0x75,0x8C,
99486 -0x21,0x10,0x05,0x3C,
99487 -0x8C,0x37,0x52,0x8C,
99488 -0x23,0x10,0x0B,0x3C,
99489 -0x22,0x10,0x0F,0x3C,
99490 -0x02,0x80,0x14,0x3C,
99491 -0x02,0x80,0x16,0x3C,
99492 -0x02,0x80,0x17,0x3C,
99493 -0x02,0x80,0x18,0x3C,
99494 -0x00,0x80,0xA4,0x34,
99495 -0x21,0x98,0x20,0x03,
99496 -0x23,0x20,0x87,0x00,
99497 -0x00,0x04,0x39,0x27,
99498 -0x24,0x10,0x07,0x3C,
99499 -0x9C,0x57,0x8A,0x26,
99500 -0xA4,0x57,0xC9,0x26,
99501 -0xAC,0x57,0xEC,0x26,
99502 -0xB4,0x57,0x0D,0x27,
99503 -0x00,0x04,0x70,0x35,
99504 -0x01,0x00,0x08,0x25,
99505 -0x00,0x40,0xF1,0x35,
99506 -0x00,0x01,0xCE,0x35,
99507 -0x01,0x00,0x03,0x24,
99508 -0x88,0x37,0x52,0xAC,
99509 -0x91,0x37,0x43,0xA0,
99510 -0xA0,0x37,0x53,0xAC,
99511 -0x08,0x38,0x50,0xAC,
99512 -0xCC,0x37,0x48,0xAC,
99513 -0xD8,0x37,0x44,0xAC,
99514 -0xFC,0x37,0x51,0xAC,
99515 -0xF0,0x37,0x55,0xAC,
99516 -0x00,0x00,0xC7,0xAD,
99517 -0xEC,0x37,0x47,0xAC,
99518 -0x0C,0x38,0x46,0xAC,
99519 -0x20,0x37,0x46,0xAC,
99520 -0x1C,0x37,0x46,0xAC,
99521 -0xAA,0x37,0x40,0xA4,
99522 -0xA9,0x37,0x40,0xA0,
99523 -0xA8,0x37,0x40,0xA0,
99524 -0x00,0x38,0x4B,0xAC,
99525 -0x04,0x38,0x4B,0xAC,
99526 -0xC4,0x37,0x45,0xAC,
99527 -0xC8,0x37,0x45,0xAC,
99528 -0xD0,0x37,0x45,0xAC,
99529 -0xD4,0x37,0x45,0xAC,
99530 -0xF4,0x37,0x4F,0xAC,
99531 -0xF8,0x37,0x4F,0xAC,
99532 -0xE8,0x37,0x47,0xAC,
99533 -0x10,0x38,0x46,0xAC,
99534 -0x1C,0x38,0x59,0xAC,
99535 -0x18,0x38,0x59,0xAC,
99536 -0x04,0x00,0x4A,0xAD,
99537 -0x9C,0x57,0x8A,0xAE,
99538 -0x04,0x00,0x8C,0xAD,
99539 -0xA4,0x57,0xC9,0xAE,
99540 -0x04,0x00,0xAD,0xAD,
99541 -0xAC,0x57,0xEC,0xAE,
99542 -0xB4,0x57,0x0D,0xAF,
99543 -0x04,0x00,0x29,0xAD,
99544 -0x02,0x80,0x02,0x3C,
99545 -0x00,0x1C,0x43,0x24,
99546 -0x01,0x00,0x05,0x24,
99547 -0x21,0x20,0x20,0x01,
99548 -0x0F,0x00,0x06,0x24,
99549 -0x21,0x10,0x80,0x00,
99550 -0xFF,0xFF,0xC6,0x24,
99551 -0x08,0x00,0x79,0xAC,
99552 -0x00,0x00,0x63,0xAC,
99553 -0x10,0x00,0x65,0xAC,
99554 -0x00,0x00,0x69,0xAC,
99555 -0x21,0x20,0x60,0x00,
99556 -0x04,0x00,0x62,0xAC,
99557 -0x00,0x00,0x43,0xAC,
99558 -0x00,0x01,0x39,0x27,
99559 -0xF5,0xFF,0xC1,0x04,
99560 -0x18,0x00,0x63,0x24,
99561 -0x02,0x80,0x02,0x3C,
99562 -0xAC,0x57,0x48,0x24,
99563 -0x02,0x80,0x03,0x3C,
99564 -0x02,0x80,0x02,0x3C,
99565 -0x04,0x00,0x07,0x8D,
99566 -0x80,0x1D,0x4B,0x24,
99567 -0x04,0x00,0x24,0xAD,
99568 -0x00,0x1C,0x6A,0x24,
99569 -0x02,0x00,0x09,0x24,
99570 -0x21,0x28,0x00,0x00,
99571 -0x0F,0x00,0x06,0x24,
99572 -0x21,0x20,0xAB,0x00,
99573 -0x21,0x10,0xAA,0x00,
99574 -0xFF,0xFF,0xC6,0x24,
99575 -0x88,0x01,0x59,0xAC,
99576 -0x90,0x01,0x49,0xAC,
99577 -0x18,0x00,0xA5,0x24,
99578 -0x00,0x00,0x88,0xAC,
99579 -0x04,0x00,0x87,0xAC,
99580 -0x00,0x00,0xE4,0xAC,
99581 -0x00,0x02,0x39,0x27,
99582 -0xF5,0xFF,0xC1,0x04,
99583 -0x21,0x38,0x80,0x00,
99584 -0x02,0x80,0x02,0x3C,
99585 -0xB4,0x57,0x49,0x24,
99586 -0x02,0x80,0x03,0x3C,
99587 -0x02,0x80,0x02,0x3C,
99588 -0x04,0x00,0x27,0x8D,
99589 -0x00,0x1F,0x4B,0x24,
99590 -0x04,0x00,0x04,0xAD,
99591 -0x00,0x1C,0x6A,0x24,
99592 -0x03,0x00,0x08,0x24,
99593 -0x21,0x28,0x00,0x00,
99594 -0x01,0x00,0x06,0x24,
99595 -0x21,0x20,0xAB,0x00,
99596 -0x21,0x10,0xAA,0x00,
99597 -0xFF,0xFF,0xC6,0x24,
99598 -0x08,0x03,0x59,0xAC,
99599 -0x10,0x03,0x48,0xAC,
99600 -0x18,0x00,0xA5,0x24,
99601 -0x00,0x00,0x89,0xAC,
99602 -0x04,0x00,0x87,0xAC,
99603 -0x00,0x00,0xE4,0xAC,
99604 -0x00,0x08,0x39,0x27,
99605 -0xF5,0xFF,0xC1,0x04,
99606 -0x21,0x38,0x80,0x00,
99607 -0x1C,0x00,0xB7,0x8F,
99608 -0x18,0x00,0xB6,0x8F,
99609 -0x14,0x00,0xB5,0x8F,
99610 -0x10,0x00,0xB4,0x8F,
99611 -0x0C,0x00,0xB3,0x8F,
99612 -0x08,0x00,0xB2,0x8F,
99613 -0x04,0x00,0xB1,0x8F,
99614 -0x00,0x00,0xB0,0x8F,
99615 -0x20,0x00,0xBD,0x27,
99616 -0x08,0x00,0xE0,0x03,
99617 -0x04,0x00,0x24,0xAD,
99618 -0xD0,0xFF,0xBD,0x27,
99619 -0x02,0x80,0x02,0x3C,
99620 -0x20,0x00,0xB2,0xAF,
99621 -0x02,0x80,0x03,0x3C,
99622 -0x78,0xE8,0x52,0x24,
99623 -0x02,0x80,0x02,0x3C,
99624 -0x28,0x00,0xB4,0xAF,
99625 -0x24,0x00,0xB3,0xAF,
99626 -0x1C,0x00,0xB1,0xAF,
99627 -0x18,0x00,0xB0,0xAF,
99628 -0x2C,0x00,0xBF,0xAF,
99629 -0x04,0xE8,0x73,0x24,
99630 -0x30,0x1F,0x50,0x24,
99631 -0x21,0x88,0x00,0x00,
99632 -0x02,0x80,0x14,0x3C,
99633 -0xDD,0x59,0x00,0x0C,
99634 -0x21,0x20,0x20,0x02,
99635 -0x1C,0x24,0x05,0x8E,
99636 -0x6C,0x00,0x66,0x8E,
99637 -0xE4,0xE7,0x82,0x26,
99638 -0x6C,0x00,0x43,0x8E,
99639 -0x1B,0x00,0x44,0x90,
99640 -0xFF,0xF1,0x02,0x24,
99641 -0x21,0x18,0x66,0x00,
99642 -0x24,0x28,0xA2,0x00,
99643 -0x00,0x21,0x04,0x00,
99644 -0x42,0x18,0x03,0x00,
99645 -0x00,0x02,0xA5,0x34,
99646 -0xE8,0x23,0x03,0xAE,
99647 -0x0C,0x24,0x04,0xAE,
99648 -0x1C,0x24,0x05,0xAE,
99649 -0x10,0x24,0x04,0xAE,
99650 -0x21,0x30,0x00,0x00,
99651 -0x21,0x10,0x06,0x02,
99652 -0x01,0x00,0xC6,0x24,
99653 -0x1D,0x00,0xC3,0x28,
99654 -0x3D,0x24,0x40,0xA0,
99655 -0x20,0x24,0x40,0xA0,
99656 -0xFA,0xFF,0x60,0x14,
99657 -0x5A,0x24,0x40,0xA0,
99658 -0x01,0x00,0x31,0x26,
99659 -0x20,0x00,0x22,0x2A,
99660 -0x78,0x24,0x00,0xAE,
99661 -0xE3,0xFF,0x40,0x14,
99662 -0x94,0x00,0x10,0x26,
99663 -0x02,0x80,0x02,0x3C,
99664 -0x02,0x80,0x03,0x3C,
99665 -0x30,0x1F,0x4B,0x24,
99666 -0x02,0x80,0x02,0x3C,
99667 -0x78,0xE8,0x6F,0x24,
99668 -0x04,0xE8,0x4D,0x24,
99669 -0x02,0x80,0x03,0x3C,
99670 -0x02,0x80,0x02,0x3C,
99671 -0xE4,0xE7,0x6E,0x24,
99672 -0xC4,0xE7,0x4C,0x24,
99673 -0x21,0x88,0x00,0x00,
99674 -0x80,0x18,0x11,0x00,
99675 -0x21,0x20,0x6D,0x00,
99676 -0x21,0x10,0x6F,0x00,
99677 -0x21,0x28,0x2E,0x02,
99678 -0x21,0x30,0x2C,0x02,
99679 -0x00,0x00,0x88,0x8C,
99680 -0x00,0x00,0xA9,0x90,
99681 -0x00,0x00,0xC7,0x90,
99682 -0x00,0x00,0x4A,0x8C,
99683 -0x21,0x10,0x2B,0x02,
99684 -0x01,0x00,0x31,0x26,
99685 -0x21,0x18,0x6B,0x00,
99686 -0x1D,0x00,0x24,0x2A,
99687 -0x60,0x05,0x68,0xAC,
99688 -0x3E,0x05,0x47,0xA0,
99689 -0xD4,0x05,0x6A,0xAC,
99690 -0xEF,0xFF,0x80,0x14,
99691 -0x04,0x05,0x49,0xA0,
99692 -0x02,0x80,0x02,0x3C,
99693 -0x30,0x1F,0x4A,0x24,
99694 -0x02,0x80,0x03,0x3C,
99695 -0x02,0x80,0x02,0x3C,
99696 -0xA0,0xE6,0x6B,0x24,
99697 -0x40,0xE5,0x4C,0x24,
99698 -0x21,0x88,0x00,0x00,
99699 -0x21,0x48,0x00,0x00,
99700 -0x21,0x30,0x00,0x00,
99701 -0x21,0x40,0x2A,0x01,
99702 -0x21,0x38,0x2B,0x01,
99703 -0x21,0x10,0xE6,0x00,
99704 -0x91,0x00,0x44,0x90,
99705 -0x00,0x00,0x45,0x90,
99706 -0x21,0x18,0x06,0x01,
99707 -0x01,0x00,0xC6,0x24,
99708 -0x05,0x00,0xC2,0x28,
99709 -0x39,0x04,0x64,0xA0,
99710 -0xF8,0xFF,0x40,0x14,
99711 -0xA8,0x03,0x65,0xA0,
99712 -0x21,0x10,0x2C,0x02,
99713 -0x1D,0x00,0x44,0x90,
99714 -0x00,0x00,0x45,0x90,
99715 -0x21,0x18,0x2A,0x02,
99716 -0x01,0x00,0x31,0x26,
99717 -0x1D,0x00,0x22,0x2A,
99718 -0xE7,0x04,0x64,0xA0,
99719 -0xCA,0x04,0x65,0xA0,
99720 -0xEB,0xFF,0x40,0x14,
99721 -0x05,0x00,0x29,0x25,
99722 -0x52,0x00,0x02,0x24,
99723 -0x10,0x00,0xA2,0xA3,
99724 -0x41,0x00,0x03,0x24,
99725 -0x4D,0x00,0x02,0x24,
99726 -0x02,0x80,0x07,0x3C,
99727 -0x64,0xF3,0xE7,0x24,
99728 -0x11,0x00,0xA3,0xA3,
99729 -0x12,0x00,0xA2,0xA3,
99730 -0xE8,0x03,0x03,0x24,
99731 -0x01,0x00,0x02,0x24,
99732 -0x01,0x80,0x06,0x3C,
99733 -0x10,0x00,0xA5,0x27,
99734 -0x21,0x20,0xE0,0x00,
99735 -0xDC,0x93,0xC6,0x24,
99736 -0x0C,0x00,0xE3,0xAC,
99737 -0x14,0x00,0xE2,0xA0,
99738 -0xA2,0x23,0x00,0x0C,
99739 -0x13,0x00,0xA0,0xA3,
99740 -0x2C,0x00,0xBF,0x8F,
99741 -0x28,0x00,0xB4,0x8F,
99742 -0x24,0x00,0xB3,0x8F,
99743 -0x20,0x00,0xB2,0x8F,
99744 -0x1C,0x00,0xB1,0x8F,
99745 -0x18,0x00,0xB0,0x8F,
99746 -0x08,0x00,0xE0,0x03,
99747 -0x30,0x00,0xBD,0x27,
99748 -0x90,0xFF,0xBD,0x27,
99749 -0x48,0x00,0xB0,0xAF,
99750 -0x25,0xB0,0x10,0x3C,
99751 -0x6C,0x00,0xBF,0xAF,
99752 -0x68,0x00,0xBE,0xAF,
99753 -0x64,0x00,0xB7,0xAF,
99754 -0x58,0x00,0xB4,0xAF,
99755 -0x54,0x00,0xB3,0xAF,
99756 -0x50,0x00,0xB2,0xAF,
99757 -0x4C,0x00,0xB1,0xAF,
99758 -0x60,0x00,0xB6,0xAF,
99759 -0x5C,0x00,0xB5,0xAF,
99760 -0xE0,0x0E,0x02,0x36,
99761 -0x21,0x20,0x40,0x00,
99762 -0x00,0x00,0x42,0x8C,
99763 -0xDC,0x0E,0x12,0x36,
99764 -0x70,0x0E,0x13,0x36,
99765 -0x10,0x00,0xA2,0xAF,
99766 -0x00,0x00,0x42,0x8E,
99767 -0x78,0x0E,0x1E,0x36,
99768 -0x7C,0x0E,0x14,0x36,
99769 -0x14,0x00,0xA2,0xAF,
99770 -0x00,0x00,0x63,0x8E,
99771 -0x25,0xB0,0x02,0x3C,
99772 -0x74,0x0E,0x42,0x34,
99773 -0x18,0x00,0xA3,0xAF,
99774 -0x00,0x00,0x42,0x8C,
99775 -0xD4,0x0E,0x10,0x36,
99776 -0xED,0x3F,0x11,0x3C,
99777 -0x1C,0x00,0xA2,0xAF,
99778 -0x00,0x00,0xC3,0x8F,
99779 -0xFB,0x92,0x25,0x36,
99780 -0x25,0xB0,0x17,0x3C,
99781 -0x20,0x00,0xA3,0xAF,
99782 -0x00,0x00,0x82,0x8E,
99783 -0x25,0xB0,0x03,0x3C,
99784 -0x80,0x0E,0x63,0x34,
99785 -0x24,0x00,0xA2,0xAF,
99786 -0x00,0x00,0x63,0x8C,
99787 -0x25,0xB0,0x02,0x3C,
99788 -0x84,0x0E,0x42,0x34,
99789 -0x28,0x00,0xA3,0xAF,
99790 -0x00,0x00,0x42,0x8C,
99791 -0x25,0xB0,0x03,0x3C,
99792 -0x88,0x0E,0x63,0x34,
99793 -0x2C,0x00,0xA2,0xAF,
99794 -0x00,0x00,0x63,0x8C,
99795 -0x25,0xB0,0x02,0x3C,
99796 -0x8C,0x0E,0x42,0x34,
99797 -0x30,0x00,0xA3,0xAF,
99798 -0x00,0x00,0x42,0x8C,
99799 -0x25,0xB0,0x03,0x3C,
99800 -0xD0,0x0E,0x63,0x34,
99801 -0x34,0x00,0xA2,0xAF,
99802 -0x00,0x00,0x63,0x8C,
99803 -0x00,0x00,0x00,0x00,
99804 -0x38,0x00,0xA3,0xAF,
99805 -0x00,0x00,0x02,0x8E,
99806 -0x25,0xB0,0x03,0x3C,
99807 -0xD8,0x0E,0x63,0x34,
99808 -0x3C,0x00,0xA2,0xAF,
99809 -0x00,0x00,0x63,0x8C,
99810 -0x02,0x5C,0x00,0x0C,
99811 -0x40,0x00,0xA3,0xAF,
99812 -0x21,0x20,0x40,0x02,
99813 -0x02,0x5C,0x00,0x0C,
99814 -0xFB,0x92,0x25,0x36,
99815 -0x21,0x20,0x60,0x02,
99816 -0x02,0x5C,0x00,0x0C,
99817 -0xFB,0x92,0x25,0x36,
99818 -0x02,0x80,0x05,0x3C,
99819 -0xC0,0xED,0xA5,0x24,
99820 -0x00,0x00,0xA4,0x8C,
99821 -0xFB,0x92,0x25,0x36,
99822 -0x02,0x5C,0x00,0x0C,
99823 -0x00,0x01,0x13,0x3C,
99824 -0xFB,0x92,0x25,0x36,
99825 -0x02,0x5C,0x00,0x0C,
99826 -0x21,0x20,0xC0,0x03,
99827 -0xFB,0x92,0x25,0x36,
99828 -0x02,0x5C,0x00,0x0C,
99829 -0x21,0x20,0x80,0x02,
99830 -0x02,0x80,0x02,0x3C,
99831 -0xC4,0xED,0x42,0x24,
99832 -0x00,0x00,0x44,0x8C,
99833 -0xFB,0x92,0x25,0x36,
99834 -0x02,0x5C,0x00,0x0C,
99835 -0xA0,0x00,0x12,0x3C,
99836 -0x02,0x80,0x03,0x3C,
99837 -0xC8,0xED,0x63,0x24,
99838 -0x00,0x00,0x64,0x8C,
99839 -0x02,0x5C,0x00,0x0C,
99840 -0xFB,0x92,0x25,0x36,
99841 -0x02,0x80,0x05,0x3C,
99842 -0xCC,0xED,0xA5,0x24,
99843 -0x00,0x00,0xA4,0x8C,
99844 -0x02,0x5C,0x00,0x0C,
99845 -0xFB,0x92,0x25,0x36,
99846 -0x02,0x80,0x02,0x3C,
99847 -0xD0,0xED,0x42,0x24,
99848 -0x00,0x00,0x44,0x8C,
99849 -0x02,0x5C,0x00,0x0C,
99850 -0xFB,0x92,0x25,0x36,
99851 -0x02,0x80,0x03,0x3C,
99852 -0xD4,0xED,0x63,0x24,
99853 -0x00,0x00,0x64,0x8C,
99854 -0x02,0x5C,0x00,0x0C,
99855 -0xFB,0x92,0x25,0x36,
99856 -0x21,0x20,0x00,0x02,
99857 -0x02,0x5C,0x00,0x0C,
99858 -0xFB,0x92,0x25,0x36,
99859 -0x02,0x80,0x05,0x3C,
99860 -0xD8,0xED,0xA5,0x24,
99861 -0x00,0x00,0xA4,0x8C,
99862 -0xFB,0x92,0x25,0x36,
99863 -0x02,0x5C,0x00,0x0C,
99864 -0x21,0x80,0x00,0x00,
99865 -0x14,0x02,0x11,0x3C,
99866 -0x20,0x08,0xE4,0x36,
99867 -0x02,0x5C,0x00,0x0C,
99868 -0x00,0x01,0x65,0x36,
99869 -0x28,0x08,0xE4,0x36,
99870 -0x02,0x5C,0x00,0x0C,
99871 -0x00,0x01,0x65,0x36,
99872 -0x30,0x54,0x45,0x36,
99873 -0x02,0x5C,0x00,0x0C,
99874 -0x04,0x0C,0xE4,0x36,
99875 -0x54,0x22,0x00,0x0C,
99876 -0x05,0x00,0x04,0x24,
99877 -0x08,0x00,0x05,0x3C,
99878 -0xE4,0x00,0xA5,0x34,
99879 -0x02,0x5C,0x00,0x0C,
99880 -0x08,0x0C,0xE4,0x36,
99881 -0x54,0x22,0x00,0x0C,
99882 -0x05,0x00,0x04,0x24,
99883 -0x80,0x80,0x05,0x3C,
99884 -0x02,0x5C,0x00,0x0C,
99885 -0x28,0x0E,0xE4,0x36,
99886 -0x54,0x22,0x00,0x0C,
99887 -0x05,0x00,0x04,0x24,
99888 -0x02,0x01,0x25,0x36,
99889 -0x02,0x5C,0x00,0x0C,
99890 -0x40,0x0E,0xE4,0x36,
99891 -0x54,0x22,0x00,0x0C,
99892 -0x05,0x00,0x04,0x24,
99893 -0x16,0x68,0x05,0x3C,
99894 -0xC2,0x04,0xA5,0x34,
99895 -0x02,0x5C,0x00,0x0C,
99896 -0x44,0x0E,0xE4,0x36,
99897 -0x54,0x22,0x00,0x0C,
99898 -0x05,0x00,0x04,0x24,
99899 -0xD1,0x28,0x05,0x24,
99900 -0x02,0x5C,0x00,0x0C,
99901 -0x4C,0x0E,0xE4,0x36,
99902 -0x54,0x22,0x00,0x0C,
99903 -0x05,0x00,0x04,0x24,
99904 -0x02,0x01,0x25,0x36,
99905 -0x02,0x5C,0x00,0x0C,
99906 -0x60,0x0E,0xE4,0x36,
99907 -0x54,0x22,0x00,0x0C,
99908 -0x05,0x00,0x04,0x24,
99909 -0x16,0x28,0x05,0x3C,
99910 -0x05,0x0D,0xA5,0x34,
99911 -0x02,0x5C,0x00,0x0C,
99912 -0x64,0x0E,0xE4,0x36,
99913 -0x54,0x22,0x00,0x0C,
99914 -0x05,0x00,0x04,0x24,
99915 -0x00,0xFB,0x05,0x3C,
99916 -0x02,0x5C,0x00,0x0C,
99917 -0x48,0x0E,0xE4,0x36,
99918 -0x54,0x22,0x00,0x0C,
99919 -0x05,0x00,0x04,0x24,
99920 -0x00,0xF8,0x05,0x3C,
99921 -0x02,0x5C,0x00,0x0C,
99922 -0x48,0x0E,0xE4,0x36,
99923 -0x54,0x22,0x00,0x0C,
99924 -0x05,0x00,0x04,0x24,
99925 -0x25,0x22,0x00,0x0C,
99926 -0x02,0x00,0x04,0x24,
99927 -0x00,0x02,0x05,0x3C,
99928 -0xD1,0x28,0xA5,0x34,
99929 -0x02,0x5C,0x00,0x0C,
99930 -0x6C,0x0E,0xE4,0x36,
99931 -0x54,0x22,0x00,0x0C,
99932 -0x05,0x00,0x04,0x24,
99933 -0x00,0xFB,0x05,0x3C,
99934 -0x02,0x5C,0x00,0x0C,
99935 -0x48,0x0E,0xE4,0x36,
99936 -0x54,0x22,0x00,0x0C,
99937 -0x05,0x00,0x04,0x24,
99938 -0x00,0xF8,0x05,0x3C,
99939 -0x02,0x5C,0x00,0x0C,
99940 -0x48,0x0E,0xE4,0x36,
99941 -0x25,0x22,0x00,0x0C,
99942 -0x02,0x00,0x04,0x24,
99943 -0x33,0x54,0x45,0x36,
99944 -0x02,0x5C,0x00,0x0C,
99945 -0x04,0x0C,0xE4,0x36,
99946 -0x54,0x22,0x00,0x0C,
99947 -0x05,0x00,0x04,0x24,
99948 -0xE4,0x00,0x05,0x24,
99949 -0x02,0x5C,0x00,0x0C,
99950 -0x08,0x0C,0xE4,0x36,
99951 -0x54,0x22,0x00,0x0C,
99952 -0x05,0x00,0x04,0x24,
99953 -0x28,0x0E,0xE4,0x36,
99954 -0x02,0x5C,0x00,0x0C,
99955 -0x21,0x28,0x00,0x00,
99956 -0x20,0x08,0xE4,0x36,
99957 -0x02,0x5C,0x00,0x0C,
99958 -0x00,0x01,0x05,0x3C,
99959 -0x28,0x08,0xE4,0x36,
99960 -0x02,0x5C,0x00,0x0C,
99961 -0x00,0x01,0x05,0x3C,
99962 -0x25,0xB0,0x02,0x3C,
99963 -0xAC,0x0E,0x42,0x34,
99964 -0x00,0x00,0x5E,0x8C,
99965 -0x00,0xD8,0x02,0x3C,
99966 -0x24,0x10,0xC2,0x03,
99967 -0x37,0x00,0x40,0x10,
99968 -0x01,0x00,0x10,0x26,
99969 -0x0A,0x00,0x02,0x2E,
99970 -0x97,0xFF,0x40,0x14,
99971 -0x00,0x00,0x00,0x00,
99972 -0x10,0x00,0xA5,0x8F,
99973 -0x25,0xB0,0x10,0x3C,
99974 -0x02,0x5C,0x00,0x0C,
99975 -0xE0,0x0E,0x04,0x36,
99976 -0x14,0x00,0xA5,0x8F,
99977 -0x02,0x5C,0x00,0x0C,
99978 -0xDC,0x0E,0x04,0x36,
99979 -0x18,0x00,0xA5,0x8F,
99980 -0x02,0x5C,0x00,0x0C,
99981 -0x70,0x0E,0x04,0x36,
99982 -0x1C,0x00,0xA5,0x8F,
99983 -0x02,0x5C,0x00,0x0C,
99984 -0x74,0x0E,0x04,0x36,
99985 -0x20,0x00,0xA5,0x8F,
99986 -0x02,0x5C,0x00,0x0C,
99987 -0x78,0x0E,0x04,0x36,
99988 -0x24,0x00,0xA5,0x8F,
99989 -0x02,0x5C,0x00,0x0C,
99990 -0x7C,0x0E,0x04,0x36,
99991 -0x28,0x00,0xA5,0x8F,
99992 -0x02,0x5C,0x00,0x0C,
99993 -0x80,0x0E,0x04,0x36,
99994 -0x2C,0x00,0xA5,0x8F,
99995 -0x02,0x5C,0x00,0x0C,
99996 -0x84,0x0E,0x04,0x36,
99997 -0x30,0x00,0xA5,0x8F,
99998 -0x02,0x5C,0x00,0x0C,
99999 -0x88,0x0E,0x04,0x36,
100000 -0x34,0x00,0xA5,0x8F,
100001 -0x02,0x5C,0x00,0x0C,
100002 -0x8C,0x0E,0x04,0x36,
100003 -0x38,0x00,0xA5,0x8F,
100004 -0x02,0x5C,0x00,0x0C,
100005 -0xD0,0x0E,0x04,0x36,
100006 -0x3C,0x00,0xA5,0x8F,
100007 -0x02,0x5C,0x00,0x0C,
100008 -0xD4,0x0E,0x04,0x36,
100009 -0x40,0x00,0xA5,0x8F,
100010 -0x88,0x0E,0x04,0x36,
100011 -0x6C,0x00,0xBF,0x8F,
100012 -0x68,0x00,0xBE,0x8F,
100013 -0x64,0x00,0xB7,0x8F,
100014 -0x60,0x00,0xB6,0x8F,
100015 -0x5C,0x00,0xB5,0x8F,
100016 -0x58,0x00,0xB4,0x8F,
100017 -0x54,0x00,0xB3,0x8F,
100018 -0x50,0x00,0xB2,0x8F,
100019 -0x4C,0x00,0xB1,0x8F,
100020 -0x48,0x00,0xB0,0x8F,
100021 -0x02,0x5C,0x00,0x08,
100022 -0x70,0x00,0xBD,0x27,
100023 -0x80,0x0C,0xF1,0x36,
100024 -0x94,0x0E,0xE3,0x36,
100025 -0x00,0x00,0x24,0x8E,
100026 -0x00,0x00,0x62,0x8C,
100027 -0xFF,0x03,0x03,0x3C,
100028 -0xFF,0x03,0x95,0x30,
100029 -0x24,0x10,0x43,0x00,
100030 -0x02,0x14,0x02,0x00,
100031 -0x18,0x00,0x55,0x00,
100032 -0x02,0x80,0x10,0x3C,
100033 -0x30,0x1F,0x10,0x26,
100034 -0x0C,0x00,0x02,0x8E,
100035 -0x00,0xFC,0x12,0x24,
100036 -0x00,0x00,0x3E,0x8E,
100037 -0x24,0x10,0x52,0x00,
100038 -0x21,0x20,0x20,0x02,
100039 -0x24,0x30,0xD2,0x03,
100040 -0xFF,0xFF,0x13,0x3C,
100041 -0xFF,0x03,0x73,0x36,
100042 -0x12,0x18,0x00,0x00,
100043 -0x02,0x1A,0x03,0x00,
100044 -0xFF,0x03,0x63,0x30,
100045 -0x25,0x10,0x43,0x00,
100046 -0xFF,0x03,0x45,0x30,
100047 -0x25,0x28,0xC5,0x00,
100048 -0x02,0x5C,0x00,0x0C,
100049 -0x0C,0x00,0x02,0xAE,
100050 -0x54,0x22,0x00,0x0C,
100051 -0x05,0x00,0x04,0x24,
100052 -0x9C,0x0E,0xE3,0x36,
100053 -0x00,0x00,0x62,0x8C,
100054 -0xFF,0x03,0x03,0x3C,
100055 -0x0C,0x00,0x06,0x8E,
100056 -0x24,0x10,0x43,0x00,
100057 -0x02,0xB4,0x02,0x00,
100058 -0x18,0x00,0xD5,0x02,
100059 -0xF0,0xFF,0x02,0x3C,
100060 -0xFF,0x03,0x42,0x34,
100061 -0x24,0x30,0xC2,0x00,
100062 -0x00,0x00,0x3E,0x8E,
100063 -0xC0,0xFF,0x04,0x3C,
100064 -0xFF,0xFF,0x84,0x34,
100065 -0x24,0x10,0xC4,0x03,
100066 -0x21,0x20,0x20,0x02,
100067 -0xFF,0x0F,0x11,0x3C,
100068 -0xFF,0xFF,0x31,0x36,
100069 -0x12,0x18,0x00,0x00,
100070 -0x02,0x1A,0x03,0x00,
100071 -0xFF,0x03,0x63,0x30,
100072 -0x80,0x1A,0x03,0x00,
100073 -0x25,0x30,0xC3,0x00,
100074 -0x82,0x2A,0x06,0x00,
100075 -0x3F,0x00,0xA5,0x30,
100076 -0x00,0x2C,0x05,0x00,
100077 -0x0C,0x00,0x06,0xAE,
100078 -0x02,0x5C,0x00,0x0C,
100079 -0x25,0x28,0x45,0x00,
100080 -0x94,0x0C,0xE4,0x36,
100081 -0x00,0x00,0x9E,0x8C,
100082 -0x82,0x29,0x16,0x00,
100083 -0x00,0x2F,0x05,0x00,
100084 -0x24,0x10,0xD1,0x03,
100085 -0x02,0x5C,0x00,0x0C,
100086 -0x25,0x28,0x45,0x00,
100087 -0x54,0x22,0x00,0x0C,
100088 -0x05,0x00,0x04,0x24,
100089 -0x25,0xB0,0x05,0x3C,
100090 -0xA4,0x0E,0xE3,0x36,
100091 -0x14,0x0C,0xA5,0x34,
100092 -0x00,0x00,0xBE,0x8C,
100093 -0x00,0x00,0x62,0x8C,
100094 -0xFF,0x03,0x05,0x3C,
100095 -0x02,0x80,0x03,0x3C,
100096 -0xDC,0xED,0x63,0x24,
100097 -0x24,0x10,0x45,0x00,
100098 -0x00,0x00,0x64,0x8C,
100099 -0x02,0x14,0x02,0x00,
100100 -0x24,0x18,0xD2,0x03,
100101 -0x25,0xF0,0x62,0x00,
100102 -0x02,0x5C,0x00,0x0C,
100103 -0x21,0x28,0xC0,0x03,
100104 -0x25,0xB0,0x02,0x3C,
100105 -0xAC,0x0E,0x42,0x34,
100106 -0x00,0x00,0x45,0x8C,
100107 -0x3F,0x00,0x03,0x3C,
100108 -0x24,0x10,0xD3,0x03,
100109 -0x24,0x28,0xA3,0x00,
100110 -0x82,0x29,0x05,0x00,
100111 -0x25,0x28,0x45,0x00,
100112 -0x02,0x80,0x02,0x3C,
100113 -0xDC,0xED,0x42,0x24,
100114 -0x00,0x00,0x44,0x8C,
100115 -0x02,0x5C,0x00,0x0C,
100116 -0x00,0x00,0x00,0x00,
100117 -0x54,0x22,0x00,0x0C,
100118 -0x05,0x00,0x04,0x24,
100119 -0x25,0xB0,0x05,0x3C,
100120 -0xB4,0x0E,0xE3,0x36,
100121 -0x88,0x0C,0xA5,0x34,
100122 -0x00,0x00,0xA4,0x8C,
100123 -0x00,0x00,0x62,0x8C,
100124 -0xFF,0x03,0x03,0x3C,
100125 -0xFF,0x03,0x95,0x30,
100126 -0x24,0x10,0x43,0x00,
100127 -0x02,0x14,0x02,0x00,
100128 -0x18,0x00,0x55,0x00,
100129 -0x0C,0x00,0x06,0x8E,
100130 -0x00,0x00,0xBE,0x8C,
100131 -0x02,0x80,0x02,0x3C,
100132 -0x24,0x30,0xD2,0x00,
100133 -0xE0,0xED,0x42,0x24,
100134 -0x00,0x00,0x44,0x8C,
100135 -0x24,0x10,0xD2,0x03,
100136 -0x12,0x18,0x00,0x00,
100137 -0x02,0x1A,0x03,0x00,
100138 -0xFF,0x03,0x63,0x30,
100139 -0x25,0x30,0xC3,0x00,
100140 -0xFF,0x03,0xC5,0x30,
100141 -0x25,0x28,0x45,0x00,
100142 -0x02,0x5C,0x00,0x0C,
100143 -0x0C,0x00,0x06,0xAE,
100144 -0x54,0x22,0x00,0x0C,
100145 -0x05,0x00,0x04,0x24,
100146 -0xBC,0x0E,0xE2,0x36,
100147 -0x00,0x00,0x43,0x8C,
100148 -0xFF,0x03,0x05,0x3C,
100149 -0x0C,0x00,0x06,0x8E,
100150 -0x24,0x18,0x65,0x00,
100151 -0x02,0xB4,0x03,0x00,
100152 -0x18,0x00,0xD5,0x02,
100153 -0x25,0xB0,0x04,0x3C,
100154 -0x88,0x0C,0x84,0x34,
100155 -0xF0,0xFF,0x03,0x3C,
100156 -0x00,0x00,0x9E,0x8C,
100157 -0xFF,0x03,0x63,0x34,
100158 -0x24,0x30,0xC3,0x00,
100159 -0xC0,0xFF,0x04,0x3C,
100160 -0x02,0x80,0x05,0x3C,
100161 -0xFF,0xFF,0x84,0x34,
100162 -0xE0,0xED,0xA5,0x24,
100163 -0x24,0xF0,0xC4,0x03,
100164 -0x00,0x00,0xA4,0x8C,
100165 -0x44,0x00,0xBE,0xAF,
100166 -0x12,0x10,0x00,0x00,
100167 -0x02,0x12,0x02,0x00,
100168 -0xFF,0x03,0x42,0x30,
100169 -0x80,0x12,0x02,0x00,
100170 -0x25,0x30,0xC2,0x00,
100171 -0x82,0x2A,0x06,0x00,
100172 -0x3F,0x00,0xA5,0x30,
100173 -0x00,0x2C,0x05,0x00,
100174 -0x0C,0x00,0x06,0xAE,
100175 -0x02,0x5C,0x00,0x0C,
100176 -0x25,0x28,0xC5,0x03,
100177 -0x9C,0x0C,0xE4,0x36,
100178 -0x00,0x00,0x9E,0x8C,
100179 -0x82,0x29,0x16,0x00,
100180 -0x00,0x2F,0x05,0x00,
100181 -0x24,0x88,0xD1,0x03,
100182 -0x02,0x5C,0x00,0x0C,
100183 -0x25,0x28,0x25,0x02,
100184 -0x54,0x22,0x00,0x0C,
100185 -0x05,0x00,0x04,0x24,
100186 -0x25,0xB0,0x02,0x3C,
100187 -0xC4,0x0E,0xE3,0x36,
100188 -0x1C,0x0C,0x42,0x34,
100189 -0x00,0x00,0x5E,0x8C,
100190 -0x00,0x00,0x62,0x8C,
100191 -0xFF,0x03,0x05,0x3C,
100192 -0x02,0x80,0x03,0x3C,
100193 -0xE4,0xED,0x63,0x24,
100194 -0x24,0x10,0x45,0x00,
100195 -0x00,0x00,0x64,0x8C,
100196 -0x02,0x14,0x02,0x00,
100197 -0x24,0x90,0xD2,0x03,
100198 -0x25,0xF0,0x42,0x02,
100199 -0x02,0x5C,0x00,0x0C,
100200 -0x21,0x28,0xC0,0x03,
100201 -0xCC,0x0E,0xE2,0x36,
100202 -0x00,0x00,0x45,0x8C,
100203 -0x02,0x80,0x02,0x3C,
100204 -0xE4,0xED,0x42,0x24,
100205 -0x3F,0x00,0x03,0x3C,
100206 -0x00,0x00,0x44,0x8C,
100207 -0x24,0x28,0xA3,0x00,
100208 -0x24,0x98,0xD3,0x03,
100209 -0x82,0x29,0x05,0x00,
100210 -0x02,0x5C,0x00,0x0C,
100211 -0x25,0x28,0x65,0x02,
100212 -0x54,0x22,0x00,0x0C,
100213 -0x05,0x00,0x04,0x24,
100214 -0x5C,0x6D,0x00,0x08,
100215 -0x00,0x00,0x00,0x00,
100216 -0xE0,0xFF,0xBD,0x27,
100217 -0x02,0x80,0x02,0x3C,
100218 -0x42,0x00,0x03,0x24,
100219 -0x10,0x00,0xA3,0xA3,
100220 -0xF1,0x3A,0x40,0xA0,
100221 -0x4E,0x00,0x03,0x24,
100222 -0x43,0x00,0x02,0x24,
100223 -0x02,0x80,0x07,0x3C,
100224 -0x9C,0xF3,0xE7,0x24,
100225 -0x11,0x00,0xA2,0xA3,
100226 -0x12,0x00,0xA3,0xA3,
100227 -0xD0,0x07,0x02,0x24,
100228 -0x01,0x00,0x03,0x24,
100229 -0x01,0x80,0x06,0x3C,
100230 -0x10,0x00,0xA5,0x27,
100231 -0x21,0x20,0xE0,0x00,
100232 -0xDC,0xAC,0xC6,0x24,
100233 -0x0C,0x00,0xE2,0xAC,
100234 -0x14,0x00,0xE3,0xA0,
100235 -0x18,0x00,0xBF,0xAF,
100236 -0xA2,0x23,0x00,0x0C,
100237 -0x13,0x00,0xA0,0xA3,
100238 -0x18,0x00,0xBF,0x8F,
100239 -0x00,0x00,0x00,0x00,
100240 -0x08,0x00,0xE0,0x03,
100241 -0x20,0x00,0xBD,0x27,
100242 -0x02,0x80,0x02,0x3C,
100243 -0x48,0xFD,0xBD,0x27,
100244 -0xE8,0xED,0x46,0x24,
100245 -0x02,0x80,0x03,0x3C,
100246 -0xB0,0x02,0xB2,0xAF,
100247 -0xAC,0x02,0xB1,0xAF,
100248 -0xA8,0x02,0xB0,0xAF,
100249 -0x33,0x1F,0x60,0xA0,
100250 -0x21,0x38,0xA0,0x03,
100251 -0x90,0x00,0xC8,0x24,
100252 -0x00,0x00,0xC2,0x8C,
100253 -0x04,0x00,0xC3,0x8C,
100254 -0x08,0x00,0xC4,0x8C,
100255 -0x0C,0x00,0xC5,0x8C,
100256 -0x10,0x00,0xC6,0x24,
100257 -0x00,0x00,0xE2,0xAC,
100258 -0x04,0x00,0xE3,0xAC,
100259 -0x08,0x00,0xE4,0xAC,
100260 -0x0C,0x00,0xE5,0xAC,
100261 -0xF6,0xFF,0xC8,0x14,
100262 -0x10,0x00,0xE7,0x24,
100263 -0x00,0x00,0xC3,0x8C,
100264 -0x02,0x80,0x02,0x3C,
100265 -0x7C,0xEE,0x58,0x24,
100266 -0x00,0x00,0xE3,0xAC,
100267 -0x98,0x00,0xB9,0x27,
100268 -0x00,0x01,0x12,0x27,
100269 -0x01,0x00,0x02,0x93,
100270 -0x05,0x00,0x03,0x93,
100271 -0x09,0x00,0x04,0x93,
100272 -0x0D,0x00,0x05,0x93,
100273 -0x00,0x00,0x11,0x93,
100274 -0x02,0x00,0x0D,0x93,
100275 -0x04,0x00,0x10,0x93,
100276 -0x06,0x00,0x0C,0x93,
100277 -0x08,0x00,0x0F,0x93,
100278 -0x0A,0x00,0x07,0x93,
100279 -0x0C,0x00,0x0E,0x93,
100280 -0x0E,0x00,0x06,0x93,
100281 -0x03,0x00,0x08,0x93,
100282 -0x07,0x00,0x09,0x93,
100283 -0x0B,0x00,0x0A,0x93,
100284 -0x0F,0x00,0x0B,0x93,
100285 -0x00,0x12,0x02,0x00,
100286 -0x00,0x1A,0x03,0x00,
100287 -0x00,0x22,0x04,0x00,
100288 -0x00,0x2A,0x05,0x00,
100289 -0x25,0x10,0x51,0x00,
100290 -0x25,0x18,0x70,0x00,
100291 -0x25,0x20,0x8F,0x00,
100292 -0x25,0x28,0xAE,0x00,
100293 -0x00,0x6C,0x0D,0x00,
100294 -0x00,0x64,0x0C,0x00,
100295 -0x00,0x3C,0x07,0x00,
100296 -0x00,0x34,0x06,0x00,
100297 -0x25,0x68,0xA2,0x01,
100298 -0x25,0x60,0x83,0x01,
100299 -0x25,0x38,0xE4,0x00,
100300 -0x25,0x30,0xC5,0x00,
100301 -0x00,0x46,0x08,0x00,
100302 -0x00,0x4E,0x09,0x00,
100303 -0x00,0x56,0x0A,0x00,
100304 -0x00,0x5E,0x0B,0x00,
100305 -0x25,0x40,0x0D,0x01,
100306 -0x25,0x48,0x2C,0x01,
100307 -0x25,0x50,0x47,0x01,
100308 -0x25,0x58,0x66,0x01,
100309 -0x10,0x00,0x18,0x27,
100310 -0x00,0x00,0x28,0xAF,
100311 -0x04,0x00,0x29,0xAF,
100312 -0x08,0x00,0x2A,0xAF,
100313 -0x0C,0x00,0x2B,0xAF,
100314 -0xD2,0xFF,0x12,0x17,
100315 -0x10,0x00,0x39,0x27,
100316 -0x01,0x00,0x02,0x93,
100317 -0x05,0x00,0x03,0x93,
100318 -0x00,0x00,0x09,0x93,
100319 -0x02,0x00,0x04,0x93,
100320 -0x04,0x00,0x08,0x93,
100321 -0x06,0x00,0x05,0x93,
100322 -0x07,0x00,0x06,0x93,
100323 -0x03,0x00,0x07,0x93,
100324 -0x00,0x12,0x02,0x00,
100325 -0x00,0x1A,0x03,0x00,
100326 -0x25,0x10,0x49,0x00,
100327 -0x25,0x18,0x68,0x00,
100328 -0x00,0x24,0x04,0x00,
100329 -0x00,0x2C,0x05,0x00,
100330 -0x25,0x20,0x82,0x00,
100331 -0x25,0x28,0xA3,0x00,
100332 -0x00,0x3E,0x07,0x00,
100333 -0x00,0x36,0x06,0x00,
100334 -0x02,0x80,0x02,0x3C,
100335 -0x25,0x38,0xE4,0x00,
100336 -0x25,0x30,0xC5,0x00,
100337 -0x84,0xEF,0x58,0x24,
100338 -0x04,0x00,0x26,0xAF,
100339 -0x00,0x00,0x27,0xAF,
100340 -0x00,0x01,0x12,0x27,
100341 -0xA0,0x01,0xB9,0x27,
100342 -0x01,0x00,0x02,0x93,
100343 -0x05,0x00,0x03,0x93,
100344 -0x09,0x00,0x04,0x93,
100345 -0x0D,0x00,0x05,0x93,
100346 -0x00,0x00,0x11,0x93,
100347 -0x02,0x00,0x0D,0x93,
100348 -0x04,0x00,0x10,0x93,
100349 -0x06,0x00,0x0C,0x93,
100350 -0x08,0x00,0x0F,0x93,
100351 -0x0A,0x00,0x07,0x93,
100352 -0x0C,0x00,0x0E,0x93,
100353 -0x0E,0x00,0x06,0x93,
100354 -0x03,0x00,0x08,0x93,
100355 -0x07,0x00,0x09,0x93,
100356 -0x0B,0x00,0x0A,0x93,
100357 -0x0F,0x00,0x0B,0x93,
100358 -0x00,0x12,0x02,0x00,
100359 -0x00,0x1A,0x03,0x00,
100360 -0x00,0x22,0x04,0x00,
100361 -0x00,0x2A,0x05,0x00,
100362 -0x25,0x10,0x51,0x00,
100363 -0x25,0x18,0x70,0x00,
100364 -0x25,0x20,0x8F,0x00,
100365 -0x25,0x28,0xAE,0x00,
100366 -0x00,0x6C,0x0D,0x00,
100367 -0x00,0x64,0x0C,0x00,
100368 -0x00,0x3C,0x07,0x00,
100369 -0x00,0x34,0x06,0x00,
100370 -0x25,0x68,0xA2,0x01,
100371 -0x25,0x60,0x83,0x01,
100372 -0x25,0x38,0xE4,0x00,
100373 -0x25,0x30,0xC5,0x00,
100374 -0x00,0x46,0x08,0x00,
100375 -0x00,0x4E,0x09,0x00,
100376 -0x00,0x56,0x0A,0x00,
100377 -0x00,0x5E,0x0B,0x00,
100378 -0x25,0x40,0x0D,0x01,
100379 -0x25,0x48,0x2C,0x01,
100380 -0x25,0x50,0x47,0x01,
100381 -0x25,0x58,0x66,0x01,
100382 -0x10,0x00,0x18,0x27,
100383 -0x00,0x00,0x28,0xAF,
100384 -0x04,0x00,0x29,0xAF,
100385 -0x08,0x00,0x2A,0xAF,
100386 -0x0C,0x00,0x2B,0xAF,
100387 -0xD2,0xFF,0x12,0x17,
100388 -0x10,0x00,0x39,0x27,
100389 -0x01,0x00,0x02,0x93,
100390 -0x05,0x00,0x03,0x93,
100391 -0x00,0x00,0x09,0x93,
100392 -0x02,0x00,0x04,0x93,
100393 -0x04,0x00,0x08,0x93,
100394 -0x06,0x00,0x05,0x93,
100395 -0x07,0x00,0x06,0x93,
100396 -0x03,0x00,0x07,0x93,
100397 -0x00,0x12,0x02,0x00,
100398 -0x00,0x1A,0x03,0x00,
100399 -0x25,0x10,0x49,0x00,
100400 -0x25,0x18,0x68,0x00,
100401 -0x00,0x24,0x04,0x00,
100402 -0x00,0x2C,0x05,0x00,
100403 -0x25,0x20,0x82,0x00,
100404 -0x25,0x28,0xA3,0x00,
100405 -0x00,0x3E,0x07,0x00,
100406 -0x00,0x36,0x06,0x00,
100407 -0x25,0x30,0xC5,0x00,
100408 -0x25,0x38,0xE4,0x00,
100409 -0x02,0x80,0x02,0x3C,
100410 -0x04,0x00,0x26,0xAF,
100411 -0x00,0x00,0x27,0xAF,
100412 -0x30,0x1F,0x46,0x24,
100413 -0x21,0x50,0x00,0x00,
100414 -0x80,0x20,0x0A,0x00,
100415 -0x21,0x10,0x9D,0x00,
100416 -0x00,0x00,0x45,0x8C,
100417 -0x01,0x00,0x43,0x25,
100418 -0xFF,0x00,0x6A,0x30,
100419 -0x21,0x20,0x86,0x00,
100420 -0x25,0x00,0x42,0x2D,
100421 -0xF8,0xFF,0x40,0x14,
100422 -0x18,0x00,0x85,0xAC,
100423 -0x02,0x80,0x02,0x3C,
100424 -0x30,0x1F,0x4B,0x24,
100425 -0x21,0x50,0x00,0x00,
100426 -0xC0,0x10,0x0A,0x00,
100427 -0x21,0x48,0x5D,0x00,
100428 -0x21,0x38,0x00,0x00,
100429 -0x21,0x40,0x4B,0x00,
100430 -0x21,0x10,0x27,0x01,
100431 -0xA0,0x01,0x46,0x90,
100432 -0x98,0x00,0x45,0x90,
100433 -0x01,0x00,0xE4,0x24,
100434 -0x21,0x18,0x07,0x01,
100435 -0xFF,0x00,0x87,0x30,
100436 -0x08,0x00,0xE2,0x2C,
100437 -0xB4,0x01,0x66,0xA0,
100438 -0xF7,0xFF,0x40,0x14,
100439 -0xAC,0x00,0x65,0xA0,
100440 -0x01,0x00,0x42,0x25,
100441 -0xFF,0x00,0x4A,0x30,
100442 -0x21,0x00,0x43,0x2D,
100443 -0xEF,0xFF,0x60,0x14,
100444 -0xC0,0x10,0x0A,0x00,
100445 -0x08,0x00,0x64,0x8D,
100446 -0xFF,0x7F,0x07,0x3C,
100447 -0xFF,0xFF,0xE7,0x34,
100448 -0xC0,0xFF,0x02,0x24,
100449 -0x24,0x20,0x87,0x00,
100450 -0x24,0x20,0x82,0x00,
100451 -0x0C,0x00,0x84,0x34,
100452 -0xFF,0xC0,0x02,0x24,
100453 -0x24,0x20,0x82,0x00,
100454 -0xC0,0xFF,0x02,0x3C,
100455 -0xFF,0xFF,0x42,0x34,
100456 -0x00,0x18,0x84,0x34,
100457 -0xBF,0xFF,0x03,0x3C,
100458 -0x24,0x20,0x82,0x00,
100459 -0xFF,0xFF,0x63,0x34,
100460 -0x7F,0xFF,0x02,0x3C,
100461 -0x24,0x20,0x83,0x00,
100462 -0xFF,0xFF,0x42,0x34,
100463 -0x24,0x20,0x82,0x00,
100464 -0x0C,0x00,0x65,0x8D,
100465 -0x7F,0xFF,0x03,0x24,
100466 -0x40,0x40,0x84,0x34,
100467 -0xFF,0xFF,0x02,0x3C,
100468 -0x24,0x20,0x83,0x00,
100469 -0xFF,0x7F,0x42,0x34,
100470 -0xFF,0xBF,0x03,0x3C,
100471 -0x10,0x00,0x66,0x8D,
100472 -0x24,0x20,0x82,0x00,
100473 -0xFF,0xFF,0x63,0x34,
100474 -0xFF,0x9F,0x02,0x3C,
100475 -0x24,0x28,0xA3,0x00,
100476 -0xFF,0xFF,0x42,0x34,
100477 -0xFF,0x3F,0x03,0x3C,
100478 -0x24,0x20,0x82,0x00,
100479 -0xFF,0xFF,0x63,0x34,
100480 -0x12,0x00,0x02,0x24,
100481 -0xB0,0x02,0xB2,0x8F,
100482 -0xAC,0x02,0xB1,0x8F,
100483 -0xA8,0x02,0xB0,0x8F,
100484 -0x24,0x30,0xC3,0x00,
100485 -0xC7,0x02,0x62,0xA1,
100486 -0x1F,0x00,0x03,0x24,
100487 -0x01,0x00,0x02,0x24,
100488 -0x24,0x28,0xA7,0x00,
100489 -0xBE,0x02,0x63,0xA1,
100490 -0xC0,0x02,0x62,0xA1,
100491 -0xFF,0x00,0x03,0x24,
100492 -0xFF,0xFF,0x02,0x24,
100493 -0xB8,0x02,0xBD,0x27,
100494 -0x08,0x00,0x64,0xAD,
100495 -0x10,0x00,0x66,0xAD,
100496 -0x0C,0x00,0x65,0xAD,
100497 -0xC2,0x02,0x62,0xA1,
100498 -0xC4,0x02,0x63,0xA5,
100499 -0xBF,0x02,0x60,0xA1,
100500 -0x08,0x00,0xE0,0x03,
100501 -0xC6,0x02,0x60,0xA1,
100502 -0x02,0x80,0x0B,0x3C,
100503 -0x30,0x1F,0x67,0x25,
100504 -0xE0,0xFF,0xBD,0x27,
100505 -0xE6,0x02,0xE0,0xA0,
100506 -0x18,0x00,0xBF,0xAF,
100507 -0xE4,0x02,0xE8,0x8C,
100508 -0xFF,0xCF,0x02,0x3C,
100509 -0xFF,0xFF,0x42,0x34,
100510 -0x30,0x1F,0x69,0x8D,
100511 -0x24,0x40,0x02,0x01,
100512 -0xFF,0xBF,0x02,0x3C,
100513 -0xFF,0xFF,0x42,0x34,
100514 -0xF0,0xFF,0x03,0x24,
100515 -0x24,0x40,0x02,0x01,
100516 -0xFF,0x7F,0x02,0x3C,
100517 -0x24,0x48,0x23,0x01,
100518 -0xFF,0xFF,0x42,0x34,
100519 -0xFF,0xF0,0x03,0x24,
100520 -0x24,0x48,0x23,0x01,
100521 -0x24,0x40,0x02,0x01,
100522 -0x20,0x00,0x03,0x24,
100523 -0x0A,0x00,0x02,0x24,
100524 -0x30,0x1F,0x69,0xAD,
100525 -0xD2,0x02,0xE2,0xA0,
100526 -0xD7,0x02,0xE3,0xA0,
100527 -0x20,0x00,0x02,0x24,
100528 -0x00,0x01,0x03,0x24,
100529 -0xC8,0x02,0xE2,0xA4,
100530 -0xCA,0x02,0xE3,0xA4,
100531 -0x00,0x02,0x02,0x24,
100532 -0x49,0x00,0x03,0x24,
100533 -0x02,0x80,0x0A,0x3C,
100534 -0xE4,0x02,0xE8,0xAC,
100535 -0x80,0xF3,0x4A,0x25,
100536 -0xFF,0xFF,0x0D,0x34,
100537 -0x3E,0x00,0x0E,0x24,
100538 -0x1C,0x00,0x0F,0x24,
100539 -0x01,0x00,0x0C,0x24,
100540 -0x11,0x00,0xA3,0xA3,
100541 -0xCC,0x02,0xE2,0xA4,
100542 -0xD0,0x07,0x03,0x24,
100543 -0x44,0x00,0x02,0x24,
100544 -0x01,0x80,0x06,0x3C,
100545 -0x10,0x00,0xA2,0xA3,
100546 -0x10,0x00,0xA5,0x27,
100547 -0x47,0x00,0x02,0x24,
100548 -0x21,0x20,0x40,0x01,
100549 -0x94,0xAD,0xC6,0x24,
100550 -0x04,0x00,0xED,0xAC,
100551 -0xD0,0x02,0xEE,0xA0,
100552 -0xD1,0x02,0xEF,0xA0,
100553 -0x02,0x00,0xEC,0xA0,
100554 -0x0C,0x00,0x43,0xAD,
100555 -0x14,0x00,0x4C,0xA1,
100556 -0x80,0x36,0xED,0xAC,
100557 -0xCE,0x02,0xEE,0xA0,
100558 -0xCF,0x02,0xEF,0xA0,
100559 -0xD6,0x02,0xE0,0xA0,
100560 -0xD4,0x02,0xE0,0xA0,
100561 -0x12,0x00,0xA2,0xA3,
100562 -0xA2,0x23,0x00,0x0C,
100563 -0x13,0x00,0xA0,0xA3,
100564 -0x18,0x00,0xBF,0x8F,
100565 -0x00,0x00,0x00,0x00,
100566 -0x08,0x00,0xE0,0x03,
100567 -0x20,0x00,0xBD,0x27,
100568 -0xE0,0xFF,0xBD,0x27,
100569 -0x02,0x80,0x02,0x3C,
100570 -0x50,0x00,0x03,0x24,
100571 -0x10,0x00,0xA3,0xA3,
100572 -0x16,0x3D,0x40,0xA0,
100573 -0x41,0x00,0x03,0x24,
100574 -0x52,0x00,0x02,0x24,
100575 -0x02,0x80,0x07,0x3C,
100576 -0x0C,0xF4,0xE7,0x24,
100577 -0x11,0x00,0xA2,0xA3,
100578 -0x12,0x00,0xA3,0xA3,
100579 -0xD0,0x07,0x02,0x24,
100580 -0x01,0x00,0x03,0x24,
100581 -0x02,0x80,0x06,0x3C,
100582 -0x10,0x00,0xA5,0x27,
100583 -0x21,0x20,0xE0,0x00,
100584 -0x2C,0x80,0xC6,0x24,
100585 -0x0C,0x00,0xE2,0xAC,
100586 -0x14,0x00,0xE3,0xA0,
100587 -0x18,0x00,0xBF,0xAF,
100588 -0xA2,0x23,0x00,0x0C,
100589 -0x13,0x00,0xA0,0xA3,
100590 -0x18,0x00,0xBF,0x8F,
100591 -0x00,0x00,0x00,0x00,
100592 -0x08,0x00,0xE0,0x03,
100593 -0x20,0x00,0xBD,0x27,
100594 -0x02,0x80,0x09,0x3C,
100595 -0x30,0x1F,0x23,0x8D,
100596 -0xFF,0xFF,0x02,0x24,
100597 -0xFF,0x00,0x4B,0x30,
100598 -0x0F,0xFF,0x02,0x24,
100599 -0x24,0x18,0x62,0x00,
100600 -0xFF,0xFF,0x02,0x3C,
100601 -0xFF,0x0F,0x42,0x34,
100602 -0x24,0x18,0x62,0x00,
100603 -0xD8,0xFF,0xBD,0x27,
100604 -0x30,0x1F,0x23,0xAD,
100605 -0x47,0x00,0x02,0x24,
100606 -0x3B,0x00,0x03,0x24,
100607 -0x02,0x80,0x08,0x3C,
100608 -0x28,0xF4,0x08,0x25,
100609 -0x18,0x00,0xB0,0xAF,
100610 -0x10,0x00,0xA2,0xA3,
100611 -0x30,0x1F,0x30,0x25,
100612 -0x11,0x00,0xA3,0xA3,
100613 -0xD0,0x07,0x02,0x24,
100614 -0x01,0x00,0x03,0x24,
100615 -0x01,0x00,0x07,0x3C,
100616 -0x01,0x80,0x06,0x3C,
100617 -0x04,0x03,0x0B,0xAE,
100618 -0x1C,0x00,0xB1,0xAF,
100619 -0x56,0x30,0xEA,0x34,
100620 -0x43,0x00,0x11,0x24,
100621 -0xF4,0x98,0xE7,0x34,
100622 -0x10,0x00,0xA5,0x27,
100623 -0x0C,0x00,0x02,0xAD,
100624 -0x14,0x00,0x03,0xA1,
100625 -0x21,0x20,0x00,0x01,
100626 -0x1C,0xB9,0xC6,0x24,
100627 -0x20,0x00,0xBF,0xAF,
100628 -0x12,0x00,0xB1,0xA3,
100629 -0x0C,0x03,0x07,0xAE,
100630 -0x10,0x03,0x0A,0xAE,
100631 -0x13,0x00,0xA0,0xA3,
100632 -0x08,0x03,0x00,0xAE,
100633 -0x14,0x03,0x00,0xAE,
100634 -0xA2,0x23,0x00,0x0C,
100635 -0x18,0x03,0x00,0xAE,
100636 -0x1E,0x00,0x02,0x24,
100637 -0x21,0x03,0x02,0xA2,
100638 -0x4A,0x00,0x03,0x24,
100639 -0x45,0x00,0x02,0x24,
100640 -0x1C,0x03,0x03,0xA2,
100641 -0x1D,0x03,0x02,0xA2,
100642 -0x23,0x00,0x03,0x24,
100643 -0x3E,0x00,0x02,0x24,
100644 -0x1E,0x03,0x11,0xA2,
100645 -0x1F,0x03,0x02,0xA2,
100646 -0x20,0x03,0x03,0xA2,
100647 -0x20,0x00,0xBF,0x8F,
100648 -0x1C,0x00,0xB1,0x8F,
100649 -0x18,0x00,0xB0,0x8F,
100650 -0x08,0x00,0xE0,0x03,
100651 -0x28,0x00,0xBD,0x27,
100652 -0xE0,0xFF,0xBD,0x27,
100653 -0x3B,0x00,0x02,0x24,
100654 -0x43,0x00,0x03,0x24,
100655 -0x10,0x00,0xA2,0xA3,
100656 -0x11,0x00,0xA3,0xA3,
100657 -0x36,0x00,0x02,0x24,
100658 -0x02,0x80,0x03,0x3C,
100659 -0x02,0x80,0x07,0x3C,
100660 -0x44,0xF4,0xE7,0x24,
100661 -0x12,0x00,0xA2,0xA3,
100662 -0x03,0x22,0x60,0xA0,
100663 -0xD0,0x07,0x02,0x24,
100664 -0x01,0x00,0x03,0x24,
100665 -0x01,0x80,0x06,0x3C,
100666 -0x10,0x00,0xA5,0x27,
100667 -0x21,0x20,0xE0,0x00,
100668 -0x50,0xBD,0xC6,0x24,
100669 -0x0C,0x00,0xE2,0xAC,
100670 -0x14,0x00,0xE3,0xA0,
100671 -0x18,0x00,0xBF,0xAF,
100672 -0xA2,0x23,0x00,0x0C,
100673 -0x13,0x00,0xA0,0xA3,
100674 -0x18,0x00,0xBF,0x8F,
100675 -0x00,0x00,0x00,0x00,
100676 -0x08,0x00,0xE0,0x03,
100677 -0x20,0x00,0xBD,0x27,
100678 -0xE0,0xFF,0xBD,0x27,
100679 -0x02,0x80,0x02,0x3C,
100680 -0x52,0x00,0x03,0x24,
100681 -0x10,0x00,0xA3,0xA3,
100682 -0xB8,0x55,0x40,0xA4,
100683 -0x54,0x00,0x03,0x24,
100684 -0x53,0x00,0x02,0x24,
100685 -0x02,0x80,0x07,0x3C,
100686 -0x7C,0xF4,0xE7,0x24,
100687 -0x11,0x00,0xA2,0xA3,
100688 -0x12,0x00,0xA3,0xA3,
100689 -0xF4,0x01,0x02,0x24,
100690 -0x01,0x00,0x03,0x24,
100691 -0x02,0x80,0x06,0x3C,
100692 -0x10,0x00,0xA5,0x27,
100693 -0x21,0x20,0xE0,0x00,
100694 -0x70,0x81,0xC6,0x24,
100695 -0x0C,0x00,0xE2,0xAC,
100696 -0x14,0x00,0xE3,0xA0,
100697 -0x18,0x00,0xBF,0xAF,
100698 -0xA2,0x23,0x00,0x0C,
100699 -0x13,0x00,0xA0,0xA3,
100700 -0x18,0x00,0xBF,0x8F,
100701 -0x00,0x00,0x00,0x00,
100702 -0x08,0x00,0xE0,0x03,
100703 -0x20,0x00,0xBD,0x27,
100704 -0xD8,0xFF,0xBD,0x27,
100705 -0x02,0x80,0x03,0x3C,
100706 -0x20,0x00,0xBF,0xAF,
100707 -0x1C,0x00,0xB1,0xAF,
100708 -0x18,0x00,0xB0,0xAF,
100709 -0x58,0xE9,0x62,0x24,
100710 -0x58,0xE9,0x67,0x94,
100711 -0x02,0x00,0x48,0x90,
100712 -0x02,0x80,0x02,0x3C,
100713 -0xD8,0x5E,0x42,0x24,
100714 -0x02,0x00,0x11,0x24,
100715 -0x01,0x80,0x06,0x3C,
100716 -0x21,0x20,0x40,0x00,
100717 -0x14,0x00,0x51,0xA0,
100718 -0x10,0x00,0xA5,0x27,
100719 -0x6C,0xCE,0xC6,0x24,
100720 -0x02,0x80,0x10,0x3C,
100721 -0x10,0x00,0xA7,0xA7,
100722 -0x28,0x5F,0x10,0x26,
100723 -0x12,0x00,0xA8,0xA3,
100724 -0xA2,0x23,0x00,0x0C,
100725 -0x13,0x00,0xA0,0xA3,
100726 -0x02,0x80,0x06,0x3C,
100727 -0x21,0x20,0x00,0x02,
100728 -0x10,0x00,0xA5,0x27,
100729 -0x14,0x00,0x11,0xA2,
100730 -0xA2,0x23,0x00,0x0C,
100731 -0x7C,0x82,0xC6,0x24,
100732 -0x02,0x80,0x03,0x3C,
100733 -0xDE,0x5D,0x62,0x90,
100734 -0x02,0x00,0x07,0x24,
100735 -0x0C,0x00,0x04,0x24,
100736 -0x02,0x00,0x42,0x30,
100737 -0x01,0x00,0x42,0x2C,
100738 -0x23,0x38,0xE2,0x00,
100739 -0xE8,0x03,0x02,0x24,
100740 -0x0C,0x00,0x02,0xAE,
100741 -0x02,0x80,0x03,0x3C,
100742 -0x02,0x80,0x02,0x3C,
100743 -0xF4,0x5E,0x60,0xA0,
100744 -0xF5,0x5E,0x44,0xA0,
100745 -0x02,0x80,0x03,0x3C,
100746 -0x02,0x80,0x02,0x3C,
100747 -0xF6,0x5E,0x64,0xA0,
100748 -0x0D,0x5F,0x40,0xA0,
100749 -0x02,0x80,0x03,0x3C,
100750 -0x02,0x80,0x02,0x3C,
100751 -0x13,0x5F,0x60,0xA0,
100752 -0x01,0x00,0x06,0x24,
100753 -0x14,0x5F,0x40,0xA0,
100754 -0x02,0x80,0x03,0x3C,
100755 -0x02,0x80,0x02,0x3C,
100756 -0xF8,0x5E,0x66,0xA0,
100757 -0x0F,0x00,0x04,0x24,
100758 -0x15,0x5F,0x40,0xA0,
100759 -0x02,0x80,0x03,0x3C,
100760 -0x02,0x80,0x02,0x3C,
100761 -0xF7,0x5E,0x66,0xA0,
100762 -0xF9,0x5E,0x44,0xA0,
100763 -0x02,0x80,0x03,0x3C,
100764 -0x08,0x00,0x04,0x24,
100765 -0x02,0x80,0x02,0x3C,
100766 -0xFA,0x5E,0x60,0xA0,
100767 -0x64,0x00,0x05,0x24,
100768 -0x04,0x5F,0x44,0xA4,
100769 -0x02,0x80,0x03,0x3C,
100770 -0x01,0x00,0x02,0x3C,
100771 -0xFC,0x5E,0x65,0xA4,
100772 -0x00,0x90,0x42,0x34,
100773 -0x02,0x80,0x03,0x3C,
100774 -0x00,0x5F,0x62,0xAC,
100775 -0x02,0x80,0x04,0x3C,
100776 -0x02,0x80,0x02,0x3C,
100777 -0x08,0x5F,0x80,0xAC,
100778 -0x02,0x80,0x03,0x3C,
100779 -0x0C,0x5F,0x40,0xA0,
100780 -0x02,0x80,0x02,0x3C,
100781 -0x0E,0x5F,0x60,0xA0,
100782 -0x16,0x5F,0x40,0xA0,
100783 -0x02,0x80,0x03,0x3C,
100784 -0x02,0x80,0x02,0x3C,
100785 -0x44,0x5F,0x67,0xA0,
100786 -0x20,0x00,0xBF,0x8F,
100787 -0x0F,0x5F,0x40,0xA0,
100788 -0x02,0x80,0x03,0x3C,
100789 -0x02,0x80,0x02,0x3C,
100790 -0x1C,0x00,0xB1,0x8F,
100791 -0x18,0x00,0xB0,0x8F,
100792 -0x10,0x5F,0x66,0xA0,
100793 -0x11,0x5F,0x46,0xA0,
100794 -0x02,0x80,0x03,0x3C,
100795 -0x02,0x80,0x02,0x3C,
100796 -0x12,0x5F,0x60,0xA0,
100797 -0x21,0x20,0x00,0x00,
100798 -0x18,0x5F,0x40,0xAC,
100799 -0x02,0x80,0x03,0x3C,
100800 -0x02,0x80,0x02,0x3C,
100801 -0x21,0x28,0x00,0x00,
100802 -0x28,0x00,0xBD,0x27,
100803 -0x1C,0x5F,0x60,0xAC,
100804 -0x20,0x5F,0x44,0xAC,
100805 -0x24,0x5F,0x45,0xAC,
100806 -0x08,0x00,0xE0,0x03,
100807 -0x00,0x00,0x00,0x00,
100808 -0xD8,0xFF,0xBD,0x27,
100809 -0x1C,0x00,0xB3,0xAF,
100810 -0x18,0x00,0xB2,0xAF,
100811 -0x14,0x00,0xB1,0xAF,
100812 -0x10,0x00,0xB0,0xAF,
100813 -0x20,0x00,0xBF,0xAF,
100814 -0x21,0x80,0x80,0x00,
100815 -0x21,0x98,0xA0,0x00,
100816 -0x21,0x88,0xC0,0x00,
100817 -0x21,0x90,0x00,0x00,
100818 -0x00,0x00,0x04,0x82,
100819 -0x7C,0x55,0x00,0x0C,
100820 -0x00,0x00,0x00,0x00,
100821 -0xFC,0xFF,0x40,0x14,
100822 -0x01,0x00,0x10,0x26,
100823 -0xFF,0xFF,0x10,0x26,
100824 -0x00,0x00,0x04,0x92,
100825 -0x2B,0x00,0x02,0x24,
100826 -0x00,0x1E,0x04,0x00,
100827 -0x03,0x1E,0x03,0x00,
100828 -0x41,0x00,0x62,0x10,
100829 -0x00,0x00,0x00,0x00,
100830 -0x10,0x00,0x02,0x24,
100831 -0x30,0x00,0x22,0x12,
100832 -0x00,0x1E,0x04,0x00,
100833 -0x07,0x00,0x20,0x16,
100834 -0x21,0x18,0x80,0x00,
100835 -0x00,0x1E,0x04,0x00,
100836 -0x03,0x1E,0x03,0x00,
100837 -0x30,0x00,0x02,0x24,
100838 -0x3B,0x00,0x62,0x10,
100839 -0x0A,0x00,0x11,0x24,
100840 -0x21,0x18,0x80,0x00,
100841 -0x00,0x16,0x03,0x00,
100842 -0x03,0x16,0x02,0x00,
100843 -0x1A,0x00,0x40,0x10,
100844 -0xFF,0x00,0x64,0x30,
100845 -0xA9,0xFF,0x82,0x24,
100846 -0x61,0x00,0x83,0x2C,
100847 -0xFF,0x00,0x45,0x30,
100848 -0x09,0x00,0x60,0x10,
100849 -0x41,0x00,0x86,0x2C,
100850 -0xC9,0xFF,0x82,0x24,
100851 -0xFF,0x00,0x45,0x30,
100852 -0x05,0x00,0xC0,0x10,
100853 -0x3A,0x00,0x87,0x2C,
100854 -0xD0,0xFF,0x82,0x24,
100855 -0x02,0x00,0xE0,0x10,
100856 -0xFF,0x00,0x05,0x24,
100857 -0xFF,0x00,0x45,0x30,
100858 -0x2A,0x10,0xB1,0x00,
100859 -0x0A,0x00,0x40,0x10,
100860 -0x18,0x00,0x51,0x02,
100861 -0x01,0x00,0x10,0x26,
100862 -0x12,0x10,0x00,0x00,
100863 -0x2B,0x18,0x52,0x00,
100864 -0x23,0x00,0x60,0x14,
100865 -0x21,0x90,0xA2,0x00,
100866 -0x00,0x00,0x03,0x92,
100867 -0x00,0x00,0x00,0x00,
100868 -0xE8,0xFF,0x60,0x14,
100869 -0xFF,0x00,0x64,0x30,
100870 -0x02,0x00,0x60,0x12,
100871 -0x21,0x10,0x40,0x02,
100872 -0x00,0x00,0x70,0xAE,
100873 -0x20,0x00,0xBF,0x8F,
100874 -0x1C,0x00,0xB3,0x8F,
100875 -0x18,0x00,0xB2,0x8F,
100876 -0x14,0x00,0xB1,0x8F,
100877 -0x10,0x00,0xB0,0x8F,
100878 -0x08,0x00,0xE0,0x03,
100879 -0x28,0x00,0xBD,0x27,
100880 -0x03,0x1E,0x03,0x00,
100881 -0x30,0x00,0x02,0x24,
100882 -0xCE,0xFF,0x62,0x14,
100883 -0x00,0x00,0x00,0x00,
100884 -0x01,0x00,0x03,0x82,
100885 -0x78,0x00,0x02,0x24,
100886 -0x03,0x00,0x62,0x10,
100887 -0x58,0x00,0x02,0x24,
100888 -0xD0,0xFF,0x62,0x14,
100889 -0x21,0x18,0x80,0x00,
100890 -0x02,0x00,0x10,0x26,
100891 -0x00,0x00,0x04,0x92,
100892 -0xC0,0x70,0x00,0x08,
100893 -0x10,0x00,0x11,0x24,
100894 -0x01,0x00,0x10,0x26,
100895 -0x00,0x00,0x04,0x92,
100896 -0xB7,0x70,0x00,0x08,
100897 -0x10,0x00,0x02,0x24,
100898 -0xEC,0x70,0x00,0x08,
100899 -0x08,0x00,0x11,0x24,
100900 -0x20,0x00,0xBF,0x8F,
100901 -0x1C,0x00,0xB3,0x8F,
100902 -0x18,0x00,0xB2,0x8F,
100903 -0x14,0x00,0xB1,0x8F,
100904 -0x10,0x00,0xB0,0x8F,
100905 -0xFF,0xFF,0x02,0x24,
100906 -0x08,0x00,0xE0,0x03,
100907 -0x28,0x00,0xBD,0x27,
100908 -0x21,0x48,0x80,0x00,
100909 -0x31,0x00,0xC0,0x14,
100910 -0x21,0x50,0x00,0x00,
100911 -0x00,0x00,0x87,0x90,
100912 -0x30,0x00,0x02,0x24,
100913 -0x00,0x1E,0x07,0x00,
100914 -0x03,0x1E,0x03,0x00,
100915 -0x2E,0x00,0x62,0x10,
100916 -0x0A,0x00,0x06,0x24,
100917 -0x02,0x80,0x02,0x3C,
100918 -0x40,0xF2,0x4B,0x24,
100919 -0xFF,0x00,0xE8,0x30,
100920 -0x21,0x10,0x0B,0x01,
100921 -0x00,0x00,0x44,0x90,
100922 -0x00,0x1E,0x07,0x00,
100923 -0x03,0x1E,0x03,0x00,
100924 -0x44,0x00,0x82,0x30,
100925 -0x02,0x00,0x87,0x30,
100926 -0xD0,0xFF,0x63,0x24,
100927 -0x1A,0x00,0x40,0x10,
100928 -0x04,0x00,0x84,0x30,
100929 -0x07,0x00,0x80,0x14,
100930 -0x2B,0x10,0x66,0x00,
100931 -0x21,0x10,0x00,0x01,
100932 -0x02,0x00,0xE0,0x10,
100933 -0xE0,0xFF,0x03,0x25,
100934 -0xFF,0x00,0x62,0x30,
100935 -0xC9,0xFF,0x43,0x24,
100936 -0x2B,0x10,0x66,0x00,
100937 -0x10,0x00,0x40,0x10,
100938 -0x18,0x00,0x46,0x01,
100939 -0x01,0x00,0x29,0x25,
100940 -0x00,0x00,0x27,0x91,
100941 -0x00,0x00,0x00,0x00,
100942 -0xFF,0x00,0xE8,0x30,
100943 -0x12,0x10,0x00,0x00,
100944 -0x21,0x50,0x43,0x00,
100945 -0x21,0x10,0x0B,0x01,
100946 -0x00,0x00,0x44,0x90,
100947 -0x00,0x1E,0x07,0x00,
100948 -0x03,0x1E,0x03,0x00,
100949 -0x44,0x00,0x82,0x30,
100950 -0x02,0x00,0x87,0x30,
100951 -0xD0,0xFF,0x63,0x24,
100952 -0xE8,0xFF,0x40,0x14,
100953 -0x04,0x00,0x84,0x30,
100954 -0x02,0x00,0xA0,0x10,
100955 -0x00,0x00,0x00,0x00,
100956 -0x00,0x00,0xA9,0xAC,
100957 -0x08,0x00,0xE0,0x03,
100958 -0x21,0x10,0x40,0x01,
100959 -0x00,0x00,0x87,0x90,
100960 -0x0E,0x71,0x00,0x08,
100961 -0x02,0x80,0x02,0x3C,
100962 -0x01,0x00,0x89,0x24,
100963 -0x00,0x00,0x27,0x91,
100964 -0x78,0x00,0x02,0x24,
100965 -0x00,0x1E,0x07,0x00,
100966 -0x03,0x1E,0x03,0x00,
100967 -0xCD,0xFF,0x62,0x14,
100968 -0x08,0x00,0x06,0x24,
100969 -0x01,0x00,0x22,0x91,
100970 -0x02,0x80,0x03,0x3C,
100971 -0x40,0xF2,0x63,0x24,
100972 -0x21,0x10,0x43,0x00,
100973 -0x00,0x00,0x44,0x90,
100974 -0x00,0x00,0x00,0x00,
100975 -0x44,0x00,0x84,0x30,
100976 -0xC5,0xFF,0x80,0x10,
100977 -0x02,0x80,0x02,0x3C,
100978 -0x01,0x00,0x29,0x25,
100979 -0x00,0x00,0x27,0x91,
100980 -0x0E,0x71,0x00,0x08,
100981 -0x10,0x00,0x06,0x24,
100982 -0xE8,0xFF,0xBD,0x27,
100983 -0x10,0x00,0xBF,0xAF,
100984 -0x00,0x00,0x83,0x80,
100985 -0x2D,0x00,0x02,0x24,
100986 -0x04,0x00,0x62,0x10,
100987 -0x00,0x00,0x00,0x00,
100988 -0x10,0x00,0xBF,0x8F,
100989 -0x04,0x71,0x00,0x08,
100990 -0x18,0x00,0xBD,0x27,
100991 -0x04,0x71,0x00,0x0C,
100992 -0x01,0x00,0x84,0x24,
100993 -0x10,0x00,0xBF,0x8F,
100994 -0x23,0x10,0x02,0x00,
100995 -0x08,0x00,0xE0,0x03,
100996 -0x18,0x00,0xBD,0x27,
100997 -0xD8,0xFF,0xBD,0x27,
100998 -0x1C,0x00,0xB3,0xAF,
100999 -0x18,0x00,0xB2,0xAF,
101000 -0x14,0x00,0xB1,0xAF,
101001 -0x10,0x00,0xB0,0xAF,
101002 -0x20,0x00,0xBF,0xAF,
101003 -0x21,0x80,0x80,0x00,
101004 -0x21,0x90,0xA0,0x00,
101005 -0x21,0x98,0xC0,0x00,
101006 -0x21,0x88,0x00,0x00,
101007 -0x00,0x00,0x04,0x82,
101008 -0x7C,0x55,0x00,0x0C,
101009 -0x00,0x00,0x00,0x00,
101010 -0xFC,0xFF,0x40,0x14,
101011 -0x01,0x00,0x10,0x26,
101012 -0xFF,0xFF,0x10,0x26,
101013 -0x00,0x00,0x03,0x82,
101014 -0x2D,0x00,0x02,0x24,
101015 -0x0F,0x00,0x62,0x10,
101016 -0x21,0x20,0x00,0x02,
101017 -0x21,0x28,0x40,0x02,
101018 -0xA0,0x70,0x00,0x0C,
101019 -0x21,0x30,0x60,0x02,
101020 -0x12,0x00,0x40,0x04,
101021 -0x21,0x18,0x40,0x00,
101022 -0x23,0x10,0x02,0x00,
101023 -0x0A,0x10,0x71,0x00,
101024 -0x20,0x00,0xBF,0x8F,
101025 -0x1C,0x00,0xB3,0x8F,
101026 -0x18,0x00,0xB2,0x8F,
101027 -0x14,0x00,0xB1,0x8F,
101028 -0x10,0x00,0xB0,0x8F,
101029 -0x08,0x00,0xE0,0x03,
101030 -0x28,0x00,0xBD,0x27,
101031 -0x01,0x00,0x10,0x26,
101032 -0x21,0x20,0x00,0x02,
101033 -0x21,0x28,0x40,0x02,
101034 -0xA0,0x70,0x00,0x0C,
101035 -0x21,0x30,0x60,0x02,
101036 -0xFF,0xFF,0x11,0x24,
101037 -0xF0,0xFF,0x41,0x04,
101038 -0x21,0x18,0x40,0x00,
101039 -0xF0,0xFF,0x20,0x16,
101040 -0x00,0x80,0x02,0x3C,
101041 -0x20,0x00,0xBF,0x8F,
101042 -0x1C,0x00,0xB3,0x8F,
101043 -0x18,0x00,0xB2,0x8F,
101044 -0x14,0x00,0xB1,0x8F,
101045 -0x10,0x00,0xB0,0x8F,
101046 -0xFF,0x7F,0x02,0x3C,
101047 -0xFF,0xFF,0x42,0x34,
101048 -0x08,0x00,0xE0,0x03,
101049 -0x28,0x00,0xBD,0x27,
101050 -0x00,0x00,0x00,0x00,
101051 -0x00,0x00,0x00,0x00,
101052 -0x52,0x54,0x4C,0x38,
101053 -0x37,0x31,0x32,0x20,
101054 -0x46,0x57,0x20,0x76,
101055 -0x65,0x72,0x73,0x69,
101056 -0x6F,0x6E,0x20,0x30,
101057 -0x2E,0x30,0x2E,0x31,
101058 -0x23,0x20,0xE4,0xB8,
101059 -0x89,0x20,0x31,0x30,
101060 -0xE6,0x9C,0x88,0x20,
101061 -0x32,0x38,0x20,0x31,
101062 -0x37,0x3A,0x34,0x31,
101063 -0x3A,0x34,0x37,0x20,
101064 -0x43,0x53,0x54,0x20,
101065 -0x32,0x30,0x30,0x39,
101066 -0x0A,0x00,0x00,0x00,
101067 -0x50,0xC6,0x01,0x80,
101068 -0x48,0x43,0x49,0x20,
101069 -0x74,0x79,0x70,0x65,
101070 -0x3A,0x20,0x25,0x78,
101071 -0x28,0x25,0x78,0x29,
101072 -0x0A,0x00,0x00,0x00,
101073 -0x72,0x66,0x5F,0x63,
101074 -0x6F,0x66,0x69,0x67,
101075 -0x3A,0x20,0x25,0x78,
101076 -0x28,0x25,0x78,0x2C,
101077 -0x20,0x25,0x78,0x2C,
101078 -0x20,0x25,0x78,0x29,
101079 -0x0A,0x00,0x00,0x00,
101080 -0x6D,0x70,0x5F,0x6D,
101081 -0x6F,0x64,0x65,0x3A,
101082 -0x20,0x25,0x78,0x28,
101083 -0x25,0x78,0x29,0x2C,
101084 -0x20,0x49,0x51,0x4B,
101085 -0x3A,0x20,0x25,0x78,
101086 -0x0A,0x00,0x00,0x00,
101087 -0x76,0x63,0x73,0x20,
101088 -0x74,0x79,0x70,0x65,
101089 -0x3A,0x20,0x25,0x78,
101090 -0x28,0x25,0x78,0x29,
101091 -0x0A,0x00,0x00,0x00,
101092 -0x33,0x32,0x6B,0x20,
101093 -0x63,0x61,0x6C,0x69,
101094 -0x62,0x72,0x61,0x3A,
101095 -0x20,0x25,0x64,0x2C,
101096 -0x20,0x33,0x32,0x4B,
101097 -0x20,0x54,0x53,0x46,
101098 -0x3A,0x20,0x25,0x78,
101099 -0x00,0x00,0x00,0x00,
101100 -0x74,0x61,0x72,0x67,
101101 -0x65,0x74,0x20,0x74,
101102 -0x68,0x65,0x72,0x6D,
101103 -0x61,0x6C,0x3A,0x20,
101104 -0x25,0x78,0x0A,0x00,
101105 -0x00,0x00,0x00,0x00,
101106 -0x00,0x00,0x00,0x00,
101107 -0x78,0x0C,0x00,0x00,
101108 -0x01,0x00,0x00,0x7F,
101109 -0x78,0x0C,0x00,0x00,
101110 -0x01,0x00,0x01,0x7F,
101111 -0x78,0x0C,0x00,0x00,
101112 -0x01,0x00,0x02,0x7E,
101113 -0x78,0x0C,0x00,0x00,
101114 -0x01,0x00,0x03,0x7D,
101115 -0x78,0x0C,0x00,0x00,
101116 -0x01,0x00,0x04,0x7C,
101117 -0x78,0x0C,0x00,0x00,
101118 -0x01,0x00,0x05,0x7B,
101119 -0x78,0x0C,0x00,0x00,
101120 -0x01,0x00,0x06,0x7A,
101121 -0x78,0x0C,0x00,0x00,
101122 -0x01,0x00,0x07,0x79,
101123 -0x78,0x0C,0x00,0x00,
101124 -0x01,0x00,0x08,0x78,
101125 -0x78,0x0C,0x00,0x00,
101126 -0x01,0x00,0x09,0x77,
101127 -0x78,0x0C,0x00,0x00,
101128 -0x01,0x00,0x0A,0x76,
101129 -0x78,0x0C,0x00,0x00,
101130 -0x01,0x00,0x0B,0x75,
101131 -0x78,0x0C,0x00,0x00,
101132 -0x01,0x00,0x0C,0x74,
101133 -0x78,0x0C,0x00,0x00,
101134 -0x01,0x00,0x0D,0x73,
101135 -0x78,0x0C,0x00,0x00,
101136 -0x01,0x00,0x0E,0x72,
101137 -0x78,0x0C,0x00,0x00,
101138 -0x01,0x00,0x0F,0x71,
101139 -0x78,0x0C,0x00,0x00,
101140 -0x01,0x00,0x10,0x70,
101141 -0x78,0x0C,0x00,0x00,
101142 -0x01,0x00,0x11,0x6F,
101143 -0x78,0x0C,0x00,0x00,
101144 -0x01,0x00,0x12,0x6F,
101145 -0x78,0x0C,0x00,0x00,
101146 -0x01,0x00,0x13,0x6E,
101147 -0x78,0x0C,0x00,0x00,
101148 -0x01,0x00,0x14,0x6D,
101149 -0x78,0x0C,0x00,0x00,
101150 -0x01,0x00,0x15,0x6D,
101151 -0x78,0x0C,0x00,0x00,
101152 -0x01,0x00,0x16,0x6C,
101153 -0x78,0x0C,0x00,0x00,
101154 -0x01,0x00,0x17,0x6B,
101155 -0x78,0x0C,0x00,0x00,
101156 -0x01,0x00,0x18,0x6A,
101157 -0x78,0x0C,0x00,0x00,
101158 -0x01,0x00,0x19,0x6A,
101159 -0x78,0x0C,0x00,0x00,
101160 -0x01,0x00,0x1A,0x69,
101161 -0x78,0x0C,0x00,0x00,
101162 -0x01,0x00,0x1B,0x68,
101163 -0x78,0x0C,0x00,0x00,
101164 -0x01,0x00,0x1C,0x67,
101165 -0x78,0x0C,0x00,0x00,
101166 -0x01,0x00,0x1D,0x66,
101167 -0x78,0x0C,0x00,0x00,
101168 -0x01,0x00,0x1E,0x65,
101169 -0x78,0x0C,0x00,0x00,
101170 -0x01,0x00,0x1F,0x64,
101171 -0x78,0x0C,0x00,0x00,
101172 -0x01,0x00,0x20,0x63,
101173 -0x78,0x0C,0x00,0x00,
101174 -0x01,0x00,0x21,0x4C,
101175 -0x78,0x0C,0x00,0x00,
101176 -0x01,0x00,0x22,0x4B,
101177 -0x78,0x0C,0x00,0x00,
101178 -0x01,0x00,0x23,0x4A,
101179 -0x78,0x0C,0x00,0x00,
101180 -0x01,0x00,0x24,0x49,
101181 -0x78,0x0C,0x00,0x00,
101182 -0x01,0x00,0x25,0x48,
101183 -0x78,0x0C,0x00,0x00,
101184 -0x01,0x00,0x26,0x47,
101185 -0x78,0x0C,0x00,0x00,
101186 -0x01,0x00,0x27,0x46,
101187 -0x78,0x0C,0x00,0x00,
101188 -0x01,0x00,0x28,0x45,
101189 -0x78,0x0C,0x00,0x00,
101190 -0x01,0x00,0x29,0x44,
101191 -0x78,0x0C,0x00,0x00,
101192 -0x01,0x00,0x2A,0x2C,
101193 -0x78,0x0C,0x00,0x00,
101194 -0x01,0x00,0x2B,0x2B,
101195 -0x78,0x0C,0x00,0x00,
101196 -0x01,0x00,0x2C,0x2A,
101197 -0x78,0x0C,0x00,0x00,
101198 -0x01,0x00,0x2D,0x29,
101199 -0x78,0x0C,0x00,0x00,
101200 -0x01,0x00,0x2E,0x28,
101201 -0x78,0x0C,0x00,0x00,
101202 -0x01,0x00,0x2F,0x27,
101203 -0x78,0x0C,0x00,0x00,
101204 -0x01,0x00,0x30,0x26,
101205 -0x78,0x0C,0x00,0x00,
101206 -0x01,0x00,0x31,0x25,
101207 -0x78,0x0C,0x00,0x00,
101208 -0x01,0x00,0x32,0x24,
101209 -0x78,0x0C,0x00,0x00,
101210 -0x01,0x00,0x33,0x23,
101211 -0x78,0x0C,0x00,0x00,
101212 -0x01,0x00,0x34,0x22,
101213 -0x78,0x0C,0x00,0x00,
101214 -0x01,0x00,0x35,0x09,
101215 -0x78,0x0C,0x00,0x00,
101216 -0x01,0x00,0x36,0x08,
101217 -0x78,0x0C,0x00,0x00,
101218 -0x01,0x00,0x37,0x07,
101219 -0x78,0x0C,0x00,0x00,
101220 -0x01,0x00,0x38,0x06,
101221 -0x78,0x0C,0x00,0x00,
101222 -0x01,0x00,0x39,0x05,
101223 -0x78,0x0C,0x00,0x00,
101224 -0x01,0x00,0x3A,0x04,
101225 -0x78,0x0C,0x00,0x00,
101226 -0x01,0x00,0x3B,0x03,
101227 -0x78,0x0C,0x00,0x00,
101228 -0x01,0x00,0x3C,0x02,
101229 -0x78,0x0C,0x00,0x00,
101230 -0x01,0x00,0x3D,0x01,
101231 -0x78,0x0C,0x00,0x00,
101232 -0x01,0x00,0x3E,0x00,
101233 -0x78,0x0C,0x00,0x00,
101234 -0x01,0x00,0x3F,0x00,
101235 -0x78,0x0C,0x00,0x00,
101236 -0x01,0x00,0x40,0x7F,
101237 -0x78,0x0C,0x00,0x00,
101238 -0x01,0x00,0x41,0x7F,
101239 -0x78,0x0C,0x00,0x00,
101240 -0x01,0x00,0x42,0x7E,
101241 -0x78,0x0C,0x00,0x00,
101242 -0x01,0x00,0x43,0x7D,
101243 -0x78,0x0C,0x00,0x00,
101244 -0x01,0x00,0x44,0x7C,
101245 -0x78,0x0C,0x00,0x00,
101246 -0x01,0x00,0x45,0x7B,
101247 -0x78,0x0C,0x00,0x00,
101248 -0x01,0x00,0x46,0x7A,
101249 -0x78,0x0C,0x00,0x00,
101250 -0x01,0x00,0x47,0x79,
101251 -0x78,0x0C,0x00,0x00,
101252 -0x01,0x00,0x48,0x78,
101253 -0x78,0x0C,0x00,0x00,
101254 -0x01,0x00,0x49,0x77,
101255 -0x78,0x0C,0x00,0x00,
101256 -0x01,0x00,0x4A,0x76,
101257 -0x78,0x0C,0x00,0x00,
101258 -0x01,0x00,0x4B,0x75,
101259 -0x78,0x0C,0x00,0x00,
101260 -0x01,0x00,0x4C,0x74,
101261 -0x78,0x0C,0x00,0x00,
101262 -0x01,0x00,0x4D,0x73,
101263 -0x78,0x0C,0x00,0x00,
101264 -0x01,0x00,0x4E,0x72,
101265 -0x78,0x0C,0x00,0x00,
101266 -0x01,0x00,0x4F,0x71,
101267 -0x78,0x0C,0x00,0x00,
101268 -0x01,0x00,0x50,0x70,
101269 -0x78,0x0C,0x00,0x00,
101270 -0x01,0x00,0x51,0x6F,
101271 -0x78,0x0C,0x00,0x00,
101272 -0x01,0x00,0x52,0x6F,
101273 -0x78,0x0C,0x00,0x00,
101274 -0x01,0x00,0x53,0x6E,
101275 -0x78,0x0C,0x00,0x00,
101276 -0x01,0x00,0x54,0x6D,
101277 -0x78,0x0C,0x00,0x00,
101278 -0x01,0x00,0x55,0x6D,
101279 -0x78,0x0C,0x00,0x00,
101280 -0x01,0x00,0x56,0x6C,
101281 -0x78,0x0C,0x00,0x00,
101282 -0x01,0x00,0x57,0x6B,
101283 -0x78,0x0C,0x00,0x00,
101284 -0x01,0x00,0x58,0x6A,
101285 -0x78,0x0C,0x00,0x00,
101286 -0x01,0x00,0x59,0x6A,
101287 -0x78,0x0C,0x00,0x00,
101288 -0x01,0x00,0x5A,0x69,
101289 -0x78,0x0C,0x00,0x00,
101290 -0x01,0x00,0x5B,0x68,
101291 -0x78,0x0C,0x00,0x00,
101292 -0x01,0x00,0x5C,0x67,
101293 -0x78,0x0C,0x00,0x00,
101294 -0x01,0x00,0x5D,0x66,
101295 -0x78,0x0C,0x00,0x00,
101296 -0x01,0x00,0x5E,0x65,
101297 -0x78,0x0C,0x00,0x00,
101298 -0x01,0x00,0x5F,0x64,
101299 -0x78,0x0C,0x00,0x00,
101300 -0x01,0x00,0x60,0x63,
101301 -0x78,0x0C,0x00,0x00,
101302 -0x01,0x00,0x61,0x4C,
101303 -0x78,0x0C,0x00,0x00,
101304 -0x01,0x00,0x62,0x4B,
101305 -0x78,0x0C,0x00,0x00,
101306 -0x01,0x00,0x63,0x4A,
101307 -0x78,0x0C,0x00,0x00,
101308 -0x01,0x00,0x64,0x49,
101309 -0x78,0x0C,0x00,0x00,
101310 -0x01,0x00,0x65,0x48,
101311 -0x78,0x0C,0x00,0x00,
101312 -0x01,0x00,0x66,0x47,
101313 -0x78,0x0C,0x00,0x00,
101314 -0x01,0x00,0x67,0x46,
101315 -0x78,0x0C,0x00,0x00,
101316 -0x01,0x00,0x68,0x45,
101317 -0x78,0x0C,0x00,0x00,
101318 -0x01,0x00,0x69,0x44,
101319 -0x78,0x0C,0x00,0x00,
101320 -0x01,0x00,0x6A,0x2C,
101321 -0x78,0x0C,0x00,0x00,
101322 -0x01,0x00,0x6B,0x2B,
101323 -0x78,0x0C,0x00,0x00,
101324 -0x01,0x00,0x6C,0x2A,
101325 -0x78,0x0C,0x00,0x00,
101326 -0x01,0x00,0x6D,0x29,
101327 -0x78,0x0C,0x00,0x00,
101328 -0x01,0x00,0x6E,0x28,
101329 -0x78,0x0C,0x00,0x00,
101330 -0x01,0x00,0x6F,0x27,
101331 -0x78,0x0C,0x00,0x00,
101332 -0x01,0x00,0x70,0x26,
101333 -0x78,0x0C,0x00,0x00,
101334 -0x01,0x00,0x71,0x25,
101335 -0x78,0x0C,0x00,0x00,
101336 -0x01,0x00,0x72,0x24,
101337 -0x78,0x0C,0x00,0x00,
101338 -0x01,0x00,0x73,0x23,
101339 -0x78,0x0C,0x00,0x00,
101340 -0x01,0x00,0x74,0x22,
101341 -0x78,0x0C,0x00,0x00,
101342 -0x01,0x00,0x75,0x09,
101343 -0x78,0x0C,0x00,0x00,
101344 -0x01,0x00,0x76,0x08,
101345 -0x78,0x0C,0x00,0x00,
101346 -0x01,0x00,0x77,0x07,
101347 -0x78,0x0C,0x00,0x00,
101348 -0x01,0x00,0x78,0x06,
101349 -0x78,0x0C,0x00,0x00,
101350 -0x01,0x00,0x79,0x05,
101351 -0x78,0x0C,0x00,0x00,
101352 -0x01,0x00,0x7A,0x04,
101353 -0x78,0x0C,0x00,0x00,
101354 -0x01,0x00,0x7B,0x03,
101355 -0x78,0x0C,0x00,0x00,
101356 -0x01,0x00,0x7C,0x02,
101357 -0x78,0x0C,0x00,0x00,
101358 -0x01,0x00,0x7D,0x01,
101359 -0x78,0x0C,0x00,0x00,
101360 -0x01,0x00,0x7E,0x00,
101361 -0x78,0x0C,0x00,0x00,
101362 -0x01,0x00,0x7F,0x00,
101363 -0x78,0x0C,0x00,0x00,
101364 -0x1E,0x00,0x00,0x30,
101365 -0x78,0x0C,0x00,0x00,
101366 -0x1E,0x00,0x01,0x30,
101367 -0x78,0x0C,0x00,0x00,
101368 -0x1E,0x00,0x02,0x30,
101369 -0x78,0x0C,0x00,0x00,
101370 -0x1E,0x00,0x03,0x30,
101371 -0x78,0x0C,0x00,0x00,
101372 -0x1E,0x00,0x04,0x30,
101373 -0x78,0x0C,0x00,0x00,
101374 -0x1E,0x00,0x05,0x34,
101375 -0x78,0x0C,0x00,0x00,
101376 -0x1E,0x00,0x06,0x38,
101377 -0x78,0x0C,0x00,0x00,
101378 -0x1E,0x00,0x07,0x3E,
101379 -0x78,0x0C,0x00,0x00,
101380 -0x1E,0x00,0x08,0x3E,
101381 -0x78,0x0C,0x00,0x00,
101382 -0x1E,0x00,0x09,0x44,
101383 -0x78,0x0C,0x00,0x00,
101384 -0x1E,0x00,0x0A,0x46,
101385 -0x78,0x0C,0x00,0x00,
101386 -0x1E,0x00,0x0B,0x48,
101387 -0x78,0x0C,0x00,0x00,
101388 -0x1E,0x00,0x0C,0x48,
101389 -0x78,0x0C,0x00,0x00,
101390 -0x1E,0x00,0x0D,0x4E,
101391 -0x78,0x0C,0x00,0x00,
101392 -0x1E,0x00,0x0E,0x56,
101393 -0x78,0x0C,0x00,0x00,
101394 -0x1E,0x00,0x0F,0x5A,
101395 -0x78,0x0C,0x00,0x00,
101396 -0x1E,0x00,0x10,0x5E,
101397 -0x78,0x0C,0x00,0x00,
101398 -0x1E,0x00,0x11,0x62,
101399 -0x78,0x0C,0x00,0x00,
101400 -0x1E,0x00,0x12,0x6C,
101401 -0x78,0x0C,0x00,0x00,
101402 -0x1E,0x00,0x13,0x72,
101403 -0x78,0x0C,0x00,0x00,
101404 -0x1E,0x00,0x14,0x72,
101405 -0x78,0x0C,0x00,0x00,
101406 -0x1E,0x00,0x15,0x72,
101407 -0x78,0x0C,0x00,0x00,
101408 -0x1E,0x00,0x16,0x72,
101409 -0x78,0x0C,0x00,0x00,
101410 -0x1E,0x00,0x17,0x72,
101411 -0x78,0x0C,0x00,0x00,
101412 -0x1E,0x00,0x18,0x72,
101413 -0x78,0x0C,0x00,0x00,
101414 -0x1E,0x00,0x19,0x72,
101415 -0x78,0x0C,0x00,0x00,
101416 -0x1E,0x00,0x1A,0x72,
101417 -0x78,0x0C,0x00,0x00,
101418 -0x1E,0x00,0x1B,0x72,
101419 -0x78,0x0C,0x00,0x00,
101420 -0x1E,0x00,0x1C,0x72,
101421 -0x78,0x0C,0x00,0x00,
101422 -0x1E,0x00,0x1D,0x72,
101423 -0x78,0x0C,0x00,0x00,
101424 -0x1E,0x00,0x1E,0x72,
101425 -0x78,0x0C,0x00,0x00,
101426 -0x1E,0x00,0x1F,0x72,
101427 -0x00,0x0E,0x00,0x00,
101428 -0xFF,0xFF,0xFF,0xFF,
101429 -0x06,0x06,0x06,0x04,
101430 -0x04,0x0E,0x00,0x00,
101431 -0xFF,0xFF,0xFF,0xFF,
101432 -0x04,0x02,0x02,0x00,
101433 -0x08,0x0E,0x00,0x00,
101434 -0x00,0xFF,0x00,0x00,
101435 -0x00,0x00,0x00,0x00,
101436 -0x10,0x0E,0x00,0x00,
101437 -0xFF,0xFF,0xFF,0xFF,
101438 -0x0A,0x08,0x08,0x04,
101439 -0x14,0x0E,0x00,0x00,
101440 -0xFF,0xFF,0xFF,0xFF,
101441 -0x04,0x02,0x02,0x00,
101442 -0x18,0x0E,0x00,0x00,
101443 -0xFF,0xFF,0xFF,0xFF,
101444 -0x0A,0x08,0x08,0x04,
101445 -0x1C,0x0E,0x00,0x00,
101446 -0xFF,0xFF,0xFF,0xFF,
101447 -0x04,0x02,0x02,0x00,
101448 -0x00,0x0E,0x00,0x00,
101449 -0xFF,0xFF,0xFF,0xFF,
101450 -0x00,0x00,0x00,0x00,
101451 -0x04,0x0E,0x00,0x00,
101452 -0xFF,0xFF,0xFF,0xFF,
101453 -0x00,0x00,0x00,0x00,
101454 -0x08,0x0E,0x00,0x00,
101455 -0x00,0xFF,0x00,0x00,
101456 -0x00,0x00,0x00,0x00,
101457 -0x10,0x0E,0x00,0x00,
101458 -0xFF,0xFF,0xFF,0xFF,
101459 -0x00,0x00,0x00,0x00,
101460 -0x14,0x0E,0x00,0x00,
101461 -0xFF,0xFF,0xFF,0xFF,
101462 -0x00,0x00,0x00,0x00,
101463 -0x18,0x0E,0x00,0x00,
101464 -0xFF,0xFF,0xFF,0xFF,
101465 -0x00,0x00,0x00,0x00,
101466 -0x1C,0x0E,0x00,0x00,
101467 -0xFF,0xFF,0xFF,0xFF,
101468 -0x00,0x00,0x00,0x00,
101469 -0x00,0x0E,0x00,0x00,
101470 -0xFF,0xFF,0xFF,0xFF,
101471 -0x00,0x00,0x00,0x00,
101472 -0x04,0x0E,0x00,0x00,
101473 -0xFF,0xFF,0xFF,0xFF,
101474 -0x00,0x00,0x00,0x00,
101475 -0x08,0x0E,0x00,0x00,
101476 -0x00,0xFF,0x00,0x00,
101477 -0x00,0x00,0x00,0x00,
101478 -0x10,0x0E,0x00,0x00,
101479 -0xFF,0xFF,0xFF,0xFF,
101480 -0x00,0x00,0x00,0x00,
101481 -0x14,0x0E,0x00,0x00,
101482 -0xFF,0xFF,0xFF,0xFF,
101483 -0x00,0x00,0x00,0x00,
101484 -0x18,0x0E,0x00,0x00,
101485 -0xFF,0xFF,0xFF,0xFF,
101486 -0x00,0x00,0x00,0x00,
101487 -0x1C,0x0E,0x00,0x00,
101488 -0xFF,0xFF,0xFF,0xFF,
101489 -0x00,0x00,0x00,0x00,
101490 -0x00,0x0E,0x00,0x00,
101491 -0xFF,0xFF,0xFF,0xFF,
101492 -0x00,0x00,0x00,0x00,
101493 -0x04,0x0E,0x00,0x00,
101494 -0xFF,0xFF,0xFF,0xFF,
101495 -0x00,0x00,0x00,0x00,
101496 -0x08,0x0E,0x00,0x00,
101497 -0x00,0xFF,0x00,0x00,
101498 -0x00,0x00,0x00,0x00,
101499 -0x10,0x0E,0x00,0x00,
101500 -0xFF,0xFF,0xFF,0xFF,
101501 -0x00,0x00,0x00,0x00,
101502 -0x14,0x0E,0x00,0x00,
101503 -0xFF,0xFF,0xFF,0xFF,
101504 -0x00,0x00,0x00,0x00,
101505 -0x18,0x0E,0x00,0x00,
101506 -0xFF,0xFF,0xFF,0xFF,
101507 -0x00,0x00,0x00,0x00,
101508 -0x1C,0x0E,0x00,0x00,
101509 -0xFF,0xFF,0xFF,0xFF,
101510 -0x00,0x00,0x00,0x00,
101511 -0x04,0x08,0x00,0x00,
101512 -0x0F,0x00,0x00,0x00,
101513 -0x03,0x00,0x00,0x00,
101514 -0x24,0x08,0x00,0x00,
101515 -0x0F,0x00,0xF0,0x00,
101516 -0x04,0x00,0x30,0x00,
101517 -0x2C,0x08,0x00,0x00,
101518 -0x0F,0x00,0xF0,0x00,
101519 -0x04,0x00,0x30,0x00,
101520 -0x70,0x08,0x00,0x00,
101521 -0x00,0x00,0x00,0x04,
101522 -0x01,0x00,0x00,0x00,
101523 -0x64,0x08,0x00,0x00,
101524 -0x00,0x04,0x00,0x00,
101525 -0x01,0x00,0x00,0x00,
101526 -0x78,0x08,0x00,0x00,
101527 -0x0F,0x00,0x0F,0x00,
101528 -0x02,0x00,0x02,0x00,
101529 -0x74,0x0E,0x00,0x00,
101530 -0x00,0x00,0x00,0x0F,
101531 -0x06,0x00,0x00,0x00,
101532 -0x78,0x0E,0x00,0x00,
101533 -0x00,0x00,0x00,0x0F,
101534 -0x06,0x00,0x00,0x00,
101535 -0x7C,0x0E,0x00,0x00,
101536 -0x00,0x00,0x00,0x0F,
101537 -0x06,0x00,0x00,0x00,
101538 -0x80,0x0E,0x00,0x00,
101539 -0x00,0x00,0x00,0x0F,
101540 -0x06,0x00,0x00,0x00,
101541 -0x0C,0x09,0x00,0x00,
101542 -0xFF,0x00,0x00,0x00,
101543 -0x33,0x00,0x00,0x00,
101544 -0x04,0x0C,0x00,0x00,
101545 -0xFF,0x00,0x00,0x00,
101546 -0x33,0x00,0x00,0x00,
101547 -0x04,0x0D,0x00,0x00,
101548 -0x0F,0x00,0x00,0x00,
101549 -0x03,0x00,0x00,0x00,
101550 -0xF4,0x01,0x00,0x00,
101551 -0x00,0x00,0xFF,0xFF,
101552 -0xFF,0xFF,0x00,0x00,
101553 -0x34,0x02,0x00,0x00,
101554 -0x00,0x00,0x00,0xF8,
101555 -0x13,0x00,0x00,0x00,
101556 -0x04,0x08,0x00,0x00,
101557 -0x0F,0x00,0x00,0x00,
101558 -0x03,0x00,0x00,0x00,
101559 -0x24,0x08,0x00,0x00,
101560 -0x0F,0x00,0xF0,0x00,
101561 -0x04,0x00,0x30,0x00,
101562 -0x2C,0x08,0x00,0x00,
101563 -0x0F,0x00,0xF0,0x00,
101564 -0x02,0x00,0x30,0x00,
101565 -0x70,0x08,0x00,0x00,
101566 -0x00,0x00,0x00,0x04,
101567 -0x01,0x00,0x00,0x00,
101568 -0x64,0x08,0x00,0x00,
101569 -0x00,0x04,0x00,0x00,
101570 -0x00,0x00,0x00,0x00,
101571 -0x78,0x08,0x00,0x00,
101572 -0x0F,0x00,0x0F,0x00,
101573 -0x02,0x00,0x00,0x00,
101574 -0x74,0x0E,0x00,0x00,
101575 -0x00,0x00,0x00,0x0F,
101576 -0x02,0x00,0x00,0x00,
101577 -0x78,0x0E,0x00,0x00,
101578 -0x00,0x00,0x00,0x0F,
101579 -0x02,0x00,0x00,0x00,
101580 -0x7C,0x0E,0x00,0x00,
101581 -0x00,0x00,0x00,0x0F,
101582 -0x02,0x00,0x00,0x00,
101583 -0x80,0x0E,0x00,0x00,
101584 -0x00,0x00,0x00,0x0F,
101585 -0x02,0x00,0x00,0x00,
101586 -0x0C,0x09,0x00,0x00,
101587 -0xFF,0x00,0x00,0x00,
101588 -0x11,0x00,0x00,0x00,
101589 -0x04,0x0C,0x00,0x00,
101590 -0xFF,0x00,0x00,0x00,
101591 -0x33,0x00,0x00,0x00,
101592 -0x04,0x0D,0x00,0x00,
101593 -0x0F,0x00,0x00,0x00,
101594 -0x03,0x00,0x00,0x00,
101595 -0xF4,0x01,0x00,0x00,
101596 -0x00,0x00,0xFF,0xFF,
101597 -0x77,0x77,0x00,0x00,
101598 -0x34,0x02,0x00,0x00,
101599 -0x00,0x00,0x00,0xF8,
101600 -0x0A,0x00,0x00,0x00,
101601 -0x44,0x08,0x00,0x00,
101602 -0xFF,0xFF,0xFF,0xFF,
101603 -0x00,0x00,0x01,0x00,
101604 -0x04,0x08,0x00,0x00,
101605 -0x0F,0x00,0x00,0x00,
101606 -0x01,0x00,0x00,0x00,
101607 -0x24,0x08,0x00,0x00,
101608 -0x0F,0x00,0xF0,0x00,
101609 -0x04,0x00,0x30,0x00,
101610 -0x2C,0x08,0x00,0x00,
101611 -0x0F,0x00,0xF0,0x00,
101612 -0x02,0x00,0x10,0x00,
101613 -0x70,0x08,0x00,0x00,
101614 -0x00,0x00,0x00,0x04,
101615 -0x01,0x00,0x00,0x00,
101616 -0x64,0x08,0x00,0x00,
101617 -0x00,0x04,0x00,0x00,
101618 -0x00,0x00,0x00,0x00,
101619 -0x78,0x08,0x00,0x00,
101620 -0x0F,0x00,0x0F,0x00,
101621 -0x02,0x00,0x00,0x00,
101622 -0x74,0x0E,0x00,0x00,
101623 -0x00,0x00,0x00,0x0F,
101624 -0x02,0x00,0x00,0x00,
101625 -0x78,0x0E,0x00,0x00,
101626 -0x00,0x00,0x00,0x0F,
101627 -0x02,0x00,0x00,0x00,
101628 -0x7C,0x0E,0x00,0x00,
101629 -0x00,0x00,0x00,0x0F,
101630 -0x02,0x00,0x00,0x00,
101631 -0x80,0x0E,0x00,0x00,
101632 -0x00,0x00,0x00,0x0F,
101633 -0x02,0x00,0x00,0x00,
101634 -0x0C,0x09,0x00,0x00,
101635 -0xFF,0x00,0x00,0x00,
101636 -0x11,0x00,0x00,0x00,
101637 -0x04,0x0C,0x00,0x00,
101638 -0xFF,0x00,0x00,0x00,
101639 -0x11,0x00,0x00,0x00,
101640 -0x04,0x0D,0x00,0x00,
101641 -0x0F,0x00,0x00,0x00,
101642 -0x01,0x00,0x00,0x00,
101643 -0xF4,0x01,0x00,0x00,
101644 -0x00,0x00,0xFF,0xFF,
101645 -0x77,0x77,0x00,0x00,
101646 -0x34,0x02,0x00,0x00,
101647 -0x00,0x00,0x00,0xF8,
101648 -0x0A,0x00,0x00,0x00,
101649 -0x1C,0x00,0x00,0x00,
101650 -0x00,0x00,0x00,0x07,
101651 -0x00,0x08,0x00,0x00,
101652 -0x00,0x00,0x04,0x00,
101653 -0x04,0x08,0x00,0x00,
101654 -0x03,0x80,0x00,0x00,
101655 -0x08,0x08,0x00,0x00,
101656 -0x00,0xFC,0x00,0x00,
101657 -0x0C,0x08,0x00,0x00,
101658 -0x0A,0x00,0x00,0x00,
101659 -0x10,0x08,0x00,0x00,
101660 -0x88,0x50,0x00,0x10,
101661 -0x14,0x08,0x00,0x00,
101662 -0x10,0x3D,0x0C,0x02,
101663 -0x18,0x08,0x00,0x00,
101664 -0x85,0x01,0x20,0x00,
101665 -0x1C,0x08,0x00,0x00,
101666 -0x00,0x00,0x00,0x00,
101667 -0x20,0x08,0x00,0x00,
101668 -0x00,0x00,0x00,0x01,
101669 -0x24,0x08,0x00,0x00,
101670 -0x04,0x00,0x39,0x00,
101671 -0x28,0x08,0x00,0x00,
101672 -0x00,0x00,0x00,0x01,
101673 -0x2C,0x08,0x00,0x00,
101674 -0x04,0x00,0x39,0x00,
101675 -0x30,0x08,0x00,0x00,
101676 -0x04,0x00,0x00,0x00,
101677 -0x34,0x08,0x00,0x00,
101678 -0x00,0x02,0x69,0x00,
101679 -0x38,0x08,0x00,0x00,
101680 -0x04,0x00,0x00,0x00,
101681 -0x3C,0x08,0x00,0x00,
101682 -0x00,0x02,0x69,0x00,
101683 -0x40,0x08,0x00,0x00,
101684 -0x00,0x00,0x01,0x00,
101685 -0x44,0x08,0x00,0x00,
101686 -0x00,0x00,0x01,0x00,
101687 -0x48,0x08,0x00,0x00,
101688 -0x00,0x00,0x00,0x00,
101689 -0x4C,0x08,0x00,0x00,
101690 -0x00,0x00,0x00,0x00,
101691 -0x50,0x08,0x00,0x00,
101692 -0x00,0x00,0x00,0x00,
101693 -0x54,0x08,0x00,0x00,
101694 -0x00,0x00,0x00,0x00,
101695 -0x58,0x08,0x00,0x00,
101696 -0x48,0x48,0x48,0x48,
101697 -0x5C,0x08,0x00,0x00,
101698 -0xA9,0x65,0xA9,0x65,
101699 -0x60,0x08,0x00,0x00,
101700 -0x30,0x01,0x7F,0x0F,
101701 -0x64,0x08,0x00,0x00,
101702 -0x30,0x01,0x7F,0x0F,
101703 -0x68,0x08,0x00,0x00,
101704 -0x30,0x01,0x7F,0x0F,
101705 -0x6C,0x08,0x00,0x00,
101706 -0x30,0x01,0x7F,0x0F,
101707 -0x70,0x08,0x00,0x00,
101708 -0x00,0x07,0x00,0x03,
101709 -0x74,0x08,0x00,0x00,
101710 -0x00,0x03,0x00,0x03,
101711 -0x78,0x08,0x00,0x00,
101712 -0x02,0x00,0x02,0x00,
101713 -0x7C,0x08,0x00,0x00,
101714 -0x01,0x02,0x4F,0x00,
101715 -0x80,0x08,0x00,0x00,
101716 -0xC1,0x0A,0x30,0xA8,
101717 -0x84,0x08,0x00,0x00,
101718 -0x58,0x00,0x00,0x00,
101719 -0x88,0x08,0x00,0x00,
101720 -0x08,0x00,0x00,0x00,
101721 -0x8C,0x08,0x00,0x00,
101722 -0x04,0x00,0x00,0x00,
101723 -0x90,0x08,0x00,0x00,
101724 -0x00,0x00,0x00,0x00,
101725 -0x94,0x08,0x00,0x00,
101726 -0xFE,0xFF,0xFF,0xFF,
101727 -0x98,0x08,0x00,0x00,
101728 -0x10,0x20,0x30,0x40,
101729 -0x9C,0x08,0x00,0x00,
101730 -0x50,0x60,0x70,0x00,
101731 -0xB0,0x08,0x00,0x00,
101732 -0x00,0x00,0x00,0x00,
101733 -0xE0,0x08,0x00,0x00,
101734 -0x00,0x00,0x00,0x00,
101735 -0xE4,0x08,0x00,0x00,
101736 -0x00,0x00,0x00,0x00,
101737 -0x00,0x0E,0x00,0x00,
101738 -0x33,0x33,0x33,0x30,
101739 -0x04,0x0E,0x00,0x00,
101740 -0x2F,0x2E,0x2D,0x2A,
101741 -0x08,0x0E,0x00,0x00,
101742 -0x32,0x32,0x00,0x00,
101743 -0x10,0x0E,0x00,0x00,
101744 -0x33,0x33,0x33,0x30,
101745 -0x14,0x0E,0x00,0x00,
101746 -0x2F,0x2E,0x2D,0x2A,
101747 -0x18,0x0E,0x00,0x00,
101748 -0x33,0x33,0x33,0x30,
101749 -0x1C,0x0E,0x00,0x00,
101750 -0x2F,0x2E,0x2D,0x2A,
101751 -0x30,0x0E,0x00,0x00,
101752 -0x00,0x7C,0x00,0x01,
101753 -0x34,0x0E,0x00,0x00,
101754 -0x00,0x48,0x00,0x01,
101755 -0x38,0x0E,0x00,0x00,
101756 -0x1F,0xDC,0x00,0x10,
101757 -0x3C,0x0E,0x00,0x00,
101758 -0x1F,0x8C,0x00,0x10,
101759 -0x40,0x0E,0x00,0x00,
101760 -0xA0,0x00,0x14,0x02,
101761 -0x44,0x0E,0x00,0x00,
101762 -0xA0,0x00,0x16,0x28,
101763 -0x48,0x0E,0x00,0x00,
101764 -0x01,0x00,0x00,0xF8,
101765 -0x4C,0x0E,0x00,0x00,
101766 -0x10,0x29,0x00,0x00,
101767 -0x50,0x0E,0x00,0x00,
101768 -0x00,0x7C,0x00,0x01,
101769 -0x54,0x0E,0x00,0x00,
101770 -0x00,0x48,0x00,0x01,
101771 -0x58,0x0E,0x00,0x00,
101772 -0x1F,0xDC,0x00,0x10,
101773 -0x5C,0x0E,0x00,0x00,
101774 -0x1F,0x8C,0x00,0x10,
101775 -0x60,0x0E,0x00,0x00,
101776 -0xA0,0x00,0x14,0x02,
101777 -0x64,0x0E,0x00,0x00,
101778 -0xA0,0x00,0x16,0x28,
101779 -0x6C,0x0E,0x00,0x00,
101780 -0x10,0x29,0x00,0x00,
101781 -0x70,0x0E,0x00,0x00,
101782 -0xFB,0x92,0xED,0x31,
101783 -0x74,0x0E,0x00,0x00,
101784 -0xFB,0x36,0x15,0x36,
101785 -0x78,0x0E,0x00,0x00,
101786 -0xFB,0x36,0x15,0x36,
101787 -0x7C,0x0E,0x00,0x00,
101788 -0xFB,0x36,0x15,0x36,
101789 -0x80,0x0E,0x00,0x00,
101790 -0xFB,0x36,0x15,0x36,
101791 -0x84,0x0E,0x00,0x00,
101792 -0xFB,0x92,0x0D,0x00,
101793 -0x88,0x0E,0x00,0x00,
101794 -0xFB,0x92,0x0D,0x00,
101795 -0x8C,0x0E,0x00,0x00,
101796 -0xFB,0x92,0xED,0x31,
101797 -0xD0,0x0E,0x00,0x00,
101798 -0xFB,0x92,0xED,0x31,
101799 -0xD4,0x0E,0x00,0x00,
101800 -0xFB,0x92,0xED,0x31,
101801 -0xD8,0x0E,0x00,0x00,
101802 -0xFB,0x92,0x0D,0x00,
101803 -0xDC,0x0E,0x00,0x00,
101804 -0xFB,0x92,0x0D,0x00,
101805 -0xE0,0x0E,0x00,0x00,
101806 -0xFB,0x92,0x0D,0x00,
101807 -0xE4,0x0E,0x00,0x00,
101808 -0x48,0x54,0x5E,0x01,
101809 -0xE8,0x0E,0x00,0x00,
101810 -0x48,0x54,0x55,0x21,
101811 -0x00,0x09,0x00,0x00,
101812 -0x00,0x00,0x00,0x00,
101813 -0x04,0x09,0x00,0x00,
101814 -0x23,0x00,0x00,0x00,
101815 -0x08,0x09,0x00,0x00,
101816 -0x00,0x00,0x00,0x00,
101817 -0x0C,0x09,0x00,0x00,
101818 -0x13,0x13,0x12,0x01,
101819 -0x00,0x0A,0x00,0x00,
101820 -0xC8,0x47,0xD0,0x00,
101821 -0x04,0x0A,0x00,0x00,
101822 -0x08,0x00,0xFF,0x80,
101823 -0x08,0x0A,0x00,0x00,
101824 -0x00,0x83,0xCD,0x88,
101825 -0x0C,0x0A,0x00,0x00,
101826 -0x0F,0x12,0x62,0x2E,
101827 -0x10,0x0A,0x00,0x00,
101828 -0x78,0xBB,0x00,0x95,
101829 -0x14,0x0A,0x00,0x00,
101830 -0x28,0x40,0x14,0x11,
101831 -0x18,0x0A,0x00,0x00,
101832 -0x17,0x11,0x88,0x00,
101833 -0x1C,0x0A,0x00,0x00,
101834 -0x00,0x0F,0x14,0x89,
101835 -0x20,0x0A,0x00,0x00,
101836 -0x00,0x00,0x1B,0x1A,
101837 -0x24,0x0A,0x00,0x00,
101838 -0x17,0x13,0x0E,0x09,
101839 -0x28,0x0A,0x00,0x00,
101840 -0x04,0x02,0x00,0x00,
101841 -0x2C,0x0A,0x00,0x00,
101842 -0x00,0x00,0xD3,0x10,
101843 -0x00,0x0C,0x00,0x00,
101844 -0x40,0x1D,0x07,0x40,
101845 -0x04,0x0C,0x00,0x00,
101846 -0x33,0x56,0xA0,0x00,
101847 -0x08,0x0C,0x00,0x00,
101848 -0xE4,0x00,0x00,0x00,
101849 -0x0C,0x0C,0x00,0x00,
101850 -0x6C,0x6C,0x6C,0x6C,
101851 -0x10,0x0C,0x00,0x00,
101852 -0x00,0x00,0x80,0x08,
101853 -0x14,0x0C,0x00,0x00,
101854 -0x00,0x01,0x00,0x40,
101855 -0x18,0x0C,0x00,0x00,
101856 -0x00,0x00,0x00,0x08,
101857 -0x1C,0x0C,0x00,0x00,
101858 -0x00,0x01,0x00,0x40,
101859 -0x20,0x0C,0x00,0x00,
101860 -0x00,0x00,0x00,0x08,
101861 -0x24,0x0C,0x00,0x00,
101862 -0x00,0x01,0x00,0x40,
101863 -0x28,0x0C,0x00,0x00,
101864 -0x00,0x00,0x00,0x08,
101865 -0x2C,0x0C,0x00,0x00,
101866 -0x00,0x01,0x00,0x40,
101867 -0x30,0x0C,0x00,0x00,
101868 -0x44,0xAC,0xE9,0x6D,
101869 -0x34,0x0C,0x00,0x00,
101870 -0xCF,0x52,0x96,0x46,
101871 -0x38,0x0C,0x00,0x00,
101872 -0x94,0x59,0x79,0x49,
101873 -0x3C,0x0C,0x00,0x00,
101874 -0x64,0x97,0x97,0x0A,
101875 -0x40,0x0C,0x00,0x00,
101876 -0x3F,0x40,0x7C,0x1F,
101877 -0x44,0x0C,0x00,0x00,
101878 -0xB7,0x00,0x01,0x00,
101879 -0x48,0x0C,0x00,0x00,
101880 -0x00,0x00,0x02,0xEC,
101881 -0x4C,0x0C,0x00,0x00,
101882 -0x7F,0x03,0x7F,0x00,
101883 -0x50,0x0C,0x00,0x00,
101884 -0x20,0x34,0x54,0x69,
101885 -0x54,0x0C,0x00,0x00,
101886 -0x94,0x00,0x3C,0x43,
101887 -0x58,0x0C,0x00,0x00,
101888 -0x20,0x34,0x54,0x69,
101889 -0x5C,0x0C,0x00,0x00,
101890 -0x94,0x00,0x3C,0x43,
101891 -0x60,0x0C,0x00,0x00,
101892 -0x20,0x34,0x54,0x69,
101893 -0x64,0x0C,0x00,0x00,
101894 -0x94,0x00,0x3C,0x43,
101895 -0x68,0x0C,0x00,0x00,
101896 -0x20,0x34,0x54,0x69,
101897 -0x6C,0x0C,0x00,0x00,
101898 -0x94,0x00,0x3C,0x43,
101899 -0x70,0x0C,0x00,0x00,
101900 -0x0D,0x00,0x7F,0x2C,
101901 -0x74,0x0C,0x00,0x00,
101902 -0x5B,0x17,0x86,0x01,
101903 -0x78,0x0C,0x00,0x00,
101904 -0x1F,0x00,0x00,0x00,
101905 -0x7C,0x0C,0x00,0x00,
101906 -0x12,0x16,0xB9,0x00,
101907 -0x80,0x0C,0x00,0x00,
101908 -0x00,0x01,0x00,0x40,
101909 -0x84,0x0C,0x00,0x00,
101910 -0x00,0x00,0xF6,0x20,
101911 -0x88,0x0C,0x00,0x00,
101912 -0x80,0x00,0x00,0x20,
101913 -0x8C,0x0C,0x00,0x00,
101914 -0x00,0x00,0x20,0x20,
101915 -0x90,0x0C,0x00,0x00,
101916 -0x00,0x01,0x00,0x40,
101917 -0x94,0x0C,0x00,0x00,
101918 -0x00,0x00,0x00,0x00,
101919 -0x98,0x0C,0x00,0x00,
101920 -0x00,0x01,0x00,0x40,
101921 -0x9C,0x0C,0x00,0x00,
101922 -0x00,0x00,0x00,0x00,
101923 -0xA0,0x0C,0x00,0x00,
101924 -0x92,0x24,0x49,0x00,
101925 -0xA4,0x0C,0x00,0x00,
101926 -0x00,0x00,0x00,0x00,
101927 -0xA8,0x0C,0x00,0x00,
101928 -0x00,0x00,0x00,0x00,
101929 -0xAC,0x0C,0x00,0x00,
101930 -0x00,0x00,0x00,0x00,
101931 -0xB0,0x0C,0x00,0x00,
101932 -0x00,0x00,0x00,0x00,
101933 -0xB4,0x0C,0x00,0x00,
101934 -0x00,0x00,0x00,0x00,
101935 -0xB8,0x0C,0x00,0x00,
101936 -0x00,0x00,0x00,0x00,
101937 -0xBC,0x0C,0x00,0x00,
101938 -0x00,0x00,0x00,0x28,
101939 -0xC0,0x0C,0x00,0x00,
101940 -0x00,0x00,0x00,0x00,
101941 -0xC4,0x0C,0x00,0x00,
101942 -0x00,0x00,0x00,0x00,
101943 -0xC8,0x0C,0x00,0x00,
101944 -0x00,0x00,0x00,0x00,
101945 -0xCC,0x0C,0x00,0x00,
101946 -0x00,0x00,0x00,0x00,
101947 -0xD0,0x0C,0x00,0x00,
101948 -0x00,0x00,0x00,0x00,
101949 -0xD4,0x0C,0x00,0x00,
101950 -0x00,0x00,0x00,0x00,
101951 -0xD8,0x0C,0x00,0x00,
101952 -0x27,0x24,0xB2,0x64,
101953 -0xDC,0x0C,0x00,0x00,
101954 -0x32,0x69,0x76,0x00,
101955 -0xE0,0x0C,0x00,0x00,
101956 -0x22,0x22,0x22,0x00,
101957 -0xE4,0x0C,0x00,0x00,
101958 -0x00,0x00,0x00,0x00,
101959 -0xE8,0x0C,0x00,0x00,
101960 -0x02,0x43,0x64,0x37,
101961 -0xEC,0x0C,0x00,0x00,
101962 -0x0C,0xD4,0x97,0x2F,
101963 -0x00,0x0D,0x00,0x00,
101964 -0x50,0x07,0x00,0x00,
101965 -0x04,0x0D,0x00,0x00,
101966 -0x03,0x04,0x00,0x00,
101967 -0x08,0x0D,0x00,0x00,
101968 -0x7F,0x90,0x00,0x00,
101969 -0x0C,0x0D,0x00,0x00,
101970 -0x01,0x00,0x00,0x00,
101971 -0x10,0x0D,0x00,0x00,
101972 -0x33,0x33,0x63,0xA0,
101973 -0x14,0x0D,0x00,0x00,
101974 -0x63,0x3C,0x33,0x33,
101975 -0x18,0x0D,0x00,0x00,
101976 -0x6B,0x5B,0x8F,0x6A,
101977 -0x1C,0x0D,0x00,0x00,
101978 -0x00,0x00,0x00,0x00,
101979 -0x20,0x0D,0x00,0x00,
101980 -0x00,0x00,0x00,0x00,
101981 -0x24,0x0D,0x00,0x00,
101982 -0x00,0x00,0x00,0x00,
101983 -0x28,0x0D,0x00,0x00,
101984 -0x00,0x00,0x00,0x00,
101985 -0x2C,0x0D,0x00,0x00,
101986 -0x75,0x99,0x97,0xCC,
101987 -0x30,0x0D,0x00,0x00,
101988 -0x00,0x00,0x00,0x00,
101989 -0x34,0x0D,0x00,0x00,
101990 -0x00,0x00,0x00,0x00,
101991 -0x38,0x0D,0x00,0x00,
101992 -0x00,0x00,0x00,0x00,
101993 -0x3C,0x0D,0x00,0x00,
101994 -0x93,0x72,0x02,0x00,
101995 -0x40,0x0D,0x00,0x00,
101996 -0x00,0x00,0x00,0x00,
101997 -0x44,0x0D,0x00,0x00,
101998 -0x00,0x00,0x00,0x00,
101999 -0x48,0x0D,0x00,0x00,
102000 -0x00,0x00,0x00,0x00,
102001 -0x50,0x0D,0x00,0x00,
102002 -0x0A,0x14,0x37,0x64,
102003 -0x54,0x0D,0x00,0x00,
102004 -0x02,0xBD,0x4D,0x02,
102005 -0x58,0x0D,0x00,0x00,
102006 -0x00,0x00,0x00,0x00,
102007 -0x5C,0x0D,0x00,0x00,
102008 -0x64,0x20,0x03,0x30,
102009 -0x60,0x0D,0x00,0x00,
102010 -0x68,0xDE,0x53,0x46,
102011 -0x64,0x0D,0x00,0x00,
102012 -0x3C,0x8A,0x51,0x00,
102013 -0x68,0x0D,0x00,0x00,
102014 -0x01,0x21,0x00,0x00,
102015 -0x14,0x0F,0x00,0x00,
102016 -0x03,0x00,0x00,0x00,
102017 -0x4C,0x0F,0x00,0x00,
102018 -0x00,0x00,0x00,0x00,
102019 -0x00,0x0F,0x00,0x00,
102020 -0x00,0x03,0x00,0x00,
102021 -0x40,0x01,0x00,0x00,
102022 -0x04,0x00,0x00,0x00,
102023 -0xFF,0x00,0x00,0x00,
102024 -0x10,0x00,0x00,0x00,
102025 -0x0C,0x02,0x01,0x80,
102026 -0x10,0x00,0x00,0x00,
102027 -0x3C,0x02,0x01,0x80,
102028 -0x10,0x00,0x00,0x00,
102029 -0x2C,0x08,0x01,0x80,
102030 -0x10,0x00,0x00,0x00,
102031 -0x34,0x08,0x01,0x80,
102032 -0x10,0x00,0x00,0x00,
102033 -0x3C,0x08,0x01,0x80,
102034 -0x10,0x00,0x00,0x00,
102035 -0x44,0x08,0x01,0x80,
102036 -0x10,0x00,0x00,0x00,
102037 -0x1C,0x08,0x01,0x80,
102038 -0x10,0x00,0x00,0x00,
102039 -0x24,0x08,0x01,0x80,
102040 -0x10,0x00,0x00,0x00,
102041 -0x7C,0x08,0x01,0x80,
102042 -0x10,0x00,0x00,0x00,
102043 -0x84,0x08,0x01,0x80,
102044 -0x10,0x00,0x00,0x00,
102045 -0xE0,0x03,0x01,0x80,
102046 -0x10,0x00,0x00,0x00,
102047 -0xD8,0x03,0x01,0x80,
102048 -0x10,0x00,0x00,0x00,
102049 -0x8C,0x08,0x01,0x80,
102050 -0x10,0x00,0x00,0x00,
102051 -0x94,0x08,0x01,0x80,
102052 -0xDC,0x01,0x00,0x00,
102053 -0x54,0x25,0x00,0x80,
102054 -0x04,0x00,0x00,0x00,
102055 -0x10,0x06,0x01,0x80,
102056 -0xDC,0x01,0x00,0x00,
102057 -0x54,0x25,0x00,0x80,
102058 -0x04,0x00,0x00,0x00,
102059 -0xD0,0x27,0x00,0x80,
102060 -0x30,0x00,0x00,0x00,
102061 -0xD8,0x27,0x00,0x80,
102062 -0x04,0x00,0x00,0x00,
102063 -0x64,0x2A,0x00,0x80,
102064 -0x13,0x00,0x00,0x00,
102065 -0xE8,0x06,0x01,0x80,
102066 -0x17,0x00,0x00,0x00,
102067 -0x3C,0x07,0x01,0x80,
102068 -0x06,0x00,0x00,0x00,
102069 -0xC4,0x07,0x01,0x80,
102070 -0x06,0x00,0x00,0x00,
102071 -0xCC,0x07,0x01,0x80,
102072 -0x08,0x00,0x00,0x00,
102073 -0xD4,0x07,0x01,0x80,
102074 -0x0C,0x00,0x00,0x00,
102075 -0xDC,0x07,0x01,0x80,
102076 -0x04,0x00,0x00,0x00,
102077 -0xE4,0x07,0x01,0x80,
102078 -0x0E,0x00,0x00,0x00,
102079 -0xEC,0x07,0x01,0x80,
102080 -0x01,0x00,0x00,0x00,
102081 -0xF4,0x07,0x01,0x80,
102082 -0x38,0x00,0x00,0x00,
102083 -0xFC,0x07,0x01,0x80,
102084 -0x04,0x00,0x00,0x00,
102085 -0x04,0x08,0x01,0x80,
102086 -0x02,0x00,0x00,0x00,
102087 -0x0C,0x08,0x01,0x80,
102088 -0x04,0x00,0x00,0x00,
102089 -0x14,0x08,0x01,0x80,
102090 -0x01,0x00,0x00,0x00,
102091 -0x54,0x08,0x01,0x80,
102092 -0x01,0x00,0x00,0x00,
102093 -0x5C,0x08,0x01,0x80,
102094 -0x0C,0x00,0x00,0x00,
102095 -0xE8,0x03,0x01,0x80,
102096 -0x0E,0x00,0x00,0x00,
102097 -0xF0,0x03,0x01,0x80,
102098 -0x0C,0x00,0x00,0x00,
102099 -0x08,0x06,0x01,0x80,
102100 -0x34,0x00,0x00,0x00,
102101 -0x64,0x08,0x01,0x80,
102102 -0x04,0x00,0x00,0x00,
102103 -0x6C,0x08,0x01,0x80,
102104 -0x04,0x00,0x00,0x00,
102105 -0x9C,0x08,0x01,0x80,
102106 -0x04,0x00,0x00,0x00,
102107 -0xA4,0x08,0x01,0x80,
102108 -0x04,0x00,0x00,0x00,
102109 -0xAC,0x08,0x01,0x80,
102110 -0x04,0x00,0x00,0x00,
102111 -0x74,0x08,0x01,0x80,
102112 -0x08,0x00,0x00,0x00,
102113 -0x40,0x03,0x01,0x80,
102114 -0x04,0x00,0x00,0x00,
102115 -0xB4,0x08,0x01,0x80,
102116 -0x04,0x00,0x00,0x00,
102117 -0x2C,0x09,0x01,0x80,
102118 -0x04,0x00,0x00,0x00,
102119 -0x38,0x09,0x01,0x80,
102120 -0x04,0x00,0x00,0x00,
102121 -0xEC,0x09,0x01,0x80,
102122 -0x04,0x00,0x00,0x00,
102123 -0x50,0x0C,0x01,0x80,
102124 -0x04,0x00,0x00,0x00,
102125 -0x60,0x0C,0x01,0x80,
102126 -0x04,0x00,0x00,0x00,
102127 -0xC8,0x0D,0x01,0x80,
102128 -0x04,0x00,0x00,0x00,
102129 -0xF4,0x0E,0x01,0x80,
102130 -0x04,0x00,0x00,0x00,
102131 -0x30,0x10,0x01,0x80,
102132 -0x04,0x00,0x00,0x00,
102133 -0x48,0x12,0x01,0x80,
102134 -0x51,0x73,0x65,0x6C,
102135 -0x20,0x45,0x72,0x72,
102136 -0x6F,0x72,0x2C,0x20,
102137 -0x25,0x78,0x00,0x00,
102138 -0x72,0x65,0x70,0x65,
102139 -0x61,0x74,0x65,0x64,
102140 -0x20,0x65,0x6C,0x65,
102141 -0x6D,0x65,0x6E,0x74,
102142 -0x20,0x49,0x44,0x3A,
102143 -0x20,0x25,0x78,0x2C,
102144 -0x20,0x63,0x6D,0x64,
102145 -0x20,0x73,0x65,0x71,
102146 -0x3D,0x25,0x78,0x2C,
102147 -0x20,0x68,0x32,0x64,
102148 -0x73,0x65,0x71,0x3D,
102149 -0x25,0x78,0x0A,0x00,
102150 -0x69,0x6E,0x76,0x61,
102151 -0x6C,0x69,0x64,0x20,
102152 -0x63,0x6D,0x64,0x20,
102153 -0x69,0x64,0x3A,0x20,
102154 -0x25,0x78,0x0A,0x00,
102155 -0x48,0x32,0x43,0x3A,
102156 -0x20,0x25,0x78,0x0A,
102157 -0x00,0x00,0x00,0x00,
102158 -0x67,0x65,0x74,0x20,
102159 -0x6A,0x6F,0x69,0x6E,
102160 -0x20,0x63,0x6D,0x64,
102161 -0x0A,0x00,0x00,0x00,
102162 -0x4E,0x6F,0x20,0x69,
102163 -0x72,0x70,0x20,0x25,
102164 -0x73,0x0A,0x00,0x00,
102165 -0x67,0x65,0x74,0x20,
102166 -0x73,0x75,0x72,0x76,
102167 -0x65,0x79,0x20,0x63,
102168 -0x6D,0x64,0x0A,0x00,
102169 -0x53,0x53,0x49,0x44,
102170 -0x3A,0x20,0x25,0x73,
102171 -0x0A,0x00,0x00,0x00,
102172 -0x73,0x65,0x74,0x41,
102173 -0x75,0x74,0x68,0x3A,
102174 -0x20,0x25,0x78,0x0A,
102175 -0x00,0x00,0x00,0x00,
102176 -0x72,0x63,0x76,0x20,
102177 -0x73,0x65,0x74,0x5F,
102178 -0x73,0x74,0x61,0x6B,
102179 -0x65,0x79,0x0A,0x00,
102180 -0x53,0x65,0x74,0x53,
102181 -0x69,0x6E,0x67,0x6C,
102182 -0x65,0x43,0x61,0x72,
102183 -0x72,0x69,0x65,0x72,
102184 -0x54,0x78,0x5F,0x68,
102185 -0x64,0x6C,0x0A,0x00,
102186 -0x53,0x65,0x74,0x53,
102187 -0x69,0x6E,0x67,0x6C,
102188 -0x65,0x54,0x6F,0x6E,
102189 -0x65,0x54,0x78,0x5F,
102190 -0x68,0x64,0x6C,0x0A,
102191 -0x00,0x00,0x00,0x00,
102192 -0x53,0x65,0x74,0x43,
102193 -0x61,0x72,0x72,0x69,
102194 -0x65,0x72,0x53,0x75,
102195 -0x70,0x70,0x72,0x65,
102196 -0x73,0x73,0x69,0x6F,
102197 -0x6E,0x54,0x78,0x5F,
102198 -0x68,0x64,0x6C,0x0A,
102199 -0x00,0x00,0x00,0x00,
102200 -0x53,0x65,0x74,0x43,
102201 -0x6F,0x6E,0x74,0x69,
102202 -0x6E,0x75,0x6F,0x75,
102203 -0x73,0x54,0x78,0x5F,
102204 -0x68,0x64,0x6C,0x0A,
102205 -0x00,0x00,0x00,0x00,
102206 -0x53,0x65,0x74,0x43,
102207 -0x43,0x4B,0x43,0x6F,
102208 -0x6E,0x74,0x69,0x6E,
102209 -0x75,0x6F,0x75,0x73,
102210 -0x54,0x78,0x0A,0x00,
102211 -0x53,0x65,0x74,0x4F,
102212 -0x46,0x44,0x4D,0x43,
102213 -0x6F,0x6E,0x74,0x69,
102214 -0x6E,0x75,0x6F,0x75,
102215 -0x73,0x54,0x78,0x0A,
102216 -0x00,0x00,0x00,0x00,
102217 -0x13,0x00,0x00,0x00,
102218 -0xF8,0x9E,0x02,0x00,
102219 -0x13,0x00,0x00,0x00,
102220 -0xC8,0x5E,0x02,0x00,
102221 -0x13,0x00,0x00,0x00,
102222 -0xF8,0x0E,0x02,0x00,
102223 -0x13,0x00,0x00,0x00,
102224 -0xC8,0xCE,0x01,0x00,
102225 -0x13,0x00,0x00,0x00,
102226 -0xD4,0x8E,0x01,0x00,
102227 -0x13,0x00,0x00,0x00,
102228 -0xA4,0x4E,0x01,0x00,
102229 -0x13,0x00,0x00,0x00,
102230 -0xD0,0x0E,0x01,0x00,
102231 -0x13,0x00,0x00,0x00,
102232 -0xA0,0xCE,0x00,0x00,
102233 -0x13,0x00,0x00,0x00,
102234 -0xD0,0x86,0x00,0x00,
102235 -0x13,0x00,0x00,0x00,
102236 -0xA0,0x46,0x00,0x00,
102237 -0x13,0x00,0x00,0x00,
102238 -0x70,0x06,0x00,0x00,
102239 -0x13,0x00,0x00,0x00,
102240 -0xA4,0x9E,0x02,0x00,
102241 -0x13,0x00,0x00,0x00,
102242 -0x74,0x5E,0x02,0x00,
102243 -0x13,0x00,0x00,0x00,
102244 -0xA4,0x0E,0x02,0x00,
102245 -0x13,0x00,0x00,0x00,
102246 -0xD0,0xCE,0x01,0x00,
102247 -0x13,0x00,0x00,0x00,
102248 -0x40,0x9F,0x01,0x00,
102249 -0x13,0x00,0x00,0x00,
102250 -0x70,0x4E,0x01,0x00,
102251 -0x13,0x00,0x00,0x00,
102252 -0xA0,0x06,0x01,0x00,
102253 -0x13,0x00,0x00,0x00,
102254 -0x70,0xC6,0x00,0x00,
102255 -0x13,0x00,0x00,0x00,
102256 -0xA0,0x82,0x00,0x00,
102257 -0x13,0x00,0x00,0x00,
102258 -0x70,0x42,0x00,0x00,
102259 -0x13,0x00,0x00,0x00,
102260 -0x40,0x02,0x00,0x00,
102261 -0xAA,0x88,0x88,0x44,
102262 -0x44,0x22,0x22,0x00,
102263 -0xAA,0x88,0x88,0x44,
102264 -0x44,0x22,0x22,0x00,
102265 -0xAA,0x88,0x88,0x44,
102266 -0x44,0x22,0x22,0x00,
102267 -0xAA,0x88,0x88,0x44,
102268 -0x44,0x22,0x22,0x00,
102269 -0xAA,0x88,0x88,0x44,
102270 -0x44,0x22,0x22,0x00,
102271 -0xAA,0x88,0x88,0x44,
102272 -0x44,0x22,0x22,0x00,
102273 -0xAA,0x88,0x88,0x44,
102274 -0x44,0x22,0x22,0x00,
102275 -0xAA,0x88,0x88,0x44,
102276 -0x44,0x22,0x22,0x00,
102277 -0xAA,0x88,0x88,0x44,
102278 -0x44,0x22,0x22,0x00,
102279 -0xAA,0x88,0x88,0x44,
102280 -0x44,0x22,0x22,0x00,
102281 -0xAA,0x88,0x88,0x44,
102282 -0x44,0x22,0x22,0x00,
102283 -0xAA,0x88,0x88,0x44,
102284 -0x44,0x22,0x22,0x00,
102285 -0x00,0x00,0x00,0x00,
102286 -0x59,0x01,0x03,0x00,
102287 -0x01,0x00,0x00,0x00,
102288 -0x41,0x10,0x00,0x00,
102289 -0x02,0x00,0x00,0x00,
102290 -0x00,0x10,0x01,0x00,
102291 -0x05,0x00,0x00,0x00,
102292 -0xC0,0x0F,0x08,0x00,
102293 -0x07,0x00,0x00,0x00,
102294 -0x03,0xC8,0x0F,0x00,
102295 -0x13,0x00,0x00,0x00,
102296 -0xB0,0x7C,0x01,0x00,
102297 -0x13,0x00,0x00,0x00,
102298 -0xC0,0x1C,0x01,0x00,
102299 -0x13,0x00,0x00,0x00,
102300 -0x60,0xDC,0x00,0x00,
102301 -0x13,0x00,0x00,0x00,
102302 -0x60,0x8C,0x00,0x00,
102303 -0x13,0x00,0x00,0x00,
102304 -0x50,0x44,0x00,0x00,
102305 -0x13,0x00,0x00,0x00,
102306 -0x20,0x00,0x00,0x00,
102307 -0x00,0x00,0x00,0x00,
102308 -0x59,0x01,0x03,0x00,
102309 -0x01,0x00,0x00,0x00,
102310 -0x50,0x02,0x03,0x00,
102311 -0x02,0x00,0x00,0x00,
102312 -0x00,0x00,0x01,0x00,
102313 -0x10,0x00,0x00,0x00,
102314 -0x0F,0x00,0x08,0x00,
102315 -0x11,0x00,0x00,0x00,
102316 -0xFC,0x31,0x02,0x00,
102317 -0x10,0x00,0x00,0x00,
102318 -0x0F,0x00,0x0C,0x00,
102319 -0x11,0x00,0x00,0x00,
102320 -0xF8,0xF9,0x03,0x00,
102321 -0x10,0x00,0x00,0x00,
102322 -0x0F,0x00,0x02,0x00,
102323 -0x11,0x00,0x00,0x00,
102324 -0x01,0x01,0x02,0x00,
102325 -0x14,0x00,0x00,0x00,
102326 -0x3E,0x09,0x01,0x00,
102327 -0x14,0x00,0x00,0x00,
102328 -0x3E,0x09,0x09,0x00,
102329 -0x15,0x00,0x00,0x00,
102330 -0xF4,0x98,0x01,0x00,
102331 -0x17,0x00,0x00,0x00,
102332 -0x00,0x65,0x0F,0x00,
102333 -0x1A,0x00,0x00,0x00,
102334 -0x56,0x30,0x01,0x00,
102335 -0x1B,0x00,0x00,0x00,
102336 -0x00,0x00,0x06,0x00,
102337 -0x1C,0x00,0x00,0x00,
102338 -0x00,0x03,0x00,0x00,
102339 -0x1E,0x00,0x00,0x00,
102340 -0x59,0x10,0x03,0x00,
102341 -0x21,0x00,0x00,0x00,
102342 -0x00,0x40,0x05,0x00,
102343 -0x22,0x00,0x00,0x00,
102344 -0x3C,0x08,0x00,0x00,
102345 -0x23,0x00,0x00,0x00,
102346 -0x58,0x15,0x00,0x00,
102347 -0x24,0x00,0x00,0x00,
102348 -0x60,0x00,0x00,0x00,
102349 -0x25,0x00,0x00,0x00,
102350 -0x83,0x25,0x02,0x00,
102351 -0x26,0x00,0x00,0x00,
102352 -0x00,0xF2,0x00,0x00,
102353 -0x27,0x00,0x00,0x00,
102354 -0xF1,0xAC,0x0E,0x00,
102355 -0x28,0x00,0x00,0x00,
102356 -0x54,0xBD,0x09,0x00,
102357 -0x29,0x00,0x00,0x00,
102358 -0x82,0x45,0x00,0x00,
102359 -0x2A,0x00,0x00,0x00,
102360 -0x01,0x00,0x00,0x00,
102361 -0x2B,0x00,0x00,0x00,
102362 -0x34,0x13,0x02,0x00,
102363 -0x2A,0x00,0x00,0x00,
102364 -0x00,0x00,0x00,0x00,
102365 -0x2B,0x00,0x00,0x00,
102366 -0x0A,0x00,0x00,0x00,
102367 -0x2A,0x00,0x00,0x00,
102368 -0x01,0x00,0x00,0x00,
102369 -0x2B,0x00,0x00,0x00,
102370 -0x08,0x08,0x00,0x00,
102371 -0x2B,0x00,0x00,0x00,
102372 -0x33,0x33,0x05,0x00,
102373 -0x2C,0x00,0x00,0x00,
102374 -0x0C,0x00,0x00,0x00,
102375 -0x2A,0x00,0x00,0x00,
102376 -0x02,0x00,0x00,0x00,
102377 -0x2B,0x00,0x00,0x00,
102378 -0x08,0x08,0x00,0x00,
102379 -0x2B,0x00,0x00,0x00,
102380 -0x33,0xB3,0x05,0x00,
102381 -0x2C,0x00,0x00,0x00,
102382 -0x0D,0x00,0x00,0x00,
102383 -0x2A,0x00,0x00,0x00,
102384 -0x03,0x00,0x00,0x00,
102385 -0x2B,0x00,0x00,0x00,
102386 -0x08,0x08,0x00,0x00,
102387 -0x2B,0x00,0x00,0x00,
102388 -0x33,0x33,0x06,0x00,
102389 -0x2C,0x00,0x00,0x00,
102390 -0x0D,0x00,0x00,0x00,
102391 -0x2A,0x00,0x00,0x00,
102392 -0x04,0x00,0x00,0x00,
102393 -0x2B,0x00,0x00,0x00,
102394 -0x08,0x08,0x00,0x00,
102395 -0x2B,0x00,0x00,0x00,
102396 -0x33,0xB3,0x06,0x00,
102397 -0x2C,0x00,0x00,0x00,
102398 -0x0D,0x00,0x00,0x00,
102399 -0x2A,0x00,0x00,0x00,
102400 -0x05,0x00,0x00,0x00,
102401 -0x2B,0x00,0x00,0x00,
102402 -0x09,0x07,0x00,0x00,
102403 -0x2B,0x00,0x00,0x00,
102404 -0x33,0x33,0x05,0x00,
102405 -0x2C,0x00,0x00,0x00,
102406 -0x0D,0x00,0x00,0x00,
102407 -0x2A,0x00,0x00,0x00,
102408 -0x06,0x00,0x00,0x00,
102409 -0x2B,0x00,0x00,0x00,
102410 -0x09,0x07,0x00,0x00,
102411 -0x2B,0x00,0x00,0x00,
102412 -0x33,0xB3,0x05,0x00,
102413 -0x2C,0x00,0x00,0x00,
102414 -0x0D,0x00,0x00,0x00,
102415 -0x2A,0x00,0x00,0x00,
102416 -0x07,0x00,0x00,0x00,
102417 -0x2B,0x00,0x00,0x00,
102418 -0x09,0x07,0x00,0x00,
102419 -0x2B,0x00,0x00,0x00,
102420 -0x33,0x33,0x06,0x00,
102421 -0x2C,0x00,0x00,0x00,
102422 -0x0D,0x00,0x00,0x00,
102423 -0x2A,0x00,0x00,0x00,
102424 -0x08,0x00,0x00,0x00,
102425 -0x2B,0x00,0x00,0x00,
102426 -0x09,0x07,0x00,0x00,
102427 -0x2B,0x00,0x00,0x00,
102428 -0x33,0xB3,0x06,0x00,
102429 -0x2C,0x00,0x00,0x00,
102430 -0x0D,0x00,0x00,0x00,
102431 -0x2A,0x00,0x00,0x00,
102432 -0x09,0x00,0x00,0x00,
102433 -0x2B,0x00,0x00,0x00,
102434 -0x0A,0x06,0x00,0x00,
102435 -0x2B,0x00,0x00,0x00,
102436 -0x33,0x33,0x05,0x00,
102437 -0x2C,0x00,0x00,0x00,
102438 -0x0D,0x00,0x00,0x00,
102439 -0x2A,0x00,0x00,0x00,
102440 -0x0A,0x00,0x00,0x00,
102441 -0x2B,0x00,0x00,0x00,
102442 -0x0A,0x06,0x00,0x00,
102443 -0x2B,0x00,0x00,0x00,
102444 -0x33,0xB3,0x05,0x00,
102445 -0x2C,0x00,0x00,0x00,
102446 -0x0D,0x00,0x00,0x00,
102447 -0x2A,0x00,0x00,0x00,
102448 -0x0B,0x00,0x00,0x00,
102449 -0x2B,0x00,0x00,0x00,
102450 -0x0A,0x06,0x00,0x00,
102451 -0x2B,0x00,0x00,0x00,
102452 -0x33,0x33,0x06,0x00,
102453 -0x2C,0x00,0x00,0x00,
102454 -0x0D,0x00,0x00,0x00,
102455 -0x2A,0x00,0x00,0x00,
102456 -0x0C,0x00,0x00,0x00,
102457 -0x2B,0x00,0x00,0x00,
102458 -0x0A,0x06,0x00,0x00,
102459 -0x2B,0x00,0x00,0x00,
102460 -0x33,0xB3,0x06,0x00,
102461 -0x2C,0x00,0x00,0x00,
102462 -0x0D,0x00,0x00,0x00,
102463 -0x2A,0x00,0x00,0x00,
102464 -0x0D,0x00,0x00,0x00,
102465 -0x2B,0x00,0x00,0x00,
102466 -0x0B,0x05,0x00,0x00,
102467 -0x2B,0x00,0x00,0x00,
102468 -0x33,0x33,0x05,0x00,
102469 -0x2C,0x00,0x00,0x00,
102470 -0x0D,0x00,0x00,0x00,
102471 -0x2A,0x00,0x00,0x00,
102472 -0x0E,0x00,0x00,0x00,
102473 -0x2B,0x00,0x00,0x00,
102474 -0x0B,0x05,0x00,0x00,
102475 -0x2B,0x00,0x00,0x00,
102476 -0x23,0x66,0x06,0x00,
102477 -0x2C,0x00,0x00,0x00,
102478 -0x1A,0x00,0x00,0x00,
102479 -0x2A,0x00,0x00,0x00,
102480 -0x00,0x40,0x0E,0x00,
102481 -0x30,0x00,0x00,0x00,
102482 -0x00,0x00,0x02,0x00,
102483 -0x31,0x00,0x00,0x00,
102484 -0x31,0x96,0x0B,0x00,
102485 -0x32,0x00,0x00,0x00,
102486 -0x0D,0x13,0x00,0x00,
102487 -0x33,0x00,0x00,0x00,
102488 -0x87,0x01,0x00,0x00,
102489 -0x13,0x00,0x00,0x00,
102490 -0x6C,0x9E,0x01,0x00,
102491 -0x13,0x00,0x00,0x00,
102492 -0x94,0x5E,0x01,0x00,
102493 -0x00,0x00,0x00,0x00,
102494 -0x59,0x01,0x01,0x00,
102495 -0x18,0x00,0x00,0x00,
102496 -0x01,0xF4,0x00,0x00,
102497 -0xFE,0x00,0x00,0x00,
102498 -0x00,0x00,0x00,0x00,
102499 -0x1E,0x00,0x00,0x00,
102500 -0x5B,0x10,0x03,0x00,
102501 -0xFE,0x00,0x00,0x00,
102502 -0x00,0x00,0x00,0x00,
102503 -0x00,0x00,0x00,0x00,
102504 -0x59,0x01,0x03,0x00,
102505 -0x10,0x00,0x00,0x00,
102506 -0x0F,0x00,0x04,0x00,
102507 -0x11,0x00,0x00,0x00,
102508 -0xF9,0x03,0x02,0x00,
102509 -0x6C,0x09,0x00,0x00,
102510 -0x01,0x02,0x03,0x04,
102511 -0x05,0x06,0x07,0x08,
102512 -0x09,0x0A,0x0B,0x00,
102513 -0x00,0x00,0x00,0x12,
102514 -0x12,0x12,0x12,0x12,
102515 -0x12,0x12,0x12,0x12,
102516 -0x12,0x12,0x00,0x00,
102517 -0x00,0x00,0x0F,0x0F,
102518 -0x0F,0x0F,0x0F,0x0F,
102519 -0x0F,0x0F,0x0F,0x0F,
102520 -0x0F,0x00,0x00,0x00,
102521 -0x00,0x17,0x05,0x03,
102522 -0x22,0x43,0x5E,0x00,
102523 -0x4F,0xA4,0x00,0x00,
102524 -0x4F,0xA4,0x00,0x00,
102525 -0x22,0x43,0x5E,0x00,
102526 -0x4F,0xA4,0x00,0x00,
102527 -0x22,0x43,0x5E,0x00,
102528 -0x4F,0xA4,0x3E,0x00,
102529 -0x30,0xA6,0x00,0x00,
102530 -0x4F,0xA4,0x3E,0x00,
102531 -0x2B,0xA4,0x5E,0x00,
102532 -0x2B,0xA4,0x00,0x00,
102533 -0x2B,0xA4,0x5E,0x00,
102534 -0x22,0xA4,0x5E,0x00,
102535 -0x4F,0xA4,0x00,0x00,
102536 -0x4F,0xA4,0x00,0x00,
102537 -0x4F,0xA4,0x5E,0x00,
102538 -0x4F,0xA4,0x5E,0x00,
102539 -0x4F,0xA4,0x5E,0x00,
102540 -0x4F,0xA4,0x5E,0x00,
102541 -0x4F,0xA4,0x00,0x00,
102542 -0x4F,0xA4,0x5E,0x00,
102543 -0x00,0xE0,0x4C,0x02,
102544 -0x01,0x20,0x00,0x00,
102545 -0x00,0xE0,0x4C,0x00,
102546 -0x00,0x0C,0x43,0x00,
102547 -0x00,0x50,0x43,0x00,
102548 -0x00,0x40,0x96,0x00,
102549 -0x00,0x05,0xB5,0x00,
102550 -0x00,0x0A,0xF7,0x00,
102551 -0x00,0x10,0x18,0x00,
102552 -0x00,0x13,0x74,0x00,
102553 -0x00,0x03,0x7F,0x00,
102554 -0x00,0x50,0xF2,0x02,
102555 -0x01,0x01,0x00,0x00,
102556 -0x00,0x50,0xF2,0x02,
102557 -0x00,0x01,0x00,0x00,
102558 -0x00,0x00,0x00,0x00,
102559 -0x00,0x00,0x00,0x00,
102560 -0x00,0x00,0x00,0x00,
102561 -0x00,0x00,0x00,0x00,
102562 -0x00,0x00,0x00,0x00,
102563 -0x00,0x00,0x00,0x00,
102564 -0xFF,0xFF,0xFF,0xFF,
102565 -0xFF,0xFF,0x00,0x00,
102566 -0x4F,0x6E,0x41,0x73,
102567 -0x73,0x6F,0x63,0x52,
102568 -0x65,0x71,0x00,0x00,
102569 -0x4F,0x6E,0x41,0x73,
102570 -0x73,0x6F,0x63,0x52,
102571 -0x73,0x70,0x00,0x00,
102572 -0x4F,0x6E,0x52,0x65,
102573 -0x41,0x73,0x73,0x6F,
102574 -0x63,0x52,0x65,0x71,
102575 -0x00,0x00,0x00,0x00,
102576 -0x4F,0x6E,0x52,0x65,
102577 -0x41,0x73,0x73,0x6F,
102578 -0x63,0x52,0x73,0x70,
102579 -0x00,0x00,0x00,0x00,
102580 -0x4F,0x6E,0x50,0x72,
102581 -0x6F,0x62,0x65,0x52,
102582 -0x65,0x71,0x00,0x00,
102583 -0x4F,0x6E,0x50,0x72,
102584 -0x6F,0x62,0x65,0x52,
102585 -0x73,0x70,0x00,0x00,
102586 -0x4F,0x6E,0x42,0x65,
102587 -0x61,0x63,0x6F,0x6E,
102588 -0x00,0x00,0x00,0x00,
102589 -0x4F,0x6E,0x41,0x54,
102590 -0x49,0x4D,0x00,0x00,
102591 -0x4F,0x6E,0x44,0x69,
102592 -0x73,0x61,0x73,0x73,
102593 -0x6F,0x63,0x00,0x00,
102594 -0x4F,0x6E,0x41,0x75,
102595 -0x74,0x68,0x00,0x00,
102596 -0x4F,0x6E,0x44,0x65,
102597 -0x41,0x75,0x74,0x68,
102598 -0x00,0x00,0x00,0x00,
102599 -0x4F,0x6E,0x41,0x63,
102600 -0x74,0x69,0x6F,0x6E,
102601 -0x00,0x00,0x00,0x00,
102602 -0x4F,0x6E,0x45,0x78,
102603 -0x63,0x65,0x70,0x74,
102604 -0x69,0x6F,0x6E,0x00,
102605 -0x00,0x00,0x00,0x00,
102606 -0xF8,0xDD,0x01,0x80,
102607 -0xE8,0x26,0x01,0x80,
102608 -0x10,0x00,0x00,0x00,
102609 -0x04,0xDE,0x01,0x80,
102610 -0xF0,0x26,0x01,0x80,
102611 -0x20,0x00,0x00,0x00,
102612 -0x10,0xDE,0x01,0x80,
102613 -0xE8,0x26,0x01,0x80,
102614 -0x30,0x00,0x00,0x00,
102615 -0x20,0xDE,0x01,0x80,
102616 -0xF0,0x26,0x01,0x80,
102617 -0x40,0x00,0x00,0x00,
102618 -0x30,0xDE,0x01,0x80,
102619 -0x80,0x2D,0x01,0x80,
102620 -0x50,0x00,0x00,0x00,
102621 -0x3C,0xDE,0x01,0x80,
102622 -0x28,0x4A,0x00,0x80,
102623 -0x80,0x00,0x00,0x00,
102624 -0x48,0xDE,0x01,0x80,
102625 -0x90,0x59,0x00,0x80,
102626 -0x90,0x00,0x00,0x00,
102627 -0x54,0xDE,0x01,0x80,
102628 -0x44,0x2E,0x01,0x80,
102629 -0xA0,0x00,0x00,0x00,
102630 -0x5C,0xDE,0x01,0x80,
102631 -0x4C,0x2E,0x01,0x80,
102632 -0xB0,0x00,0x00,0x00,
102633 -0x68,0xDE,0x01,0x80,
102634 -0x54,0x2F,0x01,0x80,
102635 -0xC0,0x00,0x00,0x00,
102636 -0x70,0xDE,0x01,0x80,
102637 -0x6C,0x2E,0x01,0x80,
102638 -0xD0,0x00,0x00,0x00,
102639 -0x7C,0xDE,0x01,0x80,
102640 -0xF0,0x54,0x00,0x80,
102641 -0x0C,0x00,0x00,0x00,
102642 -0x88,0xDE,0x01,0x80,
102643 -0x8C,0x2E,0x01,0x80,
102644 -0x73,0x77,0x69,0x74,
102645 -0x63,0x68,0x20,0x74,
102646 -0x6F,0x20,0x34,0x30,
102647 -0x4D,0x20,0x48,0x7A,
102648 -0x20,0x6D,0x6F,0x64,
102649 -0x65,0x28,0x25,0x78,
102650 -0x2C,0x20,0x25,0x78,
102651 -0x29,0x0A,0x00,0x00,
102652 -0x73,0x77,0x69,0x74,
102653 -0x63,0x68,0x20,0x74,
102654 -0x6F,0x20,0x32,0x30,
102655 -0x4D,0x20,0x48,0x7A,
102656 -0x20,0x6D,0x6F,0x64,
102657 -0x65,0x0A,0x00,0x00,
102658 -0x41,0x54,0x49,0x4D,
102659 -0x3A,0x20,0x25,0x78,
102660 -0x0A,0x00,0x00,0x00,
102661 -0x4E,0x6F,0x20,0x69,
102662 -0x72,0x70,0x20,0x25,
102663 -0x73,0x0A,0x00,0x00,
102664 -0x73,0x75,0x72,0x76,
102665 -0x65,0x79,0x20,0x64,
102666 -0x6F,0x6E,0x65,0x28,
102667 -0x25,0x78,0x2C,0x20,
102668 -0x25,0x78,0x29,0x0A,
102669 -0x00,0x00,0x00,0x00,
102670 -0x4E,0x6F,0x20,0x69,
102671 -0x72,0x70,0x20,0x25,
102672 -0x73,0x0A,0x00,0x00,
102673 -0x6A,0x6F,0x69,0x6E,
102674 -0x20,0x72,0x65,0x73,
102675 -0x28,0x25,0x78,0x29,
102676 -0x0A,0x00,0x00,0x00,
102677 -0x4E,0x6F,0x20,0x69,
102678 -0x72,0x70,0x20,0x25,
102679 -0x73,0x0A,0x00,0x00,
102680 -0x64,0x65,0x6C,0x20,
102681 -0x73,0x74,0x61,0x0A,
102682 -0x00,0x00,0x00,0x00,
102683 -0x4E,0x6F,0x20,0x69,
102684 -0x72,0x70,0x20,0x25,
102685 -0x73,0x0A,0x00,0x00,
102686 -0x61,0x64,0x64,0x20,
102687 -0x73,0x74,0x61,0x3A,
102688 -0x25,0x78,0x2C,0x20,
102689 -0x25,0x78,0x0A,0x00,
102690 -0x72,0x63,0x76,0x20,
102691 -0x64,0x69,0x73,0x63,
102692 -0x6F,0x6E,0x6E,0x65,
102693 -0x63,0x74,0x0A,0x00,
102694 -0x64,0x69,0x73,0x63,
102695 -0x6F,0x6E,0x6E,0x65,
102696 -0x63,0x74,0x20,0x74,
102697 -0x69,0x6D,0x65,0x72,
102698 -0x3A,0x20,0x6E,0x6F,
102699 -0x20,0x62,0x65,0x61,
102700 -0x63,0x6F,0x6E,0x0A,
102701 -0x00,0x00,0x00,0x00,
102702 -0x64,0x69,0x73,0x63,
102703 -0x6F,0x6E,0x6E,0x65,
102704 -0x63,0x74,0x20,0x74,
102705 -0x69,0x6D,0x65,0x72,
102706 -0x0A,0x00,0x00,0x00,
102707 -0x00,0x00,0x00,0x00,
102708 -0x4E,0x6F,0x20,0x69,
102709 -0x72,0x70,0x20,0x40,
102710 -0x25,0x73,0x0A,0x00,
102711 -0x57,0x4D,0x4D,0x28,
102712 -0x25,0x78,0x29,0x3A,
102713 -0x20,0x25,0x78,0x2C,
102714 -0x20,0x25,0x78,0x0A,
102715 -0x00,0x00,0x00,0x00,
102716 -0x61,0x73,0x73,0x6F,
102717 -0x63,0x20,0x72,0x65,
102718 -0x6A,0x65,0x63,0x74,
102719 -0x2C,0x20,0x73,0x74,
102720 -0x61,0x74,0x75,0x73,
102721 -0x3A,0x20,0x25,0x64,
102722 -0x0A,0x00,0x00,0x00,
102723 -0x6D,0x61,0x63,0x20,
102724 -0x69,0x64,0x20,0x23,
102725 -0x34,0x3A,0x20,0x25,
102726 -0x78,0x2C,0x20,0x25,
102727 -0x78,0x0A,0x00,0x00,
102728 -0x6D,0x61,0x63,0x20,
102729 -0x69,0x64,0x20,0x23,
102730 -0x35,0x3A,0x20,0x25,
102731 -0x78,0x2C,0x20,0x25,
102732 -0x78,0x2C,0x20,0x25,
102733 -0x78,0x0A,0x00,0x00,
102734 -0x4E,0x6F,0x20,0x69,
102735 -0x72,0x70,0x20,0x40,
102736 -0x25,0x73,0x0A,0x00,
102737 -0x4E,0x6F,0x20,0x69,
102738 -0x72,0x70,0x20,0x25,
102739 -0x73,0x0A,0x00,0x00,
102740 -0x63,0x75,0x72,0x20,
102741 -0x63,0x68,0x61,0x6E,
102742 -0x6E,0x65,0x6C,0x3A,
102743 -0x20,0x25,0x78,0x2C,
102744 -0x20,0x62,0x63,0x6E,
102745 -0x20,0x69,0x6E,0x74,
102746 -0x65,0x72,0x76,0x61,
102747 -0x6C,0x3A,0x20,0x25,
102748 -0x78,0x0A,0x00,0x00,
102749 -0x49,0x42,0x53,0x53,
102750 -0x20,0x6D,0x6F,0x64,
102751 -0x65,0x2C,0x20,0x63,
102752 -0x75,0x72,0x20,0x63,
102753 -0x68,0x61,0x6E,0x6E,
102754 -0x65,0x6C,0x3A,0x20,
102755 -0x25,0x78,0x2C,0x20,
102756 -0x62,0x63,0x6E,0x20,
102757 -0x69,0x6E,0x74,0x65,
102758 -0x72,0x76,0x61,0x6C,
102759 -0x3A,0x20,0x25,0x78,
102760 -0x0A,0x00,0x00,0x00,
102761 -0x6D,0x61,0x63,0x20,
102762 -0x69,0x64,0x20,0x23,
102763 -0x34,0x3A,0x20,0x25,
102764 -0x78,0x2C,0x20,0x25,
102765 -0x78,0x0A,0x00,0x00,
102766 -0x69,0x6E,0x76,0x61,
102767 -0x6C,0x69,0x64,0x20,
102768 -0x63,0x61,0x70,0x3A,
102769 -0x25,0x78,0x0A,0x00,
102770 -0x4E,0x6F,0x20,0x69,
102771 -0x72,0x70,0x20,0x25,
102772 -0x73,0x0A,0x00,0x00,
102773 -0x69,0x73,0x73,0x75,
102774 -0x65,0x20,0x61,0x73,
102775 -0x73,0x6F,0x63,0x72,
102776 -0x65,0x71,0x28,0x25,
102777 -0x78,0x29,0x0A,0x00,
102778 -0x5B,0x57,0x41,0x50,
102779 -0x49,0x5D,0x20,0x67,
102780 -0x65,0x74,0x20,0x77,
102781 -0x61,0x70,0x69,0x20,
102782 -0x49,0x45,0x0A,0x00,
102783 -0x4E,0x6F,0x20,0x69,
102784 -0x72,0x70,0x20,0x25,
102785 -0x73,0x0A,0x00,0x00,
102786 -0x69,0x73,0x73,0x75,
102787 -0x65,0x20,0x61,0x63,
102788 -0x74,0x69,0x6F,0x6E,
102789 -0x3A,0x20,0x25,0x78,
102790 -0x2C,0x20,0x25,0x78,
102791 -0x2C,0x20,0x25,0x78,
102792 -0x20,0x0A,0x00,0x00,
102793 -0x41,0x44,0x44,0x42,
102794 -0x41,0x20,0x52,0x53,
102795 -0x50,0x3A,0x20,0x25,
102796 -0x78,0x0A,0x00,0x00,
102797 -0x44,0x45,0x4C,0x42,
102798 -0x41,0x3A,0x20,0x25,
102799 -0x78,0x28,0x25,0x78,
102800 -0x29,0x0A,0x00,0x00,
102801 -0x4E,0x6F,0x20,0x69,
102802 -0x72,0x70,0x20,0x25,
102803 -0x73,0x0A,0x00,0x00,
102804 -0x69,0x73,0x73,0x75,
102805 -0x65,0x20,0x61,0x75,
102806 -0x74,0x68,0x0A,0x00,
102807 -0x63,0x6C,0x6E,0x74,
102808 -0x20,0x61,0x75,0x74,
102809 -0x68,0x20,0x66,0x61,
102810 -0x69,0x6C,0x2C,0x20,
102811 -0x73,0x74,0x61,0x74,
102812 -0x75,0x73,0x3A,0x20,
102813 -0x25,0x64,0x0A,0x00,
102814 -0x6E,0x6F,0x20,0x63,
102815 -0x68,0x61,0x6C,0x6C,
102816 -0x65,0x6E,0x67,0x65,
102817 -0x20,0x74,0x65,0x78,
102818 -0x74,0x3F,0x0A,0x00,
102819 -0x63,0x6C,0x6E,0x74,
102820 -0x20,0x61,0x75,0x74,
102821 -0x68,0x20,0x66,0x61,
102822 -0x69,0x6C,0x65,0x64,
102823 -0x20,0x64,0x75,0x65,
102824 -0x20,0x74,0x6F,0x20,
102825 -0x69,0x6C,0x6C,0x65,
102826 -0x67,0x61,0x6C,0x20,
102827 -0x73,0x65,0x71,0x3D,
102828 -0x25,0x78,0x0A,0x00,
102829 -0x4E,0x6F,0x20,0x69,
102830 -0x72,0x70,0x20,0x25,
102831 -0x73,0x0A,0x00,0x00,
102832 -0x69,0x73,0x73,0x75,
102833 -0x65,0x5F,0x64,0x65,
102834 -0x61,0x75,0x74,0x68,
102835 -0x0A,0x00,0x00,0x00,
102836 -0x4E,0x6F,0x20,0x69,
102837 -0x72,0x70,0x20,0x25,
102838 -0x73,0x0A,0x00,0x00,
102839 -0x69,0x73,0x73,0x75,
102840 -0x65,0x5F,0x64,0x69,
102841 -0x73,0x61,0x73,0x73,
102842 -0x6F,0x63,0x0A,0x00,
102843 -0x4E,0x6F,0x20,0x69,
102844 -0x72,0x70,0x20,0x25,
102845 -0x73,0x0A,0x00,0x00,
102846 -0x4E,0x6F,0x20,0x69,
102847 -0x72,0x70,0x20,0x25,
102848 -0x73,0x0A,0x00,0x00,
102849 -0x69,0x73,0x73,0x75,
102850 -0x65,0x20,0x6E,0x75,
102851 -0x6C,0x6C,0x20,0x64,
102852 -0x61,0x74,0x61,0x28,
102853 -0x25,0x64,0x29,0x00,
102854 -0x6C,0x69,0x6E,0x6B,
102855 -0x20,0x74,0x6F,0x20,
102856 -0x41,0x72,0x74,0x68,
102857 -0x65,0x72,0x6F,0x73,
102858 -0x20,0x41,0x50,0x0A,
102859 -0x00,0x00,0x00,0x00,
102860 -0x6C,0x69,0x6E,0x6B,
102861 -0x20,0x74,0x6F,0x20,
102862 -0x42,0x72,0x6F,0x61,
102863 -0x64,0x63,0x6F,0x6D,
102864 -0x20,0x41,0x50,0x0A,
102865 -0x00,0x00,0x00,0x00,
102866 -0x6C,0x69,0x6E,0x6B,
102867 -0x20,0x74,0x6F,0x20,
102868 -0x4D,0x61,0x72,0x76,
102869 -0x65,0x6C,0x6C,0x20,
102870 -0x41,0x50,0x0A,0x00,
102871 -0x6C,0x69,0x6E,0x6B,
102872 -0x20,0x74,0x6F,0x20,
102873 -0x52,0x61,0x6C,0x69,
102874 -0x6E,0x6B,0x20,0x41,
102875 -0x50,0x0A,0x00,0x00,
102876 -0x6C,0x69,0x6E,0x6B,
102877 -0x20,0x74,0x6F,0x20,
102878 -0x43,0x69,0x73,0x63,
102879 -0x6F,0x20,0x41,0x50,
102880 -0x0A,0x00,0x00,0x00,
102881 -0x6C,0x69,0x6E,0x6B,
102882 -0x20,0x74,0x6F,0x20,
102883 -0x52,0x65,0x61,0x6C,
102884 -0x74,0x65,0x6B,0x20,
102885 -0x39,0x36,0x42,0x20,
102886 -0x41,0x50,0x0A,0x00,
102887 -0x6C,0x69,0x6E,0x6B,
102888 -0x20,0x74,0x6F,0x20,
102889 -0x75,0x6E,0x6B,0x6E,
102890 -0x6F,0x77,0x6E,0x20,
102891 -0x41,0x50,0x0A,0x00,
102892 -0x6D,0x61,0x63,0x20,
102893 -0x69,0x64,0x20,0x23,
102894 -0x25,0x78,0x3A,0x20,
102895 -0x25,0x78,0x2C,0x20,
102896 -0x25,0x78,0x0A,0x00,
102897 -0x64,0x72,0x6F,0x70,
102898 -0x20,0x64,0x75,0x65,
102899 -0x20,0x74,0x6F,0x20,
102900 -0x64,0x65,0x63,0x61,
102901 -0x63,0x68,0x65,0x0A,
102902 -0x00,0x00,0x00,0x00,
102903 -0xFF,0x00,0x00,0x00,
102904 -0x01,0x00,0x00,0x00,
102905 -0x00,0x00,0x00,0x00,
102906 -0x00,0x00,0x00,0x00,
102907 -0xFF,0xFF,0x00,0x00,
102908 -0x01,0x00,0x00,0x00,
102909 -0x00,0x00,0x00,0x00,
102910 -0x00,0x00,0x00,0x00,
102911 -0x00,0x01,0x02,0x03,
102912 -0xFF,0x00,0x00,0x00,
102913 -0x00,0x00,0x00,0x00,
102914 -0x00,0x00,0x00,0x00,
102915 -0x00,0x01,0x02,0x03,
102916 -0x04,0x05,0x06,0x07,
102917 -0x08,0x09,0x0A,0x0B,
102918 -0xFF,0x00,0x00,0x00,
102919 -0x04,0x05,0x06,0x07,
102920 -0x08,0x09,0x0A,0x0B,
102921 -0xFF,0x00,0x00,0x00,
102922 -0x00,0x00,0x00,0x00,
102923 -0x04,0x05,0x06,0x07,
102924 -0x08,0xFF,0x00,0x00,
102925 -0x00,0x00,0x00,0x00,
102926 -0x00,0x00,0x00,0x00,
102927 -0x00,0x01,0x02,0x03,
102928 -0xFF,0x00,0x00,0x00,
102929 -0x00,0x00,0x00,0x00,
102930 -0x00,0x00,0x00,0x00,
102931 -0x00,0x01,0x01,0x03,
102932 -0xFF,0x00,0x00,0x00,
102933 -0x00,0x00,0x00,0x00,
102934 -0x00,0x00,0x00,0x00,
102935 -0x30,0x31,0x32,0x33,
102936 -0x34,0x35,0x36,0x37,
102937 -0x38,0x39,0x41,0x42,
102938 -0x43,0x44,0x45,0x46,
102939 -0x00,0x00,0x00,0x00,
102940 -0x25,0x64,0x2E,0x00,
102941 -0x25,0x68,0x68,0x58,
102942 -0x3A,0x00,0x00,0x00,
102943 -0x74,0x61,0x72,0x67,
102944 -0x65,0x74,0x20,0x74,
102945 -0x68,0x65,0x72,0x6D,
102946 -0x61,0x6C,0x3A,0x20,
102947 -0x25,0x78,0x2C,0x20,
102948 -0x63,0x75,0x72,0x20,
102949 -0x74,0x68,0x65,0x72,
102950 -0x6D,0x61,0x6C,0x3A,
102951 -0x20,0x25,0x78,0x0A,
102952 -0x00,0x00,0x00,0x00,
102953 -0x00,0x00,0x00,0x00,
102954 -0x08,0xE4,0x01,0x80,
102955 -0x08,0xE4,0x01,0x80,
102956 -0x31,0x10,0x10,0x00,
102957 -0x00,0x30,0x00,0x00,
102958 -0x31,0x20,0x10,0x00,
102959 -0x00,0x30,0x00,0x00,
102960 -0x31,0x28,0x10,0x00,
102961 -0x00,0x30,0x00,0x00,
102962 -0x31,0x2C,0x10,0x10,
102963 -0x00,0x30,0x00,0x00,
102964 -0x31,0x2F,0x10,0x10,
102965 -0x00,0x30,0x00,0x00,
102966 -0x31,0x30,0x18,0x00,
102967 -0x00,0x30,0x00,0x00,
102968 -0x31,0x30,0x20,0x10,
102969 -0x00,0x30,0x00,0x00,
102970 -0x22,0x20,0x18,0x08,
102971 -0x00,0x20,0x00,0x00,
102972 -0x22,0x21,0x14,0x08,
102973 -0x00,0x20,0x00,0x00,
102974 -0x22,0x21,0x1C,0x08,
102975 -0x00,0x20,0x00,0x00,
102976 -0x22,0x21,0x20,0x08,
102977 -0x00,0x20,0x00,0x00,
102978 -0x22,0x21,0x20,0x10,
102979 -0x00,0x20,0x00,0x00,
102980 -0x22,0x21,0x20,0x18,
102981 -0x00,0x20,0x00,0x00,
102982 -0x1A,0x19,0x18,0x10,
102983 -0x00,0x18,0x00,0x00,
102984 -0x12,0x11,0x10,0x08,
102985 -0x00,0x10,0x00,0x00,
102986 -0x0A,0x09,0x08,0x00,
102987 -0x00,0x08,0x00,0x00,
102988 -0x0A,0x09,0x08,0x02,
102989 -0x00,0x08,0x00,0x00,
102990 -0x0A,0x09,0x08,0x04,
102991 -0x00,0x08,0x00,0x00,
102992 -0x0A,0x09,0x08,0x06,
102993 -0x00,0x08,0x00,0x00,
102994 -0x08,0x07,0x06,0x04,
102995 -0x00,0x06,0x00,0x00,
102996 -0x06,0x05,0x04,0x02,
102997 -0x00,0x04,0x00,0x00,
102998 -0x06,0x05,0x04,0x03,
102999 -0x00,0x04,0x00,0x00,
103000 -0x05,0x04,0x03,0x02,
103001 -0x00,0x03,0x00,0x00,
103002 -0x09,0x08,0x07,0x06,
103003 -0x07,0x06,0x06,0x05,
103004 -0x05,0x04,0x04,0x03,
103005 -0x06,0x05,0x05,0x04,
103006 -0x04,0x03,0x03,0x03,
103007 -0x05,0x04,0x04,0x03,
103008 -0x03,0x02,0x02,0x02,
103009 -0x00,0x09,0x08,0x07,
103010 -0x06,0x07,0x06,0x06,
103011 -0x05,0x05,0x04,0x04,
103012 -0x03,0x05,0x04,0x04,
103013 -0x03,0x03,0x02,0x02,
103014 -0x02,0x04,0x03,0x03,
103015 -0x02,0x02,0x01,0x01,
103016 -0x01,0x00,0x00,0x00,
103017 -0x08,0x08,0x08,0x08,
103018 -0x08,0x08,0x08,0x08,
103019 -0x08,0x10,0x10,0x20,
103020 -0x08,0x08,0x08,0x08,
103021 -0x20,0x20,0x20,0x20,
103022 -0x08,0x08,0x08,0x08,
103023 -0x08,0x20,0x20,0x20,
103024 -0x30,0x08,0x08,0x08,
103025 -0x08,0x18,0x18,0x18,
103026 -0x18,0x18,0x20,0x30,
103027 -0x30,0x10,0x20,0x20,
103028 -0x20,0x20,0x20,0x30,
103029 -0x30,0x08,0x10,0x20,
103030 -0x30,0x30,0x30,0x30,
103031 -0x30,0x30,0x00,0x00,
103032 -0x08,0x08,0x08,0x08,
103033 -0x08,0x08,0x08,0x08,
103034 -0x08,0x10,0x10,0x20,
103035 -0x08,0x08,0x08,0x08,
103036 -0x08,0x20,0x20,0x20,
103037 -0x08,0x08,0x08,0x08,
103038 -0x08,0x20,0x20,0x20,
103039 -0x20,0x08,0x08,0x08,
103040 -0x08,0x18,0x18,0x18,
103041 -0x18,0x18,0x20,0x30,
103042 -0x30,0x10,0x20,0x20,
103043 -0x20,0x20,0x20,0x30,
103044 -0x30,0x08,0x10,0x20,
103045 -0x30,0x30,0x30,0x30,
103046 -0x30,0x30,0x00,0x00,
103047 -0x0A,0x09,0x08,0x04,
103048 -0x00,0x0A,0x09,0x08,
103049 -0x04,0x00,0x0A,0x09,
103050 -0x08,0x04,0x00,0x0A,
103051 -0x09,0x08,0x04,0x00,
103052 -0x0A,0x09,0x08,0x00,
103053 -0x00,0x0A,0x09,0x08,
103054 -0x00,0x00,0x0A,0x09,
103055 -0x08,0x00,0x00,0x0A,
103056 -0x09,0x08,0x00,0x00,
103057 -0x0A,0x09,0x08,0x00,
103058 -0x00,0x12,0x11,0x10,
103059 -0x08,0x00,0x12,0x11,
103060 -0x10,0x08,0x00,0x22,
103061 -0x21,0x20,0x18,0x00,
103062 -0x0A,0x09,0x08,0x00,
103063 -0x00,0x0A,0x09,0x08,
103064 -0x00,0x00,0x0A,0x09,
103065 -0x08,0x00,0x00,0x0A,
103066 -0x09,0x08,0x00,0x00,
103067 -0x22,0x21,0x20,0x18,
103068 -0x00,0x22,0x21,0x20,
103069 -0x18,0x00,0x22,0x21,
103070 -0x1C,0x08,0x00,0x22,
103071 -0x20,0x18,0x08,0x00,
103072 -0x0A,0x09,0x08,0x02,
103073 -0x00,0x0A,0x09,0x08,
103074 -0x02,0x00,0x0A,0x09,
103075 -0x08,0x02,0x00,0x0A,
103076 -0x09,0x08,0x02,0x00,
103077 -0x0A,0x09,0x08,0x00,
103078 -0x00,0x22,0x21,0x20,
103079 -0x10,0x00,0x22,0x21,
103080 -0x20,0x08,0x00,0x22,
103081 -0x21,0x1C,0x08,0x00,
103082 -0x31,0x30,0x18,0x00,
103083 -0x00,0x0A,0x09,0x08,
103084 -0x04,0x00,0x0A,0x09,
103085 -0x08,0x04,0x00,0x0A,
103086 -0x09,0x08,0x04,0x00,
103087 -0x0A,0x09,0x08,0x04,
103088 -0x00,0x1A,0x19,0x18,
103089 -0x10,0x00,0x1A,0x19,
103090 -0x18,0x10,0x00,0x1A,
103091 -0x19,0x18,0x10,0x00,
103092 -0x1A,0x19,0x18,0x10,
103093 -0x00,0x1A,0x19,0x18,
103094 -0x10,0x00,0x22,0x21,
103095 -0x20,0x08,0x00,0x31,
103096 -0x2C,0x10,0x10,0x00,
103097 -0x31,0x28,0x10,0x00,
103098 -0x00,0x12,0x11,0x10,
103099 -0x08,0x00,0x22,0x21,
103100 -0x20,0x18,0x00,0x22,
103101 -0x21,0x20,0x18,0x00,
103102 -0x22,0x21,0x20,0x08,
103103 -0x00,0x22,0x21,0x14,
103104 -0x08,0x00,0x22,0x20,
103105 -0x18,0x08,0x00,0x31,
103106 -0x30,0x20,0x10,0x00,
103107 -0x31,0x2C,0x10,0x10,
103108 -0x00,0x0A,0x09,0x08,
103109 -0x00,0x00,0x12,0x11,
103110 -0x10,0x08,0x00,0x22,
103111 -0x21,0x20,0x18,0x00,
103112 -0x22,0x21,0x20,0x18,
103113 -0x00,0x31,0x30,0x20,
103114 -0x10,0x00,0x31,0x2F,
103115 -0x10,0x10,0x00,0x31,
103116 -0x2F,0x10,0x10,0x00,
103117 -0x31,0x10,0x10,0x00,
103118 -0x00,0x31,0x2C,0x10,
103119 -0x10,0x00,0x00,0x00,
103120 -0x0A,0x09,0x08,0x04,
103121 -0x00,0x0A,0x09,0x08,
103122 -0x04,0x00,0x0A,0x09,
103123 -0x08,0x04,0x00,0x0A,
103124 -0x09,0x08,0x04,0x00,
103125 -0x0A,0x09,0x08,0x00,
103126 -0x00,0x0A,0x09,0x08,
103127 -0x00,0x00,0x0A,0x09,
103128 -0x08,0x00,0x00,0x0A,
103129 -0x09,0x08,0x00,0x00,
103130 -0x0A,0x09,0x08,0x00,
103131 -0x00,0x12,0x11,0x10,
103132 -0x08,0x00,0x12,0x11,
103133 -0x10,0x08,0x00,0x22,
103134 -0x21,0x20,0x18,0x00,
103135 -0x0A,0x09,0x08,0x04,
103136 -0x00,0x0A,0x09,0x08,
103137 -0x04,0x00,0x0A,0x09,
103138 -0x08,0x02,0x00,0x0A,
103139 -0x09,0x08,0x00,0x00,
103140 -0x0A,0x09,0x08,0x00,
103141 -0x00,0x22,0x21,0x20,
103142 -0x18,0x00,0x22,0x21,
103143 -0x1C,0x08,0x00,0x22,
103144 -0x21,0x14,0x08,0x00,
103145 -0x0A,0x09,0x08,0x02,
103146 -0x00,0x0A,0x09,0x08,
103147 -0x02,0x00,0x0A,0x09,
103148 -0x08,0x02,0x00,0x0A,
103149 -0x09,0x08,0x02,0x00,
103150 -0x0A,0x09,0x08,0x00,
103151 -0x00,0x22,0x21,0x20,
103152 -0x10,0x00,0x22,0x21,
103153 -0x20,0x08,0x00,0x22,
103154 -0x21,0x14,0x08,0x00,
103155 -0x22,0x21,0x14,0x08,
103156 -0x00,0x0A,0x09,0x08,
103157 -0x04,0x00,0x0A,0x09,
103158 -0x08,0x04,0x00,0x0A,
103159 -0x09,0x08,0x04,0x00,
103160 -0x0A,0x09,0x08,0x04,
103161 -0x00,0x1A,0x19,0x18,
103162 -0x10,0x00,0x1A,0x19,
103163 -0x18,0x10,0x00,0x1A,
103164 -0x19,0x18,0x10,0x00,
103165 -0x1A,0x19,0x18,0x10,
103166 -0x00,0x1A,0x19,0x18,
103167 -0x10,0x00,0x22,0x21,
103168 -0x20,0x08,0x00,0x31,
103169 -0x2C,0x10,0x10,0x00,
103170 -0x31,0x28,0x10,0x00,
103171 -0x00,0x12,0x11,0x10,
103172 -0x08,0x00,0x22,0x21,
103173 -0x20,0x18,0x00,0x22,
103174 -0x21,0x20,0x18,0x00,
103175 -0x22,0x21,0x20,0x08,
103176 -0x00,0x22,0x21,0x14,
103177 -0x08,0x00,0x22,0x20,
103178 -0x18,0x08,0x00,0x31,
103179 -0x30,0x20,0x10,0x00,
103180 -0x31,0x2C,0x10,0x10,
103181 -0x00,0x0A,0x09,0x08,
103182 -0x00,0x00,0x12,0x11,
103183 -0x10,0x08,0x00,0x22,
103184 -0x21,0x20,0x18,0x00,
103185 -0x22,0x21,0x20,0x18,
103186 -0x00,0x31,0x30,0x20,
103187 -0x10,0x00,0x31,0x2F,
103188 -0x10,0x10,0x00,0x31,
103189 -0x2F,0x10,0x10,0x00,
103190 -0x31,0x10,0x10,0x00,
103191 -0x00,0x31,0x2C,0x10,
103192 -0x10,0x00,0x00,0x00,
103193 -0x01,0x02,0x04,0x08,
103194 -0x02,0x04,0x08,0x0C,
103195 -0x10,0x18,0x20,0x30,
103196 -0x02,0x04,0x08,0x0C,
103197 -0x10,0x18,0x20,0x30,
103198 -0x06,0x0C,0x10,0x18,
103199 -0x24,0x30,0x3C,0x48,
103200 -0x48,0x00,0x00,0x00,
103201 -0x00,0x00,0x00,0x00,
103202 -0x00,0x00,0x00,0x00,
103203 -0x00,0x25,0x27,0x2C,
103204 -0x19,0x1B,0x1E,0x20,
103205 -0x23,0x29,0x2A,0x2B,
103206 -0x00,0x00,0x00,0x00,
103207 -0x25,0x29,0x2B,0x2E,
103208 -0x2E,0x00,0x00,0x00,
103209 -0x04,0x00,0x00,0x00,
103210 -0x04,0x00,0x00,0x00,
103211 -0x08,0x00,0x00,0x00,
103212 -0x10,0x00,0x00,0x00,
103213 -0x18,0x00,0x00,0x00,
103214 -0x24,0x00,0x00,0x00,
103215 -0x30,0x00,0x00,0x00,
103216 -0x48,0x00,0x00,0x00,
103217 -0x60,0x00,0x00,0x00,
103218 -0x90,0x00,0x00,0x00,
103219 -0xC0,0x00,0x00,0x00,
103220 -0xD8,0x00,0x00,0x00,
103221 -0x50,0x00,0x00,0x00,
103222 -0x78,0x00,0x00,0x00,
103223 -0xA0,0x00,0x00,0x00,
103224 -0xC8,0x00,0x00,0x00,
103225 -0x40,0x01,0x00,0x00,
103226 -0x90,0x01,0x00,0x00,
103227 -0xE0,0x01,0x00,0x00,
103228 -0x30,0x02,0x00,0x00,
103229 -0x2C,0x01,0x00,0x00,
103230 -0x40,0x01,0x00,0x00,
103231 -0xE0,0x01,0x00,0x00,
103232 -0xD0,0x02,0x00,0x00,
103233 -0x80,0x0C,0x00,0x00,
103234 -0x80,0x0C,0x00,0x00,
103235 -0x80,0x0C,0x00,0x00,
103236 -0xA0,0x0F,0x00,0x00,
103237 -0xA0,0x0F,0x00,0x00,
103238 -0x02,0x00,0x00,0x00,
103239 -0x02,0x00,0x00,0x00,
103240 -0x04,0x00,0x00,0x00,
103241 -0x08,0x00,0x00,0x00,
103242 -0x0C,0x00,0x00,0x00,
103243 -0x12,0x00,0x00,0x00,
103244 -0x18,0x00,0x00,0x00,
103245 -0x24,0x00,0x00,0x00,
103246 -0x30,0x00,0x00,0x00,
103247 -0x48,0x00,0x00,0x00,
103248 -0x60,0x00,0x00,0x00,
103249 -0x6C,0x00,0x00,0x00,
103250 -0x28,0x00,0x00,0x00,
103251 -0x3C,0x00,0x00,0x00,
103252 -0x50,0x00,0x00,0x00,
103253 -0x64,0x00,0x00,0x00,
103254 -0xA0,0x00,0x00,0x00,
103255 -0xC8,0x00,0x00,0x00,
103256 -0xF0,0x00,0x00,0x00,
103257 -0x18,0x01,0x00,0x00,
103258 -0x64,0x00,0x00,0x00,
103259 -0xA0,0x00,0x00,0x00,
103260 -0xF0,0x00,0x00,0x00,
103261 -0x68,0x01,0x00,0x00,
103262 -0x40,0x06,0x00,0x00,
103263 -0x40,0x06,0x00,0x00,
103264 -0x40,0x06,0x00,0x00,
103265 -0xD0,0x07,0x00,0x00,
103266 -0xD0,0x07,0x00,0x00,
103267 -0x72,0x65,0x73,0x65,
103268 -0x74,0x28,0x25,0x78,
103269 -0x29,0x0A,0x00,0x00,
103270 -0xC8,0x82,0x01,0x80,
103271 -0xC8,0xD0,0x00,0x80,
103272 -0xC8,0xD0,0x00,0x80,
103273 -0xC8,0xD0,0x00,0x80,
103274 -0xC8,0xD0,0x00,0x80,
103275 -0x14,0xCF,0x00,0x80,
103276 -0xD0,0x82,0x01,0x80,
103277 -0xC8,0x82,0x01,0x80,
103278 -0xC8,0x82,0x01,0x80,
103279 -0x00,0x00,0x00,0x00,
103280 -0x00,0x00,0x00,0x00,
103281 -0xF0,0x85,0x01,0x80,
103282 -0xF0,0x85,0x01,0x80,
103283 -0xF0,0x85,0x01,0x80,
103284 -0xF0,0x85,0x01,0x80,
103285 -0xA8,0x82,0x01,0x80,
103286 -0x00,0x85,0x01,0x80,
103287 -0xB0,0x82,0x01,0x80,
103288 -0xB8,0x82,0x01,0x80,
103289 -0xC0,0x82,0x01,0x80,
103290 -0x00,0x00,0x00,0x00,
103291 -0x00,0x00,0x00,0x00,
103292 -0x08,0x04,0x04,0x08,
103293 -0x02,0x02,0x01,0x01,
103294 -0x50,0x53,0x00,0x00,
103295 -0x80,0x00,0x00,0x00,
103296 -0x00,0x00,0x00,0x00,
103297 -0xA0,0xA4,0x01,0x80,
103298 -0x70,0xA3,0x01,0x80,
103299 -0x70,0xA3,0x01,0x80,
103300 -0x70,0xA3,0x01,0x80,
103301 -0x68,0xA4,0x01,0x80,
103302 -0x70,0xA3,0x01,0x80,
103303 -0x70,0xA3,0x01,0x80,
103304 -0x70,0xA3,0x01,0x80,
103305 -0x30,0xA4,0x01,0x80,
103306 -0x70,0xA3,0x01,0x80,
103307 -0x70,0xA3,0x01,0x80,
103308 -0x70,0xA3,0x01,0x80,
103309 -0x70,0xA3,0x01,0x80,
103310 -0x70,0xA3,0x01,0x80,
103311 -0x70,0xA3,0x01,0x80,
103312 -0x70,0xA3,0x01,0x80,
103313 -0xF8,0xA3,0x01,0x80,
103314 -0x70,0xA3,0x01,0x80,
103315 -0x70,0xA3,0x01,0x80,
103316 -0x70,0xA3,0x01,0x80,
103317 -0xC0,0xA3,0x01,0x80,
103318 -0x70,0xA3,0x01,0x80,
103319 -0x70,0xA3,0x01,0x80,
103320 -0x70,0xA3,0x01,0x80,
103321 -0x88,0xA3,0x01,0x80,
103322 -0x70,0xA3,0x01,0x80,
103323 -0x70,0xA3,0x01,0x80,
103324 -0x70,0xA3,0x01,0x80,
103325 -0x48,0xA3,0x01,0x80,
103326 -0xB8,0x06,0x00,0x80,
103327 -0xAC,0x06,0x00,0x80,
103328 -0xA0,0x06,0x00,0x80,
103329 -0x94,0x06,0x00,0x80,
103330 -0x88,0x06,0x00,0x80,
103331 -0x7C,0x06,0x00,0x80,
103332 -0x70,0x06,0x00,0x80,
103333 -0x64,0x06,0x00,0x80,
103334 -0x58,0x06,0x00,0x80,
103335 -0x4C,0x06,0x00,0x80,
103336 -0x04,0x06,0x00,0x80,
103337 -0x30,0x1F,0x02,0x80,
103338 -0xB0,0x03,0x25,0xB0,
103339 -0x30,0x1F,0x02,0x80,
103340 -0x30,0x1F,0x02,0x80,
103341 -0x30,0x1F,0x02,0x80,
103342 -0x30,0x1F,0x02,0x80,
103343 -0x6A,0x6F,0x69,0x6E,
103344 -0x62,0x73,0x73,0x5F,
103345 -0x68,0x64,0x6C,0x00,
103346 -0x00,0x0E,0x04,0x0E,
103347 -0x10,0x0E,0x14,0x0E,
103348 -0x18,0x0E,0x1C,0x0E,
103349 -0x02,0x04,0x04,0x07,
103350 -0x07,0x0D,0x0D,0x0D,
103351 -0x02,0x07,0x07,0x0D,
103352 -0x0D,0x0F,0x0F,0x0F,
103353 -0x0F,0x00,0x00,0x00,
103354 -0x72,0x65,0x70,0x6F,
103355 -0x72,0x74,0x5F,0x73,
103356 -0x75,0x72,0x76,0x65,
103357 -0x79,0x5F,0x64,0x6F,
103358 -0x6E,0x65,0x00,0x00,
103359 -0x72,0x65,0x70,0x6F,
103360 -0x72,0x74,0x5F,0x6A,
103361 -0x6F,0x69,0x6E,0x5F,
103362 -0x72,0x65,0x73,0x00,
103363 -0x72,0x65,0x70,0x6F,
103364 -0x72,0x74,0x5F,0x64,
103365 -0x65,0x6C,0x5F,0x73,
103366 -0x74,0x61,0x5F,0x65,
103367 -0x76,0x65,0x6E,0x74,
103368 -0x00,0x00,0x00,0x00,
103369 -0x72,0x65,0x70,0x6F,
103370 -0x72,0x74,0x5F,0x61,
103371 -0x64,0x64,0x5F,0x73,
103372 -0x74,0x61,0x5F,0x65,
103373 -0x76,0x65,0x6E,0x74,
103374 -0x00,0x00,0x00,0x00,
103375 -0x69,0x73,0x73,0x75,
103376 -0x65,0x5F,0x70,0x72,
103377 -0x6F,0x62,0x65,0x72,
103378 -0x65,0x71,0x00,0x00,
103379 -0x69,0x73,0x73,0x75,
103380 -0x65,0x5F,0x70,0x72,
103381 -0x6F,0x62,0x65,0x72,
103382 -0x73,0x70,0x00,0x00,
103383 -0x72,0x65,0x70,0x6F,
103384 -0x72,0x74,0x5F,0x42,
103385 -0x53,0x53,0x49,0x44,
103386 -0x5F,0x69,0x6E,0x66,
103387 -0x6F,0x00,0x00,0x00,
103388 -0x00,0x50,0xF2,0x01,
103389 -0x69,0x73,0x73,0x75,
103390 -0x65,0x5F,0x61,0x73,
103391 -0x73,0x6F,0x63,0x72,
103392 -0x65,0x71,0x00,0x00,
103393 -0x00,0x50,0xF2,0x04,
103394 -0x69,0x73,0x73,0x75,
103395 -0x65,0x5F,0x61,0x63,
103396 -0x74,0x69,0x6F,0x6E,
103397 -0x00,0x00,0x00,0x00,
103398 -0x69,0x73,0x73,0x75,
103399 -0x65,0x5F,0x61,0x75,
103400 -0x74,0x68,0x00,0x00,
103401 -0x69,0x73,0x73,0x75,
103402 -0x65,0x5F,0x64,0x65,
103403 -0x61,0x75,0x74,0x68,
103404 -0x00,0x00,0x00,0x00,
103405 -0x69,0x73,0x73,0x75,
103406 -0x65,0x5F,0x64,0x69,
103407 -0x73,0x61,0x73,0x73,
103408 -0x6F,0x63,0x00,0x00,
103409 -0x69,0x73,0x73,0x75,
103410 -0x65,0x5F,0x66,0x72,
103411 -0x61,0x6D,0x65,0x00,
103412 -0x69,0x73,0x73,0x75,
103413 -0x65,0x5F,0x66,0x72,
103414 -0x61,0x6D,0x65,0x5F,
103415 -0x6C,0x65,0x6E,0x00,
103416 -0x30,0x1F,0x02,0x80,
103417 -0xB0,0x03,0x25,0xB0,
103418 -0xF8,0x00,0x25,0xB0,
103419 -0x18,0x03,0x25,0xB0,
103420 -0x44,0x44,0x33,0x33,
103421 -0x06,0x00,0x2A,0xB0,
103422 -0x28,0x3E,0x01,0x80,
103423 -0x28,0x3E,0x01,0x80,
103424 -0x24,0x3E,0x01,0x80,
103425 -0x28,0x3E,0x01,0x80,
103426 -0xA8,0x3E,0x01,0x80,
103427 -0x28,0x3E,0x01,0x80,
103428 -0x28,0x3E,0x01,0x80,
103429 -0x28,0x3E,0x01,0x80,
103430 -0x28,0x3E,0x01,0x80,
103431 -0x28,0x3E,0x01,0x80,
103432 -0x28,0x3E,0x01,0x80,
103433 -0x9C,0x3E,0x01,0x80,
103434 -0x90,0x3E,0x01,0x80,
103435 -0x28,0x3E,0x01,0x80,
103436 -0x28,0x3E,0x01,0x80,
103437 -0x28,0x3E,0x01,0x80,
103438 -0x28,0x3E,0x01,0x80,
103439 -0x28,0x3E,0x01,0x80,
103440 -0x84,0x3E,0x01,0x80,
103441 -0x28,0x3E,0x01,0x80,
103442 -0x28,0x3E,0x01,0x80,
103443 -0x28,0x3E,0x01,0x80,
103444 -0x78,0x3E,0x01,0x80,
103445 -0x28,0x3E,0x01,0x80,
103446 -0x6C,0x3E,0x01,0x80,
103447 -0x28,0x3E,0x01,0x80,
103448 -0x28,0x3E,0x01,0x80,
103449 -0x28,0x3E,0x01,0x80,
103450 -0x28,0x3E,0x01,0x80,
103451 -0x28,0x3E,0x01,0x80,
103452 -0x28,0x3E,0x01,0x80,
103453 -0x28,0x3E,0x01,0x80,
103454 -0x28,0x3E,0x01,0x80,
103455 -0x28,0x3E,0x01,0x80,
103456 -0x28,0x3E,0x01,0x80,
103457 -0x28,0x3E,0x01,0x80,
103458 -0x60,0x3E,0x01,0x80,
103459 -0x28,0x3E,0x01,0x80,
103460 -0x28,0x3E,0x01,0x80,
103461 -0x28,0x3E,0x01,0x80,
103462 -0x28,0x3E,0x01,0x80,
103463 -0x28,0x3E,0x01,0x80,
103464 -0x28,0x3E,0x01,0x80,
103465 -0x28,0x3E,0x01,0x80,
103466 -0x28,0x3E,0x01,0x80,
103467 -0x28,0x3E,0x01,0x80,
103468 -0x28,0x3E,0x01,0x80,
103469 -0x28,0x3E,0x01,0x80,
103470 -0x54,0x3E,0x01,0x80,
103471 -0x28,0x3E,0x01,0x80,
103472 -0x28,0x3E,0x01,0x80,
103473 -0x28,0x3E,0x01,0x80,
103474 -0x28,0x3E,0x01,0x80,
103475 -0x28,0x3E,0x01,0x80,
103476 -0x28,0x3E,0x01,0x80,
103477 -0x28,0x3E,0x01,0x80,
103478 -0x28,0x3E,0x01,0x80,
103479 -0x28,0x3E,0x01,0x80,
103480 -0x28,0x3E,0x01,0x80,
103481 -0x28,0x3E,0x01,0x80,
103482 -0x28,0x3E,0x01,0x80,
103483 -0x28,0x3E,0x01,0x80,
103484 -0x28,0x3E,0x01,0x80,
103485 -0x28,0x3E,0x01,0x80,
103486 -0x28,0x3E,0x01,0x80,
103487 -0x28,0x3E,0x01,0x80,
103488 -0x28,0x3E,0x01,0x80,
103489 -0x28,0x3E,0x01,0x80,
103490 -0x28,0x3E,0x01,0x80,
103491 -0x28,0x3E,0x01,0x80,
103492 -0x28,0x3E,0x01,0x80,
103493 -0x28,0x3E,0x01,0x80,
103494 -0x48,0x3E,0x01,0x80,
103495 -0x28,0x3E,0x01,0x80,
103496 -0x28,0x3E,0x01,0x80,
103497 -0x28,0x3E,0x01,0x80,
103498 -0x28,0x3E,0x01,0x80,
103499 -0x28,0x3E,0x01,0x80,
103500 -0x28,0x3E,0x01,0x80,
103501 -0x28,0x3E,0x01,0x80,
103502 -0x28,0x3E,0x01,0x80,
103503 -0x28,0x3E,0x01,0x80,
103504 -0x28,0x3E,0x01,0x80,
103505 -0x28,0x3E,0x01,0x80,
103506 -0x28,0x3E,0x01,0x80,
103507 -0x28,0x3E,0x01,0x80,
103508 -0x28,0x3E,0x01,0x80,
103509 -0x28,0x3E,0x01,0x80,
103510 -0x28,0x3E,0x01,0x80,
103511 -0x28,0x3E,0x01,0x80,
103512 -0x28,0x3E,0x01,0x80,
103513 -0x28,0x3E,0x01,0x80,
103514 -0x28,0x3E,0x01,0x80,
103515 -0x28,0x3E,0x01,0x80,
103516 -0x28,0x3E,0x01,0x80,
103517 -0x28,0x3E,0x01,0x80,
103518 -0x3C,0x3E,0x01,0x80,
103519 -0x28,0x3E,0x01,0x80,
103520 -0x28,0x3E,0x01,0x80,
103521 -0x28,0x3E,0x01,0x80,
103522 -0x28,0x3E,0x01,0x80,
103523 -0x28,0x3E,0x01,0x80,
103524 -0x28,0x3E,0x01,0x80,
103525 -0x28,0x3E,0x01,0x80,
103526 -0x28,0x3E,0x01,0x80,
103527 -0x28,0x3E,0x01,0x80,
103528 -0x28,0x3E,0x01,0x80,
103529 -0x28,0x3E,0x01,0x80,
103530 -0x30,0x3E,0x01,0x80,
103531 -0x68,0x3F,0x01,0x80,
103532 -0x5C,0x3F,0x01,0x80,
103533 -0x50,0x3F,0x01,0x80,
103534 -0x44,0x3F,0x01,0x80,
103535 -0x38,0x3F,0x01,0x80,
103536 -0x2C,0x3F,0x01,0x80,
103537 -0x20,0x3F,0x01,0x80,
103538 -0x14,0x3F,0x01,0x80,
103539 -0x08,0x3F,0x01,0x80,
103540 -0xFC,0x3E,0x01,0x80,
103541 -0xF0,0x3E,0x01,0x80,
103542 -0xE4,0x3E,0x01,0x80,
103543 -0x00,0x50,0xF2,0x01,
103544 -0x00,0x50,0xF2,0x02,
103545 -0x00,0x0F,0xAC,0x02,
103546 -0xBC,0xE3,0x01,0x80,
103547 -0x67,0x66,0x66,0x66,
103548 -0x7C,0x88,0x00,0x80,
103549 -0x64,0x88,0x00,0x80,
103550 -0x4C,0x88,0x00,0x80,
103551 -0x34,0x88,0x00,0x80,
103552 -0x1C,0x88,0x00,0x80,
103553 -0x04,0x88,0x00,0x80,
103554 -0xE0,0x87,0x00,0x80,
103555 -0x00,0x02,0x00,0x00,
103556 -0x08,0x09,0x00,0x00,
103557 -0x18,0x96,0x00,0x80,
103558 -0x24,0x96,0x00,0x80,
103559 -0x30,0x96,0x00,0x80,
103560 -0x3C,0x96,0x00,0x80,
103561 -0x18,0x96,0x00,0x80,
103562 -0x18,0x96,0x00,0x80,
103563 -0x18,0x96,0x00,0x80,
103564 -0x18,0x96,0x00,0x80,
103565 -0x48,0x96,0x00,0x80,
103566 -0x54,0x96,0x00,0x80,
103567 -0x60,0x96,0x00,0x80,
103568 -0x6C,0x96,0x00,0x80,
103569 -0x30,0x1F,0x02,0x80,
103570 -0x84,0x0E,0x25,0xB0,
103571 -0x88,0x0E,0x25,0xB0,
103572 -0x8C,0x0E,0x25,0xB0,
103573 -0xD0,0x0E,0x25,0xB0,
103574 -0xD8,0x0E,0x25,0xB0,
103575 -0x20,0x08,0x25,0xB0,
103576 -0x74,0x0E,0x25,0xB0,
103577 -0x80,0x0E,0x25,0xB0,
103578 -0x84,0x0E,0x25,0xB0,
103579 -0x88,0x0E,0x25,0xB0,
103580 -0x8C,0x0E,0x25,0xB0,
103581 -0xD0,0x0E,0x25,0xB0,
103582 -0xD8,0x0E,0x25,0xB0,
103583 -0x14,0x0C,0x25,0xB0,
103584 -0x88,0x0C,0x25,0xB0,
103585 -0x1C,0x0C,0x25,0xB0,
103586 -0xFE,0x01,0x80,0x7F,
103587 -0xE2,0x01,0x80,0x78,
103588 -0xC7,0x01,0xC0,0x71,
103589 -0xAE,0x01,0x80,0x6B,
103590 -0x95,0x01,0x40,0x65,
103591 -0x7F,0x01,0xC0,0x5F,
103592 -0x69,0x01,0x40,0x5A,
103593 -0x55,0x01,0x40,0x55,
103594 -0x42,0x01,0x80,0x50,
103595 -0x30,0x01,0x00,0x4C,
103596 -0x1F,0x01,0xC0,0x47,
103597 -0x0F,0x01,0xC0,0x43,
103598 -0x00,0x01,0x00,0x40,
103599 -0xF2,0x00,0x80,0x3C,
103600 -0xE4,0x00,0x00,0x39,
103601 -0xD7,0x00,0xC0,0x35,
103602 -0xCB,0x00,0xC0,0x32,
103603 -0xC0,0x00,0x00,0x30,
103604 -0xB5,0x00,0x40,0x2D,
103605 -0xAB,0x00,0xC0,0x2A,
103606 -0xA2,0x00,0x80,0x28,
103607 -0x98,0x00,0x00,0x26,
103608 -0x90,0x00,0x00,0x24,
103609 -0x88,0x00,0x00,0x22,
103610 -0x80,0x00,0x00,0x20,
103611 -0x79,0x00,0x40,0x1E,
103612 -0x72,0x00,0x80,0x1C,
103613 -0x6C,0x00,0x00,0x1B,
103614 -0x66,0x00,0x80,0x19,
103615 -0x60,0x00,0x00,0x18,
103616 -0x5B,0x00,0xC0,0x16,
103617 -0x56,0x00,0x80,0x15,
103618 -0x51,0x00,0x40,0x14,
103619 -0x4C,0x00,0x00,0x13,
103620 -0x48,0x00,0x00,0x12,
103621 -0x44,0x00,0x00,0x11,
103622 -0x40,0x00,0x00,0x10,
103623 -0x36,0x35,0x2E,0x25,
103624 -0x1C,0x12,0x09,0x04,
103625 -0x33,0x32,0x2B,0x23,
103626 -0x1A,0x11,0x08,0x04,
103627 -0x30,0x2F,0x29,0x21,
103628 -0x19,0x10,0x08,0x03,
103629 -0x2D,0x2D,0x27,0x1F,
103630 -0x18,0x0F,0x08,0x03,
103631 -0x2B,0x2A,0x25,0x1E,
103632 -0x16,0x0E,0x07,0x03,
103633 -0x28,0x28,0x22,0x1C,
103634 -0x15,0x0D,0x07,0x03,
103635 -0x26,0x25,0x21,0x1B,
103636 -0x14,0x0D,0x06,0x03,
103637 -0x24,0x23,0x1F,0x19,
103638 -0x13,0x0C,0x06,0x03,
103639 -0x22,0x21,0x1D,0x18,
103640 -0x11,0x0B,0x06,0x02,
103641 -0x20,0x20,0x1B,0x16,
103642 -0x11,0x08,0x05,0x02,
103643 -0x1F,0x1E,0x1A,0x15,
103644 -0x10,0x0A,0x05,0x02,
103645 -0x1D,0x1C,0x18,0x14,
103646 -0x0F,0x0A,0x05,0x02,
103647 -0x1B,0x1A,0x17,0x13,
103648 -0x0E,0x09,0x04,0x02,
103649 -0x1A,0x19,0x16,0x12,
103650 -0x0D,0x09,0x04,0x02,
103651 -0x18,0x17,0x15,0x11,
103652 -0x0C,0x08,0x04,0x02,
103653 -0x17,0x16,0x13,0x10,
103654 -0x0C,0x08,0x04,0x02,
103655 -0x16,0x15,0x12,0x0F,
103656 -0x0B,0x07,0x04,0x01,
103657 -0x14,0x14,0x11,0x0E,
103658 -0x0B,0x07,0x03,0x02,
103659 -0x13,0x13,0x10,0x0D,
103660 -0x0A,0x06,0x03,0x01,
103661 -0x12,0x12,0x0F,0x0C,
103662 -0x09,0x06,0x03,0x01,
103663 -0x11,0x11,0x0F,0x0C,
103664 -0x09,0x06,0x03,0x01,
103665 -0x10,0x10,0x0E,0x0B,
103666 -0x08,0x05,0x03,0x01,
103667 -0x0F,0x0F,0x0D,0x0B,
103668 -0x08,0x05,0x03,0x01,
103669 -0x0E,0x0E,0x0C,0x0A,
103670 -0x08,0x05,0x02,0x01,
103671 -0x0D,0x0D,0x0C,0x0A,
103672 -0x07,0x05,0x02,0x01,
103673 -0x0D,0x0C,0x0B,0x09,
103674 -0x07,0x04,0x02,0x01,
103675 -0x0C,0x0C,0x0A,0x09,
103676 -0x06,0x04,0x02,0x01,
103677 -0x0B,0x0B,0x0A,0x08,
103678 -0x06,0x04,0x02,0x01,
103679 -0x0B,0x0A,0x09,0x08,
103680 -0x06,0x04,0x02,0x01,
103681 -0x0A,0x0A,0x09,0x07,
103682 -0x05,0x03,0x02,0x01,
103683 -0x0A,0x09,0x08,0x07,
103684 -0x05,0x03,0x02,0x01,
103685 -0x09,0x09,0x08,0x06,
103686 -0x05,0x03,0x01,0x01,
103687 -0x09,0x08,0x07,0x06,
103688 -0x04,0x03,0x01,0x01,
103689 -0x36,0x35,0x2E,0x1B,
103690 -0x00,0x00,0x00,0x00,
103691 -0x33,0x32,0x2B,0x19,
103692 -0x00,0x00,0x00,0x00,
103693 -0x30,0x2F,0x29,0x18,
103694 -0x00,0x00,0x00,0x00,
103695 -0x2D,0x2D,0x17,0x17,
103696 -0x00,0x00,0x00,0x00,
103697 -0x2B,0x2A,0x25,0x15,
103698 -0x00,0x00,0x00,0x00,
103699 -0x28,0x28,0x24,0x14,
103700 -0x00,0x00,0x00,0x00,
103701 -0x26,0x25,0x21,0x13,
103702 -0x00,0x00,0x00,0x00,
103703 -0x24,0x23,0x1F,0x12,
103704 -0x00,0x00,0x00,0x00,
103705 -0x22,0x21,0x1D,0x11,
103706 -0x00,0x00,0x00,0x00,
103707 -0x20,0x20,0x1B,0x10,
103708 -0x00,0x00,0x00,0x00,
103709 -0x1F,0x1E,0x1A,0x0F,
103710 -0x00,0x00,0x00,0x00,
103711 -0x1D,0x1C,0x18,0x0E,
103712 -0x00,0x00,0x00,0x00,
103713 -0x1B,0x1A,0x17,0x0E,
103714 -0x00,0x00,0x00,0x00,
103715 -0x1A,0x19,0x16,0x0D,
103716 -0x00,0x00,0x00,0x00,
103717 -0x18,0x17,0x15,0x0C,
103718 -0x00,0x00,0x00,0x00,
103719 -0x17,0x16,0x13,0x0B,
103720 -0x00,0x00,0x00,0x00,
103721 -0x16,0x15,0x12,0x0B,
103722 -0x00,0x00,0x00,0x00,
103723 -0x14,0x14,0x11,0x0A,
103724 -0x00,0x00,0x00,0x00,
103725 -0x13,0x13,0x10,0x0A,
103726 -0x00,0x00,0x00,0x00,
103727 -0x12,0x12,0x0F,0x09,
103728 -0x00,0x00,0x00,0x00,
103729 -0x11,0x11,0x0F,0x09,
103730 -0x00,0x00,0x00,0x00,
103731 -0x10,0x10,0x0E,0x08,
103732 -0x00,0x00,0x00,0x00,
103733 -0x0F,0x0F,0x0D,0x08,
103734 -0x00,0x00,0x00,0x00,
103735 -0x0E,0x0E,0x0C,0x07,
103736 -0x00,0x00,0x00,0x00,
103737 -0x0D,0x0D,0x0C,0x07,
103738 -0x00,0x00,0x00,0x00,
103739 -0x0D,0x0C,0x0B,0x06,
103740 -0x00,0x00,0x00,0x00,
103741 -0x0C,0x0C,0x0A,0x06,
103742 -0x00,0x00,0x00,0x00,
103743 -0x0B,0x0B,0x0A,0x06,
103744 -0x00,0x00,0x00,0x00,
103745 -0x0B,0x0A,0x09,0x05,
103746 -0x00,0x00,0x00,0x00,
103747 -0x0A,0x0A,0x09,0x05,
103748 -0x00,0x00,0x00,0x00,
103749 -0x0A,0x09,0x08,0x05,
103750 -0x00,0x00,0x00,0x00,
103751 -0x09,0x09,0x08,0x05,
103752 -0x00,0x00,0x00,0x00,
103753 -0x09,0x08,0x07,0x04,
103754 -0x00,0x00,0x00,0x00,
103755 -0x06,0x00,0x2A,0xB0,
103756 -0x05,0x00,0x2A,0xB0,
103757 -0x54,0x83,0x01,0x80,
103758 -0xC4,0x83,0x01,0x80,
103759 -0x80,0x83,0x01,0x80,
103760 -0xC4,0x83,0x01,0x80,
103761 -0xC4,0x83,0x01,0x80,
103762 -0xC4,0x83,0x01,0x80,
103763 -0xC4,0x83,0x01,0x80,
103764 -0x2C,0x83,0x01,0x80,
103765 -0x00,0x01,0x02,0x02,
103766 -0x03,0x03,0x03,0x03,
103767 -0x04,0x04,0x04,0x04,
103768 -0x04,0x04,0x04,0x04,
103769 -0x05,0x05,0x05,0x05,
103770 -0x05,0x05,0x05,0x05,
103771 -0x05,0x05,0x05,0x05,
103772 -0x05,0x05,0x05,0x05,
103773 -0x06,0x06,0x06,0x06,
103774 -0x06,0x06,0x06,0x06,
103775 -0x06,0x06,0x06,0x06,
103776 -0x06,0x06,0x06,0x06,
103777 -0x06,0x06,0x06,0x06,
103778 -0x06,0x06,0x06,0x06,
103779 -0x06,0x06,0x06,0x06,
103780 -0x06,0x06,0x06,0x06,
103781 -0x07,0x07,0x07,0x07,
103782 -0x07,0x07,0x07,0x07,
103783 -0x07,0x07,0x07,0x07,
103784 -0x07,0x07,0x07,0x07,
103785 -0x07,0x07,0x07,0x07,
103786 -0x07,0x07,0x07,0x07,
103787 -0x07,0x07,0x07,0x07,
103788 -0x07,0x07,0x07,0x07,
103789 -0x07,0x07,0x07,0x07,
103790 -0x07,0x07,0x07,0x07,
103791 -0x07,0x07,0x07,0x07,
103792 -0x07,0x07,0x07,0x07,
103793 -0x07,0x07,0x07,0x07,
103794 -0x07,0x07,0x07,0x07,
103795 -0x07,0x07,0x07,0x07,
103796 -0x07,0x07,0x07,0x07,
103797 -0x08,0x08,0x08,0x08,
103798 -0x08,0x08,0x08,0x08,
103799 -0x08,0x08,0x08,0x08,
103800 -0x08,0x08,0x08,0x08,
103801 -0x08,0x08,0x08,0x08,
103802 -0x08,0x08,0x08,0x08,
103803 -0x08,0x08,0x08,0x08,
103804 -0x08,0x08,0x08,0x08,
103805 -0x08,0x08,0x08,0x08,
103806 -0x08,0x08,0x08,0x08,
103807 -0x08,0x08,0x08,0x08,
103808 -0x08,0x08,0x08,0x08,
103809 -0x08,0x08,0x08,0x08,
103810 -0x08,0x08,0x08,0x08,
103811 -0x08,0x08,0x08,0x08,
103812 -0x08,0x08,0x08,0x08,
103813 -0x08,0x08,0x08,0x08,
103814 -0x08,0x08,0x08,0x08,
103815 -0x08,0x08,0x08,0x08,
103816 -0x08,0x08,0x08,0x08,
103817 -0x08,0x08,0x08,0x08,
103818 -0x08,0x08,0x08,0x08,
103819 -0x08,0x08,0x08,0x08,
103820 -0x08,0x08,0x08,0x08,
103821 -0x08,0x08,0x08,0x08,
103822 -0x08,0x08,0x08,0x08,
103823 -0x08,0x08,0x08,0x08,
103824 -0x08,0x08,0x08,0x08,
103825 -0x08,0x08,0x08,0x08,
103826 -0x08,0x08,0x08,0x08,
103827 -0x08,0x08,0x08,0x08,
103828 -0x08,0x08,0x08,0x08,
103829 -0x00,0x00,0x00,0x00,
103830 -0x00,0x00,0x00,0x00,
103831 -0x00,0x00,0x00,0x00,
103832 -0x00,0x00,0x00,0x00,
103833 -0x00,0x00,0x00,0x00,
103834 -0x00,0x00,0x00,0x00,
103835 -0x00,0x00,0x00,0x00,
103836 -0x00,0x00,0x00,0x00,
103837 -0x00,0x00,0x00,0x00,
103838 -0x00,0x00,0x00,0x00,
103839 -0x00,0x00,0x00,0x00,
103840 -0x00,0x00,0x00,0x00,
103841 -0x00,0x00,0x00,0x00,
103842 -0x00,0x00,0x00,0x00,
103843 -0x00,0x00,0x00,0x00,
103844 -0x00,0x00,0x00,0x00,
103845 -0x00,0x00,0x00,0x00,
103846 -0x00,0x00,0x00,0x00,
103847 -0x00,0x00,0x00,0x00,
103848 -0x00,0x00,0x00,0x00,
103849 -0x00,0x00,0x00,0x00,
103850 -0x00,0x00,0x00,0x00,
103851 -0x00,0x00,0x00,0x00,
103852 -0x00,0x00,0x00,0x00,
103853 -0x00,0x00,0x00,0x00,
103854 -0x00,0x00,0x00,0x00,
103855 -0x00,0x00,0x00,0x00,
103856 -0x00,0x00,0x00,0x00,
103857 -0x00,0x00,0x00,0x00,
103858 -0x00,0x00,0x00,0x00,
103859 -0x00,0x00,0x00,0x00,
103860 -0x00,0x00,0x00,0x00,
103861 -0x00,0x00,0x00,0x00,
103862 -0x00,0x00,0x00,0x00,
103863 -0x00,0x00,0x00,0x00,
103864 -0x08,0x08,0x08,0x08,
103865 -0x08,0x08,0x08,0x08,
103866 -0x08,0x28,0x28,0x28,
103867 -0x28,0x28,0x08,0x08,
103868 -0x08,0x08,0x08,0x08,
103869 -0x08,0x08,0x08,0x08,
103870 -0x08,0x08,0x08,0x08,
103871 -0x08,0x08,0x08,0x08,
103872 -0xA0,0x10,0x10,0x10,
103873 -0x10,0x10,0x10,0x10,
103874 -0x10,0x10,0x10,0x10,
103875 -0x10,0x10,0x10,0x10,
103876 -0x04,0x04,0x04,0x04,
103877 -0x04,0x04,0x04,0x04,
103878 -0x04,0x04,0x10,0x10,
103879 -0x10,0x10,0x10,0x10,
103880 -0x10,0x41,0x41,0x41,
103881 -0x41,0x41,0x41,0x01,
103882 -0x01,0x01,0x01,0x01,
103883 -0x01,0x01,0x01,0x01,
103884 -0x01,0x01,0x01,0x01,
103885 -0x01,0x01,0x01,0x01,
103886 -0x01,0x01,0x01,0x10,
103887 -0x10,0x10,0x10,0x10,
103888 -0x10,0x42,0x42,0x42,
103889 -0x42,0x42,0x42,0x02,
103890 -0x02,0x02,0x02,0x02,
103891 -0x02,0x02,0x02,0x02,
103892 -0x02,0x02,0x02,0x02,
103893 -0x02,0x02,0x02,0x02,
103894 -0x02,0x02,0x02,0x10,
103895 -0x10,0x10,0x10,0x08,
103896 -0x00,0x00,0x00,0x00,
103897 -0x00,0x00,0x00,0x00,
103898 -0x00,0x00,0x00,0x00,
103899 -0x00,0x00,0x00,0x00,
103900 -0x00,0x00,0x00,0x00,
103901 -0x00,0x00,0x00,0x00,
103902 -0x00,0x00,0x00,0x00,
103903 -0x00,0x00,0x00,0x00,
103904 -0xA0,0x10,0x10,0x10,
103905 -0x10,0x10,0x10,0x10,
103906 -0x10,0x10,0x10,0x10,
103907 -0x10,0x10,0x10,0x10,
103908 -0x10,0x10,0x10,0x10,
103909 -0x10,0x10,0x10,0x10,
103910 -0x10,0x10,0x10,0x10,
103911 -0x10,0x10,0x10,0x10,
103912 -0x01,0x01,0x01,0x01,
103913 -0x01,0x01,0x01,0x01,
103914 -0x01,0x01,0x01,0x01,
103915 -0x01,0x01,0x01,0x01,
103916 -0x01,0x01,0x01,0x01,
103917 -0x01,0x01,0x01,0x10,
103918 -0x01,0x01,0x01,0x01,
103919 -0x01,0x01,0x01,0x02,
103920 -0x02,0x02,0x02,0x02,
103921 -0x02,0x02,0x02,0x02,
103922 -0x02,0x02,0x02,0x02,
103923 -0x02,0x02,0x02,0x02,
103924 -0x02,0x02,0x02,0x02,
103925 -0x02,0x02,0x02,0x10,
103926 -0x02,0x02,0x02,0x02,
103927 -0x02,0x02,0x02,0x00,
103928 -0x2D,0x5C,0x7C,0x2F,
103929 -0x00,0x00,0x00,0x00,
103930 -0xFD,0xFA,0x00,0x00,
103931 -0x00,0x00,0x00,0x00,
103932 -0x00,0x45,0xC4,0xF0,
103933 -0x00,0x45,0xC4,0xF0,
103934 -0x00,0x00,0x00,0x00,
103935 -0x00,0x00,0x00,0x00,
103936 -0x00,0x00,0x00,0x00,
103937 -0x00,0x45,0xB5,0x60,
103938 -0xFF,0xFF,0xFF,0xFF,
103939 -0x00,0x00,0x00,0x02,
103940 -0x00,0x00,0x00,0x00,
103941 -0x00,0x00,0x00,0x00,
103942 -0x08,0xFB,0x90,0xB8,
103943 -0xFF,0xFF,0xFF,0xFF,
103944 -};
103945 --- /dev/null
103946 +++ b/drivers/net/wireless/rtl8192cu/include/hal_com.h
103947 @@ -0,0 +1,146 @@
103948 +/******************************************************************************
103949 + *
103950 + * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
103951 + *
103952 + * This program is free software; you can redistribute it and/or modify it
103953 + * under the terms of version 2 of the GNU General Public License as
103954 + * published by the Free Software Foundation.
103955 + *
103956 + * This program is distributed in the hope that it will be useful, but WITHOUT
103957 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
103958 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
103959 + * more details.
103960 + *
103961 + * You should have received a copy of the GNU General Public License along with
103962 + * this program; if not, write to the Free Software Foundation, Inc.,
103963 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
103964 + *
103965 + *
103966 + ******************************************************************************/
103967 +#ifndef __HAL_COMMON_H__
103968 +#define __HAL_COMMON_H__
103969 +
103970 +//CCK
103971 +#define RATE_1M BIT(0)
103972 +#define RATE_2M BIT(1)
103973 +#define RATE_5_5M BIT(2)
103974 +#define RATE_11M BIT(3)
103975 +//OFDM
103976 +#define RATE_6M BIT(4)
103977 +#define RATE_9M BIT(5)
103978 +#define RATE_12M BIT(6)
103979 +#define RATE_18M BIT(7)
103980 +#define RATE_24M BIT(8)
103981 +#define RATE_36M BIT(9)
103982 +#define RATE_48M BIT(10)
103983 +#define RATE_54M BIT(11)
103984 +//MCS 1 Spatial Stream
103985 +#define RATE_MCS0 BIT(12)
103986 +#define RATE_MCS1 BIT(13)
103987 +#define RATE_MCS2 BIT(14)
103988 +#define RATE_MCS3 BIT(15)
103989 +#define RATE_MCS4 BIT(16)
103990 +#define RATE_MCS5 BIT(17)
103991 +#define RATE_MCS6 BIT(18)
103992 +#define RATE_MCS7 BIT(19)
103993 +//MCS 2 Spatial Stream
103994 +#define RATE_MCS8 BIT(20)
103995 +#define RATE_MCS9 BIT(21)
103996 +#define RATE_MCS10 BIT(22)
103997 +#define RATE_MCS11 BIT(23)
103998 +#define RATE_MCS12 BIT(24)
103999 +#define RATE_MCS13 BIT(25)
104000 +#define RATE_MCS14 BIT(26)
104001 +#define RATE_MCS15 BIT(27)
104002 +
104003 +// ALL CCK Rate
104004 +#define RATE_ALL_CCK RATR_1M|RATR_2M|RATR_55M|RATR_11M
104005 +#define RATE_ALL_OFDM_AG RATR_6M|RATR_9M|RATR_12M|RATR_18M|RATR_24M|\
104006 + RATR_36M|RATR_48M|RATR_54M
104007 +#define RATE_ALL_OFDM_1SS RATR_MCS0|RATR_MCS1|RATR_MCS2|RATR_MCS3 |\
104008 + RATR_MCS4|RATR_MCS5|RATR_MCS6 |RATR_MCS7
104009 +#define RATE_ALL_OFDM_2SS RATR_MCS8|RATR_MCS9 |RATR_MCS10|RATR_MCS11|\
104010 + RATR_MCS12|RATR_MCS13|RATR_MCS14|RATR_MCS15
104011 +
104012 +/*------------------------------ Tx Desc definition Macro ------------------------*/
104013 +//#pragma mark -- Tx Desc related definition. --
104014 +//----------------------------------------------------------------------------
104015 +//-----------------------------------------------------------
104016 +// Rate
104017 +//-----------------------------------------------------------
104018 +// CCK Rates, TxHT = 0
104019 +#define DESC_RATE1M 0x00
104020 +#define DESC_RATE2M 0x01
104021 +#define DESC_RATE5_5M 0x02
104022 +#define DESC_RATE11M 0x03
104023 +
104024 +// OFDM Rates, TxHT = 0
104025 +#define DESC_RATE6M 0x04
104026 +#define DESC_RATE9M 0x05
104027 +#define DESC_RATE12M 0x06
104028 +#define DESC_RATE18M 0x07
104029 +#define DESC_RATE24M 0x08
104030 +#define DESC_RATE36M 0x09
104031 +#define DESC_RATE48M 0x0a
104032 +#define DESC_RATE54M 0x0b
104033 +
104034 +// MCS Rates, TxHT = 1
104035 +#define DESC_RATEMCS0 0x0c
104036 +#define DESC_RATEMCS1 0x0d
104037 +#define DESC_RATEMCS2 0x0e
104038 +#define DESC_RATEMCS3 0x0f
104039 +#define DESC_RATEMCS4 0x10
104040 +#define DESC_RATEMCS5 0x11
104041 +#define DESC_RATEMCS6 0x12
104042 +#define DESC_RATEMCS7 0x13
104043 +#define DESC_RATEMCS8 0x14
104044 +#define DESC_RATEMCS9 0x15
104045 +#define DESC_RATEMCS10 0x16
104046 +#define DESC_RATEMCS11 0x17
104047 +#define DESC_RATEMCS12 0x18
104048 +#define DESC_RATEMCS13 0x19
104049 +#define DESC_RATEMCS14 0x1a
104050 +#define DESC_RATEMCS15 0x1b
104051 +#define DESC_RATEMCS15_SG 0x1c
104052 +#define DESC_RATEMCS32 0x20
104053 +
104054 +//============================================================
104055 +// Global var
104056 +//============================================================
104057 +#define OFDM_TABLE_SIZE_92C 37
104058 +#define OFDM_TABLE_SIZE_92D 43
104059 +#define CCK_TABLE_SIZE 33
104060 +
104061 +extern u32 OFDMSwingTable[OFDM_TABLE_SIZE_92D] ;
104062 +
104063 +extern u8 CCKSwingTable_Ch1_Ch13[CCK_TABLE_SIZE][8];
104064 +
104065 +extern u8 CCKSwingTable_Ch14 [CCK_TABLE_SIZE][8];
104066 +
104067 +#ifdef CONFIG_CHIP_VER_INTEGRATION
104068 +void dump_chip_info(HAL_VERSION ChipVersion);
104069 +#endif
104070 +
104071 +u8 //return the final channel plan decision
104072 +hal_com_get_channel_plan(
104073 + IN PADAPTER padapter,
104074 + IN u8 hw_channel_plan, //channel plan from HW (efuse/eeprom)
104075 + IN u8 sw_channel_plan, //channel plan from SW (registry/module param)
104076 + IN u8 def_channel_plan, //channel plan used when the former two is invalid
104077 + IN BOOLEAN AutoLoadFail
104078 + );
104079 +
104080 +void HalSetBrateCfg(
104081 + IN PADAPTER Adapter,
104082 + IN u8 *mBratesOS,
104083 + OUT u16 *pBrateCfg);
104084 +
104085 +u8 MRateToHwRate(u8 rate);
104086 +
104087 +void hal_init_macaddr(_adapter *adapter);
104088 +
104089 +void c2h_evt_clear(_adapter *adapter);
104090 +s32 c2h_evt_read(_adapter *adapter, u8 *buf);
104091 +
104092 +#endif //__HAL_COMMON_H__
104093 +
104094 --- a/drivers/net/wireless/rtl8192cu/include/hal_init.h
104095 +++ /dev/null
104096 @@ -1,305 +0,0 @@
104097 -/******************************************************************************
104098 - *
104099 - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
104100 - *
104101 - * This program is free software; you can redistribute it and/or modify it
104102 - * under the terms of version 2 of the GNU General Public License as
104103 - * published by the Free Software Foundation.
104104 - *
104105 - * This program is distributed in the hope that it will be useful, but WITHOUT
104106 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
104107 - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
104108 - * more details.
104109 - *
104110 - * You should have received a copy of the GNU General Public License along with
104111 - * this program; if not, write to the Free Software Foundation, Inc.,
104112 - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
104113 - *
104114 - *
104115 - ******************************************************************************/
104116 -#ifndef __HAL_INIT_H__
104117 -#define __HAL_INIT_H__
104118 -
104119 -#include <drv_conf.h>
104120 -#include <osdep_service.h>
104121 -#include <drv_types.h>
104122 -
104123 -#ifdef CONFIG_PCI_HCI
104124 -#include <pci_hal.h>
104125 -#endif
104126 -
104127 -
104128 -enum RTL871X_HCI_TYPE {
104129 -
104130 - RTW_SDIO,
104131 - RTW_USB,
104132 - RTW_PCIE
104133 -};
104134 -
104135 -enum _CHIP_TYPE {
104136 -
104137 - NULL_CHIP_TYPE,
104138 - RTL8712_8188S_8191S_8192S,
104139 - RTL8188C_8192C,
104140 - RTL8192D,
104141 - MAX_CHIP_TYPE
104142 -};
104143 -
104144 -
104145 -typedef enum _HW_VARIABLES{
104146 - HW_VAR_MEDIA_STATUS,
104147 - HW_VAR_MEDIA_STATUS1,
104148 - HW_VAR_SET_OPMODE,
104149 - HW_VAR_MAC_ADDR,
104150 - HW_VAR_BSSID,
104151 - HW_VAR_INIT_RTS_RATE,
104152 - HW_VAR_BASIC_RATE,
104153 - HW_VAR_TXPAUSE,
104154 - HW_VAR_BCN_FUNC,
104155 - HW_VAR_CORRECT_TSF,
104156 - HW_VAR_CHECK_BSSID,
104157 - HW_VAR_MLME_DISCONNECT,
104158 - HW_VAR_MLME_SITESURVEY,
104159 - HW_VAR_MLME_JOIN,
104160 - HW_VAR_BEACON_INTERVAL,
104161 - HW_VAR_SLOT_TIME,
104162 - HW_VAR_SIFS,
104163 - HW_VAR_ACK_PREAMBLE,
104164 - HW_VAR_SEC_CFG,
104165 - HW_VAR_TX_BCN_DONE,
104166 - HW_VAR_RF_TYPE,
104167 - HW_VAR_DM_FLAG,
104168 - HW_VAR_DM_FUNC_OP,
104169 - HW_VAR_DM_FUNC_SET,
104170 - HW_VAR_DM_FUNC_CLR,
104171 - HW_VAR_CAM_EMPTY_ENTRY,
104172 - HW_VAR_CAM_INVALID_ALL,
104173 - HW_VAR_CAM_WRITE,
104174 - HW_VAR_AC_PARAM_VO,
104175 - HW_VAR_AC_PARAM_VI,
104176 - HW_VAR_AC_PARAM_BE,
104177 - HW_VAR_AC_PARAM_BK,
104178 - HW_VAR_ACM_CTRL,
104179 - HW_VAR_AMPDU_MIN_SPACE,
104180 - HW_VAR_AMPDU_FACTOR,
104181 - HW_VAR_RXDMA_AGG_PG_TH,
104182 - HW_VAR_SET_RPWM,
104183 - HW_VAR_H2C_FW_PWRMODE,
104184 - HW_VAR_H2C_FW_JOINBSSRPT,
104185 - HW_VAR_FWLPS_RF_ON,
104186 - HW_VAR_H2C_FW_P2P_PS_OFFLOAD,
104187 - HW_VAR_TDLS_WRCR,
104188 - HW_VAR_TDLS_INIT_CH_SEN,
104189 - HW_VAR_TDLS_RS_RCR,
104190 - HW_VAR_TDLS_DONE_CH_SEN,
104191 - HW_VAR_INITIAL_GAIN,
104192 - HW_VAR_TRIGGER_GPIO_0,
104193 - HW_VAR_BT_SET_COEXIST,
104194 - HW_VAR_BT_ISSUE_DELBA,
104195 - HW_VAR_CURRENT_ANTENNA,
104196 - HW_VAR_ANTENNA_DIVERSITY_LINK,
104197 - HW_VAR_ANTENNA_DIVERSITY_SELECT,
104198 - HW_VAR_SWITCH_EPHY_WoWLAN,
104199 - HW_VAR_EFUSE_BYTES,
104200 - HW_VAR_FIFO_CLEARN_UP,
104201 - HW_VAR_CHECK_TXBUF,
104202 - HW_VAR_APFM_ON_MAC, //Auto FSM to Turn On, include clock, isolation, power control for MAC only HW_VAR_WOWLAN,}HW_VARIABLES;
104203 - HW_VAR_WOWLAN,
104204 -}HW_VARIABLES;
104205 -
104206 -typedef enum _HAL_DEF_VARIABLE{
104207 - HAL_DEF_UNDERCORATEDSMOOTHEDPWDB,
104208 - HAL_DEF_IS_SUPPORT_ANT_DIV,
104209 - HAL_DEF_CURRENT_ANTENNA,
104210 - HAL_DEF_DRVINFO_SZ,
104211 - HAL_DEF_MAX_RECVBUF_SZ,
104212 - HAL_DEF_RX_PACKET_OFFSET,
104213 - HAL_DEF_DBG_DUMP_RXPKT,//for dbg
104214 - HAL_DEF_DBG_DM_FUNC,//for dbg
104215 -}HAL_DEF_VARIABLE;
104216 -
104217 -typedef enum _HAL_INTF_PS_FUNC{
104218 - HAL_USB_SELECT_SUSPEND,
104219 - HAL_MAX_ID,
104220 -}HAL_INTF_PS_FUNC;
104221 -
104222 -struct hal_ops {
104223 - u32 (*hal_init)(PADAPTER Adapter);
104224 - u32 (*hal_deinit)(PADAPTER Adapter);
104225 -
104226 - void (*free_hal_data)(PADAPTER Adapter);
104227 -
104228 - u32 (*inirp_init)(PADAPTER Adapter);
104229 - u32 (*inirp_deinit)(PADAPTER Adapter);
104230 -
104231 - s32 (*init_xmit_priv)(PADAPTER Adapter);
104232 - void (*free_xmit_priv)(PADAPTER Adapter);
104233 -
104234 - s32 (*init_recv_priv)(PADAPTER Adapter);
104235 - void (*free_recv_priv)(PADAPTER Adapter);
104236 -
104237 - void (*InitSwLeds)(PADAPTER Adapter);
104238 - void (*DeInitSwLeds)(PADAPTER Adapter);
104239 -
104240 - void (*dm_init)(PADAPTER Adapter);
104241 - void (*dm_deinit)(PADAPTER Adapter);
104242 - void (*read_chip_version)(PADAPTER Adapter);
104243 -
104244 - void (*init_default_value)(PADAPTER Adapter);
104245 -
104246 - void (*intf_chip_configure)(PADAPTER Adapter);
104247 -
104248 - void (*read_adapter_info)(PADAPTER Adapter);
104249 -
104250 - void (*enable_interrupt)(PADAPTER Adapter);
104251 - void (*disable_interrupt)(PADAPTER Adapter);
104252 - s32 (*interrupt_handler)(PADAPTER Adapter);
104253 -
104254 - void (*set_bwmode_handler)(PADAPTER Adapter, HT_CHANNEL_WIDTH Bandwidth, u8 Offset);
104255 - void (*set_channel_handler)(PADAPTER Adapter, u8 channel);
104256 -
104257 - void (*hal_dm_watchdog)(PADAPTER Adapter);
104258 -
104259 - void (*SetHwRegHandler)(PADAPTER Adapter, u8 variable,u8* val);
104260 - void (*GetHwRegHandler)(PADAPTER Adapter, u8 variable,u8* val);
104261 -
104262 - u8 (*GetHalDefVarHandler)(PADAPTER Adapter, HAL_DEF_VARIABLE eVariable, PVOID pValue);
104263 - u8 (*SetHalDefVarHandler)(PADAPTER Adapter, HAL_DEF_VARIABLE eVariable, PVOID pValue);
104264 -
104265 - void (*UpdateRAMaskHandler)(PADAPTER Adapter, u32 mac_id);
104266 - void (*SetBeaconRelatedRegistersHandler)(PADAPTER Adapter);
104267 -
104268 - void (*Add_RateATid)(PADAPTER Adapter, u32 bitmap, u8 arg, u8 mac_id);
104269 -
104270 -#ifdef CONFIG_ANTENNA_DIVERSITY
104271 - u8 (*SwAntDivBeforeLinkHandler)(PADAPTER Adapter);
104272 - void (*SwAntDivCompareHandler)(PADAPTER Adapter, WLAN_BSSID_EX *dst, WLAN_BSSID_EX *src);
104273 -#endif
104274 - u8 (*interface_ps_func)(PADAPTER Adapter,HAL_INTF_PS_FUNC efunc_id, u8* val);
104275 -
104276 - s32 (*hal_xmit)(PADAPTER Adapter, struct xmit_frame *pxmitframe);
104277 - void (*mgnt_xmit)(PADAPTER Adapter, struct xmit_frame *pmgntframe);
104278 -
104279 - u32 (*read_bbreg)(PADAPTER Adapter, u32 RegAddr, u32 BitMask);
104280 - void (*write_bbreg)(PADAPTER Adapter, u32 RegAddr, u32 BitMask, u32 Data);
104281 - u32 (*read_rfreg)(PADAPTER Adapter, u32 eRFPath, u32 RegAddr, u32 BitMask);
104282 - void (*write_rfreg)(PADAPTER Adapter, u32 eRFPath, u32 RegAddr, u32 BitMask, u32 Data);
104283 -
104284 -#ifdef CONFIG_HOSTAPD_MLME
104285 - s32 (*hostap_mgnt_xmit_entry)(PADAPTER Adapter, _pkt *pkt);
104286 -#endif
104287 - void (*EfusePowerSwitch)(PADAPTER pAdapter, u8 bWrite, u8 PwrState);
104288 - void (*ReadEFuse)(PADAPTER Adapter, u8 efuseType, u16 _offset, u16 _size_byte, u8 *pbuf, BOOLEAN bPseudoTest);
104289 - void (*EFUSEGetEfuseDefinition)(PADAPTER pAdapter, u8 efuseType, u8 type, PVOID *pOut, BOOLEAN bPseudoTest);
104290 - u16 (*EfuseGetCurrentSize)(PADAPTER pAdapter, u8 efuseType, BOOLEAN bPseudoTest);
104291 - int (*Efuse_PgPacketRead)(PADAPTER pAdapter, u8 offset, u8 *data, BOOLEAN bPseudoTest);
104292 - int (*Efuse_PgPacketWrite)(PADAPTER pAdapter, u8 offset, u8 word_en, u8 *data, BOOLEAN bPseudoTest);
104293 - u8 (*Efuse_WordEnableDataWrite)(PADAPTER pAdapter, u16 efuse_addr, u8 word_en, u8 *data, BOOLEAN bPseudoTest);
104294 -
104295 -#ifdef DBG_CONFIG_ERROR_DETECT
104296 - void (*sreset_init_value)(_adapter *padapter);
104297 - void (*sreset_reset_value)(_adapter *padapter);
104298 - void (*silentreset)(_adapter *padapter);
104299 - void (*sreset_xmit_status_check)(_adapter *padapter);
104300 - void (*sreset_linked_status_check) (_adapter *padapter);
104301 - u8 (*sreset_get_wifi_status)(_adapter *padapter);
104302 -#endif
104303 -
104304 -#ifdef CONFIG_IOL
104305 - int (*IOL_exec_cmds_sync)(ADAPTER *adapter, struct xmit_frame *xmit_frame, u32 max_wating_ms);
104306 -#endif
104307 -};
104308 -
104309 -typedef enum _RT_EEPROM_TYPE{
104310 - EEPROM_93C46,
104311 - EEPROM_93C56,
104312 - EEPROM_BOOT_EFUSE,
104313 -}RT_EEPROM_TYPE,*PRT_EEPROM_TYPE;
104314 -
104315 -#define USB_HIGH_SPEED_BULK_SIZE 512
104316 -#define USB_FULL_SPEED_BULK_SIZE 64
104317 -
104318 -#define RF_CHANGE_BY_INIT 0
104319 -#define RF_CHANGE_BY_IPS BIT28
104320 -#define RF_CHANGE_BY_PS BIT29
104321 -#define RF_CHANGE_BY_HW BIT30
104322 -#define RF_CHANGE_BY_SW BIT31
104323 -
104324 -typedef enum _HARDWARE_TYPE{
104325 - HARDWARE_TYPE_RTL8180,
104326 - HARDWARE_TYPE_RTL8185,
104327 - HARDWARE_TYPE_RTL8187,
104328 - HARDWARE_TYPE_RTL8188,
104329 - HARDWARE_TYPE_RTL8190P,
104330 - HARDWARE_TYPE_RTL8192E,
104331 - HARDWARE_TYPE_RTL819xU,
104332 - HARDWARE_TYPE_RTL8192SE,
104333 - HARDWARE_TYPE_RTL8192SU,
104334 - HARDWARE_TYPE_RTL8192CE,
104335 - HARDWARE_TYPE_RTL8192CU,
104336 - HARDWARE_TYPE_RTL8192DE,
104337 - HARDWARE_TYPE_RTL8192DU,
104338 - HARDWARE_TYPE_RTL8723E,
104339 - HARDWARE_TYPE_RTL8723U,
104340 -}HARDWARE_TYPE;
104341 -
104342 -#define IS_HARDWARE_TYPE_8192CE(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8192CE)
104343 -#define IS_HARDWARE_TYPE_8192CU(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8192CU)
104344 -
104345 -#define IS_HARDWARE_TYPE_8192DE(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8192DE)
104346 -#define IS_HARDWARE_TYPE_8192DU(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8192DU)
104347 -
104348 -#define IS_HARDWARE_TYPE_8723E(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8723E)
104349 -#define IS_HARDWARE_TYPE_8723U(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8723U)
104350 -
104351 -#define IS_HARDWARE_TYPE_8192C(_Adapter) \
104352 -(IS_HARDWARE_TYPE_8192CE(_Adapter) || IS_HARDWARE_TYPE_8192CU(_Adapter))
104353 -
104354 -#define IS_HARDWARE_TYPE_8192D(_Adapter) \
104355 -(IS_HARDWARE_TYPE_8192DE(_Adapter) || IS_HARDWARE_TYPE_8192DU(_Adapter))
104356 -
104357 -#define IS_HARDWARE_TYPE_8723(_Adapter) \
104358 -(IS_HARDWARE_TYPE_8723E(_Adapter) || IS_HARDWARE_TYPE_8723U(_Adapter))
104359 -
104360 -
104361 -typedef struct eeprom_priv EEPROM_EFUSE_PRIV, *PEEPROM_EFUSE_PRIV;
104362 -#define GET_EEPROM_EFUSE_PRIV(priv) (&priv->eeprompriv)
104363 -
104364 -typedef enum _wowlan_subcode{
104365 - WOWLAN_PATTERN_MATCH = 1,
104366 - WOWLAN_MAGIC_PACKET = 2,
104367 - WOWLAN_UNICAST = 3,
104368 - WOWLAN_SET_PATTERN = 4,
104369 - WOWLAN_DUMP_REG = 5,
104370 - WOWLAN_ENABLE = 6,
104371 - WOWLAN_DISABLE = 7,
104372 - WOWLAN_STATUS = 8,
104373 - WOWLAN_DEBUG_RELOAD_FW = 9,
104374 - WOWLAN_DEBUG_1 =10,
104375 - WOWLAN_DEBUG_2 =11
104376 -}wowlan_subcode;
104377 -
104378 -struct wowlan_ioctl_param{
104379 - unsigned int subcode;
104380 - unsigned int subcode_value;
104381 - unsigned int wakeup_reason;
104382 - unsigned int len;
104383 - unsigned char pattern[0];
104384 -};
104385 -void rtw_dm_init(_adapter *padapter);
104386 -void rtw_sw_led_init(_adapter *padapter);
104387 -void rtw_sw_led_deinit(_adapter *padapter);
104388 -
104389 -uint rtw_hal_init(_adapter *padapter);
104390 -uint rtw_hal_deinit(_adapter *padapter);
104391 -void rtw_hal_stop(_adapter *padapter);
104392 -
104393 -void intf_chip_configure(_adapter *padapter);
104394 -void intf_read_chip_info(_adapter *padapter);
104395 -void intf_read_chip_version(_adapter *padapter);
104396 -#ifdef DBG_CONFIG_ERROR_DETECT
104397 -void rtw_sreset_init(_adapter *padapter);
104398 -#endif
104399 -
104400 -#endif //__HAL_INIT_H__
104401 -
104402 --- /dev/null
104403 +++ b/drivers/net/wireless/rtl8192cu/include/hal_intf.h
104404 @@ -0,0 +1,432 @@
104405 +/******************************************************************************
104406 + *
104407 + * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
104408 + *
104409 + * This program is free software; you can redistribute it and/or modify it
104410 + * under the terms of version 2 of the GNU General Public License as
104411 + * published by the Free Software Foundation.
104412 + *
104413 + * This program is distributed in the hope that it will be useful, but WITHOUT
104414 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
104415 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
104416 + * more details.
104417 + *
104418 + * You should have received a copy of the GNU General Public License along with
104419 + * this program; if not, write to the Free Software Foundation, Inc.,
104420 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
104421 + *
104422 + *
104423 + ******************************************************************************/
104424 +#ifndef __HAL_INTF_H__
104425 +#define __HAL_INTF_H__
104426 +
104427 +#include <drv_conf.h>
104428 +#include <osdep_service.h>
104429 +#include <drv_types.h>
104430 +
104431 +#ifdef CONFIG_PCI_HCI
104432 +#include <pci_hal.h>
104433 +#endif
104434 +
104435 +
104436 +enum RTL871X_HCI_TYPE {
104437 +
104438 + RTW_SDIO,
104439 + RTW_USB,
104440 + RTW_PCIE
104441 +};
104442 +
104443 +enum _CHIP_TYPE {
104444 +
104445 + NULL_CHIP_TYPE,
104446 + RTL8712_8188S_8191S_8192S,
104447 + RTL8188C_8192C,
104448 + RTL8192D,
104449 + RTL8723A,
104450 + RTL8188E,
104451 + MAX_CHIP_TYPE
104452 +};
104453 +
104454 +
104455 +typedef enum _HW_VARIABLES{
104456 + HW_VAR_MEDIA_STATUS,
104457 + HW_VAR_MEDIA_STATUS1,
104458 + HW_VAR_SET_OPMODE,
104459 + HW_VAR_MAC_ADDR,
104460 + HW_VAR_BSSID,
104461 + HW_VAR_INIT_RTS_RATE,
104462 + HW_VAR_INIT_DATA_RATE,
104463 + HW_VAR_BASIC_RATE,
104464 + HW_VAR_TXPAUSE,
104465 + HW_VAR_BCN_FUNC,
104466 + HW_VAR_CORRECT_TSF,
104467 + HW_VAR_CHECK_BSSID,
104468 + HW_VAR_MLME_DISCONNECT,
104469 + HW_VAR_MLME_SITESURVEY,
104470 + HW_VAR_MLME_JOIN,
104471 + HW_VAR_ON_RCR_AM,
104472 + HW_VAR_OFF_RCR_AM,
104473 + HW_VAR_BEACON_INTERVAL,
104474 + HW_VAR_SLOT_TIME,
104475 + HW_VAR_RESP_SIFS,
104476 + HW_VAR_ACK_PREAMBLE,
104477 + HW_VAR_SEC_CFG,
104478 + HW_VAR_BCN_VALID,
104479 + HW_VAR_RF_TYPE,
104480 + HW_VAR_DM_FLAG,
104481 + HW_VAR_DM_FUNC_OP,
104482 + HW_VAR_DM_FUNC_SET,
104483 + HW_VAR_DM_FUNC_CLR,
104484 + HW_VAR_DM_INIT_PWDB,
104485 + HW_VAR_CAM_EMPTY_ENTRY,
104486 + HW_VAR_CAM_INVALID_ALL,
104487 + HW_VAR_CAM_WRITE,
104488 + HW_VAR_CAM_READ,
104489 + HW_VAR_AC_PARAM_VO,
104490 + HW_VAR_AC_PARAM_VI,
104491 + HW_VAR_AC_PARAM_BE,
104492 + HW_VAR_AC_PARAM_BK,
104493 + HW_VAR_ACM_CTRL,
104494 + HW_VAR_AMPDU_MIN_SPACE,
104495 + HW_VAR_AMPDU_FACTOR,
104496 + HW_VAR_RXDMA_AGG_PG_TH,
104497 + HW_VAR_SET_RPWM,
104498 + HW_VAR_H2C_FW_PWRMODE,
104499 + HW_VAR_H2C_FW_JOINBSSRPT,
104500 + HW_VAR_FWLPS_RF_ON,
104501 + HW_VAR_H2C_FW_P2P_PS_OFFLOAD,
104502 + HW_VAR_TDLS_WRCR,
104503 + HW_VAR_TDLS_INIT_CH_SEN,
104504 + HW_VAR_TDLS_RS_RCR,
104505 + HW_VAR_TDLS_DONE_CH_SEN,
104506 + HW_VAR_INITIAL_GAIN,
104507 + HW_VAR_TRIGGER_GPIO_0,
104508 + HW_VAR_BT_SET_COEXIST,
104509 + HW_VAR_BT_ISSUE_DELBA,
104510 + HW_VAR_CURRENT_ANTENNA,
104511 + HW_VAR_ANTENNA_DIVERSITY_LINK,
104512 + HW_VAR_ANTENNA_DIVERSITY_SELECT,
104513 + HW_VAR_SWITCH_EPHY_WoWLAN,
104514 + HW_VAR_EFUSE_BYTES,
104515 + HW_VAR_FIFO_CLEARN_UP,
104516 + HW_VAR_CHECK_TXBUF,
104517 + HW_VAR_APFM_ON_MAC, //Auto FSM to Turn On, include clock, isolation, power control for MAC only
104518 + HW_VAR_WOWLAN,
104519 + HW_VAR_VID,
104520 + HW_VAR_PID,
104521 + HW_VAR_MBSSID_CAM_WRITE,
104522 + HW_VAR_MBSSID_CAM_CLEAR,
104523 + HW_VAR_RCR_MBSSID_EN,
104524 + HW_VAR_USB_RXAGG_PAGE_TO,
104525 +}HW_VARIABLES;
104526 +
104527 +typedef enum _HAL_DEF_VARIABLE{
104528 + HAL_DEF_UNDERCORATEDSMOOTHEDPWDB,
104529 + HAL_DEF_IS_SUPPORT_ANT_DIV,
104530 + HAL_DEF_CURRENT_ANTENNA,
104531 + HAL_DEF_DRVINFO_SZ,
104532 + HAL_DEF_MAX_RECVBUF_SZ,
104533 + HAL_DEF_RX_PACKET_OFFSET,
104534 + HAL_DEF_DBG_DUMP_RXPKT,//for dbg
104535 + HAL_DEF_DBG_DM_FUNC,//for dbg
104536 + HAL_DEF_DUAL_MAC_MODE,
104537 +}HAL_DEF_VARIABLE;
104538 +
104539 +typedef enum _HAL_INTF_PS_FUNC{
104540 + HAL_USB_SELECT_SUSPEND,
104541 + HAL_MAX_ID,
104542 +}HAL_INTF_PS_FUNC;
104543 +
104544 +typedef s32 (*c2h_id_filter)(u8 id);
104545 +
104546 +struct hal_ops {
104547 + u32 (*hal_init)(PADAPTER Adapter);
104548 + u32 (*hal_deinit)(PADAPTER Adapter);
104549 +
104550 + void (*free_hal_data)(PADAPTER Adapter);
104551 +
104552 + u32 (*inirp_init)(PADAPTER Adapter);
104553 + u32 (*inirp_deinit)(PADAPTER Adapter);
104554 +
104555 + s32 (*init_xmit_priv)(PADAPTER Adapter);
104556 + void (*free_xmit_priv)(PADAPTER Adapter);
104557 +
104558 + s32 (*init_recv_priv)(PADAPTER Adapter);
104559 + void (*free_recv_priv)(PADAPTER Adapter);
104560 +
104561 + void (*InitSwLeds)(PADAPTER Adapter);
104562 + void (*DeInitSwLeds)(PADAPTER Adapter);
104563 +
104564 + void (*dm_init)(PADAPTER Adapter);
104565 + void (*dm_deinit)(PADAPTER Adapter);
104566 + void (*read_chip_version)(PADAPTER Adapter);
104567 +
104568 + void (*init_default_value)(PADAPTER Adapter);
104569 +
104570 + void (*intf_chip_configure)(PADAPTER Adapter);
104571 +
104572 + void (*read_adapter_info)(PADAPTER Adapter);
104573 +
104574 + void (*enable_interrupt)(PADAPTER Adapter);
104575 + void (*disable_interrupt)(PADAPTER Adapter);
104576 + s32 (*interrupt_handler)(PADAPTER Adapter);
104577 +
104578 + void (*set_bwmode_handler)(PADAPTER Adapter, HT_CHANNEL_WIDTH Bandwidth, u8 Offset);
104579 + void (*set_channel_handler)(PADAPTER Adapter, u8 channel);
104580 +
104581 + void (*hal_dm_watchdog)(PADAPTER Adapter);
104582 +
104583 + void (*SetHwRegHandler)(PADAPTER Adapter, u8 variable,u8* val);
104584 + void (*GetHwRegHandler)(PADAPTER Adapter, u8 variable,u8* val);
104585 +
104586 + u8 (*GetHalDefVarHandler)(PADAPTER Adapter, HAL_DEF_VARIABLE eVariable, PVOID pValue);
104587 + u8 (*SetHalDefVarHandler)(PADAPTER Adapter, HAL_DEF_VARIABLE eVariable, PVOID pValue);
104588 +
104589 + void (*UpdateRAMaskHandler)(PADAPTER Adapter, u32 mac_id);
104590 + void (*SetBeaconRelatedRegistersHandler)(PADAPTER Adapter);
104591 +
104592 + void (*Add_RateATid)(PADAPTER Adapter, u32 bitmap, u8 arg);
104593 +
104594 +#ifdef CONFIG_ANTENNA_DIVERSITY
104595 + u8 (*AntDivBeforeLinkHandler)(PADAPTER Adapter);
104596 + void (*AntDivCompareHandler)(PADAPTER Adapter, WLAN_BSSID_EX *dst, WLAN_BSSID_EX *src);
104597 +#endif
104598 + u8 (*interface_ps_func)(PADAPTER Adapter,HAL_INTF_PS_FUNC efunc_id, u8* val);
104599 +
104600 + s32 (*hal_xmit)(PADAPTER Adapter, struct xmit_frame *pxmitframe);
104601 + s32 (*mgnt_xmit)(PADAPTER Adapter, struct xmit_frame *pmgntframe);
104602 + s32 (*hal_xmitframe_enqueue)(_adapter *padapter, struct xmit_frame *pxmitframe);
104603 +
104604 + u32 (*read_bbreg)(PADAPTER Adapter, u32 RegAddr, u32 BitMask);
104605 + void (*write_bbreg)(PADAPTER Adapter, u32 RegAddr, u32 BitMask, u32 Data);
104606 + u32 (*read_rfreg)(PADAPTER Adapter, u32 eRFPath, u32 RegAddr, u32 BitMask);
104607 + void (*write_rfreg)(PADAPTER Adapter, u32 eRFPath, u32 RegAddr, u32 BitMask, u32 Data);
104608 +
104609 +#ifdef CONFIG_HOSTAPD_MLME
104610 + s32 (*hostap_mgnt_xmit_entry)(PADAPTER Adapter, _pkt *pkt);
104611 +#endif
104612 + void (*EfusePowerSwitch)(PADAPTER pAdapter, u8 bWrite, u8 PwrState);
104613 + void (*ReadEFuse)(PADAPTER Adapter, u8 efuseType, u16 _offset, u16 _size_byte, u8 *pbuf, BOOLEAN bPseudoTest);
104614 + void (*EFUSEGetEfuseDefinition)(PADAPTER pAdapter, u8 efuseType, u8 type, PVOID *pOut, BOOLEAN bPseudoTest);
104615 + u16 (*EfuseGetCurrentSize)(PADAPTER pAdapter, u8 efuseType, BOOLEAN bPseudoTest);
104616 + int (*Efuse_PgPacketRead)(PADAPTER pAdapter, u8 offset, u8 *data, BOOLEAN bPseudoTest);
104617 + int (*Efuse_PgPacketWrite)(PADAPTER pAdapter, u8 offset, u8 word_en, u8 *data, BOOLEAN bPseudoTest);
104618 + u8 (*Efuse_WordEnableDataWrite)(PADAPTER pAdapter, u16 efuse_addr, u8 word_en, u8 *data, BOOLEAN bPseudoTest);
104619 +
104620 +#ifdef DBG_CONFIG_ERROR_DETECT
104621 + void (*sreset_init_value)(_adapter *padapter);
104622 + void (*sreset_reset_value)(_adapter *padapter);
104623 + void (*silentreset)(_adapter *padapter);
104624 + void (*sreset_xmit_status_check)(_adapter *padapter);
104625 + void (*sreset_linked_status_check) (_adapter *padapter);
104626 + u8 (*sreset_get_wifi_status)(_adapter *padapter);
104627 + bool (*sreset_inprogress)(_adapter *padapter);
104628 +#endif
104629 +
104630 +#ifdef CONFIG_IOL
104631 + int (*IOL_exec_cmds_sync)(ADAPTER *adapter, struct xmit_frame *xmit_frame, u32 max_wating_ms);
104632 +#endif
104633 + void (*hal_notch_filter)(_adapter * adapter, bool enable);
104634 + void (*hal_reset_security_engine)(_adapter * adapter);
104635 +
104636 + s32 (*c2h_handler)(_adapter *padapter, struct c2h_evt_hdr *c2h_evt);
104637 + c2h_id_filter c2h_id_filter_ccx;
104638 +};
104639 +
104640 +typedef enum _RT_EEPROM_TYPE{
104641 + EEPROM_93C46,
104642 + EEPROM_93C56,
104643 + EEPROM_BOOT_EFUSE,
104644 +}RT_EEPROM_TYPE,*PRT_EEPROM_TYPE;
104645 +
104646 +#define USB_HIGH_SPEED_BULK_SIZE 512
104647 +#define USB_FULL_SPEED_BULK_SIZE 64
104648 +
104649 +#define RF_CHANGE_BY_INIT 0
104650 +#define RF_CHANGE_BY_IPS BIT28
104651 +#define RF_CHANGE_BY_PS BIT29
104652 +#define RF_CHANGE_BY_HW BIT30
104653 +#define RF_CHANGE_BY_SW BIT31
104654 +
104655 +typedef enum _HARDWARE_TYPE{
104656 + HARDWARE_TYPE_RTL8180,
104657 + HARDWARE_TYPE_RTL8185,
104658 + HARDWARE_TYPE_RTL8187,
104659 + HARDWARE_TYPE_RTL8188,
104660 + HARDWARE_TYPE_RTL8190P,
104661 + HARDWARE_TYPE_RTL8192E,
104662 + HARDWARE_TYPE_RTL819xU,
104663 + HARDWARE_TYPE_RTL8192SE,
104664 + HARDWARE_TYPE_RTL8192SU,
104665 + HARDWARE_TYPE_RTL8192CE,
104666 + HARDWARE_TYPE_RTL8192CU,
104667 + HARDWARE_TYPE_RTL8192DE,
104668 + HARDWARE_TYPE_RTL8192DU,
104669 + HARDWARE_TYPE_RTL8723AE,
104670 + HARDWARE_TYPE_RTL8723AU,
104671 + HARDWARE_TYPE_RTL8723AS,
104672 + HARDWARE_TYPE_RTL8188EE,
104673 + HARDWARE_TYPE_RTL8188EU,
104674 + HARDWARE_TYPE_RTL8188ES,
104675 + HARDWARE_TYPE_MAX,
104676 +}HARDWARE_TYPE;
104677 +
104678 +//
104679 +// RTL8192C Series
104680 +//
104681 +#define IS_HARDWARE_TYPE_8192CE(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8192CE)
104682 +#define IS_HARDWARE_TYPE_8192CU(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8192CU)
104683 +#define IS_HARDWARE_TYPE_8192C(_Adapter) \
104684 +(IS_HARDWARE_TYPE_8192CE(_Adapter) || IS_HARDWARE_TYPE_8192CU(_Adapter))
104685 +
104686 +//
104687 +// RTL8192D Series
104688 +//
104689 +#define IS_HARDWARE_TYPE_8192DE(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8192DE)
104690 +#define IS_HARDWARE_TYPE_8192DU(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8192DU)
104691 +#define IS_HARDWARE_TYPE_8192D(_Adapter) \
104692 +(IS_HARDWARE_TYPE_8192DE(_Adapter) || IS_HARDWARE_TYPE_8192DU(_Adapter))
104693 +
104694 +//
104695 +// RTL8723A Series
104696 +//
104697 +#define IS_HARDWARE_TYPE_8723AE(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8723AE)
104698 +#define IS_HARDWARE_TYPE_8723AU(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8723AU)
104699 +#define IS_HARDWARE_TYPE_8723AS(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8723AS)
104700 +#define IS_HARDWARE_TYPE_8723A(_Adapter) \
104701 +(IS_HARDWARE_TYPE_8723AE(_Adapter) || IS_HARDWARE_TYPE_8723AU(_Adapter) || IS_HARDWARE_TYPE_8723AS(_Adapter))
104702 +
104703 +//
104704 +// RTL8188E Series
104705 +//
104706 +#define IS_HARDWARE_TYPE_8188EE(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8188EE)
104707 +#define IS_HARDWARE_TYPE_8188EU(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8188EU)
104708 +#define IS_HARDWARE_TYPE_8188ES(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8188ES)
104709 +#define IS_HARDWARE_TYPE_8188E(_Adapter) \
104710 +(IS_HARDWARE_TYPE_8188EE(_Adapter) || IS_HARDWARE_TYPE_8188EU(_Adapter) || IS_HARDWARE_TYPE_8188ES(_Adapter))
104711 +
104712 +
104713 +typedef struct eeprom_priv EEPROM_EFUSE_PRIV, *PEEPROM_EFUSE_PRIV;
104714 +#define GET_EEPROM_EFUSE_PRIV(priv) (&priv->eeprompriv)
104715 +
104716 +#ifdef CONFIG_WOWLAN
104717 +typedef enum _wowlan_subcode{
104718 + WOWLAN_PATTERN_MATCH = 1,
104719 + WOWLAN_MAGIC_PACKET = 2,
104720 + WOWLAN_UNICAST = 3,
104721 + WOWLAN_SET_PATTERN = 4,
104722 + WOWLAN_DUMP_REG = 5,
104723 + WOWLAN_ENABLE = 6,
104724 + WOWLAN_DISABLE = 7,
104725 + WOWLAN_STATUS = 8,
104726 + WOWLAN_DEBUG_RELOAD_FW = 9,
104727 + WOWLAN_DEBUG_1 =10,
104728 + WOWLAN_DEBUG_2 =11
104729 +}wowlan_subcode;
104730 +
104731 +struct wowlan_ioctl_param{
104732 + unsigned int subcode;
104733 + unsigned int subcode_value;
104734 + unsigned int wakeup_reason;
104735 + unsigned int len;
104736 + unsigned char pattern[0];
104737 +};
104738 +
104739 +#define Rx_Pairwisekey BIT(0)
104740 +#define Rx_GTK BIT(1)
104741 +#define Rx_DisAssoc BIT(2)
104742 +#define Rx_DeAuth BIT(3)
104743 +#define FWDecisionDisconnect BIT(4)
104744 +#define Rx_MagicPkt BIT(5)
104745 +#define FinishBtFwPatch BIT(7)
104746 +
104747 +#endif // CONFIG_WOWLAN
104748 +
104749 +void rtw_hal_def_value_init(_adapter *padapter);
104750 +void rtw_hal_free_data(_adapter *padapter);
104751 +
104752 +void rtw_hal_dm_init(_adapter *padapter);
104753 +void rtw_hal_dm_deinit(_adapter *padapter);
104754 +void rtw_hal_sw_led_init(_adapter *padapter);
104755 +void rtw_hal_sw_led_deinit(_adapter *padapter);
104756 +
104757 +uint rtw_hal_init(_adapter *padapter);
104758 +uint rtw_hal_deinit(_adapter *padapter);
104759 +void rtw_hal_stop(_adapter *padapter);
104760 +
104761 +void rtw_hal_set_hwreg(PADAPTER padapter, u8 variable, u8 *val);
104762 +void rtw_hal_get_hwreg(PADAPTER padapter, u8 variable, u8 *val);
104763 +
104764 +void rtw_hal_chip_configure(_adapter *padapter);
104765 +void rtw_hal_read_chip_info(_adapter *padapter);
104766 +void rtw_hal_read_chip_version(_adapter *padapter);
104767 +
104768 +u8 rtw_hal_set_def_var(_adapter *padapter, HAL_DEF_VARIABLE eVariable, PVOID pValue);
104769 +u8 rtw_hal_get_def_var(_adapter *padapter, HAL_DEF_VARIABLE eVariable, PVOID pValue);
104770 +
104771 +void rtw_hal_enable_interrupt(_adapter *padapter);
104772 +void rtw_hal_disable_interrupt(_adapter *padapter);
104773 +
104774 +u32 rtw_hal_inirp_init(_adapter *padapter);
104775 +u32 rtw_hal_inirp_deinit(_adapter *padapter);
104776 +
104777 +u8 rtw_hal_intf_ps_func(_adapter *padapter,HAL_INTF_PS_FUNC efunc_id, u8* val);
104778 +
104779 +s32 rtw_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe);
104780 +s32 rtw_hal_xmit(_adapter *padapter, struct xmit_frame *pxmitframe);
104781 +s32 rtw_hal_mgnt_xmit(_adapter *padapter, struct xmit_frame *pmgntframe);
104782 +
104783 +s32 rtw_hal_init_xmit_priv(_adapter *padapter);
104784 +void rtw_hal_free_xmit_priv(_adapter *padapter);
104785 +
104786 +s32 rtw_hal_init_recv_priv(_adapter *padapter);
104787 +void rtw_hal_free_recv_priv(_adapter *padapter);
104788 +
104789 +void rtw_hal_update_ra_mask(_adapter *padapter, u32 mac_id);
104790 +void rtw_hal_add_ra_tid(_adapter *padapter, u32 bitmap, u8 arg);
104791 +
104792 +void rtw_hal_bcn_related_reg_setting(_adapter *padapter);
104793 +
104794 +u32 rtw_hal_read_bbreg(_adapter *padapter, u32 RegAddr, u32 BitMask);
104795 +void rtw_hal_write_bbreg(_adapter *padapter, u32 RegAddr, u32 BitMask, u32 Data);
104796 +u32 rtw_hal_read_rfreg(_adapter *padapter, u32 eRFPath, u32 RegAddr, u32 BitMask);
104797 +void rtw_hal_write_rfreg(_adapter *padapter, u32 eRFPath, u32 RegAddr, u32 BitMask, u32 Data);
104798 +
104799 +s32 rtw_hal_interrupt_handler(_adapter *padapter);
104800 +
104801 +void rtw_hal_set_bwmode(_adapter *padapter, HT_CHANNEL_WIDTH Bandwidth, u8 Offset);
104802 +void rtw_hal_set_chan(_adapter *padapter, u8 channel);
104803 +
104804 +void rtw_hal_dm_watchdog(_adapter *padapter);
104805 +
104806 +#ifdef CONFIG_ANTENNA_DIVERSITY
104807 +u8 rtw_hal_antdiv_before_linked(_adapter *padapter);
104808 +void rtw_hal_antdiv_rssi_compared(_adapter *padapter, WLAN_BSSID_EX *dst, WLAN_BSSID_EX *src);
104809 +#endif
104810 +
104811 +#ifdef CONFIG_HOSTAPD_MLME
104812 +s32 rtw_hal_hostap_mgnt_xmit_entry(_adapter *padapter, _pkt *pkt);
104813 +#endif
104814 +
104815 +#ifdef DBG_CONFIG_ERROR_DETECT
104816 +void rtw_hal_sreset_init(_adapter *padapter);
104817 +void rtw_hal_sreset_reset(_adapter *padapter);
104818 +void rtw_hal_sreset_reset_value(_adapter *padapter);
104819 +void rtw_hal_sreset_xmit_status_check(_adapter *padapter);
104820 +void rtw_hal_sreset_linked_status_check(_adapter *padapter);
104821 +u8 rtw_hal_sreset_get_wifi_status(_adapter *padapter);
104822 +bool rtw_hal_sreset_inprogress(_adapter *padapter);
104823 +#endif
104824 +
104825 +#ifdef CONFIG_IOL
104826 +int rtw_hal_iol_cmd(ADAPTER *adapter, struct xmit_frame *xmit_frame, u32 max_wating_ms);
104827 +#endif
104828 +
104829 +void rtw_hal_notch_filter(_adapter * adapter, bool enable);
104830 +void rtw_hal_reset_security_engine(_adapter * adapter);
104831 +
104832 +s32 rtw_hal_c2h_handler(_adapter *adapter, struct c2h_evt_hdr *c2h_evt);
104833 +c2h_id_filter rtw_hal_c2h_id_filter_ccx(_adapter *adapter);
104834 +
104835 +#endif //__HAL_INTF_H__
104836 +
104837 --- a/drivers/net/wireless/rtl8192cu/include/ieee80211.h
104838 +++ b/drivers/net/wireless/rtl8192cu/include/ieee80211.h
104839 @@ -43,6 +43,8 @@
104840 #define MGMT_QUEUE_NUM 5
104841
104842 #define ETH_ALEN 6
104843 +#define ETH_TYPE_LEN 2
104844 +#define PAYLOAD_TYPE_LEN 1
104845
104846 #ifdef CONFIG_AP_MODE
104847
104848 @@ -71,6 +73,9 @@ enum {
104849 RTL871X_HOSTAPD_SET_WPS_PROBE_RESP = 18,
104850 RTL871X_HOSTAPD_SET_WPS_ASSOC_RESP = 19,
104851 RTL871X_HOSTAPD_SET_HIDDEN_SSID = 20,
104852 + RTL871X_HOSTAPD_SET_MACADDR_ACL = 21,
104853 + RTL871X_HOSTAPD_ACL_ADD_STA = 22,
104854 + RTL871X_HOSTAPD_ACL_REMOVE_STA = 23,
104855 };
104856
104857 /* STA flags */
104858 @@ -131,31 +136,43 @@ enum {
104859
104860
104861 #define WPA_SELECTOR_LEN 4
104862 -static u8 WPA_OUI_TYPE[] = { 0x00, 0x50, 0xf2, 1 };
104863 -static u16 WPA_VERSION = 1;
104864 -static u8 WPA_AUTH_KEY_MGMT_NONE[] = { 0x00, 0x50, 0xf2, 0 };
104865 -static u8 WPA_AUTH_KEY_MGMT_UNSPEC_802_1X[] = { 0x00, 0x50, 0xf2, 1 };
104866 -static u8 WPA_AUTH_KEY_MGMT_PSK_OVER_802_1X[] = { 0x00, 0x50, 0xf2, 2 };
104867 -static u8 WPA_CIPHER_SUITE_NONE[] = { 0x00, 0x50, 0xf2, 0 };
104868 -static u8 WPA_CIPHER_SUITE_WEP40[] = { 0x00, 0x50, 0xf2, 1 };
104869 -static u8 WPA_CIPHER_SUITE_TKIP[] = { 0x00, 0x50, 0xf2, 2 };
104870 -//static u8 WPA_CIPHER_SUITE_WRAP[] = { 0x00, 0x50, 0xf2, 3 };
104871 -static u8 WPA_CIPHER_SUITE_CCMP[] = { 0x00, 0x50, 0xf2, 4 };
104872 -static u8 WPA_CIPHER_SUITE_WEP104[] = { 0x00, 0x50, 0xf2, 5 };
104873 +extern u8 RTW_WPA_OUI_TYPE[] ;
104874 +extern u16 RTW_WPA_VERSION ;
104875 +extern u8 WPA_AUTH_KEY_MGMT_NONE[];
104876 +extern u8 WPA_AUTH_KEY_MGMT_UNSPEC_802_1X[];
104877 +extern u8 WPA_AUTH_KEY_MGMT_PSK_OVER_802_1X[];
104878 +extern u8 WPA_CIPHER_SUITE_NONE[];
104879 +extern u8 WPA_CIPHER_SUITE_WEP40[];
104880 +extern u8 WPA_CIPHER_SUITE_TKIP[];
104881 +extern u8 WPA_CIPHER_SUITE_WRAP[];
104882 +extern u8 WPA_CIPHER_SUITE_CCMP[];
104883 +extern u8 WPA_CIPHER_SUITE_WEP104[];
104884
104885
104886 #define RSN_HEADER_LEN 4
104887 #define RSN_SELECTOR_LEN 4
104888 -static u16 RSN_VERSION = 1;
104889 -static u8 RSN_AUTH_KEY_MGMT_UNSPEC_802_1X[] = { 0x00, 0x0f, 0xac, 1 };
104890 -static u8 RSN_AUTH_KEY_MGMT_PSK_OVER_802_1X[] = { 0x00, 0x0f, 0xac, 2 };
104891 -static u8 RSN_CIPHER_SUITE_NONE[] = { 0x00, 0x0f, 0xac, 0 };
104892 -static u8 RSN_CIPHER_SUITE_WEP40[] = { 0x00, 0x0f, 0xac, 1 };
104893 -static u8 RSN_CIPHER_SUITE_TKIP[] = { 0x00, 0x0f, 0xac, 2 };
104894 -//static u8 RSN_CIPHER_SUITE_WRAP[] = { 0x00, 0x0f, 0xac, 3 };
104895 -static u8 RSN_CIPHER_SUITE_CCMP[] = { 0x00, 0x0f, 0xac, 4 };
104896 -static u8 RSN_CIPHER_SUITE_WEP104[] = { 0x00, 0x0f, 0xac, 5 };
104897
104898 +extern u16 RSN_VERSION_BSD;
104899 +extern u8 RSN_AUTH_KEY_MGMT_UNSPEC_802_1X[];
104900 +extern u8 RSN_AUTH_KEY_MGMT_PSK_OVER_802_1X[];
104901 +extern u8 RSN_CIPHER_SUITE_NONE[];
104902 +extern u8 RSN_CIPHER_SUITE_WEP40[];
104903 +extern u8 RSN_CIPHER_SUITE_TKIP[];
104904 +extern u8 RSN_CIPHER_SUITE_WRAP[];
104905 +extern u8 RSN_CIPHER_SUITE_CCMP[];
104906 +extern u8 RSN_CIPHER_SUITE_WEP104[];
104907 +
104908 +typedef enum _RATR_TABLE_MODE{
104909 + RATR_INX_WIRELESS_NGB = 0, // BGN 40 Mhz 2SS 1SS
104910 + RATR_INX_WIRELESS_NG = 1, // GN or N
104911 + RATR_INX_WIRELESS_NB = 2, // BGN 20 Mhz 2SS 1SS or BN
104912 + RATR_INX_WIRELESS_N = 3,
104913 + RATR_INX_WIRELESS_GB = 4,
104914 + RATR_INX_WIRELESS_G = 5,
104915 + RATR_INX_WIRELESS_B = 6,
104916 + RATR_INX_WIRELESS_MC = 7,
104917 + RATR_INX_WIRELESS_AC_N = 8,
104918 +}RATR_TABLE_MODE, *PRATR_TABLE_MODE;
104919
104920 enum NETWORK_TYPE
104921 {
104922 @@ -166,12 +183,15 @@ enum NETWORK_TYPE
104923 WIRELESS_11A = BIT(2), // tx: ofdm only, rx: ofdm only, hw: ofdm only
104924 WIRELESS_11_24N = BIT(3), // tx: MCS only, rx: MCS & cck, hw: MCS & cck
104925 WIRELESS_11_5N = BIT(4), // tx: MCS only, rx: MCS & ofdm, hw: ofdm only
104926 + //WIRELESS_AUTO = BIT(5),
104927 + WIRELESS_AC = BIT(6),
104928
104929 //Combination
104930 WIRELESS_11BG = (WIRELESS_11B|WIRELESS_11G), // tx: cck & ofdm, rx: cck & ofdm & MCS, hw: cck & ofdm
104931 WIRELESS_11G_24N = (WIRELESS_11G|WIRELESS_11_24N), // tx: ofdm & MCS, rx: ofdm & cck & MCS, hw: cck & ofdm
104932 WIRELESS_11A_5N = (WIRELESS_11A|WIRELESS_11_5N), // tx: ofdm & MCS, rx: ofdm & MCS, hw: ofdm only
104933 WIRELESS_11BG_24N = (WIRELESS_11B|WIRELESS_11G|WIRELESS_11_24N), // tx: ofdm & cck & MCS, rx: ofdm & cck & MCS, hw: ofdm & cck
104934 + WIRELESS_11AGN = (WIRELESS_11A|WIRELESS_11G|WIRELESS_11_24N|WIRELESS_11_5N), // tx: ofdm & MCS, rx: ofdm & MCS, hw: ofdm only
104935 WIRELESS_11ABGN = (WIRELESS_11A|WIRELESS_11B|WIRELESS_11G|WIRELESS_11_24N|WIRELESS_11_5N),
104936 };
104937
104938 @@ -196,7 +216,7 @@ enum NETWORK_TYPE
104939 typedef struct ieee_param {
104940 u32 cmd;
104941 u8 sta_addr[ETH_ALEN];
104942 - union {
104943 + union {
104944 struct {
104945 u8 name;
104946 u32 value;
104947 @@ -236,6 +256,30 @@ typedef struct ieee_param {
104948 } u;
104949 }ieee_param;
104950
104951 +#ifdef CONFIG_AP_MODE
104952 +typedef struct ieee_param_ex {
104953 + u32 cmd;
104954 + u8 sta_addr[ETH_ALEN];
104955 + u8 data[0];
104956 +}ieee_param_ex;
104957 +
104958 +struct sta_data{
104959 + u16 aid;
104960 + u16 capability;
104961 + int flags;
104962 + u32 sta_set;
104963 + u8 tx_supp_rates[16];
104964 + u32 tx_supp_rates_len;
104965 + struct rtw_ieee80211_ht_cap ht_cap;
104966 + u64 rx_pkts;
104967 + u64 rx_bytes;
104968 + u64 rx_drops;
104969 + u64 tx_pkts;
104970 + u64 tx_bytes;
104971 + u64 tx_drops;
104972 +};
104973 +#endif
104974 +
104975
104976 #if WIRELESS_EXT < 17
104977 #define IW_QUAL_QUAL_INVALID 0x10
104978 @@ -271,7 +315,7 @@ struct ieee_ibss_seq {
104979 _list list;
104980 };
104981
104982 -#if defined(PLATFORM_LINUX) || defined(CONFIG_RTL8711FW)
104983 +#if defined(PLATFORM_LINUX) || defined(CONFIG_RTL8711FW)||defined(PLATFORM_FREEBSD)
104984
104985 struct rtw_ieee80211_hdr {
104986 u16 frame_ctl;
104987 @@ -304,7 +348,7 @@ struct rtw_ieee80211_hdr_qos {
104988 u16 qc;
104989 } __attribute__ ((packed));
104990
104991 -struct rtw_ieee80211_hdr_3addr_qos {
104992 +struct rtw_ieee80211_hdr_3addr_qos {
104993 u16 frame_ctl;
104994 u16 duration_id;
104995 u8 addr1[ETH_ALEN];
104996 @@ -350,11 +394,11 @@ struct rtw_ieee80211_hdr_3addr {
104997
104998
104999 struct rtw_ieee80211_hdr_qos {
105000 - struct rtw_ieee80211_hdr wlan_hdr;
105001 + struct rtw_ieee80211_hdr wlan_hdr;
105002 u16 qc;
105003 };
105004
105005 -struct rtw_ieee80211_hdr_3addr_qos {
105006 +struct rtw_ieee80211_hdr_3addr_qos {
105007 struct rtw_ieee80211_hdr_3addr wlan_hdr;
105008 u16 qc;
105009 };
105010 @@ -388,21 +432,23 @@ enum eap_type {
105011 #define MAX_FRAG_THRESHOLD 2346U
105012
105013 /* Frame control field constants */
105014 -#define RTW_IEEE80211_FCTL_VERS 0x0002
105015 +#define RTW_IEEE80211_FCTL_VERS 0x0003
105016 #define RTW_IEEE80211_FCTL_FTYPE 0x000c
105017 #define RTW_IEEE80211_FCTL_STYPE 0x00f0
105018 #define RTW_IEEE80211_FCTL_TODS 0x0100
105019 -#define RTW_IEEE80211_FCTL_FROMDS 0x0200
105020 +#define RTW_IEEE80211_FCTL_FROMDS 0x0200
105021 #define RTW_IEEE80211_FCTL_MOREFRAGS 0x0400
105022 #define RTW_IEEE80211_FCTL_RETRY 0x0800
105023 #define RTW_IEEE80211_FCTL_PM 0x1000
105024 #define RTW_IEEE80211_FCTL_MOREDATA 0x2000
105025 -#define RTW_IEEE80211_FCTL_WEP 0x4000
105026 +#define RTW_IEEE80211_FCTL_PROTECTED 0x4000
105027 #define RTW_IEEE80211_FCTL_ORDER 0x8000
105028 +#define RTW_IEEE80211_FCTL_CTL_EXT 0x0f00
105029
105030 #define RTW_IEEE80211_FTYPE_MGMT 0x0000
105031 #define RTW_IEEE80211_FTYPE_CTL 0x0004
105032 #define RTW_IEEE80211_FTYPE_DATA 0x0008
105033 +#define RTW_IEEE80211_FTYPE_EXT 0x000c
105034
105035 /* management */
105036 #define RTW_IEEE80211_STYPE_ASSOC_REQ 0x0000
105037 @@ -416,14 +462,18 @@ enum eap_type {
105038 #define RTW_IEEE80211_STYPE_DISASSOC 0x00A0
105039 #define RTW_IEEE80211_STYPE_AUTH 0x00B0
105040 #define RTW_IEEE80211_STYPE_DEAUTH 0x00C0
105041 +#define RTW_IEEE80211_STYPE_ACTION 0x00D0
105042
105043 /* control */
105044 +#define RTW_IEEE80211_STYPE_CTL_EXT 0x0060
105045 +#define RTW_IEEE80211_STYPE_BACK_REQ 0x0080
105046 +#define RTW_IEEE80211_STYPE_BACK 0x0090
105047 #define RTW_IEEE80211_STYPE_PSPOLL 0x00A0
105048 #define RTW_IEEE80211_STYPE_RTS 0x00B0
105049 #define RTW_IEEE80211_STYPE_CTS 0x00C0
105050 #define RTW_IEEE80211_STYPE_ACK 0x00D0
105051 #define RTW_IEEE80211_STYPE_CFEND 0x00E0
105052 -#define RTW_IEEE80211_STYPE_CFENDACK 0x00F0
105053 +#define RTW_IEEE80211_STYPE_CFENDACK 0x00F0
105054
105055 /* data */
105056 #define RTW_IEEE80211_STYPE_DATA 0x0000
105057 @@ -434,11 +484,23 @@ enum eap_type {
105058 #define RTW_IEEE80211_STYPE_CFACK 0x0050
105059 #define RTW_IEEE80211_STYPE_CFPOLL 0x0060
105060 #define RTW_IEEE80211_STYPE_CFACKPOLL 0x0070
105061 -#define RTW_IEEE80211_QOS_DATAGRP 0x0080
105062 -#define RTW_IEEE80211_QoS_DATAGRP RTW_IEEE80211_QOS_DATAGRP
105063 -
105064 -#define RTW_IEEE80211_SCTL_FRAG 0x000F
105065 -#define RTW_IEEE80211_SCTL_SEQ 0xFFF0
105066 +#define RTW_IEEE80211_STYPE_QOS_DATA 0x0080
105067 +#define RTW_IEEE80211_STYPE_QOS_DATA_CFACK 0x0090
105068 +#define RTW_IEEE80211_STYPE_QOS_DATA_CFPOLL 0x00A0
105069 +#define RTW_IEEE80211_STYPE_QOS_DATA_CFACKPOLL 0x00B0
105070 +#define RTW_IEEE80211_STYPE_QOS_NULLFUNC 0x00C0
105071 +#define RTW_IEEE80211_STYPE_QOS_CFACK 0x00D0
105072 +#define RTW_IEEE80211_STYPE_QOS_CFPOLL 0x00E0
105073 +#define RTW_IEEE80211_STYPE_QOS_CFACKPOLL 0x00F0
105074 +
105075 +/* sequence control field */
105076 +#define RTW_IEEE80211_SCTL_FRAG 0x000F
105077 +#define RTW_IEEE80211_SCTL_SEQ 0xFFF0
105078 +
105079 +
105080 +#define RTW_ERP_INFO_NON_ERP_PRESENT BIT(0)
105081 +#define RTW_ERP_INFO_USE_PROTECTION BIT(1)
105082 +#define RTW_ERP_INFO_BARKER_PREAMBLE_MODE BIT(2)
105083
105084 /* QoS,QOS */
105085 #define NORMAL_ACK 0
105086 @@ -462,7 +524,7 @@ enum eap_type {
105087
105088 #define P80211_OUI_LEN 3
105089
105090 -#if defined(PLATFORM_LINUX) || defined(CONFIG_RTL8711FW)
105091 +#if defined(PLATFORM_LINUX) || defined(CONFIG_RTL8711FW) || defined(PLATFORM_FREEBSD)
105092
105093 struct ieee80211_snap_hdr {
105094
105095 @@ -545,6 +607,7 @@ struct ieee80211_snap_hdr {
105096 #define WLAN_REASON_DISASSOC_STA_HAS_LEFT 8
105097 #define WLAN_REASON_STA_REQ_ASSOC_WITHOUT_AUTH 9
105098 #define WLAN_REASON_JOIN_WRONG_CHANNEL 65534
105099 +#define WLAN_REASON_EXPIRATION_CHK 65535
105100
105101 /* Information Element IDs */
105102 #define WLAN_EID_SSID 0
105103 @@ -694,6 +757,7 @@ struct ieee80211_frag_entry {
105104 u8 dst_addr[ETH_ALEN];
105105 };
105106
105107 +#ifndef PLATFORM_FREEBSD //Baron BSD has already defined
105108 struct ieee80211_stats {
105109 uint tx_unicast_frames;
105110 uint tx_multicast_frames;
105111 @@ -717,7 +781,7 @@ struct ieee80211_stats {
105112 uint rx_message_in_msg_fragments;
105113 uint rx_message_in_bad_msg_fragments;
105114 };
105115 -
105116 +#endif //PLATFORM_FREEBSD
105117 struct ieee80211_softmac_stats{
105118 uint rx_ass_ok;
105119 uint rx_ass_err;
105120 @@ -757,7 +821,10 @@ struct ieee80211_softmac_stats{
105121 #define WEP_KEYS 4
105122 #define WEP_KEY_LEN 13
105123
105124 -
105125 +#ifdef CONFIG_IEEE80211W
105126 +#define BIP_MAX_KEYID 5
105127 +#define BIP_AAD_SIZE 20
105128 +#endif //CONFIG_IEEE80211W
105129
105130 #if defined(PLATFORM_LINUX) || defined(CONFIG_RTL8711FW)
105131
105132 @@ -847,52 +914,6 @@ struct ieee80211_info_element {
105133 } __attribute__ ((packed));
105134 #endif
105135
105136 -#ifdef CONFIG_TDLS
105137 -/* TDLS */
105138 -#define TDLS_MIC_LEN 16
105139 -#define WPA_NONCE_LEN 32
105140 -#define TDLS_TIMEOUT_LEN 4
105141 -
105142 -struct wpa_tdls_ftie {
105143 - u8 ie_type; /* FTIE */
105144 - u8 ie_len;
105145 - u8 mic_ctrl[2];
105146 - u8 mic[TDLS_MIC_LEN];
105147 - u8 Anonce[WPA_NONCE_LEN]; /* Responder Nonce in TDLS */
105148 - u8 Snonce[WPA_NONCE_LEN]; /* Initiator Nonce in TDLS */
105149 - /* followed by optional elements */
105150 -} ;
105151 -
105152 -struct wpa_tdls_timeoutie {
105153 - u8 ie_type; /* Timeout IE */
105154 - u8 ie_len;
105155 - u8 interval_type;
105156 - u8 value[TDLS_TIMEOUT_LEN];
105157 -} ;
105158 -
105159 -struct wpa_tdls_lnkid {
105160 - u8 ie_type; /* Link Identifier IE */
105161 - u8 ie_len;
105162 - u8 bssid[ETH_ALEN];
105163 - u8 init_sta[ETH_ALEN];
105164 - u8 resp_sta[ETH_ALEN];
105165 -} ;
105166 -
105167 -static u8 TDLS_RSNIE[]={ 0x01, 0x00, //version shall be set to 1
105168 - 0x00, 0x0f, 0xac, 0x07, //group sipher suite
105169 - 0x01, 0x00, //pairwise cipher suite count
105170 - 0x00, 0x0f, 0xac, 0x04, //pairwise cipher suite list; CCMP only
105171 - 0x01, 0x00, //AKM suite count
105172 - 0x00, 0x0f, 0xac, 0x07, //TPK Handshake
105173 - 0x00, 0x02,
105174 - //PMKID shall not be present
105175 - };
105176 -
105177 -static u8 TDLS_WMMIE[]={0x00, 0x50, 0xf2, 0x02, 0x00, 0x01, 0x00}; //Qos info all set zero
105178 -
105179 -static u8 TDLS_EXT_CAPIE[] = {0x00, 0x00, 0x00, 0x50, 0x20}; //bit(28), bit(30), bit(37)
105180 -#endif
105181 -
105182 #ifdef PLATFORM_WINDOWS
105183
105184 #pragma pack(1)
105185 @@ -1052,7 +1073,7 @@ struct ieee80211_txb {
105186
105187 #define CRC_LENGTH 4U
105188
105189 -#define MAX_WPA_IE_LEN (128)
105190 +#define MAX_WPA_IE_LEN (256)
105191 #define MAX_WPS_IE_LEN (512)
105192 #define MAX_P2P_IE_LEN (256)
105193 #define MAX_WFD_IE_LEN (128)
105194 @@ -1120,6 +1141,8 @@ join_res:
105195 > 0: TID
105196 */
105197
105198 +#ifndef PLATFORM_FREEBSD //Baron BSD has already defined
105199 +
105200 enum ieee80211_state {
105201
105202 /* the card is not linked at all */
105203 @@ -1158,12 +1181,19 @@ enum ieee80211_state {
105204 IEEE80211_LINKED_SCANNING,
105205
105206 };
105207 +#endif //PLATFORM_FREEBSD
105208
105209 #define DEFAULT_MAX_SCAN_AGE (15 * HZ)
105210 #define DEFAULT_FTS 2346
105211 #define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x"
105212 #define MAC_ARG(x) ((u8*)(x))[0],((u8*)(x))[1],((u8*)(x))[2],((u8*)(x))[3],((u8*)(x))[4],((u8*)(x))[5]
105213
105214 +#ifdef PLATFORM_FREEBSD //Baron change func to macro
105215 +#define is_multicast_mac_addr(Addr) ((((Addr[0]) & 0x01) == 0x01) && ((Addr[0]) != 0xff))
105216 +#define is_broadcast_mac_addr(Addr) ((((Addr[0]) & 0xff) == 0xff) && (((Addr[1]) & 0xff) == 0xff) && \
105217 +(((Addr[2]) & 0xff) == 0xff) && (((Addr[3]) & 0xff) == 0xff) && (((Addr[4]) & 0xff) == 0xff) && \
105218 +(((Addr[5]) & 0xff) == 0xff))
105219 +#else
105220 extern __inline int is_multicast_mac_addr(const u8 *addr)
105221 {
105222 return ((addr[0] != 0xff) && (0x01 & addr[0]));
105223 @@ -1175,6 +1205,13 @@ extern __inline int is_broadcast_mac_add
105224 (addr[3] == 0xff) && (addr[4] == 0xff) && (addr[5] == 0xff));
105225 }
105226
105227 +extern __inline int is_zero_mac_addr(const u8 *addr)
105228 +{
105229 + return ((addr[0] == 0x00) && (addr[1] == 0x00) && (addr[2] == 0x00) && \
105230 + (addr[3] == 0x00) && (addr[4] == 0x00) && (addr[5] == 0x00));
105231 +}
105232 +#endif //PLATFORM_FREEBSD
105233 +
105234 #define CFG_IEEE80211_RESERVE_FCS (1<<0)
105235 #define CFG_IEEE80211_COMPUTE_FCS (1<<1)
105236
105237 @@ -1192,48 +1229,9 @@ typedef struct tx_pending_t{
105238 #define IEEE_G (1<<2)
105239 #define IEEE_MODE_MASK (IEEE_A|IEEE_B|IEEE_G)
105240
105241 -extern __inline int ieee80211_is_empty_essid(const char *essid, int essid_len)
105242 -{
105243 - /* Single white space is for Linksys APs */
105244 - if (essid_len == 1 && essid[0] == ' ')
105245 - return 1;
105246 -
105247 - /* Otherwise, if the entire essid is 0, we assume it is hidden */
105248 - while (essid_len) {
105249 - essid_len--;
105250 - if (essid[essid_len] != '\0')
105251 - return 0;
105252 - }
105253 -
105254 - return 1;
105255 -}
105256 -
105257 -extern __inline int ieee80211_get_hdrlen(u16 fc)
105258 -{
105259 - int hdrlen = 24;
105260 -
105261 - switch (WLAN_FC_GET_TYPE(fc)) {
105262 - case RTW_IEEE80211_FTYPE_DATA:
105263 - if (fc & RTW_IEEE80211_QOS_DATAGRP)
105264 - hdrlen += 2;
105265 - if ((fc & RTW_IEEE80211_FCTL_FROMDS) && (fc & RTW_IEEE80211_FCTL_TODS))
105266 - hdrlen += 6; /* Addr4 */
105267 - break;
105268 - case RTW_IEEE80211_FTYPE_CTL:
105269 - switch (WLAN_FC_GET_STYPE(fc)) {
105270 - case RTW_IEEE80211_STYPE_CTS:
105271 - case RTW_IEEE80211_STYPE_ACK:
105272 - hdrlen = 10;
105273 - break;
105274 - default:
105275 - hdrlen = 16;
105276 - break;
105277 - }
105278 - break;
105279 - }
105280 -
105281 - return hdrlen;
105282 -}
105283 +//Baron move to ieee80211.c
105284 +int ieee80211_is_empty_essid(const char *essid, int essid_len);
105285 +int ieee80211_get_hdrlen(u16 fc);
105286
105287 #if 0
105288 /* Action frame categories (IEEE 802.11-2007, 7.3.1.11, Table 7-24) */
105289 @@ -1259,7 +1257,9 @@ enum rtw_ieee80211_category {
105290 RTW_WLAN_CATEGORY_FT = 6,
105291 RTW_WLAN_CATEGORY_HT = 7,
105292 RTW_WLAN_CATEGORY_SA_QUERY = 8,
105293 + RTW_WLAN_CATEGORY_UNPROTECTED_WNM = 11, // add for CONFIG_IEEE80211W, none 11w also can use
105294 RTW_WLAN_CATEGORY_TDLS = 12,
105295 + RTW_WLAN_CATEGORY_SELF_PROTECTED = 15, // add for CONFIG_IEEE80211W, none 11w also can use
105296 RTW_WLAN_CATEGORY_WMM = 17,
105297 RTW_WLAN_CATEGORY_P2P = 0x7f,//P2P action frames
105298 };
105299 @@ -1276,8 +1276,22 @@ enum rtw_ieee80211_spectrum_mgmt_actionc
105300
105301 enum _PUBLIC_ACTION{
105302 ACT_PUBLIC_BSSCOEXIST = 0, // 20/40 BSS Coexistence
105303 + ACT_PUBLIC_DSE_ENABLE = 1,
105304 + ACT_PUBLIC_DSE_DEENABLE = 2,
105305 + ACT_PUBLIC_DSE_REG_LOCATION = 3,
105306 + ACT_PUBLIC_EXT_CHL_SWITCH = 4,
105307 + ACT_PUBLIC_DSE_MSR_REQ = 5,
105308 + ACT_PUBLIC_DSE_MSR_RPRT = 6,
105309 ACT_PUBLIC_MP = 7, // Measurement Pilot
105310 - ACT_PUBLIC_P2P = 9, // WIFI_DIRECT
105311 + ACT_PUBLIC_DSE_PWR_CONSTRAINT = 8,
105312 + ACT_PUBLIC_VENDOR = 9, // for WIFI_DIRECT
105313 + ACT_PUBLIC_GAS_INITIAL_REQ = 10,
105314 + ACT_PUBLIC_GAS_INITIAL_RSP = 11,
105315 + ACT_PUBLIC_GAS_COMEBACK_REQ = 12,
105316 + ACT_PUBLIC_GAS_COMEBACK_RSP = 13,
105317 + ACT_PUBLIC_TDLS_DISCOVERY_RSP = 14,
105318 + ACT_PUBLIC_LOCATION_TRACK = 15,
105319 + ACT_PUBLIC_MAX
105320 };
105321
105322 #ifdef CONFIG_TDLS
105323 @@ -1295,7 +1309,10 @@ enum TDLS_ACTION_FIELD{
105324 TDLS_DISCOVERY_REQUEST = 10,
105325 TDLS_DISCOVERY_RESPONSE = 14, //it's used in public action frame
105326 };
105327 -#endif
105328 +
105329 +#define TUNNELED_PROBE_REQ 15
105330 +#define TUNNELED_PROBE_RSP 16
105331 +#endif //CONFIG_TDLS
105332
105333 /* BACK action code */
105334 enum rtw_ieee80211_back_actioncode {
105335 @@ -1327,8 +1344,9 @@ enum rtw_ieee80211_back_parties {
105336
105337 #define OUI_MICROSOFT 0x0050f2 /* Microsoft (also used in Wi-Fi specs)
105338 * 00:50:F2 */
105339 -
105340 +#ifndef PLATFORM_FREEBSD //Baron BSD has defined
105341 #define WME_OUI_TYPE 2
105342 +#endif //PLATFORM_FREEBSD
105343 #define WME_OUI_SUBTYPE_INFORMATION_ELEMENT 0
105344 #define WME_OUI_SUBTYPE_PARAMETER_ELEMENT 1
105345 #define WME_OUI_SUBTYPE_TSPEC_ELEMENT 2
105346 @@ -1351,8 +1369,76 @@ enum rtw_ieee80211_back_parties {
105347
105348 #define VENDOR_HT_CAPAB_OUI_TYPE 0x33 /* 00-90-4c:0x33 */
105349
105350 +/**
105351 + * enum rtw_ieee80211_channel_flags - channel flags
105352 + *
105353 + * Channel flags set by the regulatory control code.
105354 + *
105355 + * @RTW_IEEE80211_CHAN_DISABLED: This channel is disabled.
105356 + * @RTW_IEEE80211_CHAN_PASSIVE_SCAN: Only passive scanning is permitted
105357 + * on this channel.
105358 + * @RTW_IEEE80211_CHAN_NO_IBSS: IBSS is not allowed on this channel.
105359 + * @RTW_IEEE80211_CHAN_RADAR: Radar detection is required on this channel.
105360 + * @RTW_IEEE80211_CHAN_NO_HT40PLUS: extension channel above this channel
105361 + * is not permitted.
105362 + * @RTW_IEEE80211_CHAN_NO_HT40MINUS: extension channel below this channel
105363 + * is not permitted.
105364 + */
105365 + enum rtw_ieee80211_channel_flags {
105366 + RTW_IEEE80211_CHAN_DISABLED = 1<<0,
105367 + RTW_IEEE80211_CHAN_PASSIVE_SCAN = 1<<1,
105368 + RTW_IEEE80211_CHAN_NO_IBSS = 1<<2,
105369 + RTW_IEEE80211_CHAN_RADAR = 1<<3,
105370 + RTW_IEEE80211_CHAN_NO_HT40PLUS = 1<<4,
105371 + RTW_IEEE80211_CHAN_NO_HT40MINUS = 1<<5,
105372 + };
105373 +
105374 + #define RTW_IEEE80211_CHAN_NO_HT40 \
105375 + (RTW_IEEE80211_CHAN_NO_HT40PLUS | RTW_IEEE80211_CHAN_NO_HT40MINUS)
105376 +
105377 +/* Represent channel details, subset of ieee80211_channel */
105378 +struct rtw_ieee80211_channel {
105379 + //enum ieee80211_band band;
105380 + //u16 center_freq;
105381 + u16 hw_value;
105382 + u32 flags;
105383 + //int max_antenna_gain;
105384 + //int max_power;
105385 + //int max_reg_power;
105386 + //bool beacon_found;
105387 + //u32 orig_flags;
105388 + //int orig_mag;
105389 + //int orig_mpwr;
105390 +};
105391 +
105392 +#define CHAN_FMT \
105393 + /*"band:%d, "*/ \
105394 + /*"center_freq:%u, "*/ \
105395 + "hw_value:%u, " \
105396 + "flags:0x%08x" \
105397 + /*"max_antenna_gain:%d\n"*/ \
105398 + /*"max_power:%d\n"*/ \
105399 + /*"max_reg_power:%d\n"*/ \
105400 + /*"beacon_found:%u\n"*/ \
105401 + /*"orig_flags:0x%08x\n"*/ \
105402 + /*"orig_mag:%d\n"*/ \
105403 + /*"orig_mpwr:%d\n"*/
105404 +
105405 +#define CHAN_ARG(channel) \
105406 + /*(channel)->band*/ \
105407 + /*, (channel)->center_freq*/ \
105408 + (channel)->hw_value \
105409 + , (channel)->flags \
105410 + /*, (channel)->max_antenna_gain*/ \
105411 + /*, (channel)->max_power*/ \
105412 + /*, (channel)->max_reg_power*/ \
105413 + /*, (channel)->beacon_found*/ \
105414 + /*, (channel)->orig_flags*/ \
105415 + /*, (channel)->orig_mag*/ \
105416 + /*, (channel)->orig_mpwr*/ \
105417 +
105418 /* Parsed Information Elements */
105419 -struct ieee802_11_elems {
105420 +struct rtw_ieee802_11_elems {
105421 u8 *ssid;
105422 u8 ssid_len;
105423 u8 *supp_rates;
105424 @@ -1404,12 +1490,27 @@ struct ieee802_11_elems {
105425 typedef enum { ParseOK = 0, ParseUnknown = 1, ParseFailed = -1 } ParseRes;
105426
105427 ParseRes rtw_ieee802_11_parse_elems(u8 *start, uint len,
105428 - struct ieee802_11_elems *elems,
105429 + struct rtw_ieee802_11_elems *elems,
105430 int show_errors);
105431
105432 u8 *rtw_set_fixed_ie(unsigned char *pbuf, unsigned int len, unsigned char *source, unsigned int *frlen);
105433 u8 *rtw_set_ie(u8 *pbuf, sint index, uint len, u8 *source, uint *frlen);
105434 +
105435 +enum secondary_ch_offset {
105436 + SCN = 0, /* no secondary channel */
105437 + SCA = 1, /* secondary channel above */
105438 + SCB = 3, /* secondary channel below */
105439 +};
105440 +u8 secondary_ch_offset_to_hal_ch_offset(u8 ch_offset);
105441 +u8 hal_ch_offset_to_secondary_ch_offset(u8 ch_offset);
105442 +u8 *rtw_set_ie_ch_switch(u8 *buf, u32 *buf_len, u8 ch_switch_mode, u8 new_ch, u8 ch_switch_cnt);
105443 +u8 *rtw_set_ie_secondary_ch_offset(u8 *buf, u32 *buf_len, u8 secondary_ch_offset);
105444 +u8 *rtw_set_ie_mesh_ch_switch_parm(u8 *buf, u32 *buf_len, u8 ttl, u8 flags, u16 reason, u16 precedence);
105445 +
105446 u8 *rtw_get_ie(u8*pbuf, sint index, sint *len, sint limit);
105447 +u8 *rtw_get_ie_ex(u8 *in_ie, uint in_len, u8 eid, u8 *oui, u8 oui_len, u8 *ie, uint *ielen);
105448 +int rtw_ies_remove_ie(u8 *ies, uint *ies_len, uint offset, u8 eid, u8 *oui, u8 oui_len);
105449 +
105450 void rtw_set_supported_rate(u8* SupportedRates, uint mode) ;
105451
105452 unsigned char *rtw_get_wpa_ie(unsigned char *pie, int *wpa_ie_len, int limit);
105453 @@ -1426,19 +1527,31 @@ u8 *rtw_get_wps_ie(u8 *in_ie, uint in_le
105454 u8 *rtw_get_wps_attr(u8 *wps_ie, uint wps_ielen, u16 target_attr_id ,u8 *buf_attr, u32 *len_attr);
105455 u8 *rtw_get_wps_attr_content(u8 *wps_ie, uint wps_ielen, u16 target_attr_id ,u8 *buf_content, uint *len_content);
105456
105457 -u8 *rtw_get_p2p_ie(u8 *in_ie, uint in_len, u8 *p2p_ie, uint *p2p_ielen);
105458 -u8 *rtw_get_p2p_attr(u8 *p2p_ie, uint p2p_ielen, u8 target_attr_id ,u8 *buf_attr, u32 *len_attr);
105459 -u8 *rtw_get_p2p_attr_content(u8 *p2p_ie, uint p2p_ielen, u8 target_attr_id ,u8 *buf_content, uint *len_content);
105460 -u32 rtw_set_p2p_attr_content(u8 *pbuf, u8 attr_id, u16 attr_len, u8 *pdata_attr);
105461 +/**
105462 + * for_each_ie - iterate over continuous IEs
105463 + * @ie:
105464 + * @buf:
105465 + * @buf_len:
105466 + */
105467 +#define for_each_ie(ie, buf, buf_len) \
105468 + for (ie = (void*)buf; (((u8*)ie) - ((u8*)buf) + 1) < buf_len; ie = (void*)(((u8*)ie) + *(((u8*)ie)+1) + 2))
105469
105470 void dump_ies(u8 *buf, u32 buf_len);
105471 void dump_wps_ie(u8 *ie, u32 ie_len);
105472 +
105473 #ifdef CONFIG_P2P
105474 +u32 rtw_get_p2p_merged_ies_len(u8 *in_ie, u32 in_len);
105475 +int rtw_p2p_merge_ies(u8 *in_ie, u32 in_len, u8 *merge_ie);
105476 void dump_p2p_ie(u8 *ie, u32 ie_len);
105477 +u8 *rtw_get_p2p_ie(u8 *in_ie, int in_len, u8 *p2p_ie, uint *p2p_ielen);
105478 +u8 *rtw_get_p2p_attr(u8 *p2p_ie, uint p2p_ielen, u8 target_attr_id ,u8 *buf_attr, u32 *len_attr);
105479 +u8 *rtw_get_p2p_attr_content(u8 *p2p_ie, uint p2p_ielen, u8 target_attr_id ,u8 *buf_content, uint *len_content);
105480 +u32 rtw_set_p2p_attr_content(u8 *pbuf, u8 attr_id, u16 attr_len, u8 *pdata_attr);
105481 void rtw_WLAN_BSSID_EX_remove_p2p_attr(WLAN_BSSID_EX *bss_ex, u8 attr_id);
105482 #endif
105483 +
105484 #ifdef CONFIG_WFD
105485 -int rtw_get_wfd_ie(u8 *in_ie, uint in_len, u8 *wfd_ie, uint *wfd_ielen);
105486 +int rtw_get_wfd_ie(u8 *in_ie, int in_len, u8 *wfd_ie, uint *wfd_ielen);
105487 int rtw_get_wfd_attr_content(u8 *wfd_ie, uint wfd_ielen, u8 target_attr_id ,u8 *attr_content, uint *attr_contentlen);
105488 #endif // CONFIG_WFD
105489
105490 @@ -1457,5 +1570,11 @@ uint rtw_is_cckratesonly_included(u8 *ra
105491 int rtw_check_network_type(unsigned char *rate, int ratelen, int channel);
105492
105493 void rtw_macaddr_cfg(u8 *mac_addr);
105494 +
105495 +u16 rtw_mcs_rate(u8 rf_type, u8 bw_40MHz, u8 short_GI_20, u8 short_GI_40, unsigned char * MCS_rate);
105496 +
105497 +int rtw_action_frame_parse(const u8 *frame, u32 frame_len, u8* category, u8 *action);
105498 +const char *action_public_str(u8 action);
105499 +
105500 #endif /* IEEE80211_H */
105501
105502 --- a/drivers/net/wireless/rtl8192cu/include/if_ether.h
105503 +++ b/drivers/net/wireless/rtl8192cu/include/if_ether.h
105504 @@ -1,22 +1,22 @@
105505 -/*
105506 - * INET An implementation of the TCP/IP protocol suite for the LINUX
105507 - * operating system. INET is implemented using the BSD Socket
105508 - * interface as the means of communication with the user level.
105509 +/******************************************************************************
105510 *
105511 - * Global definitions for the Ethernet IEEE 802.3 interface.
105512 + * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
105513 + *
105514 + * This program is free software; you can redistribute it and/or modify it
105515 + * under the terms of version 2 of the GNU General Public License as
105516 + * published by the Free Software Foundation.
105517 *
105518 - * Version: @(#)if_ether.h 1.0.1a 02/08/94
105519 + * This program is distributed in the hope that it will be useful, but WITHOUT
105520 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
105521 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
105522 + * more details.
105523 *
105524 - * Author: Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
105525 - * Donald Becker, <becker@super.org>
105526 - * Alan Cox, <alan@redhat.com>
105527 - * Steve Whitehouse, <gw7rrm@eeshack3.swan.ac.uk>
105528 + * You should have received a copy of the GNU General Public License along with
105529 + * this program; if not, write to the Free Software Foundation, Inc.,
105530 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
105531 *
105532 - * This program is free software; you can redistribute it and/or
105533 - * modify it under the terms of the GNU General Public License
105534 - * as published by the Free Software Foundation; either version
105535 - * 2 of the License, or (at your option) any later version.
105536 - */
105537 + *
105538 + ******************************************************************************/
105539
105540 #ifndef _LINUX_IF_ETHER_H
105541 #define _LINUX_IF_ETHER_H
105542 --- a/drivers/net/wireless/rtl8192cu/include/ioctl_cfg80211.h
105543 +++ b/drivers/net/wireless/rtl8192cu/include/ioctl_cfg80211.h
105544 @@ -27,6 +27,62 @@
105545 #error "We haven't verify our cfg80211 solution below kernel version 2.6.35"
105546 #endif
105547
105548 +#if defined(RTW_USE_CFG80211_STA_EVENT)
105549 + #undef CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER
105550 +#endif
105551 +
105552 +struct rtw_wdev_invit_info {
105553 + u8 state; /* 0: req, 1:rep */
105554 + u8 peer_mac[ETH_ALEN];
105555 + u8 active;
105556 + u8 token;
105557 + u8 flags;
105558 + u8 status;
105559 + u8 req_op_ch;
105560 + u8 rsp_op_ch;
105561 +};
105562 +
105563 +#define rtw_wdev_invit_info_init(invit_info) \
105564 + do { \
105565 + (invit_info)->state = 0xff; \
105566 + _rtw_memset((invit_info)->peer_mac, 0, ETH_ALEN); \
105567 + (invit_info)->active = 0xff; \
105568 + (invit_info)->token = 0; \
105569 + (invit_info)->flags = 0x00; \
105570 + (invit_info)->status = 0xff; \
105571 + (invit_info)->req_op_ch = 0; \
105572 + (invit_info)->rsp_op_ch = 0; \
105573 + } while (0)
105574 +
105575 +struct rtw_wdev_nego_info {
105576 + u8 state; /* 0: req, 1:rep, 3:conf */
105577 + u8 peer_mac[ETH_ALEN];
105578 + u8 active;
105579 + u8 token;
105580 + u8 status;
105581 + u8 req_intent;
105582 + u8 req_op_ch;
105583 + u8 req_listen_ch;
105584 + u8 rsp_intent;
105585 + u8 rsp_op_ch;
105586 + u8 conf_op_ch;
105587 +};
105588 +
105589 +#define rtw_wdev_nego_info_init(nego_info) \
105590 + do { \
105591 + (nego_info)->state = 0xff; \
105592 + _rtw_memset((nego_info)->peer_mac, 0, ETH_ALEN); \
105593 + (nego_info)->active = 0xff; \
105594 + (nego_info)->token = 0; \
105595 + (nego_info)->status = 0xff; \
105596 + (nego_info)->req_intent = 0xff; \
105597 + (nego_info)->req_op_ch = 0; \
105598 + (nego_info)->req_listen_ch = 0; \
105599 + (nego_info)->rsp_intent = 0xff; \
105600 + (nego_info)->rsp_op_ch = 0; \
105601 + (nego_info)->conf_op_ch = 0; \
105602 + } while (0)
105603 +
105604 struct rtw_wdev_priv
105605 {
105606 struct wireless_dev *rtw_wdev;
105607 @@ -43,8 +99,18 @@ struct rtw_wdev_priv
105608
105609 u8 provdisc_req_issued;
105610
105611 + struct rtw_wdev_invit_info invit_info;
105612 + struct rtw_wdev_nego_info nego_info;
105613 +
105614 + u8 bandroid_scan;
105615 bool block;
105616 + bool power_mgmt;
105617
105618 +#ifdef CONFIG_CONCURRENT_MODE
105619 + ATOMIC_T ro_ch_to;
105620 + ATOMIC_T switch_ch_to;
105621 +#endif
105622 +
105623 };
105624
105625 #define wdev_to_priv(w) ((struct rtw_wdev_priv *)(wdev_priv(w)))
105626 @@ -53,15 +119,14 @@ struct rtw_wdev_priv
105627
105628 #define wiphy_to_wdev(x) (struct wireless_dev *)(((struct rtw_wdev_priv*)wiphy_priv(x))->rtw_wdev)
105629
105630 -
105631 -
105632 int rtw_wdev_alloc(_adapter *padapter, struct device *dev);
105633 void rtw_wdev_free(struct wireless_dev *wdev);
105634 +void rtw_wdev_unregister(struct wireless_dev *wdev);
105635
105636 void rtw_cfg80211_init_wiphy(_adapter *padapter);
105637
105638 void rtw_cfg80211_surveydone_event_callback(_adapter *padapter);
105639 -
105640 +int rtw_cfg80211_check_bss(_adapter *padapter);
105641 void rtw_cfg80211_indicate_connect(_adapter *padapter);
105642 void rtw_cfg80211_indicate_disconnect(_adapter *padapter);
105643 void rtw_cfg80211_indicate_scan_done(struct rtw_wdev_priv *pwdev_priv, bool aborted);
105644 @@ -74,8 +139,42 @@ void rtw_cfg80211_indicate_sta_disassoc(
105645 void rtw_cfg80211_issue_p2p_provision_request(_adapter *padapter, const u8 *buf, size_t len);
105646 void rtw_cfg80211_rx_p2p_action_public(_adapter *padapter, u8 *pmgmt_frame, uint frame_len);
105647 void rtw_cfg80211_rx_action_p2p(_adapter *padapter, u8 *pmgmt_frame, uint frame_len);
105648 +void rtw_cfg80211_rx_action(_adapter *adapter, u8 *frame, uint frame_len, const char*msg);
105649
105650 int rtw_cfg80211_set_mgnt_wpsp2pie(struct net_device *net, char *buf, int len, int type);
105651
105652 +bool rtw_cfg80211_pwr_mgmt(_adapter *adapter);
105653 +
105654 +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0)) && !defined(COMPAT_KERNEL_RELEASE)
105655 +#define rtw_cfg80211_rx_mgmt(adapter, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt((adapter)->pnetdev, freq, buf, len, gfp)
105656 +#elif (LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0))
105657 +#define rtw_cfg80211_rx_mgmt(adapter, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt((adapter)->pnetdev, freq, sig_dbm, buf, len, gfp)
105658 +#else
105659 +#define rtw_cfg80211_rx_mgmt(adapter, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt((adapter)->rtw_wdev, freq, sig_dbm, buf, len, gfp)
105660 +#endif
105661 +
105662 +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0)) && !defined(COMPAT_KERNEL_RELEASE)
105663 +#define rtw_cfg80211_send_rx_assoc(adapter, bss, buf, len) cfg80211_send_rx_assoc((adapter)->pnetdev, buf, len)
105664 +#else
105665 +#define rtw_cfg80211_send_rx_assoc(adapter, bss, buf, len) cfg80211_send_rx_assoc((adapter)->pnetdev, bss, buf, len)
105666 +#endif
105667 +
105668 +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0))
105669 +#define rtw_cfg80211_mgmt_tx_status(adapter, cookie, buf, len, ack, gfp) cfg80211_mgmt_tx_status((adapter)->pnetdev, cookie, buf, len, ack, gfp)
105670 +#else
105671 +#define rtw_cfg80211_mgmt_tx_status(adapter, cookie, buf, len, ack, gfp) cfg80211_mgmt_tx_status((adapter)->rtw_wdev, cookie, buf, len, ack, gfp)
105672 +#endif
105673 +
105674 +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0))
105675 +#define rtw_cfg80211_ready_on_channel(adapter, cookie, chan, channel_type, duration, gfp) cfg80211_ready_on_channel((adapter)->pnetdev, cookie, chan, channel_type, duration, gfp)
105676 +#define rtw_cfg80211_remain_on_channel_expired(adapter, cookie, chan, chan_type, gfp) cfg80211_remain_on_channel_expired((adapter)->pnetdev, cookie, chan, chan_type, gfp)
105677 +#elif (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0))
105678 +#define rtw_cfg80211_ready_on_channel(adapter, cookie, chan, channel_type, duration, gfp) cfg80211_ready_on_channel((adapter)->rtw_wdev, cookie, chan, channel_type, duration, gfp)
105679 +#define rtw_cfg80211_remain_on_channel_expired(adapter, cookie, chan, chan_type, gfp) cfg80211_remain_on_channel_expired((adapter)->rtw_wdev, cookie, chan, chan_type, gfp)
105680 +#else
105681 +#define rtw_cfg80211_ready_on_channel(adapter, cookie, chan, channel_type, duration, gfp) cfg80211_ready_on_channel((adapter)->rtw_wdev, cookie, chan, duration, gfp)
105682 +#define rtw_cfg80211_remain_on_channel_expired(adapter, cookie, chan, chan_type, gfp) cfg80211_remain_on_channel_expired((adapter)->rtw_wdev, cookie, chan, gfp)
105683 +#endif
105684 +
105685 #endif //__IOCTL_CFG80211_H__
105686
105687 --- a/drivers/net/wireless/rtl8192cu/include/ip.h
105688 +++ b/drivers/net/wireless/rtl8192cu/include/ip.h
105689 @@ -1,19 +1,22 @@
105690 -/*
105691 - * INET An implementation of the TCP/IP protocol suite for the LINUX
105692 - * operating system. INET is implemented using the BSD Socket
105693 - * interface as the means of communication with the user level.
105694 +/******************************************************************************
105695 *
105696 - * Definitions for the IP protocol.
105697 + * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
105698 + *
105699 + * This program is free software; you can redistribute it and/or modify it
105700 + * under the terms of version 2 of the GNU General Public License as
105701 + * published by the Free Software Foundation.
105702 *
105703 - * Version: @(#)ip.h 1.0.2 04/28/93
105704 + * This program is distributed in the hope that it will be useful, but WITHOUT
105705 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
105706 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
105707 + * more details.
105708 *
105709 - * Authors: Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
105710 + * You should have received a copy of the GNU General Public License along with
105711 + * this program; if not, write to the Free Software Foundation, Inc.,
105712 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
105713 *
105714 - * This program is free software; you can redistribute it and/or
105715 - * modify it under the terms of the GNU General Public License
105716 - * as published by the Free Software Foundation; either version
105717 - * 2 of the License, or (at your option) any later version.
105718 - */
105719 + *
105720 + ******************************************************************************/
105721 #ifndef _LINUX_IP_H
105722 #define _LINUX_IP_H
105723 #include <rtw_byteorder.h>
105724 --- /dev/null
105725 +++ b/drivers/net/wireless/rtl8192cu/include/linux/wireless.h
105726 @@ -0,0 +1,90 @@
105727 +/******************************************************************************
105728 + *
105729 + * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
105730 + *
105731 + * This program is free software; you can redistribute it and/or modify it
105732 + * under the terms of version 2 of the GNU General Public License as
105733 + * published by the Free Software Foundation.
105734 + *
105735 + * This program is distributed in the hope that it will be useful, but WITHOUT
105736 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
105737 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
105738 + * more details.
105739 + *
105740 + * You should have received a copy of the GNU General Public License along with
105741 + * this program; if not, write to the Free Software Foundation, Inc.,
105742 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
105743 + *
105744 + *
105745 + ******************************************************************************/
105746 +
105747 +#ifndef _LINUX_WIRELESS_H
105748 +#define _LINUX_WIRELESS_H
105749 +
105750 +/***************************** INCLUDES *****************************/
105751 +
105752 +#if 0
105753 +#include <linux/types.h> /* for __u* and __s* typedefs */
105754 +#include <linux/socket.h> /* for "struct sockaddr" et al */
105755 +#include <linux/if.h> /* for IFNAMSIZ and co... */
105756 +#else
105757 +#define __user
105758 +//typedef uint16_t __u16;
105759 +#include <sys/socket.h> /* for "struct sockaddr" et al */
105760 +#include <net/if.h> /* for IFNAMSIZ and co... */
105761 +#endif
105762 +
105763 +/****************************** TYPES ******************************/
105764 +
105765 +/* --------------------------- SUBTYPES --------------------------- */
105766 +/*
105767 + * For all data larger than 16 octets, we need to use a
105768 + * pointer to memory allocated in user space.
105769 + */
105770 +struct iw_point
105771 +{
105772 + void __user *pointer; /* Pointer to the data (in user space) */
105773 + __u16 length; /* number of fields or size in bytes */
105774 + __u16 flags; /* Optional params */
105775 +};
105776 +
105777 +
105778 +/* ------------------------ IOCTL REQUEST ------------------------ */
105779 +/*
105780 + * This structure defines the payload of an ioctl, and is used
105781 + * below.
105782 + *
105783 + * Note that this structure should fit on the memory footprint
105784 + * of iwreq (which is the same as ifreq), which mean a max size of
105785 + * 16 octets = 128 bits. Warning, pointers might be 64 bits wide...
105786 + * You should check this when increasing the structures defined
105787 + * above in this file...
105788 + */
105789 +union iwreq_data
105790 +{
105791 + /* Config - generic */
105792 + char name[IFNAMSIZ];
105793 + /* Name : used to verify the presence of wireless extensions.
105794 + * Name of the protocol/provider... */
105795 +
105796 + struct iw_point data; /* Other large parameters */
105797 +};
105798 +
105799 +/*
105800 + * The structure to exchange data for ioctl.
105801 + * This structure is the same as 'struct ifreq', but (re)defined for
105802 + * convenience...
105803 + * Do I need to remind you about structure size (32 octets) ?
105804 + */
105805 +struct iwreq
105806 +{
105807 + union
105808 + {
105809 + char ifrn_name[IFNAMSIZ]; /* if name, e.g. "eth0" */
105810 + } ifr_ifrn;
105811 +
105812 + /* Data part (defined just above) */
105813 + union iwreq_data u;
105814 +};
105815 +
105816 +#endif /* _LINUX_WIRELESS_H */
105817 --- a/drivers/net/wireless/rtl8192cu/include/mlme_osdep.h
105818 +++ b/drivers/net/wireless/rtl8192cu/include/mlme_osdep.h
105819 @@ -34,10 +34,6 @@ extern void rtw_os_indicate_connect( _ad
105820 void rtw_os_indicate_scan_done( _adapter *padapter, bool aborted);
105821 extern void rtw_report_sec_ie(_adapter *adapter,u8 authmode,u8 *sec_ie);
105822
105823 -#ifdef CONFIG_AP_MODE
105824 -void rtw_indicate_sta_assoc_event(_adapter *padapter, struct sta_info *psta);
105825 -void rtw_indicate_sta_disassoc_event(_adapter *padapter, struct sta_info *psta);
105826 -#endif
105827 void rtw_reset_securitypriv( _adapter *adapter );
105828
105829 #endif //_MLME_OSDEP_H_
105830 --- a/drivers/net/wireless/rtl8192cu/include/osdep_intf.h
105831 +++ b/drivers/net/wireless/rtl8192cu/include/osdep_intf.h
105832 @@ -1,7 +1,7 @@
105833 /******************************************************************************
105834 *
105835 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
105836 - *
105837 + *
105838 * This program is free software; you can redistribute it and/or modify it
105839 * under the terms of version 2 of the GNU General Public License as
105840 * published by the Free Software Foundation.
105841 @@ -25,11 +25,8 @@
105842 #include <osdep_service.h>
105843 #include <drv_types.h>
105844
105845 -#define RND4(x) (((x >> 2) + (((x & 3) == 0) ? 0: 1)) << 2)
105846 -
105847 -
105848 struct intf_priv {
105849 -
105850 +
105851 u8 *intf_dev;
105852 u32 max_iosz; //USB2.0: 128, USB1.1: 64, SDIO:64
105853 u32 max_xmitsz; //USB2.0: unlimited, SDIO:512
105854 @@ -39,9 +36,9 @@ struct intf_priv {
105855 volatile u8 *allocated_io_rwmem;
105856 u32 io_wsz; //unit: 4bytes
105857 u32 io_rsz;//unit: 4bytes
105858 - u8 intf_status;
105859 -
105860 - void (*_bus_io)(u8 *priv);
105861 + u8 intf_status;
105862 +
105863 + void (*_bus_io)(u8 *priv);
105864
105865 /*
105866 Under Sync. IRP (SDIO/USB)
105867 @@ -53,9 +50,9 @@ The protection mechanism is through the
105868
105869 _mutex ioctl_mutex;
105870
105871 -
105872 -#ifdef PLATFORM_LINUX
105873 - #ifdef CONFIG_USB_HCI
105874 +
105875 +#ifdef PLATFORM_LINUX
105876 + #ifdef CONFIG_USB_HCI
105877 // when in USB, IO is through interrupt in/out endpoints
105878 struct usb_device *udev;
105879 PURB piorw_urb;
105880 @@ -70,7 +67,7 @@ The protection mechanism is through the
105881
105882 #ifdef PLATFORM_OS_XP
105883 #ifdef CONFIG_SDIO_HCI
105884 - // below is for io_rwmem...
105885 + // below is for io_rwmem...
105886 PMDL pmdl;
105887 PSDBUS_REQUEST_PACKET sdrp;
105888 PSDBUS_REQUEST_PACKET recv_sdrp;
105889 @@ -84,11 +81,11 @@ The protection mechanism is through the
105890 PIRP piorw_irp;
105891 u8 io_irp_cnt;
105892 u8 bio_irp_pending;
105893 - _sema io_retevt;
105894 - #endif
105895 + _sema io_retevt;
105896 + #endif
105897 #endif
105898
105899 -};
105900 +};
105901
105902
105903 #ifdef CONFIG_R871X_TEST
105904 @@ -96,6 +93,9 @@ int rtw_start_pseudo_adhoc(_adapter *pad
105905 int rtw_stop_pseudo_adhoc(_adapter *padapter);
105906 #endif
105907
105908 +struct dvobj_priv *devobj_init(void);
105909 +void devobj_deinit(struct dvobj_priv *pdvobj);
105910 +
105911 u8 rtw_init_drv_sw(_adapter *padapter);
105912 u8 rtw_free_drv_sw(_adapter *padapter);
105913 u8 rtw_reset_drv_sw(_adapter *padapter);
105914 @@ -109,20 +109,47 @@ int rtw_ioctl(struct net_device *dev, st
105915
105916 int rtw_init_netdev_name(struct net_device *pnetdev, const char *ifname);
105917 struct net_device *rtw_init_netdev(_adapter *padapter);
105918 +void rtw_unregister_netdevs(struct dvobj_priv *dvobj);
105919 +
105920 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
105921 +u16 rtw_recv_select_queue(struct sk_buff *skb);
105922 +#endif //LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35)
105923
105924 #ifdef CONFIG_PROC_DEBUG
105925 void rtw_proc_init_one(struct net_device *dev);
105926 void rtw_proc_remove_one(struct net_device *dev);
105927 -#endif
105928 -#endif
105929 +#else //!CONFIG_PROC_DEBUG
105930 +static void rtw_proc_init_one(struct net_device *dev){}
105931 +static void rtw_proc_remove_one(struct net_device *dev){}
105932 +#endif //!CONFIG_PROC_DEBUG
105933 +#endif //PLATFORM_LINUX
105934
105935
105936 +#ifdef PLATFORM_FREEBSD
105937 +extern int rtw_ioctl(struct ifnet * ifp, u_long cmd, caddr_t data);
105938 +#endif
105939 +
105940 void rtw_ips_dev_unload(_adapter *padapter);
105941 #ifdef CONFIG_IPS
105942 int rtw_ips_pwr_up(_adapter *padapter);
105943 void rtw_ips_pwr_down(_adapter *padapter);
105944 #endif
105945
105946 +#ifdef CONFIG_CONCURRENT_MODE
105947 +struct _io_ops;
105948 +_adapter *rtw_drv_if2_init(_adapter *primary_padapter, void (*set_intf_ops)(struct _io_ops *pops));
105949 +void rtw_drv_if2_free(_adapter *if2);
105950 +void rtw_drv_if2_stop(_adapter *if2);
105951 +#ifdef CONFIG_MULTI_VIR_IFACES
105952 +struct dvobj_priv;
105953 +_adapter *rtw_drv_add_vir_if(_adapter *primary_padapter, void (*set_intf_ops)(struct _io_ops *pops));
105954 +void rtw_drv_stop_vir_ifaces(struct dvobj_priv *dvobj);
105955 +void rtw_drv_free_vir_ifaces(struct dvobj_priv *dvobj);
105956 +#endif //CONFIG_MULTI_VIR_IFACES
105957 +#endif
105958 +
105959 +int rtw_drv_register_netdev(_adapter *padapter);
105960 +void rtw_ndev_destructor(_nic_hdl ndev);
105961
105962 #endif //_OSDEP_INTF_H_
105963
105964 --- a/drivers/net/wireless/rtl8192cu/include/osdep_service.h
105965 +++ b/drivers/net/wireless/rtl8192cu/include/osdep_service.h
105966 @@ -24,8 +24,9 @@
105967 #include <basic_types.h>
105968 //#include <rtl871x_byteorder.h>
105969
105970 -#define _SUCCESS 1
105971 #define _FAIL 0
105972 +#define _SUCCESS 1
105973 +#define RTW_RX_HANDLED 2
105974 //#define RTW_STATUS_TIMEDOUT -110
105975
105976 #undef _TRUE
105977 @@ -33,6 +34,719 @@
105978
105979 #undef _FALSE
105980 #define _FALSE 0
105981 +
105982 +
105983 +#ifdef PLATFORM_FREEBSD
105984 +#include <sys/cdefs.h>
105985 +#include <sys/types.h>
105986 +#include <sys/systm.h>
105987 +#include <sys/param.h>
105988 +#include <sys/sockio.h>
105989 +#include <sys/sysctl.h>
105990 +#include <sys/lock.h>
105991 +#include <sys/mutex.h>
105992 +#include <sys/mbuf.h>
105993 +#include <sys/kernel.h>
105994 +#include <sys/socket.h>
105995 +#include <sys/systm.h>
105996 +#include <sys/malloc.h>
105997 +#include <sys/module.h>
105998 +#include <sys/bus.h>
105999 +#include <sys/endian.h>
106000 +#include <sys/kdb.h>
106001 +#include <sys/kthread.h>
106002 +#include <machine/atomic.h>
106003 +
106004 +#include <machine/bus.h>
106005 +#include <machine/resource.h>
106006 +#include <sys/rman.h>
106007 +
106008 +#include <net/bpf.h>
106009 +#include <net/if.h>
106010 +#include <net/if_arp.h>
106011 +#include <net/ethernet.h>
106012 +#include <net/if_dl.h>
106013 +#include <net/if_media.h>
106014 +#include <net/if_types.h>
106015 +#include <net/route.h>
106016 +
106017 +
106018 +#include <netinet/in.h>
106019 +#include <netinet/in_systm.h>
106020 +#include <netinet/in_var.h>
106021 +#include <netinet/if_ether.h>
106022 +
106023 +#include <net80211/ieee80211_var.h>
106024 +#include <net80211/ieee80211_regdomain.h>
106025 +#include <net80211/ieee80211_radiotap.h>
106026 +#include <net80211/ieee80211_ratectl.h>
106027 +
106028 +#include <dev/usb/usb.h>
106029 +#include <dev/usb/usbdi.h>
106030 +#include "usbdevs.h"
106031 +
106032 +#define USB_DEBUG_VAR rum_debug
106033 +#include <dev/usb/usb_debug.h>
106034 +
106035 +#if 1 //Baron porting from linux, it's all temp solution, needs to check again
106036 +#include <sys/sema.h>
106037 +#include <sys/pcpu.h> /* XXX for PCPU_GET */
106038 +// typedef struct semaphore _sema;
106039 + typedef struct sema _sema;
106040 +// typedef spinlock_t _lock;
106041 + typedef struct mtx _lock;
106042 + typedef struct mtx _mutex;
106043 + typedef struct timer_list _timer;
106044 + struct list_head {
106045 + struct list_head *next, *prev;
106046 + };
106047 + struct __queue {
106048 + struct list_head queue;
106049 + _lock lock;
106050 + };
106051 +
106052 + //typedef struct sk_buff _pkt;
106053 + typedef struct mbuf _pkt;
106054 + typedef struct mbuf _buffer;
106055 +
106056 + typedef struct __queue _queue;
106057 + typedef struct list_head _list;
106058 + typedef int _OS_STATUS;
106059 + //typedef u32 _irqL;
106060 + typedef unsigned long _irqL;
106061 + typedef struct ifnet * _nic_hdl;
106062 +
106063 + typedef pid_t _thread_hdl_;
106064 +// typedef struct thread _thread_hdl_;
106065 + typedef void thread_return;
106066 + typedef void* thread_context;
106067 +
106068 + //#define thread_exit() complete_and_exit(NULL, 0)
106069 +
106070 + typedef void timer_hdl_return;
106071 + typedef void* timer_hdl_context;
106072 + typedef struct work_struct _workitem;
106073 +
106074 +#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
106075 +/* emulate a modern version */
106076 +#define LINUX_VERSION_CODE KERNEL_VERSION(2, 6, 35)
106077 +
106078 +#define WIRELESS_EXT -1
106079 +#define HZ hz
106080 +#define spin_lock_irqsave mtx_lock_irqsave
106081 +#define spin_lock_bh mtx_lock_irqsave
106082 +#define mtx_lock_irqsave(lock, x) mtx_lock(lock)//{local_irq_save((x)); mtx_lock_spin((lock));}
106083 +//#define IFT_RTW 0xf9 //ifnet allocate type for RTW
106084 +#define free_netdev if_free
106085 +#define LIST_CONTAINOR(ptr, type, member) \
106086 + ((type *)((char *)(ptr)-(SIZE_T)(&((type *)0)->member)))
106087 +#define container_of(p,t,n) (t*)((p)-&(((t*)0)->n))
106088 +/*
106089 + * Linux timers are emulated using FreeBSD callout functions
106090 + * (and taskqueue functionality).
106091 + *
106092 + * Currently no timer stats functionality.
106093 + *
106094 + * See (linux_compat) processes.c
106095 + *
106096 + */
106097 +struct timer_list {
106098 +
106099 + /* FreeBSD callout related fields */
106100 + struct callout callout;
106101 +
106102 + //timeout function
106103 + void (*function)(void*);
106104 + //argument
106105 + void *arg;
106106 +
106107 +};
106108 +struct workqueue_struct;
106109 +struct work_struct;
106110 +typedef void (*work_func_t)(struct work_struct *work);
106111 +/* Values for the state of an item of work (work_struct) */
106112 +typedef enum work_state {
106113 + WORK_STATE_UNSET = 0,
106114 + WORK_STATE_CALLOUT_PENDING = 1,
106115 + WORK_STATE_TASK_PENDING = 2,
106116 + WORK_STATE_WORK_CANCELLED = 3
106117 +} work_state_t;
106118 +
106119 +struct work_struct {
106120 + struct task task; /* FreeBSD task */
106121 + work_state_t state; /* the pending or otherwise state of work. */
106122 + work_func_t func;
106123 +};
106124 +#define spin_unlock_irqrestore mtx_unlock_irqrestore
106125 +#define spin_unlock_bh mtx_unlock_irqrestore
106126 +#define mtx_unlock_irqrestore(lock,x) mtx_unlock(lock);
106127 +extern void _rtw_spinlock_init(_lock *plock);
106128 +
106129 +//modify private structure to match freebsd
106130 +#define BITS_PER_LONG 32
106131 +union ktime {
106132 + s64 tv64;
106133 +#if BITS_PER_LONG != 64 && !defined(CONFIG_KTIME_SCALAR)
106134 + struct {
106135 +#ifdef __BIG_ENDIAN
106136 + s32 sec, nsec;
106137 +#else
106138 + s32 nsec, sec;
106139 +#endif
106140 + } tv;
106141 +#endif
106142 +};
106143 +#define kmemcheck_bitfield_begin(name)
106144 +#define kmemcheck_bitfield_end(name)
106145 +#define CHECKSUM_NONE 0
106146 +typedef unsigned char *sk_buff_data_t;
106147 +typedef union ktime ktime_t; /* Kill this */
106148 +
106149 +void rtw_mtx_lock(_lock *plock);
106150 +
106151 +void rtw_mtx_unlock(_lock *plock);
106152 +
106153 +/**
106154 + * struct sk_buff - socket buffer
106155 + * @next: Next buffer in list
106156 + * @prev: Previous buffer in list
106157 + * @sk: Socket we are owned by
106158 + * @tstamp: Time we arrived
106159 + * @dev: Device we arrived on/are leaving by
106160 + * @transport_header: Transport layer header
106161 + * @network_header: Network layer header
106162 + * @mac_header: Link layer header
106163 + * @_skb_refdst: destination entry (with norefcount bit)
106164 + * @sp: the security path, used for xfrm
106165 + * @cb: Control buffer. Free for use by every layer. Put private vars here
106166 + * @len: Length of actual data
106167 + * @data_len: Data length
106168 + * @mac_len: Length of link layer header
106169 + * @hdr_len: writable header length of cloned skb
106170 + * @csum: Checksum (must include start/offset pair)
106171 + * @csum_start: Offset from skb->head where checksumming should start
106172 + * @csum_offset: Offset from csum_start where checksum should be stored
106173 + * @local_df: allow local fragmentation
106174 + * @cloned: Head may be cloned (check refcnt to be sure)
106175 + * @nohdr: Payload reference only, must not modify header
106176 + * @pkt_type: Packet class
106177 + * @fclone: skbuff clone status
106178 + * @ip_summed: Driver fed us an IP checksum
106179 + * @priority: Packet queueing priority
106180 + * @users: User count - see {datagram,tcp}.c
106181 + * @protocol: Packet protocol from driver
106182 + * @truesize: Buffer size
106183 + * @head: Head of buffer
106184 + * @data: Data head pointer
106185 + * @tail: Tail pointer
106186 + * @end: End pointer
106187 + * @destructor: Destruct function
106188 + * @mark: Generic packet mark
106189 + * @nfct: Associated connection, if any
106190 + * @ipvs_property: skbuff is owned by ipvs
106191 + * @peeked: this packet has been seen already, so stats have been
106192 + * done for it, don't do them again
106193 + * @nf_trace: netfilter packet trace flag
106194 + * @nfctinfo: Relationship of this skb to the connection
106195 + * @nfct_reasm: netfilter conntrack re-assembly pointer
106196 + * @nf_bridge: Saved data about a bridged frame - see br_netfilter.c
106197 + * @skb_iif: ifindex of device we arrived on
106198 + * @rxhash: the packet hash computed on receive
106199 + * @queue_mapping: Queue mapping for multiqueue devices
106200 + * @tc_index: Traffic control index
106201 + * @tc_verd: traffic control verdict
106202 + * @ndisc_nodetype: router type (from link layer)
106203 + * @dma_cookie: a cookie to one of several possible DMA operations
106204 + * done by skb DMA functions
106205 + * @secmark: security marking
106206 + * @vlan_tci: vlan tag control information
106207 + */
106208 +
106209 +struct sk_buff {
106210 + /* These two members must be first. */
106211 + struct sk_buff *next;
106212 + struct sk_buff *prev;
106213 +
106214 + ktime_t tstamp;
106215 +
106216 + struct sock *sk;
106217 + //struct net_device *dev;
106218 + struct ifnet *dev;
106219 +
106220 + /*
106221 + * This is the control buffer. It is free to use for every
106222 + * layer. Please put your private variables there. If you
106223 + * want to keep them across layers you have to do a skb_clone()
106224 + * first. This is owned by whoever has the skb queued ATM.
106225 + */
106226 + char cb[48] __aligned(8);
106227 +
106228 + unsigned long _skb_refdst;
106229 +#ifdef CONFIG_XFRM
106230 + struct sec_path *sp;
106231 +#endif
106232 + unsigned int len,
106233 + data_len;
106234 + u16 mac_len,
106235 + hdr_len;
106236 + union {
106237 + u32 csum;
106238 + struct {
106239 + u16 csum_start;
106240 + u16 csum_offset;
106241 + }smbol2;
106242 + }smbol1;
106243 + u32 priority;
106244 + kmemcheck_bitfield_begin(flags1);
106245 + u8 local_df:1,
106246 + cloned:1,
106247 + ip_summed:2,
106248 + nohdr:1,
106249 + nfctinfo:3;
106250 + u8 pkt_type:3,
106251 + fclone:2,
106252 + ipvs_property:1,
106253 + peeked:1,
106254 + nf_trace:1;
106255 + kmemcheck_bitfield_end(flags1);
106256 + u16 protocol;
106257 +
106258 + void (*destructor)(struct sk_buff *skb);
106259 +#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
106260 + struct nf_conntrack *nfct;
106261 + struct sk_buff *nfct_reasm;
106262 +#endif
106263 +#ifdef CONFIG_BRIDGE_NETFILTER
106264 + struct nf_bridge_info *nf_bridge;
106265 +#endif
106266 +
106267 + int skb_iif;
106268 +#ifdef CONFIG_NET_SCHED
106269 + u16 tc_index; /* traffic control index */
106270 +#ifdef CONFIG_NET_CLS_ACT
106271 + u16 tc_verd; /* traffic control verdict */
106272 +#endif
106273 +#endif
106274 +
106275 + u32 rxhash;
106276 +
106277 + kmemcheck_bitfield_begin(flags2);
106278 + u16 queue_mapping:16;
106279 +#ifdef CONFIG_IPV6_NDISC_NODETYPE
106280 + u8 ndisc_nodetype:2,
106281 + deliver_no_wcard:1;
106282 +#else
106283 + u8 deliver_no_wcard:1;
106284 +#endif
106285 + kmemcheck_bitfield_end(flags2);
106286 +
106287 + /* 0/14 bit hole */
106288 +
106289 +#ifdef CONFIG_NET_DMA
106290 + dma_cookie_t dma_cookie;
106291 +#endif
106292 +#ifdef CONFIG_NETWORK_SECMARK
106293 + u32 secmark;
106294 +#endif
106295 + union {
106296 + u32 mark;
106297 + u32 dropcount;
106298 + }symbol3;
106299 +
106300 + u16 vlan_tci;
106301 +
106302 + sk_buff_data_t transport_header;
106303 + sk_buff_data_t network_header;
106304 + sk_buff_data_t mac_header;
106305 + /* These elements must be at the end, see alloc_skb() for details. */
106306 + sk_buff_data_t tail;
106307 + sk_buff_data_t end;
106308 + unsigned char *head,
106309 + *data;
106310 + unsigned int truesize;
106311 + atomic_t users;
106312 +};
106313 +struct sk_buff_head {
106314 + /* These two members must be first. */
106315 + struct sk_buff *next;
106316 + struct sk_buff *prev;
106317 +
106318 + u32 qlen;
106319 + _lock lock;
106320 +};
106321 +#define skb_tail_pointer(skb) skb->tail
106322 +static inline unsigned char *skb_put(struct sk_buff *skb, unsigned int len)
106323 +{
106324 + unsigned char *tmp = skb_tail_pointer(skb);
106325 + //SKB_LINEAR_ASSERT(skb);
106326 + skb->tail += len;
106327 + skb->len += len;
106328 + return tmp;
106329 +}
106330 +
106331 +static inline unsigned char *__skb_pull(struct sk_buff *skb, unsigned int len)
106332 +{
106333 + skb->len -= len;
106334 + if(skb->len < skb->data_len)
106335 + printf("%s(),%d,error!\n",__FUNCTION__,__LINE__);
106336 + return skb->data += len;
106337 +}
106338 +static inline unsigned char *skb_pull(struct sk_buff *skb, unsigned int len)
106339 +{
106340 + #ifdef PLATFORM_FREEBSD
106341 + return __skb_pull(skb, len);
106342 + #else
106343 + return unlikely(len > skb->len) ? NULL : __skb_pull(skb, len);
106344 + #endif //PLATFORM_FREEBSD
106345 +}
106346 +static inline u32 skb_queue_len(const struct sk_buff_head *list_)
106347 +{
106348 + return list_->qlen;
106349 +}
106350 +static inline void __skb_insert(struct sk_buff *newsk,
106351 + struct sk_buff *prev, struct sk_buff *next,
106352 + struct sk_buff_head *list)
106353 +{
106354 + newsk->next = next;
106355 + newsk->prev = prev;
106356 + next->prev = prev->next = newsk;
106357 + list->qlen++;
106358 +}
106359 +static inline void __skb_queue_before(struct sk_buff_head *list,
106360 + struct sk_buff *next,
106361 + struct sk_buff *newsk)
106362 +{
106363 + __skb_insert(newsk, next->prev, next, list);
106364 +}
106365 +static inline void skb_queue_tail(struct sk_buff_head *list,
106366 + struct sk_buff *newsk)
106367 +{
106368 + mtx_lock(&list->lock);
106369 + __skb_queue_before(list, (struct sk_buff *)list, newsk);
106370 + mtx_unlock(&list->lock);
106371 +}
106372 +static inline struct sk_buff *skb_peek(struct sk_buff_head *list_)
106373 +{
106374 + struct sk_buff *list = ((struct sk_buff *)list_)->next;
106375 + if (list == (struct sk_buff *)list_)
106376 + list = NULL;
106377 + return list;
106378 +}
106379 +static inline void __skb_unlink(struct sk_buff *skb, struct sk_buff_head *list)
106380 +{
106381 + struct sk_buff *next, *prev;
106382 +
106383 + list->qlen--;
106384 + next = skb->next;
106385 + prev = skb->prev;
106386 + skb->next = skb->prev = NULL;
106387 + next->prev = prev;
106388 + prev->next = next;
106389 +}
106390 +
106391 +static inline struct sk_buff *skb_dequeue(struct sk_buff_head *list)
106392 +{
106393 + mtx_lock(&list->lock);
106394 +
106395 + struct sk_buff *skb = skb_peek(list);
106396 + if (skb)
106397 + __skb_unlink(skb, list);
106398 +
106399 + mtx_unlock(&list->lock);
106400 +
106401 + return skb;
106402 +}
106403 +static inline void skb_reserve(struct sk_buff *skb, int len)
106404 +{
106405 + skb->data += len;
106406 + skb->tail += len;
106407 +}
106408 +static inline void __skb_queue_head_init(struct sk_buff_head *list)
106409 +{
106410 + list->prev = list->next = (struct sk_buff *)list;
106411 + list->qlen = 0;
106412 +}
106413 +/*
106414 + * This function creates a split out lock class for each invocation;
106415 + * this is needed for now since a whole lot of users of the skb-queue
106416 + * infrastructure in drivers have different locking usage (in hardirq)
106417 + * than the networking core (in softirq only). In the long run either the
106418 + * network layer or drivers should need annotation to consolidate the
106419 + * main types of usage into 3 classes.
106420 + */
106421 +static inline void skb_queue_head_init(struct sk_buff_head *list)
106422 +{
106423 + _rtw_spinlock_init(&list->lock);
106424 + __skb_queue_head_init(list);
106425 +}
106426 +unsigned long copy_from_user(void *to, const void *from, unsigned long n);
106427 +unsigned long copy_to_user(void *to, const void *from, unsigned long n);
106428 +struct sk_buff * dev_alloc_skb(unsigned int size);
106429 +struct sk_buff *skb_clone(const struct sk_buff *skb);
106430 +void dev_kfree_skb_any(struct sk_buff *skb);
106431 +#endif //Baron porting from linux, it's all temp solution, needs to check again
106432 +
106433 +
106434 +#if 1 // kenny add Linux compatibility code for Linux USB driver
106435 +#include <dev/usb/usb_compat_linux.h>
106436 +
106437 +#define __init // __attribute ((constructor))
106438 +#define __exit // __attribute ((destructor))
106439 +
106440 +/*
106441 + * Definitions for module_init and module_exit macros.
106442 + *
106443 + * These macros will use the SYSINIT framework to call a specified
106444 + * function (with no arguments) on module loading or unloading.
106445 + *
106446 + */
106447 +
106448 +void module_init_exit_wrapper(void *arg);
106449 +
106450 +#define module_init(initfn) \
106451 + SYSINIT(mod_init_ ## initfn, \
106452 + SI_SUB_KLD, SI_ORDER_FIRST, \
106453 + module_init_exit_wrapper, initfn)
106454 +
106455 +#define module_exit(exitfn) \
106456 + SYSUNINIT(mod_exit_ ## exitfn, \
106457 + SI_SUB_KLD, SI_ORDER_ANY, \
106458 + module_init_exit_wrapper, exitfn)
106459 +
106460 +/*
106461 + * The usb_register and usb_deregister functions are used to register
106462 + * usb drivers with the usb subsystem.
106463 + */
106464 +int usb_register(struct usb_driver *driver);
106465 +int usb_deregister(struct usb_driver *driver);
106466 +
106467 +/*
106468 + * usb_get_dev and usb_put_dev - increment/decrement the reference count
106469 + * of the usb device structure.
106470 + *
106471 + * Original body of usb_get_dev:
106472 + *
106473 + * if (dev)
106474 + * get_device(&dev->dev);
106475 + * return dev;
106476 + *
106477 + * Reference counts are not currently used in this compatibility
106478 + * layer. So these functions will do nothing.
106479 + */
106480 +static inline struct usb_device *
106481 +usb_get_dev(struct usb_device *dev)
106482 +{
106483 + return dev;
106484 +}
106485 +
106486 +static inline void
106487 +usb_put_dev(struct usb_device *dev)
106488 +{
106489 + return;
106490 +}
106491 +
106492 +
106493 +// rtw_usb_compat_linux
106494 +int rtw_usb_submit_urb(struct urb *urb, uint16_t mem_flags);
106495 +int rtw_usb_unlink_urb(struct urb *urb);
106496 +int rtw_usb_clear_halt(struct usb_device *dev, struct usb_host_endpoint *uhe);
106497 +int rtw_usb_control_msg(struct usb_device *dev, struct usb_host_endpoint *uhe,
106498 + uint8_t request, uint8_t requesttype,
106499 + uint16_t value, uint16_t index, void *data,
106500 + uint16_t size, usb_timeout_t timeout);
106501 +int rtw_usb_set_interface(struct usb_device *dev, uint8_t iface_no, uint8_t alt_index);
106502 +int rtw_usb_setup_endpoint(struct usb_device *dev,
106503 + struct usb_host_endpoint *uhe, usb_size_t bufsize);
106504 +struct urb *rtw_usb_alloc_urb(uint16_t iso_packets, uint16_t mem_flags);
106505 +struct usb_host_endpoint *rtw_usb_find_host_endpoint(struct usb_device *dev, uint8_t type, uint8_t ep);
106506 +struct usb_host_interface *rtw_usb_altnum_to_altsetting(const struct usb_interface *intf, uint8_t alt_index);
106507 +struct usb_interface *rtw_usb_ifnum_to_if(struct usb_device *dev, uint8_t iface_no);
106508 +void *rtw_usb_buffer_alloc(struct usb_device *dev, usb_size_t size, uint8_t *dma_addr);
106509 +void *rtw_usbd_get_intfdata(struct usb_interface *intf);
106510 +void rtw_usb_linux_register(void *arg);
106511 +void rtw_usb_linux_deregister(void *arg);
106512 +void rtw_usb_linux_free_device(struct usb_device *dev);
106513 +void rtw_usb_buffer_free(struct usb_device *dev, usb_size_t size,
106514 + void *addr, uint8_t dma_addr);
106515 +void rtw_usb_free_urb(struct urb *urb);
106516 +void rtw_usb_init_urb(struct urb *urb);
106517 +void rtw_usb_kill_urb(struct urb *urb);
106518 +void rtw_usb_set_intfdata(struct usb_interface *intf, void *data);
106519 +void rtw_usb_fill_bulk_urb(struct urb *urb, struct usb_device *udev,
106520 + struct usb_host_endpoint *uhe, void *buf,
106521 + int length, usb_complete_t callback, void *arg);
106522 +int rtw_usb_bulk_msg(struct usb_device *udev, struct usb_host_endpoint *uhe,
106523 + void *data, int len, uint16_t *pactlen, usb_timeout_t timeout);
106524 +void *usb_get_intfdata(struct usb_interface *intf);
106525 +int usb_linux_init_endpoints(struct usb_device *udev);
106526 +
106527 +
106528 +
106529 +typedef struct urb * PURB;
106530 +
106531 +typedef unsigned gfp_t;
106532 +#define __GFP_WAIT ((gfp_t)0x10u) /* Can wait and reschedule? */
106533 +#define __GFP_HIGH ((gfp_t)0x20u) /* Should access emergency pools? */
106534 +#define __GFP_IO ((gfp_t)0x40u) /* Can start physical IO? */
106535 +#define __GFP_FS ((gfp_t)0x80u) /* Can call down to low-level FS? */
106536 +#define __GFP_COLD ((gfp_t)0x100u) /* Cache-cold page required */
106537 +#define __GFP_NOWARN ((gfp_t)0x200u) /* Suppress page allocation failure warning */
106538 +#define __GFP_REPEAT ((gfp_t)0x400u) /* Retry the allocation. Might fail */
106539 +#define __GFP_NOFAIL ((gfp_t)0x800u) /* Retry for ever. Cannot fail */
106540 +#define __GFP_NORETRY ((gfp_t)0x1000u)/* Do not retry. Might fail */
106541 +#define __GFP_NO_GROW ((gfp_t)0x2000u)/* Slab internal usage */
106542 +#define __GFP_COMP ((gfp_t)0x4000u)/* Add compound page metadata */
106543 +#define __GFP_ZERO ((gfp_t)0x8000u)/* Return zeroed page on success */
106544 +#define __GFP_NOMEMALLOC ((gfp_t)0x10000u) /* Don't use emergency reserves */
106545 +#define __GFP_HARDWALL ((gfp_t)0x20000u) /* Enforce hardwall cpuset memory allocs */
106546 +
106547 +/* This equals 0, but use constants in case they ever change */
106548 +#define GFP_NOWAIT (GFP_ATOMIC & ~__GFP_HIGH)
106549 +/* GFP_ATOMIC means both !wait (__GFP_WAIT not set) and use emergency pool */
106550 +#define GFP_ATOMIC (__GFP_HIGH)
106551 +#define GFP_NOIO (__GFP_WAIT)
106552 +#define GFP_NOFS (__GFP_WAIT | __GFP_IO)
106553 +#define GFP_KERNEL (__GFP_WAIT | __GFP_IO | __GFP_FS)
106554 +#define GFP_USER (__GFP_WAIT | __GFP_IO | __GFP_FS | __GFP_HARDWALL)
106555 +#define GFP_HIGHUSER (__GFP_WAIT | __GFP_IO | __GFP_FS | __GFP_HARDWALL | \
106556 + __GFP_HIGHMEM)
106557 +
106558 +
106559 +#endif // kenny add Linux compatibility code for Linux USB
106560 +
106561 +
106562 +
106563 +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
106564 + #define DMA_BIT_MASK(n) (((n) == 64) ? ~0ULL : ((1ULL<<(n))-1))
106565 +#endif
106566 +
106567 +__inline static _list *get_next(_list *list)
106568 +{
106569 + return list->next;
106570 +}
106571 +
106572 +__inline static _list *get_list_head(_queue *queue)
106573 +{
106574 + return (&(queue->queue));
106575 +}
106576 +
106577 +
106578 +#define LIST_CONTAINOR(ptr, type, member) \
106579 + ((type *)((char *)(ptr)-(SIZE_T)(&((type *)0)->member)))
106580 +
106581 +
106582 +__inline static void _enter_critical(_lock *plock, _irqL *pirqL)
106583 +{
106584 + spin_lock_irqsave(plock, *pirqL);
106585 +}
106586 +
106587 +__inline static void _exit_critical(_lock *plock, _irqL *pirqL)
106588 +{
106589 + spin_unlock_irqrestore(plock, *pirqL);
106590 +}
106591 +
106592 +__inline static void _enter_critical_ex(_lock *plock, _irqL *pirqL)
106593 +{
106594 + spin_lock_irqsave(plock, *pirqL);
106595 +}
106596 +
106597 +__inline static void _exit_critical_ex(_lock *plock, _irqL *pirqL)
106598 +{
106599 + spin_unlock_irqrestore(plock, *pirqL);
106600 +}
106601 +
106602 +__inline static void _enter_critical_bh(_lock *plock, _irqL *pirqL)
106603 +{
106604 + spin_lock_bh(plock, *pirqL);
106605 +}
106606 +
106607 +__inline static void _exit_critical_bh(_lock *plock, _irqL *pirqL)
106608 +{
106609 + spin_unlock_bh(plock, *pirqL);
106610 +}
106611 +
106612 +__inline static void _enter_critical_mutex(_mutex *pmutex, _irqL *pirqL)
106613 +{
106614 +
106615 + mtx_lock(pmutex);
106616 +
106617 +}
106618 +
106619 +
106620 +__inline static void _exit_critical_mutex(_mutex *pmutex, _irqL *pirqL)
106621 +{
106622 +
106623 + mtx_unlock(pmutex);
106624 +
106625 +}
106626 +static inline void __list_del(struct list_head * prev, struct list_head * next)
106627 +{
106628 + next->prev = prev;
106629 + prev->next = next;
106630 +}
106631 +static inline void INIT_LIST_HEAD(struct list_head *list)
106632 +{
106633 + list->next = list;
106634 + list->prev = list;
106635 +}
106636 +__inline static void rtw_list_delete(_list *plist)
106637 +{
106638 + __list_del(plist->prev, plist->next);
106639 + INIT_LIST_HEAD(plist);
106640 +}
106641 +
106642 +__inline static void _init_timer(_timer *ptimer,_nic_hdl padapter,void *pfunc,void* cntx)
106643 +{
106644 + ptimer->function = pfunc;
106645 + ptimer->arg = cntx;
106646 + callout_init(&ptimer->callout, CALLOUT_MPSAFE);
106647 +}
106648 +
106649 +__inline static void _set_timer(_timer *ptimer,u32 delay_time)
106650 +{
106651 + // mod_timer(ptimer , (jiffies+(delay_time*HZ/1000)));
106652 + if(ptimer->function && ptimer->arg){
106653 + rtw_mtx_lock(NULL);
106654 + callout_reset(&ptimer->callout, delay_time,ptimer->function, ptimer->arg);
106655 + rtw_mtx_unlock(NULL);
106656 + }
106657 +}
106658 +
106659 +__inline static void _cancel_timer(_timer *ptimer,u8 *bcancelled)
106660 +{
106661 + // del_timer_sync(ptimer);
106662 + // *bcancelled= _TRUE;//TRUE ==1; FALSE==0
106663 + rtw_mtx_lock(NULL);
106664 + callout_drain(&ptimer->callout);
106665 + rtw_mtx_unlock(NULL);
106666 +}
106667 +
106668 +__inline static void _init_workitem(_workitem *pwork, void *pfunc, PVOID cntx)
106669 +{
106670 + printf("%s Not implement yet! \n",__FUNCTION__);
106671 +}
106672 +
106673 +__inline static void _set_workitem(_workitem *pwork)
106674 +{
106675 + printf("%s Not implement yet! \n",__FUNCTION__);
106676 +// schedule_work(pwork);
106677 +}
106678 +
106679 +//
106680 +// Global Mutex: can only be used at PASSIVE level.
106681 +//
106682 +
106683 +#define ACQUIRE_GLOBAL_MUTEX(_MutexCounter) \
106684 +{ \
106685 +}
106686 +
106687 +#define RELEASE_GLOBAL_MUTEX(_MutexCounter) \
106688 +{ \
106689 +}
106690 +
106691 +#define ATOMIC_INIT(i) { (i) }
106692 +
106693 +#endif //PLATFORM_FREEBSD
106694
106695
106696 #ifdef PLATFORM_LINUX
106697 @@ -69,16 +783,18 @@
106698 #include <linux/rtnetlink.h>
106699 #include <linux/delay.h>
106700 #include <linux/proc_fs.h> // Necessary because we use the proc fs
106701 + #include <linux/interrupt.h> // for struct tasklet_struct
106702 + #include <linux/ip.h>
106703 + #include <linux/kthread.h>
106704
106705 #ifdef CONFIG_IOCTL_CFG80211
106706 // #include <linux/ieee80211.h>
106707 - #include <net/ieee80211_radiotap.h>
106708 + #include <net/ieee80211_radiotap.h>
106709 #include <net/cfg80211.h>
106710 #endif //CONFIG_IOCTL_CFG80211
106711
106712 #ifdef CONFIG_TCP_CSUM_OFFLOAD_TX
106713 #include <linux/in.h>
106714 - #include <linux/ip.h>
106715 #include <linux/udp.h>
106716 #endif
106717
106718 @@ -91,18 +807,10 @@
106719 #endif
106720 #endif
106721
106722 -#ifdef CONFIG_SDIO_HCI
106723 - #include <linux/mmc/sdio_func.h>
106724 - #include <linux/mmc/sdio_ids.h>
106725 -#endif
106726 -
106727 #ifdef CONFIG_PCI_HCI
106728 #include <linux/pci.h>
106729 #endif
106730
106731 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,7,0))
106732 - #include <linux/kthread.h>
106733 -#endif
106734
106735 #ifdef CONFIG_USB_HCI
106736 typedef struct urb * PURB;
106737 @@ -136,12 +844,8 @@
106738 //typedef u32 _irqL;
106739 typedef unsigned long _irqL;
106740 typedef struct net_device * _nic_hdl;
106741 -
106742 -#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,7,0))
106743 - typedef pid_t _thread_hdl_;
106744 -#else
106745 - typedef struct task_struct * _thread_hdl_;
106746 -#endif
106747 +
106748 + typedef void* _thread_hdl_;
106749 typedef int thread_return;
106750 typedef void* thread_context;
106751
106752 @@ -156,7 +860,26 @@
106753 #endif
106754
106755 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22))
106756 - #define skb_tail_pointer(skb) skb->tail
106757 +// Porting from linux kernel, for compatible with old kernel.
106758 +static inline unsigned char *skb_tail_pointer(const struct sk_buff *skb)
106759 +{
106760 + return skb->tail;
106761 +}
106762 +
106763 +static inline void skb_reset_tail_pointer(struct sk_buff *skb)
106764 +{
106765 + skb->tail = skb->data;
106766 +}
106767 +
106768 +static inline void skb_set_tail_pointer(struct sk_buff *skb, const int offset)
106769 +{
106770 + skb->tail = skb->data + offset;
106771 +}
106772 +
106773 +static inline unsigned char *skb_end_pointer(const struct sk_buff *skb)
106774 +{
106775 + return skb->end;
106776 +}
106777 #endif
106778
106779 __inline static _list *get_next(_list *list)
106780 @@ -271,6 +994,15 @@ __inline static void _set_workitem(_work
106781 schedule_work(pwork);
106782 }
106783
106784 +__inline static void _cancel_workitem_sync(_workitem *pwork)
106785 +{
106786 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,22))
106787 + cancel_work_sync(pwork);
106788 +#else
106789 + flush_scheduled_work();
106790 +#endif
106791 +}
106792 +
106793 //
106794 // Global Mutex: can only be used at PASSIVE level.
106795 //
106796 @@ -289,6 +1021,45 @@ __inline static void _set_workitem(_work
106797 atomic_dec((atomic_t *)&(_MutexCounter)); \
106798 }
106799
106800 +static inline int rtw_netif_queue_stopped(struct net_device *pnetdev)
106801 +{
106802 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
106803 + return (netif_tx_queue_stopped(netdev_get_tx_queue(pnetdev, 0)) &&
106804 + netif_tx_queue_stopped(netdev_get_tx_queue(pnetdev, 1)) &&
106805 + netif_tx_queue_stopped(netdev_get_tx_queue(pnetdev, 2)) &&
106806 + netif_tx_queue_stopped(netdev_get_tx_queue(pnetdev, 3)) );
106807 +#else
106808 + return netif_queue_stopped(pnetdev);
106809 +#endif
106810 +}
106811 +
106812 +static inline void rtw_netif_wake_queue(struct net_device *pnetdev)
106813 +{
106814 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
106815 + netif_tx_wake_all_queues(pnetdev);
106816 +#else
106817 + netif_wake_queue(pnetdev);
106818 +#endif
106819 +}
106820 +
106821 +static inline void rtw_netif_start_queue(struct net_device *pnetdev)
106822 +{
106823 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
106824 + netif_tx_start_all_queues(pnetdev);
106825 +#else
106826 + netif_start_queue(pnetdev);
106827 +#endif
106828 +}
106829 +
106830 +static inline void rtw_netif_stop_queue(struct net_device *pnetdev)
106831 +{
106832 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
106833 + netif_tx_stop_all_queues(pnetdev);
106834 +#else
106835 + netif_stop_queue(pnetdev);
106836 +#endif
106837 +}
106838 +
106839 #endif // PLATFORM_LINUX
106840
106841
106842 @@ -296,7 +1067,6 @@ __inline static void _set_workitem(_work
106843
106844 #include <ndis.h>
106845 #include <ntddk.h>
106846 - #include <ntddsd.h>
106847 #include <ntddndis.h>
106848 #include <ntdef.h>
106849
106850 @@ -470,46 +1240,160 @@ extern int RTW_STATUS_CODE(int error_cod
106851
106852 #define CONFIG_USE_VMALLOC
106853
106854 +/* flags used for rtw_mstat_update() */
106855 +enum mstat_f {
106856 + /* type: 0x00ff */
106857 + MSTAT_TYPE_VIR = 0x00,
106858 + MSTAT_TYPE_PHY= 0x01,
106859 + MSTAT_TYPE_SKB = 0x02,
106860 + MSTAT_TYPE_USB = 0x03,
106861 + MSTAT_TYPE_MAX = 0x04,
106862 +
106863 + /* func: 0xff00 */
106864 + MSTAT_FUNC_UNSPECIFIED = 0x00<<8,
106865 + MSTAT_FUNC_IO = 0x01<<8,
106866 + MSTAT_FUNC_TX_IO = 0x02<<8,
106867 + MSTAT_FUNC_RX_IO = 0x03<<8,
106868 + MSTAT_FUNC_TX = 0x04<<8,
106869 + MSTAT_FUNC_RX = 0x05<<8,
106870 + MSTAT_FUNC_MAX = 0x06<<8,
106871 +};
106872 +
106873 +#define mstat_tf_idx(flags) ((flags)&0xff)
106874 +#define mstat_ff_idx(flags) (((flags)&0xff00) >> 8)
106875 +
106876 +typedef enum mstat_status{
106877 + MSTAT_ALLOC_SUCCESS = 0,
106878 + MSTAT_ALLOC_FAIL,
106879 + MSTAT_FREE
106880 +} MSTAT_STATUS;
106881 +
106882 #ifdef DBG_MEM_ALLOC
106883 -void rtw_dump_mem_stat (void);
106884 -extern u8* dbg_rtw_vmalloc(u32 sz, const char *func, int line);
106885 -extern u8* dbg_rtw_zvmalloc(u32 sz, const char *func, int line);
106886 -extern void dbg_rtw_vmfree(u8 *pbuf, u32 sz, const char *func, int line);
106887 -extern u8* dbg_rtw_malloc(u32 sz, const char *func, int line);
106888 -extern u8* dbg_rtw_zmalloc(u32 sz, const char *func, int line);
106889 -extern void dbg_rtw_mfree(u8 *pbuf, u32 sz, const char *func, int line);
106890 +void rtw_mstat_update(const enum mstat_f flags, const MSTAT_STATUS status, u32 sz);
106891 +int _rtw_mstat_dump(char *buf, int len);
106892 +void rtw_mstat_dump (void);
106893 +u8* dbg_rtw_vmalloc(u32 sz, const enum mstat_f flags, const char *func, const int line);
106894 +u8* dbg_rtw_zvmalloc(u32 sz, const enum mstat_f flags, const char *func, const int line);
106895 +void dbg_rtw_vmfree(u8 *pbuf, const enum mstat_f flags, u32 sz, const char *func, const int line);
106896 +u8* dbg_rtw_malloc(u32 sz, const enum mstat_f flags, const char *func, const int line);
106897 +u8* dbg_rtw_zmalloc(u32 sz, const enum mstat_f flags, const char *func, const int line);
106898 +void dbg_rtw_mfree(u8 *pbuf, const enum mstat_f flags, u32 sz, const char *func, const int line);
106899 +
106900 +struct sk_buff * dbg_rtw_skb_alloc(unsigned int size, const enum mstat_f flags, const char *func, const int line);
106901 +void dbg_rtw_skb_free(struct sk_buff *skb, const enum mstat_f flags, const char *func, const int line);
106902 +struct sk_buff *dbg_rtw_skb_copy(const struct sk_buff *skb, const enum mstat_f flags, const char *func, const int line);
106903 +struct sk_buff *dbg_rtw_skb_clone(struct sk_buff *skb, const enum mstat_f flags, const char *func, const int line);
106904 +int dbg_rtw_netif_rx(_nic_hdl ndev, struct sk_buff *skb, const enum mstat_f flags, const char *func, int line);
106905 +void dbg_rtw_skb_queue_purge(struct sk_buff_head *list, enum mstat_f flags, const char *func, int line);
106906 +
106907 +#ifdef CONFIG_USB_HCI
106908 +void *dbg_rtw_usb_buffer_alloc(struct usb_device *dev, size_t size, dma_addr_t *dma, const enum mstat_f flags, const char *func, const int line);
106909 +void dbg_rtw_usb_buffer_free(struct usb_device *dev, size_t size, void *addr, dma_addr_t dma, const enum mstat_f flags, const char *func, const int line);
106910 +#endif /* CONFIG_USB_HCI */
106911 +
106912 #ifdef CONFIG_USE_VMALLOC
106913 -#define rtw_vmalloc(sz) dbg_rtw_vmalloc((sz), __FUNCTION__, __LINE__)
106914 -#define rtw_zvmalloc(sz) dbg_rtw_zvmalloc((sz), __FUNCTION__, __LINE__)
106915 -#define rtw_vmfree(pbuf, sz) dbg_rtw_vmfree((pbuf), (sz), __FUNCTION__, __LINE__)
106916 -#else //CONFIG_USE_VMALLOC
106917 -#define rtw_vmalloc(sz) dbg_rtw_malloc((sz), __FUNCTION__, __LINE__)
106918 -#define rtw_zvmalloc(sz) dbg_rtw_zmalloc((sz), __FUNCTION__, __LINE__)
106919 -#define rtw_vmfree(pbuf, sz) dbg_rtw_mfree((pbuf), (sz), __FUNCTION__, __LINE__)
106920 -#endif //CONFIG_USE_VMALLOC
106921 -#define rtw_malloc(sz) dbg_rtw_malloc((sz), __FUNCTION__, __LINE__)
106922 -#define rtw_zmalloc(sz) dbg_rtw_zmalloc((sz), __FUNCTION__, __LINE__)
106923 -#define rtw_mfree(pbuf, sz) dbg_rtw_mfree((pbuf), (sz), __FUNCTION__, __LINE__)
106924 -#else
106925 -extern u8* _rtw_vmalloc(u32 sz);
106926 -extern u8* _rtw_zvmalloc(u32 sz);
106927 -extern void _rtw_vmfree(u8 *pbuf, u32 sz);
106928 -extern u8* _rtw_zmalloc(u32 sz);
106929 -extern u8* _rtw_malloc(u32 sz);
106930 -extern void _rtw_mfree(u8 *pbuf, u32 sz);
106931 +#define rtw_vmalloc(sz) dbg_rtw_vmalloc((sz), MSTAT_TYPE_VIR, __FUNCTION__, __LINE__)
106932 +#define rtw_zvmalloc(sz) dbg_rtw_zvmalloc((sz), MSTAT_TYPE_VIR, __FUNCTION__, __LINE__)
106933 +#define rtw_vmfree(pbuf, sz) dbg_rtw_vmfree((pbuf), (sz), MSTAT_TYPE_VIR, __FUNCTION__, __LINE__)
106934 +#define rtw_vmalloc_f(sz, mstat_f) dbg_rtw_vmalloc((sz), ((mstat_f)&0xff00)|MSTAT_TYPE_VIR, __FUNCTION__, __LINE__)
106935 +#define rtw_zvmalloc_f(sz, mstat_f) dbg_rtw_zvmalloc((sz), ((mstat_f)&0xff00)|MSTAT_TYPE_VIR, __FUNCTION__, __LINE__)
106936 +#define rtw_vmfree_f(pbuf, sz, mstat_f) dbg_rtw_vmfree((pbuf), (sz), ((mstat_f)&0xff00)|MSTAT_TYPE_VIR, __FUNCTION__, __LINE__)
106937 +#else /* CONFIG_USE_VMALLOC */
106938 +#define rtw_vmalloc(sz) dbg_rtw_malloc((sz), MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
106939 +#define rtw_zvmalloc(sz) dbg_rtw_zmalloc((sz), MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
106940 +#define rtw_vmfree(pbuf, sz) dbg_rtw_mfree((pbuf), (sz), MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
106941 +#define rtw_vmalloc_f(sz, mstat_f) dbg_rtw_malloc((sz), ((mstat_f)&0xff00)|MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
106942 +#define rtw_zvmalloc_f(sz, mstat_f) dbg_rtw_zmalloc((sz), ((mstat_f)&0xff00)|MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
106943 +#define rtw_vmfree_f(pbuf, sz, mstat_f) dbg_rtw_mfree((pbuf), (sz), ((mstat_f)&0xff00)|MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
106944 +#endif /* CONFIG_USE_VMALLOC */
106945 +#define rtw_malloc(sz) dbg_rtw_malloc((sz), MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
106946 +#define rtw_zmalloc(sz) dbg_rtw_zmalloc((sz), MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
106947 +#define rtw_mfree(pbuf, sz) dbg_rtw_mfree((pbuf), (sz), MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
106948 +#define rtw_malloc_f(sz, mstat_f) dbg_rtw_malloc((sz), ((mstat_f)&0xff00)|MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
106949 +#define rtw_zmalloc_f(sz, mstat_f) dbg_rtw_zmalloc((sz), ((mstat_f)&0xff00)|MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
106950 +#define rtw_mfree_f(pbuf, sz, mstat_f) dbg_rtw_mfree((pbuf), (sz), ((mstat_f)&0xff00)|MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
106951 +
106952 +#define rtw_skb_alloc(size) dbg_rtw_skb_alloc((size), MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
106953 +#define rtw_skb_free(skb) dbg_rtw_skb_free((skb), MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
106954 +#define rtw_skb_alloc_f(size, mstat_f) dbg_rtw_skb_alloc((size), ((mstat_f)&0xff00)|MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
106955 +#define rtw_skb_free_f(skb, mstat_f) dbg_rtw_skb_free((skb), ((mstat_f)&0xff00)|MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
106956 +#define rtw_skb_copy(skb) dbg_rtw_skb_copy((skb), MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
106957 +#define rtw_skb_clone(skb) dbg_rtw_skb_clone((skb), MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
106958 +#define rtw_skb_copy_f(skb, mstat_f) dbg_rtw_skb_copy((skb), ((mstat_f)&0xff00)|MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
106959 +#define rtw_skb_clone_f(skb, mstat_f) dbg_rtw_skb_clone((skb), ((mstat_f)&0xff00)|MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
106960 +#define rtw_netif_rx(ndev, skb) dbg_rtw_netif_rx(ndev, skb, MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
106961 +#define rtw_skb_queue_purge(sk_buff_head) dbg_rtw_skb_queue_purge(sk_buff_head, MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
106962 +#ifdef CONFIG_USB_HCI
106963 +#define rtw_usb_buffer_alloc(dev, size, dma) dbg_rtw_usb_buffer_alloc((dev), (size), (dma), MSTAT_TYPE_USB, __FUNCTION__, __LINE__)
106964 +#define rtw_usb_buffer_free(dev, size, addr, dma) dbg_rtw_usb_buffer_free((dev), (size), (addr), (dma), MSTAT_TYPE_USB, __FUNCTION__, __LINE__)
106965 +#define rtw_usb_buffer_alloc_f(dev, size, dma, mstat_f) dbg_rtw_usb_buffer_alloc((dev), (size), (dma), ((mstat_f)&0xff00)|MSTAT_TYPE_USB, __FUNCTION__, __LINE__)
106966 +#define rtw_usb_buffer_free_f(dev, size, addr, dma, mstat_f) dbg_rtw_usb_buffer_free((dev), (size), (addr), (dma), ((mstat_f)&0xff00)|MSTAT_TYPE_USB, __FUNCTION__, __LINE__)
106967 +#endif /* CONFIG_USB_HCI */
106968 +
106969 +#else /* DBG_MEM_ALLOC */
106970 +#define rtw_mstat_update(flag, status, sz) do {} while(0)
106971 +#define rtw_mstat_dump() do {} while(0)
106972 +u8* _rtw_vmalloc(u32 sz);
106973 +u8* _rtw_zvmalloc(u32 sz);
106974 +void _rtw_vmfree(u8 *pbuf, u32 sz);
106975 +u8* _rtw_zmalloc(u32 sz);
106976 +u8* _rtw_malloc(u32 sz);
106977 +void _rtw_mfree(u8 *pbuf, u32 sz);
106978 +
106979 +struct sk_buff *_rtw_skb_alloc(u32 sz);
106980 +void _rtw_skb_free(struct sk_buff *skb);
106981 +struct sk_buff *_rtw_skb_copy(const struct sk_buff *skb);
106982 +struct sk_buff *_rtw_skb_clone(struct sk_buff *skb);
106983 +int _rtw_netif_rx(_nic_hdl ndev, struct sk_buff *skb);
106984 +void _rtw_skb_queue_purge(struct sk_buff_head *list);
106985 +
106986 +#ifdef CONFIG_USB_HCI
106987 +void *_rtw_usb_buffer_alloc(struct usb_device *dev, size_t size, dma_addr_t *dma);
106988 +void _rtw_usb_buffer_free(struct usb_device *dev, size_t size, void *addr, dma_addr_t dma);
106989 +#endif /* CONFIG_USB_HCI */
106990 +
106991 #ifdef CONFIG_USE_VMALLOC
106992 #define rtw_vmalloc(sz) _rtw_vmalloc((sz))
106993 #define rtw_zvmalloc(sz) _rtw_zvmalloc((sz))
106994 #define rtw_vmfree(pbuf, sz) _rtw_vmfree((pbuf), (sz))
106995 -#else //CONFIG_USE_VMALLOC
106996 +#define rtw_vmalloc_f(sz, mstat_f) _rtw_vmalloc((sz))
106997 +#define rtw_zvmalloc_f(sz, mstat_f) _rtw_zvmalloc((sz))
106998 +#define rtw_vmfree_f(pbuf, sz, mstat_f) _rtw_vmfree((pbuf), (sz))
106999 +#else /* CONFIG_USE_VMALLOC */
107000 #define rtw_vmalloc(sz) _rtw_malloc((sz))
107001 #define rtw_zvmalloc(sz) _rtw_zmalloc((sz))
107002 #define rtw_vmfree(pbuf, sz) _rtw_mfree((pbuf), (sz))
107003 -#endif //CONFIG_USE_VMALLOC
107004 +#define rtw_vmalloc_f(sz, mstat_f) _rtw_malloc((sz))
107005 +#define rtw_zvmalloc_f(sz, mstat_f) _rtw_zmalloc((sz))
107006 +#define rtw_vmfree_f(pbuf, sz, mstat_f) _rtw_mfree((pbuf), (sz))
107007 +#endif /* CONFIG_USE_VMALLOC */
107008 #define rtw_malloc(sz) _rtw_malloc((sz))
107009 #define rtw_zmalloc(sz) _rtw_zmalloc((sz))
107010 #define rtw_mfree(pbuf, sz) _rtw_mfree((pbuf), (sz))
107011 -#endif
107012 +#define rtw_malloc_f(sz, mstat_f) _rtw_malloc((sz))
107013 +#define rtw_zmalloc_f(sz, mstat_f) _rtw_zmalloc((sz))
107014 +#define rtw_mfree_f(pbuf, sz, mstat_f) _rtw_mfree((pbuf), (sz))
107015 +
107016 +#define rtw_skb_alloc(size) _rtw_skb_alloc((size))
107017 +#define rtw_skb_free(skb) _rtw_skb_free((skb))
107018 +#define rtw_skb_alloc_f(size, mstat_f) _rtw_skb_alloc((size))
107019 +#define rtw_skb_free_f(skb, mstat_f) _rtw_skb_free((skb))
107020 +#define rtw_skb_copy(skb) _rtw_skb_copy((skb))
107021 +#define rtw_skb_clone(skb) _rtw_skb_clone((skb))
107022 +#define rtw_skb_copy_f(skb, mstat_f) _rtw_skb_copy((skb))
107023 +#define rtw_skb_clone_f(skb, mstat_f) _rtw_skb_clone((skb))
107024 +#define rtw_netif_rx(ndev, skb) _rtw_netif_rx(ndev, skb)
107025 +#define rtw_skb_queue_purge(sk_buff_head) _rtw_skb_queue_purge(sk_buff_head)
107026 +#ifdef CONFIG_USB_HCI
107027 +#define rtw_usb_buffer_alloc(dev, size, dma) _rtw_usb_buffer_alloc((dev), (size), (dma))
107028 +#define rtw_usb_buffer_free(dev, size, addr, dma) _rtw_usb_buffer_free((dev), (size), (addr), (dma))
107029 +#define rtw_usb_buffer_alloc_f(dev, size, dma, mstat_f) _rtw_usb_buffer_alloc((dev), (size), (dma))
107030 +#define rtw_usb_buffer_free_f(dev, size, addr, dma, mstat_f) _rtw_usb_buffer_free((dev), (size), (addr), (dma))
107031 +#endif /* CONFIG_USB_HCI */
107032 +#endif /* DBG_MEM_ALLOC */
107033 +
107034 +extern void* rtw_malloc2d(int h, int w, int size);
107035 +extern void rtw_mfree2d(void *pbuf, int h, int w, int size);
107036
107037 extern void _rtw_memcpy(void* dec, void* sour, u32 sz);
107038 extern int _rtw_memcmp(void *dst, void *src, u32 sz);
107039 @@ -517,8 +1401,11 @@ extern void _rtw_memset(void *pbuf, int
107040
107041 extern void _rtw_init_listhead(_list *list);
107042 extern u32 rtw_is_list_empty(_list *phead);
107043 +extern void rtw_list_insert_head(_list *plist, _list *phead);
107044 extern void rtw_list_insert_tail(_list *plist, _list *phead);
107045 +#ifndef PLATFORM_FREEBSD
107046 extern void rtw_list_delete(_list *plist);
107047 +#endif //PLATFORM_FREEBSD
107048
107049 extern void _rtw_init_sema(_sema *sema, int init_val);
107050 extern void _rtw_free_sema(_sema *sema);
107051 @@ -526,7 +1413,9 @@ extern void _rtw_up_sema(_sema *sema);
107052 extern u32 _rtw_down_sema(_sema *sema);
107053 extern void _rtw_mutex_init(_mutex *pmutex);
107054 extern void _rtw_mutex_free(_mutex *pmutex);
107055 +#ifndef PLATFORM_FREEBSD
107056 extern void _rtw_spinlock_init(_lock *plock);
107057 +#endif //PLATFORM_FREEBSD
107058 extern void _rtw_spinlock_free(_lock *plock);
107059 extern void _rtw_spinlock(_lock *plock);
107060 extern void _rtw_spinunlock(_lock *plock);
107061 @@ -539,6 +1428,7 @@ extern u32 rtw_end_of_queue_search(_list
107062
107063 extern u32 rtw_get_current_time(void);
107064 extern u32 rtw_systime_to_ms(u32 systime);
107065 +extern u32 rtw_ms_to_systime(u32 ms);
107066 extern s32 rtw_get_passing_time_ms(u32 start);
107067 extern s32 rtw_get_time_interval_ms(u32 start, u32 end);
107068
107069 @@ -547,6 +1437,8 @@ extern void rtw_sleep_schedulable(int ms
107070 extern void rtw_msleep_os(int ms);
107071 extern void rtw_usleep_os(int us);
107072
107073 +extern u32 rtw_atoi(u8* s);
107074 +
107075 #ifdef DBG_DELAY_OS
107076 #define rtw_mdelay_os(ms) _rtw_mdelay_os((ms), __FUNCTION__, __LINE__)
107077 #define rtw_udelay_os(ms) _rtw_udelay_os((ms), __FUNCTION__, __LINE__)
107078 @@ -557,6 +1449,7 @@ extern void rtw_mdelay_os(int ms);
107079 extern void rtw_udelay_os(int us);
107080 #endif
107081
107082 +extern void rtw_yield_os(void);
107083
107084
107085 __inline static unsigned char _cancel_timer_ex(_timer *ptimer)
107086 @@ -564,7 +1457,10 @@ __inline static unsigned char _cancel_ti
107087 #ifdef PLATFORM_LINUX
107088 return del_timer_sync(ptimer);
107089 #endif
107090 -
107091 +#ifdef PLATFORM_FREEBSD
107092 + _cancel_timer(ptimer,0);
107093 + return 0;
107094 +#endif
107095 #ifdef PLATFORM_WINDOWS
107096 u8 bcancelled;
107097
107098 @@ -574,16 +1470,25 @@ __inline static unsigned char _cancel_ti
107099 #endif
107100 }
107101
107102 -__inline static void thread_enter(void *context)
107103 +#ifdef PLATFORM_FREEBSD
107104 +static __inline void thread_enter(void *context);
107105 +#endif //PLATFORM_FREEBSD
107106 +static __inline void thread_enter(char *name)
107107 {
107108 #ifdef PLATFORM_LINUX
107109 - //struct net_device *pnetdev = (struct net_device *)context;
107110 - //daemonize("%s", pnetdev->name);
107111 - //daemonize("%s", "RTKTHREAD");
107112 + #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 8, 0))
107113 + daemonize("%s", name);
107114 + #endif
107115 allow_signal(SIGTERM);
107116 #endif
107117 +#ifdef PLATFORM_FREEBSD
107118 + printf("%s", "RTKTHREAD_enter");
107119 +#endif
107120 }
107121
107122 +#ifdef PLATFORM_FREEBSD
107123 +#define thread_exit() do{printf("%s", "RTKTHREAD_exit");}while(0)
107124 +#endif //PLATFORM_FREEBSD
107125 __inline static void flush_signals_thread(void)
107126 {
107127 #ifdef PLATFORM_LINUX
107128 @@ -598,7 +1503,7 @@ __inline static _OS_STATUS res_to_status
107129 {
107130
107131
107132 -#if defined (PLATFORM_LINUX) || defined (PLATFORM_MPIXEL)
107133 +#if defined (PLATFORM_LINUX) || defined (PLATFORM_MPIXEL) || defined (PLATFORM_FREEBSD)
107134 return res;
107135 #endif
107136
107137 @@ -613,6 +1518,22 @@ __inline static _OS_STATUS res_to_status
107138
107139 }
107140
107141 +__inline static void rtw_dump_stack(void)
107142 +{
107143 +#ifdef PLATFORM_LINUX
107144 + dump_stack();
107145 +#endif
107146 +}
107147 +
107148 +#ifdef PLATFORM_LINUX
107149 +#define rtw_warn_on(condition) WARN_ON(condition)
107150 +#else
107151 +#define rtw_warn_on(condition) do {} while (0)
107152 +#endif
107153 +
107154 +#define _RND(sz, r) ((((sz)+((r)-1))/(r))*(r))
107155 +#define RND4(x) (((x >> 2) + (((x & 3) == 0) ? 0: 1)) << 2)
107156 +
107157 __inline static u32 _RND4(u32 sz)
107158 {
107159
107160 @@ -712,6 +1633,7 @@ extern void rtw_suspend_lock_init(void);
107161 extern void rtw_suspend_lock_uninit(void);
107162 extern void rtw_lock_suspend(void);
107163 extern void rtw_unlock_suspend(void);
107164 +extern void rtw_lock_suspend_timeout(u32 timeout_ms);
107165
107166
107167 //Atomic integer operations
107168 @@ -719,6 +1641,8 @@ extern void rtw_unlock_suspend(void);
107169 #define ATOMIC_T atomic_t
107170 #elif defined(PLATFORM_WINDOWS)
107171 #define ATOMIC_T LONG
107172 +#elif defined(PLATFORM_FREEBSD)
107173 + typedef uint32_t ATOMIC_T ;
107174 #endif
107175
107176 extern void ATOMIC_SET(ATOMIC_T *v, int i);
107177 @@ -738,7 +1662,6 @@ extern int rtw_retrive_from_file(char *p
107178 extern int rtw_store_to_file(char *path, u8* buf, u32 sz);
107179
107180
107181 -
107182 #if 1 //#ifdef MEM_ALLOC_REFINE_ADAPTOR
107183 struct rtw_netdev_priv_indicator {
107184 void *priv;
107185 @@ -746,20 +1669,58 @@ struct rtw_netdev_priv_indicator {
107186 };
107187 struct net_device *rtw_alloc_etherdev_with_old_priv(int sizeof_priv, void *old_priv);
107188 extern struct net_device * rtw_alloc_etherdev(int sizeof_priv);
107189 +
107190 +#ifndef PLATFORM_FREEBSD
107191 #define rtw_netdev_priv(netdev) ( ((struct rtw_netdev_priv_indicator *)netdev_priv(netdev))->priv )
107192 +#else //PLATFORM_FREEBSD
107193 +#define rtw_netdev_priv(netdev) (((struct ifnet *)netdev)->if_softc)
107194 +#endif //PLATFORM_FREEBSD
107195 +
107196 +#ifndef PLATFORM_FREEBSD
107197 extern void rtw_free_netdev(struct net_device * netdev);
107198 -#else
107199 +#else //PLATFORM_FREEBSD
107200 +#define rtw_free_netdev(netdev) if_free((netdev))
107201 +#endif //PLATFORM_FREEBSD
107202 +
107203 +#else //MEM_ALLOC_REFINE_ADAPTOR
107204 +
107205 #define rtw_alloc_etherdev(sizeof_priv) alloc_etherdev((sizeof_priv))
107206 +
107207 +#ifndef PLATFORM_FREEBSD
107208 #define rtw_netdev_priv(netdev) netdev_priv((netdev))
107209 #define rtw_free_netdev(netdev) free_netdev((netdev))
107210 +#else //PLATFORM_FREEBSD
107211 +#define rtw_netdev_priv(netdev) (((struct ifnet *)netdev)->if_softc)
107212 +#define rtw_free_netdev(netdev) if_free((netdev))
107213 +#endif //PLATFORM_FREEBSD
107214 +#endif
107215 +
107216 +#ifdef PLATFORM_LINUX
107217 +#define NDEV_FMT "%s"
107218 +#define NDEV_ARG(ndev) ndev->name
107219 +#define ADPT_FMT "%s"
107220 +#define ADPT_ARG(adapter) adapter->pnetdev->name
107221 +#define FUNC_NDEV_FMT "%s(%s)"
107222 +#define FUNC_NDEV_ARG(ndev) __func__, ndev->name
107223 +#define FUNC_ADPT_FMT "%s(%s)"
107224 +#define FUNC_ADPT_ARG(adapter) __func__, adapter->pnetdev->name
107225 +#else
107226 +#define NDEV_FMT "%s"
107227 +#define NDEV_ARG(ndev) ""
107228 +#define ADPT_FMT "%s"
107229 +#define ADPT_ARG(adapter) ""
107230 +#define FUNC_NDEV_FMT "%s"
107231 +#define FUNC_NDEV_ARG(ndev) __func__
107232 +#define FUNC_ADPT_FMT "%s"
107233 +#define FUNC_ADPT_ARG(adapter) __func__
107234 #endif
107235
107236 #ifdef PLATFORM_LINUX
107237 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27))
107238 #define rtw_signal_process(pid, sig) kill_pid(find_vpid((pid)),(sig), 1)
107239 -#else
107240 +#else //(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27))
107241 #define rtw_signal_process(pid, sig) kill_proc((pid), (sig), 1)
107242 -#endif
107243 +#endif //(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27))
107244 #endif //PLATFORM_LINUX
107245
107246 extern u64 rtw_modular64(u64 x, u64 y);
107247 @@ -832,10 +1793,23 @@ extern u64 rtw_division64(u64 x, u64 y);
107248 (((u64) (a)[3]) << 24) | (((u64) (a)[2]) << 16) | \
107249 (((u64) (a)[1]) << 8) | ((u64) (a)[0]))
107250
107251 -#endif
107252 +void rtw_buf_free(u8 **buf, u32 *buf_len);
107253 +void rtw_buf_update(u8 **buf, u32 *buf_len, u8 *src, u32 src_len);
107254 +
107255 +struct rtw_cbuf {
107256 + u32 write;
107257 + u32 read;
107258 + u32 size;
107259 + void *bufs[0];
107260 +};
107261 +
107262 +bool rtw_cbuf_full(struct rtw_cbuf *cbuf);
107263 +bool rtw_cbuf_empty(struct rtw_cbuf *cbuf);
107264 +bool rtw_cbuf_push(struct rtw_cbuf *cbuf, void *buf);
107265 +void *rtw_cbuf_pop(struct rtw_cbuf *cbuf);
107266 +struct rtw_cbuf *rtw_cbuf_alloc(u32 size);
107267 +void rtw_cbuf_free(struct rtw_cbuf *cbuf);
107268
107269 -#ifdef PLATFORM_LINUX
107270 -extern int start_kthread(_thread_hdl_ *t_hdl, int (*threadfn)(void *data),
107271 - void *data, const char *name);
107272 #endif
107273
107274 +
107275 --- a/drivers/net/wireless/rtl8192cu/include/pci_ops.h
107276 +++ b/drivers/net/wireless/rtl8192cu/include/pci_ops.h
107277 @@ -37,6 +37,7 @@ void rtl8192ce_xmit_tasklet(void *priv);
107278 void rtl8192ce_recv_tasklet(void *priv);
107279 void rtl8192ce_prepare_bcn_tasklet(void *priv);
107280 void rtl8192ce_set_intf_ops(struct _io_ops *pops);
107281 +#define pci_set_intf_ops rtl8192ce_set_intf_ops
107282 #endif
107283
107284 #ifdef CONFIG_RTL8192D
107285 @@ -51,6 +52,7 @@ void rtl8192de_xmit_tasklet(void *priv);
107286 void rtl8192de_recv_tasklet(void *priv);
107287 void rtl8192de_prepare_bcn_tasklet(void *priv);
107288 void rtl8192de_set_intf_ops(struct _io_ops *pops);
107289 +#define pci_set_intf_ops rtl8192de_set_intf_ops
107290 u32 MpReadPCIDwordDBI8192D(IN PADAPTER Adapter, IN u16 Offset, IN u8 Direct);
107291 void MpWritePCIDwordDBI8192D(IN PADAPTER Adapter, IN u16 Offset, IN u32 Value, IN u8 Direct);
107292 #endif
107293 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192c_cmd.h
107294 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192c_cmd.h
107295 @@ -16,8 +16,7 @@
107296 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
107297 *
107298 *
107299 -
107300 -******************************************************************************/
107301 + ******************************************************************************/
107302 #ifndef __RTL8192C_CMD_H_
107303 #define __RTL8192C_CMD_H_
107304
107305 @@ -35,15 +34,23 @@ enum cmd_msg_element_id
107306 MACID_PS_MODE_EID=7,
107307 P2P_PS_OFFLOAD_EID=8,
107308 SELECTIVE_SUSPEND_ROF_CMD=9,
107309 +#ifdef CONFIG_WOWLAN
107310 H2C_WO_WLAN_CMD = 26, // Wake on Wlan.
107311 EXT_MACID_PERIOD_EID = 27, // support macid to 64
107312 MACID64_CONFIG_EID = 28, // support macid to 64
107313 +#endif // CONFIG_WOWLAN
107314 P2P_PS_CTW_CMD_EID=32,
107315 H2C_92C_IO_OFFLOAD=44,
107316 +#ifdef CONFIG_WOWLAN
107317 KEEP_ALIVE_CONTROL_CMD=48,
107318 DISCONNECT_DECISION_CTRL_CMD=49,
107319 REMOTE_WAKE_CTRL_CMD=60,
107320 - H2C_92C_CMD_MAX};
107321 +#endif // CONFIG_WOWLAN
107322 + H2C_92C_TSF_SYNC=67,
107323 + H2C_92C_DISABLE_BCN_FUNC=68,
107324 + H2C_92C_RESET_TSF = 75,
107325 + H2C_92C_CMD_MAX
107326 +};
107327
107328 struct cmd_msg_parm {
107329 u8 eid; //element id
107330 @@ -51,31 +58,13 @@ struct cmd_msg_parm {
107331 u8 buf[6];
107332 };
107333
107334 -enum evt_msg_element_id
107335 -{
107336 - EVT_DBG_EID=0,
107337 - EVT_TSF_EID=1,
107338 - EVT_AP_RPT_RSP_EID=2,
107339 - EVT_CCX_TXRPT_EID=3,
107340 - EVT_BT_RSSI_EID=4,
107341 - EVT_BT_OPMODE_EID=5,
107342 - EVT_EXT_RA_RPT_EID=6,
107343 - EVT_BT_TYPE_RPT_EID=7,
107344 - EVT_INIT_OFFLOAD_EID=8,
107345 - EVT_PSD_CONTROL_EID=9,
107346 - EVT_HW_INFO_EXCHGNGE_EID=10,
107347 - EVT_C2H_H2C_TEST_EID=11,
107348 - EVT_BT_INTO_EID=12,
107349 - EVT_BT_RPT_EID=13,
107350 - H2C_92C_EVT_MAX};
107351 -
107352 -
107353 typedef struct _SETPWRMODE_PARM{
107354 u8 Mode;
107355 u8 SmartPS;
107356 u8 BcnPassTime; // unit: 100ms
107357 }SETPWRMODE_PARM, *PSETPWRMODE_PARM;
107358
107359 +#ifdef CONFIG_WOWLAN
107360 typedef struct _SETWOWLAN_PARM{
107361 u8 mode;
107362 u8 gpio_index;
107363 @@ -95,6 +84,7 @@ typedef struct _SETWOWLAN_PARM{
107364
107365 #define FW_WOWLAN_GPIO_WAKEUP_EN BIT(0)
107366 #define FW_FW_PARSE_MAGIC_PKT BIT(1)
107367 +#endif // CONFIG_WOWLAN
107368
107369 struct H2C_SS_RFOFF_PARAM{
107370 u8 ROFOn; // 1: on, 0:off
107371 @@ -132,8 +122,7 @@ void rtl8192c_set_FwPwrMode_cmd(_adapter
107372 void rtl8192c_set_FwJoinBssReport_cmd(_adapter* padapter, u8 mstatus);
107373 u8 rtl8192c_set_rssi_cmd(_adapter*padapter, u8 *param);
107374 u8 rtl8192c_set_raid_cmd(_adapter*padapter, u32 mask, u8 arg);
107375 -u8 rtl8192c_set_raid64_cmd(_adapter*padapter, u32 mask, u8 arg);
107376 -void rtl8192c_Add_RateATid(PADAPTER pAdapter, u32 bitmap, u8 arg, u8 mac_id);
107377 +void rtl8192c_Add_RateATid(PADAPTER pAdapter, u32 bitmap, u8 arg);
107378 u8 rtl8192c_set_FwSelectSuspend_cmd(_adapter*padapter,u8 bfwpoll, u16 period);
107379 #ifdef CONFIG_P2P
107380 void rtl8192c_set_p2p_ps_offload_cmd(_adapter* padapter, u8 p2p_ps_state);
107381 @@ -146,8 +135,19 @@ typedef struct _IO_OFFLOAD_LOC{
107382 int rtl8192c_IOL_exec_cmds_sync(ADAPTER *adapter, struct xmit_frame *xmit_frame, u32 max_wating_ms);
107383 #endif //CONFIG_IOL
107384
107385 -#endif
107386 +#ifdef CONFIG_BEACON_DISABLE_OFFLOAD
107387 +u8 rtl8192c_dis_beacon_fun_cmd(_adapter* padapter);
107388 +#endif // CONFIG_BEACON_DISABLE_OFFLOAD
107389 +
107390 +
107391 +#ifdef CONFIG_TSF_RESET_OFFLOAD
107392 +int reset_tsf(PADAPTER Adapter, u8 reset_port );
107393 +#endif // CONFIG_TSF_RESET_OFFLOAD
107394 +
107395 #ifdef CONFIG_WOWLAN
107396 void rtl8192c_set_wowlan_cmd(_adapter* padapter);
107397 void SetFwRelatedForWoWLAN8192CU(_adapter* padapter,u8 bHostIsGoingtoSleep);
107398 #endif // CONFIG_WOWLAN
107399 +
107400 +#endif // __RTL8192C_CMD_H_
107401 +
107402 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192c_dm.h
107403 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192c_dm.h
107404 @@ -16,8 +16,7 @@
107405 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
107406 *
107407 *
107408 -
107409 -******************************************************************************/
107410 + ******************************************************************************/
107411 #ifndef __RTL8192C_DM_H__
107412 #define __RTL8192C_DM_H__
107413 //============================================================
107414 @@ -28,125 +27,10 @@
107415 //
107416 //============================================================
107417
107418 -#define RSSI_CCK 0
107419 -#define RSSI_OFDM 1
107420 +#define RSSI_CCK 0
107421 +#define RSSI_OFDM 1
107422 #define RSSI_DEFAULT 2
107423
107424 -#define OFDM_TABLE_SIZE 37
107425 -#define CCK_TABLE_SIZE 33
107426 -
107427 -static u32 OFDMSwingTable[OFDM_TABLE_SIZE] = {
107428 - 0x7f8001fe, // 0, +6.0dB
107429 - 0x788001e2, // 1, +5.5dB
107430 - 0x71c001c7, // 2, +5.0dB
107431 - 0x6b8001ae, // 3, +4.5dB
107432 - 0x65400195, // 4, +4.0dB
107433 - 0x5fc0017f, // 5, +3.5dB
107434 - 0x5a400169, // 6, +3.0dB
107435 - 0x55400155, // 7, +2.5dB
107436 - 0x50800142, // 8, +2.0dB
107437 - 0x4c000130, // 9, +1.5dB
107438 - 0x47c0011f, // 10, +1.0dB
107439 - 0x43c0010f, // 11, +0.5dB
107440 - 0x40000100, // 12, +0dB
107441 - 0x3c8000f2, // 13, -0.5dB
107442 - 0x390000e4, // 14, -1.0dB
107443 - 0x35c000d7, // 15, -1.5dB
107444 - 0x32c000cb, // 16, -2.0dB
107445 - 0x300000c0, // 17, -2.5dB
107446 - 0x2d4000b5, // 18, -3.0dB
107447 - 0x2ac000ab, // 19, -3.5dB
107448 - 0x288000a2, // 20, -4.0dB
107449 - 0x26000098, // 21, -4.5dB
107450 - 0x24000090, // 22, -5.0dB
107451 - 0x22000088, // 23, -5.5dB
107452 - 0x20000080, // 24, -6.0dB
107453 - 0x1e400079, // 25, -6.5dB
107454 - 0x1c800072, // 26, -7.0dB
107455 - 0x1b00006c, // 27. -7.5dB
107456 - 0x19800066, // 28, -8.0dB
107457 - 0x18000060, // 29, -8.5dB
107458 - 0x16c0005b, // 30, -9.0dB
107459 - 0x15800056, // 31, -9.5dB
107460 - 0x14400051, // 32, -10.0dB
107461 - 0x1300004c, // 33, -10.5dB
107462 - 0x12000048, // 34, -11.0dB
107463 - 0x11000044, // 35, -11.5dB
107464 - 0x10000040, // 36, -12.0dB
107465 -};
107466 -
107467 -static u8 CCKSwingTable_Ch1_Ch13[CCK_TABLE_SIZE][8] = {
107468 -{0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04}, // 0, +0dB
107469 -{0x33, 0x32, 0x2b, 0x23, 0x1a, 0x11, 0x08, 0x04}, // 1, -0.5dB
107470 -{0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x03}, // 2, -1.0dB
107471 -{0x2d, 0x2d, 0x27, 0x1f, 0x18, 0x0f, 0x08, 0x03}, // 3, -1.5dB
107472 -{0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03}, // 4, -2.0dB
107473 -{0x28, 0x28, 0x22, 0x1c, 0x15, 0x0d, 0x07, 0x03}, // 5, -2.5dB
107474 -{0x26, 0x25, 0x21, 0x1b, 0x14, 0x0d, 0x06, 0x03}, // 6, -3.0dB
107475 -{0x24, 0x23, 0x1f, 0x19, 0x13, 0x0c, 0x06, 0x03}, // 7, -3.5dB
107476 -{0x22, 0x21, 0x1d, 0x18, 0x11, 0x0b, 0x06, 0x02}, // 8, -4.0dB
107477 -{0x20, 0x20, 0x1b, 0x16, 0x11, 0x08, 0x05, 0x02}, // 9, -4.5dB
107478 -{0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02}, // 10, -5.0dB
107479 -{0x1d, 0x1c, 0x18, 0x14, 0x0f, 0x0a, 0x05, 0x02}, // 11, -5.5dB
107480 -{0x1b, 0x1a, 0x17, 0x13, 0x0e, 0x09, 0x04, 0x02}, // 12, -6.0dB
107481 -{0x1a, 0x19, 0x16, 0x12, 0x0d, 0x09, 0x04, 0x02}, // 13, -6.5dB
107482 -{0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02}, // 14, -7.0dB
107483 -{0x17, 0x16, 0x13, 0x10, 0x0c, 0x08, 0x04, 0x02}, // 15, -7.5dB
107484 -{0x16, 0x15, 0x12, 0x0f, 0x0b, 0x07, 0x04, 0x01}, // 16, -8.0dB
107485 -{0x14, 0x14, 0x11, 0x0e, 0x0b, 0x07, 0x03, 0x02}, // 17, -8.5dB
107486 -{0x13, 0x13, 0x10, 0x0d, 0x0a, 0x06, 0x03, 0x01}, // 18, -9.0dB
107487 -{0x12, 0x12, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, // 19, -9.5dB
107488 -{0x11, 0x11, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, // 20, -10.0dB
107489 -{0x10, 0x10, 0x0e, 0x0b, 0x08, 0x05, 0x03, 0x01}, // 21, -10.5dB
107490 -{0x0f, 0x0f, 0x0d, 0x0b, 0x08, 0x05, 0x03, 0x01}, // 22, -11.0dB
107491 -{0x0e, 0x0e, 0x0c, 0x0a, 0x08, 0x05, 0x02, 0x01}, // 23, -11.5dB
107492 -{0x0d, 0x0d, 0x0c, 0x0a, 0x07, 0x05, 0x02, 0x01}, // 24, -12.0dB
107493 -{0x0d, 0x0c, 0x0b, 0x09, 0x07, 0x04, 0x02, 0x01}, // 25, -12.5dB
107494 -{0x0c, 0x0c, 0x0a, 0x09, 0x06, 0x04, 0x02, 0x01}, // 26, -13.0dB
107495 -{0x0b, 0x0b, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x01}, // 27, -13.5dB
107496 -{0x0b, 0x0a, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01}, // 28, -14.0dB
107497 -{0x0a, 0x0a, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01}, // 29, -14.5dB
107498 -{0x0a, 0x09, 0x08, 0x07, 0x05, 0x03, 0x02, 0x01}, // 30, -15.0dB
107499 -{0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01}, // 31, -15.5dB
107500 -{0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01} // 32, -16.0dB
107501 -};
107502 -
107503 -static u8 CCKSwingTable_Ch14 [CCK_TABLE_SIZE][8]= {
107504 -{0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00}, // 0, +0dB
107505 -{0x33, 0x32, 0x2b, 0x19, 0x00, 0x00, 0x00, 0x00}, // 1, -0.5dB
107506 -{0x30, 0x2f, 0x29, 0x18, 0x00, 0x00, 0x00, 0x00}, // 2, -1.0dB
107507 -{0x2d, 0x2d, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00}, // 3, -1.5dB
107508 -{0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00}, // 4, -2.0dB
107509 -{0x28, 0x28, 0x24, 0x14, 0x00, 0x00, 0x00, 0x00}, // 5, -2.5dB
107510 -{0x26, 0x25, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00}, // 6, -3.0dB
107511 -{0x24, 0x23, 0x1f, 0x12, 0x00, 0x00, 0x00, 0x00}, // 7, -3.5dB
107512 -{0x22, 0x21, 0x1d, 0x11, 0x00, 0x00, 0x00, 0x00}, // 8, -4.0dB
107513 -{0x20, 0x20, 0x1b, 0x10, 0x00, 0x00, 0x00, 0x00}, // 9, -4.5dB
107514 -{0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00}, // 10, -5.0dB
107515 -{0x1d, 0x1c, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, // 11, -5.5dB
107516 -{0x1b, 0x1a, 0x17, 0x0e, 0x00, 0x00, 0x00, 0x00}, // 12, -6.0dB
107517 -{0x1a, 0x19, 0x16, 0x0d, 0x00, 0x00, 0x00, 0x00}, // 13, -6.5dB
107518 -{0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00}, // 14, -7.0dB
107519 -{0x17, 0x16, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00}, // 15, -7.5dB
107520 -{0x16, 0x15, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00}, // 16, -8.0dB
107521 -{0x14, 0x14, 0x11, 0x0a, 0x00, 0x00, 0x00, 0x00}, // 17, -8.5dB
107522 -{0x13, 0x13, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00}, // 18, -9.0dB
107523 -{0x12, 0x12, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, // 19, -9.5dB
107524 -{0x11, 0x11, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, // 20, -10.0dB
107525 -{0x10, 0x10, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00}, // 21, -10.5dB
107526 -{0x0f, 0x0f, 0x0d, 0x08, 0x00, 0x00, 0x00, 0x00}, // 22, -11.0dB
107527 -{0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00}, // 23, -11.5dB
107528 -{0x0d, 0x0d, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00}, // 24, -12.0dB
107529 -{0x0d, 0x0c, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x00}, // 25, -12.5dB
107530 -{0x0c, 0x0c, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00}, // 26, -13.0dB
107531 -{0x0b, 0x0b, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00}, // 27, -13.5dB
107532 -{0x0b, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00}, // 28, -14.0dB
107533 -{0x0a, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00}, // 29, -14.5dB
107534 -{0x0a, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00}, // 30, -15.0dB
107535 -{0x09, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00}, // 31, -15.5dB
107536 -{0x09, 0x08, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00} // 32, -16.0dB
107537 -};
107538 -
107539 //============================================================
107540 // structure and define
107541 //============================================================
107542 @@ -211,6 +95,7 @@ typedef struct _Dynamic_Initial_Gain_Thr
107543 u8 LargeFAHit;
107544 u8 ForbiddenIGI;
107545 u32 Recover_cnt;
107546 + u8 rx_gain_range_min_nolink;
107547
107548 }DIG_T;
107549
107550 @@ -351,7 +236,7 @@ struct btcoexist_priv {
107551 #define DM_DIG_MAX 0x3e
107552 #define DM_DIG_MIN 0x1e //0x22//0x1c
107553
107554 -#define DM_DIG_FA_UPPER 0x32
107555 +#define DM_DIG_FA_UPPER 0x3e
107556 #define DM_DIG_FA_LOWER 0x20
107557 #define DM_DIG_FA_TH0 0x20
107558 #define DM_DIG_FA_TH1 0x100
107559 @@ -577,6 +462,21 @@ struct dm_priv
107560
107561 // Add for Reading Initial Data Rate SEL Register 0x484 during watchdog. Using for fill tx desc. 2011.3.21 by Thomas
107562 u8 INIDATA_RATE[32];
107563 +
107564 +#ifdef CONFIG_DM_ADAPTIVITY
107565 + /* Ported from ODM, for ESTI Adaptivity test */
107566 + s8 TH_L2H_ini;
107567 + s8 TH_EDCCA_HL_diff;
107568 + s8 IGI_Base;
107569 + u8 IGI_target;
107570 + bool ForceEDCCA;
107571 + u8 AdapEn_RSSI;
107572 + s8 Force_TH_H;
107573 + s8 Force_TH_L;
107574 + u8 IGI_LowerBound;
107575 +
107576 + bool bPreEdccaEnable;
107577 +#endif
107578 };
107579
107580
107581 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192c_event.h
107582 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192c_event.h
107583 @@ -16,8 +16,7 @@
107584 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
107585 *
107586 *
107587 -
107588 -******************************************************************************/
107589 + ******************************************************************************/
107590 #ifndef _RTL8192C_EVENT_H_
107591 #define _RTL8192C_EVENT_H_
107592
107593 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192c_hal.h
107594 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192c_hal.h
107595 @@ -16,11 +16,11 @@
107596 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
107597 *
107598 *
107599 -
107600 -******************************************************************************/
107601 + ******************************************************************************/
107602 #ifndef __RTL8192C_HAL_H__
107603 #define __RTL8192C_HAL_H__
107604
107605 +#include "hal_com.h"
107606 #include "rtl8192c_spec.h"
107607 #include "Hal8192CPhyReg.h"
107608 #include "Hal8192CPhyCfg.h"
107609 @@ -123,9 +123,11 @@
107610 #define RTL8192C_FW_TSMC_IMG "rtl8192CU\\rtl8192cfwT.bin"
107611 #define RTL8192C_FW_UMC_IMG "rtl8192CU\\rtl8192cfwU.bin"
107612 #define RTL8192C_FW_UMC_B_IMG "rtl8192CU\\rtl8192cfwU_B.bin"
107613 +#ifdef CONFIG_WOWLAN
107614 #define RTL8192C_FW_TSMC_WW_IMG "rtl8192CU\\rtl8192cfwTww.bin"
107615 #define RTL8192C_FW_UMC_WW_IMG "rtl8192CU\\rtl8192cfwUww.bin"
107616 #define RTL8192C_FW_UMC_B_WW_IMG "rtl8192CU\\rtl8192cfwU_Bww.bin"
107617 +#endif // CONFIG_WOWLAN
107618 //#define RTL819X_FW_BOOT_IMG "rtl8192CU\\boot.img"
107619 //#define RTL819X_FW_MAIN_IMG "rtl8192CU\\main.img"
107620 //#define RTL819X_FW_DATA_IMG "rtl8192CU\\data.img"
107621 @@ -307,10 +309,10 @@ typedef enum _USB_RX_AGG_MODE{
107622 #define WMM_NORMAL_TX_TOTAL_PAGE_NUMBER 0xF5
107623 #define WMM_NORMAL_TX_PAGE_BOUNDARY (WMM_TEST_TX_TOTAL_PAGE_NUMBER + 1) //F6
107624
107625 -#define WMM_NORMAL_PAGE_NUM_PUBQ 0xB0
107626 -#define WMM_NORMAL_PAGE_NUM_HPQ 0x29
107627 -#define WMM_NORMAL_PAGE_NUM_LPQ 0x1C
107628 -#define WMM_NORMAL_PAGE_NUM_NPQ 0x1C
107629 +#define WMM_NORMAL_PAGE_NUM_PUBQ 0x65
107630 +#define WMM_NORMAL_PAGE_NUM_HPQ 0x30
107631 +#define WMM_NORMAL_PAGE_NUM_LPQ 0x30
107632 +#define WMM_NORMAL_PAGE_NUM_NPQ 0x30
107633
107634 //-------------------------------------------------------------------------
107635 // Chip specific
107636 @@ -428,13 +430,13 @@ enum ChannelPlan{
107637 };
107638
107639 typedef struct _TxPowerInfo{
107640 - u8 CCKIndex[RF90_PATH_MAX][CHANNEL_GROUP_MAX];
107641 - u8 HT40_1SIndex[RF90_PATH_MAX][CHANNEL_GROUP_MAX];
107642 - u8 HT40_2SIndexDiff[RF90_PATH_MAX][CHANNEL_GROUP_MAX];
107643 - u8 HT20IndexDiff[RF90_PATH_MAX][CHANNEL_GROUP_MAX];
107644 - u8 OFDMIndexDiff[RF90_PATH_MAX][CHANNEL_GROUP_MAX];
107645 - u8 HT40MaxOffset[RF90_PATH_MAX][CHANNEL_GROUP_MAX];
107646 - u8 HT20MaxOffset[RF90_PATH_MAX][CHANNEL_GROUP_MAX];
107647 + u8 CCKIndex[RF_PATH_MAX][CHANNEL_GROUP_MAX];
107648 + u8 HT40_1SIndex[RF_PATH_MAX][CHANNEL_GROUP_MAX];
107649 + u8 HT40_2SIndexDiff[RF_PATH_MAX][CHANNEL_GROUP_MAX];
107650 + s8 HT20IndexDiff[RF_PATH_MAX][CHANNEL_GROUP_MAX];
107651 + u8 OFDMIndexDiff[RF_PATH_MAX][CHANNEL_GROUP_MAX];
107652 + u8 HT40MaxOffset[RF_PATH_MAX][CHANNEL_GROUP_MAX];
107653 + u8 HT20MaxOffset[RF_PATH_MAX][CHANNEL_GROUP_MAX];
107654 u8 TSSI_A;
107655 u8 TSSI_B;
107656 }TxPowerInfo, *PTxPowerInfo;
107657 @@ -490,6 +492,21 @@ typedef enum _RT_REGULATOR_MODE{
107658 RT_LDO_REGULATOR = 1,
107659 }RT_REGULATOR_MODE,*PRT_REGULATOR_MODE;
107660
107661 +enum c2h_id_8192c {
107662 + C2H_DBG = 0,
107663 + C2H_TSF = 1,
107664 + C2H_AP_RPT_RSP = 2,
107665 + C2H_CCX_TX_RPT = 3,
107666 + C2H_BT_RSSI = 4,
107667 + C2H_BT_OP_MODE = 5,
107668 + C2H_EXT_RA_RPT = 6,
107669 + C2H_HW_INFO_EXCH = 10,
107670 + C2H_C2H_H2C_TEST = 11,
107671 + C2H_BT_INFO = 12,
107672 + C2H_BT_MP_INFO = 15,
107673 + MAX_C2HEVENT
107674 +};
107675 +
107676 #ifdef CONFIG_PCI_HCI
107677 struct hal_data_8192ce
107678 {
107679 @@ -553,14 +570,14 @@ struct hal_data_8192ce
107680 u8 bDefaultAntenna;
107681 u8 bIQKInitialized;
107682
107683 - u8 TxPwrLevelCck[RF90_PATH_MAX][CHANNEL_MAX_NUMBER];
107684 - u8 TxPwrLevelHT40_1S[RF90_PATH_MAX][CHANNEL_MAX_NUMBER]; // For HT 40MHZ pwr
107685 - u8 TxPwrLevelHT40_2S[RF90_PATH_MAX][CHANNEL_MAX_NUMBER]; // For HT 40MHZ pwr
107686 - u8 TxPwrHt20Diff[RF90_PATH_MAX][CHANNEL_MAX_NUMBER];// HT 20<->40 Pwr diff
107687 - u8 TxPwrLegacyHtDiff[RF90_PATH_MAX][CHANNEL_MAX_NUMBER];// For HT<->legacy pwr diff
107688 + u8 TxPwrLevelCck[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
107689 + u8 TxPwrLevelHT40_1S[RF_PATH_MAX][CHANNEL_MAX_NUMBER]; // For HT 40MHZ pwr
107690 + u8 TxPwrLevelHT40_2S[RF_PATH_MAX][CHANNEL_MAX_NUMBER]; // For HT 40MHZ pwr
107691 + s8 TxPwrHt20Diff[RF_PATH_MAX][CHANNEL_MAX_NUMBER];// HT 20<->40 Pwr diff
107692 + u8 TxPwrLegacyHtDiff[RF_PATH_MAX][CHANNEL_MAX_NUMBER];// For HT<->legacy pwr diff
107693 // For power group
107694 - u8 PwrGroupHT20[RF90_PATH_MAX][CHANNEL_MAX_NUMBER];
107695 - u8 PwrGroupHT40[RF90_PATH_MAX][CHANNEL_MAX_NUMBER];
107696 + u8 PwrGroupHT20[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
107697 + u8 PwrGroupHT40[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
107698
107699 u8 LegacyHTTxPowerDiff;// Legacy to HT rate power diff
107700
107701 @@ -672,7 +689,7 @@ typedef struct hal_data_8192ce HAL_DATA_
107702 #define IS_MULTI_FUNC_CHIP(_Adapter) (((((PHAL_DATA_TYPE)(_Adapter->HalData))->MultiFunc) & (RT_MULTI_FUNC_BT|RT_MULTI_FUNC_GPS)) ? _TRUE : _FALSE)
107703
107704 void InterruptRecognized8192CE(PADAPTER Adapter, PRT_ISR_CONTENT pIsrContent);
107705 -VOID UpdateInterruptMask8192CE(PADAPTER Adapter, u32 AddMSR, u32 RemoveMSR);
107706 +VOID UpdateInterruptMask8192CE(PADAPTER Adapter, u32 AddMSR, u32 AddMSR1, u32 RemoveMSR, u32 RemoveMSR1);
107707 #endif
107708
107709 #ifdef CONFIG_USB_HCI
107710 @@ -722,14 +739,14 @@ struct hal_data_8192cu
107711
107712 u8 bIQKInitialized;
107713
107714 - u8 TxPwrLevelCck[RF90_PATH_MAX][CHANNEL_MAX_NUMBER];
107715 - u8 TxPwrLevelHT40_1S[RF90_PATH_MAX][CHANNEL_MAX_NUMBER]; // For HT 40MHZ pwr
107716 - u8 TxPwrLevelHT40_2S[RF90_PATH_MAX][CHANNEL_MAX_NUMBER]; // For HT 40MHZ pwr
107717 - u8 TxPwrHt20Diff[RF90_PATH_MAX][CHANNEL_MAX_NUMBER];// HT 20<->40 Pwr diff
107718 - u8 TxPwrLegacyHtDiff[RF90_PATH_MAX][CHANNEL_MAX_NUMBER];// For HT<->legacy pwr diff
107719 + u8 TxPwrLevelCck[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
107720 + u8 TxPwrLevelHT40_1S[RF_PATH_MAX][CHANNEL_MAX_NUMBER]; // For HT 40MHZ pwr
107721 + u8 TxPwrLevelHT40_2S[RF_PATH_MAX][CHANNEL_MAX_NUMBER]; // For HT 40MHZ pwr
107722 + s8 TxPwrHt20Diff[RF_PATH_MAX][CHANNEL_MAX_NUMBER];// HT 20<->40 Pwr diff
107723 + u8 TxPwrLegacyHtDiff[RF_PATH_MAX][CHANNEL_MAX_NUMBER];// For HT<->legacy pwr diff
107724 // For power group
107725 - u8 PwrGroupHT20[RF90_PATH_MAX][CHANNEL_MAX_NUMBER];
107726 - u8 PwrGroupHT40[RF90_PATH_MAX][CHANNEL_MAX_NUMBER];
107727 + u8 PwrGroupHT20[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
107728 + u8 PwrGroupHT40[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
107729
107730 u8 LegacyHTTxPowerDiff;// Legacy to HT rate power diff
107731
107732 @@ -876,12 +893,45 @@ VOID rtl8192c_FirmwareSelfReset(IN PADAP
107733 int FirmwareDownload92C(IN PADAPTER Adapter,IN BOOLEAN bUsedWoWLANFw);
107734 VOID InitializeFirmwareVars92C(PADAPTER Adapter);
107735 u8 GetEEPROMSize8192C(PADAPTER Adapter);
107736 -RT_CHANNEL_DOMAIN _HalMapChannelPlan8192C(PADAPTER Adapter, u8 HalChannelPlan);
107737 +void rtl8192c_EfuseParseChnlPlan(PADAPTER padapter, u8 *hwinfo, BOOLEAN AutoLoadFail);
107738 VERSION_8192C rtl8192c_ReadChipVersion(IN PADAPTER Adapter);
107739 void rtl8192c_ReadBluetoothCoexistInfo(PADAPTER Adapter, u8 *PROMContent, BOOLEAN AutoloadFail);
107740 -void rtl8192c_HalSetBrateCfg(PADAPTER Adapter, u8 *mBratesOS, u16 *pBrateCfg);
107741 //void rtl8192c_free_hal_data(_adapter * padapter);
107742 VOID rtl8192c_EfuseParseIDCode(PADAPTER pAdapter, u8 *hwinfo);
107743 void rtl8192c_set_hal_ops(struct hal_ops *pHalFunc);
107744
107745 +s32 c2h_id_filter_ccx_8192c(u8 id);
107746 #endif
107747 +
107748 +#ifdef CONFIG_MP_INCLUDED
107749 +
107750 +extern void Hal_SetAntenna(PADAPTER pAdapter);
107751 +extern void Hal_SetBandwidth(PADAPTER pAdapter);
107752 +
107753 +extern void Hal_SetTxPower(PADAPTER pAdapter);
107754 +extern void Hal_SetCarrierSuppressionTx(PADAPTER pAdapter, u8 bStart);
107755 +extern void Hal_SetSingleToneTx ( PADAPTER pAdapter , u8 bStart );
107756 +extern void Hal_SetSingleCarrierTx (PADAPTER pAdapter, u8 bStart);
107757 +extern void Hal_SetContinuousTx (PADAPTER pAdapter, u8 bStart);
107758 +
107759 +extern void Hal_SetDataRate(PADAPTER pAdapter);
107760 +extern void Hal_SetChannel(PADAPTER pAdapter);
107761 +extern void Hal_SetAntennaPathPower(PADAPTER pAdapter);
107762 +extern s32 Hal_SetThermalMeter(PADAPTER pAdapter, u8 target_ther);
107763 +extern s32 Hal_SetPowerTracking(PADAPTER padapter, u8 enable);
107764 +extern void Hal_GetPowerTracking(PADAPTER padapter, u8 * enable);
107765 +extern void Hal_GetThermalMeter(PADAPTER pAdapter, u8 *value);
107766 +extern void Hal_mpt_SwitchRfSetting(PADAPTER pAdapter);
107767 +extern void Hal_MPT_CCKTxPowerAdjust(PADAPTER Adapter, BOOLEAN bInCH14);
107768 +extern void Hal_MPT_CCKTxPowerAdjustbyIndex(PADAPTER pAdapter, BOOLEAN beven);
107769 +extern void Hal_SetCCKTxPower(PADAPTER pAdapter, u8 * TxPower);
107770 +extern void Hal_SetOFDMTxPower(PADAPTER pAdapter, u8 * TxPower);
107771 +extern void Hal_TriggerRFThermalMeter(PADAPTER pAdapter);
107772 +extern u8 Hal_ReadRFThermalMeter(PADAPTER pAdapter);
107773 +extern void Hal_SetCCKContinuousTx(PADAPTER pAdapter, u8 bStart);
107774 +extern void Hal_SetOFDMContinuousTx(PADAPTER pAdapter, u8 bStart);
107775 +
107776 +#endif
107777 +
107778 +
107779 +
107780 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192c_led.h
107781 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192c_led.h
107782 @@ -16,8 +16,7 @@
107783 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
107784 *
107785 *
107786 -
107787 -******************************************************************************/
107788 + ******************************************************************************/
107789 #ifndef __RTL8192C_LED_H_
107790 #define __RTL8192C_LED_H_
107791
107792 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192c_recv.h
107793 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192c_recv.h
107794 @@ -16,8 +16,7 @@
107795 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
107796 *
107797 *
107798 -
107799 -******************************************************************************/
107800 + ******************************************************************************/
107801 #ifndef _RTL8192C_RECV_H_
107802 #define _RTL8192C_RECV_H_
107803
107804 @@ -54,7 +53,11 @@
107805 //#define MAX_RECVBUF_SZ (32768) // 32k
107806 //#define MAX_RECVBUF_SZ (16384) //16K
107807 //#define MAX_RECVBUF_SZ (10240) //10K
107808 - #define MAX_RECVBUF_SZ (15360) // 15k < 16k
107809 + #ifdef CONFIG_PLATFORM_MSTAR
107810 + #define MAX_RECVBUF_SZ (8192) // 8K
107811 + #else
107812 + #define MAX_RECVBUF_SZ (15360) // 15k < 16k
107813 + #endif
107814 //#define MAX_RECVBUF_SZ (8192+1024) // 8K+1k
107815 #else
107816 #define MAX_RECVBUF_SZ (4000) // about 4K
107817 @@ -62,11 +65,11 @@
107818 #endif
107819
107820 #elif defined(CONFIG_PCI_HCI)
107821 -#ifndef CONFIG_MINIMAL_MEMORY_USAGE
107822 - #define MAX_RECVBUF_SZ (9100)
107823 -#else
107824 +//#ifndef CONFIG_MINIMAL_MEMORY_USAGE
107825 +// #define MAX_RECVBUF_SZ (9100)
107826 +//#else
107827 #define MAX_RECVBUF_SZ (4000) // about 4K
107828 -#endif
107829 +//#endif
107830
107831 #define RX_MPDU_QUEUE 0
107832 #define RX_CMD_QUEUE 1
107833 @@ -167,17 +170,15 @@ typedef struct _INTERRUPT_MSG_FORMAT_EX{
107834 void rtl8192cu_init_recvbuf(_adapter *padapter, struct recv_buf *precvbuf);
107835 int rtl8192cu_init_recv_priv(_adapter * padapter);
107836 void rtl8192cu_free_recv_priv(_adapter * padapter);
107837 -void rtl8192cu_update_recvframe_attrib_from_recvstat(union recv_frame *precvframe, struct recv_stat *prxstat);
107838 #endif
107839
107840 #ifdef CONFIG_PCI_HCI
107841 int rtl8192ce_init_recv_priv(_adapter * padapter);
107842 void rtl8192ce_free_recv_priv(_adapter * padapter);
107843 -void rtl8192ce_update_recvframe_attrib_from_recvstat(union recv_frame *precvframe, struct recv_stat *prxstat);
107844 #endif
107845
107846 -void rtl8192c_query_rx_phy_status(union recv_frame *prframe, struct phy_stat *pphy_stat);
107847 -void rtl8192c_process_phy_info(_adapter *padapter, void *prframe);
107848 +void rtl8192c_translate_rx_signal_stuff(union recv_frame *precvframe, struct phy_stat *pphy_info);
107849 +void rtl8192c_query_rx_desc_status(union recv_frame *precvframe, struct recv_stat *pdesc);
107850
107851 #endif
107852
107853 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192c_rf.h
107854 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192c_rf.h
107855 @@ -16,8 +16,7 @@
107856 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
107857 *
107858 *
107859 -
107860 -******************************************************************************/
107861 + ******************************************************************************/
107862 /******************************************************************************
107863 *
107864 *
107865 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192c_spec.h
107866 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192c_spec.h
107867 @@ -16,8 +16,7 @@
107868 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
107869 *
107870 *
107871 -
107872 -******************************************************************************/
107873 + ******************************************************************************/
107874 #ifndef __RTL8192C_SPEC_H__
107875 #define __RTL8192C_SPEC_H__
107876
107877 @@ -115,7 +114,9 @@
107878 #define REG_GPIO_IO_SEL_2 0x0062 // RTL8723 WIFI/BT/GPS Multi-Function GPIO Select.
107879 #define REG_MULTI_FUNC_CTRL 0x0068 // RTL8723 WIFI/BT/GPS Multi-Function control source.
107880 #define REG_MCUFWDL 0x0080
107881 +#ifdef CONFIG_WOWLAN
107882 #define REG_WOWLAN_REASON 0x0081
107883 +#endif //CONFIG_WOWLAN
107884 #define REG_HMEBOX_EXT_0 0x0088
107885 #define REG_HMEBOX_EXT_1 0x008A
107886 #define REG_HMEBOX_EXT_2 0x008C
107887 @@ -264,6 +265,12 @@
107888 #define REG_RD_RESP_PKT_TH 0x0463
107889 #define REG_INIRTS_RATE_SEL 0x0480
107890 #define REG_INIDATA_RATE_SEL 0x0484
107891 +
107892 +//#define REG_FW_TSF_SYNC_CNT 0x04A0
107893 +#define REG_FW_RESET_TSF_CNT_1 0x05FC
107894 +#define REG_FW_RESET_TSF_CNT_0 0x05FD
107895 +#define REG_FW_BCN_DIS_CNT 0x05FE
107896 +
107897 #define REG_POWER_STATUS 0x04A4
107898 #define REG_POWER_STAGE1 0x04B4
107899 #define REG_POWER_STAGE2 0x04B8
107900 @@ -300,6 +307,7 @@
107901 #define REG_SIFS_OFDM 0x0516
107902 #define REG_SIFS_CTX 0x0514
107903 #define REG_SIFS_TRX 0x0516
107904 +#define REG_TSFTR_SYN_OFFSET 0x0518
107905 #define REG_AGGR_BREAK_TIME 0x051A
107906 #define REG_SLOT 0x051B
107907 #define REG_TX_PTCL_CTRL 0x0520
107908 @@ -322,7 +330,9 @@
107909 #define REG_RXTSF_OFFSET_CCK 0x055E
107910 #define REG_RXTSF_OFFSET_OFDM 0x055F
107911 #define REG_TSFTR 0x0560
107912 +#define REG_TSFTR1 0x0568
107913 #define REG_INIT_TSFTR 0x0564
107914 +#define REG_ATIMWND_1 0x0570
107915 #define REG_PSTIMER 0x0580
107916 #define REG_TIMER0 0x0584
107917 #define REG_TIMER1 0x0588
107918 @@ -397,6 +407,9 @@
107919 #define REG_BT_COEX_TABLE 0x06C0
107920 #define REG_WMAC_RESP_TXINFO 0x06D8
107921
107922 +#define REG_MACID1 0x0700
107923 +#define REG_BSSID1 0x0708
107924 +
107925
107926 //-----------------------------------------------------
107927 //
107928 @@ -594,53 +607,6 @@ Default: 00b.
107929 #define RATR_MCS14 0x04000000
107930 #define RATR_MCS15 0x08000000
107931
107932 -
107933 -// NOTE: For 92CU - Ziv
107934 -//CCK
107935 -#define RATE_1M BIT(0)
107936 -#define RATE_2M BIT(1)
107937 -#define RATE_5_5M BIT(2)
107938 -#define RATE_11M BIT(3)
107939 -//OFDM
107940 -#define RATE_6M BIT(4)
107941 -#define RATE_9M BIT(5)
107942 -#define RATE_12M BIT(6)
107943 -#define RATE_18M BIT(7)
107944 -#define RATE_24M BIT(8)
107945 -#define RATE_36M BIT(9)
107946 -#define RATE_48M BIT(10)
107947 -#define RATE_54M BIT(11)
107948 -//MCS 1 Spatial Stream
107949 -#define RATE_MCS0 BIT(12)
107950 -#define RATE_MCS1 BIT(13)
107951 -#define RATE_MCS2 BIT(14)
107952 -#define RATE_MCS3 BIT(15)
107953 -#define RATE_MCS4 BIT(16)
107954 -#define RATE_MCS5 BIT(17)
107955 -#define RATE_MCS6 BIT(18)
107956 -#define RATE_MCS7 BIT(19)
107957 -//MCS 2 Spatial Stream
107958 -#define RATE_MCS8 BIT(20)
107959 -#define RATE_MCS9 BIT(21)
107960 -#define RATE_MCS10 BIT(22)
107961 -#define RATE_MCS11 BIT(23)
107962 -#define RATE_MCS12 BIT(24)
107963 -#define RATE_MCS13 BIT(25)
107964 -#define RATE_MCS14 BIT(26)
107965 -#define RATE_MCS15 BIT(27)
107966 -
107967 -
107968 -
107969 -
107970 -// ALL CCK Rate
107971 -#define RATE_ALL_CCK RATR_1M|RATR_2M|RATR_55M|RATR_11M
107972 -#define RATE_ALL_OFDM_AG RATR_6M|RATR_9M|RATR_12M|RATR_18M|RATR_24M|\
107973 - RATR_36M|RATR_48M|RATR_54M
107974 -#define RATE_ALL_OFDM_1SS RATR_MCS0|RATR_MCS1|RATR_MCS2|RATR_MCS3 |\
107975 - RATR_MCS4|RATR_MCS5|RATR_MCS6 |RATR_MCS7
107976 -#define RATE_ALL_OFDM_2SS RATR_MCS8|RATR_MCS9 |RATR_MCS10|RATR_MCS11|\
107977 - RATR_MCS12|RATR_MCS13|RATR_MCS14|RATR_MCS15
107978 -
107979 //----------------------------------------------------------------------------
107980 // 8192C BW_OPMODE bits (Offset 0x203, 8bit)
107981 //----------------------------------------------------------------------------
107982 @@ -724,6 +690,7 @@ Default: 00b.
107983 #define IMR_TX_MASK (IMR_VODOK|IMR_VIDOK|IMR_BEDOK|IMR_BKDOK|IMR_MGNTDOK|IMR_HIGHDOK|IMR_BDOK)
107984
107985 // 13. Host Interrupt Status Extension Register (Offset: 0x012C-012Eh)
107986 +#define IMR_BcnInt_E BIT12
107987 #define IMR_TXERR BIT11
107988 #define IMR_RXERR BIT10
107989 #define IMR_C2HCMD BIT9
107990 @@ -1697,7 +1664,6 @@ Current IOREG MAP
107991 #define EN_MBSSID BIT(1)
107992 #define EN_TXBCN_RPT BIT(2)
107993 #define EN_BCN_FUNCTION BIT(3)
107994 -
107995 // The same function but different bit field.
107996 #define DIS_TSF_UDT0_NORMAL_CHIP BIT(4)
107997 #define DIS_TSF_UDT0_TEST_CHIP BIT(5)
107998 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192c_sreset.h
107999 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192c_sreset.h
108000 @@ -16,39 +16,17 @@
108001 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
108002 *
108003 *
108004 -
108005 -******************************************************************************/
108006 + ******************************************************************************/
108007 #ifndef _RTL8192C_SRESET_C_
108008 #define _RTL8192C_SRESET_C_
108009
108010 #include <drv_conf.h>
108011 #include <osdep_service.h>
108012 #include <drv_types.h>
108013 +#include <rtw_sreset.h>
108014
108015 #ifdef DBG_CONFIG_ERROR_DETECT
108016 -#define WIFI_STATUS_SUCCESS 0
108017 -#define USB_VEN_REQ_CMD_FAIL BIT0
108018 -#define USB_READ_PORT_FAIL BIT1
108019 -#define USB_WRITE_PORT_FAIL BIT2
108020 -#define WIFI_MAC_TXDMA_ERROR BIT3
108021 -#define WIFI_TX_HANG BIT4
108022 -#define WIFI_RX_HANG BIT5
108023 -#define WIFI_IF_NOT_EXIST BIT6
108024 -
108025 -struct sreset_priv {
108026 - _mutex silentreset_mutex;
108027 - u8 silent_reset_inprogress;
108028 - u8 Wifi_Error_Status;
108029 - unsigned long last_tx_time;
108030 - unsigned long last_tx_complete_time;
108031 -};
108032 -
108033 -
108034 -extern void rtl8192c_sreset_init_value(_adapter *padapter);
108035 -extern void rtl8192c_sreset_reset_value(_adapter *padapter);
108036 -extern void rtl8192c_silentreset_for_specific_platform(_adapter *padapter);
108037 extern void rtl8192c_sreset_xmit_status_check(_adapter *padapter);
108038 extern void rtl8192c_sreset_linked_status_check(_adapter *padapter);
108039 -extern u8 rtl8192c_sreset_get_wifi_status(_adapter *padapter);
108040 #endif
108041 #endif
108042 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192c_xmit.h
108043 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192c_xmit.h
108044 @@ -16,22 +16,10 @@
108045 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
108046 *
108047 *
108048 -
108049 -******************************************************************************/
108050 + ******************************************************************************/
108051 #ifndef _RTL8192C_XMIT_H_
108052 #define _RTL8192C_XMIT_H_
108053
108054 -#define VO_QUEUE_INX 0
108055 -#define VI_QUEUE_INX 1
108056 -#define BE_QUEUE_INX 2
108057 -#define BK_QUEUE_INX 3
108058 -#define BCN_QUEUE_INX 4
108059 -#define MGT_QUEUE_INX 5
108060 -#define HIGH_QUEUE_INX 6
108061 -#define TXCMD_QUEUE_INX 7
108062 -
108063 -#define HW_QUEUE_ENTRY 8
108064 -
108065 //
108066 // Queue Select Value in TxDesc
108067 //
108068 @@ -44,6 +32,51 @@
108069 #define QSLT_MGNT 0x12
108070 #define QSLT_CMD 0x13
108071
108072 +struct txrpt_ccx_8192c {
108073 + /* offset 0 */
108074 + u8 retry_cnt:6;
108075 + u8 rsvd_0:2;
108076 +
108077 + /* offset 1 */
108078 + u8 rts_retry_cnt:6;
108079 + u8 rsvd_1:2;
108080 +
108081 + /* offset 2 */
108082 + u8 ccx_qtime0;
108083 + u8 ccx_qtime1;
108084 +
108085 + /* offset 4 */
108086 + u8 missed_pkt_num:5;
108087 + u8 rsvd_4:3;
108088 +
108089 + /* offset 5 */
108090 + u8 mac_id:5;
108091 + u8 des1_fragssn:3;
108092 +
108093 + /* offset 6 */
108094 + u8 rpt_pkt_num:5;
108095 + u8 pkt_drop:1;
108096 + u8 lifetime_over:1;
108097 + u8 retry_over:1;
108098 +
108099 + /* offset 7*/
108100 + u8 edca_tx_queue:4;
108101 + u8 rsvd_7:1;
108102 + u8 bmc:1;
108103 + u8 pkt_ok:1;
108104 + u8 int_ccx:1;
108105 +};
108106 +
108107 +#define txrpt_ccx_qtime_8192c(txrpt_ccx) ((txrpt_ccx)->ccx_qtime0+((txrpt_ccx)->ccx_qtime1<<8))
108108 +
108109 +#ifdef CONFIG_XMIT_ACK
108110 +void dump_txrpt_ccx_8192c(void *buf);
108111 +void handle_txrpt_ccx_8192c(_adapter *adapter, void *buf);
108112 +#else
108113 +#define dump_txrpt_ccx_8192c(buf) do {} while(0)
108114 +#define handle_txrpt_ccx_8192c(adapter, buf) do {} while(0)
108115 +#endif
108116 +
108117 #ifdef CONFIG_USB_HCI
108118
108119 #ifdef CONFIG_USB_TX_AGGREGATION
108120 @@ -58,10 +91,12 @@ void rtl8192cu_cal_txdesc_chksum(struct
108121
108122 s32 rtl8192cu_xmitframe_complete(_adapter *padapter, struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf);
108123
108124 -void rtl8192cu_mgnt_xmit(_adapter *padapter, struct xmit_frame *pmgntframe);
108125 +s32 rtl8192cu_mgnt_xmit(_adapter *padapter, struct xmit_frame *pmgntframe);
108126
108127 s32 rtl8192cu_hal_xmit(_adapter *padapter, struct xmit_frame *pxmitframe);
108128
108129 +s32 rtl8192cu_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe);
108130 +
108131 #ifdef CONFIG_HOSTAPD_MLME
108132 s32 rtl8192cu_hostap_mgnt_xmit_entry(_adapter *padapter, _pkt *pkt);
108133 #endif
108134 @@ -77,10 +112,13 @@ struct xmit_buf *rtl8192ce_dequeue_xmitb
108135
108136 void rtl8192ce_xmitframe_resume(_adapter *padapter);
108137
108138 -void rtl8192ce_mgnt_xmit(_adapter *padapter, struct xmit_frame *pmgntframe);
108139 +s32 rtl8192ce_mgnt_xmit(_adapter *padapter, struct xmit_frame *pmgntframe);
108140
108141 s32 rtl8192ce_hal_xmit(_adapter *padapter, struct xmit_frame *pxmitframe);
108142
108143 +s32 rtl8192ce_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe);
108144 +
108145 +
108146 #ifdef CONFIG_HOSTAPD_MLME
108147 s32 rtl8192ce_hostap_mgnt_xmit_entry(_adapter *padapter, _pkt *pkt);
108148 #endif
108149 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192d_cmd.h
108150 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192d_cmd.h
108151 @@ -16,8 +16,7 @@
108152 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
108153 *
108154 *
108155 -
108156 -******************************************************************************/
108157 + ******************************************************************************/
108158 #ifndef __RTL8192D_CMD_H_
108159 #define __RTL8192D_CMD_H_
108160
108161 @@ -75,12 +74,18 @@ typedef enum _RTL8192D_H2C_CMD
108162 H2C_P2P_PS_OFFLOAD = 8,
108163 H2C_MAC_MODE_SEL = 9,
108164 H2C_PWRM=15,
108165 +#ifdef CONFIG_WOWLAN
108166 H2C_WO_WLAN_CMD = 20, // Wake on Wlan.
108167 +#endif // CONFIG_WOWLAN
108168 H2C_P2P_PS_CTW_CMD = 24,
108169 H2C_PathDiv = 26, //PathDiv--NeilChen--2011.07.15
108170 +#ifdef CONFIG_WOWLAN
108171 KEEP_ALIVE_CONTROL_CMD=31, //keep alive for wake on wlan
108172 DISCONNECT_DECISION_CTRL_CMD=32,
108173 REMOTE_WAKE_CTRL_CMD=34,
108174 +#endif // CONFIG_WOWLAN
108175 + H2C_92D_TSF_SYNC=36,
108176 + H2C_92D_RESET_TSF = 43,
108177 H2C_CMD_MAX
108178 }RTL8192D_H2C_CMD;
108179
108180 @@ -98,12 +103,14 @@ void rtl8192d_set_FwPwrMode_cmd(_adapter
108181 void rtl8192d_set_FwJoinBssReport_cmd(_adapter* padapter, u8 mstatus);
108182 u8 rtl8192d_set_rssi_cmd(_adapter*padapter, u8 *param);
108183 u8 rtl8192d_set_raid_cmd(_adapter*padapter, u32 mask, u8 arg);
108184 -void rtl8192d_Add_RateATid(PADAPTER pAdapter, u32 bitmap, u8 arg, u8 mac_id);
108185 +void rtl8192d_Add_RateATid(PADAPTER pAdapter, u32 bitmap, u8 arg);
108186 #ifdef CONFIG_P2P
108187 void rtl8192d_set_p2p_ps_offload_cmd(_adapter* padapter, u8 p2p_ps_state);
108188 #endif //CONFIG_P2P
108189
108190 -#endif
108191 +#ifdef CONFIG_TSF_RESET_OFFLOAD
108192 +int reset_tsf(PADAPTER Adapter, u8 reset_port );
108193 +#endif // CONFIG_TSF_RESET_OFFLOAD
108194
108195 #ifdef CONFIG_WOWLAN
108196 typedef struct _SETWOWLAN_PARM{
108197 @@ -130,4 +137,6 @@ void rtl8192d_set_wowlan_cmd(_adapter* p
108198 void SetFwRelatedForWoWLAN8192DU(_adapter* padapter,u8 bHostIsGoingtoSleep);
108199 #endif // CONFIG_WOWLAN
108200
108201 +#endif // __RTL8192D_CMD_H_
108202 +
108203
108204 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192d_dm.h
108205 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192d_dm.h
108206 @@ -16,7 +16,7 @@
108207 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
108208 *
108209 *
108210 -******************************************************************************/
108211 + ******************************************************************************/
108212 #ifndef __RTL8192D_DM_H__
108213 #define __RTL8192D_DM_H__
108214 //============================================================
108215 @@ -32,15 +32,6 @@
108216
108217 extern u32 EDCAParam[maxAP][3] ;
108218
108219 -#define OFDM_TABLE_SIZE 37
108220 -#define OFDM_TABLE_SIZE_92D 43
108221 -#define CCK_TABLE_SIZE 33
108222 -extern u32 OFDMSwingTable[OFDM_TABLE_SIZE_92D] ;
108223 -
108224 -extern u8 CCKSwingTable_Ch1_Ch13[CCK_TABLE_SIZE][8];
108225 -
108226 -extern u8 CCKSwingTable_Ch14 [CCK_TABLE_SIZE][8];
108227 -
108228 //============================================================
108229 // structure and define
108230 //============================================================
108231 @@ -101,7 +92,9 @@ typedef struct _Dynamic_Initial_Gain_Thr
108232 u8 LargeFAHit;
108233 u8 ForbiddenIGI;
108234 u32 Recover_cnt;
108235 + u8 rx_gain_range_min_nolink;
108236 }DIG_T,*pDIG_T;
108237 +
108238 typedef enum tag_Dynamic_Init_Gain_Operation_Type_Definition
108239 {
108240 DIG_TYPE_THRESH_HIGH = 0,
108241 @@ -176,8 +169,8 @@ typedef enum tag_DIG_Connect_Definition
108242 #define DM_DIG_FA_TH2 0x400//0x200
108243 //this is for 92d
108244 #define DM_DIG_FA_TH0_92D 0x100
108245 -#define DM_DIG_FA_TH1_92D 0x400
108246 -#define DM_DIG_FA_TH2_92D 0x600
108247 +#define DM_DIG_FA_TH1_92D 0x150
108248 +#define DM_DIG_FA_TH2_92D 0x250
108249
108250 #define DM_DIG_BACKOFF_MAX 12
108251 #define DM_DIG_BACKOFF_MIN (-4)
108252 @@ -304,6 +297,15 @@ struct dm_priv
108253 int EntryMaxUndecoratedSmoothedPWDB;
108254 int MinUndecoratedPWDBForDM;
108255 int LastMinUndecoratedPWDBForDM;
108256 +#ifdef CONFIG_DUALMAC_CONCURRENT
108257 + int RssiValMinForAnotherMacOfDMSP;
108258 + u32 CurDigValueForAnotherMacOfDMSP;
108259 + BOOLEAN bWriteDigForAnotherMacOfDMSP;
108260 + BOOLEAN bChangeCCKPDStateForAnotherMacOfDMSP;
108261 + u8 CurCCKPDStateForAnotherMacOfDMSP;
108262 + BOOLEAN bChangeTxHighPowerLvlForAnotherMacOfDMSP;
108263 + u8 CurTxHighLvlForAnotherMacOfDMSP;
108264 +#endif
108265
108266 //for High Power
108267 u8 bDynamicTxPowerEnable;
108268 @@ -364,17 +366,6 @@ struct dm_priv
108269
108270 SWAT_T DM_SWAT_Table;
108271
108272 - //Neil Chen----2011--06--23-----
108273 - //3 Path Diversity
108274 - BOOLEAN bPathDiv_Enable; //For 92D Non-interrupt Antenna Diversity by Neil ,add by wl.2011.07.19
108275 - BOOLEAN RSSI_test;
108276 - s32 RSSI_sum_A;
108277 - s32 RSSI_cnt_A;
108278 - s32 RSSI_sum_B;
108279 - s32 RSSI_cnt_B;
108280 - struct sta_info *RSSI_target;
108281 - _timer PathDivSwitchTimer;
108282 -
108283 //for TxPwrTracking
108284 int RegE94;
108285 int RegE9C;
108286 @@ -392,6 +383,21 @@ struct dm_priv
108287
108288 // Add for Reading Initial Data Rate SEL Register 0x484 during watchdog. Using for fill tx desc. 2011.3.21 by Thomas
108289 u8 INIDATA_RATE[32];
108290 +
108291 +#ifdef CONFIG_DM_ADAPTIVITY
108292 + /* Ported from ODM, for ESTI Adaptivity test */
108293 + s8 TH_L2H_ini;
108294 + s8 TH_EDCCA_HL_diff;
108295 + s8 IGI_Base;
108296 + u8 IGI_target;
108297 + bool ForceEDCCA;
108298 + u8 AdapEn_RSSI;
108299 + s8 Force_TH_H;
108300 + s8 Force_TH_L;
108301 + u8 IGI_LowerBound;
108302 +
108303 + bool bPreEdccaEnable;
108304 +#endif
108305 };
108306
108307
108308 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192d_hal.h
108309 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192d_hal.h
108310 @@ -20,6 +20,7 @@
108311 #ifndef __RTL8192D_HAL_H__
108312 #define __RTL8192D_HAL_H__
108313
108314 +#include "hal_com.h"
108315 #include "rtl8192d_spec.h"
108316 #include "Hal8192DPhyReg.h"
108317 #include "Hal8192DPhyCfg.h"
108318 @@ -29,6 +30,136 @@
108319 #include "rtl8192d_xmit.h"
108320 #include "rtl8192d_cmd.h"
108321
108322 +/*---------------------------Define Local Constant---------------------------*/
108323 +/* Channel switch:The size of command tables for switch channel*/
108324 +#define MAX_PRECMD_CNT 16
108325 +#define MAX_RFDEPENDCMD_CNT 16
108326 +#define MAX_POSTCMD_CNT 16
108327 +
108328 +#define MAX_DOZE_WAITING_TIMES_9x 64
108329 +
108330 +#define MAX_RF_IMR_INDEX 12
108331 +#define MAX_RF_IMR_INDEX_NORMAL 13
108332 +#define RF_REG_NUM_for_C_CUT_5G 6
108333 +#define RF_REG_NUM_for_C_CUT_5G_internalPA 7
108334 +#define RF_REG_NUM_for_C_CUT_2G 5
108335 +#define RF_CHNL_NUM_5G 19
108336 +#define RF_CHNL_NUM_5G_40M 17
108337 +#define TARGET_CHNL_NUM_5G 221
108338 +#define TARGET_CHNL_NUM_2G 14
108339 +#define TARGET_CHNL_NUM_2G_5G 59
108340 +#define CV_CURVE_CNT 64
108341 +
108342 +//static u32 RF_REG_FOR_5G_SWCHNL[MAX_RF_IMR_INDEX]={0,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x38,0x39,0x0};
108343 +static u32 RF_REG_FOR_5G_SWCHNL_NORMAL[MAX_RF_IMR_INDEX_NORMAL]={0,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x0};
108344 +
108345 +static u8 RF_REG_for_C_CUT_5G[RF_REG_NUM_for_C_CUT_5G] =
108346 + {RF_SYN_G1, RF_SYN_G2, RF_SYN_G3, RF_SYN_G4, RF_SYN_G5, RF_SYN_G6};
108347 +
108348 +static u8 RF_REG_for_C_CUT_5G_internalPA[RF_REG_NUM_for_C_CUT_5G_internalPA] =
108349 + {0x0B, 0x48, 0x49, 0x4B, 0x03, 0x04, 0x0E};
108350 +static u8 RF_REG_for_C_CUT_2G[RF_REG_NUM_for_C_CUT_2G] =
108351 + {RF_SYN_G1, RF_SYN_G2, RF_SYN_G3, RF_SYN_G7, RF_SYN_G8};
108352 +
108353 +#if DBG
108354 +static u32 RF_REG_MASK_for_C_CUT_2G[RF_REG_NUM_for_C_CUT_2G] =
108355 + {BIT19|BIT18|BIT17|BIT14|BIT1, BIT10|BIT9,
108356 + BIT18|BIT17|BIT16|BIT1, BIT2|BIT1,
108357 + BIT15|BIT14|BIT13|BIT12|BIT11};
108358 +#endif //amy, temp remove
108359 +static u8 RF_CHNL_5G[RF_CHNL_NUM_5G] =
108360 + {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140};
108361 +static u8 RF_CHNL_5G_40M[RF_CHNL_NUM_5G_40M] =
108362 + {38,42,46,50,54,58,62,102,106,110,114,118,122,126,130,134,138};
108363 +
108364 +static u32 RF_REG_Param_for_C_CUT_5G[5][RF_REG_NUM_for_C_CUT_5G] = {
108365 + {0xE43BE, 0xFC638, 0x77C0A, 0xDE471, 0xd7110, 0x8EB04},
108366 + {0xE43BE, 0xFC078, 0xF7C1A, 0xE0C71, 0xD7550, 0xAEB04},
108367 + {0xE43BF, 0xFF038, 0xF7C0A, 0xDE471, 0xE5550, 0xAEB04},
108368 + {0xE43BF, 0xFF079, 0xF7C1A, 0xDE471, 0xE5550, 0xAEB04},
108369 + {0xE43BF, 0xFF038, 0xF7C1A, 0xDE471, 0xd7550, 0xAEB04}};
108370 +
108371 +static u32 RF_REG_Param_for_C_CUT_2G[3][RF_REG_NUM_for_C_CUT_2G] = {
108372 + {0x643BC, 0xFC038, 0x77C1A, 0x41289, 0x01840},
108373 + {0x643BC, 0xFC038, 0x07C1A, 0x41289, 0x01840},
108374 + {0x243BC, 0xFC438, 0x07C1A, 0x4128B, 0x0FC41}};
108375 +
108376 +#if SWLCK == 1
108377 +static u32 RF_REG_SYN_G4_for_C_CUT_2G = 0xD1C31&0x7FF;
108378 +#endif
108379 +
108380 +static u32 RF_REG_Param_for_C_CUT_5G_internalPA[3][RF_REG_NUM_for_C_CUT_5G_internalPA] = {
108381 + {0x01a00, 0x40443, 0x00eb5, 0x89bec, 0x94a12, 0x94a12, 0x94a12},
108382 + {0x01800, 0xc0443, 0x00730, 0x896ee, 0x94a52, 0x94a52, 0x94a52},
108383 + {0x01800, 0xc0443, 0x00730, 0x896ee, 0x94a12, 0x94a12, 0x94a12}};
108384 +
108385 +
108386 +
108387 +//[mode][patha+b][reg]
108388 +static u32 RF_IMR_Param_Normal[1][3][MAX_RF_IMR_INDEX_NORMAL]={{
108389 + {0x70000,0x00ff0,0x4400f,0x00ff0,0x0,0x0,0x0,0x0,0x0,0x64888,0xe266c,0x00090,0x22fff},// channel 1-14.
108390 + {0x70000,0x22880,0x4470f,0x55880,0x00070, 0x88000, 0x0,0x88080,0x70000,0x64a82,0xe466c,0x00090,0x32c9a}, //path 36-64
108391 + {0x70000,0x44880,0x4477f,0x77880,0x00070, 0x88000, 0x0,0x880b0,0x0,0x64b82,0xe466c,0x00090,0x32c9a} //100 -165
108392 +}
108393 +};
108394 +
108395 +//static u32 CurveIndex_5G[TARGET_CHNL_NUM_5G]={0};
108396 +//static u32 CurveIndex_2G[TARGET_CHNL_NUM_2G]={0};
108397 +static u32 CurveIndex[TARGET_CHNL_NUM_2G_5G]={0};
108398 +
108399 +static u32 TargetChnl_5G[TARGET_CHNL_NUM_5G] = {
108400 +25141, 25116, 25091, 25066, 25041,
108401 +25016, 24991, 24966, 24941, 24917,
108402 +24892, 24867, 24843, 24818, 24794,
108403 +24770, 24765, 24721, 24697, 24672,
108404 +24648, 24624, 24600, 24576, 24552,
108405 +24528, 24504, 24480, 24457, 24433,
108406 +24409, 24385, 24362, 24338, 24315,
108407 +24291, 24268, 24245, 24221, 24198,
108408 +24175, 24151, 24128, 24105, 24082,
108409 +24059, 24036, 24013, 23990, 23967,
108410 +23945, 23922, 23899, 23876, 23854,
108411 +23831, 23809, 23786, 23764, 23741,
108412 +23719, 23697, 23674, 23652, 23630,
108413 +23608, 23586, 23564, 23541, 23519,
108414 +23498, 23476, 23454, 23432, 23410,
108415 +23388, 23367, 23345, 23323, 23302,
108416 +23280, 23259, 23237, 23216, 23194,
108417 +23173, 23152, 23130, 23109, 23088,
108418 +23067, 23046, 23025, 23003, 22982,
108419 +22962, 22941, 22920, 22899, 22878,
108420 +22857, 22837, 22816, 22795, 22775,
108421 +22754, 22733, 22713, 22692, 22672,
108422 +22652, 22631, 22611, 22591, 22570,
108423 +22550, 22530, 22510, 22490, 22469,
108424 +22449, 22429, 22409, 22390, 22370,
108425 +22350, 22336, 22310, 22290, 22271,
108426 +22251, 22231, 22212, 22192, 22173,
108427 +22153, 22134, 22114, 22095, 22075,
108428 +22056, 22037, 22017, 21998, 21979,
108429 +21960, 21941, 21921, 21902, 21883,
108430 +21864, 21845, 21826, 21807, 21789,
108431 +21770, 21751, 21732, 21713, 21695,
108432 +21676, 21657, 21639, 21620, 21602,
108433 +21583, 21565, 21546, 21528, 21509,
108434 +21491, 21473, 21454, 21436, 21418,
108435 +21400, 21381, 21363, 21345, 21327,
108436 +21309, 21291, 21273, 21255, 21237,
108437 +21219, 21201, 21183, 21166, 21148,
108438 +21130, 21112, 21095, 21077, 21059,
108439 +21042, 21024, 21007, 20989, 20972,
108440 +25679, 25653, 25627, 25601, 25575,
108441 +25549, 25523, 25497, 25471, 25446,
108442 +25420, 25394, 25369, 25343, 25318,
108443 +25292, 25267, 25242, 25216, 25191,
108444 +25166 };
108445 +
108446 +static u32 TargetChnl_2G[TARGET_CHNL_NUM_2G] = { // channel 1~14
108447 +26084, 26030, 25976, 25923, 25869, 25816, 25764,
108448 +25711, 25658, 25606, 25554, 25502, 25451, 25328
108449 +};
108450 +
108451 +
108452 #ifdef CONFIG_PCI_HCI
108453 #include <pci_ops.h>
108454 #include "Hal8192DEHWImg.h"
108455 @@ -79,7 +210,7 @@
108456 #define Rtl8192D_RadioB_2T_intPAArray Rtl8192DERadioB_2T_intPAArray
108457
108458 // Array length
108459 - #define Rtl8192D_FwImageArrayLength Rtl8192DEImgArrayLength
108460 + #define Rtl8192D_FwImageArrayLength Rtl8192DEImgArrayLength
108461 #define Rtl8192D_MAC_ArrayLength Rtl8192DEMAC_2T_ArrayLength
108462 #define Rtl8192D_AGCTAB_5GArrayLength Rtl8192DEAGCTAB_5GArrayLength
108463 #define Rtl8192D_AGCTAB_2GArrayLength Rtl8192DEAGCTAB_2GArrayLength
108464 @@ -201,8 +332,9 @@
108465 (le16_to_cpu(_pFwHdr->Signature)&0xFFFF) == 0x92D2 ||\
108466 (le16_to_cpu(_pFwHdr->Signature)&0xFFFF) == 0x92D3 )
108467
108468 -#define FW_8192D_SIZE 0x8000
108469 +#define FW_8192D_SIZE 0x8020 // Max FW len = 32k + 32(FW header length).
108470 #define FW_8192D_START_ADDRESS 0x1000
108471 +#define FW_8192D_END_ADDRESS 0x1FFF
108472
108473 #define MAX_PAGE_SIZE 4096 // @ page : 4k bytes
108474
108475 @@ -344,7 +476,7 @@ typedef enum _USB_RX_AGG_MODE{
108476
108477 // For Test Chip Setting
108478 // (HPQ + LPQ + PUBQ) shall be TX_TOTAL_PAGE_NUMBER
108479 -#define TEST_PAGE_NUM_PUBQ 0x89
108480 +#define TEST_PAGE_NUM_PUBQ_92DU 0x89
108481 #define TX_TOTAL_PAGE_NUMBER_92D_DUAL_MAC 0x7A
108482 #define NORMAL_PAGE_NUM_PUBQ_92D_DUAL_MAC 0x5A
108483 #define NORMAL_PAGE_NUM_HPQ_92D_DUAL_MAC 0x10
108484 @@ -366,16 +498,16 @@ typedef enum _USB_RX_AGG_MODE{
108485 #define WMM_NORMAL_TX_TOTAL_PAGE_NUMBER 0xF5
108486 #define WMM_NORMAL_TX_PAGE_BOUNDARY (WMM_TEST_TX_TOTAL_PAGE_NUMBER + 1) //F6
108487
108488 -#define WMM_NORMAL_PAGE_NUM_PUBQ 0xB0
108489 -#define WMM_NORMAL_PAGE_NUM_HPQ 0x29
108490 -#define WMM_NORMAL_PAGE_NUM_LPQ 0x1C
108491 -#define WMM_NORMAL_PAGE_NUM_NPQ 0x1C
108492 -
108493 #define WMM_NORMAL_PAGE_NUM_PUBQ_92D 0X65//0x82
108494 #define WMM_NORMAL_PAGE_NUM_HPQ_92D 0X30//0x29
108495 #define WMM_NORMAL_PAGE_NUM_LPQ_92D 0X30
108496 #define WMM_NORMAL_PAGE_NUM_NPQ_92D 0X30
108497
108498 +#define WMM_NORMAL_PAGE_NUM_PUBQ_92D_DUAL_MAC 0X32
108499 +#define WMM_NORMAL_PAGE_NUM_HPQ_92D_DUAL_MAC 0X18
108500 +#define WMM_NORMAL_PAGE_NUM_LPQ_92D_DUAL_MAC 0X18
108501 +#define WMM_NORMAL_PAGE_NUM_NPQ_92D_DUAL_MAC 0X18
108502 +
108503 //-------------------------------------------------------------------------
108504 // Chip specific
108505 //-------------------------------------------------------------------------
108506 @@ -524,6 +656,22 @@ typedef enum _PA_MODE {
108507 PA_MODE_INTERNAL_SPDT = 0x02
108508 } PA_MODE;
108509
108510 +/* Copy from rtl8192c */
108511 +enum c2h_id_8192d {
108512 + C2H_DBG = 0,
108513 + C2H_TSF = 1,
108514 + C2H_AP_RPT_RSP = 2,
108515 + C2H_CCX_TX_RPT = 3,
108516 + C2H_BT_RSSI = 4,
108517 + C2H_BT_OP_MODE = 5,
108518 + C2H_EXT_RA_RPT = 6,
108519 + C2H_HW_INFO_EXCH = 10,
108520 + C2H_C2H_H2C_TEST = 11,
108521 + C2H_BT_INFO = 12,
108522 + C2H_BT_MP_INFO = 15,
108523 + MAX_C2HEVENT
108524 +};
108525 +
108526 #ifdef CONFIG_PCI_HCI
108527 struct hal_data_8192de
108528 {
108529 @@ -658,8 +806,6 @@ struct hal_data_8192de
108530
108531 BOOLEAN bEarlyModeEnable;
108532
108533 - ATOMIC_T IQKRdyForXmit;// Tx must wait for IQK done
108534 -
108535 #if 1
108536 IQK_MATRIX_REGS_SETTING IQKMatrixRegSetting[IQK_Matrix_Settings_NUM];
108537 #else
108538 @@ -857,8 +1003,6 @@ struct hal_data_8192du
108539
108540 BOOLEAN bEarlyModeEnable;
108541
108542 - ATOMIC_T IQKRdyForXmit;// Tx must wait for IQK done
108543 -
108544 #if 1
108545 IQK_MATRIX_REGS_SETTING IQKMatrixRegSetting[IQK_Matrix_Settings_NUM];
108546 #else
108547 @@ -935,11 +1079,10 @@ typedef struct hal_data_8192du HAL_DATA_
108548 int FirmwareDownload92D(IN PADAPTER Adapter,IN BOOLEAN bUsedWoWLANFw);
108549 VOID rtl8192d_FirmwareSelfReset(IN PADAPTER Adapter);
108550 void rtl8192d_ReadChipVersion(IN PADAPTER Adapter);
108551 -VOID rtl8192d_ReadChannelPlan(PADAPTER Adapter, u8* PROMContent, BOOLEAN AutoLoadFail);
108552 +VOID rtl8192d_EfuseParseChnlPlan(PADAPTER Adapter, u8 *hwinfo, BOOLEAN AutoLoadFail);
108553 VOID rtl8192d_ReadTxPowerInfo(PADAPTER Adapter, u8* PROMContent, BOOLEAN AutoLoadFail);
108554 VOID rtl8192d_ResetDualMacSwitchVariables(IN PADAPTER Adapter);
108555 u8 GetEEPROMSize8192D(PADAPTER Adapter);
108556 -void rtl8192d_HalSetBrateCfg(PADAPTER Adapter, u8 *mBratesOS, u16 *pBrateCfg);
108557 BOOLEAN PHY_CheckPowerOffFor8192D(PADAPTER Adapter);
108558 VOID PHY_SetPowerOnFor8192D(PADAPTER Adapter);
108559 //void PHY_ConfigMacPhyMode92D(PADAPTER Adapter);
108560 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192d_led.h
108561 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192d_led.h
108562 @@ -16,8 +16,7 @@
108563 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
108564 *
108565 *
108566 -
108567 -******************************************************************************/
108568 + ******************************************************************************/
108569 #ifndef __RTL8192D_LED_H_
108570 #define __RTL8192D_LED_H_
108571
108572 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192d_recv.h
108573 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192d_recv.h
108574 @@ -61,7 +61,11 @@
108575 //#define MAX_RECVBUF_SZ (32768) // 32k
108576 //#define MAX_RECVBUF_SZ (16384) //16K
108577 //#define MAX_RECVBUF_SZ (10240) //10K
108578 - #define MAX_RECVBUF_SZ (15360) // 15k < 16k
108579 + #ifdef CONFIG_PLATFORM_MSTAR
108580 + #define MAX_RECVBUF_SZ (8192) // 8K
108581 + #else
108582 + #define MAX_RECVBUF_SZ (15360) // 15k < 16k
108583 + #endif
108584 #else
108585 #define MAX_RECVBUF_SZ (4000) // about 4K
108586 #endif
108587 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192d_rf.h
108588 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192d_rf.h
108589 @@ -16,8 +16,7 @@
108590 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
108591 *
108592 *
108593 -
108594 -******************************************************************************/
108595 + ******************************************************************************/
108596 /******************************************************************************
108597 *
108598 *
108599 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192d_spec.h
108600 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192d_spec.h
108601 @@ -113,7 +113,9 @@
108602 #define REG_FSISR 0x0054
108603
108604 #define REG_MCUFWDL 0x0080
108605 -#define REG_WOWLAN_REASON 0x0081
108606 +#ifdef CONFIG_WOWLAN
108607 +#define REG_WOWLAN_REASON 0x00FC
108608 +#endif // CONFIG_WOWLAN
108609 #define REG_HMEBOX_EXT_0 0x0088
108610 #define REG_HMEBOX_EXT_1 0x008A
108611 #define REG_HMEBOX_EXT_2 0x008C
108612 @@ -277,6 +279,12 @@
108613 #define REG_RD_RESP_PKT_TH 0x0463
108614 #define REG_INIRTS_RATE_SEL 0x0480
108615 #define REG_INIDATA_RATE_SEL 0x0484
108616 +
108617 +//#define REG_FW_TSF_SYNC_CNT 0x04A0
108618 +#define REG_FW_RESET_TSF_CNT_1 0x05FC
108619 +#define REG_FW_RESET_TSF_CNT_0 0x05FD
108620 +#define REG_FW_BCN_DIS_CNT 0x05FE
108621 +
108622 #define REG_POWER_STATUS 0x04A4
108623 #define REG_POWER_STAGE1 0x04B4
108624 #define REG_POWER_STAGE2 0x04B8
108625 @@ -617,53 +625,6 @@ Default: 00b.
108626 #define RATR_MCS14 0x04000000
108627 #define RATR_MCS15 0x08000000
108628
108629 -
108630 -// NOTE: For 92CU - Ziv
108631 -//CCK
108632 -#define RATE_1M BIT(0)
108633 -#define RATE_2M BIT(1)
108634 -#define RATE_5_5M BIT(2)
108635 -#define RATE_11M BIT(3)
108636 -//OFDM
108637 -#define RATE_6M BIT(4)
108638 -#define RATE_9M BIT(5)
108639 -#define RATE_12M BIT(6)
108640 -#define RATE_18M BIT(7)
108641 -#define RATE_24M BIT(8)
108642 -#define RATE_36M BIT(9)
108643 -#define RATE_48M BIT(10)
108644 -#define RATE_54M BIT(11)
108645 -//MCS 1 Spatial Stream
108646 -#define RATE_MCS0 BIT(12)
108647 -#define RATE_MCS1 BIT(13)
108648 -#define RATE_MCS2 BIT(14)
108649 -#define RATE_MCS3 BIT(15)
108650 -#define RATE_MCS4 BIT(16)
108651 -#define RATE_MCS5 BIT(17)
108652 -#define RATE_MCS6 BIT(18)
108653 -#define RATE_MCS7 BIT(19)
108654 -//MCS 2 Spatial Stream
108655 -#define RATE_MCS8 BIT(20)
108656 -#define RATE_MCS9 BIT(21)
108657 -#define RATE_MCS10 BIT(22)
108658 -#define RATE_MCS11 BIT(23)
108659 -#define RATE_MCS12 BIT(24)
108660 -#define RATE_MCS13 BIT(25)
108661 -#define RATE_MCS14 BIT(26)
108662 -#define RATE_MCS15 BIT(27)
108663 -
108664 -
108665 -
108666 -
108667 -// ALL CCK Rate
108668 -#define RATE_ALL_CCK RATR_1M|RATR_2M|RATR_55M|RATR_11M
108669 -#define RATE_ALL_OFDM_AG RATR_6M|RATR_9M|RATR_12M|RATR_18M|RATR_24M|\
108670 - RATR_36M|RATR_48M|RATR_54M
108671 -#define RATE_ALL_OFDM_1SS RATR_MCS0|RATR_MCS1|RATR_MCS2|RATR_MCS3 |\
108672 - RATR_MCS4|RATR_MCS5|RATR_MCS6|RATR_MCS7
108673 -#define RATE_ALL_OFDM_2SS RATR_MCS8|RATR_MCS9|RATR_MCS10|RATR_MCS11|\
108674 - RATR_MCS12|RATR_MCS13|RATR_MCS14|RATR_MCS15
108675 -
108676 //----------------------------------------------------------------------------
108677 // 8192C BW_OPMODE bits (Offset 0x203, 8bit)
108678 //----------------------------------------------------------------------------
108679 @@ -921,7 +882,9 @@ Default: 00b.
108680 #define EEPROM_VID 0xC // SE Vendor ID.A-B
108681 #define EEPROM_PID 0xE // SE Device ID. C-D
108682 #define EEPROM_ENDPOINT_SETTING 0x10
108683 +#ifdef CONFIG_WOWLAN
108684 #define EEPROM_Option_Setting 0x11
108685 +#endif // CONFIG_WOWLAN
108686 #define EEPROM_CHIRP_K 0x12 // Changed
108687 #define EEPROM_USB_PHY 0x13 // Changed
108688 #define EEPROM_NORMAL_BoardType EEPROM_RF_OPT1 //[7:5]
108689 @@ -1696,7 +1659,6 @@ Current IOREG MAP
108690 #define EN_MBSSID BIT(1)
108691 #define EN_TXBCN_RPT BIT(2)
108692 #define EN_BCN_FUNCTION BIT(3)
108693 -
108694 // The same function but different bit field.
108695 #define DIS_TSF_UDT0_NORMAL_CHIP BIT(4)
108696 #define DIS_TSF_UDT0_TEST_CHIP BIT(5)
108697 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192d_xmit.h
108698 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192d_xmit.h
108699 @@ -16,22 +16,10 @@
108700 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
108701 *
108702 *
108703 -
108704 -******************************************************************************/
108705 + ******************************************************************************/
108706 #ifndef _RTL8192D_XMIT_H_
108707 #define _RTL8192D_XMIT_H_
108708
108709 -#define VO_QUEUE_INX 0
108710 -#define VI_QUEUE_INX 1
108711 -#define BE_QUEUE_INX 2
108712 -#define BK_QUEUE_INX 3
108713 -#define BCN_QUEUE_INX 4
108714 -#define MGT_QUEUE_INX 5
108715 -#define HIGH_QUEUE_INX 6
108716 -#define TXCMD_QUEUE_INX 7
108717 -
108718 -#define HW_QUEUE_ENTRY 8
108719 -
108720 //
108721 // Queue Select Value in TxDesc
108722 //
108723 @@ -58,6 +46,52 @@
108724 #define SET_EARLYMODE_LEN3(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr+4, 8, 12, __Value)
108725 #define SET_EARLYMODE_LEN4(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr+4, 20, 12, __Value)
108726
108727 +/* Copy from rtl8192c */
108728 +struct txrpt_ccx_8192d {
108729 + /* offset 0 */
108730 + u8 retry_cnt:6;
108731 + u8 rsvd_0:2;
108732 +
108733 + /* offset 1 */
108734 + u8 rts_retry_cnt:6;
108735 + u8 rsvd_1:2;
108736 +
108737 + /* offset 2 */
108738 + u8 ccx_qtime0;
108739 + u8 ccx_qtime1;
108740 +
108741 + /* offset 4 */
108742 + u8 missed_pkt_num:5;
108743 + u8 rsvd_4:3;
108744 +
108745 + /* offset 5 */
108746 + u8 mac_id:5;
108747 + u8 des1_fragssn:3;
108748 +
108749 + /* offset 6 */
108750 + u8 rpt_pkt_num:5;
108751 + u8 pkt_drop:1;
108752 + u8 lifetime_over:1;
108753 + u8 retry_over:1;
108754 +
108755 + /* offset 7*/
108756 + u8 edca_tx_queue:4;
108757 + u8 rsvd_7:1;
108758 + u8 bmc:1;
108759 + u8 pkt_ok:1;
108760 + u8 int_ccx:1;
108761 +};
108762 +
108763 +#define txrpt_ccx_qtime_8192d(txrpt_ccx) ((txrpt_ccx)->ccx_qtime0+((txrpt_ccx)->ccx_qtime1<<8))
108764 +
108765 +#ifdef CONFIG_XMIT_ACK
108766 +void dump_txrpt_ccx_8192d(void *buf);
108767 +void handle_txrpt_ccx_8192d(_adapter *adapter, void *buf);
108768 +#else
108769 +#define dump_txrpt_ccx_8192d(buf) do {} while(0)
108770 +#define handle_txrpt_ccx_8192d(adapter, buf) do {} while(0)
108771 +#endif
108772 +
108773 #ifdef CONFIG_USB_HCI
108774
108775 #ifdef CONFIG_USB_TX_AGGREGATION
108776 @@ -72,10 +106,13 @@ void rtl8192du_cal_txdesc_chksum(struct
108777
108778 s32 rtl8192du_xmitframe_complete(_adapter *padapter, struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf);
108779
108780 -void rtl8192du_mgnt_xmit(_adapter *padapter, struct xmit_frame *pmgntframe);
108781 +s32 rtl8192du_mgnt_xmit(_adapter *padapter, struct xmit_frame *pmgntframe);
108782
108783 s32 rtl8192du_hal_xmit(_adapter *padapter, struct xmit_frame *pxmitframe);
108784
108785 +s32 rtl8192du_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe);
108786 +
108787 +
108788 #ifdef CONFIG_HOSTAPD_MLME
108789 s32 rtl8192du_hostap_mgnt_xmit_entry(_adapter *padapter, _pkt *pkt);
108790 #endif
108791 @@ -91,10 +128,12 @@ struct xmit_buf *rtl8192de_dequeue_xmitb
108792
108793 void rtl8192de_xmitframe_resume(_adapter *padapter);
108794
108795 -void rtl8192de_mgnt_xmit(_adapter *padapter, struct xmit_frame *pmgntframe);
108796 +s32 rtl8192de_mgnt_xmit(_adapter *padapter, struct xmit_frame *pmgntframe);
108797
108798 s32 rtl8192de_hal_xmit(_adapter *padapter, struct xmit_frame *pxmitframe);
108799
108800 +s32 rtl8192de_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe);
108801 +
108802 #ifdef CONFIG_HOSTAPD_MLME
108803 s32 rtl8192de_hostap_mgnt_xmit_entry(_adapter *padapter, _pkt *pkt);
108804 #endif
108805 --- a/drivers/net/wireless/rtl8192cu/include/rtw_android.h
108806 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_android.h
108807 @@ -59,22 +59,32 @@ enum ANDROID_WIFI_CMD {
108808
108809 ANDROID_WIFI_CMD_BLOCK,
108810
108811 + ANDROID_WIFI_CMD_WFD_ENABLE,
108812 + ANDROID_WIFI_CMD_WFD_DISABLE,
108813 +
108814 + ANDROID_WIFI_CMD_WFD_SET_TCPPORT,
108815 + ANDROID_WIFI_CMD_WFD_SET_MAX_TPUT,
108816 + ANDROID_WIFI_CMD_WFD_SET_DEVTYPE,
108817 +
108818 ANDROID_WIFI_CMD_MAX
108819 };
108820
108821 int rtw_android_cmdstr_to_num(char *cmdstr);
108822 int rtw_android_priv_cmd(struct net_device *net, struct ifreq *ifr, int cmd);
108823
108824 -#if defined(CONFIG_WIFI_CONTROL_FUNC) && 0
108825 -int wl_android_wifictrl_func_add(void);
108826 -void wl_android_wifictrl_func_del(void);
108827 +#if defined(RTW_ENABLE_WIFI_CONTROL_FUNC)
108828 +int rtw_android_wifictrl_func_add(void);
108829 +void rtw_android_wifictrl_func_del(void);
108830 void* wl_android_prealloc(int section, unsigned long size);
108831
108832 int wifi_get_irq_number(unsigned long *irq_flags_ptr);
108833 int wifi_set_power(int on, unsigned long msec);
108834 int wifi_get_mac_addr(unsigned char *buf);
108835 void *wifi_get_country_code(char *ccode);
108836 -#endif /* CONFIG_WIFI_CONTROL_FUNC */
108837 +#else
108838 +static int rtw_android_wifictrl_func_add(void) { return 0; }
108839 +static void rtw_android_wifictrl_func_del(void) {}
108840 +#endif /* defined(RTW_ENABLE_WIFI_CONTROL_FUNC) */
108841
108842 #endif //__RTW_ANDROID_H__
108843
108844 --- /dev/null
108845 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_ap.h
108846 @@ -0,0 +1,64 @@
108847 +/******************************************************************************
108848 + *
108849 + * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
108850 + *
108851 + * This program is free software; you can redistribute it and/or modify it
108852 + * under the terms of version 2 of the GNU General Public License as
108853 + * published by the Free Software Foundation.
108854 + *
108855 + * This program is distributed in the hope that it will be useful, but WITHOUT
108856 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
108857 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
108858 + * more details.
108859 + *
108860 + * You should have received a copy of the GNU General Public License along with
108861 + * this program; if not, write to the Free Software Foundation, Inc.,
108862 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
108863 + *
108864 + *
108865 + ******************************************************************************/
108866 +#ifndef __RTW_AP_H_
108867 +#define __RTW_AP_H_
108868 +
108869 +#include <drv_conf.h>
108870 +#include <osdep_service.h>
108871 +#include <drv_types.h>
108872 +
108873 +
108874 +#ifdef CONFIG_AP_MODE
108875 +
108876 +//external function
108877 +extern void rtw_indicate_sta_assoc_event(_adapter *padapter, struct sta_info *psta);
108878 +extern void rtw_indicate_sta_disassoc_event(_adapter *padapter, struct sta_info *psta);
108879 +
108880 +
108881 +void init_mlme_ap_info(_adapter *padapter);
108882 +void free_mlme_ap_info(_adapter *padapter);
108883 +//void update_BCNTIM(_adapter *padapter);
108884 +void rtw_add_bcn_ie(_adapter *padapter, WLAN_BSSID_EX *pnetwork, u8 index, u8 *data, u8 len);
108885 +void rtw_remove_bcn_ie(_adapter *padapter, WLAN_BSSID_EX *pnetwork, u8 index);
108886 +void update_beacon(_adapter *padapter, u8 ie_id, u8 *oui, u8 tx);
108887 +void expire_timeout_chk(_adapter *padapter);
108888 +void update_sta_info_apmode(_adapter *padapter, struct sta_info *psta);
108889 +int rtw_check_beacon_data(_adapter *padapter, u8 *pbuf, int len);
108890 +void rtw_ap_restore_network(_adapter *padapter);
108891 +void rtw_set_macaddr_acl(_adapter *padapter, int mode);
108892 +int rtw_acl_add_sta(_adapter *padapter, u8 *addr);
108893 +int rtw_acl_remove_sta(_adapter *padapter, u8 *addr);
108894 +
108895 +#ifdef CONFIG_NATIVEAP_MLME
108896 +void associated_clients_update(_adapter *padapter, u8 updated);
108897 +void bss_cap_update_on_sta_join(_adapter *padapter, struct sta_info *psta);
108898 +u8 bss_cap_update_on_sta_leave(_adapter *padapter, struct sta_info *psta);
108899 +void sta_info_update(_adapter *padapter, struct sta_info *psta);
108900 +void ap_sta_info_defer_update(_adapter *padapter, struct sta_info *psta);
108901 +u8 ap_free_sta(_adapter *padapter, struct sta_info *psta, bool active, u16 reason);
108902 +int rtw_sta_flush(_adapter *padapter);
108903 +int rtw_ap_inform_ch_switch(_adapter *padapter, u8 new_ch, u8 ch_offset);
108904 +void start_ap_mode(_adapter *padapter);
108905 +void stop_ap_mode(_adapter *padapter);
108906 +#endif
108907 +#endif //end of CONFIG_AP_MODE
108908 +
108909 +#endif
108910 +
108911 --- a/drivers/net/wireless/rtl8192cu/include/rtw_byteorder.h
108912 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_byteorder.h
108913 @@ -16,8 +16,7 @@
108914 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
108915 *
108916 *
108917 -
108918 -******************************************************************************/
108919 + ******************************************************************************/
108920 #ifndef _RTL871X_BYTEORDER_H_
108921 #define _RTL871X_BYTEORDER_H_
108922
108923 --- a/drivers/net/wireless/rtl8192cu/include/rtw_cmd.h
108924 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_cmd.h
108925 @@ -16,8 +16,7 @@
108926 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
108927 *
108928 *
108929 -
108930 -******************************************************************************/
108931 + ******************************************************************************/
108932 #ifndef __RTW_CMD_H_
108933 #define __RTW_CMD_H_
108934
108935 @@ -47,6 +46,7 @@
108936 #endif
108937
108938 struct cmd_obj {
108939 + _adapter *padapter;
108940 u16 cmdcode;
108941 u8 res;
108942 u8 *parmbuf;
108943 @@ -71,6 +71,7 @@
108944 u32 cmd_done_cnt;
108945 u32 rsp_cnt;
108946 u8 cmdthd_running;
108947 + u8 stop_req;
108948 _adapter *padapter;
108949 };
108950
108951 @@ -89,7 +90,15 @@
108952 _sema evt_notify;
108953 _sema terminate_evtthread_sema;
108954 _queue evt_queue;
108955 -#endif
108956 +#endif
108957 +
108958 +//#define CONFIG_C2H_WK
108959 +#ifdef CONFIG_C2H_WK
108960 + _workitem c2h_wk;
108961 + bool c2h_wk_alive;
108962 + struct rtw_cbuf *c2h_queue;
108963 + #define C2H_QUEUE_MAX_LEN 10
108964 +#endif
108965
108966 #ifdef CONFIG_H2CLBK
108967 _sema lbkevt_done;
108968 @@ -121,6 +130,15 @@ do {\
108969 pcmd->rspsz = 0;\
108970 } while(0)
108971
108972 +struct c2h_evt_hdr {
108973 + u8 id:4;
108974 + u8 plen:4;
108975 + u8 seq;
108976 + u8 payload[0];
108977 +};
108978 +
108979 +#define c2h_evt_exist(c2h_evt) ((c2h_evt)->id || (c2h_evt)->plen)
108980 +
108981 extern u32 rtw_enqueue_cmd(struct cmd_priv *pcmdpriv, struct cmd_obj *obj);
108982 extern struct cmd_obj *rtw_dequeue_cmd(struct cmd_priv *pcmdpriv);
108983 extern void rtw_free_cmd_obj(struct cmd_obj *pcmd);
108984 @@ -131,6 +149,7 @@ extern struct evt_obj *rtw_dequeue_evt(_
108985 extern void rtw_free_evt_obj(struct evt_obj *pcmd);
108986 #endif
108987
108988 +void rtw_stop_cmd_thread(_adapter *adapter);
108989 thread_return rtw_cmd_thread(thread_context context);
108990
108991 extern u32 rtw_init_cmd_priv (struct cmd_priv *pcmdpriv);
108992 @@ -160,6 +179,10 @@ enum rtw_drvextra_cmd_id
108993 P2P_PS_WK_CID,
108994 P2P_PROTO_WK_CID,
108995 CHECK_HIQ_WK_CID,//for softap mode, check hi queue if empty
108996 + INTEl_WIDI_WK_CID,
108997 + C2H_WK_CID,
108998 + RESET_SECURITYPRIV, // add for CONFIG_IEEE80211W, none 11w also can use
108999 + FREE_ASSOC_RESOURCES, // add for CONFIG_IEEE80211W, none 11w also can use
109000 MAX_WK_CID
109001 };
109002
109003 @@ -220,7 +243,7 @@ Command Mode
109004
109005 */
109006 struct disconnect_parm {
109007 - u32 rsvd;
109008 + u32 deauth_timeout_ms;
109009 };
109010
109011 /*
109012 @@ -267,11 +290,14 @@ Command-Event Mode
109013 */
109014
109015 #define RTW_SSID_SCAN_AMOUNT 9 // for WEXT_CSCAN_AMOUNT 9
109016 +#define RTW_CHANNEL_SCAN_AMOUNT (14+37)
109017 struct sitesurvey_parm {
109018 sint scan_mode; //active: 1, passive: 0
109019 - sint bsslimit; // 1 ~ 48
109020 - // for up to 9 probreq with specific ssid
109021 + /* sint bsslimit; // 1 ~ 48 */
109022 + u8 ssid_num;
109023 + u8 ch_num;
109024 NDIS_802_11_SSID ssid[RTW_SSID_SCAN_AMOUNT];
109025 + struct rtw_ieee80211_channel ch[RTW_CHANNEL_SCAN_AMOUNT];
109026 };
109027
109028 /*
109029 @@ -320,6 +346,7 @@ when shared key ==> algorithm/keyid
109030 struct set_stakey_parm {
109031 u8 addr[ETH_ALEN];
109032 u8 algorithm;
109033 + u8 id;// currently for erasing cam entry if algorithm == _NO_PRIVACY_
109034 u8 key[16];
109035 };
109036
109037 @@ -793,9 +820,10 @@ struct addBaReq_parm
109038 };
109039
109040 /*H2C Handler index: 46 */
109041 -struct SetChannel_parm
109042 -{
109043 - u32 curr_ch;
109044 +struct set_ch_parm {
109045 + u8 ch;
109046 + u8 bw;
109047 + u8 ch_offset;
109048 };
109049
109050 #ifdef MP_FIRMWARE_OFFLOAD
109051 @@ -908,13 +936,14 @@ Result:
109052
109053 extern u8 rtw_setassocsta_cmd(_adapter *padapter, u8 *mac_addr);
109054 extern u8 rtw_setstandby_cmd(_adapter *padapter, uint action);
109055 -extern u8 rtw_sitesurvey_cmd(_adapter *padapter, NDIS_802_11_SSID *pssid, int ssid_max_num);
109056 +u8 rtw_sitesurvey_cmd(_adapter *padapter, NDIS_802_11_SSID *ssid, int ssid_num, struct rtw_ieee80211_channel *ch, int ch_num);
109057 extern u8 rtw_createbss_cmd(_adapter *padapter);
109058 extern u8 rtw_createbss_cmd_ex(_adapter *padapter, unsigned char *pbss, unsigned int sz);
109059 extern u8 rtw_setphy_cmd(_adapter *padapter, u8 modem, u8 ch);
109060 extern u8 rtw_setstakey_cmd(_adapter *padapter, u8 *psta, u8 unicast_key);
109061 +extern u8 rtw_clearstakey_cmd(_adapter *padapter, u8 *psta, u8 entry, u8 enqueue);
109062 extern u8 rtw_joinbss_cmd(_adapter *padapter, struct wlan_network* pnetwork);
109063 -extern u8 rtw_disassoc_cmd(_adapter *padapter);
109064 +u8 rtw_disassoc_cmd(_adapter *padapter, u32 deauth_timeout_ms, bool enqueue);
109065 extern u8 rtw_setopmode_cmd(_adapter *padapter, NDIS_802_11_NETWORK_INFRASTRUCTURE networktype);
109066 extern u8 rtw_setdatarate_cmd(_adapter *padapter, u8 *rateset);
109067 extern u8 rtw_setbasicrate_cmd(_adapter *padapter, u8 *rateset);
109068 @@ -931,7 +960,9 @@ extern u8 rtw_setfwdig_cmd(_adapter*pada
109069 extern u8 rtw_setfwra_cmd(_adapter*padapter, u8 type);
109070
109071 extern u8 rtw_addbareq_cmd(_adapter*padapter, u8 tid, u8 *addr);
109072 -
109073 +// add for CONFIG_IEEE80211W, none 11w also can use
109074 +extern u8 rtw_reset_securitypriv_cmd(_adapter*padapter);
109075 +extern u8 rtw_free_assoc_resources_cmd(_adapter *padapter);
109076 extern u8 rtw_dynamic_chk_wk_cmd(_adapter *adapter);
109077
109078 u8 rtw_lps_ctrl_wk_cmd(_adapter*padapter, u8 lps_ctrl_type, u8 enqueue);
109079 @@ -947,11 +978,14 @@ extern u8 rtw_ps_cmd(_adapter*padapter);
109080 u8 rtw_chk_hi_queue_cmd(_adapter*padapter);
109081 #endif
109082
109083 -extern u8 rtw_set_chplan_cmd(_adapter*padapter, u8 chplan, u8 enaueue);
109084 +u8 rtw_set_ch_cmd(_adapter*padapter, u8 ch, u8 bw, u8 ch_offset, u8 enqueue);
109085 +extern u8 rtw_set_chplan_cmd(_adapter*padapter, u8 chplan, u8 enqueue);
109086 extern u8 rtw_led_blink_cmd(_adapter*padapter, PLED_871x pLed);
109087 extern u8 rtw_set_csa_cmd(_adapter*padapter, u8 new_ch_no);
109088 extern u8 rtw_tdls_cmd(_adapter*padapter, u8 *addr, u8 option);
109089
109090 +extern u8 rtw_c2h_wk_cmd(PADAPTER padapter, u8 *c2h_evt);
109091 +
109092 u8 rtw_drvextra_cmd_hdl(_adapter *padapter, unsigned char *pbuf);
109093
109094 extern void rtw_survey_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd);
109095 @@ -1041,7 +1075,7 @@ enum rtw_h2c_cmd
109096
109097 GEN_CMD_CODE(_SetChannelPlan), /*59*/
109098 GEN_CMD_CODE(_LedBlink), /*60*/
109099 -
109100 +
109101 GEN_CMD_CODE(_SetChannelSwitch), /*61*/
109102 GEN_CMD_CODE(_TDLS), /*62*/
109103
109104 @@ -1123,6 +1157,7 @@ struct _cmd_callback rtw_cmd_callback[]
109105 {GEN_CMD_CODE(_Set_H2C_MSG), NULL},/*58*/
109106 {GEN_CMD_CODE(_SetChannelPlan), NULL},/*59*/
109107 {GEN_CMD_CODE(_LedBlink), NULL},/*60*/
109108 +
109109 {GEN_CMD_CODE(_SetChannelSwitch), NULL},/*61*/
109110 {GEN_CMD_CODE(_TDLS), NULL},/*62*/
109111 };
109112 --- a/drivers/net/wireless/rtl8192cu/include/rtw_debug.h
109113 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_debug.h
109114 @@ -1,7 +1,7 @@
109115 /******************************************************************************
109116 *
109117 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
109118 - *
109119 + *
109120 * This program is free software; you can redistribute it and/or modify it
109121 * under the terms of version 2 of the GNU General Public License as
109122 * published by the Free Software Foundation.
109123 @@ -25,6 +25,7 @@
109124 #include <drv_types.h>
109125
109126
109127 +#define _no_debug_ 0
109128 #define _drv_emerg_ 1
109129 #define _drv_alert_ 2
109130 #define _drv_crit_ 3
109131 @@ -34,72 +35,75 @@
109132 #define _drv_info_ 7
109133 #define _drv_dump_ 8
109134 #define _drv_debug_ 9
109135 +#define _drv_always_ _drv_emerg_
109136
109137 -
109138 -#define _module_rtl871x_xmit_c_ BIT(0)
109139 -#define _module_xmit_osdep_c_ BIT(1)
109140 -#define _module_rtl871x_recv_c_ BIT(2)
109141 -#define _module_recv_osdep_c_ BIT(3)
109142 -#define _module_rtl871x_mlme_c_ BIT(4)
109143 -#define _module_mlme_osdep_c_ BIT(5)
109144 -#define _module_rtl871x_sta_mgt_c_ BIT(6)
109145 -#define _module_rtl871x_cmd_c_ BIT(7)
109146 -#define _module_cmd_osdep_c_ BIT(8)
109147 -#define _module_rtl871x_io_c_ BIT(9)
109148 -#define _module_io_osdep_c_ BIT(10)
109149 -#define _module_os_intfs_c_ BIT(11)
109150 -#define _module_rtl871x_security_c_ BIT(12)
109151 -#define _module_rtl871x_eeprom_c_ BIT(13)
109152 -#define _module_hal_init_c_ BIT(14)
109153 -#define _module_hci_hal_init_c_ BIT(15)
109154 -#define _module_rtl871x_ioctl_c_ BIT(16)
109155 -#define _module_rtl871x_ioctl_set_c_ BIT(17)
109156 -#define _module_rtl871x_ioctl_query_c_ BIT(18)
109157 -#define _module_rtl871x_pwrctrl_c_ BIT(19)
109158 -#define _module_hci_intfs_c_ BIT(20)
109159 -#define _module_hci_ops_c_ BIT(21)
109160 -#define _module_osdep_service_c_ BIT(22)
109161 +#define _module_rtl871x_xmit_c_ BIT(0)
109162 +#define _module_xmit_osdep_c_ BIT(1)
109163 +#define _module_rtl871x_recv_c_ BIT(2)
109164 +#define _module_recv_osdep_c_ BIT(3)
109165 +#define _module_rtl871x_mlme_c_ BIT(4)
109166 +#define _module_mlme_osdep_c_ BIT(5)
109167 +#define _module_rtl871x_sta_mgt_c_ BIT(6)
109168 +#define _module_rtl871x_cmd_c_ BIT(7)
109169 +#define _module_cmd_osdep_c_ BIT(8)
109170 +#define _module_rtl871x_io_c_ BIT(9)
109171 +#define _module_io_osdep_c_ BIT(10)
109172 +#define _module_os_intfs_c_ BIT(11)
109173 +#define _module_rtl871x_security_c_ BIT(12)
109174 +#define _module_rtl871x_eeprom_c_ BIT(13)
109175 +#define _module_hal_init_c_ BIT(14)
109176 +#define _module_hci_hal_init_c_ BIT(15)
109177 +#define _module_rtl871x_ioctl_c_ BIT(16)
109178 +#define _module_rtl871x_ioctl_set_c_ BIT(17)
109179 +#define _module_rtl871x_ioctl_query_c_ BIT(18)
109180 +#define _module_rtl871x_pwrctrl_c_ BIT(19)
109181 +#define _module_hci_intfs_c_ BIT(20)
109182 +#define _module_hci_ops_c_ BIT(21)
109183 +#define _module_osdep_service_c_ BIT(22)
109184 #define _module_mp_ BIT(23)
109185 -#define _module_hci_ops_os_c_ BIT(24)
109186 -#define _module_rtl871x_ioctl_os_c BIT(25)
109187 -#define _module_rtl8712_cmd_c_ BIT(26)
109188 +#define _module_hci_ops_os_c_ BIT(24)
109189 +#define _module_rtl871x_ioctl_os_c BIT(25)
109190 +#define _module_rtl8712_cmd_c_ BIT(26)
109191 //#define _module_efuse_ BIT(27)
109192 #define _module_rtl8192c_xmit_c_ BIT(28)
109193 -#define _module_efuse_ BIT(29)
109194 -#define _module_rtl8712_recv_c_ BIT(30)
109195 -#define _module_rtl8712_led_c_ BIT(31)
109196 +#define _module_hal_xmit_c_ BIT(28)
109197 +#define _module_efuse_ BIT(29)
109198 +#define _module_rtl8712_recv_c_ BIT(30)
109199 +#define _module_rtl8712_led_c_ BIT(31)
109200
109201 #undef _MODULE_DEFINE_
109202
109203 -#if defined _RTL871X_XMIT_C_
109204 +#if defined _RTW_XMIT_C_
109205 #define _MODULE_DEFINE_ _module_rtl871x_xmit_c_
109206 #elif defined _XMIT_OSDEP_C_
109207 #define _MODULE_DEFINE_ _module_xmit_osdep_c_
109208 -#elif defined _RTL871X_RECV_C_
109209 +#elif defined _RTW_RECV_C_
109210 #define _MODULE_DEFINE_ _module_rtl871x_recv_c_
109211 #elif defined _RECV_OSDEP_C_
109212 #define _MODULE_DEFINE_ _module_recv_osdep_c_
109213 -#elif defined _RTL871X_MLME_C_
109214 +#elif defined _RTW_MLME_C_
109215 #define _MODULE_DEFINE_ _module_rtl871x_mlme_c_
109216 #elif defined _MLME_OSDEP_C_
109217 #define _MODULE_DEFINE_ _module_mlme_osdep_c_
109218 -#elif defined _RTL871X_STA_MGT_C_
109219 +#elif defined _RTW_MLME_EXT_C_
109220 + #define _MODULE_DEFINE_ 1
109221 +#elif defined _RTW_STA_MGT_C_
109222 #define _MODULE_DEFINE_ _module_rtl871x_sta_mgt_c_
109223 -#elif defined _RTL871X_CMD_C_
109224 +#elif defined _RTW_CMD_C_
109225 #define _MODULE_DEFINE_ _module_rtl871x_cmd_c_
109226 #elif defined _CMD_OSDEP_C_
109227 #define _MODULE_DEFINE_ _module_cmd_osdep_c_
109228 -#elif defined _RTL871X_IO_C_
109229 +#elif defined _RTW_IO_C_
109230 #define _MODULE_DEFINE_ _module_rtl871x_io_c_
109231 #elif defined _IO_OSDEP_C_
109232 #define _MODULE_DEFINE_ _module_io_osdep_c_
109233 #elif defined _OS_INTFS_C_
109234 #define _MODULE_DEFINE_ _module_os_intfs_c_
109235 -#elif defined _RTL871X_SECURITY_C_
109236 +#elif defined _RTW_SECURITY_C_
109237 #define _MODULE_DEFINE_ _module_rtl871x_security_c_
109238 -#elif defined _RTL871X_EEPROM_C_
109239 +#elif defined _RTW_EEPROM_C_
109240 #define _MODULE_DEFINE_ _module_rtl871x_eeprom_c_
109241 -#elif defined _HAL_INIT_C_
109242 +#elif defined _HAL_INTF_C_
109243 #define _MODULE_DEFINE_ _module_hal_init_c_
109244 #elif defined _HCI_HAL_INIT_C_
109245 #define _MODULE_DEFINE_ _module_hci_hal_init_c_
109246 @@ -111,10 +115,14 @@
109247 #define _MODULE_DEFINE_ _module_rtl871x_ioctl_query_c_
109248 #elif defined _RTL871X_PWRCTRL_C_
109249 #define _MODULE_DEFINE_ _module_rtl871x_pwrctrl_c_
109250 +#elif defined _RTW_PWRCTRL_C_
109251 + #define _MODULE_DEFINE_ 1
109252 #elif defined _HCI_INTF_C_
109253 #define _MODULE_DEFINE_ _module_hci_intfs_c_
109254 #elif defined _HCI_OPS_C_
109255 #define _MODULE_DEFINE_ _module_hci_ops_c_
109256 +#elif defined _SDIO_OPS_C_
109257 + #define _MODULE_DEFINE_ 1
109258 #elif defined _OSDEP_HCI_INTF_C_
109259 #define _MODULE_DEFINE_ _module_hci_intfs_c_
109260 #elif defined _OSDEP_SERVICE_C_
109261 @@ -126,7 +134,9 @@
109262 #elif defined _RTL8712_CMD_C_
109263 #define _MODULE_DEFINE_ _module_rtl8712_cmd_c_
109264 #elif defined _RTL8192C_XMIT_C_
109265 - #define _MODULE_DEFINE_ _module_rtl8192c_xmit_c_
109266 + #define _MODULE_DEFINE_ 1
109267 +#elif defined _RTL8723AS_XMIT_C_
109268 + #define _MODULE_DEFINE_ 1
109269 #elif defined _RTL8712_RECV_C_
109270 #define _MODULE_DEFINE_ _module_rtl8712_recv_c_
109271 #elif defined _RTL8192CU_RECV_C_
109272 @@ -161,19 +171,23 @@ extern void rtl871x_cedbg(const char *fm
109273
109274 #ifdef PLATFORM_WINDOWS
109275
109276 - #ifdef PLATFORM_OS_XP
109277 + #ifdef PLATFORM_OS_XP
109278 +
109279 + #define _dbgdump DbgPrint
109280
109281 - #define _dbgdump DbgPrint
109282 + #elif defined PLATFORM_OS_CE
109283
109284 - #elif defined PLATFORM_OS_CE
109285 + #define _dbgdump rtl871x_cedbg
109286
109287 - #define _dbgdump rtl871x_cedbg
109288 + #endif
109289 +
109290 +#elif defined PLATFORM_LINUX
109291
109292 - #endif
109293 + #define _dbgdump printk
109294
109295 - #elif defined PLATFORM_LINUX
109296 +#elif defined PLATFORM_FREEBSD
109297
109298 - #define _dbgdump printk
109299 + #define _dbgdump printf
109300
109301 #endif
109302
109303 @@ -186,8 +200,8 @@ extern void rtl871x_cedbg(const char *fm
109304 #define RT_TRACE(_Comp, _Level, Fmt)\
109305 do {\
109306 if((_Comp & GlobalDebugComponents) && (_Level <= GlobalDebugLevel)) {\
109307 - _dbgdump("%s [0x%08x,%d]", RTL871X_MODULE_NAME, (unsigned int)_Comp, _Level);\
109308 - _dbgdump Fmt; \
109309 + _dbgdump("%s [0x%08x,%d]", RTL871X_MODULE_NAME, (unsigned int)_Comp, _Level);\
109310 + _dbgdump Fmt;\
109311 }\
109312 }while(0)
109313
109314 @@ -233,21 +247,34 @@ extern void rtl871x_cedbg(const char *fm
109315
109316
109317 #ifdef CONFIG_DEBUG_RTL819X
109318 - #ifdef PLATFORM_WINDOWS
109319
109320 - #ifdef PLATFORM_OS_XP
109321 - #define _dbgdump DbgPrint
109322 -
109323 - #elif defined PLATFORM_OS_CE
109324 - #define _dbgdump rtl871x_cedbg
109325 +#undef _dbgdump
109326 +
109327 +#ifdef PLATFORM_WINDOWS
109328 +
109329 + #ifdef PLATFORM_OS_XP
109330 +
109331 + #define _dbgdump DbgPrint
109332 +
109333 + #elif defined PLATFORM_OS_CE
109334
109335 - #endif
109336 + #define _dbgdump rtl871x_cedbg
109337
109338 - #elif defined PLATFORM_LINUX
109339 - #define _dbgdump printk
109340 #endif
109341 +
109342 +#elif defined PLATFORM_LINUX
109343 +
109344 + #define _dbgdump printk
109345 +
109346 +#elif defined PLATFORM_FREEBSD
109347 +
109348 + #define _dbgdump printf
109349 +
109350 #endif
109351
109352 +#endif /* CONFIG_DEBUG_RTL819X */
109353 +
109354 +
109355 #ifdef PLATFORM_WINDOWS
109356 #define DBG_871X do {} while(0)
109357 #define MSG_8192C do {} while(0)
109358 @@ -264,15 +291,38 @@ extern void rtl871x_cedbg(const char *fm
109359 #define ERR_8192C(x,...) do {} while(0)
109360 #endif
109361
109362 -#if defined (_dbgdump)
109363 - #undef DBG_871X
109364 - #define DBG_871X _dbgdump
109365 +#ifdef PLATFORM_FREEBSD
109366 + #define _dbgdump printf
109367 + #define DBG_871X(x, ...) do {} while(0)
109368 + #define MSG_8192C(x, ...) do {} while(0)
109369 + #define DBG_8192C(x,...) do {} while(0)
109370 + #define WRN_8192C(x,...) do {} while(0)
109371 + #define ERR_8192C(x,...) do {} while(0)
109372 +#endif
109373
109374 - #undef MSG_8192C
109375 - #define MSG_8192C _dbgdump
109376 +extern u32 GlobalDebugLevel;
109377 +#define LOG_LEVEL(level, ...)\
109378 + do {\
109379 + if(level <= GlobalDebugLevel) {\
109380 + printk(__VA_ARGS__);\
109381 + }\
109382 + }while(0)
109383 +
109384 +#define DBG_871X_LEVEL LOG_LEVEL
109385 +
109386 +#if defined (_dbgdump)
109387 + #undef DBG_871X
109388 +// #define DBG_871X _dbgdump
109389 + #define DBG_871X(...) LOG_LEVEL(_drv_emerg_ , __VA_ARGS__)
109390 +
109391 + #undef MSG_8192C
109392 +// #define MSG_8192C _dbgdump
109393 + #define MSG_8192C(...) LOG_LEVEL(_drv_emerg_ , __VA_ARGS__)
109394 +
109395 + #undef DBG_8192C
109396 +// #define DBG_8192C _dbgdump
109397 + #define DBG_8192C(...) LOG_LEVEL(_drv_emerg_ , __VA_ARGS__)
109398
109399 - #undef DBG_8192C
109400 - #define DBG_8192C _dbgdump
109401
109402 #undef WRN_8192C
109403 #define WRN_8192C _dbgdump
109404 @@ -282,13 +332,25 @@ extern void rtl871x_cedbg(const char *fm
109405 #endif
109406
109407
109408 -
109409 #ifdef CONFIG_PROC_DEBUG
109410
109411 int proc_get_drv_version(char *page, char **start,
109412 off_t offset, int count,
109413 int *eof, void *data);
109414
109415 + int proc_get_log_level(char *page, char **start,
109416 + off_t offset, int count,
109417 + int *eof, void *data);
109418 +
109419 + int proc_set_log_level(struct file *file, const char *buffer,
109420 + unsigned long count, void *data);
109421 +
109422 +#ifdef DBG_MEM_ALLOC
109423 + int proc_get_mstat(char *page, char **start,
109424 + off_t offset, int count,
109425 + int *eof, void *data);
109426 +#endif /* DBG_MEM_ALLOC */
109427 +
109428 int proc_get_write_reg(char *page, char **start,
109429 off_t offset, int count,
109430 int *eof, void *data);
109431 @@ -340,6 +402,45 @@ extern void rtl871x_cedbg(const char *fm
109432 off_t offset, int count,
109433 int *eof, void *data);
109434
109435 + int proc_get_mac_reg_dump1(char *page, char **start,
109436 + off_t offset, int count,
109437 + int *eof, void *data);
109438 +
109439 + int proc_get_mac_reg_dump2(char *page, char **start,
109440 + off_t offset, int count,
109441 + int *eof, void *data);
109442 +
109443 + int proc_get_mac_reg_dump3(char *page, char **start,
109444 + off_t offset, int count,
109445 + int *eof, void *data);
109446 +
109447 + int proc_get_bb_reg_dump1(char *page, char **start,
109448 + off_t offset, int count,
109449 + int *eof, void *data);
109450 +
109451 + int proc_get_bb_reg_dump2(char *page, char **start,
109452 + off_t offset, int count,
109453 + int *eof, void *data);
109454 +
109455 + int proc_get_bb_reg_dump3(char *page, char **start,
109456 + off_t offset, int count,
109457 + int *eof, void *data);
109458 +
109459 + int proc_get_rf_reg_dump1(char *page, char **start,
109460 + off_t offset, int count,
109461 + int *eof, void *data);
109462 +
109463 + int proc_get_rf_reg_dump2(char *page, char **start,
109464 + off_t offset, int count,
109465 + int *eof, void *data);
109466 +
109467 + int proc_get_rf_reg_dump3(char *page, char **start,
109468 + off_t offset, int count,
109469 + int *eof, void *data);
109470 +
109471 + int proc_get_rf_reg_dump4(char *page, char **start,
109472 + off_t offset, int count,
109473 + int *eof, void *data);
109474
109475 #ifdef CONFIG_AP_MODE
109476
109477 @@ -359,6 +460,8 @@ extern void rtl871x_cedbg(const char *fm
109478 int proc_get_best_channel(char *page, char **start,
109479 off_t offset, int count,
109480 int *eof, void *data);
109481 + int proc_set_best_channel(struct file *file, const char *buffer,
109482 + unsigned long count, void *data);
109483 #endif
109484
109485 int proc_get_rx_signal(char *page, char **start,
109486 @@ -367,13 +470,47 @@ extern void rtl871x_cedbg(const char *fm
109487
109488 int proc_set_rx_signal(struct file *file, const char *buffer,
109489 unsigned long count, void *data);
109490 +
109491 + int proc_get_ht_enable(char *page, char **start,
109492 + off_t offset, int count,
109493 + int *eof, void *data);
109494 +
109495 + int proc_set_ht_enable(struct file *file, const char *buffer,
109496 + unsigned long count, void *data);
109497 +
109498 + int proc_get_cbw40_enable(char *page, char **start,
109499 + off_t offset, int count,
109500 + int *eof, void *data);
109501
109502 + int proc_set_cbw40_enable(struct file *file, const char *buffer,
109503 + unsigned long count, void *data);
109504 +
109505 int proc_get_ampdu_enable(char *page, char **start,
109506 off_t offset, int count,
109507 int *eof, void *data);
109508
109509 int proc_set_ampdu_enable(struct file *file, const char *buffer,
109510 unsigned long count, void *data);
109511 +
109512 + int proc_get_two_path_rssi(char *page, char **start,
109513 + off_t offset, int count,
109514 + int *eof, void *data);
109515 +
109516 + int proc_get_rx_stbc(char *page, char **start,
109517 + off_t offset, int count,
109518 + int *eof, void *data);
109519 +
109520 + int proc_set_rx_stbc(struct file *file, const char *buffer,
109521 + unsigned long count, void *data);
109522 +
109523 +
109524 + int proc_get_vid(char *page, char **start,
109525 + off_t offset, int count,
109526 + int *eof, void *data);
109527 +
109528 + int proc_get_pid(char *page, char **start,
109529 + off_t offset, int count,
109530 + int *eof, void *data);
109531
109532 int proc_get_rssi_disp(char *page, char **start,
109533 off_t offset, int count,
109534 @@ -381,7 +518,19 @@ extern void rtl871x_cedbg(const char *fm
109535
109536 int proc_set_rssi_disp(struct file *file, const char *buffer,
109537 unsigned long count, void *data);
109538 -
109539 +
109540 +#if defined(DBG_CONFIG_ERROR_DETECT)
109541 +int proc_get_sreset(char *page, char **start, off_t offset, int count, int *eof, void *data);
109542 +int proc_set_sreset(struct file *file, const char *buffer, unsigned long count, void *data);
109543 +#endif /* DBG_CONFIG_ERROR_DETECT */
109544 +
109545 +#ifdef CONFIG_DM_ADAPTIVITY
109546 +int proc_get_dm_adaptivity(char *page, char **start,
109547 + off_t offset, int count,
109548 + int *eof, void *data);
109549 +int proc_set_dm_adaptivity(struct file *file, const char *buffer,
109550 + unsigned long count, void *data);
109551 +#endif /* CONFIG_DM_ADAPTIVITY */
109552
109553 #endif //CONFIG_PROC_DEBUG
109554
109555 --- a/drivers/net/wireless/rtl8192cu/include/rtw_eeprom.h
109556 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_eeprom.h
109557 @@ -16,8 +16,7 @@
109558 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
109559 *
109560 *
109561 -
109562 -******************************************************************************/
109563 + ******************************************************************************/
109564 #ifndef __RTW_EEPROM_H__
109565 #define __RTW_EEPROM_H__
109566
109567 --- a/drivers/net/wireless/rtl8192cu/include/rtw_efuse.h
109568 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_efuse.h
109569 @@ -1,7 +1,7 @@
109570 /******************************************************************************
109571 *
109572 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
109573 - *
109574 + *
109575 * This program is free software; you can redistribute it and/or modify it
109576 * under the terms of version 2 of the GNU General Public License as
109577 * published by the Free Software Foundation.
109578 @@ -106,7 +106,7 @@ u8 rtw_efuse_map_write(PADAPTER padapter
109579 u16 Efuse_GetCurrentSize(PADAPTER pAdapter, u8 efuseType, BOOLEAN bPseudoTest);
109580 u8 Efuse_CalculateWordCnts(u8 word_en);
109581 void ReadEFuseByte(PADAPTER Adapter, u16 _offset, u8 *pbuf, BOOLEAN bPseudoTest) ;
109582 -void EFUSE_GetEfuseDefinition(PADAPTER pAdapter, u8 efuseType, u8 type, PVOID *pOut, BOOLEAN bPseudoTest);
109583 +void EFUSE_GetEfuseDefinition(PADAPTER pAdapter, u8 efuseType, u8 type, void *pOut, BOOLEAN bPseudoTest);
109584 u8 efuse_OneByteRead(PADAPTER pAdapter, u16 addr, u8 *data, BOOLEAN bPseudoTest);
109585 u8 efuse_OneByteWrite(PADAPTER pAdapter, u16 addr, u8 data, BOOLEAN bPseudoTest);
109586
109587 @@ -121,3 +121,4 @@ void EFUSE_ShadowMapUpdate(PADAPTER pAda
109588 void EFUSE_ShadowRead(PADAPTER pAdapter, u8 Type, u16 Offset, u32 *Value);
109589
109590 #endif
109591 +
109592 --- a/drivers/net/wireless/rtl8192cu/include/rtw_event.h
109593 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_event.h
109594 @@ -16,8 +16,7 @@
109595 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
109596 *
109597 *
109598 -
109599 -******************************************************************************/
109600 + ******************************************************************************/
109601 #ifndef _RTW_EVENT_H_
109602 #define _RTW_EVENT_H_
109603 #include <drv_conf.h>
109604 @@ -92,7 +91,8 @@ struct stassoc_event {
109605
109606 struct stadel_event {
109607 unsigned char macaddr[6];
109608 - unsigned char rsvd[2];
109609 + unsigned char rsvd[2]; //for reason
109610 + int mac_id;
109611 };
109612
109613 struct addba_event
109614 --- a/drivers/net/wireless/rtl8192cu/include/rtw_ht.h
109615 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_ht.h
109616 @@ -16,8 +16,7 @@
109617 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
109618 *
109619 *
109620 -
109621 -******************************************************************************/
109622 + ******************************************************************************/
109623 #ifndef _RTW_HT_H_
109624 #define _RTW_HT_H_
109625
109626 --- a/drivers/net/wireless/rtl8192cu/include/rtw_io.h
109627 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_io.h
109628 @@ -16,8 +16,8 @@
109629 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
109630 *
109631 *
109632 -
109633 -******************************************************************************/
109634 + ******************************************************************************/
109635 +
109636 #ifndef _RTW_IO_H_
109637 #define _RTW_IO_H_
109638
109639 @@ -44,16 +44,6 @@
109640 #else
109641 #include <linux/usb/ch9.h>
109642 #endif
109643 -
109644 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
109645 -#define rtw_usb_buffer_alloc(dev, size, mem_flags, dma) usb_alloc_coherent((dev), (size), (mem_flags), (dma))
109646 -#define rtw_usb_buffer_free(dev, size, addr, dma) usb_free_coherent((dev), (size), (addr), (dma))
109647 -#else
109648 -#define rtw_usb_buffer_alloc(dev, size, mem_flags, dma) usb_buffer_alloc((dev), (size), (mem_flags), (dma))
109649 -#define rtw_usb_buffer_free(dev, size, addr, dma) usb_buffer_free((dev), (size), (addr), (dma))
109650 -#endif
109651 -
109652 -
109653 #endif //CONFIG_USB_HCI
109654
109655 #endif //PLATFORM_LINUX
109656 @@ -129,72 +119,39 @@
109657 #define _INTF_ASYNC_ BIT(0) //support async io
109658
109659 struct intf_priv;
109660 -struct intf_hdl;
109661 +struct intf_hdl;
109662 struct io_queue;
109663
109664 -struct _io_ops {
109665 -
109666 -
109667 - uint (*_sdbus_read_bytes_to_membuf)(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf);
109668 - uint (*_sdbus_read_blocks_to_membuf)(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf);
109669 -
109670 - void (*_attrib_read)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
109671 -
109672 +struct _io_ops
109673 +{
109674 u8 (*_read8)(struct intf_hdl *pintfhdl, u32 addr);
109675 -
109676 u16 (*_read16)(struct intf_hdl *pintfhdl, u32 addr);
109677 -
109678 u32 (*_read32)(struct intf_hdl *pintfhdl, u32 addr);
109679
109680 -
109681 - uint (*_sdbus_write_blocks_from_membuf)(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf,u8 async);
109682 -
109683 - uint (*_sdbus_write_bytes_from_membuf)(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf);
109684 - u8 (*_cmd52r)(struct intf_priv *pintfpriv, u32 addr);
109685 - void (*_cmd52w)(struct intf_priv *pintfpriv, u32 addr, u8 val8);
109686 - u8 (*_cmdfunc152r)(struct intf_priv *pintfpriv, u32 addr);
109687 - void (*_cmdfunc152w)(struct intf_priv *pintfpriv, u32 addr, u8 val8);
109688 -
109689 -
109690 - void (*_attrib_write)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
109691 -
109692 int (*_write8)(struct intf_hdl *pintfhdl, u32 addr, u8 val);
109693 -
109694 int (*_write16)(struct intf_hdl *pintfhdl, u32 addr, u16 val);
109695 -
109696 int (*_write32)(struct intf_hdl *pintfhdl, u32 addr, u32 val);
109697 -
109698 int (*_writeN)(struct intf_hdl *pintfhdl, u32 addr, u32 length, u8 *pdata);
109699
109700 int (*_write8_async)(struct intf_hdl *pintfhdl, u32 addr, u8 val);
109701 -
109702 int (*_write16_async)(struct intf_hdl *pintfhdl, u32 addr, u16 val);
109703 -
109704 int (*_write32_async)(struct intf_hdl *pintfhdl, u32 addr, u32 val);
109705 -
109706
109707 void (*_read_mem)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
109708 -
109709 void (*_write_mem)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
109710 -
109711 - void (*_sync_irp_protocol_rw)(struct io_queue *pio_q);
109712
109713 + void (*_sync_irp_protocol_rw)(struct io_queue *pio_q);
109714
109715 u32 (*_read_interrupt)(struct intf_hdl *pintfhdl, u32 addr);
109716
109717 u32 (*_read_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
109718 -
109719 u32 (*_write_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
109720
109721 - int (*_write_port_sync)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
109722 -
109723 u32 (*_write_scsi)(struct intf_hdl *pintfhdl,u32 cnt, u8 *pmem);
109724
109725 -
109726 void (*_read_port_cancel)(struct intf_hdl *pintfhdl);
109727 -
109728 void (*_write_port_cancel)(struct intf_hdl *pintfhdl);
109729 -
109730 +
109731 };
109732
109733 struct io_req {
109734 @@ -424,26 +381,30 @@ extern int _rtw_write16_async(_adapter *
109735 extern int _rtw_write32_async(_adapter *adapter, u32 addr, u32 val);
109736
109737 extern void _rtw_write_mem(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem);
109738 -extern void _rtw_write_port(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem);
109739 -extern int _rtw_write_port_sync(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem);
109740 +extern u32 _rtw_write_port(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem);
109741 +u32 _rtw_write_port_and_wait(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem, int timeout_ms);
109742 extern void _rtw_write_port_cancel(_adapter *adapter);
109743
109744 #ifdef DBG_IO
109745 +bool match_read_sniff_ranges(u16 addr, u16 len);
109746 +bool match_write_sniff_ranges(u16 addr, u16 len);
109747 +
109748 +extern u8 dbg_rtw_read8(_adapter *adapter, u32 addr, const char *caller, const int line);
109749 +extern u16 dbg_rtw_read16(_adapter *adapter, u32 addr, const char *caller, const int line);
109750 +extern u32 dbg_rtw_read32(_adapter *adapter, u32 addr, const char *caller, const int line);
109751 +
109752 extern int dbg_rtw_write8(_adapter *adapter, u32 addr, u8 val, const char *caller, const int line);
109753 extern int dbg_rtw_write16(_adapter *adapter, u32 addr, u16 val, const char *caller, const int line);
109754 extern int dbg_rtw_write32(_adapter *adapter, u32 addr, u32 val, const char *caller, const int line);
109755 extern int dbg_rtw_writeN(_adapter *adapter, u32 addr ,u32 length , u8 *data, const char *caller, const int line);
109756
109757 -#define rtw_read8(adapter, addr) _rtw_read8((adapter), (addr))
109758 -#define rtw_read16(adapter, addr) _rtw_read16((adapter), (addr))
109759 -#define rtw_read32(adapter, addr) _rtw_read32((adapter), (addr))
109760 +#define rtw_read8(adapter, addr) dbg_rtw_read8((adapter), (addr), __FUNCTION__, __LINE__)
109761 +#define rtw_read16(adapter, addr) dbg_rtw_read16((adapter), (addr), __FUNCTION__, __LINE__)
109762 +#define rtw_read32(adapter, addr) dbg_rtw_read32((adapter), (addr), __FUNCTION__, __LINE__)
109763 #define rtw_read_mem(adapter, addr, cnt, mem) _rtw_read_mem((adapter), (addr), (cnt), (mem))
109764 #define rtw_read_port(adapter, addr, cnt, mem) _rtw_read_port((adapter), (addr), (cnt), (mem))
109765 #define rtw_read_port_cancel(adapter) _rtw_read_port_cancel((adapter))
109766
109767 -#define DBG_IO_WRITE_SNIFF_ADDR_START 0x24 //0x4c //0x4c // the starting address to sniff
109768 -#define DBG_IO_WRITE_SNIFF_ADDR_END 0x27 //0x4c+ 1 // the ending address to sniff
109769 -
109770 #define rtw_write8(adapter, addr, val) dbg_rtw_write8((adapter), (addr), (val), __FUNCTION__, __LINE__)
109771 #define rtw_write16(adapter, addr, val) dbg_rtw_write16((adapter), (addr), (val), __FUNCTION__, __LINE__)
109772 #define rtw_write32(adapter, addr, val) dbg_rtw_write32((adapter), (addr), (val), __FUNCTION__, __LINE__)
109773 @@ -455,7 +416,7 @@ extern int dbg_rtw_writeN(_adapter *adap
109774
109775 #define rtw_write_mem(adapter, addr, cnt, mem) _rtw_write_mem((adapter), addr, cnt, mem)
109776 #define rtw_write_port(adapter, addr, cnt, mem) _rtw_write_port(adapter, addr, cnt, mem)
109777 -#define rtw_write_port_sync(adapter, addr, cnt, mem) _rtw_write_port_sync((adapter), (addr), (cnt), (mem))
109778 +#define rtw_write_port_and_wait(adapter, addr, cnt, mem, timeout_ms) _rtw_write_port_and_wait((adapter), (addr), (cnt), (mem), (timeout_ms))
109779 #define rtw_write_port_cancel(adapter) _rtw_write_port_cancel(adapter)
109780 #else //DBG_IO
109781 #define rtw_read8(adapter, addr) _rtw_read8((adapter), (addr))
109782 @@ -476,7 +437,7 @@ extern int dbg_rtw_writeN(_adapter *adap
109783
109784 #define rtw_write_mem(adapter, addr, cnt, mem) _rtw_write_mem((adapter), (addr), (cnt), (mem))
109785 #define rtw_write_port(adapter, addr, cnt, mem) _rtw_write_port((adapter), (addr), (cnt), (mem))
109786 -#define rtw_write_port_sync(adapter, addr, cnt, mem) _rtw_write_port_sync((adapter), (addr), (cnt), (mem))
109787 +#define rtw_write_port_and_wait(adapter, addr, cnt, mem, timeout_ms) _rtw_write_port_and_wait((adapter), (addr), (cnt), (mem), (timeout_ms))
109788 #define rtw_write_port_cancel(adapter) _rtw_write_port_cancel((adapter))
109789 #endif //DBG_IO
109790
109791 @@ -512,7 +473,7 @@ extern void async_write_mem(_adapter *ad
109792 extern void async_write_port(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem);
109793
109794
109795 -int rtw_init_io_priv(_adapter *padapter);
109796 +int rtw_init_io_priv(_adapter *padapter, void (*set_intf_ops)(struct _io_ops *pops));
109797
109798
109799 extern uint alloc_io_queue(_adapter *adapter);
109800 --- a/drivers/net/wireless/rtl8192cu/include/rtw_ioctl.h
109801 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_ioctl.h
109802 @@ -16,8 +16,7 @@
109803 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
109804 *
109805 *
109806 -
109807 -******************************************************************************/
109808 + ******************************************************************************/
109809 #ifndef _RTW_IOCTL_H_
109810 #define _RTW_IOCTL_H_
109811
109812 @@ -88,14 +87,14 @@ struct oid_funs_node {
109813
109814 struct oid_par_priv
109815 {
109816 - void *adapter_context;
109817 - NDIS_OID oid;
109818 - void* information_buf;
109819 + void *adapter_context;
109820 + NDIS_OID oid;
109821 + void *information_buf;
109822 u32 information_buf_len;
109823 - u32* bytes_rw;
109824 - u32* bytes_needed;
109825 + u32 *bytes_rw;
109826 + u32 *bytes_needed;
109827 enum oid_type type_of_oid;
109828 - u32 dbg;
109829 + u32 dbg;
109830 };
109831
109832 struct oid_obj_priv {
109833 @@ -103,7 +102,8 @@ struct oid_obj_priv {
109834 NDIS_STATUS (*oidfuns)(struct oid_par_priv *poid_par_priv);
109835 };
109836
109837 -#ifdef CONFIG_MP_INCLUDED
109838 +#if (defined(CONFIG_MP_INCLUDED) && defined(_RTW_MP_IOCTL_C_)) || \
109839 + (defined(PLATFORM_WINDOWS) && defined(_RTW_IOCTL_RTL_C_))
109840 static NDIS_STATUS oid_null_function(struct oid_par_priv* poid_par_priv)
109841 {
109842 _func_enter_;
109843 @@ -243,10 +243,8 @@ void Set_802_3_MULTICAST_LIST(ADAPTER *p
109844 #endif// end of PLATFORM_WINDOWS
109845
109846
109847 -#ifdef PLATFORM_LINUX
109848 -
109849 +#if defined(PLATFORM_LINUX) && defined(CONFIG_WIRELESS_EXT)
109850 extern struct iw_handler_def rtw_handlers_def;
109851 -
109852 #endif
109853
109854 extern NDIS_STATUS drv_query_info(
109855 --- a/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_query.h
109856 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_query.h
109857 @@ -16,8 +16,7 @@
109858 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
109859 *
109860 *
109861 -
109862 -******************************************************************************/
109863 + ******************************************************************************/
109864 #ifndef _RTW_IOCTL_QUERY_H_
109865 #define _RTW_IOCTL_QUERY_H_
109866
109867 --- a/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_rtl.h
109868 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_rtl.h
109869 @@ -16,8 +16,7 @@
109870 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
109871 *
109872 *
109873 -
109874 -******************************************************************************/
109875 + ******************************************************************************/
109876 #ifndef _RTW_IOCTL_RTL_H_
109877 #define _RTW_IOCTL_RTL_H_
109878
109879 --- a/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_set.h
109880 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_set.h
109881 @@ -16,8 +16,7 @@
109882 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
109883 *
109884 *
109885 -
109886 -******************************************************************************/
109887 + ******************************************************************************/
109888 #ifndef __RTW_IOCTL_SET_H_
109889 #define __RTW_IOCTL_SET_H_
109890
109891 @@ -60,19 +59,21 @@ u8 rtw_set_802_11_authentication_mode(_a
109892 u8 rtw_set_802_11_bssid(_adapter* padapter, u8 *bssid);
109893 u8 rtw_set_802_11_add_wep(_adapter * padapter, NDIS_802_11_WEP * wep);
109894 u8 rtw_set_802_11_disassociate(_adapter * padapter);
109895 -u8 rtw_set_802_11_bssid_list_scan(_adapter* padapter);
109896 +u8 rtw_set_802_11_bssid_list_scan(_adapter* padapter, NDIS_802_11_SSID *pssid, int ssid_max_num);
109897 u8 rtw_set_802_11_infrastructure_mode(_adapter * padapter, NDIS_802_11_NETWORK_INFRASTRUCTURE networktype);
109898 u8 rtw_set_802_11_remove_wep(_adapter * padapter, u32 keyindex);
109899 u8 rtw_set_802_11_ssid(_adapter * padapter, NDIS_802_11_SSID * ssid);
109900 +u8 rtw_set_802_11_connect(_adapter* padapter, u8 *bssid, NDIS_802_11_SSID *ssid);
109901 u8 rtw_set_802_11_remove_key(_adapter * padapter, NDIS_802_11_REMOVE_KEY * key);
109902
109903 -
109904 +u8 rtw_validate_bssid(u8 *bssid);
109905 u8 rtw_validate_ssid(NDIS_802_11_SSID *ssid);
109906
109907 -u16 rtw_get_network_max_rate(_adapter *adapter, WLAN_BSSID_EX *bss);
109908 +u16 rtw_get_cur_max_rate(_adapter *adapter);
109909 int rtw_set_scan_mode(_adapter *adapter, RT_SCAN_TYPE scan_mode);
109910 int rtw_set_channel_plan(_adapter *adapter, u8 channel_plan);
109911 int rtw_set_country(_adapter *adapter, const char *country_code);
109912 +int rtw_set_band(_adapter *adapter, enum _BAND band);
109913
109914 #endif
109915
109916 --- a/drivers/net/wireless/rtl8192cu/include/rtw_led.h
109917 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_led.h
109918 @@ -16,8 +16,7 @@
109919 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
109920 *
109921 *
109922 -
109923 -******************************************************************************/
109924 + ******************************************************************************/
109925 #ifndef __RTW_LED_H_
109926 #define __RTW_LED_H_
109927
109928 @@ -44,15 +43,15 @@ typedef enum _LED_CTL_MODE{
109929 }LED_CTL_MODE;
109930
109931
109932 -#ifdef CONFIG_USB_HCI
109933 +#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)
109934 //================================================================================
109935 // LED object.
109936 //================================================================================
109937
109938 typedef enum _LED_STATE_871x{
109939 LED_UNKNOWN = 0,
109940 - LED_ON = 1,
109941 - LED_OFF = 2,
109942 + RTW_LED_ON = 1,
109943 + RTW_LED_OFF = 2,
109944 LED_BLINK_NORMAL = 3,
109945 LED_BLINK_SLOWLY = 4,
109946 LED_POWER_ON_BLINK = 5,
109947 @@ -95,10 +94,10 @@ typedef struct _LED_871x{
109948 u8 bLedWPSBlinkInProgress;
109949
109950 u32 BlinkTimes; // Number of times to toggle led state for blinking.
109951 - LED_STATE_871x BlinkingLedState; // Next state for blinking, either LED_ON or LED_OFF are.
109952 + LED_STATE_871x BlinkingLedState; // Next state for blinking, either RTW_LED_ON or RTW_LED_OFF are.
109953
109954 _timer BlinkTimer; // Timer object for led blinking.
109955 -#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)
109956 +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)|| defined PLATFORM_FREEBSD
109957 _workitem BlinkWorkItem; // Workitem used by BlinkTimer to manipulate H/W to blink LED.
109958 #endif
109959 } LED_871x, *PLED_871x;
109960 @@ -127,8 +126,8 @@ typedef enum _LED_STRATEGY_871x{
109961
109962 typedef enum _LED_STATE_871x{
109963 LED_UNKNOWN = 0,
109964 - LED_ON = 1,
109965 - LED_OFF = 2,
109966 + RTW_LED_ON = 1,
109967 + RTW_LED_OFF = 2,
109968 LED_BLINK_NORMAL = 3,
109969 LED_BLINK_SLOWLY = 4,
109970 LED_POWER_ON_BLINK = 5,
109971 @@ -160,9 +159,13 @@ typedef struct _LED_871x{
109972
109973 u8 bLedSlowBlinkInProgress;//added by vivi, for led new mode
109974 u32 BlinkTimes; // Number of times to toggle led state for blinking.
109975 - LED_STATE_871x BlinkingLedState; // Next state for blinking, either LED_ON or LED_OFF are.
109976 + LED_STATE_871x BlinkingLedState; // Next state for blinking, either RTW_LED_ON or RTW_LED_OFF are.
109977
109978 _timer BlinkTimer; // Timer object for led blinking.
109979 +
109980 + u8 bLedLinkBlinkInProgress;
109981 + u8 bLedNoLinkBlinkInProgress;
109982 + u8 bLedScanBlinkInProgress;
109983 } LED_871x, *PLED_871x;
109984
109985
109986 --- a/drivers/net/wireless/rtl8192cu/include/rtw_mlme.h
109987 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_mlme.h
109988 @@ -16,18 +16,21 @@
109989 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
109990 *
109991 *
109992 -
109993 -******************************************************************************/
109994 + ******************************************************************************/
109995 #ifndef __RTW_MLME_H_
109996 #define __RTW_MLME_H_
109997
109998 #include <drv_conf.h>
109999 #include <osdep_service.h>
110000 +#include <mlme_osdep.h>
110001 #include <drv_types.h>
110002 #include <wlan_bssdef.h>
110003
110004 +#ifdef CONFIG_INTEL_WIDI
110005 +#include <rtw_intel_widi.h>
110006 +#endif
110007
110008 -#define MAX_BSS_CNT 64
110009 +#define MAX_BSS_CNT 128
110010 //#define MAX_JOIN_TIMEOUT 2000
110011 //#define MAX_JOIN_TIMEOUT 2500
110012 #define MAX_JOIN_TIMEOUT 6500
110013 @@ -45,39 +48,48 @@
110014 #define SCANQUEUE_LIFETIME 20 // unit:sec
110015 #endif
110016
110017 -#define WIFI_NULL_STATE 0x00000000
110018 -#define WIFI_ASOC_STATE 0x00000001 // Under Linked state...
110019 -#define WIFI_REASOC_STATE 0x00000002
110020 -#define WIFI_SLEEP_STATE 0x00000004
110021 -#define WIFI_STATION_STATE 0x00000008
110022 +#define WIFI_NULL_STATE 0x00000000
110023 +
110024 +#define WIFI_ASOC_STATE 0x00000001 // Under Linked state...
110025 +#define WIFI_REASOC_STATE 0x00000002
110026 +#define WIFI_SLEEP_STATE 0x00000004
110027 +#define WIFI_STATION_STATE 0x00000008
110028 +
110029 #define WIFI_AP_STATE 0x00000010
110030 #define WIFI_ADHOC_STATE 0x00000020
110031 #define WIFI_ADHOC_MASTER_STATE 0x00000040
110032 #define WIFI_UNDER_LINKING 0x00000080
110033 -//#define WIFI_UNDER_CMD 0x00000200
110034 -// ========== P2P Section Start ===============
110035 -#define WIFI_P2P_LISTEN_STATE 0x00010000
110036 -#define WIFI_P2P_GROUP_FORMATION_STATE 0x00020000
110037 -// ========== P2P Section End ===============
110038 -#define WIFI_SITE_MONITOR 0x00000800 //to indicate the station is under site surveying
110039 +
110040 +#define WIFI_UNDER_WPS 0x00000100
110041 +//#define WIFI_UNDER_CMD 0x00000200
110042 +//#define WIFI_UNDER_P2P 0x00000400
110043 +#define WIFI_STA_ALIVE_CHK_STATE 0x00000400
110044 +#define WIFI_SITE_MONITOR 0x00000800 //to indicate the station is under site surveying
110045
110046 #ifdef WDS
110047 -#define WIFI_WDS 0x00001000
110048 -#define WIFI_WDS_RX_BEACON 0x00002000 // already rx WDS AP beacon
110049 +#define WIFI_WDS 0x00001000
110050 +#define WIFI_WDS_RX_BEACON 0x00002000 // already rx WDS AP beacon
110051 #endif
110052 #ifdef AUTO_CONFIG
110053 -#define WIFI_AUTOCONF 0x00004000
110054 -#define WIFI_AUTOCONF_IND 0x00008000
110055 +#define WIFI_AUTOCONF 0x00004000
110056 +#define WIFI_AUTOCONF_IND 0x00008000
110057 #endif
110058
110059 +/*
110060 +// ========== P2P Section Start ===============
110061 +#define WIFI_P2P_LISTEN_STATE 0x00010000
110062 +#define WIFI_P2P_GROUP_FORMATION_STATE 0x00020000
110063 +// ========== P2P Section End ===============
110064 +*/
110065 +
110066 //#ifdef UNDER_MPTEST
110067 -#define WIFI_MP_STATE 0x00010000
110068 -#define WIFI_MP_CTX_BACKGROUND 0x00020000 // in continous tx background
110069 -#define WIFI_MP_CTX_ST 0x00040000 // in continous tx with single-tone
110070 +#define WIFI_MP_STATE 0x00010000
110071 +#define WIFI_MP_CTX_BACKGROUND 0x00020000 // in continous tx background
110072 +#define WIFI_MP_CTX_ST 0x00040000 // in continous tx with single-tone
110073 #define WIFI_MP_CTX_BACKGROUND_PENDING 0x00080000 // pending in continous tx background due to out of skb
110074 -#define WIFI_MP_CTX_CCK_HW 0x00100000 // in continous tx
110075 -#define WIFI_MP_CTX_CCK_CS 0x00200000 // in continous tx with carrier suppression
110076 -#define WIFI_MP_LPBK_STATE 0x00400000
110077 +#define WIFI_MP_CTX_CCK_HW 0x00100000 // in continous tx
110078 +#define WIFI_MP_CTX_CCK_CS 0x00200000 // in continous tx with carrier suppression
110079 +#define WIFI_MP_LPBK_STATE 0x00400000
110080 //#endif
110081
110082 //#define _FW_UNDER_CMD WIFI_UNDER_CMD
110083 @@ -85,6 +97,7 @@
110084 #define _FW_LINKED WIFI_ASOC_STATE
110085 #define _FW_UNDER_SURVEY WIFI_SITE_MONITOR
110086
110087 +
110088 enum dot11AuthAlgrthmNum {
110089 dot11AuthAlgrthm_Open = 0,
110090 dot11AuthAlgrthm_Shared,
110091 @@ -101,6 +114,29 @@ typedef enum _RT_SCAN_TYPE
110092 SCAN_MIX,
110093 }RT_SCAN_TYPE, *PRT_SCAN_TYPE;
110094
110095 +enum DriverInterface {
110096 + DRIVER_WEXT = 1,
110097 + DRIVER_CFG80211 = 2
110098 +};
110099 +
110100 +enum _BAND
110101 +{
110102 + GHZ24_50 = 0,
110103 + GHZ_50,
110104 + GHZ_24,
110105 + GHZ_MAX,
110106 +};
110107 +
110108 +#define rtw_band_valid(band) ((band) >= GHZ24_50 && (band) < GHZ_MAX)
110109 +
110110 +enum SCAN_RESULT_TYPE
110111 +{
110112 + SCAN_RESULT_P2P_ONLY = 0, // Will return all the P2P devices.
110113 + SCAN_RESULT_ALL = 1, // Will return all the scanned device, include AP.
110114 + SCAN_RESULT_WFD_TYPE = 2 // Will just return the correct WFD device.
110115 + // If this device is Miracast sink device, it will just return all the Miracast source devices.
110116 +};
110117 +
110118 /*
110119
110120 there are several "locks" in mlme_priv,
110121 @@ -136,6 +172,7 @@ typedef struct _RT_LINK_DETECT_T{
110122 BOOLEAN bRxBusyTraffic;
110123 BOOLEAN bHigherBusyTraffic; // For interrupt migration purpose.
110124 BOOLEAN bHigherBusyRxTraffic; // We may disable Tx interrupt according as Rx traffic.
110125 + BOOLEAN bHigherBusyTxTraffic; // We may disable Tx interrupt according as Tx traffic.
110126 }RT_LINK_DETECT_T, *PRT_LINK_DETECT_T;
110127
110128 struct profile_info {
110129 @@ -146,9 +183,14 @@ struct profile_info {
110130
110131 struct tx_invite_req_info{
110132 u8 token;
110133 - u8 ssid[ WLAN_SSID_MAXLEN ];
110134 + u8 benable;
110135 + u8 go_ssid[ WLAN_SSID_MAXLEN ];
110136 u8 ssidlen;
110137 - u8 peer_operation_ch;
110138 + u8 go_bssid[ ETH_ALEN ];
110139 + u8 peer_macaddr[ ETH_ALEN ];
110140 + u8 operating_ch; // This information will be set by using the p2p_set op_ch=x
110141 + u8 peer_ch; // The listen channel for peer P2P device
110142 +
110143 };
110144
110145 struct tx_invite_resp_info{
110146 @@ -158,9 +200,25 @@ struct tx_invite_resp_info{
110147 #ifdef CONFIG_WFD
110148
110149 struct wifi_display_info{
110150 - u16 rtsp_ctrlport; // TCP port number at which the this WFD device listens for RTSP messages
110151 - u16 peer_rtsp_ctrlport; // TCP port number at which the peer WFD device listens for RTSP messages
110152 - // This filed should be filled when receiving the gropu negotiation request
110153 + u16 wfd_enable; // Eanble/Disable the WFD function.
110154 + u16 rtsp_ctrlport; // TCP port number at which the this WFD device listens for RTSP messages
110155 + u16 peer_rtsp_ctrlport; // TCP port number at which the peer WFD device listens for RTSP messages
110156 + // This filed should be filled when receiving the gropu negotiation request
110157 +
110158 + u8 peer_session_avail; // WFD session is available or not for the peer wfd device.
110159 + // This variable will be set when sending the provisioning discovery request to peer WFD device.
110160 + // And this variable will be reset when it is read by using the iwpriv p2p_get wfd_sa command.
110161 +
110162 + u8 ip_address[4];
110163 + u8 peer_ip_address[4];
110164 + u8 wfd_pc; // WFD preferred connection
110165 + // 0 -> Prefer to use the P2P for WFD connection on peer side.
110166 + // 1 -> Prefer to use the TDLS for WFD connection on peer side.
110167 +
110168 + u8 wfd_device_type; // WFD Device Type
110169 + // 0 -> WFD Source Device
110170 + // 1 -> WFD Primary Sink Device
110171 + enum SCAN_RESULT_TYPE scan_result_type; // Used when P2P is enable. This parameter will impact the scan result.
110172 };
110173 #endif //CONFIG_WFD
110174
110175 @@ -190,6 +248,15 @@ struct group_id_info{
110176 u8 ssid[ WLAN_SSID_MAXLEN ]; // The SSID of this P2P group
110177 };
110178
110179 +struct scan_limit_info{
110180 + u8 scan_op_ch_only; // When this flag is set, the driver should just scan the operation channel
110181 +#ifndef P2P_OP_CHECK_SOCIAL_CH
110182 + u8 operation_ch[2]; // Store the operation channel of invitation request frame
110183 +#else
110184 + u8 operation_ch[5]; // Store additional channel 1,6,11 for Android 4.2 IOT & Nexus 4
110185 +#endif //P2P_OP_CHECK_SOCIAL_CH
110186 +};
110187 +
110188 #ifdef CONFIG_IOCTL_CFG80211
110189 struct cfg80211_wifidirect_info{
110190 _timer remain_on_ch_timer;
110191 @@ -197,8 +264,7 @@ struct cfg80211_wifidirect_info{
110192 struct ieee80211_channel remain_on_ch_channel;
110193 enum nl80211_channel_type remain_on_ch_type;
110194 u64 remain_on_ch_cookie;
110195 - struct net_device *remain_on_ch_dev;
110196 -
110197 + bool is_ro_ch;
110198 };
110199 #endif //CONFIG_IOCTL_CFG80211
110200
110201 @@ -209,6 +275,12 @@ struct wifidirect_info{
110202
110203 // Used to do the scanning. After confirming the peer is availalble, the driver transmits the P2P frame to peer.
110204 _timer pre_tx_scan_timer;
110205 + _timer reset_ch_sitesurvey;
110206 + _timer reset_ch_sitesurvey2; // Just for resetting the scan limit function by using p2p nego
110207 +#ifdef CONFIG_CONCURRENT_MODE
110208 + // Used to switch the channel between legacy AP and listen state.
110209 + _timer ap_p2p_switch_timer;
110210 +#endif
110211 struct tx_provdisc_req_info tx_prov_disc_info;
110212 struct rx_provdisc_req_info rx_prov_disc_info;
110213 struct tx_invite_req_info invitereq_info;
110214 @@ -216,9 +288,11 @@ struct wifidirect_info{
110215 struct tx_invite_resp_info inviteresp_info;
110216 struct tx_nego_req_info nego_req_info;
110217 struct group_id_info groupid_info; // Store the group id information when doing the group negotiation handshake.
110218 + struct scan_limit_info rx_invitereq_info; // Used for get the limit scan channel from the Invitation procedure
110219 + struct scan_limit_info p2p_info; // Used for get the limit scan channel from the P2P negotiation handshake
110220 #ifdef CONFIG_WFD
110221 - struct wifi_display_info wfd_info;
110222 -#endif
110223 + struct wifi_display_info *wfd_info;
110224 +#endif
110225 enum P2P_ROLE role;
110226 enum P2P_STATE pre_p2p_state;
110227 enum P2P_STATE p2p_state;
110228 @@ -232,6 +306,7 @@ struct wifidirect_info{
110229 u8 p2p_wildcard_ssid[P2P_WILDCARD_SSID_LEN];
110230 u8 intent; // should only include the intent value.
110231 u8 p2p_peer_interface_addr[ ETH_ALEN ];
110232 + u8 p2p_peer_device_addr[ ETH_ALEN ];
110233 u8 peer_intent; // Included the intent value and tie breaker value.
110234 u8 device_name[ WPS_MAX_DEVICE_NAME_LEN ]; // Device name for displaying on searching device screen
110235 u8 device_name_len;
110236 @@ -244,15 +319,41 @@ struct wifidirect_info{
110237 u8 nego_ssidlen;
110238 u8 p2p_group_ssid[WLAN_SSID_MAXLEN];
110239 u8 p2p_group_ssid_len;
110240 -
110241 - enum P2P_WPSINFO ui_got_wps_info; // This field will store the WPS value (PIN value or PBC) that UI had got from the user.
110242 - u16 supported_wps_cm; // This field describes the WPS config method which this driver supported.
110243 - // The value should be the combination of config method defined in page104 of WPS v2.0 spec.
110244 - u8 channel_cnt; // This field is the count number for P2P Channel List attribute of group negotitation response frame.
110245 - u8 channel_list[13]; // This field will contain the channel number of P2P Channel List attribute of group negotitation response frame.
110246 - // We will use the channel_cnt and channel_list fields when constructing the group negotitation confirm frame.
110247 - u8 p2p_ps_enable;
110248 - enum P2P_PS p2p_ps; // indicate p2p ps state
110249 + u8 persistent_supported; // Flag to know the persistent function should be supported or not.
110250 + // In the Sigma test, the Sigma will provide this enable from the sta_set_p2p CAPI.
110251 + // 0: disable
110252 + // 1: enable
110253 + u8 session_available; // Flag to set the WFD session available to enable or disable "by Sigma"
110254 + // In the Sigma test, the Sigma will disable the session available by using the sta_preset CAPI.
110255 + // 0: disable
110256 + // 1: enable
110257 + u8 wfd_tdls_enable; // Flag to enable or disable the TDLS by WFD Sigma
110258 + // 0: disable
110259 + // 1: enable
110260 + u8 wfd_tdls_weaksec; // Flag to enable or disable the weak security function for TDLS by WFD Sigma
110261 + // 0: disable
110262 + // In this case, the driver can't issue the tdsl setup request frame.
110263 + // 1: enable
110264 + // In this case, the driver can issue the tdls setup request frame
110265 + // even the current security is weak security.
110266 +
110267 + enum P2P_WPSINFO ui_got_wps_info; // This field will store the WPS value (PIN value or PBC) that UI had got from the user.
110268 + u16 supported_wps_cm; // This field describes the WPS config method which this driver supported.
110269 + // The value should be the combination of config method defined in page104 of WPS v2.0 spec.
110270 + u8 external_uuid; // UUID flag
110271 + u8 uuid[16]; // UUID
110272 + uint channel_list_attr_len; // This field will contain the length of body of P2P Channel List attribute of group negotitation response frame.
110273 + u8 channel_list_attr[100]; // This field will contain the body of P2P Channel List attribute of group negotitation response frame.
110274 + // We will use the channel_cnt and channel_list fields when constructing the group negotitation confirm frame.
110275 + u8 driver_interface; // Indicate DRIVER_WEXT or DRIVER_CFG80211
110276 +
110277 +#ifdef CONFIG_CONCURRENT_MODE
110278 + u16 ext_listen_interval; // The interval to be available with legacy AP (ms)
110279 + u16 ext_listen_period; // The time period to be available for P2P listen state (ms)
110280 +#endif
110281 +#ifdef CONFIG_P2P_PS
110282 + enum P2P_PS_MODE p2p_ps_mode; // indicate p2p ps mode
110283 + enum P2P_PS_STATE p2p_ps_state; // indicate p2p ps state
110284 u8 noa_index; // Identifies and instance of Notice of Absence timing.
110285 u8 ctwindow; // Client traffic window. A period of time in TU after TBTT.
110286 u8 opp_ps; // opportunistic power save.
110287 @@ -261,11 +362,12 @@ struct wifidirect_info{
110288 u32 noa_duration[P2P_MAX_NOA_NUM]; // Max duration for owner, preferred or min acceptable duration for client.
110289 u32 noa_interval[P2P_MAX_NOA_NUM]; // Length of interval for owner, preferred or max acceptable interval of client.
110290 u32 noa_start_time[P2P_MAX_NOA_NUM]; // schedule expressed in terms of the lower 4 bytes of the TSF timer.
110291 +#endif // CONFIG_P2P_PS
110292 };
110293
110294 -struct tdls_ss_record{ //signal strength record
110295 +struct tdls_ss_record{ //signal strength record; recording the tdls sta with lowerest ss
110296 u8 macaddr[ETH_ALEN];
110297 - u8 signal_strength;
110298 + u8 RxPWDBAll;
110299 u8 is_tdls_sta; // _TRUE: direct link sta, _FALSE: else
110300 };
110301
110302 @@ -275,16 +377,20 @@ struct tdls_info{
110303 u8 sta_cnt;
110304 u8 sta_maximum; // 1:tdls sta is equal (NUM_STA-1), reach max direct link number; 0: else;
110305 struct tdls_ss_record ss_record;
110306 - u8 cam_entry_to_write; //cam entry that is empty to write
110307 - u8 cam_entry_to_clear; //cam entry that is trying to clear, using in direct link teardown
110308 + u8 macid_index; //macid entry that is ready to write
110309 + u8 clear_cam; //cam entry that is trying to clear, using it in direct link teardown
110310 u8 ch_sensing;
110311 u8 cur_channel;
110312 u8 candidate_ch;
110313 u8 collect_pkt_num[MAX_CHANNEL_NUM];
110314 _lock cmd_lock;
110315 _lock hdl_lock;
110316 - _lock timer_lock;
110317 u8 watchdog_count;
110318 + u8 dev_discovered; //WFD_TDLS: for sigma test
110319 + u8 enable;
110320 +#ifdef CONFIG_WFD
110321 + struct wifi_display_info *wfd_info;
110322 +#endif
110323 };
110324
110325 struct mlme_priv {
110326 @@ -299,6 +405,7 @@ struct mlme_priv {
110327
110328 u8 *nic_hdl;
110329
110330 + u8 not_indic_disco;
110331 _list *pscanned;
110332 _queue free_bss_pool;
110333 _queue scanned_queue;
110334 @@ -317,6 +424,7 @@ struct mlme_priv {
110335 _timer assoc_timer;
110336
110337 uint assoc_by_bssid;
110338 + uint assoc_by_rssi;
110339
110340 _timer scan_to_timer; // driver itself handles scan_timeout status.
110341 u32 scan_start_time; // used to evaluate the time spent in scanning
110342 @@ -346,10 +454,9 @@ struct mlme_priv {
110343 RT_LINK_DETECT_T LinkDetectInfo;
110344 _timer dynamic_chk_timer; //dynamic/periodic check timer
110345
110346 - u8 key_mask; //use for ips to set wep key after ips_leave
110347 u8 acm_mask; // for wmm acm mask
110348 u8 ChannelPlan;
110349 - RT_SCAN_TYPE scan_mode; // active: 1, passive: 0
110350 + RT_SCAN_TYPE scan_mode; // active: 1, passive: 0
110351
110352 //u8 probereq_wpsie[MAX_WPS_IE_LEN];//added in probe req
110353 //int probereq_wpsie_len;
110354 @@ -385,15 +492,20 @@ struct mlme_priv {
110355 u16 ht_op_mode;
110356 #endif /* CONFIG_80211N_HT */
110357
110358 + u8 *assoc_req;
110359 + u32 assoc_req_len;
110360 + u8 *assoc_rsp;
110361 + u32 assoc_rsp_len;
110362 +
110363 u8 *wps_beacon_ie;
110364 //u8 *wps_probe_req_ie;
110365 u8 *wps_probe_resp_ie;
110366 - u8 *wps_assoc_resp_ie; // for CONFIG_IOCTL_CFG80211, this IE could include p2p ie
110367 + u8 *wps_assoc_resp_ie; // for CONFIG_IOCTL_CFG80211, this IE could include p2p ie / wfd ie
110368
110369 u32 wps_beacon_ie_len;
110370 //u32 wps_probe_req_ie_len;
110371 u32 wps_probe_resp_ie_len;
110372 - u32 wps_assoc_resp_ie_len;
110373 + u32 wps_assoc_resp_ie_len; // for CONFIG_IOCTL_CFG80211, this IE len could include p2p ie / wfd ie
110374
110375 u8 *p2p_beacon_ie;
110376 u8 *p2p_probe_req_ie;
110377 @@ -425,12 +537,58 @@ struct mlme_priv {
110378
110379 #endif //#if defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME)
110380
110381 +#if defined(CONFIG_WFD) && defined(CONFIG_IOCTL_CFG80211)
110382 +
110383 + u8 *wfd_beacon_ie;
110384 + u8 *wfd_probe_req_ie;
110385 + u8 *wfd_probe_resp_ie;
110386 + u8 *wfd_go_probe_resp_ie; //for GO
110387 + u8 *wfd_assoc_req_ie;
110388 +
110389 + u32 wfd_beacon_ie_len;
110390 + u32 wfd_probe_req_ie_len;
110391 + u32 wfd_probe_resp_ie_len;
110392 + u32 wfd_go_probe_resp_ie_len; //for GO
110393 + u32 wfd_assoc_req_ie_len;
110394 +
110395 +#endif
110396 +
110397 #ifdef RTK_DMP_PLATFORM
110398 // DMP kobject_hotplug function signal need in passive level
110399 _workitem Linkup_workitem;
110400 _workitem Linkdown_workitem;
110401 #endif
110402
110403 +#ifdef CONFIG_INTEL_WIDI
110404 + int widi_state;
110405 + int listen_state;
110406 + _timer listen_timer;
110407 + ATOMIC_T rx_probe_rsp; // 1:receive probe respone from RDS source.
110408 + u8 *l2sdTaBuffer;
110409 + u8 channel_idx;
110410 + s8 group_cnt; //For WiDi 3.5, they specified another scan algo. for WFD/RDS co-existed
110411 + u8 sa_ext[L2SDTA_SERVICE_VE_LEN];
110412 +
110413 + u8 widi_enable;
110414 + /**
110415 + * For WiDi 4; upper layer would set
110416 + * p2p_primary_device_type_category_id
110417 + * p2p_primary_device_type_sub_category_id
110418 + * p2p_secondary_device_type_category_id
110419 + * p2p_secondary_device_type_sub_category_id
110420 + */
110421 + u16 p2p_pdt_cid;
110422 + u16 p2p_pdt_scid;
110423 + u8 num_p2p_sdt;
110424 + u16 p2p_sdt_cid[MAX_NUM_P2P_SDT];
110425 + u16 p2p_sdt_scid[MAX_NUM_P2P_SDT];
110426 + u8 p2p_reject_disable; //When starting NL80211 wpa_supplicant/hostapd, it will call netdev_close
110427 + //such that it will cause p2p disabled. Use this flag to reject.
110428 +#endif // CONFIG_INTEL_WIDI
110429 +
110430 +#ifdef CONFIG_CONCURRENT_MODE
110431 + u8 scanning_via_buddy_intf;
110432 +#endif
110433 };
110434
110435 #ifdef CONFIG_AP_MODE
110436 @@ -479,7 +637,7 @@ extern void _rtw_scan_timeout_handler (
110437
110438 #endif
110439
110440 -#ifdef PLATFORM_LINUX
110441 +#if defined (PLATFORM_LINUX)|| defined (PLATFORM_FREEBSD)
110442 extern int event_thread(void *context);
110443 extern void rtw_join_timeout_handler(void* FunctionContext);
110444 extern void _rtw_scan_timeout_handler(void* FunctionContext);
110445 @@ -563,6 +721,11 @@ __inline static void up_scanned_network(
110446 _exit_critical_bh(&pmlmepriv->lock, &irqL);
110447 }
110448
110449 +#ifdef CONFIG_CONCURRENT_MODE
110450 +sint rtw_buddy_adapter_up(_adapter *padapter);
110451 +sint check_buddy_fwstate(_adapter *padapter, sint state);
110452 +#endif //CONFIG_CONCURRENT_MODE
110453 +
110454 __inline static void down_scanned_network(struct mlme_priv *pmlmepriv)
110455 {
110456 _irqL irqL;
110457 @@ -592,6 +755,7 @@ extern void rtw_free_assoc_resources(_ad
110458 extern void rtw_indicate_disconnect(_adapter* adapter);
110459 extern void rtw_indicate_connect(_adapter* adapter);
110460 void rtw_indicate_scan_done( _adapter *padapter, bool aborted);
110461 +void rtw_scan_abort(_adapter *adapter);
110462
110463 extern int rtw_restruct_sec_ie(_adapter *adapter,u8 *in_ie,u8 *out_ie,uint in_len);
110464 extern int rtw_restruct_wmm_ie(_adapter *adapter, u8 *in_ie, u8 *out_ie, uint in_len, uint initial_out_len);
110465 @@ -606,8 +770,15 @@ extern void rtw_scan_timeout_handler(_ad
110466
110467 extern void rtw_dynamic_check_timer_handlder(_adapter *adapter);
110468 #ifdef CONFIG_SET_SCAN_DENY_TIMER
110469 -extern void rtw_set_scan_deny_timer_hdl(_adapter *adapter);
110470 -void rtw_set_scan_deny(struct mlme_priv *mlmepriv, u32 ms);
110471 +bool rtw_is_scan_deny(_adapter *adapter);
110472 +void rtw_clear_scan_deny(_adapter *adapter);
110473 +void rtw_set_scan_deny_timer_hdl(_adapter *adapter);
110474 +void rtw_set_scan_deny(_adapter *adapter, u32 ms);
110475 +#else
110476 +#define rtw_is_scan_deny(adapter) _FALSE
110477 +#define rtw_clear_scan_deny(adapter) do {} while (0)
110478 +#define rtw_set_scan_deny_timer_hdl(adapter) do {} while (0)
110479 +#define rtw_set_scan_deny(adapter, ms) do {} while (0)
110480 #endif
110481
110482
110483 @@ -643,16 +814,24 @@ u8 *rtw_get_beacon_interval_from_ie(u8 *
110484 void rtw_joinbss_reset(_adapter *padapter);
110485
110486 #ifdef CONFIG_80211N_HT
110487 -unsigned int rtw_restructure_ht_ie(_adapter *padapter, u8 *in_ie, u8 *out_ie, uint in_len, uint *pout_len);
110488 -void rtw_update_ht_cap(_adapter *padapter, u8 *pie, uint ie_len);
110489 +unsigned int rtw_restructure_ht_ie(_adapter *padapter, u8 *in_ie, u8 *out_ie, uint in_len, uint *pout_len, u8 channel);
110490 +void rtw_update_ht_cap(_adapter *padapter, u8 *pie, uint ie_len, u8 channel);
110491 void rtw_issue_addbareq_cmd(_adapter *padapter, struct xmit_frame *pxmitframe);
110492 #endif
110493
110494 int rtw_is_same_ibss(_adapter *adapter, struct wlan_network *pnetwork);
110495 +int is_same_network(WLAN_BSSID_EX *src, WLAN_BSSID_EX *dst);
110496
110497 #ifdef CONFIG_LAYER2_ROAMING
110498 -void rtw_roaming(_adapter *padapter, struct wlan_network *tgt_network);
110499 -void _rtw_roaming(_adapter *padapter, struct wlan_network *tgt_network);
110500 +void _rtw_roaming(_adapter *adapter, struct wlan_network *tgt_network);
110501 +void rtw_roaming(_adapter *adapter, struct wlan_network *tgt_network);
110502 +void rtw_set_roaming(_adapter *adapter, u8 to_roaming);
110503 +u8 rtw_to_roaming(_adapter *adapter);
110504 +#else
110505 +#define _rtw_roaming(adapter, tgt_network) do {} while(0)
110506 +#define rtw_roaming(adapter, tgt_network) do {} while(0)
110507 +#define rtw_set_roaming(adapter, to_roaming) do {} while(0)
110508 +#define rtw_to_roaming(adapter) 0
110509 #endif
110510
110511
110512 --- a/drivers/net/wireless/rtl8192cu/include/rtw_mlme_ext.h
110513 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_mlme_ext.h
110514 @@ -16,8 +16,7 @@
110515 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
110516 *
110517 *
110518 -
110519 -******************************************************************************/
110520 + ******************************************************************************/
110521 #ifndef __RTW_MLME_EXT_H_
110522 #define __RTW_MLME_EXT_H_
110523
110524 @@ -41,8 +40,8 @@
110525
110526 #define LINKED_TO (1) //unit:2 sec, 1x2=2 sec
110527
110528 -#define REAUTH_LIMIT (2)
110529 -#define REASSOC_LIMIT (2)
110530 +#define REAUTH_LIMIT (4)
110531 +#define REASSOC_LIMIT (4)
110532 #define READDBA_LIMIT (2)
110533
110534 //#define IOCMD_REG0 0x10250370
110535 @@ -61,6 +60,7 @@
110536 #define DYNAMIC_FUNC_SS BIT(2) //Tx Power Tracking
110537 #define DYNAMIC_FUNC_BT BIT(3)
110538 #define DYNAMIC_FUNC_ANT_DIV BIT(4)
110539 +#define DYNAMIC_FUNC_ADAPTIVITY BIT(5)
110540
110541 #define _HW_STATE_NOLINK_ 0x00
110542 #define _HW_STATE_ADHOC_ 0x01
110543 @@ -82,6 +82,16 @@
110544 #define _54M_RATE_ 11
110545
110546
110547 +extern unsigned char RTW_WPA_OUI[];
110548 +extern unsigned char WMM_OUI[];
110549 +extern unsigned char WPS_OUI[];
110550 +extern unsigned char WFD_OUI[];
110551 +extern unsigned char P2P_OUI[];
110552 +
110553 +extern unsigned char WMM_INFO_OUI[];
110554 +extern unsigned char WMM_PARA_OUI[];
110555 +
110556 +
110557 //
110558 // Channel Plan Type.
110559 // Note:
110560 @@ -113,7 +123,7 @@ typedef enum _RT_CHANNEL_DOMAIN
110561 RT_CHANNEL_DOMAIN_FCC_NO_DFS = 0x11,
110562 RT_CHANNEL_DOMAIN_JAPAN_NO_DFS = 0x12,
110563 RT_CHANNEL_DOMAIN_WORLD_WIDE_5G = 0x13,
110564 - RT_CHANNEL_DOMAIN_TAIWAN_NO_DFS = 0x14,
110565 + RT_CHANNEL_DOMAIN_TAIWAN_NO_DFS = 0x14,
110566
110567 //===== new channel plan mapping, (2GDOMAIN_5GDOMAIN) =====//
110568 RT_CHANNEL_DOMAIN_WORLD_NULL = 0x20,
110569 @@ -150,6 +160,7 @@ typedef enum _RT_CHANNEL_DOMAIN_2G
110570 RT_CHANNEL_DOMAIN_2G_FCC1 = 0x02, //US
110571 RT_CHANNEL_DOMAIN_2G_MKK1 = 0x03, //Japan
110572 RT_CHANNEL_DOMAIN_2G_ETSI2 = 0x04, //France
110573 + RT_CHANNEL_DOMAIN_2G_NULL = 0x05,
110574 //===== Add new channel plan above this line===============//
110575 RT_CHANNEL_DOMAIN_2G_MAX,
110576 }RT_CHANNEL_DOMAIN_2G, *PRT_CHANNEL_DOMAIN_2G;
110577 @@ -177,6 +188,7 @@ typedef enum _RT_CHANNEL_DOMAIN_5G
110578 //===== Driver Self Defined =====//
110579 RT_CHANNEL_DOMAIN_5G_FCC = 0x11,
110580 RT_CHANNEL_DOMAIN_5G_JAPAN_NO_DFS = 0x12,
110581 + RT_CHANNEL_DOMAIN_5G_FCC4_NO_DFS = 0x13,
110582 RT_CHANNEL_DOMAIN_5G_MAX,
110583 }RT_CHANNEL_DOMAIN_5G, *PRT_CHANNEL_DOMAIN_5G;
110584
110585 @@ -247,7 +259,10 @@ struct ss_res
110586 int bss_cnt;
110587 int channel_idx;
110588 int scan_mode;
110589 + u8 ssid_num;
110590 + u8 ch_num;
110591 NDIS_802_11_SSID ssid[RTW_SSID_SCAN_AMOUNT];
110592 + struct rtw_ieee80211_channel ch[RTW_CHANNEL_SCAN_AMOUNT];
110593 };
110594
110595 //#define AP_MODE 0x0C
110596 @@ -270,33 +285,6 @@ struct ss_res
110597 #define WIFI_FW_LINKING_STATE (WIFI_FW_AUTH_NULL | WIFI_FW_AUTH_STATE | WIFI_FW_AUTH_SUCCESS |WIFI_FW_ASSOC_STATE)
110598
110599 #ifdef CONFIG_TDLS
110600 -/* TDLS STA state */
110601 -#define UN_TDLS_STATE 0x00000000 //default state
110602 -#define TDLS_INITIATOR_STATE 0x10000000
110603 -#define TDLS_RESPONDER_STATE 0x20000000
110604 -#define TDLS_LINKED_STATE 0x40000000
110605 -#define TDLS_CH_SWITCH_ON_STATE 0x01000000
110606 -#define TDLS_PEER_AT_OFF_STATE 0x02000000 //could send pkt on target ch
110607 -#define TDLS_AT_OFF_CH_STATE 0x04000000
110608 -#define TDLS_CH_SW_INITIATOR_STATE 0x08000000 //avoiding duplicated or unconditional ch. switch rsp.
110609 -#define TDLS_APSD_CHSW_STATE 0x00100000 //in APSD and want to setup channel switch
110610 -#define TDLS_PEER_SLEEP_STATE 0x00200000 //peer sta is sleeping
110611 -#define TDLS_SW_OFF_STATE 0x00400000 //terminate channel swithcing
110612 -#define TDLS_ALIVE_STATE 0x00010000 //Check if peer sta is alived.
110613 -
110614 -#define TPK_RESEND_COUNT 301
110615 -#define CH_SWITCH_TIME 10
110616 -#define CH_SWITCH_TIMEOUT 30
110617 -#define TDLS_STAY_TIME 500
110618 -#define TDLS_SIGNAL_THRESH 0x20
110619 -#define TDLS_WATCHDOG_PERIOD 10 //Periodically sending tdls discovery request in TDLS_WATCHDOG_PERIOD * 2 sec
110620 -#define TDLS_ALIVE_TIMER_PH1 5000
110621 -#define TDLS_ALIVE_TIMER_PH2 2000
110622 -#define TDLS_STAY_TIME 500
110623 -#define TDLS_HANDSHAKE_TIME 5000
110624 -#define TDLS_ALIVE_COUNT 3
110625 -
110626 -
110627 // 1: Write RCR DATA BIT
110628 // 2: Issue peer traffic indication
110629 // 3: Go back to the channel linked with AP, terminating channel switch procedure
110630 @@ -308,6 +296,8 @@ struct ss_res
110631 // 9: Set channel back to off channel
110632 // 10: Restore RCR DATA BIT
110633 // 11: Check alive
110634 +// 12: Check alive
110635 +// 13: Free TDLS sta
110636 enum TDLS_option
110637 {
110638 TDLS_WRCR = 1,
110639 @@ -326,7 +316,7 @@ enum TDLS_option
110640 maxTDLS,
110641 };
110642
110643 -#endif
110644 +#endif //CONFIG_TDLS
110645
110646 struct FW_Sta_Info
110647 {
110648 @@ -337,6 +327,30 @@ struct FW_Sta_Info
110649 NDIS_802_11_RATES_EX SupportedRates;
110650 };
110651
110652 +/*
110653 + * Usage:
110654 + * When one iface acted as AP mode and the other iface is STA mode and scanning,
110655 + * it should switch back to AP's operating channel periodically.
110656 + * Parameters info:
110657 + * When the driver scanned RTW_SCAN_NUM_OF_CH channels, it would switch back to AP's operating channel for
110658 + * RTW_STAY_AP_CH_MILLISECOND * SURVEY_TO milliseconds.
110659 + * Example:
110660 + * For chip supports 2.4G + 5GHz and AP mode is operating in channel 1,
110661 + * RTW_SCAN_NUM_OF_CH is 8, RTW_STAY_AP_CH_MILLISECOND is 3 and SURVEY_TO is 100.
110662 + * When it's STA mode gets set_scan command,
110663 + * it would
110664 + * 1. Doing the scan on channel 1.2.3.4.5.6.7.8
110665 + * 2. Back to channel 1 for 300 milliseconds
110666 + * 3. Go through doing site survey on channel 9.10.11.36.40.44.48.52
110667 + * 4. Back to channel 1 for 300 milliseconds
110668 + * 5. ... and so on, till survey done.
110669 + */
110670 +#if defined CONFIG_STA_MODE_SCAN_UNDER_AP_MODE && defined CONFIG_CONCURRENT_MODE
110671 +#define RTW_SCAN_NUM_OF_CH 8
110672 +#define RTW_STAY_AP_CH_MILLISECOND 3 // this value is a multiplier,for example, when this value is 3, it would stay AP's op ch for
110673 + // 3 * SURVEY_TO millisecond.
110674 +#endif //defined CONFIG_STA_MODE_SCAN_UNDER_AP_MODE && defined CONFIG_CONCURRENT_MODE
110675 +
110676 struct mlme_ext_info
110677 {
110678 u32 state;
110679 @@ -381,6 +395,10 @@ struct mlme_ext_info
110680 struct HT_info_element HT_info;
110681 WLAN_BSSID_EX network;//join network or bss_network, if in ap mode, it is the same to cur_network.network
110682 struct FW_Sta_Info FW_sta_info[NUM_STA];
110683 +
110684 +#ifdef CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
110685 + u8 scan_cnt;
110686 +#endif //CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
110687 };
110688
110689 // The channel information about this channel including joining, scanning, and power constraints.
110690 @@ -396,7 +414,41 @@ typedef struct _RT_CHANNEL_INFO
110691 #endif
110692 }RT_CHANNEL_INFO, *PRT_CHANNEL_INFO;
110693
110694 -extern int rtw_is_channel_set_contains_channel(RT_CHANNEL_INFO *channel_set, const u32 channel_num);
110695 +int rtw_ch_set_search_ch(RT_CHANNEL_INFO *ch_set, const u32 ch);
110696 +bool rtw_mlme_band_check(_adapter *adapter, const u32 ch);
110697 +
110698 +// P2P_MAX_REG_CLASSES - Maximum number of regulatory classes
110699 +#define P2P_MAX_REG_CLASSES 10
110700 +
110701 +// P2P_MAX_REG_CLASS_CHANNELS - Maximum number of channels per regulatory class
110702 +#define P2P_MAX_REG_CLASS_CHANNELS 20
110703 +
110704 +// struct p2p_channels - List of supported channels
110705 +struct p2p_channels {
110706 + // struct p2p_reg_class - Supported regulatory class
110707 + struct p2p_reg_class {
110708 + // reg_class - Regulatory class (IEEE 802.11-2007, Annex J)
110709 + u8 reg_class;
110710 +
110711 + // channel - Supported channels
110712 + u8 channel[P2P_MAX_REG_CLASS_CHANNELS];
110713 +
110714 + // channels - Number of channel entries in use
110715 + size_t channels;
110716 + } reg_class[P2P_MAX_REG_CLASSES];
110717 +
110718 + // reg_classes - Number of reg_class entries in use
110719 + size_t reg_classes;
110720 +};
110721 +
110722 +struct p2p_oper_class_map {
110723 + enum hw_mode {IEEE80211G,IEEE80211A} mode;
110724 + u8 op_class;
110725 + u8 min_chan;
110726 + u8 max_chan;
110727 + u8 inc;
110728 + enum { BW20, BW40PLUS, BW40MINUS } bw;
110729 +};
110730
110731 struct mlme_ext_priv
110732 {
110733 @@ -404,15 +456,21 @@ struct mlme_ext_priv
110734 u8 mlmeext_init;
110735 ATOMIC_T event_seq;
110736 u16 mgnt_seq;
110737 -
110738 +#ifdef CONFIG_IEEE80211W
110739 + u16 sa_query_seq;
110740 + u64 mgnt_80211w_IPN;
110741 + u64 mgnt_80211w_IPN_rx;
110742 +#endif //CONFIG_IEEE80211W
110743 //struct fw_priv fwpriv;
110744
110745 unsigned char cur_channel;
110746 unsigned char cur_bwmode;
110747 unsigned char cur_ch_offset;//PRIME_CHNL_OFFSET
110748 unsigned char cur_wireless_mode;
110749 +
110750 unsigned char max_chan_nums;
110751 RT_CHANNEL_INFO channel_set[MAX_CHANNEL_NUM];
110752 + struct p2p_channels channel_list;
110753 unsigned char basicrate[NumRates];
110754 unsigned char datarate[NumRates];
110755
110756 @@ -421,10 +479,14 @@ struct mlme_ext_priv
110757 //for ap mode, network includes ap's cap_info
110758 _timer survey_timer;
110759 _timer link_timer;
110760 +#ifdef CONFIG_IEEE80211W
110761 + _timer sa_query_timer;
110762 +#endif //CONFIG_IEEE80211W
110763 //_timer ADDBA_timer;
110764 u16 chan_scan_time;
110765
110766 - u8 scan_abort;
110767 + u8 scan_abort;
110768 + u8 tx_rate; // TXRATE when USERATE is set.
110769
110770 u32 retry; //retry for issue probereq
110771
110772 @@ -434,9 +496,18 @@ struct mlme_ext_priv
110773 unsigned char bstart_bss;
110774 #endif
110775
110776 - //recv_decache check for Action_public frame
110777 + //recv_decache check for Action_public frame
110778 + u8 action_public_dialog_token;
110779 u16 action_public_rxseq;
110780
110781 +#ifdef CONFIG_80211D
110782 + u8 update_channel_plan_by_ap_done;
110783 +#endif
110784 +
110785 +#ifdef CONFIG_ACTIVE_KEEP_ALIVE_CHECK
110786 + u8 active_keep_alive_check;
110787 +#endif
110788 +
110789 };
110790
110791 int init_mlme_ext_priv(_adapter* padapter);
110792 @@ -444,26 +515,34 @@ int init_hw_mlme_ext(_adapter *padapter)
110793 void free_mlme_ext_priv (struct mlme_ext_priv *pmlmeext);
110794 extern void init_mlme_ext_timer(_adapter *padapter);
110795 extern void init_addba_retry_timer(_adapter *padapter, struct sta_info *psta);
110796 -
110797 -#ifdef CONFIG_TDLS
110798 -int rtw_init_tdls_info(_adapter* padapter);
110799 -void rtw_free_tdls_info(struct tdls_info *ptdlsinfo);
110800 -#endif //CONFIG_TDLS
110801 -
110802 extern struct xmit_frame *alloc_mgtxmitframe(struct xmit_priv *pxmitpriv);
110803 +struct xmit_frame *alloc_mgtxmitframe_once(struct xmit_priv *pxmitpriv);
110804
110805 //void fill_fwpriv(_adapter * padapter, struct fw_priv *pfwpriv);
110806
110807 unsigned char networktype_to_raid(unsigned char network_type);
110808 int judge_network_type(_adapter *padapter, unsigned char *rate, int ratelen);
110809 void get_rate_set(_adapter *padapter, unsigned char *pbssrate, int *bssrate_len);
110810 +void UpdateBrateTbl(_adapter *padapter,u8 *mBratesOS);
110811 +void UpdateBrateTblForSoftAP(u8 *bssrateset, u32 bssratelen);
110812 +void change_band_update_ie(_adapter *padapter, WLAN_BSSID_EX *pnetwork);
110813
110814 void Save_DM_Func_Flag(_adapter *padapter);
110815 void Restore_DM_Func_Flag(_adapter *padapter);
110816 void Switch_DM_Func(_adapter *padapter, u8 mode, u8 enable);
110817
110818 -void Set_NETYPE1_MSR(_adapter *padapter, u8 type);
110819 -void Set_NETYPE0_MSR(_adapter *padapter, u8 type);
110820 +//void Set_NETYPE1_MSR(_adapter *padapter, u8 type);
110821 +//void Set_NETYPE0_MSR(_adapter *padapter, u8 type);
110822 +void Set_MSR(_adapter *padapter, u8 type);
110823 +
110824 +u8 rtw_get_oper_ch(_adapter *adapter);
110825 +void rtw_set_oper_ch(_adapter *adapter, u8 ch);
110826 +u8 rtw_get_oper_bw(_adapter *adapter);
110827 +void rtw_set_oper_bw(_adapter *adapter, u8 bw);
110828 +u8 rtw_get_oper_choffset(_adapter *adapter);
110829 +void rtw_set_oper_choffset(_adapter *adapter, u8 offset);
110830 +u32 rtw_get_on_oper_ch_time(_adapter *adapter);
110831 +u32 rtw_get_on_cur_ch_time(_adapter *adapter);
110832
110833 void set_channel_bwmode(_adapter *padapter, unsigned char channel, unsigned char channel_offset, unsigned short bwmode);
110834 void SelectChannel(_adapter *padapter, unsigned char channel);
110835 @@ -500,7 +579,6 @@ int WMM_param_handler(_adapter *padapter
110836 #ifdef CONFIG_WFD
110837 int WFD_info_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE);
110838 #endif
110839 -
110840 void WMMOnAssocRsp(_adapter *padapter);
110841
110842 void HT_caps_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE);
110843 @@ -517,6 +595,7 @@ void process_csa_ie(_adapter *padapter,
110844 void update_IOT_info(_adapter *padapter);
110845 void update_capinfo(PADAPTER Adapter, u16 updateCap);
110846 void update_wireless_mode(_adapter * padapter);
110847 +void update_tx_basic_rate(_adapter *padapter, u8 modulation);
110848 void update_bmc_sta_support_rate(_adapter *padapter, u32 mac_id);
110849 int update_sta_support_rate(_adapter *padapter, u8* pvar_ie, uint var_ie_len, int cam_idx);
110850
110851 @@ -544,50 +623,37 @@ void report_add_sta_event(_adapter *pada
110852 void beacon_timing_control(_adapter *padapter);
110853 extern u8 set_tx_beacon_cmd(_adapter*padapter);
110854 unsigned int setup_beacon_frame(_adapter *padapter, unsigned char *beacon_frame);
110855 +void update_mgnt_tx_rate(_adapter *padapter, u8 rate);
110856 void update_mgntframe_attrib(_adapter *padapter, struct pkt_attrib *pattrib);
110857 void dump_mgntframe(_adapter *padapter, struct xmit_frame *pmgntframe);
110858 +s32 dump_mgntframe_and_wait(_adapter *padapter, struct xmit_frame *pmgntframe, int timeout_ms);
110859 +s32 dump_mgntframe_and_wait_ack(_adapter *padapter, struct xmit_frame *pmgntframe);
110860
110861 #ifdef CONFIG_P2P
110862 void issue_probersp_p2p(_adapter *padapter, unsigned char *da);
110863 -void issue_p2p_provision_request( _adapter *padapter, u8* pinterface_raddr, u8* pssid, u8 ussidlen, u8* pdev_raddr);
110864 +void issue_p2p_provision_request( _adapter *padapter, u8* pssid, u8 ussidlen, u8* pdev_raddr);
110865 void issue_p2p_GO_request(_adapter *padapter, u8* raddr);
110866 -void issue_probereq_p2p(_adapter *padapter);
110867 +void issue_probereq_p2p(_adapter *padapter, u8 *da);
110868 +int issue_probereq_p2p_ex(_adapter *adapter, u8 *da, int try_cnt, int wait_ms);
110869 void issue_p2p_invitation_response(_adapter *padapter, u8* raddr, u8 dialogToken, u8 success);
110870 void issue_p2p_invitation_request(_adapter *padapter, u8* raddr );
110871 #endif //CONFIG_P2P
110872 -#ifdef CONFIG_TDLS
110873 -void issue_nulldata_to_TDLS_peer_STA(_adapter *padapter, struct sta_info *ptdls_sta, unsigned int power_mode);
110874 -void init_TPK_timer(_adapter *padapter, struct sta_info *psta);
110875 -void init_ch_switch_timer(_adapter *padapter, struct sta_info *psta);
110876 -void init_base_ch_timer(_adapter *padapter, struct sta_info *psta);
110877 -void init_off_ch_timer(_adapter *padapter, struct sta_info *psta);
110878 -void init_tdls_alive_timer(_adapter *padapter, struct sta_info *psta);
110879 -void init_handshake_timer(_adapter *padapter, struct sta_info *psta);
110880 -void free_tdls_sta(_adapter *padapter, struct sta_info *ptdls_sta);
110881 -void issue_tdls_dis_req(_adapter *padapter, u8 *mac_addr);
110882 -void issue_tdls_setup_req(_adapter *padapter, u8 *mac_addr);
110883 -void issue_tdls_setup_rsp(_adapter *padapter, union recv_frame *precv_frame);
110884 -void issue_tdls_setup_cfm(_adapter *padapter, union recv_frame *precv_frame);
110885 -void issue_tdls_dis_rsp(_adapter * padapter, union recv_frame * precv_frame, u8 dialog);
110886 -void issue_tdls_teardown(_adapter *padapter, u8 *mac_addr);
110887 -void issue_tdls_peer_traffic_indication(_adapter *padapter, struct sta_info *psta);
110888 -void issue_tdls_ch_switch_req(_adapter *padapter, u8 *mac_addr);
110889 -void issue_tdls_ch_switch_rsp(_adapter *padapter, u8 *mac_addr);
110890 -sint On_TDLS_Dis_Rsp(_adapter *adapter, union recv_frame *precv_frame);
110891 -#endif
110892 void issue_beacon(_adapter *padapter);
110893 void issue_probersp(_adapter *padapter, unsigned char *da, u8 is_valid_p2p_probereq);
110894 void issue_assocreq(_adapter *padapter);
110895 void issue_asocrsp(_adapter *padapter, unsigned short status, struct sta_info *pstat, int pkt_type);
110896 void issue_auth(_adapter *padapter, struct sta_info *psta, unsigned short status);
110897 -// Added by Albert 2010/07/26
110898 -// blnbc: 1 -> broadcast probe request
110899 -// blnbc: 0 -> unicast probe request. The address 1 will be the BSSID.
110900 -void issue_probereq(_adapter *padapter, NDIS_802_11_SSID *pssid, u8 blnbc);
110901 -void issue_nulldata(_adapter *padapter, unsigned int power_mode);
110902 -void issue_qos_nulldata(_adapter *padapter, unsigned char *da, u16 tid);
110903 -void issue_deauth(_adapter *padapter, unsigned char *da, unsigned short reason);
110904 +void issue_probereq(_adapter *padapter, NDIS_802_11_SSID *pssid, u8 *da);
110905 +s32 issue_probereq_ex(_adapter *padapter, NDIS_802_11_SSID *pssid, u8* da, int try_cnt, int wait_ms);
110906 +int issue_nulldata(_adapter *padapter, unsigned char *da, unsigned int power_mode, int try_cnt, int wait_ms);
110907 +int issue_qos_nulldata(_adapter *padapter, unsigned char *da, u16 tid, int try_cnt, int wait_ms);
110908 +int issue_deauth(_adapter *padapter, unsigned char *da, unsigned short reason);
110909 +int issue_deauth_ex(_adapter *padapter, u8 *da, unsigned short reason, int try_cnt, int wait_ms);
110910 +void issue_action_spct_ch_switch(_adapter *padapter, u8 *ra, u8 new_ch, u8 ch_offset);
110911 void issue_action_BA(_adapter *padapter, unsigned char *raddr, unsigned char action, unsigned short status);
110912 +#ifdef CONFIG_IEEE80211W
110913 +void issue_action_SA_Query(_adapter *padapter, unsigned char *raddr, unsigned char action, unsigned short tid);
110914 +#endif //CONFIG_IEEE80211W
110915 unsigned int send_delba(_adapter *padapter, u8 initiator, u8 *addr);
110916 unsigned int send_beacon(_adapter *padapter);
110917
110918 @@ -609,11 +675,15 @@ unsigned int OnAuthClient(_adapter *pada
110919 unsigned int OnDeAuth(_adapter *padapter, union recv_frame *precv_frame);
110920 unsigned int OnAction(_adapter *padapter, union recv_frame *precv_frame);
110921
110922 +unsigned int on_action_spct(_adapter *padapter, union recv_frame *precv_frame);
110923 unsigned int OnAction_qos(_adapter *padapter, union recv_frame *precv_frame);
110924 unsigned int OnAction_dls(_adapter *padapter, union recv_frame *precv_frame);
110925 unsigned int OnAction_back(_adapter *padapter, union recv_frame *precv_frame);
110926 -unsigned int OnAction_public(_adapter *padapter, union recv_frame *precv_frame);
110927 +unsigned int on_action_public(_adapter *padapter, union recv_frame *precv_frame);
110928 unsigned int OnAction_ht(_adapter *padapter, union recv_frame *precv_frame);
110929 +#ifdef CONFIG_IEEE80211W
110930 +unsigned int OnAction_sa_query(_adapter *padapter, union recv_frame *precv_frame);
110931 +#endif //CONFIG_IEEE80211W
110932 unsigned int OnAction_wmm(_adapter *padapter, union recv_frame *precv_frame);
110933 unsigned int OnAction_p2p(_adapter *padapter, union recv_frame *precv_frame);
110934
110935 @@ -627,6 +697,9 @@ void linked_status_chk(_adapter *padapte
110936 void survey_timer_hdl (_adapter *padapter);
110937 void link_timer_hdl (_adapter *padapter);
110938 void addba_timer_hdl(struct sta_info *psta);
110939 +#ifdef CONFIG_IEEE80211W
110940 +void sa_query_timer_hdl(_adapter *padapter);
110941 +#endif //CONFIG_IEEE80211W
110942 //void reauth_timer_hdl(_adapter *padapter);
110943 //void reassoc_timer_hdl(_adapter *padapter);
110944
110945 @@ -641,7 +714,13 @@ void addba_timer_hdl(struct sta_info *ps
110946 /*DBG_871X("%s set_link_timer(%p, %d)\n", __FUNCTION__, (mlmeext), (ms));*/ \
110947 _set_timer(&(mlmeext)->link_timer, (ms)); \
110948 } while(0)
110949 -
110950 +#ifdef CONFIG_IEEE80211W
110951 +#define set_sa_query_timer(mlmeext, ms) \
110952 + do { \
110953 + DBG_871X("%s set_sa_query_timer(%p, %d)\n", __FUNCTION__, (mlmeext), (ms)); \
110954 + _set_timer(&(mlmeext)->sa_query_timer, (ms)); \
110955 + } while(0)
110956 +#endif //CONFIG_IEEE80211W
110957 extern int cckrates_included(unsigned char *rate, int ratelen);
110958 extern int cckratesonly_included(unsigned char *rate, int ratelen);
110959
110960 @@ -650,24 +729,29 @@ extern void process_addba_req(_adapter *
110961 extern void update_TSF(struct mlme_ext_priv *pmlmeext, u8 *pframe, uint len);
110962 extern void correct_TSF(_adapter *padapter, struct mlme_ext_priv *pmlmeext);
110963
110964 -#ifdef CONFIG_AP_MODE
110965 -void init_mlme_ap_info(_adapter *padapter);
110966 -void free_mlme_ap_info(_adapter *padapter);
110967 -//void update_BCNTIM(_adapter *padapter);
110968 -void update_beacon(_adapter *padapter, u8 ie_id, u8 *oui, u8 tx);
110969 -void expire_timeout_chk(_adapter *padapter);
110970 -void update_sta_info_apmode(_adapter *padapter, struct sta_info *psta);
110971 -int rtw_check_beacon_data(_adapter *padapter, u8 *pbuf, int len);
110972 -#ifdef CONFIG_NATIVEAP_MLME
110973 -void bss_cap_update(_adapter *padapter, struct sta_info *psta);
110974 -void sta_info_update(_adapter *padapter, struct sta_info *psta);
110975 -void ap_sta_info_defer_update(_adapter *padapter, struct sta_info *psta);
110976 -void ap_free_sta(_adapter *padapter, struct sta_info *psta);
110977 -int rtw_sta_flush(_adapter *padapter);
110978 -void start_ap_mode(_adapter *padapter);
110979 -void stop_ap_mode(_adapter *padapter);
110980 +
110981 +#ifdef CONFIG_CONCURRENT_MODE
110982 + sint check_buddy_mlmeinfo_state(_adapter *padapter, u32 state);
110983 +void concurrent_chk_joinbss_done(_adapter *padapter, int join_res);
110984 +#endif //CONFIG_CONCURRENT_MODE
110985 +
110986 +#ifdef CONFIG_DUALMAC_CONCURRENT
110987 +void dc_SelectChannel(_adapter *padapter, unsigned char channel);
110988 +void dc_SetBWMode(_adapter *padapter, unsigned short bwmode, unsigned char channel_offset);
110989 +void dc_set_channel_bwmode_disconnect(_adapter *padapter);
110990 +u8 dc_handle_join_request(_adapter *padapter);
110991 +void dc_handle_join_done(_adapter *padapter, u8 join_res);
110992 +sint dc_check_fwstate(_adapter *padapter, sint fw_state);
110993 +u8 dc_handle_site_survey(_adapter *padapter);
110994 +void dc_report_survey_event(_adapter *padapter, union recv_frame *precv_frame);
110995 +void dc_set_channel_bwmode_survey_done(_adapter *padapter);
110996 +void dc_set_ap_channel_bandwidth(_adapter *padapter, u8 channel, u8 channel_offset, u8 bwmode);
110997 +void dc_resume_xmit(_adapter *padapter);
110998 +u8 dc_check_xmit(_adapter *padapter);
110999 #endif
111000 -#endif //end of CONFIG_AP_MODE
111001 +
111002 +int rtw_chk_start_clnt_join(_adapter *padapter);
111003 +int rtw_get_ch_setting_union(_adapter *adapter, u8 *ch, u8 *bw, u8 *offset);
111004
111005 struct cmd_hdl {
111006 uint parmsize;
111007 @@ -699,6 +783,7 @@ u8 add_ba_hdl(_adapter *padapter, unsign
111008 u8 mlme_evt_hdl(_adapter *padapter, unsigned char *pbuf);
111009 u8 h2c_msg_hdl(_adapter *padapter, unsigned char *pbuf);
111010 u8 tx_beacon_hdl(_adapter *padapter, unsigned char *pbuf);
111011 +u8 set_ch_hdl(_adapter *padapter, u8 *pbuf);
111012 u8 set_chplan_hdl(_adapter *padapter, unsigned char *pbuf);
111013 u8 led_blink_hdl(_adapter *padapter, unsigned char *pbuf);
111014 u8 set_csa_hdl(_adapter *padapter, unsigned char *pbuf); //Kurt: Handling DFS channel switch announcement ie.
111015 @@ -758,7 +843,7 @@ struct cmd_hdl wlancmds[] =
111016 GEN_MLME_EXT_HANDLER(0, NULL)
111017 GEN_MLME_EXT_HANDLER(0, NULL)
111018 GEN_MLME_EXT_HANDLER(sizeof(struct addBaReq_parm), add_ba_hdl)
111019 - GEN_MLME_EXT_HANDLER(0, NULL)
111020 + GEN_MLME_EXT_HANDLER(sizeof(struct set_ch_parm), set_ch_hdl) /* 46 */
111021 GEN_MLME_EXT_HANDLER(0, NULL)
111022 GEN_MLME_EXT_HANDLER(0, NULL)
111023 GEN_MLME_EXT_HANDLER(0, NULL)
111024 --- a/drivers/net/wireless/rtl8192cu/include/rtw_mp.h
111025 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_mp.h
111026 @@ -192,7 +192,7 @@ struct mp_tx
111027 u8 *pallocated_buf;
111028 u8 *buf;
111029 u32 buf_size, write_size;
111030 - _thread_hdl_ PktTxThread;
111031 + _thread_hdl_ PktTxThread;
111032 };
111033
111034 //#if (MP_DRIVER == 1)
111035 @@ -606,6 +606,12 @@ typedef enum _ENCRY_CTRL_STATE_ {
111036 SW_ENCRY_HW_DECRY //sw encryption & hw decryption
111037 }ENCRY_CTRL_STATE;
111038
111039 +typedef enum _OFDM_TX_MODE {
111040 + OFDM_ALL_OFF = 0,
111041 + OFDM_ContinuousTx = 1,
111042 + OFDM_SingleCarrier = 2,
111043 + OFDM_SingleTone = 4,
111044 +} OFDM_TX_MODE;
111045
111046 //=======================================================================
111047 //extern struct mp_xmit_frame *alloc_mp_xmitframe(struct mp_priv *pmp_priv);
111048 @@ -673,8 +679,6 @@ extern void GetPowerTracking(PADAPTER pa
111049
111050 extern u32 mp_query_psd(PADAPTER pAdapter, u8 *data);
111051
111052 -extern u32 rtw_atoi(u8 *s);
111053 -
111054
111055 extern void Hal_SetAntenna(PADAPTER pAdapter);
111056 extern void Hal_SetBandwidth(PADAPTER pAdapter);
111057 --- a/drivers/net/wireless/rtl8192cu/include/rtw_mp_ioctl.h
111058 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_mp_ioctl.h
111059 @@ -1,7 +1,7 @@
111060 /******************************************************************************
111061 *
111062 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
111063 - *
111064 + *
111065 * This program is free software; you can redistribute it and/or modify it
111066 * under the terms of version 2 of the GNU General Public License as
111067 * published by the Free Software Foundation.
111068 --- a/drivers/net/wireless/rtl8192cu/include/rtw_mp_phy_regdef.h
111069 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_mp_phy_regdef.h
111070 @@ -16,8 +16,7 @@
111071 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
111072 *
111073 *
111074 -
111075 -******************************************************************************/
111076 + ******************************************************************************/
111077 /*****************************************************************************
111078 *
111079 * Module: __RTW_MP_PHY_REGDEF_H_
111080 --- a/drivers/net/wireless/rtl8192cu/include/rtw_p2p.h
111081 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_p2p.h
111082 @@ -29,11 +29,13 @@ u32 build_assoc_resp_p2p_ie(struct wifid
111083 u32 build_deauth_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf);
111084 #ifdef CONFIG_WFD
111085 u32 build_probe_req_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf);
111086 -u32 build_probe_resp_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf);
111087 +u32 build_probe_resp_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf, u8 tunneled);
111088 u32 build_beacon_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf);
111089 u32 build_nego_req_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf);
111090 u32 build_nego_resp_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf);
111091 u32 build_nego_confirm_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf);
111092 +u32 build_invitation_req_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf);
111093 +u32 build_invitation_resp_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf);
111094 u32 build_assoc_req_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf);
111095 u32 build_assoc_resp_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf);
111096 u32 build_provdisc_req_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf);
111097 @@ -51,16 +53,24 @@ u8 process_p2p_group_negotation_resp( st
111098 u8 process_p2p_group_negotation_confirm( struct wifidirect_info *pwdinfo, u8 *pframe, uint len );
111099 u8 process_p2p_presence_req(struct wifidirect_info *pwdinfo, u8 *pframe, uint len);
111100
111101 -void process_p2p_ps_ie(PADAPTER padapter, u8 *IEs, u32 IELength);
111102 -void p2p_ps_wk_hdl(_adapter *padapter, u8 p2p_ps_state);
111103 void p2p_protocol_wk_hdl(_adapter *padapter, int intCmdType);
111104 -u8 p2p_ps_wk_cmd(_adapter*padapter, u8 p2p_ps_state, u8 enqueue);
111105 +
111106 +#ifdef CONFIG_P2P_PS
111107 +void process_p2p_ps_ie(PADAPTER padapter, u8 *IEs, u32 IELength);
111108 +void p2p_ps_wk_hdl(_adapter *padapter, u8 p2p_ps_state);
111109 +u8 p2p_ps_wk_cmd(_adapter*padapter, u8 p2p_ps_state, u8 enqueue);
111110 +#endif // CONFIG_P2P_PS
111111
111112 #ifdef CONFIG_IOCTL_CFG80211
111113 void rtw_init_cfg80211_wifidirect_info( _adapter* padapter);
111114 int rtw_p2p_check_frames(_adapter *padapter, const u8 *buf, u32 len, u8 tx);
111115 +void rtw_append_wfd_ie(_adapter *padapter, u8 *buf, u32 *len);
111116 #endif //CONFIG_IOCTL_CFG80211
111117
111118 +void reset_global_wifidirect_info( _adapter* padapter );
111119 +int rtw_init_wifi_display_info(_adapter* padapter);
111120 +void rtw_init_wifidirect_timers(_adapter* padapter);
111121 +void rtw_init_wifidirect_addrs(_adapter* padapter, u8 *dev_addr, u8 *iface_addr);
111122 void init_wifidirect_info( _adapter* padapter, enum P2P_ROLE role);
111123 int rtw_p2p_enable(_adapter *padapter, enum P2P_ROLE role);
111124
111125 --- a/drivers/net/wireless/rtl8192cu/include/rtw_pwrctrl.h
111126 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_pwrctrl.h
111127 @@ -16,8 +16,7 @@
111128 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
111129 *
111130 *
111131 -
111132 -******************************************************************************/
111133 + ******************************************************************************/
111134 #ifndef __RTW_PWRCTRL_H_
111135 #define __RTW_PWRCTRL_H_
111136
111137 @@ -74,31 +73,35 @@ enum Power_Mgnt
111138 BIT[4] = sub-state
111139 */
111140
111141 -#define PS_DPS BIT(0)
111142 -#define PS_LCLK (PS_DPS)
111143 -#define PS_RF_OFF BIT(1)
111144 -#define PS_ALL_ON BIT(2)
111145 -#define PS_ST_ACTIVE BIT(3)
111146 -#define PS_LP BIT(4) // low performance
111147 -
111148 -#define PS_STATE_MASK (0x0F)
111149 -#define PS_STATE_HW_MASK (0x07)
111150 -#define PS_SEQ_MASK (0xc0)
111151 -
111152 -#define PS_STATE(x) (PS_STATE_MASK & (x))
111153 -#define PS_STATE_HW(x) (PS_STATE_HW_MASK & (x))
111154 -#define PS_SEQ(x) (PS_SEQ_MASK & (x))
111155 -
111156 -#define PS_STATE_S0 (PS_DPS)
111157 -#define PS_STATE_S1 (PS_LCLK)
111158 -#define PS_STATE_S2 (PS_RF_OFF)
111159 -#define PS_STATE_S3 (PS_ALL_ON)
111160 -#define PS_STATE_S4 ((PS_ST_ACTIVE) | (PS_ALL_ON))
111161 -
111162 -
111163 -#define PS_IS_RF_ON(x) ((x) & (PS_ALL_ON))
111164 -#define PS_IS_ACTIVE(x) ((x) & (PS_ST_ACTIVE))
111165 -#define CLR_PS_STATE(x) ((x) = ((x) & (0xF0)))
111166 +#define PS_DPS BIT(0)
111167 +#define PS_LCLK (PS_DPS)
111168 +#define PS_RF_OFF BIT(1)
111169 +#define PS_ALL_ON BIT(2)
111170 +#define PS_ST_ACTIVE BIT(3)
111171 +
111172 +#define PS_ISR_ENABLE BIT(4)
111173 +#define PS_IMR_ENABLE BIT(5)
111174 +#define PS_ACK BIT(6)
111175 +#define PS_TOGGLE BIT(7)
111176 +
111177 +#define PS_STATE_MASK (0x0F)
111178 +#define PS_STATE_HW_MASK (0x07)
111179 +#define PS_SEQ_MASK (0xc0)
111180 +
111181 +#define PS_STATE(x) (PS_STATE_MASK & (x))
111182 +#define PS_STATE_HW(x) (PS_STATE_HW_MASK & (x))
111183 +#define PS_SEQ(x) (PS_SEQ_MASK & (x))
111184 +
111185 +#define PS_STATE_S0 (PS_DPS)
111186 +#define PS_STATE_S1 (PS_LCLK)
111187 +#define PS_STATE_S2 (PS_RF_OFF)
111188 +#define PS_STATE_S3 (PS_ALL_ON)
111189 +#define PS_STATE_S4 ((PS_ST_ACTIVE) | (PS_ALL_ON))
111190 +
111191 +
111192 +#define PS_IS_RF_ON(x) ((x) & (PS_ALL_ON))
111193 +#define PS_IS_ACTIVE(x) ((x) & (PS_ST_ACTIVE))
111194 +#define CLR_PS_STATE(x) ((x) = ((x) & (0xF0)))
111195
111196
111197 struct reportpwrstate_parm {
111198 @@ -174,12 +177,13 @@ enum _PS_BBRegBackup_ {
111199 };
111200
111201 enum { // for ips_mode
111202 - IPS_NORMAL = 0,
111203 - IPS_LEVEL_2,
111204 - IPS_NONE,
111205 + IPS_NONE=0,
111206 + IPS_NORMAL,
111207 + IPS_LEVEL_2,
111208 };
111209
111210 -struct pwrctrl_priv {
111211 +struct pwrctrl_priv
111212 +{
111213 _pwrlock lock;
111214 volatile u8 rpwm; // requested power state for fw
111215 volatile u8 cpwm; // fw current power state. updated when 1. read from HCPWM 2. driver lowers power level
111216 @@ -187,7 +191,7 @@ struct pwrctrl_priv {
111217 volatile u8 cpwm_tog; // toggling
111218 u8 pwr_mode;
111219 u8 smart_ps;
111220 - uint alives;
111221 + u32 alives;
111222
111223 u8 b_hw_radio_off;
111224 u8 reg_rfoff;
111225 @@ -198,7 +202,7 @@ struct pwrctrl_priv {
111226 u32 cur_ps_level;
111227 u32 reg_rfps_level;
111228
111229 -
111230 +
111231
111232 #ifdef CONFIG_PCI_HCI
111233 //just for PCIE ASPM
111234 @@ -209,16 +213,14 @@ struct pwrctrl_priv {
111235 u8 const_amdpci_aspm;
111236 #endif
111237
111238 - //u8 ips_enable;//for dbg
111239 - //u8 lps_enable;//for dbg
111240 -
111241 uint ips_enter_cnts;
111242 uint ips_leave_cnts;
111243 -
111244 - _timer ips_check_timer;
111245
111246 u8 ips_mode;
111247 u8 ips_mode_req; // used to accept the mode setting request, will update to ipsmode later
111248 + uint bips_processing;
111249 + u32 ips_deny_time; /* will deny IPS when system time is smaller than this */
111250 + u8 ps_processing; /* temporarily used to mark whether in rtw_ps_processor */
111251
111252 u8 bLeisurePs;
111253 u8 LpsIdleCount;
111254 @@ -233,16 +235,17 @@ struct pwrctrl_priv {
111255 u8 bInternalAutoSuspend;
111256 u8 bInSuspend;
111257 u8 bSupportRemoteWakeup;
111258 +#ifdef CONFIG_WOWLAN
111259 u8 wowlan_mode;
111260 u8 wowlan_pattern;
111261 u8 wowlan_magic;
111262 u8 wowlan_unicast;
111263 u8 wowlan_pattern_idx;
111264 u32 wowlan_pattern_context[8][5];
111265 +#endif // CONFIG_WOWLAN
111266 _timer pwr_state_check_timer;
111267 int pwr_state_check_interval;
111268 u8 pwr_state_check_cnts;
111269 - uint bips_processing;
111270
111271 int ps_flag;
111272
111273 @@ -250,7 +253,6 @@ struct pwrctrl_priv {
111274 //rt_rf_power_state current_rfpwrstate;
111275 rt_rf_power_state change_rfpwrstate;
111276
111277 - u8 wepkeymask;
111278 u8 bHWPowerdown;//if support hw power down
111279 u8 bHWPwrPindetect;
111280 u8 bkeepfwalive;
111281 @@ -266,15 +268,12 @@ struct pwrctrl_priv {
111282 struct early_suspend early_suspend;
111283 u8 do_late_resume;
111284 #endif //CONFIG_HAS_EARLYSUSPEND
111285 -
111286 +
111287 #ifdef CONFIG_ANDROID_POWER
111288 android_early_suspend_t early_suspend;
111289 u8 do_late_resume;
111290 #endif
111291 -
111292 - #ifdef CONFIG_INTEL_PROXIM
111293 - u8 stored_power_mgnt;
111294 - #endif
111295 +
111296 };
111297
111298 #define rtw_get_ips_mode_req(pwrctrlpriv) \
111299 @@ -283,6 +282,8 @@ struct pwrctrl_priv {
111300 #define rtw_ips_mode_req(pwrctrlpriv, ips_mode) \
111301 (pwrctrlpriv)->ips_mode_req = (ips_mode)
111302
111303 +#define RTW_PWR_STATE_CHK_INTERVAL 2000
111304 +
111305 #define _rtw_set_pwr_state_check_timer(pwrctrlpriv, ms) \
111306 do { \
111307 /*DBG_871X("%s _rtw_set_pwr_state_check_timer(%p, %d)\n", __FUNCTION__, (pwrctrlpriv), (ms));*/ \
111308 @@ -294,20 +295,26 @@ struct pwrctrl_priv {
111309
111310 extern void rtw_init_pwrctrl_priv(_adapter *adapter);
111311 extern void rtw_free_pwrctrl_priv(_adapter * adapter);
111312 -extern sint rtw_register_tx_alive(_adapter *padapter);
111313 -extern void rtw_unregister_tx_alive(_adapter *padapter);
111314 -extern sint rtw_register_rx_alive(_adapter *padapter);
111315 -extern void rtw_unregister_rx_alive(_adapter *padapter);
111316 -extern sint rtw_register_cmd_alive(_adapter *padapter);
111317 -extern void rtw_unregister_cmd_alive(_adapter *padapter);
111318 -extern sint rtw_register_evt_alive(_adapter *padapter);
111319 -extern void rtw_unregister_evt_alive(_adapter *padapter);
111320 -extern void cpwm_int_hdl(_adapter *padapter, struct reportpwrstate_parm *preportpwrstate);
111321 +
111322 +#ifdef CONFIG_LPS_LCLK
111323 +extern s32 rtw_register_tx_alive(PADAPTER padapter);
111324 +extern void rtw_unregister_tx_alive(PADAPTER padapter);
111325 +extern s32 rtw_register_rx_alive(PADAPTER padapter);
111326 +extern void rtw_unregister_rx_alive(PADAPTER padapter);
111327 +extern s32 rtw_register_cmd_alive(PADAPTER padapter);
111328 +extern void rtw_unregister_cmd_alive(PADAPTER padapter);
111329 +extern s32 rtw_register_evt_alive(PADAPTER padapter);
111330 +extern void rtw_unregister_evt_alive(PADAPTER padapter);
111331 +extern void cpwm_int_hdl(PADAPTER padapter, struct reportpwrstate_parm *preportpwrstate);
111332 +#endif
111333 +
111334 extern void rtw_set_ps_mode(_adapter * padapter, u8 ps_mode, u8 smart_ps);
111335 extern void rtw_set_rpwm(_adapter * padapter, u8 val8);
111336 extern void LeaveAllPowerSaveMode(PADAPTER Adapter);
111337 #ifdef CONFIG_IPS
111338 +void _ips_enter(_adapter * padapter);
111339 void ips_enter(_adapter * padapter);
111340 +int _ips_leave(_adapter * padapter);
111341 int ips_leave(_adapter * padapter);
111342 #endif
111343
111344 @@ -331,13 +338,25 @@ void rtw_resume_in_workqueue(struct pwrc
111345 #endif //CONFIG_RESUME_IN_WORKQUEUE
111346
111347 #if defined(CONFIG_HAS_EARLYSUSPEND ) || defined(CONFIG_ANDROID_POWER)
111348 -#define rtw_is_earlysuspend_registered(pwrpriv) (pwrpriv)->early_suspend.suspend
111349 +bool rtw_is_earlysuspend_registered(struct pwrctrl_priv *pwrpriv);
111350 +bool rtw_is_do_late_resume(struct pwrctrl_priv *pwrpriv);
111351 +void rtw_set_do_late_resume(struct pwrctrl_priv *pwrpriv, bool enable);
111352 void rtw_register_early_suspend(struct pwrctrl_priv *pwrpriv);
111353 void rtw_unregister_early_suspend(struct pwrctrl_priv *pwrpriv);
111354 -#endif //CONFIG_HAS_EARLYSUSPEND || CONFIG_ANDROID_POWER
111355 +#else
111356 +#define rtw_is_earlysuspend_registered(pwrpriv) _FALSE
111357 +#define rtw_is_do_late_resume(pwrpriv) _FALSE
111358 +#define rtw_set_do_late_resume(pwrpriv, enable) do {} while (0)
111359 +#define rtw_register_early_suspend(pwrpriv) do {} while (0)
111360 +#define rtw_unregister_early_suspend(pwrpriv) do {} while (0)
111361 +#endif /* CONFIG_HAS_EARLYSUSPEND || CONFIG_ANDROID_POWER */
111362
111363 u8 rtw_interface_ps_func(_adapter *padapter,HAL_INTF_PS_FUNC efunc_id,u8* val);
111364 -int _rtw_pwr_wakeup(_adapter *padapter, const char *caller);
111365 -#define rtw_pwr_wakeup(adapter) _rtw_pwr_wakeup(adapter, __FUNCTION__)
111366 +void rtw_set_ips_deny(_adapter *padapter, u32 ms);
111367 +int _rtw_pwr_wakeup(_adapter *padapter, u32 ips_deffer_ms, const char *caller);
111368 +#define rtw_pwr_wakeup(adapter) _rtw_pwr_wakeup(adapter, RTW_PWR_STATE_CHK_INTERVAL, __FUNCTION__)
111369 +#define rtw_pwr_wakeup_ex(adapter, ips_deffer_ms) _rtw_pwr_wakeup(adapter, ips_deffer_ms, __FUNCTION__)
111370 +int rtw_pm_set_ips(_adapter *padapter, u8 mode);
111371 +int rtw_pm_set_lps(_adapter *padapter, u8 mode);
111372
111373 #endif //__RTL871X_PWRCTRL_H_
111374 --- a/drivers/net/wireless/rtl8192cu/include/rtw_qos.h
111375 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_qos.h
111376 @@ -16,8 +16,7 @@
111377 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
111378 *
111379 *
111380 -
111381 -******************************************************************************/
111382 + ******************************************************************************/
111383
111384
111385 #ifndef _RTW_QOS_H_
111386 --- a/drivers/net/wireless/rtl8192cu/include/rtw_recv.h
111387 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_recv.h
111388 @@ -1,7 +1,7 @@
111389 /******************************************************************************
111390 *
111391 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
111392 - *
111393 + *
111394 * This program is free software; you can redistribute it and/or modify it
111395 * under the terms of version 2 of the GNU General Public License as
111396 * published by the Free Software Foundation.
111397 @@ -16,8 +16,7 @@
111398 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
111399 *
111400 *
111401 -
111402 -******************************************************************************/
111403 + ******************************************************************************/
111404 #ifndef _RTW_RECV_H_
111405 #define _RTW_RECV_H_
111406
111407 @@ -61,14 +60,14 @@ struct recv_reorder_ctrl
111408 u8 enable;
111409 u16 indicate_seq;//=wstart_b, init_value=0xffff
111410 u16 wend_b;
111411 - u8 wsize_b;
111412 + u8 wsize_b;
111413 _queue pending_recvframe_queue;
111414 _timer reordering_ctrl_timer;
111415 };
111416
111417 struct stainfo_rxcache {
111418 u16 tid_rxseq[16];
111419 -/*
111420 +/*
111421 unsigned short tid0_rxseq;
111422 unsigned short tid1_rxseq;
111423 unsigned short tid2_rxseq;
111424 @@ -103,49 +102,53 @@ struct signal_stat {
111425 u32 total_val; //sum of valid elements
111426 };
111427
111428 -struct rx_pkt_attrib {
111429 +struct rx_pkt_attrib
111430 +{
111431 u16 pkt_len;
111432 u8 physt;
111433 u8 drvinfo_sz;
111434 u8 shift_sz;
111435 + u8 hdrlen; //the WLAN Header Len
111436 + u8 to_fr_ds;
111437 u8 amsdu;
111438 - u8 order;
111439 u8 qos;
111440 - u8 to_fr_ds;
111441 + u8 priority;
111442 + u8 pw_save;
111443 + u8 mdata;
111444 u16 seq_num;
111445 u8 frag_num;
111446 - u8 pw_save;
111447 u8 mfrag;
111448 - u8 mdata;
111449 + u8 order;
111450 u8 privacy; //in frame_ctrl field
111451 u8 bdecrypted;
111452 - int hdrlen; //the WLAN Header Len
111453 - int iv_len;
111454 - int icv_len;
111455 - u8 encrypt; //when 0 indicate no encrypt. when non-zero, indicate the encrypt algorith
111456 - u8 priority;
111457 - u8 ack_policy;
111458 - u8 crc_err;
111459 + u8 encrypt; //when 0 indicate no encrypt. when non-zero, indicate the encrypt algorith
111460 + u8 iv_len;
111461 + u8 icv_len;
111462 + u8 crc_err;
111463 u8 icv_err;
111464
111465 + u16 eth_type;
111466 +
111467 u8 dst[ETH_ALEN];
111468 u8 src[ETH_ALEN];
111469 u8 ta[ETH_ALEN];
111470 u8 ra[ETH_ALEN];
111471 u8 bssid[ETH_ALEN];
111472 -#ifdef CONFIG_TCP_CSUM_OFFLOAD_RX
111473 +
111474 + u8 ack_policy;
111475 +
111476 +//#ifdef CONFIG_TCP_CSUM_OFFLOAD_RX
111477 u8 tcpchk_valid; // 0: invalid, 1: valid
111478 u8 ip_chkrpt; //0: incorrect, 1: correct
111479 u8 tcp_chkrpt; //0: incorrect, 1: correct
111480 -#endif
111481 -
111482 +//#endif
111483 u8 key_index;
111484
111485 u8 mcs_rate;
111486 u8 rxht;
111487 u8 sgi;
111488 u8 signal_qual;
111489 - s8 rx_mimo_signal_qual[2];
111490 + s8 rx_mimo_signal_qual[2];
111491 u8 signal_strength;
111492 u8 rx_rssi[2]; //This value is percentage
111493 u8 rx_snr[2];
111494 @@ -159,7 +162,7 @@ struct rx_pkt_attrib {
111495 #define SN_EQUAL(a, b) (a == b)
111496 //#define REORDER_WIN_SIZE 128
111497 //#define REORDER_ENTRY_NUM 128
111498 -#define REORDER_WAIT_TIME (30) // (ms)
111499 +#define REORDER_WAIT_TIME (50) // (ms)
111500
111501 #define RECVBUFF_ALIGN_SZ 8
111502
111503 @@ -190,8 +193,8 @@ struct recv_stat
111504 #define EOR BIT(30)
111505
111506 #ifdef CONFIG_PCI_HCI
111507 -#define PCI_MAX_RX_QUEUE 2// MSDU packet queue, Rx Command Queue
111508 -#define PCI_MAX_RX_COUNT 64
111509 +#define PCI_MAX_RX_QUEUE 1// MSDU packet queue, Rx Command Queue
111510 +#define PCI_MAX_RX_COUNT 128
111511
111512 struct rtw_rx_ring {
111513 struct recv_stat *desc;
111514 @@ -207,27 +210,28 @@ accesser of recv_priv: rtw_recv_entry(di
111515
111516 using enter_critical section to protect
111517 */
111518 -struct recv_priv {
111519 -
111520 +struct recv_priv
111521 +{
111522 _lock lock;
111523
111524 -#ifdef CONFIG_RECV_THREAD_MODE
111525 +#ifdef CONFIG_RECV_THREAD_MODE
111526 _sema recv_sema;
111527 _sema terminate_recvthread_sema;
111528 #endif
111529 -
111530 +
111531 //_queue blk_strms[MAX_RX_NUMBLKS]; // keeping the block ack frame until return ack
111532 _queue free_recv_queue;
111533 _queue recv_pending_queue;
111534 -
111535 + _queue uc_swdec_pending_queue;
111536 +
111537
111538 u8 *pallocated_frame_buf;
111539 - u8 *precv_frame_buf;
111540 -
111541 + u8 *precv_frame_buf;
111542 +
111543 uint free_recvframe_cnt;
111544 -
111545 +
111546 _adapter *adapter;
111547 -
111548 +
111549 #ifdef PLATFORM_WINDOWS
111550 _nic_hdl RxPktPoolHdl;
111551 _nic_hdl RxBufPoolHdl;
111552 @@ -235,9 +239,9 @@ struct recv_priv {
111553 #ifdef PLATFORM_OS_XP
111554 PMDL pbytecnt_mdl;
111555 #endif
111556 - uint counter; //record the number that up-layer will return to drv; only when counter==0 can we release recv_priv
111557 + uint counter; //record the number that up-layer will return to drv; only when counter==0 can we release recv_priv
111558 NDIS_EVENT recv_resource_evt ;
111559 -#endif
111560 +#endif
111561
111562 u32 bIsAnyNonBEPkts;
111563 u64 rx_bytes;
111564 @@ -250,12 +254,12 @@ struct recv_priv {
111565 uint rx_smallpacket_crcerr;
111566 uint rx_middlepacket_crcerr;
111567
111568 -#ifdef CONFIG_USB_HCI
111569 +#ifdef CONFIG_USB_HCI
111570 //u8 *pallocated_urb_buf;
111571 _sema allrxreturnevt;
111572 uint ff_hwaddr;
111573 u8 rx_pending_cnt;
111574 -
111575 +
111576 #ifdef CONFIG_USB_INTERRUPT_IN_PIPE
111577 #ifdef PLATFORM_LINUX
111578 PURB int_in_urb;
111579 @@ -264,28 +268,34 @@ struct recv_priv {
111580 u8 *int_in_buf;
111581 #endif
111582
111583 -#endif
111584 -#ifdef PLATFORM_LINUX
111585 +#endif
111586 +#if defined(PLATFORM_LINUX) || defined(PLATFORM_FREEBSD)
111587 +#ifdef PLATFORM_FREEBSD
111588 + struct task irq_prepare_beacon_tasklet;
111589 + struct task recv_tasklet;
111590 +#else //PLATFORM_FREEBSD
111591 struct tasklet_struct irq_prepare_beacon_tasklet;
111592 struct tasklet_struct recv_tasklet;
111593 +#endif //PLATFORM_FREEBSD
111594 struct sk_buff_head free_recv_skb_queue;
111595 struct sk_buff_head rx_skb_queue;
111596 +#ifdef CONFIG_RX_INDICATE_QUEUE
111597 + struct task rx_indicate_tasklet;
111598 + struct ifqueue rx_indicate_queue;
111599 +#endif // CONFIG_RX_INDICATE_QUEUE
111600
111601 #ifdef CONFIG_USE_USB_BUFFER_ALLOC_RX
111602 _queue recv_buf_pending_queue;
111603 #endif // CONFIG_USE_USB_BUFFER_ALLOC_RX
111604 -#endif
111605 +#endif //defined(PLATFORM_LINUX) || defined(PLATFORM_FREEBSD)
111606
111607 u8 *pallocated_recv_buf;
111608 - u8 *precv_buf; // 4 alignment
111609 + u8 *precv_buf; // 4 alignment
111610 _queue free_recv_buf_queue;
111611 u32 free_recv_buf_queue_cnt;
111612
111613 #ifdef CONFIG_SDIO_HCI
111614 - u8 bytecnt_buf[512];
111615 - //u8 * recvbuf_drop_ori;
111616 - //u8 * recvbuf_drop;
111617 - struct recv_buf *recvbuf_drop;
111618 + _queue recv_buf_pending_queue;
111619 #endif
111620
111621 #ifdef CONFIG_PCI_HCI
111622 @@ -317,7 +327,13 @@ struct recv_priv {
111623 struct smooth_rssi_data signal_qual_data;
111624 struct smooth_rssi_data signal_strength_data;
111625 #endif //CONFIG_NEW_SIGNAL_STAT_PROCESS
111626 +
111627 + u32 recvbuf_skb_alloc_fail_cnt;
111628 + u32 recvbuf_null_cnt;
111629 + u32 read_port_complete_EINPROGRESS_cnt;
111630 + u32 read_port_complete_other_urb_err_cnt;
111631
111632 +
111633 };
111634
111635 #ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
111636 @@ -325,15 +341,15 @@ struct recv_priv {
111637 #endif //CONFIG_NEW_SIGNAL_STAT_PROCESS
111638
111639 struct sta_recv_priv {
111640 -
111641 - _lock lock;
111642 - sint option;
111643 -
111644 +
111645 + _lock lock;
111646 + sint option;
111647 +
111648 //_queue blk_strms[MAX_RX_NUMBLKS];
111649 _queue defrag_q; //keeping the fragment frame until defrag
111650 -
111651 - struct stainfo_rxcache rxcache;
111652 -
111653 +
111654 + struct stainfo_rxcache rxcache;
111655 +
111656 //uint sta_rx_bytes;
111657 //uint sta_rx_pkts;
111658 //uint sta_rx_fail;
111659 @@ -341,26 +357,28 @@ struct sta_recv_priv {
111660 };
111661
111662
111663 -struct recv_buf{
111664 -
111665 +struct recv_buf
111666 +{
111667 _list list;
111668
111669 _lock recvbuf_lock;
111670
111671 u32 ref_cnt;
111672
111673 - _adapter *adapter;
111674 + PADAPTER adapter;
111675
111676 -#ifdef CONFIG_SDIO_HCI
111677 -#ifdef PLATFORM_OS_XP
111678 - PMDL mdl_ptr;
111679 -#endif
111680 - u8 cmd_fail;
111681 -#endif
111682 + u8 *pbuf;
111683 + u8 *pallocated_buf;
111684 +
111685 + u32 len;
111686 + u8 *phead;
111687 + u8 *pdata;
111688 + u8 *ptail;
111689 + u8 *pend;
111690
111691 #ifdef CONFIG_USB_HCI
111692
111693 - #if defined(PLATFORM_OS_XP)||defined(PLATFORM_LINUX)
111694 + #if defined(PLATFORM_OS_XP)||defined(PLATFORM_LINUX)||defined(PLATFORM_FREEBSD)
111695 PURB purb;
111696 dma_addr_t dma_transfer_addr; /* (in) dma addr for transfer_buffer */
111697 u32 alloc_sz;
111698 @@ -383,16 +401,10 @@ struct recv_buf{
111699 _pkt *pskb;
111700 u8 reuse;
111701 #endif
111702 -
111703 - uint len;
111704 - u8 *phead;
111705 - u8 *pdata;
111706 - u8 *ptail;
111707 - u8 *pend;
111708 -
111709 - u8 *pbuf;
111710 - u8 *pallocated_buf;
111711 -
111712 +#ifdef PLATFORM_FREEBSD //skb solution
111713 + struct sk_buff *pskb;
111714 + u8 reuse;
111715 +#endif //PLATFORM_FREEBSD //skb solution
111716 };
111717
111718
111719 @@ -411,14 +423,19 @@ struct recv_buf{
111720 len = (unsigned int )(tail - data);
111721
111722 */
111723 -struct recv_frame_hdr{
111724 -
111725 +struct recv_frame_hdr
111726 +{
111727 _list list;
111728 +#ifndef CONFIG_BSD_RX_USE_MBUF
111729 + struct sk_buff *pkt;
111730 + struct sk_buff *pkt_newalloc;
111731 +#else // CONFIG_BSD_RX_USE_MBUF
111732 _pkt *pkt;
111733 _pkt *pkt_newalloc;
111734 +#endif // CONFIG_BSD_RX_USE_MBUF
111735
111736 _adapter *adapter;
111737 -
111738 +
111739 u8 fragcnt;
111740
111741 int frame_tag;
111742 @@ -456,13 +473,19 @@ union recv_frame{
111743 };
111744
111745
111746 +extern union recv_frame *_rtw_alloc_recvframe (_queue *pfree_recv_queue); //get a free recv_frame from pfree_recv_queue
111747 extern union recv_frame *rtw_alloc_recvframe (_queue *pfree_recv_queue); //get a free recv_frame from pfree_recv_queue
111748 extern void rtw_init_recvframe(union recv_frame *precvframe ,struct recv_priv *precvpriv);
111749 -extern int rtw_free_recvframe(union recv_frame *precvframe, _queue *pfree_recv_queue);
111750 -extern union recv_frame *rtw_dequeue_recvframe (_queue *queue);
111751 -extern int rtw_enqueue_recvframe(union recv_frame *precvframe, _queue *queue);
111752 -extern void rtw_free_recvframe_queue(_queue *pframequeue, _queue *pfree_recv_queue);
111753 +extern int rtw_free_recvframe(union recv_frame *precvframe, _queue *pfree_recv_queue);
111754 +
111755 +#define rtw_dequeue_recvframe(queue) rtw_alloc_recvframe(queue)
111756 +extern int _rtw_enqueue_recvframe(union recv_frame *precvframe, _queue *queue);
111757 +extern int rtw_enqueue_recvframe(union recv_frame *precvframe, _queue *queue);
111758
111759 +extern void rtw_free_recvframe_queue(_queue *pframequeue, _queue *pfree_recv_queue);
111760 +u32 rtw_free_uc_swdec_pending_queue(_adapter *adapter);
111761 +
111762 +sint rtw_enqueue_recvbuf_to_head(struct recv_buf *precvbuf, _queue *queue);
111763 sint rtw_enqueue_recvbuf(struct recv_buf *precvbuf, _queue *queue);
111764 struct recv_buf *rtw_dequeue_recvbuf (_queue *queue);
111765
111766 @@ -479,32 +502,32 @@ __inline static u8 *get_rxmem(union recv
111767
111768 __inline static u8 *get_rx_status(union recv_frame *precvframe)
111769 {
111770 -
111771 +
111772 return get_rxmem(precvframe);
111773 -
111774 +
111775 }
111776
111777 __inline static u8 *get_recvframe_data(union recv_frame *precvframe)
111778 {
111779 -
111780 - //alwasy return rx_data
111781 +
111782 + //alwasy return rx_data
111783 if(precvframe==NULL)
111784 return NULL;
111785
111786 return precvframe->u.hdr.rx_data;
111787 -
111788 +
111789 }
111790
111791 __inline static u8 *recvframe_push(union recv_frame *precvframe, sint sz)
111792 -{
111793 - // append data before rx_data
111794 +{
111795 + // append data before rx_data
111796
111797 /* add data to the start of recv_frame
111798 *
111799 * This function extends the used data area of the recv_frame at the buffer
111800 * start. rx_data must be still larger than rx_head, after pushing.
111801 */
111802 -
111803 +
111804 if(precvframe==NULL)
111805 return NULL;
111806
111807 @@ -519,7 +542,7 @@ __inline static u8 *recvframe_push(union
111808 precvframe->u.hdr.len +=sz;
111809
111810 return precvframe->u.hdr.rx_data;
111811 -
111812 +
111813 }
111814
111815
111816 @@ -533,7 +556,7 @@ __inline static u8 *recvframe_pull(union
111817 if(precvframe==NULL)
111818 return NULL;
111819
111820 -
111821 +
111822 precvframe->u.hdr.rx_data += sz;
111823
111824 if(precvframe->u.hdr.rx_data > precvframe->u.hdr.rx_tail)
111825 @@ -543,9 +566,9 @@ __inline static u8 *recvframe_pull(union
111826 }
111827
111828 precvframe->u.hdr.len -=sz;
111829 -
111830 +
111831 return precvframe->u.hdr.rx_data;
111832 -
111833 +
111834 }
111835
111836 __inline static u8 *recvframe_put(union recv_frame *precvframe, sint sz)
111837 @@ -553,16 +576,16 @@ __inline static u8 *recvframe_put(union
111838 // rx_tai += sz; move rx_tail sz bytes hereafter
111839
111840 //used for append sz bytes from ptr to rx_tail, update rx_tail and return the updated rx_tail to the caller
111841 - //after putting, rx_tail must be still larger than rx_end.
111842 + //after putting, rx_tail must be still larger than rx_end.
111843 unsigned char * prev_rx_tail;
111844
111845 if(precvframe==NULL)
111846 return NULL;
111847
111848 prev_rx_tail = precvframe->u.hdr.rx_tail;
111849 -
111850 +
111851 precvframe->u.hdr.rx_tail += sz;
111852 -
111853 +
111854 if(precvframe->u.hdr.rx_tail > precvframe->u.hdr.rx_end)
111855 {
111856 precvframe->u.hdr.rx_tail -= sz;
111857 @@ -580,7 +603,7 @@ __inline static u8 *recvframe_put(union
111858 __inline static u8 *recvframe_pull_tail(union recv_frame *precvframe, sint sz)
111859 {
111860 // rmv data from rx_tail (by yitsen)
111861 -
111862 +
111863 //used for extract sz bytes from rx_end, update rx_end and return the updated rx_end to the caller
111864 //after pulling, rx_end must be still larger than rx_data.
111865
111866 @@ -606,10 +629,10 @@ __inline static u8 *recvframe_pull_tail(
111867 __inline static _buffer * get_rxbuf_desc(union recv_frame *precvframe)
111868 {
111869 _buffer * buf_desc;
111870 -
111871 +
111872 if(precvframe==NULL)
111873 return NULL;
111874 -#ifdef PLATFORM_WINDOWS
111875 +#ifdef PLATFORM_WINDOWS
111876 NdisQueryPacket(precvframe->u.hdr.pkt, NULL, NULL, &buf_desc, NULL);
111877 #endif
111878
111879 @@ -619,18 +642,17 @@ __inline static _buffer * get_rxbuf_desc
111880
111881 __inline static union recv_frame *rxmem_to_recvframe(u8 *rxmem)
111882 {
111883 - //due to the design of 2048 bytes alignment of recv_frame, we can reference the union recv_frame
111884 + //due to the design of 2048 bytes alignment of recv_frame, we can reference the union recv_frame
111885 //from any given member of recv_frame.
111886 // rxmem indicates the any member/address in recv_frame
111887 -
111888 - //return (union recv_frame*)(((uint)rxmem>>RXFRAME_ALIGN) <<RXFRAME_ALIGN) ;
111889 - //return (union recv_frame*)(((SIZE_PTR)rxmem >> RXFRAME_ALIGN) << RXFRAME_ALIGN);
111890 - return (union recv_frame*)(((ulong)rxmem>>RXFRAME_ALIGN) <<RXFRAME_ALIGN) ;
111891 +
111892 + return (union recv_frame*)(((SIZE_PTR)rxmem >> RXFRAME_ALIGN) << RXFRAME_ALIGN);
111893 +
111894 }
111895
111896 __inline static union recv_frame *pkt_to_recvframe(_pkt *pkt)
111897 {
111898 -
111899 +
111900 u8 * buf_star;
111901 union recv_frame * precv_frame;
111902 #ifdef PLATFORM_WINDOWS
111903 @@ -648,7 +670,7 @@ __inline static union recv_frame *pkt_to
111904 __inline static u8 *pkt_to_recvmem(_pkt *pkt)
111905 {
111906 // return the rx_head
111907 -
111908 +
111909 union recv_frame * precv_frame = pkt_to_recvframe(pkt);
111910
111911 return precv_frame->u.hdr.rx_head;
111912 @@ -662,7 +684,7 @@ __inline static u8 *pkt_to_recvdata(_pkt
111913 union recv_frame * precv_frame =pkt_to_recvframe(pkt);
111914
111915 return precv_frame->u.hdr.rx_data;
111916 -
111917 +
111918 }
111919
111920
111921 @@ -686,13 +708,14 @@ __inline static u8 query_rx_pwr_percenta
111922 return (100+antpower);
111923 }
111924 }
111925 +
111926 __inline static s32 translate_percentage_to_dbm(u32 SignalStrengthIndex)
111927 {
111928 s32 SignalPower; // in dBm.
111929
111930 // Translate to dBm (x=0.5y-95).
111931 - SignalPower = (s32)((SignalStrengthIndex + 1) >> 1);
111932 - SignalPower -= 95;
111933 + SignalPower = (s32)((SignalStrengthIndex + 1) >> 1);
111934 + SignalPower -= 95;
111935
111936 return SignalPower;
111937 }
111938 --- a/drivers/net/wireless/rtl8192cu/include/rtw_rf.h
111939 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_rf.h
111940 @@ -16,7 +16,7 @@
111941 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
111942 *
111943 *
111944 -******************************************************************************/
111945 + ******************************************************************************/
111946 #ifndef __RTW_RF_H_
111947 #define __RTW_RF_H_
111948
111949 --- a/drivers/net/wireless/rtl8192cu/include/rtw_security.h
111950 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_security.h
111951 @@ -16,8 +16,7 @@
111952 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
111953 *
111954 *
111955 -
111956 -******************************************************************************/
111957 + ******************************************************************************/
111958 #ifndef __RTW_SECURITY_H_
111959 #define __RTW_SECURITY_H_
111960
111961 @@ -33,6 +32,10 @@
111962 #define _TKIP_WTMIC_ 0x3
111963 #define _AES_ 0x4
111964 #define _WEP104_ 0x5
111965 +#ifdef CONFIG_IEEE80211W
111966 +#define _BIP_ 0x8
111967 +#endif //CONFIG_IEEE80211W
111968 +#define is_wep_enc(alg) (((alg) == _WEP40_) || ((alg) == _WEP104_))
111969
111970 #define _WPA_IE_ID_ 0xdd
111971 #define _WPA2_IE_ID_ 0x30
111972 @@ -109,6 +112,7 @@ struct security_priv
111973 u32 dot11PrivacyKeyIndex; // this is only valid for legendary wep, 0~3 for key id. (tx key index)
111974 union Keytype dot11DefKey[4]; // this is only valid for def. key
111975 u32 dot11DefKeylen[4];
111976 + u8 key_mask; /* use to restore wep key after hal_init */
111977
111978 u32 dot118021XGrpPrivacy; // This specify the privacy algthm. used for Grp key
111979 u32 dot118021XGrpKeyid; // key id used for Grp Key ( tx key index)
111980 @@ -117,7 +121,12 @@ struct security_priv
111981 union Keytype dot118021XGrprxmickey[4];
111982 union pn48 dot11Grptxpn; // PN48 used for Grp Key xmit.
111983 union pn48 dot11Grprxpn; // PN48 used for Grp Key recv.
111984 -
111985 +#ifdef CONFIG_IEEE80211W
111986 + u32 dot11wBIPKeyid; // key id used for BIP Key ( tx key index)
111987 + union Keytype dot11wBIPKey[6]; // BIP Key, for index4 and index5
111988 + union pn48 dot11wBIPtxpn; // PN48 used for Grp Key xmit.
111989 + union pn48 dot11wBIPrxpn; // PN48 used for Grp Key recv.
111990 +#endif //CONFIG_IEEE80211W
111991 #ifdef CONFIG_AP_MODE
111992 //extend security capabilities for AP_MODE
111993 unsigned int dot8021xalg;//0:disable, 1:psk, 2:802.1x
111994 @@ -128,12 +137,14 @@ struct security_priv
111995 unsigned int wpa2_pairwise_cipher;
111996 #endif
111997
111998 - u8 wps_phase;//for wps
111999 u8 wps_ie[MAX_WPS_IE_LEN];//added in assoc req
112000 int wps_ie_len;
112001
112002
112003 u8 binstallGrpkey;
112004 +#ifdef CONFIG_IEEE80211W
112005 + u8 binstallBIPkey;
112006 +#endif //CONFIG_IEEE80211W
112007 u8 busetkipkey;
112008 //_timer tkip_timer;
112009 u8 bcheck_grpkey;
112010 @@ -181,6 +192,7 @@ struct security_priv
112011 //u32 PMKIDCount; // Added by Annie, 2006-10-13.
112012 //u8 szCapability[256]; // For WPA2-PSK using zero-config, by Annie, 2005-09-20.
112013
112014 + u8 bWepDefaultKeyIdxSet;
112015 };
112016
112017 struct sha256_state {
112018 @@ -377,7 +389,9 @@ static const unsigned long K[64] = {
112019 #ifndef MIN
112020 #define MIN(x, y) (((x) < (y)) ? (x) : (y))
112021 #endif
112022 -
112023 +#ifdef CONFIG_IEEE80211W
112024 +int omac1_aes_128(u8 *key, u8 *data, size_t data_len, u8 *mac);
112025 +#endif //CONFIG_IEEE80211W
112026 void rtw_secmicsetkey(struct mic_data *pmicdata, u8 * key );
112027 void rtw_secmicappendbyte(struct mic_data *pmicdata, u8 b );
112028 void rtw_secmicappend(struct mic_data *pmicdata, u8 * src, u32 nBytes );
112029 @@ -398,7 +412,9 @@ void rtw_wep_encrypt(_adapter *padapter,
112030 u32 rtw_aes_decrypt(_adapter *padapter, u8 *precvframe);
112031 u32 rtw_tkip_decrypt(_adapter *padapter, u8 *precvframe);
112032 void rtw_wep_decrypt(_adapter *padapter, u8 *precvframe);
112033 -
112034 +#ifdef CONFIG_IEEE80211W
112035 +u32 rtw_BIP_verify(_adapter *padapter, u8 *precvframe);
112036 +#endif //CONFIG_IEEE80211W
112037 #ifdef CONFIG_TDLS
112038 void wpa_tdls_generate_tpk(_adapter *padapter, struct sta_info *psta);
112039 int wpa_tdls_ftie_mic(u8 *kck, u8 trans_seq,
112040 @@ -406,7 +422,7 @@ int wpa_tdls_ftie_mic(u8 *kck, u8 trans_
112041 u8 *mic);
112042 int tdls_verify_mic(u8 *kck, u8 trans_seq,
112043 u8 *lnkid, u8 *rsnie, u8 *timeoutie, u8 *ftie);
112044 -#endif
112045 +#endif //CONFIG_TDLS
112046
112047 #ifdef PLATFORM_WINDOWS
112048 void rtw_use_tkipkey_handler (
112049 @@ -419,5 +435,13 @@ void rtw_use_tkipkey_handler (
112050 #ifdef PLATFORM_LINUX
112051 void rtw_use_tkipkey_handler(void* FunctionContext);
112052 #endif
112053 +
112054 +#ifdef PLATFORM_FREEBSD
112055 +void rtw_use_tkipkey_handler(void* FunctionContext);
112056 +#endif //PLATFORM_FREEBSD
112057 +
112058 +void rtw_sec_restore_wep_key(_adapter *adapter);
112059 +u8 rtw_handle_tkip_countermeasure(_adapter* adapter, const char *caller);
112060 +
112061 #endif //__RTL871X_SECURITY_H_
112062
112063 --- /dev/null
112064 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_sreset.h
112065 @@ -0,0 +1,74 @@
112066 +/******************************************************************************
112067 + *
112068 + * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
112069 + *
112070 + * This program is free software; you can redistribute it and/or modify it
112071 + * under the terms of version 2 of the GNU General Public License as
112072 + * published by the Free Software Foundation.
112073 + *
112074 + * This program is distributed in the hope that it will be useful, but WITHOUT
112075 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
112076 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
112077 + * more details.
112078 + *
112079 + * You should have received a copy of the GNU General Public License along with
112080 + * this program; if not, write to the Free Software Foundation, Inc.,
112081 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
112082 + *
112083 + *
112084 + ******************************************************************************/
112085 +#ifndef _RTW_SRESET_C_
112086 +#define _RTW_SRESET_C_
112087 +
112088 +#include <drv_conf.h>
112089 +#include <osdep_service.h>
112090 +#include <drv_types.h>
112091 +
112092 +enum {
112093 + SRESET_TGP_NULL = 0,
112094 + SRESET_TGP_XMIT_STATUS = 1,
112095 + SRESET_TGP_LINK_STATUS = 2,
112096 +};
112097 +
112098 +struct sreset_priv {
112099 + _mutex silentreset_mutex;
112100 + u8 silent_reset_inprogress;
112101 + u8 Wifi_Error_Status;
112102 + unsigned long last_tx_time;
112103 + unsigned long last_tx_complete_time;
112104 +
112105 + s32 dbg_trigger_point;
112106 +};
112107 +
112108 +#ifdef CONFIG_RTL8192C
112109 +#include <rtl8192c_hal.h>
112110 +#endif
112111 +#ifdef CONFIG_RTL8192D
112112 +#include <rtl8192d_hal.h>
112113 +#endif
112114 +#ifdef CONFIG_RTL8723A
112115 +#include <rtl8723a_hal.h>
112116 +#endif
112117 +#ifdef CONFIG_RTL8188E
112118 +#include <rtl8188e_hal.h>
112119 +#endif
112120 +
112121 +#define WIFI_STATUS_SUCCESS 0
112122 +#define USB_VEN_REQ_CMD_FAIL BIT0
112123 +#define USB_READ_PORT_FAIL BIT1
112124 +#define USB_WRITE_PORT_FAIL BIT2
112125 +#define WIFI_MAC_TXDMA_ERROR BIT3
112126 +#define WIFI_TX_HANG BIT4
112127 +#define WIFI_RX_HANG BIT5
112128 +#define WIFI_IF_NOT_EXIST BIT6
112129 +
112130 +void sreset_init_value(_adapter *padapter);
112131 +void sreset_reset_value(_adapter *padapter);
112132 +u8 sreset_get_wifi_status(_adapter *padapter);
112133 +void sreset_set_wifi_error_status(_adapter *padapter, u32 status);
112134 +void sreset_set_trigger_point(_adapter *padapter, s32 tgp);
112135 +bool sreset_inprogress(_adapter *padapter);
112136 +void sreset_reset(_adapter *padapter);
112137 +
112138 +#endif
112139 +
112140 --- /dev/null
112141 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_tdls.h
112142 @@ -0,0 +1,143 @@
112143 +/******************************************************************************
112144 + *
112145 + * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
112146 + *
112147 + * This program is free software; you can redistribute it and/or modify it
112148 + * under the terms of version 2 of the GNU General Public License as
112149 + * published by the Free Software Foundation.
112150 + *
112151 + * This program is distributed in the hope that it will be useful, but WITHOUT
112152 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
112153 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
112154 + * more details.
112155 + *
112156 + * You should have received a copy of the GNU General Public License along with
112157 + * this program; if not, write to the Free Software Foundation, Inc.,
112158 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
112159 + *
112160 + *
112161 + ******************************************************************************/
112162 +#ifndef __RTW_TDLS_H_
112163 +#define __RTW_TDLS_H_
112164 +
112165 +#include <drv_types.h>
112166 +
112167 +#ifdef CONFIG_TDLS
112168 +/* TDLS STA state */
112169 +#define TDLS_STATE_NONE 0x00000000 //default state
112170 +#define TDLS_INITIATOR_STATE 0x10000000
112171 +#define TDLS_RESPONDER_STATE 0x20000000
112172 +#define TDLS_LINKED_STATE 0x40000000
112173 +#define TDLS_CH_SWITCH_ON_STATE 0x01000000
112174 +#define TDLS_PEER_AT_OFF_STATE 0x02000000 //could send pkt on target ch
112175 +#define TDLS_AT_OFF_CH_STATE 0x04000000
112176 +#define TDLS_CH_SW_INITIATOR_STATE 0x08000000 //avoiding duplicated or unconditional ch. switch rsp.
112177 +#define TDLS_APSD_CHSW_STATE 0x00100000 //in APSD and want to setup channel switch
112178 +#define TDLS_PEER_SLEEP_STATE 0x00200000 //peer sta is sleeping
112179 +#define TDLS_SW_OFF_STATE 0x00400000 //terminate channel swithcing
112180 +#define TDLS_ALIVE_STATE 0x00010000 //Check if peer sta is alived.
112181 +
112182 +#define TPK_RESEND_COUNT 301
112183 +#define CH_SWITCH_TIME 10
112184 +#define CH_SWITCH_TIMEOUT 30
112185 +#define TDLS_STAY_TIME 500
112186 +#define TDLS_SIGNAL_THRESH 0x20
112187 +#define TDLS_WATCHDOG_PERIOD 10 //Periodically sending tdls discovery request in TDLS_WATCHDOG_PERIOD * 2 sec
112188 +#define TDLS_ALIVE_TIMER_PH1 5000
112189 +#define TDLS_ALIVE_TIMER_PH2 2000
112190 +#define TDLS_STAY_TIME 500
112191 +#define TDLS_HANDSHAKE_TIME 2000
112192 +#define TDLS_ALIVE_COUNT 3
112193 +#define TDLS_INI_MACID_ENTRY 6
112194 +
112195 +/* TDLS */
112196 +#define TDLS_MIC_LEN 16
112197 +#define WPA_NONCE_LEN 32
112198 +#define TDLS_TIMEOUT_LEN 4
112199 +
112200 +struct wpa_tdls_ftie {
112201 + u8 ie_type; /* FTIE */
112202 + u8 ie_len;
112203 + u8 mic_ctrl[2];
112204 + u8 mic[TDLS_MIC_LEN];
112205 + u8 Anonce[WPA_NONCE_LEN]; /* Responder Nonce in TDLS */
112206 + u8 Snonce[WPA_NONCE_LEN]; /* Initiator Nonce in TDLS */
112207 + /* followed by optional elements */
112208 +} ;
112209 +
112210 +struct wpa_tdls_lnkid {
112211 + u8 ie_type; /* Link Identifier IE */
112212 + u8 ie_len;
112213 + u8 bssid[ETH_ALEN];
112214 + u8 init_sta[ETH_ALEN];
112215 + u8 resp_sta[ETH_ALEN];
112216 +} ;
112217 +
112218 +static u8 TDLS_RSNIE[]={ 0x01, 0x00, //version shall be set to 1
112219 + 0x00, 0x0f, 0xac, 0x07, //group sipher suite
112220 + 0x01, 0x00, //pairwise cipher suite count
112221 + 0x00, 0x0f, 0xac, 0x04, //pairwise cipher suite list; CCMP only
112222 + 0x01, 0x00, //AKM suite count
112223 + 0x00, 0x0f, 0xac, 0x07, //TPK Handshake
112224 + 0x00, 0x02,
112225 + //PMKID shall not be present
112226 + };
112227 +
112228 +static u8 TDLS_WMMIE[]={0x00, 0x50, 0xf2, 0x02, 0x00, 0x01, 0x00}; //Qos info all set zero
112229 +
112230 +static u8 TDLS_EXT_CAPIE[] = {0x00, 0x00, 0x00, 0x50, 0x20}; //bit(28), bit(30), bit(37)
112231 +
112232 +// SRC: Supported Regulatory Classes
112233 +static u8 TDLS_SRC[] = { 0x01, 0x01, 0x02, 0x03, 0x04, 0x0c, 0x16, 0x17, 0x18, 0x19, 0x1b, 0x1c, 0x1d, 0x1e, 0x20, 0x21 };
112234 +
112235 +void rtw_reset_tdls_info(_adapter* padapter);
112236 +int rtw_init_tdls_info(_adapter* padapter);
112237 +void rtw_free_tdls_info(struct tdls_info *ptdlsinfo);
112238 +void issue_nulldata_to_TDLS_peer_STA(_adapter *padapter, struct sta_info *ptdls_sta, unsigned int power_mode);
112239 +void init_TPK_timer(_adapter *padapter, struct sta_info *psta);
112240 +void init_ch_switch_timer(_adapter *padapter, struct sta_info *psta);
112241 +void init_base_ch_timer(_adapter *padapter, struct sta_info *psta);
112242 +void init_off_ch_timer(_adapter *padapter, struct sta_info *psta);
112243 +void init_tdls_alive_timer(_adapter *padapter, struct sta_info *psta);
112244 +void init_handshake_timer(_adapter *padapter, struct sta_info *psta);
112245 +void free_tdls_sta(_adapter *padapter, struct sta_info *ptdls_sta);
112246 +#ifdef CONFIG_WFD
112247 +void issue_tunneled_probe_req(_adapter *padapter);
112248 +void issue_tunneled_probe_rsp(_adapter *padapter, union recv_frame *precv_frame);
112249 +#endif //CONFIG_WFD
112250 +void issue_tdls_dis_req(_adapter *padapter, u8 *mac_addr);
112251 +void issue_tdls_setup_req(_adapter *padapter, u8 *mac_addr);
112252 +void issue_tdls_setup_rsp(_adapter *padapter, union recv_frame *precv_frame);
112253 +void issue_tdls_setup_cfm(_adapter *padapter, union recv_frame *precv_frame);
112254 +void issue_tdls_dis_rsp(_adapter * padapter, union recv_frame * precv_frame, u8 dialog);
112255 +void issue_tdls_teardown(_adapter *padapter, u8 *mac_addr);
112256 +void issue_tdls_peer_traffic_indication(_adapter *padapter, struct sta_info *psta);
112257 +void issue_tdls_ch_switch_req(_adapter *padapter, u8 *mac_addr);
112258 +void issue_tdls_ch_switch_rsp(_adapter *padapter, u8 *mac_addr);
112259 +sint On_TDLS_Dis_Rsp(_adapter *adapter, union recv_frame *precv_frame);
112260 +sint On_TDLS_Setup_Req(_adapter *adapter, union recv_frame *precv_frame);
112261 +sint On_TDLS_Setup_Rsp(_adapter *adapter, union recv_frame *precv_frame);
112262 +sint On_TDLS_Setup_Cfm(_adapter *adapter, union recv_frame *precv_frame);
112263 +sint On_TDLS_Dis_Req(_adapter *adapter, union recv_frame *precv_frame);
112264 +sint On_TDLS_Teardown(_adapter *adapter, union recv_frame *precv_frame);
112265 +sint On_TDLS_Peer_Traffic_Rsp(_adapter *adapter, union recv_frame *precv_frame);
112266 +sint On_TDLS_Ch_Switch_Req(_adapter *adapter, union recv_frame *precv_frame);
112267 +sint On_TDLS_Ch_Switch_Rsp(_adapter *adapter, union recv_frame *precv_frame);
112268 +void rtw_build_tdls_setup_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
112269 +void rtw_build_tdls_setup_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
112270 +void rtw_build_tdls_setup_cfm_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
112271 +void rtw_build_tdls_teardown_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
112272 +void rtw_build_tdls_dis_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
112273 +void rtw_build_tdls_dis_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, u8 dialog);
112274 +void rtw_build_tdls_peer_traffic_indication_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
112275 +void rtw_build_tdls_ch_switch_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
112276 +void rtw_build_tdls_ch_switch_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
112277 +void rtw_build_tunneled_probe_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
112278 +void rtw_build_tunneled_probe_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
112279 +
112280 +int update_sgi_tdls(_adapter *padapter, struct sta_info *psta);
112281 +u32 update_mask_tdls(_adapter *padapter, struct sta_info *psta);
112282 +#endif //CONFIG_TDLS
112283 +
112284 +#endif
112285 +
112286 --- a/drivers/net/wireless/rtl8192cu/include/rtw_version.h
112287 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_version.h
112288 @@ -1 +1 @@
112289 -#define DRIVERVERSION "v3.4.4_4749.20121105"
112290 +#define DRIVERVERSION "v4.0.2_9000.20130911"
112291 --- a/drivers/net/wireless/rtl8192cu/include/rtw_xmit.h
112292 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_xmit.h
112293 @@ -1,7 +1,7 @@
112294 /******************************************************************************
112295 *
112296 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
112297 - *
112298 + *
112299 * This program is free software; you can redistribute it and/or modify it
112300 * under the terms of version 2 of the GNU General Public License as
112301 * published by the Free Software Foundation.
112302 @@ -16,25 +16,34 @@
112303 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
112304 *
112305 *
112306 -******************************************************************************/
112307 + ******************************************************************************/
112308 #ifndef _RTW_XMIT_H_
112309 #define _RTW_XMIT_H_
112310
112311 #include <drv_conf.h>
112312 #include <osdep_service.h>
112313 #include <drv_types.h>
112314 -#include <xmit_osdep.h>
112315 +#ifdef PLATFORM_FREEBSD
112316 +#include <if_ether.h>
112317 +#endif //PLATFORM_FREEBSD
112318
112319 #ifdef CONFIG_SDIO_HCI
112320 -#define MAX_XMITBUF_SZ (30720)// (2048)
112321 +//#define MAX_XMITBUF_SZ (30720)// (2048)
112322 +#define MAX_XMITBUF_SZ (12288)
112323 #define NR_XMITBUFF (16)
112324
112325 #elif defined (CONFIG_USB_HCI)
112326 #ifdef CONFIG_USB_TX_AGGREGATION
112327 -#define MAX_XMITBUF_SZ 20480 // 20k
112328 + #if defined(CONFIG_PLATFORM_ARM_SUNxI) || defined(CONFIG_PLATFORM_ARM_SUN6I)
112329 + #define MAX_XMITBUF_SZ (12288) //12k 1536*8
112330 + #elif defined (CONFIG_PLATFORM_MSTAR)
112331 + #define MAX_XMITBUF_SZ 7680 // 7.5k
112332 + #else
112333 + #define MAX_XMITBUF_SZ (20480) // 20k
112334 + #endif
112335 #else
112336 #define MAX_XMITBUF_SZ (2048)
112337 -#endif
112338 +#endif //CONFIG_USB_TX_AGGREGATION
112339 #ifdef CONFIG_SINGLE_XMIT_BUF
112340 #define NR_XMITBUFF (1)
112341 #else
112342 @@ -57,7 +66,7 @@
112343 #endif
112344
112345 // xmit extension buff defination
112346 -#define MAX_XMIT_EXTBUF_SZ (2048)
112347 +#define MAX_XMIT_EXTBUF_SZ (1536)
112348 #ifdef CONFIG_SINGLE_XMIT_BUF
112349 #define NR_XMIT_EXTBUFF (1)
112350 #else
112351 @@ -71,9 +80,20 @@
112352 #define XMIT_BE_QUEUE (2)
112353 #define XMIT_BK_QUEUE (3)
112354
112355 +#define VO_QUEUE_INX 0
112356 +#define VI_QUEUE_INX 1
112357 +#define BE_QUEUE_INX 2
112358 +#define BK_QUEUE_INX 3
112359 +#define BCN_QUEUE_INX 4
112360 +#define MGT_QUEUE_INX 5
112361 +#define HIGH_QUEUE_INX 6
112362 +#define TXCMD_QUEUE_INX 7
112363 +
112364 +#define HW_QUEUE_ENTRY 8
112365 +
112366 #ifdef CONFIG_PCI_HCI
112367 -#define TXDESC_NUM 64
112368 -//#define TXDESC_NUM 128
112369 +//#define TXDESC_NUM 64
112370 +#define TXDESC_NUM 128
112371 #define TXDESC_NUM_BE_QUEUE 128
112372 #endif
112373
112374 @@ -117,9 +137,13 @@ do{\
112375 #define HWXMIT_ENTRY 4
112376
112377 #define TXDESC_SIZE 32
112378 -#define PACKET_OFFSET_SZ (8)
112379 +
112380 +#ifdef CONFIG_SDIO_HCI
112381 +#define TXDESC_OFFSET TXDESC_SIZE
112382 +#endif
112383
112384 #ifdef CONFIG_USB_HCI
112385 +#define PACKET_OFFSET_SZ (8)
112386 #define TXDESC_OFFSET (TXDESC_SIZE + PACKET_OFFSET_SZ)
112387 #endif
112388
112389 @@ -212,7 +236,7 @@ struct tx_desc{
112390
112391 union txdesc {
112392 struct tx_desc txdesc;
112393 - unsigned int value[TXDESC_SIZE>>2];
112394 + unsigned int value[TXDESC_SIZE>>2];
112395 };
112396
112397 #ifdef CONFIG_PCI_HCI
112398 @@ -230,36 +254,36 @@ struct rtw_tx_ring {
112399
112400 struct hw_xmit {
112401 //_lock xmit_lock;
112402 - //_list pending;
112403 + //_list pending;
112404 _queue *sta_queue;
112405 //struct hw_txqueue *phwtxqueue;
112406 - //sint txcmdcnt;
112407 + //sint txcmdcnt;
112408 int accnt;
112409 };
112410
112411 #if 0
112412 struct pkt_attrib
112413 -{
112414 +{
112415 u8 type;
112416 u8 subtype;
112417 u8 bswenc;
112418 u8 dhcp_pkt;
112419 - u16 ether_type;
112420 + u16 ether_type;
112421 int pktlen; //the original 802.3 pkt raw_data len (not include ether_hdr data)
112422 int pkt_hdrlen; //the original 802.3 pkt header len
112423 - int hdrlen; //the WLAN Header Len
112424 + int hdrlen; //the WLAN Header Len
112425 int nr_frags;
112426 int last_txcmdsz;
112427 int encrypt; //when 0 indicate no encrypt. when non-zero, indicate the encrypt algorith
112428 u8 iv[8];
112429 int iv_len;
112430 - u8 icv[8];
112431 + u8 icv[8];
112432 int icv_len;
112433 int priority;
112434 int ack_policy;
112435 int mac_id;
112436 - int vcs_mode; //virtual carrier sense method
112437 -
112438 + int vcs_mode; //virtual carrier sense method
112439 +
112440 u8 dst[ETH_ALEN];
112441 u8 src[ETH_ALEN];
112442 u8 ta[ETH_ALEN];
112443 @@ -268,7 +292,7 @@ struct pkt_attrib
112444 u8 key_idx;
112445
112446 u8 qos_en;
112447 - u8 ht_en;
112448 + u8 ht_en;
112449 u8 raid;//rate adpative id
112450 u8 bwmode;
112451 u8 ch_offset;//PRIME_CHNL_OFFSET
112452 @@ -279,19 +303,19 @@ struct pkt_attrib
112453
112454 u8 pctrl;//per packet txdesc control enable
112455 u8 triggered;//for ap mode handling Power Saving sta
112456 -
112457 +
112458 u32 qsel;
112459 u16 seqnum;
112460
112461 struct sta_info * psta;
112462 #ifdef CONFIG_TCP_CSUM_OFFLOAD_TX
112463 u8 hw_tcp_csum;
112464 -#endif
112465 +#endif
112466 };
112467 #else
112468 //reduce size
112469 struct pkt_attrib
112470 -{
112471 +{
112472 u8 type;
112473 u8 subtype;
112474 u8 bswenc;
112475 @@ -318,7 +342,7 @@ struct pkt_attrib
112476 u8 ra[ETH_ALEN];
112477 u8 key_idx;
112478 u8 qos_en;
112479 - u8 ht_en;
112480 + u8 ht_en;
112481 u8 raid;//rate adpative id
112482 u8 bwmode;
112483 u8 ch_offset;//PRIME_CHNL_OFFSET
112484 @@ -335,10 +359,28 @@ struct pkt_attrib
112485 struct sta_info * psta;
112486 #ifdef CONFIG_TCP_CSUM_OFFLOAD_TX
112487 u8 hw_tcp_csum;
112488 -#endif
112489 +#endif
112490 + union Keytype dot11tkiptxmickey;
112491 + //union Keytype dot11tkiprxmickey;
112492 + union Keytype dot118021x_UncstKey;
112493 };
112494 #endif
112495
112496 +#ifdef PLATFORM_FREEBSD
112497 +#define ETH_ALEN 6 /* Octets in one ethernet addr */
112498 +#define ETH_HLEN 14 /* Total octets in header. */
112499 +#define ETH_P_IP 0x0800 /* Internet Protocol packet */
112500 +
112501 +/*struct rtw_ieee80211_hdr {
112502 + uint16_t frame_control;
112503 + uint16_t duration_id;
112504 + u8 addr1[6];
112505 + u8 addr2[6];
112506 + u8 addr3[6];
112507 + uint16_t seq_ctrl;
112508 + u8 addr4[6];
112509 +} ;*/
112510 +#endif //PLATFORM_FREEBSD
112511
112512 #define WLANHDR_OFFSET 64
112513
112514 @@ -355,6 +397,35 @@ struct pkt_attrib
112515
112516 #define TXAGG_FRAMETAG 0x08
112517
112518 +struct submit_ctx{
112519 + u32 submit_time; /* */
112520 + u32 timeout_ms; /* <0: not synchronous, 0: wait forever, >0: up to ms waiting */
112521 + int status; /* status for operation */
112522 +#ifdef PLATFORM_LINUX
112523 + struct completion done;
112524 +#endif
112525 +};
112526 +
112527 +enum {
112528 + RTW_SCTX_SUBMITTED = -1,
112529 + RTW_SCTX_DONE_SUCCESS = 0,
112530 + RTW_SCTX_DONE_UNKNOWN,
112531 + RTW_SCTX_DONE_TIMEOUT,
112532 + RTW_SCTX_DONE_BUF_ALLOC,
112533 + RTW_SCTX_DONE_BUF_FREE,
112534 + RTW_SCTX_DONE_WRITE_PORT_ERR,
112535 + RTW_SCTX_DONE_TX_DESC_NA,
112536 + RTW_SCTX_DONE_TX_DENY,
112537 + RTW_SCTX_DONE_CCX_PKT_FAIL,
112538 + RTW_SCTX_DONE_DRV_STOP,
112539 + RTW_SCTX_DONE_DEV_REMOVE,
112540 +};
112541 +
112542 +
112543 +void rtw_sctx_init(struct submit_ctx *sctx, int timeout_ms);
112544 +int rtw_sctx_wait(struct submit_ctx *sctx);
112545 +void rtw_sctx_done_err(struct submit_ctx **sctx, int status);
112546 +void rtw_sctx_done(struct submit_ctx **sctx);
112547
112548 struct xmit_buf
112549 {
112550 @@ -372,11 +443,13 @@ struct xmit_buf
112551 u16 flags;
112552 u32 alloc_sz;
112553
112554 + struct submit_ctx *sctx;
112555 +
112556 #ifdef CONFIG_USB_HCI
112557 -
112558 - u32 sz[8];
112559
112560 -#if defined(PLATFORM_OS_XP)||defined(PLATFORM_LINUX)
112561 + u32 sz[8];
112562 +
112563 +#if defined(PLATFORM_OS_XP)||defined(PLATFORM_LINUX) || defined(PLATFORM_FREEBSD)
112564 PURB pxmit_urb[8];
112565 dma_addr_t dma_transfer_addr; /* (in) dma addr for transfer_buffer */
112566 #endif
112567 @@ -389,20 +462,14 @@ struct xmit_buf
112568 USB_TRANSFER usb_transfer_write_port;
112569 #endif
112570
112571 -#ifdef PLATFORM_LINUX
112572 - u8 isSync; //is this synchronous?
112573 - int status; // keeping urb status for synchronous call to access
112574 - struct completion done; // for wirte_port synchronously
112575 -#endif
112576 -
112577 u8 bpending[8];
112578 -
112579 +
112580 sint last[8];
112581 -
112582 +
112583 #endif
112584
112585 #ifdef CONFIG_SDIO_HCI
112586 - u32 len;
112587 + u32 len;
112588 u8 *phead;
112589 u8 *pdata;
112590 u8 *ptail;
112591 @@ -410,9 +477,9 @@ struct xmit_buf
112592 u32 ff_hwaddr;
112593 #ifdef PLATFORM_OS_XP
112594 PMDL pxmitbuf_mdl;
112595 - PIRP pxmitbuf_irp;
112596 + PIRP pxmitbuf_irp;
112597 PSDBUS_REQUEST_PACKET pxmitbuf_sdrp;
112598 -#endif
112599 +#endif
112600 #endif
112601
112602 #ifdef CONFIG_PCI_HCI
112603 @@ -443,6 +510,7 @@ struct xmit_frame
112604
112605 #ifdef CONFIG_SDIO_HCI
112606 u8 pg_num;
112607 + u8 agg_num;
112608 #endif
112609
112610 #ifdef CONFIG_USB_HCI
112611 @@ -455,12 +523,19 @@ struct xmit_frame
112612 u16 EMPktLen[5];//The max value by HW
112613 #endif
112614 #endif
112615 +#ifdef CONFIG_XMIT_ACK
112616 + u8 ack_report;
112617 +#endif
112618 +
112619 + u8 *alloc_addr; /* the actual address this xmitframe allocated */
112620 + u8 ext_tag; /* 0:data, 1:mgmt */
112621 +
112622 };
112623
112624 struct tx_servq {
112625 _list tx_pending;
112626 - _queue sta_pending;
112627 - int qcnt;
112628 + _queue sta_pending;
112629 + int qcnt;
112630 };
112631
112632
112633 @@ -473,7 +548,7 @@ struct sta_xmit_priv
112634
112635
112636 //struct tx_servq blk_q[MAX_NUMBLKS];
112637 - struct tx_servq be_q; //priority == 0,3
112638 + struct tx_servq be_q; //priority == 0,3
112639 struct tx_servq bk_q; //priority == 1,2
112640 struct tx_servq vi_q; //priority == 4,5
112641 struct tx_servq vo_q; //priority == 6,7
112642 @@ -492,7 +567,7 @@ struct sta_xmit_priv
112643 struct hw_txqueue {
112644 volatile sint head;
112645 volatile sint tail;
112646 - volatile sint free_sz; //in units of 64 bytes
112647 + volatile sint free_sz; //in units of 64 bytes
112648 volatile sint free_cmdsz;
112649 volatile sint txsz[8];
112650 uint ff_hwaddr;
112651 @@ -502,30 +577,34 @@ struct hw_txqueue {
112652
112653
112654 struct xmit_priv {
112655 -
112656 +
112657 _lock lock;
112658
112659 _sema xmit_sema;
112660 _sema terminate_xmitthread_sema;
112661 -
112662 +
112663 //_queue blk_strms[MAX_NUMBLKS];
112664 _queue be_pending;
112665 _queue bk_pending;
112666 _queue vi_pending;
112667 _queue vo_pending;
112668 _queue bm_pending;
112669 -
112670 +
112671 //_queue legacy_dz_queue;
112672 //_queue apsd_queue;
112673 -
112674 +
112675 u8 *pallocated_frame_buf;
112676 u8 *pxmit_frame_buf;
112677 uint free_xmitframe_cnt;
112678 + _queue free_xmit_queue;
112679
112680 //uint mapping_addr;
112681 - //uint pkt_sz;
112682 -
112683 - _queue free_xmit_queue;
112684 + //uint pkt_sz;
112685 +
112686 + u8 *xframe_ext_alloc_addr;
112687 + u8 *xframe_ext;
112688 + uint free_xframe_ext_cnt;
112689 + _queue free_xframe_ext_queue;
112690
112691 //struct hw_txqueue be_txqueue;
112692 //struct hw_txqueue bk_txqueue;
112693 @@ -536,25 +615,25 @@ struct xmit_priv {
112694 uint frag_len;
112695
112696 _adapter *adapter;
112697 -
112698 +
112699 u8 vcs_setting;
112700 u8 vcs;
112701 u8 vcs_type;
112702 //u16 rts_thresh;
112703 -
112704 +
112705 u64 tx_bytes;
112706 u64 tx_pkts;
112707 u64 tx_drop;
112708 u64 last_tx_bytes;
112709 u64 last_tx_pkts;
112710 -
112711 +
112712 struct hw_xmit *hwxmits;
112713 u8 hwxmit_entry;
112714
112715 #ifdef CONFIG_USB_HCI
112716 _sema tx_retevt;//all tx return event;
112717 u8 txirp_cnt;//
112718 -
112719 +
112720 #ifdef PLATFORM_OS_CE
112721 USB_TRANSFER usb_transfer_write_port;
112722 // USB_TRANSFER usb_transfer_write_mem;
112723 @@ -562,33 +641,20 @@ struct xmit_priv {
112724 #ifdef PLATFORM_LINUX
112725 struct tasklet_struct xmit_tasklet;
112726 #endif
112727 +#ifdef PLATFORM_FREEBSD
112728 + struct task xmit_tasklet;
112729 +#endif
112730 //per AC pending irp
112731 int beq_cnt;
112732 int bkq_cnt;
112733 int viq_cnt;
112734 int voq_cnt;
112735 -
112736 -#endif
112737 -
112738 -#ifdef CONFIG_SDIO_HCI
112739 - u8 free_pg[8];
112740 - u8 public_pgsz;
112741 - u8 required_pgsz;
112742 - u8 used_pgsz;
112743 - u8 init_pgsz;
112744 -#ifdef PLATFORM_OS_XP
112745 - PMDL prd_freesz_mdl[2];
112746 - u8 brd_freesz_pending[2];
112747 - PIRP prd_freesz_irp[2];
112748 - PSDBUS_REQUEST_PACKET prd_freesz_sdrp[2];
112749 - u8 rd_freesz_irp_idx;
112750 -#endif
112751
112752 #endif
112753
112754 #ifdef CONFIG_PCI_HCI
112755 // Tx
112756 - struct rtw_tx_ring tx_ring[PCI_MAX_TX_QUEUE_COUNT];
112757 + struct rtw_tx_ring tx_ring[PCI_MAX_TX_QUEUE_COUNT];
112758 int txringcount[PCI_MAX_TX_QUEUE_COUNT];
112759 #ifdef PLATFORM_LINUX
112760 struct tasklet_struct xmit_tasklet;
112761 @@ -596,18 +662,24 @@ struct xmit_priv {
112762 #endif
112763
112764 _queue free_xmitbuf_queue;
112765 - _queue pending_xmitbuf_queue; // unused??
112766 + _queue pending_xmitbuf_queue;
112767 u8 *pallocated_xmitbuf;
112768 u8 *pxmitbuf;
112769 uint free_xmitbuf_cnt;
112770 -
112771 +
112772 _queue free_xmit_extbuf_queue;
112773 u8 *pallocated_xmit_extbuf;
112774 u8 *pxmit_extbuf;
112775 uint free_xmit_extbuf_cnt;
112776
112777 u16 nqos_ssn;
112778 - ATOMIC_T HwRdyXmitData; // driver should wait hw setting done for join event callback, only for Data Frame. 1:done 0:not yet.
112779 +
112780 +#ifdef CONFIG_XMIT_ACK
112781 + int ack_tx;
112782 + _mutex ack_tx_mutex;
112783 + struct submit_ctx ack_tx_ops;
112784 +#endif
112785 + _lock lock_sctx;
112786 };
112787
112788 extern struct xmit_buf *rtw_alloc_xmitbuf_ext(struct xmit_priv *pxmitpriv);
112789 @@ -622,6 +694,8 @@ extern s32 rtw_make_wlanhdr(_adapter *pa
112790 extern s32 rtw_put_snap(u8 *data, u16 h_proto);
112791
112792 extern struct xmit_frame *rtw_alloc_xmitframe(struct xmit_priv *pxmitpriv);
112793 +struct xmit_frame *rtw_alloc_xmitframe_ext(struct xmit_priv *pxmitpriv);
112794 +struct xmit_frame *rtw_alloc_xmitframe_once(struct xmit_priv *pxmitpriv);
112795 extern s32 rtw_free_xmitframe(struct xmit_priv *pxmitpriv, struct xmit_frame *pxmitframe);
112796 extern void rtw_free_xmitframe_queue(struct xmit_priv *pxmitpriv, _queue *pframequeue);
112797 struct tx_servq *rtw_get_sta_pending(_adapter *padapter, struct sta_info *psta, sint up, u8 *ac);
112798 @@ -630,15 +704,15 @@ extern struct xmit_frame* rtw_dequeue_xf
112799
112800 extern s32 rtw_xmit_classifier(_adapter *padapter, struct xmit_frame *pxmitframe);
112801 extern thread_return rtw_xmit_thread(thread_context context);
112802 +extern u32 rtw_calculate_wlan_pkt_size_by_attribue(struct pkt_attrib *pattrib);
112803 +#define rtw_wlan_pkt_size(f) rtw_calculate_wlan_pkt_size_by_attribue(&f->attrib)
112804 extern s32 rtw_xmitframe_coalesce(_adapter *padapter, _pkt *pkt, struct xmit_frame *pxmitframe);
112805 +#ifdef CONFIG_IEEE80211W
112806 +extern s32 rtw_mgmt_xmitframe_coalesce(_adapter *padapter, _pkt *pkt, struct xmit_frame *pxmitframe);
112807 +#endif //CONFIG_IEEE80211W
112808 #ifdef CONFIG_TDLS
112809 -extern void rtw_tdls_dis_rsp_fr(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, u8 dialog);
112810 -extern s32 rtw_xmit_tdls_coalesce(_adapter *padapter, struct xmit_frame *pxmitframe, u8 action);
112811 -void rtw_dump_xframe(_adapter *padapter, struct xmit_frame *pxmitframe);
112812 -#endif
112813 -#ifdef CONFIG_IOL
112814 -void rtw_dump_xframe_sync(_adapter *padapter, struct xmit_frame *pxmitframe);
112815 -#endif
112816 +s32 rtw_xmit_tdls_coalesce(_adapter *padapter, struct xmit_frame *pxmitframe, u8 action);
112817 +#endif //CONFIG_TDLS
112818 s32 _rtw_init_hw_txqueue(struct hw_txqueue* phw_txqueue, u8 ac_tag);
112819 void _rtw_init_sta_xmit_priv(struct sta_xmit_priv *psta_xmitpriv);
112820
112821 @@ -655,20 +729,26 @@ void _rtw_free_xmit_priv (struct xmit_pr
112822 void rtw_alloc_hwxmits(_adapter *padapter);
112823 void rtw_free_hwxmits(_adapter *padapter);
112824
112825 -s32 rtw_free_xmitframe_ex(struct xmit_priv *pxmitpriv, struct xmit_frame *pxmitframe);
112826
112827 s32 rtw_xmit(_adapter *padapter, _pkt **pkt);
112828
112829 -#ifdef CONFIG_TDLS
112830 -sint xmitframe_enqueue_for_tdls_sleeping_sta(_adapter *padapter, struct xmit_frame *pxmitframe);
112831 -#endif
112832 -
112833 -#ifdef CONFIG_AP_MODE
112834 +#if defined(CONFIG_AP_MODE) || defined(CONFIG_TDLS)
112835 sint xmitframe_enqueue_for_sleeping_sta(_adapter *padapter, struct xmit_frame *pxmitframe);
112836 void stop_sta_xmit(_adapter *padapter, struct sta_info *psta);
112837 void wakeup_sta_to_xmit(_adapter *padapter, struct sta_info *psta);
112838 void xmit_delivery_enabled_frames(_adapter *padapter, struct sta_info *psta);
112839 #endif
112840
112841 +u8 qos_acm(u8 acm_mask, u8 priority);
112842 +
112843 +#ifdef CONFIG_XMIT_ACK
112844 +int rtw_ack_tx_wait(struct xmit_priv *pxmitpriv, u32 timeout_ms);
112845 +void rtw_ack_tx_done(struct xmit_priv *pxmitpriv, int status);
112846 +#endif //CONFIG_XMIT_ACK
112847 +
112848 +
112849 +//include after declaring struct xmit_buf, in order to avoid warning
112850 +#include <xmit_osdep.h>
112851 +
112852 #endif //_RTL871X_XMIT_H_
112853
112854 --- a/drivers/net/wireless/rtl8192cu/include/sdio_hal.h
112855 +++ /dev/null
112856 @@ -1,34 +0,0 @@
112857 -/******************************************************************************
112858 - *
112859 - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
112860 - *
112861 - * This program is free software; you can redistribute it and/or modify it
112862 - * under the terms of version 2 of the GNU General Public License as
112863 - * published by the Free Software Foundation.
112864 - *
112865 - * This program is distributed in the hope that it will be useful, but WITHOUT
112866 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
112867 - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
112868 - * more details.
112869 - *
112870 - * You should have received a copy of the GNU General Public License along with
112871 - * this program; if not, write to the Free Software Foundation, Inc.,
112872 - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
112873 - *
112874 - *
112875 -
112876 -******************************************************************************/
112877 -#ifndef __SDIO_HAL_H__
112878 -
112879 -#define __SDIO_HAL_H__
112880 -
112881 -extern u8 sd_hal_bus_init(_adapter * adapter);
112882 -extern u8 sd_hal_bus_deinit(_adapter * adapter);
112883 -
112884 -
112885 -u8 sd_int_isr (IN PADAPTER padapter);
112886 -void sd_int_dpc(PADAPTER padapter);
112887 -
112888 -
112889 -#endif //__SDIO_HAL_H__
112890 -
112891 --- a/drivers/net/wireless/rtl8192cu/include/sdio_ops.h
112892 +++ /dev/null
112893 @@ -1,80 +0,0 @@
112894 -/******************************************************************************
112895 - *
112896 - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
112897 - *
112898 - * This program is free software; you can redistribute it and/or modify it
112899 - * under the terms of version 2 of the GNU General Public License as
112900 - * published by the Free Software Foundation.
112901 - *
112902 - * This program is distributed in the hope that it will be useful, but WITHOUT
112903 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
112904 - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
112905 - * more details.
112906 - *
112907 - * You should have received a copy of the GNU General Public License along with
112908 - * this program; if not, write to the Free Software Foundation, Inc.,
112909 - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
112910 - *
112911 - *
112912 -
112913 -******************************************************************************/
112914 -#ifndef __SDIO_OPS_H_
112915 -#define __SDIO_OPS_H_
112916 -
112917 -#include <drv_conf.h>
112918 -#include <osdep_service.h>
112919 -#include <drv_types.h>
112920 -#include <osdep_intf.h>
112921 -
112922 -#ifdef PLATFORM_LINUX
112923 -#include <sdio_ops_linux.h>
112924 -#endif
112925 -
112926 -
112927 -
112928 -#ifdef PLATFORM_WINDOWS
112929 -
112930 -#ifdef PLATFORM_OS_XP
112931 -#include <sdio_ops_xp.h>
112932 -struct async_context
112933 -{
112934 - PMDL pmdl;
112935 - PSDBUS_REQUEST_PACKET sdrp;
112936 - unsigned char* r_buf;
112937 - unsigned char* padapter;
112938 -};
112939 -#endif
112940 -#ifdef PLATFORM_OS_CE
112941 -#include <sdio_ops_ce.h>
112942 -#endif
112943 -#endif
112944 -
112945 -
112946 -
112947 -extern void sdio_set_intf_option(u32 *poption);
112948 -
112949 -extern void sdio_set_intf_funs(struct intf_hdl *pintf_hdl);
112950 -
112951 -extern uint sdio_init_intf_priv(struct intf_priv *pintfpriv);
112952 -
112953 -extern void sdio_unload_intf_priv(struct intf_priv *pintfpriv);
112954 -
112955 -extern void sdio_intf_hdl_init(u8 *priv);
112956 -
112957 -extern void sdio_intf_hdl_unload(u8 *priv);
112958 -
112959 -extern void sdio_intf_hdl_open(u8 *priv);
112960 -
112961 -extern void sdio_intf_hdl_close(u8 *priv);
112962 -
112963 -extern void sdio_set_intf_ops(struct _io_ops *pops);
112964 -
112965 -//extern void sdio_set_intf_callbacks(struct _io_callbacks *pcallbacks);
112966 -extern void sdio_func1cmd52_read(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *rmem);
112967 -extern void sdio_func1cmd52_write(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem);
112968 -
112969 -extern uint __inline _cvrt2ftaddr(const u32 addr, u32 *pftaddr) ;
112970 -
112971 -
112972 -#endif
112973 -
112974 --- a/drivers/net/wireless/rtl8192cu/include/sdio_ops_ce.h
112975 +++ /dev/null
112976 @@ -1,56 +0,0 @@
112977 -/******************************************************************************
112978 - *
112979 - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
112980 - *
112981 - * This program is free software; you can redistribute it and/or modify it
112982 - * under the terms of version 2 of the GNU General Public License as
112983 - * published by the Free Software Foundation.
112984 - *
112985 - * This program is distributed in the hope that it will be useful, but WITHOUT
112986 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
112987 - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
112988 - * more details.
112989 - *
112990 - * You should have received a copy of the GNU General Public License along with
112991 - * this program; if not, write to the Free Software Foundation, Inc.,
112992 - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
112993 - *
112994 - *
112995 -
112996 -******************************************************************************/
112997 -#ifndef _SDIO_OPS_WINCE_H_
112998 -#define _SDIO_OPS_WINCE_H_
112999 -
113000 -#include <drv_conf.h>
113001 -#include <osdep_service.h>
113002 -#include <drv_types.h>
113003 -#include <osdep_intf.h>
113004 -
113005 -
113006 -#ifdef PLATFORM_OS_CE
113007 -
113008 -
113009 -extern u8 sdbus_cmd52r_ce(struct intf_priv *pintfpriv, u32 addr);
113010 -
113011 -
113012 -extern void sdbus_cmd52w_ce(struct intf_priv *pintfpriv, u32 addr,u8 val8);
113013 -
113014 -
113015 -uint sdbus_read_blocks_to_membuf_ce(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf);
113016 -
113017 -extern uint sdbus_read_bytes_to_membuf_ce(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf);
113018 -
113019 -
113020 -extern uint sdbus_write_blocks_from_membuf_ce(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf,u8 async);
113021 -
113022 -extern uint sdbus_write_bytes_from_membuf_ce(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf);
113023 -extern u8 sdbus_func1cmd52r_ce(struct intf_priv *pintfpriv, u32 addr);
113024 -extern void sdbus_func1cmd52w_ce(struct intf_priv *pintfpriv, u32 addr, u8 val8);
113025 -extern uint sdbus_read_reg(struct intf_priv *pintfpriv, u32 addr, u32 cnt,void *pdata);
113026 -extern uint sdbus_write_reg(struct intf_priv *pintfpriv, u32 addr, u32 cnt,void *pdata);
113027 -extern void sdio_read_int(_adapter *padapter, u32 addr,u8 sz,void *pdata);
113028 -
113029 -#endif
113030 -
113031 -#endif
113032 -
113033 --- a/drivers/net/wireless/rtl8192cu/include/sdio_ops_linux.h
113034 +++ /dev/null
113035 @@ -1,55 +0,0 @@
113036 -/******************************************************************************
113037 - *
113038 - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
113039 - *
113040 - * This program is free software; you can redistribute it and/or modify it
113041 - * under the terms of version 2 of the GNU General Public License as
113042 - * published by the Free Software Foundation.
113043 - *
113044 - * This program is distributed in the hope that it will be useful, but WITHOUT
113045 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
113046 - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
113047 - * more details.
113048 - *
113049 - * You should have received a copy of the GNU General Public License along with
113050 - * this program; if not, write to the Free Software Foundation, Inc.,
113051 - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
113052 - *
113053 - *
113054 -
113055 -******************************************************************************/
113056 -#ifndef _SDIO_OPS_LINUX_H_
113057 -#define _SDIO_OPS_LINUX_H_
113058 -
113059 -#include <drv_conf.h>
113060 -#include <osdep_service.h>
113061 -#include <drv_types.h>
113062 -#include <osdep_intf.h>
113063 -
113064 -
113065 -#ifdef PLATFORM_LINUX
113066 -
113067 -
113068 -extern u8 sdbus_cmd52r(struct intf_priv *pintfpriv, u32 addr);
113069 -
113070 -
113071 -extern void sdbus_cmd52w(struct intf_priv *pintfpriv, u32 addr,u8 val8);
113072 -extern u8 sdbus_direct_read8(struct intf_priv *pintfpriv, u32 addr);
113073 -extern void sdbus_direct_write8(struct intf_priv *pintfpriv, u32 addr, u8 val8);
113074 -
113075 -extern uint sdbus_read_bytes_to_recvbuf(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf);
113076 -extern uint sdbus_read_blocks_to_recvbuf(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf);
113077 -
113078 -
113079 -extern uint sdbus_write_blocks_from_xmitbuf(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf,u8 async);
113080 -
113081 -extern uint sdbus_write_bytes_from_xmitbuf(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf);
113082 -
113083 -
113084 -extern uint sdbus_read_reg(struct intf_priv *pintfpriv, u32 addr, u32 cnt,void *pdata);
113085 -extern uint sdbus_write_reg(struct intf_priv *pintfpriv, u32 addr, u32 cnt,void *pdata);
113086 -extern void sdio_read_int(_adapter *padapter, u32 addr,u8 sz,void *pdata);
113087 -#endif
113088 -
113089 -#endif
113090 -
113091 --- a/drivers/net/wireless/rtl8192cu/include/sdio_ops_xp.h
113092 +++ /dev/null
113093 @@ -1,56 +0,0 @@
113094 -/******************************************************************************
113095 - *
113096 - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
113097 - *
113098 - * This program is free software; you can redistribute it and/or modify it
113099 - * under the terms of version 2 of the GNU General Public License as
113100 - * published by the Free Software Foundation.
113101 - *
113102 - * This program is distributed in the hope that it will be useful, but WITHOUT
113103 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
113104 - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
113105 - * more details.
113106 - *
113107 - * You should have received a copy of the GNU General Public License along with
113108 - * this program; if not, write to the Free Software Foundation, Inc.,
113109 - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
113110 - *
113111 - *
113112 -
113113 -******************************************************************************/
113114 -#ifndef _SDIO_OPS_XP_H_
113115 -#define _SDIO_OPS_XP_H_
113116 -
113117 -#include <drv_conf.h>
113118 -#include <osdep_service.h>
113119 -#include <drv_types.h>
113120 -#include <osdep_intf.h>
113121 -
113122 -
113123 -#ifdef PLATFORM_OS_XP
113124 -
113125 -
113126 -extern u8 sdbus_cmd52r_xp(struct intf_priv *pintfpriv, u32 addr);
113127 -
113128 -
113129 -extern void sdbus_cmd52w_xp(struct intf_priv *pintfpriv, u32 addr,u8 val8);
113130 -
113131 -
113132 -uint sdbus_read_blocks_to_membuf_xp(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf);
113133 -
113134 -extern uint sdbus_read_bytes_to_membuf_xp(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf);
113135 -
113136 -
113137 -extern uint sdbus_write_blocks_from_membuf_xp(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf,u8 async);
113138 -
113139 -extern uint sdbus_write_bytes_from_membuf_xp(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf);
113140 -extern u8 sdbus_func1cmd52r_xp(struct intf_priv *pintfpriv, u32 addr);
113141 -extern void sdbus_func1cmd52w_xp(struct intf_priv *pintfpriv, u32 addr, u8 val8);
113142 -extern uint sdbus_read_reg(struct intf_priv *pintfpriv, u32 addr, u32 cnt,void *pdata);
113143 -extern uint sdbus_write_reg(struct intf_priv *pintfpriv, u32 addr, u32 cnt,void *pdata);
113144 -extern void sdio_read_int(_adapter *padapter, u32 addr,u8 sz,void *pdata);
113145 -
113146 -#endif
113147 -
113148 -#endif
113149 -
113150 --- a/drivers/net/wireless/rtl8192cu/include/sdio_osintf.h
113151 +++ /dev/null
113152 @@ -1,48 +0,0 @@
113153 -/******************************************************************************
113154 - *
113155 - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
113156 - *
113157 - * This program is free software; you can redistribute it and/or modify it
113158 - * under the terms of version 2 of the GNU General Public License as
113159 - * published by the Free Software Foundation.
113160 - *
113161 - * This program is distributed in the hope that it will be useful, but WITHOUT
113162 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
113163 - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
113164 - * more details.
113165 - *
113166 - * You should have received a copy of the GNU General Public License along with
113167 - * this program; if not, write to the Free Software Foundation, Inc.,
113168 - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
113169 - *
113170 - *
113171 -
113172 -******************************************************************************/
113173 -#ifndef __SDIO_OSINTF_H
113174 -#define __SDIO_OSINTF_H
113175 -
113176 -
113177 -#include <drv_conf.h>
113178 -#include <osdep_service.h>
113179 -#include <drv_types.h>
113180 -
113181 -
113182 -extern unsigned int sd_dvobj_init(_adapter * adapter);
113183 -extern void sd_dvobj_deinit(_adapter * adapter);
113184 -
113185 -void rtl871x_intf_stop(_adapter *padapter);
113186 -
113187 -u8 sd_hal_bus_init(_adapter * padapter);
113188 -u8 sd_hal_bus_deinit(_adapter * padapter);
113189 -void update_xmit_hw_res(_adapter * padapter);
113190 -void sd_c2h_hdl( PADAPTER padapter);
113191 -
113192 -#ifdef PLATFORM_OS_CE
113193 -extern NDIS_STATUS ce_sd_get_dev_hdl(_adapter *padapter );
113194 -SD_API_STATUS
113195 -ce_sd_int_callback(SD_DEVICE_HANDLE hDevice, _adapter* padapter);
113196 -extern void sd_setup_irs(_adapter *padapter);
113197 -#endif
113198 -
113199 -#endif
113200 -
113201 --- a/drivers/net/wireless/rtl8192cu/include/sta_info.h
113202 +++ b/drivers/net/wireless/rtl8192cu/include/sta_info.h
113203 @@ -15,8 +15,8 @@
113204 * this program; if not, write to the Free Software Foundation, Inc.,
113205 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
113206 *
113207 - *
113208 -******************************************************************************/
113209 + *
113210 + ******************************************************************************/
113211 #ifndef __STA_INFO_H_
113212 #define __STA_INFO_H_
113213
113214 @@ -26,13 +26,8 @@
113215 #include <wifi.h>
113216
113217 #define IBSS_START_MAC_ID 2
113218 -#ifdef SUPPORT_64_STA
113219 -#define NUM_STA 64
113220 -#else
113221 #define NUM_STA 32
113222 -#endif
113223 -#define FW_CTRL_MACID 32
113224 -#define NUM_ACL 64
113225 +#define NUM_ACL 16
113226
113227
113228 //if mode ==0, then the sta is allowed once the addr is hit.
113229 @@ -40,27 +35,44 @@
113230 struct rtw_wlan_acl_node {
113231 _list list;
113232 u8 addr[ETH_ALEN];
113233 - u8 mode;
113234 + u8 valid;
113235 };
113236
113237 +//mode=0, disable
113238 +//mode=1, accept unless in deny list
113239 +//mode=2, deny unless in accept list
113240 struct wlan_acl_pool {
113241 - struct rtw_wlan_acl_node aclnode[NUM_ACL];
113242 + int mode;
113243 + int num;
113244 + struct rtw_wlan_acl_node aclnode[NUM_ACL];
113245 + _queue acl_node_q;
113246 };
113247
113248 typedef struct _RSSI_STA{
113249 - int UndecoratedSmoothedPWDB;
113250 - int UndecoratedSmoothedCCK;
113251 + s32 UndecoratedSmoothedPWDB;
113252 + s32 UndecoratedSmoothedCCK;
113253 + s32 UndecoratedSmoothedOFDM;
113254 + u64 PacketMap;
113255 + u8 ValidBit;
113256 }RSSI_STA, *PRSSI_STA;
113257
113258 struct stainfo_stats {
113259
113260 - //u64 rx_pkts;
113261 u64 rx_mgnt_pkts;
113262 + u64 rx_beacon_pkts;
113263 + u64 rx_probereq_pkts;
113264 + u64 rx_probersp_pkts;
113265 + u64 rx_probersp_bm_pkts;
113266 + u64 rx_probersp_uo_pkts;
113267 u64 rx_ctrl_pkts;
113268 u64 rx_data_pkts;
113269
113270 - //u64 last_rx_pkts;
113271 u64 last_rx_mgnt_pkts;
113272 + u64 last_rx_beacon_pkts;
113273 + u64 last_rx_probereq_pkts;
113274 + u64 last_rx_probersp_pkts;
113275 + u64 last_rx_probersp_bm_pkts;
113276 + u64 last_rx_probersp_uo_pkts;
113277 u64 last_rx_ctrl_pkts;
113278 u64 last_rx_data_pkts;
113279
113280 @@ -78,7 +90,7 @@ struct TDLS_PeerKey {
113281 u8 kck[16]; /* TPK-KCK */
113282 u8 tk[16]; /* TPK-TK; only CCMP will be used */
113283 } ;
113284 -#endif
113285 +#endif //CONFIG_TDLS
113286
113287 struct sta_info {
113288
113289 @@ -107,6 +119,9 @@ struct sta_info {
113290 union Keytype dot11tkiprxmickey;
113291 union Keytype dot118021x_UncstKey;
113292 union pn48 dot11txpn; // PN48 used for Unicast xmit.
113293 +#ifdef CONFIG_IEEE80211W
113294 + union pn48 dot11wtxpn; // PN48 used for Unicast mgmt xmit.
113295 +#endif //CONFIG_IEEE80211W
113296 union pn48 dot11rxpn; // PN48 used for Unicast recv.
113297
113298
113299 @@ -133,7 +148,6 @@ struct sta_info {
113300 _timer TPK_timer;
113301 struct TDLS_PeerKey tpk;
113302 _adapter *padapter;
113303 - u8 cam_entry;
113304 u16 stat_code;
113305 u8 off_ch;
113306 u16 ch_switch_time;
113307 @@ -148,7 +162,7 @@ struct sta_info {
113308 _timer alive_timer2;
113309 u8 timer_flag;
113310 u8 alive_count;
113311 -#endif
113312 +#endif //CONFIG_TDLS
113313
113314 //for A-MPDU TX, ADDBA timeout check
113315 _timer addba_retry_timer;
113316 @@ -240,6 +254,8 @@ struct sta_info {
113317 u8 under_exist_checking;
113318 #endif // CONFIG_TX_MCAST2UNI
113319
113320 + u8 keep_alive_trycnt;
113321 +
113322 #endif // CONFIG_AP_MODE
113323
113324 #ifdef CONFIG_IOCTL_CFG80211
113325 @@ -250,7 +266,8 @@ struct sta_info {
113326 //for DM
113327 RSSI_STA rssi_stat;
113328
113329 -
113330 + /* To store the sequence number of received management frame */
113331 + u16 RxMgmtFrameSeqNum;
113332 };
113333
113334 #define sta_rx_pkts(sta) \
113335 @@ -263,9 +280,56 @@ struct sta_info {
113336 + sta->sta_stats.last_rx_ctrl_pkts \
113337 + sta->sta_stats.last_rx_data_pkts)
113338
113339 +#define sta_rx_data_pkts(sta) \
113340 + (sta->sta_stats.rx_data_pkts)
113341 +
113342 +#define sta_last_rx_data_pkts(sta) \
113343 + (sta->sta_stats.last_rx_data_pkts)
113344 +
113345 +#define sta_rx_mgnt_pkts(sta) \
113346 + (sta->sta_stats.rx_mgnt_pkts)
113347 +
113348 +#define sta_last_rx_mgnt_pkts(sta) \
113349 + (sta->sta_stats.last_rx_mgnt_pkts)
113350 +
113351 +#define sta_rx_beacon_pkts(sta) \
113352 + (sta->sta_stats.rx_beacon_pkts)
113353 +
113354 +#define sta_last_rx_beacon_pkts(sta) \
113355 + (sta->sta_stats.last_rx_beacon_pkts)
113356 +
113357 +#define sta_rx_probereq_pkts(sta) \
113358 + (sta->sta_stats.rx_probereq_pkts)
113359 +
113360 +#define sta_last_rx_probereq_pkts(sta) \
113361 + (sta->sta_stats.last_rx_probereq_pkts)
113362 +
113363 +#define sta_rx_probersp_pkts(sta) \
113364 + (sta->sta_stats.rx_probersp_pkts)
113365 +
113366 +#define sta_last_rx_probersp_pkts(sta) \
113367 + (sta->sta_stats.last_rx_probersp_pkts)
113368 +
113369 +#define sta_rx_probersp_bm_pkts(sta) \
113370 + (sta->sta_stats.rx_probersp_bm_pkts)
113371 +
113372 +#define sta_last_rx_probersp_bm_pkts(sta) \
113373 + (sta->sta_stats.last_rx_probersp_bm_pkts)
113374 +
113375 +#define sta_rx_probersp_uo_pkts(sta) \
113376 + (sta->sta_stats.rx_probersp_uo_pkts)
113377 +
113378 +#define sta_last_rx_probersp_uo_pkts(sta) \
113379 + (sta->sta_stats.last_rx_probersp_uo_pkts)
113380 +
113381 #define sta_update_last_rx_pkts(sta) \
113382 do { \
113383 sta->sta_stats.last_rx_mgnt_pkts = sta->sta_stats.rx_mgnt_pkts; \
113384 + sta->sta_stats.last_rx_beacon_pkts = sta->sta_stats.rx_beacon_pkts; \
113385 + sta->sta_stats.last_rx_probereq_pkts = sta->sta_stats.rx_probereq_pkts; \
113386 + sta->sta_stats.last_rx_probersp_pkts = sta->sta_stats.rx_probersp_pkts; \
113387 + sta->sta_stats.last_rx_probersp_bm_pkts = sta->sta_stats.rx_probersp_bm_pkts; \
113388 + sta->sta_stats.last_rx_probersp_uo_pkts = sta->sta_stats.rx_probersp_uo_pkts; \
113389 sta->sta_stats.last_rx_ctrl_pkts = sta->sta_stats.rx_ctrl_pkts; \
113390 sta->sta_stats.last_rx_data_pkts = sta->sta_stats.rx_data_pkts; \
113391 } while(0)
113392 @@ -280,6 +344,11 @@ struct sta_info {
113393 , sta->sta_stats.last_rx_ctrl_pkts \
113394 , sta->sta_stats.last_rx_data_pkts
113395
113396 +#define STA_RX_PKTS_DIFF_ARG(sta) \
113397 + sta->sta_stats.rx_mgnt_pkts - sta->sta_stats.last_rx_mgnt_pkts \
113398 + , sta->sta_stats.rx_ctrl_pkts - sta->sta_stats.last_rx_ctrl_pkts \
113399 + , sta->sta_stats.rx_data_pkts -sta->sta_stats.last_rx_data_pkts
113400 +
113401 #define STA_PKTS_FMT "(m:%llu, c:%llu, d:%llu)"
113402
113403 struct sta_priv {
113404 @@ -302,6 +371,8 @@ struct sta_priv {
113405 _list auth_list;
113406 _lock asoc_list_lock;
113407 _lock auth_list_lock;
113408 + u8 asoc_list_cnt;
113409 + u8 auth_list_cnt;
113410
113411 unsigned int auth_to; //sec, time to expire in authenticating.
113412 unsigned int assoc_to; //sec, time to expire before associating.
113413 @@ -317,6 +388,8 @@ struct sta_priv {
113414 u16 tim_bitmap;//only support 15 stations, aid=0~15 mapping bit0~bit15
113415
113416 u16 max_num_sta;
113417 +
113418 + struct wlan_acl_pool acl_list;
113419 #endif
113420
113421 };
113422 @@ -342,12 +415,18 @@ __inline static u32 wifi_mac_hash(u8 *ma
113423
113424 extern u32 _rtw_init_sta_priv(struct sta_priv *pstapriv);
113425 extern u32 _rtw_free_sta_priv(struct sta_priv *pstapriv);
113426 +
113427 +#define stainfo_offset_valid(offset) (offset < NUM_STA && offset >= 0)
113428 +int rtw_stainfo_offset(struct sta_priv *stapriv, struct sta_info *sta);
113429 +struct sta_info *rtw_get_stainfo_by_offset(struct sta_priv *stapriv, int offset);
113430 +
113431 extern struct sta_info *rtw_alloc_stainfo(struct sta_priv *pstapriv, u8 *hwaddr);
113432 extern u32 rtw_free_stainfo(_adapter *padapter , struct sta_info *psta);
113433 extern void rtw_free_all_stainfo(_adapter *padapter);
113434 extern struct sta_info *rtw_get_stainfo(struct sta_priv *pstapriv, u8 *hwaddr);
113435 extern u32 rtw_init_bcmc_stainfo(_adapter* padapter);
113436 extern struct sta_info* rtw_get_bcmc_stainfo(_adapter* padapter);
113437 -extern u8 rtw_access_ctrl(struct wlan_acl_pool* pacl_list, u8 * mac_addr);
113438 +extern u8 rtw_access_ctrl(_adapter *padapter, u8 *mac_addr);
113439
113440 #endif //_STA_INFO_H_
113441 +
113442 --- a/drivers/net/wireless/rtl8192cu/include/usb_hal.h
113443 +++ b/drivers/net/wireless/rtl8192cu/include/usb_hal.h
113444 @@ -16,8 +16,7 @@
113445 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
113446 *
113447 *
113448 -
113449 -******************************************************************************/
113450 + ******************************************************************************/
113451 #ifndef __USB_HAL_H__
113452 #define __USB_HAL_H__
113453
113454 @@ -28,5 +27,11 @@ void rtl8192du_set_hal_ops(_adapter * pa
113455 #ifdef CONFIG_INTEL_PROXIM
113456 extern _adapter *rtw_usb_get_sw_pointer(void);
113457 #endif //CONFIG_INTEL_PROXIM
113458 +#ifdef CONFIG_WOWLAN
113459 +#ifdef CONFIG_WOWLAN_MANUAL
113460 +extern int rtw_suspend_toshiba(PADAPTER Adapter);
113461 +extern int rtw_resume_toshiba(PADAPTER Adapter);
113462 +#endif // CONFIG_WOWLAN_MANUAL
113463 +#endif //CONFIG_WOWLAN
113464 #endif //__USB_HAL_H__
113465
113466 --- a/drivers/net/wireless/rtl8192cu/include/usb_ops.h
113467 +++ b/drivers/net/wireless/rtl8192cu/include/usb_ops.h
113468 @@ -16,8 +16,7 @@
113469 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
113470 *
113471 *
113472 -
113473 -******************************************************************************/
113474 + ******************************************************************************/
113475 #ifndef __USB_OPS_H_
113476 #define __USB_OPS_H_
113477
113478 @@ -53,10 +52,12 @@ enum{
113479 usb_bulk_msg((usb_dev), (pipe), (data), (len), (actual_length), \
113480 ((timeout_ms) == 0) ||((timeout_ms)*HZ/1000>0)?((timeout_ms)*HZ/1000):1)
113481 #endif
113482 +#include <usb_ops_linux.h>
113483 #endif //PLATFORM_LINUX
113484
113485 #ifdef CONFIG_RTL8192C
113486 void rtl8192cu_set_intf_ops(struct _io_ops *pops);
113487 +#define usb_set_intf_ops rtl8192cu_set_intf_ops
113488
113489 void rtl8192cu_recv_tasklet(void *priv);
113490
113491 @@ -65,8 +66,16 @@ void rtl8192cu_xmit_tasklet(void *priv);
113492
113493 #ifdef CONFIG_RTL8192D
113494 void rtl8192du_set_intf_ops(struct _io_ops *pops);
113495 +#define usb_set_intf_ops rtl8192du_set_intf_ops
113496
113497 +#ifndef PLATFORM_FREEBSD
113498 void rtl8192du_recv_tasklet(void *priv);
113499 +#else // PLATFORM_FREEBSD
113500 +void rtl8192du_recv_tasklet(void *priv, int npending);
113501 +#ifdef CONFIG_RX_INDICATE_QUEUE
113502 +void rtw_rx_indicate_tasklet(void *priv, int npending);
113503 +#endif // CONFIG_RX_INDICATE_QUEUE
113504 +#endif // PLATFORM_FREEBSD
113505
113506 void rtl8192du_xmit_tasklet(void *priv);
113507 #endif
113508 @@ -76,15 +85,15 @@ void rtl8192du_xmit_tasklet(void *priv);
113509 * @return _TRUE:
113510 * @return _FALSE:
113511 */
113512 -static inline int rtw_inc_and_chk_continual_urb_error(struct dvobj_priv *dvobjpriv)
113513 +static inline int rtw_inc_and_chk_continual_urb_error(struct dvobj_priv *dvobj)
113514 {
113515 int ret = _FALSE;
113516 int value;
113517 - if( (value=ATOMIC_INC_RETURN(&dvobjpriv->continual_urb_error)) > MAX_CONTINUAL_URB_ERR) {
113518 - DBG_871X("[dvobjpriv:%p][ERROR] continual_urb_error:%d > %d\n", dvobjpriv, value, MAX_CONTINUAL_URB_ERR);
113519 + if( (value=ATOMIC_INC_RETURN(&dvobj->continual_urb_error)) > MAX_CONTINUAL_URB_ERR) {
113520 + DBG_871X("[dvobj:%p][ERROR] continual_urb_error:%d > %d\n", dvobj, value, MAX_CONTINUAL_URB_ERR);
113521 ret = _TRUE;
113522 } else {
113523 - //DBG_871X("[dvobjpriv:%p] continual_urb_error:%d\n", dvobjpriv, value);
113524 + //DBG_871X("[dvobj:%p] continual_urb_error:%d\n", dvobj, value);
113525 }
113526 return ret;
113527 }
113528 @@ -92,9 +101,10 @@ static inline int rtw_inc_and_chk_contin
113529 /*
113530 * Set the continual_urb_error of this @param dvobjprive to 0
113531 */
113532 -static inline void rtw_reset_continual_urb_error(struct dvobj_priv *dvobjpriv)
113533 +static inline void rtw_reset_continual_urb_error(struct dvobj_priv *dvobj)
113534 {
113535 - ATOMIC_SET(&dvobjpriv->continual_urb_error, 0);
113536 + ATOMIC_SET(&dvobj->continual_urb_error, 0);
113537 }
113538
113539 #endif //__USB_OPS_H_
113540 +
113541 --- /dev/null
113542 +++ b/drivers/net/wireless/rtl8192cu/include/usb_ops_linux.h
113543 @@ -0,0 +1,63 @@
113544 +/******************************************************************************
113545 + *
113546 + * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
113547 + *
113548 + * This program is free software; you can redistribute it and/or modify it
113549 + * under the terms of version 2 of the GNU General Public License as
113550 + * published by the Free Software Foundation.
113551 + *
113552 + * This program is distributed in the hope that it will be useful, but WITHOUT
113553 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
113554 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
113555 + * more details.
113556 + *
113557 + * You should have received a copy of the GNU General Public License along with
113558 + * this program; if not, write to the Free Software Foundation, Inc.,
113559 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
113560 + *
113561 + *
113562 + ******************************************************************************/
113563 +#ifndef __USB_OPS_LINUX_H__
113564 +#define __USB_OPS_LINUX_H__
113565 +
113566 +#define VENDOR_CMD_MAX_DATA_LEN 254
113567 +
113568 +#define RTW_USB_CONTROL_MSG_TIMEOUT_TEST 10//ms
113569 +#define RTW_USB_CONTROL_MSG_TIMEOUT 500//ms
113570 +
113571 +#if defined(CONFIG_VENDOR_REQ_RETRY) && defined(CONFIG_USB_VENDOR_REQ_MUTEX)
113572 +/* vendor req retry should be in the situation when each vendor req is atomically submitted from others */
113573 +#define MAX_USBCTRL_VENDORREQ_TIMES 10
113574 +#else
113575 +#define MAX_USBCTRL_VENDORREQ_TIMES 1
113576 +#endif
113577 +
113578 +#define RTW_USB_BULKOUT_TIMEOUT 5000//ms
113579 +
113580 +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)) || (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18))
113581 +#define _usbctrl_vendorreq_async_callback(urb, regs) _usbctrl_vendorreq_async_callback(urb)
113582 +#define usb_bulkout_zero_complete(purb, regs) usb_bulkout_zero_complete(purb)
113583 +#define usb_write_mem_complete(purb, regs) usb_write_mem_complete(purb)
113584 +#define usb_write_port_complete(purb, regs) usb_write_port_complete(purb)
113585 +#define usb_read_port_complete(purb, regs) usb_read_port_complete(purb)
113586 +#define usb_read_interrupt_complete(purb, regs) usb_read_interrupt_complete(purb)
113587 +#endif
113588 +
113589 +#ifdef CONFIG_USB_SUPPORT_ASYNC_VDN_REQ
113590 +int usb_async_write8(struct intf_hdl *pintfhdl, u32 addr, u8 val);
113591 +int usb_async_write16(struct intf_hdl *pintfhdl, u32 addr, u16 val);
113592 +int usb_async_write32(struct intf_hdl *pintfhdl, u32 addr, u32 val);
113593 +#endif /* CONFIG_USB_SUPPORT_ASYNC_VDN_REQ */
113594 +
113595 +unsigned int ffaddr2pipehdl(struct dvobj_priv *pdvobj, u32 addr);
113596 +
113597 +void usb_read_mem(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *rmem);
113598 +void usb_write_mem(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem);
113599 +
113600 +void usb_read_port_cancel(struct intf_hdl *pintfhdl);
113601 +
113602 +u32 usb_write_port(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem);
113603 +void usb_write_port_cancel(struct intf_hdl *pintfhdl);
113604 +
113605 +#endif
113606 +
113607 --- a/drivers/net/wireless/rtl8192cu/include/usb_osintf.h
113608 +++ b/drivers/net/wireless/rtl8192cu/include/usb_osintf.h
113609 @@ -16,8 +16,7 @@
113610 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
113611 *
113612 *
113613 -
113614 -******************************************************************************/
113615 + ******************************************************************************/
113616 #ifndef __USB_OSINTF_H
113617 #define __USB_OSINTF_H
113618
113619 --- a/drivers/net/wireless/rtl8192cu/include/usb_vendor_req.h
113620 +++ b/drivers/net/wireless/rtl8192cu/include/usb_vendor_req.h
113621 @@ -16,8 +16,7 @@
113622 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
113623 *
113624 *
113625 -
113626 -******************************************************************************/
113627 + ******************************************************************************/
113628 #ifndef _USB_VENDOR_REQUEST_H_
113629 #define _USB_VENDOR_REQUEST_H_
113630
113631 --- a/drivers/net/wireless/rtl8192cu/include/wifi.h
113632 +++ b/drivers/net/wireless/rtl8192cu/include/wifi.h
113633 @@ -16,8 +16,7 @@
113634 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
113635 *
113636 *
113637 -
113638 -******************************************************************************/
113639 + ******************************************************************************/
113640 #ifndef _WIFI_H_
113641 #define _WIFI_H_
113642
113643 @@ -551,6 +550,7 @@ __inline static int IsFrameTypeCtrl(unsi
113644 #define _IBSS_PARA_IE_ 6
113645 #define _COUNTRY_IE_ 7
113646 #define _CHLGETXT_IE_ 16
113647 +#define _POW_CAP_IE_ 33
113648 #define _SUPPORTED_CH_IE_ 36
113649 #define _CH_SWTICH_ANNOUNCE_ 37 //Secondary Channel Offset
113650 #define _RSN_IE_2_ 48
113651 @@ -561,6 +561,7 @@ __inline static int IsFrameTypeCtrl(unsi
113652 #define _HT_CAPABILITY_IE_ 45
113653 #define _FTIE_ 55
113654 #define _TIMEOUT_ITVL_IE_ 56
113655 +#define _SRC_IE_ 59
113656 #define _HT_EXTRA_INFO_IE_ 61
113657 #define _HT_ADD_INFO_IE_ 61 //_HT_EXTRA_INFO_IE_
113658
113659 @@ -568,6 +569,9 @@ __inline static int IsFrameTypeCtrl(unsi
113660 #define EID_BSSIntolerantChlReport 73
113661 #define _RIC_Descriptor_IE_ 75
113662
113663 +#ifdef CONFIG_IEEE80211W
113664 +#define _MME_IE_ 76 //802.11w Management MIC element
113665 +#endif //CONFIG_IEEE80211W
113666 #define _LINK_ID_IE_ 101
113667 #define _CH_SWITCH_TIMING_ 104
113668 #define _PTI_BUFFER_STATUS_ 106
113669 @@ -624,7 +628,10 @@ __inline static int IsFrameTypeCtrl(unsi
113670 #define _WEP_104_PRIVACY_ 5
113671 #define _WEP_WPA_MIXED_PRIVACY_ 6 // WEP + WPA
113672 */
113673 -
113674 +
113675 +#ifdef CONFIG_IEEE80211W
113676 +#define _MME_IE_LENGTH_ 18
113677 +#endif //CONFIG_IEEE80211W
113678 /*-----------------------------------------------------------------------------
113679 Below is the definition for WMM
113680 ------------------------------------------------------------------------------*/
113681 @@ -654,7 +661,7 @@ __inline static int IsFrameTypeCtrl(unsi
113682
113683
113684 /**
113685 - * struct ieee80211_bar - HT Block Ack Request
113686 + * struct rtw_ieee80211_bar - HT Block Ack Request
113687 *
113688 * This structure refers to "HT BlockAckReq" as
113689 * described in 802.11n draft section 7.2.1.7.1
113690 @@ -675,7 +682,9 @@ struct rtw_ieee80211_bar {
113691 #define IEEE80211_BAR_CTRL_CBMTID_COMPRESSED_BA 0x0004
113692
113693
113694 - #if defined(PLATFORM_LINUX) || defined(CONFIG_RTL8712FW)
113695 + #if defined(PLATFORM_LINUX) || defined(CONFIG_RTL8712FW) || defined(PLATFORM_FREEBSD)
113696 +
113697 +
113698
113699 /**
113700 * struct rtw_ieee80211_ht_cap - HT capabilities
113701 @@ -722,7 +731,7 @@ struct HT_caps_element
113702 unsigned char ASEL_caps;
113703 } HT_cap_element;
113704 unsigned char HT_cap[26];
113705 - };
113706 + }u;
113707 } __attribute__ ((packed));
113708
113709 struct HT_info_element
113710 @@ -887,7 +896,7 @@ struct ADDBA_request
113711 #define WLAN_HT_CAP_SM_PS_INVALID 2
113712 #define WLAN_HT_CAP_SM_PS_DISABLED 3
113713
113714 -#ifdef CONFIG_AP_MODE
113715 +
113716 #define OP_MODE_PURE 0
113717 #define OP_MODE_MAY_BE_LEGACY_STAS 1
113718 #define OP_MODE_20MHZ_HT_STA_ASSOCED 2
113719 @@ -914,7 +923,7 @@ struct ADDBA_request
113720 #define HT_INFO_STBC_PARAM_LSIG_TXOP_PROTECT_ALLOWED ((u16) BIT(9))
113721 #define HT_INFO_STBC_PARAM_PCO_ACTIVE ((u16) BIT(10))
113722 #define HT_INFO_STBC_PARAM_PCO_PHASE ((u16) BIT(11))
113723 -#endif
113724 +
113725
113726
113727 //#endif
113728 @@ -932,6 +941,7 @@ struct ADDBA_request
113729 #define WPS_ATTR_MODEL_NUMBER 0x1024
113730 #define WPS_ATTR_SERIAL_NUMBER 0x1042
113731 #define WPS_ATTR_PRIMARY_DEV_TYPE 0x1054
113732 +#define WPS_ATTR_SEC_DEV_TYPE_LIST 0x1055
113733 #define WPS_ATTR_DEVICE_NAME 0x1011
113734 #define WPS_ATTR_CONF_METHOD 0x1008
113735 #define WPS_ATTR_RF_BANDS 0x103C
113736 @@ -940,7 +950,7 @@ struct ADDBA_request
113737 #define WPS_ATTR_ASSOCIATION_STATE 0x1002
113738 #define WPS_ATTR_CONFIG_ERROR 0x1009
113739 #define WPS_ATTR_VENDOR_EXT 0x1049
113740 -#define WPA_ATTR_SELECTED_REGISTRAR 0x1041
113741 +#define WPS_ATTR_SELECTED_REGISTRAR 0x1041
113742
113743 // Value of WPS attribute "WPS_ATTR_DEVICE_NAME
113744 #define WPS_MAX_DEVICE_NAME_LEN 32
113745 @@ -980,12 +990,13 @@ struct ADDBA_request
113746 #define WPS_CONFIG_METHOD_PDISPLAY 0x4008
113747
113748 // Value of Category ID of WPS Primary Device Type Attribute
113749 +#define WPS_PDT_CID_DISPLAYS 0x0007
113750 #define WPS_PDT_CID_MULIT_MEDIA 0x0008
113751 -#define WPS_PDT_CID_RTK_WIDI 0x001E
113752 +#define WPS_PDT_CID_RTK_WIDI WPS_PDT_CID_MULIT_MEDIA
113753
113754 // Value of Sub Category ID of WPS Primary Device Type Attribute
113755 #define WPS_PDT_SCID_MEDIA_SERVER 0x0005
113756 -#define WPS_PDT_SCID_RTK_DMP 0x0001
113757 +#define WPS_PDT_SCID_RTK_DMP WPS_PDT_SCID_MEDIA_SERVER
113758
113759 // Value of Device Password ID
113760 #define WPS_DPID_PIN 0x0000
113761 @@ -995,6 +1006,16 @@ struct ADDBA_request
113762 #define WPS_DPID_PBC 0x0004
113763 #define WPS_DPID_REGISTRAR_SPEC 0x0005
113764
113765 +// Value of WPS RF Bands Attribute
113766 +#define WPS_RF_BANDS_2_4_GHZ 0x01
113767 +#define WPS_RF_BANDS_5_GHZ 0x02
113768 +
113769 +// Value of WPS Association State Attribute
113770 +#define WPS_ASSOC_STATE_NOT_ASSOCIATED 0x00
113771 +#define WPS_ASSOC_STATE_CONNECTION_SUCCESS 0x01
113772 +#define WPS_ASSOC_STATE_CONFIGURATION_FAILURE 0x02
113773 +#define WPS_ASSOC_STATE_ASSOCIATION_FAILURE 0x03
113774 +#define WPS_ASSOC_STATE_IP_FAILURE 0x04
113775
113776 // =====================P2P Section=====================
113777 // For P2P
113778 @@ -1038,6 +1059,12 @@ struct ADDBA_request
113779 // Value of Inviation Flags Attribute
113780 #define P2P_INVITATION_FLAGS_PERSISTENT BIT(0)
113781
113782 +#define DMP_P2P_DEVCAP_SUPPORT (P2P_DEVCAP_SERVICE_DISCOVERY | \
113783 + P2P_DEVCAP_CLIENT_DISCOVERABILITY | \
113784 + P2P_DEVCAP_CONCURRENT_OPERATION | \
113785 + P2P_DEVCAP_INVITATION_PROC)
113786 +
113787 +#define DMP_P2P_GRPCAP_SUPPORT (P2P_GRPCAP_INTRABSS)
113788
113789 // Value of Device Capability Bitmap
113790 #define P2P_DEVCAP_SERVICE_DISCOVERY BIT(0)
113791 @@ -1090,9 +1117,13 @@ struct ADDBA_request
113792 #define P2P_FINDPHASE_EX_SOCIAL_LAST P2P_FINDPHASE_EX_MAX
113793
113794 #define P2P_PROVISION_TIMEOUT 5000 // 5 seconds timeout for sending the provision discovery request
113795 +#define P2P_CONCURRENT_PROVISION_TIMEOUT 3000 // 3 seconds timeout for sending the provision discovery request under concurrent mode
113796 #define P2P_GO_NEGO_TIMEOUT 5000 // 5 seconds timeout for receiving the group negotation response
113797 +#define P2P_CONCURRENT_GO_NEGO_TIMEOUT 3000 // 3 seconds timeout for sending the negotiation request under concurrent mode
113798 #define P2P_TX_PRESCAN_TIMEOUT 100 // 100ms
113799 -
113800 +#define P2P_INVITE_TIMEOUT 5000 // 5 seconds timeout for sending the invitation request
113801 +#define P2P_CONCURRENT_INVITE_TIMEOUT 3000 // 3 seconds timeout for sending the invitation request under concurrent mode
113802 +#define P2P_RESET_SCAN_CH 15000 // 15 seconds timeout to reset the scan channel ( based on channel plan )
113803 #define P2P_MAX_INTENT 15
113804
113805 #define P2P_MAX_NOA_NUM 2
113806 @@ -1119,21 +1150,29 @@ enum P2P_ROLE {
113807 };
113808
113809 enum P2P_STATE {
113810 - P2P_STATE_NONE = 0, // P2P disable
113811 - P2P_STATE_IDLE = 1, // P2P had enabled and do nothing
113812 - P2P_STATE_LISTEN = 2, // In pure listen state
113813 - P2P_STATE_SCAN = 3, // In scan phase
113814 - P2P_STATE_FIND_PHASE_LISTEN = 4, // In the listen state of find phase
113815 - P2P_STATE_FIND_PHASE_SEARCH = 5, // In the search state of find phase
113816 - P2P_STATE_TX_PROVISION_DIS_REQ = 6, // In P2P provisioning discovery
113817 + P2P_STATE_NONE = 0, // P2P disable
113818 + P2P_STATE_IDLE = 1, // P2P had enabled and do nothing
113819 + P2P_STATE_LISTEN = 2, // In pure listen state
113820 + P2P_STATE_SCAN = 3, // In scan phase
113821 + P2P_STATE_FIND_PHASE_LISTEN = 4, // In the listen state of find phase
113822 + P2P_STATE_FIND_PHASE_SEARCH = 5, // In the search state of find phase
113823 + P2P_STATE_TX_PROVISION_DIS_REQ = 6, // In P2P provisioning discovery
113824 P2P_STATE_RX_PROVISION_DIS_RSP = 7,
113825 P2P_STATE_RX_PROVISION_DIS_REQ = 8,
113826 - P2P_STATE_GONEGO_ING = 9, // Doing the group owner negoitation handshake
113827 - P2P_STATE_GONEGO_OK = 10, // finish the group negoitation handshake with success
113828 - P2P_STATE_GONEGO_FAIL = 11, // finish the group negoitation handshake with failure
113829 - P2P_STATE_RECV_INVITE_REQ = 12, // receiving the P2P Inviation request
113830 - P2P_STATE_PROVISIONING_ING = 13, // Doing the P2P WPS
113831 - P2P_STATE_PROVISIONING_DONE = 14, // Finish the P2P WPS
113832 + P2P_STATE_GONEGO_ING = 9, // Doing the group owner negoitation handshake
113833 + P2P_STATE_GONEGO_OK = 10, // finish the group negoitation handshake with success
113834 + P2P_STATE_GONEGO_FAIL = 11, // finish the group negoitation handshake with failure
113835 + P2P_STATE_RECV_INVITE_REQ_MATCH = 12, // receiving the P2P Inviation request and match with the profile.
113836 + P2P_STATE_PROVISIONING_ING = 13, // Doing the P2P WPS
113837 + P2P_STATE_PROVISIONING_DONE = 14, // Finish the P2P WPS
113838 + P2P_STATE_TX_INVITE_REQ = 15, // Transmit the P2P Invitation request
113839 + P2P_STATE_RX_INVITE_RESP_OK = 16, // Receiving the P2P Invitation response with sucess
113840 + P2P_STATE_RECV_INVITE_REQ_DISMATCH = 17, // receiving the P2P Inviation request and dismatch with the profile.
113841 + P2P_STATE_RECV_INVITE_REQ_GO = 18, // receiving the P2P Inviation request and this wifi is GO.
113842 + P2P_STATE_RECV_INVITE_REQ_JOIN = 19, // receiving the P2P Inviation request to join an existing P2P Group.
113843 + P2P_STATE_RX_INVITE_RESP_FAIL = 20, // recveing the P2P Inviation response with failure
113844 + P2P_STATE_RX_INFOR_NOREADY = 21, // receiving p2p negoitation response with information is not available
113845 + P2P_STATE_TX_INFOR_NOREADY = 22, // sending p2p negoitation response with information is not available
113846 };
113847
113848 enum P2P_WPSINFO {
113849 @@ -1150,34 +1189,51 @@ enum P2P_PROTO_WK_ID
113850 P2P_FIND_PHASE_WK = 0,
113851 P2P_RESTORE_STATE_WK = 1,
113852 P2P_PRE_TX_PROVDISC_PROCESS_WK = 2,
113853 - P2P_PRE_TX_NEGOREQ_PROCESS_WK = 3,
113854 - P2P_RO_CH_WK = 4,
113855 + P2P_PRE_TX_NEGOREQ_PROCESS_WK = 3,
113856 + P2P_PRE_TX_INVITEREQ_PROCESS_WK = 4,
113857 + P2P_AP_P2P_CH_SWITCH_PROCESS_WK =5,
113858 + P2P_RO_CH_WK = 6,
113859 +};
113860 +
113861 +#ifdef CONFIG_P2P_PS
113862 +enum P2P_PS_STATE
113863 +{
113864 + P2P_PS_DISABLE = 0,
113865 + P2P_PS_ENABLE = 1,
113866 + P2P_PS_SCAN = 2,
113867 + P2P_PS_SCAN_DONE = 3,
113868 + P2P_PS_ALLSTASLEEP = 4, // for P2P GO
113869 };
113870
113871 -enum P2P_PS
113872 +enum P2P_PS_MODE
113873 {
113874 - P2P_PS_DISABLE=0,
113875 - P2P_PS_ENABLE=1,
113876 - P2P_PS_SCAN=2,
113877 - P2P_PS_SCAN_DONE=3,
113878 - P2P_PS_ALLSTASLEEP=4, // for owner
113879 + P2P_PS_NONE = 0,
113880 + P2P_PS_CTWINDOW = 1,
113881 + P2P_PS_NOA = 2,
113882 + P2P_PS_MIX = 3, // CTWindow and NoA
113883 };
113884 +#endif // CONFIG_P2P_PS
113885
113886 // =====================WFD Section=====================
113887 // For Wi-Fi Display
113888 #define WFD_ATTR_DEVICE_INFO 0x00
113889 #define WFD_ATTR_ASSOC_BSSID 0x01
113890 #define WFD_ATTR_COUPLED_SINK_INFO 0x06
113891 +#define WFD_ATTR_LOCAL_IP_ADDR 0x08
113892 #define WFD_ATTR_SESSION_INFO 0x09
113893 +#define WFD_ATTR_ALTER_MAC 0x0a
113894
113895 // For WFD Device Information Attribute
113896 -#define WFD_DEVINFO_SOURCE 0
113897 -#define WFD_DEVINFO_PRIARY_SINK 1
113898 -#define WFD_DEVINFO_SECARY_SINK 2
113899 -#define WFD_DEVINFO_SOURCE_PRIARY_SINK 3
113900 +#define WFD_DEVINFO_SOURCE 0x0000
113901 +#define WFD_DEVINFO_PSINK 0x0001
113902 +#define WFD_DEVINFO_SSINK 0x0002
113903 +#define WFD_DEVINFO_DUAL 0x0003
113904 +
113905 +#define WFD_DEVINFO_SESSION_AVAIL 0x0010
113906 +#define WFD_DEVINFO_WSD 0x0040
113907 +#define WFD_DEVINFO_PC_TDLS 0x0080
113908 +#define WFD_DEVINFO_HDCP_SUPPORT 0x0100
113909
113910 -#define WFD_DEVINFO_NO_COUPLED_SINK 0
113911 -#define WFD_DEVINFO_COUPLED_SINK 4
113912
113913 #ifdef CONFIG_TX_MCAST2UNI
113914 #define IP_MCAST_MAC(mac) ((mac[0]==0x01)&&(mac[1]==0x00)&&(mac[2]==0x5e))
113915 --- a/drivers/net/wireless/rtl8192cu/include/wlan_bssdef.h
113916 +++ b/drivers/net/wireless/rtl8192cu/include/wlan_bssdef.h
113917 @@ -16,8 +16,7 @@
113918 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
113919 *
113920 *
113921 -
113922 -******************************************************************************/
113923 + ******************************************************************************/
113924 #ifndef __WLAN_BSSDEF_H__
113925 #define __WLAN_BSSDEF_H__
113926
113927 @@ -295,6 +294,275 @@ typedef struct _NDIS_802_11_TEST
113928
113929 #endif //end of #ifdef PLATFORM_LINUX
113930
113931 +#ifdef PLATFORM_FREEBSD
113932 +
113933 +#define NDIS_802_11_LENGTH_SSID 32
113934 +#define NDIS_802_11_LENGTH_RATES 8
113935 +#define NDIS_802_11_LENGTH_RATES_EX 16
113936 +
113937 +typedef unsigned char NDIS_802_11_MAC_ADDRESS[6];
113938 +typedef long NDIS_802_11_RSSI; // in dBm
113939 +typedef unsigned char NDIS_802_11_RATES[NDIS_802_11_LENGTH_RATES]; // Set of 8 data rates
113940 +typedef unsigned char NDIS_802_11_RATES_EX[NDIS_802_11_LENGTH_RATES_EX]; // Set of 16 data rates
113941 +
113942 +
113943 +typedef ULONG NDIS_802_11_KEY_INDEX;
113944 +typedef unsigned long long NDIS_802_11_KEY_RSC;
113945 +
113946 +
113947 +typedef struct _NDIS_802_11_SSID
113948 +{
113949 + ULONG SsidLength;
113950 + UCHAR Ssid[32];
113951 +} NDIS_802_11_SSID, *PNDIS_802_11_SSID;
113952 +
113953 +typedef enum _NDIS_802_11_NETWORK_TYPE
113954 +{
113955 + Ndis802_11FH,
113956 + Ndis802_11DS,
113957 + Ndis802_11OFDM5,
113958 + Ndis802_11OFDM24,
113959 + Ndis802_11NetworkTypeMax // not a real type, defined as an upper bound
113960 +} NDIS_802_11_NETWORK_TYPE, *PNDIS_802_11_NETWORK_TYPE;
113961 +
113962 +typedef struct _NDIS_802_11_CONFIGURATION_FH
113963 +{
113964 + ULONG Length; // Length of structure
113965 + ULONG HopPattern; // As defined by 802.11, MSB set
113966 + ULONG HopSet; // to one if non-802.11
113967 + ULONG DwellTime; // units are Kusec
113968 +} NDIS_802_11_CONFIGURATION_FH, *PNDIS_802_11_CONFIGURATION_FH;
113969 +
113970 +
113971 +/*
113972 + FW will only save the channel number in DSConfig.
113973 + ODI Handler will convert the channel number to freq. number.
113974 +*/
113975 +typedef struct _NDIS_802_11_CONFIGURATION
113976 +{
113977 + ULONG Length; // Length of structure
113978 + ULONG BeaconPeriod; // units are Kusec
113979 + ULONG ATIMWindow; // units are Kusec
113980 + ULONG DSConfig; // Frequency, units are kHz
113981 + NDIS_802_11_CONFIGURATION_FH FHConfig;
113982 +} NDIS_802_11_CONFIGURATION, *PNDIS_802_11_CONFIGURATION;
113983 +
113984 +
113985 +
113986 +typedef enum _NDIS_802_11_NETWORK_INFRASTRUCTURE
113987 +{
113988 + Ndis802_11IBSS,
113989 + Ndis802_11Infrastructure,
113990 + Ndis802_11AutoUnknown,
113991 + Ndis802_11InfrastructureMax, // Not a real value, defined as upper bound
113992 + Ndis802_11APMode
113993 +} NDIS_802_11_NETWORK_INFRASTRUCTURE, *PNDIS_802_11_NETWORK_INFRASTRUCTURE;
113994 +
113995 +
113996 +
113997 +
113998 +
113999 +typedef struct _NDIS_802_11_FIXED_IEs
114000 +{
114001 + UCHAR Timestamp[8];
114002 + USHORT BeaconInterval;
114003 + USHORT Capabilities;
114004 +} NDIS_802_11_FIXED_IEs, *PNDIS_802_11_FIXED_IEs;
114005 +
114006 +
114007 +
114008 +typedef struct _NDIS_802_11_VARIABLE_IEs
114009 +{
114010 + UCHAR ElementID;
114011 + UCHAR Length;
114012 + UCHAR data[1];
114013 +} NDIS_802_11_VARIABLE_IEs, *PNDIS_802_11_VARIABLE_IEs;
114014 +
114015 +
114016 +
114017 +/*
114018 +
114019 +
114020 +
114021 +Length is the 4 bytes multiples of the sume of
114022 + sizeof (NDIS_802_11_MAC_ADDRESS) + 2 + sizeof (NDIS_802_11_SSID) + sizeof (ULONG)
114023 ++ sizeof (NDIS_802_11_RSSI) + sizeof (NDIS_802_11_NETWORK_TYPE) + sizeof (NDIS_802_11_CONFIGURATION)
114024 ++ sizeof (NDIS_802_11_RATES_EX) + IELength
114025 +
114026 +Except the IELength, all other fields are fixed length. Therefore, we can define a marco to present the
114027 +partial sum.
114028 +
114029 +*/
114030 +#if 0
114031 +typedef struct _NDIS_WLAN_BSSID_EX
114032 +{
114033 + ULONG Length;
114034 + NDIS_802_11_MAC_ADDRESS MacAddress;
114035 + UCHAR Reserved[2];//[0]: IS beacon frame, [1]:optimum_antenna=>For antenna diversity;
114036 + NDIS_802_11_SSID Ssid;
114037 + ULONG Privacy;
114038 + NDIS_802_11_RSSI Rssi;
114039 + NDIS_802_11_NETWORK_TYPE NetworkTypeInUse;
114040 + NDIS_802_11_CONFIGURATION Configuration;
114041 + NDIS_802_11_NETWORK_INFRASTRUCTURE InfrastructureMode;
114042 + NDIS_802_11_RATES_EX SupportedRates;
114043 + ULONG IELength;
114044 + UCHAR IEs[MAX_IE_SZ]; //(timestamp, beacon interval, and capability information)
114045 +} NDIS_WLAN_BSSID_EX, *PNDIS_WLAN_BSSID_EX;
114046 +
114047 +
114048 +typedef struct _NDIS_802_11_BSSID_LIST_EX
114049 +{
114050 + ULONG NumberOfItems;
114051 + NDIS_WLAN_BSSID_EX Bssid[1];
114052 +} NDIS_802_11_BSSID_LIST_EX, *PNDIS_802_11_BSSID_LIST_EX;
114053 +#endif
114054 +
114055 +typedef enum _NDIS_802_11_AUTHENTICATION_MODE
114056 +{
114057 + Ndis802_11AuthModeOpen,
114058 + Ndis802_11AuthModeShared,
114059 + Ndis802_11AuthModeAutoSwitch,
114060 + Ndis802_11AuthModeWPA,
114061 + Ndis802_11AuthModeWPAPSK,
114062 + Ndis802_11AuthModeWPANone,
114063 + Ndis802_11AuthModeMax // Not a real mode, defined as upper bound
114064 +} NDIS_802_11_AUTHENTICATION_MODE, *PNDIS_802_11_AUTHENTICATION_MODE;
114065 +
114066 +typedef enum _NDIS_802_11_WEP_STATUS
114067 +{
114068 + Ndis802_11WEPEnabled,
114069 + Ndis802_11Encryption1Enabled = Ndis802_11WEPEnabled,
114070 + Ndis802_11WEPDisabled,
114071 + Ndis802_11EncryptionDisabled = Ndis802_11WEPDisabled,
114072 + Ndis802_11WEPKeyAbsent,
114073 + Ndis802_11Encryption1KeyAbsent = Ndis802_11WEPKeyAbsent,
114074 + Ndis802_11WEPNotSupported,
114075 + Ndis802_11EncryptionNotSupported = Ndis802_11WEPNotSupported,
114076 + Ndis802_11Encryption2Enabled,
114077 + Ndis802_11Encryption2KeyAbsent,
114078 + Ndis802_11Encryption3Enabled,
114079 + Ndis802_11Encryption3KeyAbsent
114080 +} NDIS_802_11_WEP_STATUS, *PNDIS_802_11_WEP_STATUS,
114081 + NDIS_802_11_ENCRYPTION_STATUS, *PNDIS_802_11_ENCRYPTION_STATUS;
114082 +
114083 +
114084 +#define NDIS_802_11_AI_REQFI_CAPABILITIES 1
114085 +#define NDIS_802_11_AI_REQFI_LISTENINTERVAL 2
114086 +#define NDIS_802_11_AI_REQFI_CURRENTAPADDRESS 4
114087 +
114088 +#define NDIS_802_11_AI_RESFI_CAPABILITIES 1
114089 +#define NDIS_802_11_AI_RESFI_STATUSCODE 2
114090 +#define NDIS_802_11_AI_RESFI_ASSOCIATIONID 4
114091 +
114092 +typedef struct _NDIS_802_11_AI_REQFI
114093 +{
114094 + USHORT Capabilities;
114095 + USHORT ListenInterval;
114096 + NDIS_802_11_MAC_ADDRESS CurrentAPAddress;
114097 +} NDIS_802_11_AI_REQFI, *PNDIS_802_11_AI_REQFI;
114098 +
114099 +typedef struct _NDIS_802_11_AI_RESFI
114100 +{
114101 + USHORT Capabilities;
114102 + USHORT StatusCode;
114103 + USHORT AssociationId;
114104 +} NDIS_802_11_AI_RESFI, *PNDIS_802_11_AI_RESFI;
114105 +
114106 +typedef struct _NDIS_802_11_ASSOCIATION_INFORMATION
114107 +{
114108 + ULONG Length;
114109 + USHORT AvailableRequestFixedIEs;
114110 + NDIS_802_11_AI_REQFI RequestFixedIEs;
114111 + ULONG RequestIELength;
114112 + ULONG OffsetRequestIEs;
114113 + USHORT AvailableResponseFixedIEs;
114114 + NDIS_802_11_AI_RESFI ResponseFixedIEs;
114115 + ULONG ResponseIELength;
114116 + ULONG OffsetResponseIEs;
114117 +} NDIS_802_11_ASSOCIATION_INFORMATION, *PNDIS_802_11_ASSOCIATION_INFORMATION;
114118 +
114119 +typedef enum _NDIS_802_11_RELOAD_DEFAULTS
114120 +{
114121 + Ndis802_11ReloadWEPKeys
114122 +} NDIS_802_11_RELOAD_DEFAULTS, *PNDIS_802_11_RELOAD_DEFAULTS;
114123 +
114124 +
114125 +// Key mapping keys require a BSSID
114126 +typedef struct _NDIS_802_11_KEY
114127 +{
114128 + ULONG Length; // Length of this structure
114129 + ULONG KeyIndex;
114130 + ULONG KeyLength; // length of key in bytes
114131 + NDIS_802_11_MAC_ADDRESS BSSID;
114132 + NDIS_802_11_KEY_RSC KeyRSC;
114133 + UCHAR KeyMaterial[32]; // variable length depending on above field
114134 +} NDIS_802_11_KEY, *PNDIS_802_11_KEY;
114135 +
114136 +typedef struct _NDIS_802_11_REMOVE_KEY
114137 +{
114138 + ULONG Length; // Length of this structure
114139 + ULONG KeyIndex;
114140 + NDIS_802_11_MAC_ADDRESS BSSID;
114141 +} NDIS_802_11_REMOVE_KEY, *PNDIS_802_11_REMOVE_KEY;
114142 +
114143 +typedef struct _NDIS_802_11_WEP
114144 +{
114145 + ULONG Length; // Length of this structure
114146 + ULONG KeyIndex; // 0 is the per-client key, 1-N are the global keys
114147 + ULONG KeyLength; // length of key in bytes
114148 + UCHAR KeyMaterial[16];// variable length depending on above field
114149 +} NDIS_802_11_WEP, *PNDIS_802_11_WEP;
114150 +
114151 +typedef struct _NDIS_802_11_AUTHENTICATION_REQUEST
114152 +{
114153 + ULONG Length; // Length of structure
114154 + NDIS_802_11_MAC_ADDRESS Bssid;
114155 + ULONG Flags;
114156 +} NDIS_802_11_AUTHENTICATION_REQUEST, *PNDIS_802_11_AUTHENTICATION_REQUEST;
114157 +
114158 +typedef enum _NDIS_802_11_STATUS_TYPE
114159 +{
114160 + Ndis802_11StatusType_Authentication,
114161 + Ndis802_11StatusType_MediaStreamMode,
114162 + Ndis802_11StatusType_PMKID_CandidateList,
114163 + Ndis802_11StatusTypeMax // not a real type, defined as an upper bound
114164 +} NDIS_802_11_STATUS_TYPE, *PNDIS_802_11_STATUS_TYPE;
114165 +
114166 +typedef struct _NDIS_802_11_STATUS_INDICATION
114167 +{
114168 + NDIS_802_11_STATUS_TYPE StatusType;
114169 +} NDIS_802_11_STATUS_INDICATION, *PNDIS_802_11_STATUS_INDICATION;
114170 +
114171 +// mask for authentication/integrity fields
114172 +#define NDIS_802_11_AUTH_REQUEST_AUTH_FIELDS 0x0f
114173 +#define NDIS_802_11_AUTH_REQUEST_REAUTH 0x01
114174 +#define NDIS_802_11_AUTH_REQUEST_KEYUPDATE 0x02
114175 +#define NDIS_802_11_AUTH_REQUEST_PAIRWISE_ERROR 0x06
114176 +#define NDIS_802_11_AUTH_REQUEST_GROUP_ERROR 0x0E
114177 +
114178 +// MIC check time, 60 seconds.
114179 +#define MIC_CHECK_TIME 60000000
114180 +
114181 +typedef struct _NDIS_802_11_AUTHENTICATION_EVENT
114182 +{
114183 + NDIS_802_11_STATUS_INDICATION Status;
114184 + NDIS_802_11_AUTHENTICATION_REQUEST Request[1];
114185 +} NDIS_802_11_AUTHENTICATION_EVENT, *PNDIS_802_11_AUTHENTICATION_EVENT;
114186 +
114187 +typedef struct _NDIS_802_11_TEST
114188 +{
114189 + ULONG Length;
114190 + ULONG Type;
114191 + union
114192 + {
114193 + NDIS_802_11_AUTHENTICATION_EVENT AuthenticationEvent;
114194 + NDIS_802_11_RSSI RssiTrigger;
114195 + }tt;
114196 +} NDIS_802_11_TEST, *PNDIS_802_11_TEST;
114197 +
114198 +
114199 +#endif //PLATFORM_FREEBSD
114200 #ifndef Ndis802_11APMode
114201 #define Ndis802_11APMode (Ndis802_11InfrastructureMax+1)
114202 #endif
114203 @@ -340,25 +608,7 @@ WLAN_BSSID_EX, *PWLAN_BSSID_EX;
114204
114205 __inline static uint get_WLAN_BSSID_EX_sz(WLAN_BSSID_EX *bss)
114206 {
114207 - uint t_len;
114208 -
114209 - t_len = sizeof (ULONG)
114210 - + sizeof (NDIS_802_11_MAC_ADDRESS)
114211 - + 2
114212 - + sizeof (NDIS_802_11_SSID)
114213 - + sizeof (ULONG)
114214 - + sizeof (NDIS_802_11_RSSI)
114215 - + sizeof (NDIS_802_11_NETWORK_TYPE)
114216 - + sizeof (NDIS_802_11_CONFIGURATION)
114217 - + sizeof (NDIS_802_11_NETWORK_INFRASTRUCTURE)
114218 - + sizeof (NDIS_802_11_RATES_EX)
114219 - //all new member add here
114220 - + sizeof(WLAN_PHY_INFO)
114221 - //all new member add here
114222 - + sizeof (ULONG)
114223 - + bss->IELength;
114224 - return t_len;
114225 -
114226 + return (sizeof(WLAN_BSSID_EX) - MAX_IE_SZ + bss->IELength);
114227 }
114228
114229 struct wlan_network {
114230 --- a/drivers/net/wireless/rtl8192cu/include/xmit_osdep.h
114231 +++ b/drivers/net/wireless/rtl8192cu/include/xmit_osdep.h
114232 @@ -16,8 +16,7 @@
114233 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
114234 *
114235 *
114236 -
114237 -******************************************************************************/
114238 + ******************************************************************************/
114239 #ifndef __XMIT_OSDEP_H_
114240 #define __XMIT_OSDEP_H_
114241
114242 @@ -56,6 +55,11 @@ IN UINT flags
114243
114244 #endif
114245
114246 +#ifdef PLATFORM_FREEBSD
114247 +#define NR_XMITFRAME 256
114248 +extern int rtw_xmit_entry(_pkt *pkt, _nic_hdl pnetdev);
114249 +extern void rtw_xmit_entry_wrap (struct ifnet * pifp);
114250 +#endif //PLATFORM_FREEBSD
114251
114252 #ifdef PLATFORM_LINUX
114253
114254 @@ -67,6 +71,7 @@ struct sta_xmit_priv;
114255 struct xmit_frame;
114256 struct xmit_buf;
114257
114258 +extern int _rtw_xmit_entry(_pkt *pkt, _nic_hdl pnetdev);
114259 extern int rtw_xmit_entry(_pkt *pkt, _nic_hdl pnetdev);
114260
114261 #endif
114262 @@ -86,5 +91,5 @@ extern sint rtw_endofpktfile (struct pkt
114263 extern void rtw_os_pkt_complete(_adapter *padapter, _pkt *pkt);
114264 extern void rtw_os_xmit_complete(_adapter *padapter, struct xmit_frame *pxframe);
114265
114266 -#endif //
114267 +#endif //__XMIT_OSDEP_H_
114268
114269 --- a/drivers/net/wireless/rtl8192cu/os_dep/linux/ioctl_cfg80211.c
114270 +++ b/drivers/net/wireless/rtl8192cu/os_dep/linux/ioctl_cfg80211.c
114271 @@ -1,6 +1,6 @@
114272 /******************************************************************************
114273 *
114274 - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
114275 + * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
114276 *
114277 * This program is free software; you can redistribute it and/or modify it
114278 * under the terms of version 2 of the GNU General Public License as
114279 @@ -31,6 +31,8 @@
114280
114281 #include "ioctl_cfg80211.h"
114282
114283 +#define RTW_MAX_MGMT_TX_CNT (8)
114284 +
114285 #define RTW_SCAN_IE_LEN_MAX 2304
114286 #define RTW_MAX_REMAIN_ON_CHANNEL_DURATION 65535 //ms
114287 #define RTW_MAX_NUM_PMKIDS 4
114288 @@ -42,6 +44,9 @@ static const u32 rtw_cipher_suites[] = {
114289 WLAN_CIPHER_SUITE_WEP104,
114290 WLAN_CIPHER_SUITE_TKIP,
114291 WLAN_CIPHER_SUITE_CCMP,
114292 +#ifdef CONFIG_IEEE80211W
114293 + WLAN_CIPHER_SUITE_AES_CMAC,
114294 +#endif //CONFIG_IEEE80211W
114295 };
114296
114297 #define RATETAB_ENT(_rate, _rateid, _flags) \
114298 @@ -85,9 +90,12 @@ static struct ieee80211_rate rtw_rates[]
114299 };
114300
114301 #define rtw_a_rates (rtw_rates + 4)
114302 -#define rtw_a_rates_size 8
114303 +#define RTW_A_RATES_NUM 8
114304 #define rtw_g_rates (rtw_rates + 0)
114305 -#define rtw_g_rates_size 12
114306 +#define RTW_G_RATES_NUM 12
114307 +
114308 +#define RTW_2G_CHANNELS_NUM 14
114309 +#define RTW_5G_CHANNELS_NUM 37
114310
114311 static struct ieee80211_channel rtw_2ghz_channels[] = {
114312 CHAN2G(1, 2412, 0),
114313 @@ -106,8 +114,6 @@ static struct ieee80211_channel rtw_2ghz
114314 CHAN2G(14, 2484, 0),
114315 };
114316
114317 -//{{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,149,153,157,161,165},37}, // 0x12, RT_CHANNEL_DOMAIN_WORLD_WIDE37
114318 -
114319 static struct ieee80211_channel rtw_5ghz_a_channels[] = {
114320 CHAN5G(34, 0), CHAN5G(36, 0),
114321 CHAN5G(38, 0), CHAN5G(40, 0),
114322 @@ -130,23 +136,116 @@ static struct ieee80211_channel rtw_5ghz
114323 CHAN5G(216, 0),
114324 };
114325
114326 -static struct ieee80211_supported_band rtw_band_2ghz = {
114327 - .band = IEEE80211_BAND_2GHZ,
114328 - .channels = rtw_2ghz_channels,
114329 - .n_channels = ARRAY_SIZE(rtw_2ghz_channels),
114330 - .bitrates = rtw_g_rates,
114331 - .n_bitrates = rtw_g_rates_size,
114332 -};
114333
114334 -static struct ieee80211_supported_band rtw_band_5ghz = {
114335 - .band = IEEE80211_BAND_5GHZ,
114336 - .channels = rtw_5ghz_a_channels,
114337 - .n_channels = ARRAY_SIZE(rtw_5ghz_a_channels),
114338 - .bitrates = rtw_a_rates,
114339 - .n_bitrates = rtw_a_rates_size,
114340 -};
114341 +void rtw_2g_channels_init(struct ieee80211_channel *channels)
114342 +{
114343 + _rtw_memcpy((void*)channels, (void*)rtw_2ghz_channels,
114344 + sizeof(struct ieee80211_channel)*RTW_2G_CHANNELS_NUM
114345 + );
114346 +}
114347 +
114348 +void rtw_5g_channels_init(struct ieee80211_channel *channels)
114349 +{
114350 + _rtw_memcpy((void*)channels, (void*)rtw_5ghz_a_channels,
114351 + sizeof(struct ieee80211_channel)*RTW_5G_CHANNELS_NUM
114352 + );
114353 +}
114354 +
114355 +void rtw_2g_rates_init(struct ieee80211_rate *rates)
114356 +{
114357 + _rtw_memcpy(rates, rtw_g_rates,
114358 + sizeof(struct ieee80211_rate)*RTW_G_RATES_NUM
114359 + );
114360 +}
114361 +
114362 +void rtw_5g_rates_init(struct ieee80211_rate *rates)
114363 +{
114364 + _rtw_memcpy(rates, rtw_a_rates,
114365 + sizeof(struct ieee80211_rate)*RTW_A_RATES_NUM
114366 + );
114367 +}
114368 +
114369 +struct ieee80211_supported_band *rtw_spt_band_alloc(
114370 + enum ieee80211_band band
114371 + )
114372 +{
114373 + struct ieee80211_supported_band *spt_band = NULL;
114374 + int n_channels, n_bitrates;
114375 +
114376 + if(band == IEEE80211_BAND_2GHZ)
114377 + {
114378 + n_channels = RTW_2G_CHANNELS_NUM;
114379 + n_bitrates = RTW_G_RATES_NUM;
114380 + }
114381 + else if(band == IEEE80211_BAND_5GHZ)
114382 + {
114383 + n_channels = RTW_5G_CHANNELS_NUM;
114384 + n_bitrates = RTW_A_RATES_NUM;
114385 + }
114386 + else
114387 + {
114388 + goto exit;
114389 + }
114390 +
114391 + spt_band = (struct ieee80211_supported_band *)rtw_zmalloc(
114392 + sizeof(struct ieee80211_supported_band)
114393 + + sizeof(struct ieee80211_channel)*n_channels
114394 + + sizeof(struct ieee80211_rate)*n_bitrates
114395 + );
114396 + if(!spt_band)
114397 + goto exit;
114398 +
114399 + spt_band->channels = (struct ieee80211_channel*)(((u8*)spt_band)+sizeof(struct ieee80211_supported_band));
114400 + spt_band->bitrates= (struct ieee80211_rate*)(((u8*)spt_band->channels)+sizeof(struct ieee80211_channel)*n_channels);
114401 + spt_band->band = band;
114402 + spt_band->n_channels = n_channels;
114403 + spt_band->n_bitrates = n_bitrates;
114404 +
114405 + if(band == IEEE80211_BAND_2GHZ)
114406 + {
114407 + rtw_2g_channels_init(spt_band->channels);
114408 + rtw_2g_rates_init(spt_band->bitrates);
114409 + }
114410 + else if(band == IEEE80211_BAND_5GHZ)
114411 + {
114412 + rtw_5g_channels_init(spt_band->channels);
114413 + rtw_5g_rates_init(spt_band->bitrates);
114414 + }
114415 +
114416 + //spt_band.ht_cap
114417 +
114418 +exit:
114419 +
114420 + return spt_band;
114421 +}
114422 +
114423 +void rtw_spt_band_free(struct ieee80211_supported_band *spt_band)
114424 +{
114425 + u32 size;
114426 +
114427 + if(!spt_band)
114428 + return;
114429 +
114430 + if(spt_band->band == IEEE80211_BAND_2GHZ)
114431 + {
114432 + size = sizeof(struct ieee80211_supported_band)
114433 + + sizeof(struct ieee80211_channel)*RTW_2G_CHANNELS_NUM
114434 + + sizeof(struct ieee80211_rate)*RTW_G_RATES_NUM;
114435 + }
114436 + else if(spt_band->band == IEEE80211_BAND_5GHZ)
114437 + {
114438 + size = sizeof(struct ieee80211_supported_band)
114439 + + sizeof(struct ieee80211_channel)*RTW_5G_CHANNELS_NUM
114440 + + sizeof(struct ieee80211_rate)*RTW_A_RATES_NUM;
114441 + }
114442 + else
114443 + {
114444 +
114445 + }
114446 + rtw_mfree((u8*)spt_band, size);
114447 +}
114448
114449 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
114450 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
114451 static const struct ieee80211_txrx_stypes
114452 rtw_cfg80211_default_mgmt_stypes[NUM_NL80211_IFTYPES] = {
114453 [NL80211_IFTYPE_ADHOC] = {
114454 @@ -217,6 +316,7 @@ static int rtw_ieee80211_channel_to_freq
114455 }
114456 }
114457
114458 +#define MAX_BSSINFO_LEN 1000
114459 static int rtw_cfg80211_inform_bss(_adapter *padapter, struct wlan_network *pnetwork)
114460 {
114461 int ret=0;
114462 @@ -231,30 +331,102 @@ static int rtw_cfg80211_inform_bss(_adap
114463 u8 *notify_ie;
114464 size_t notify_ielen;
114465 s32 notify_signal;
114466 - u8 buf[768], *pbuf;
114467 - size_t len;
114468 + u8 buf[MAX_BSSINFO_LEN], *pbuf;
114469 + size_t len,bssinf_len=0;
114470 struct rtw_ieee80211_hdr *pwlanhdr;
114471 unsigned short *fctrl;
114472 u8 bc_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
114473
114474 struct wireless_dev *wdev = padapter->rtw_wdev;
114475 struct wiphy *wiphy = wdev->wiphy;
114476 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
114477
114478
114479 - //printk("%s\n", __func__);
114480 -
114481 + //DBG_8192C("%s\n", __func__);
114482 +
114483 + bssinf_len = pnetwork->network.IELength+sizeof (struct rtw_ieee80211_hdr_3addr);
114484 + if(bssinf_len > MAX_BSSINFO_LEN){
114485 + DBG_871X("%s IE Length too long > %d byte \n",__FUNCTION__,MAX_BSSINFO_LEN);
114486 + goto exit;
114487 + }
114488 +
114489 + //To reduce PBC Overlap rate
114490 + //_enter_critical_bh(&pwdev_priv->scan_req_lock, &irqL);
114491 + if(wdev_to_priv(wdev)->scan_request != NULL)
114492 + {
114493 + u8 *psr=NULL, sr = 0;
114494 + NDIS_802_11_SSID *pssid = &pnetwork->network.Ssid;
114495 + struct cfg80211_scan_request *request = wdev_to_priv(wdev)->scan_request;
114496 + struct cfg80211_ssid *ssids = request->ssids;
114497 + u32 wpsielen=0;
114498 + u8 *wpsie=NULL;
114499 +
114500 + wpsie = rtw_get_wps_ie(pnetwork->network.IEs+_FIXED_IE_LENGTH_, pnetwork->network.IELength-_FIXED_IE_LENGTH_, NULL, &wpsielen);
114501 +
114502 + if(wpsie && wpsielen>0)
114503 + psr = rtw_get_wps_attr_content(wpsie, wpsielen, WPS_ATTR_SELECTED_REGISTRAR, (u8*)(&sr), NULL);
114504 +
114505 + if (sr != 0)
114506 + {
114507 + if(request->n_ssids == 1 && request->n_channels == 1) // it means under processing WPS
114508 + {
114509 + DBG_8192C("ssid=%s, len=%d\n", pssid->Ssid, pssid->SsidLength);
114510 +
114511 + if(pssid->SsidLength == ssids[0].ssid_len &&
114512 + _rtw_memcmp(pssid->Ssid, ssids[0].ssid, ssids[0].ssid_len))
114513 + {
114514 + DBG_871X("%s, got sr and ssid match!\n", __func__);
114515 + }
114516 + else
114517 + {
114518 + if(psr !=NULL)
114519 + *psr = 0; //clear sr
114520 +
114521 +#if 0
114522 + WLAN_BSSID_EX *pselect_network = &pnetwork->network;
114523 + struct cfg80211_bss *pselect_bss = NULL;
114524 + struct ieee80211_channel *notify_channel = NULL;
114525 + u32 freq;
114526 +
114527 + DBG_871X("%s, got sr, but ssid mismatch, to remove this bss\n", __func__);
114528 +
114529 + if (pselect_network->Configuration.DSConfig <= RTW_CH_MAX_2G_CHANNEL)
114530 + freq = rtw_ieee80211_channel_to_frequency(pselect_network->Configuration.DSConfig, IEEE80211_BAND_2GHZ);
114531 + else
114532 + freq = rtw_ieee80211_channel_to_frequency(pselect_network->Configuration.DSConfig, IEEE80211_BAND_5GHZ);
114533 +
114534 + notify_channel = ieee80211_get_channel(wiphy, freq);
114535 + pselect_bss = cfg80211_get_bss(wiphy, NULL/*notify_channel*/,
114536 + pselect_network->MacAddress, pselect_network->Ssid.Ssid,
114537 + pselect_network->Ssid.SsidLength, 0/*WLAN_CAPABILITY_ESS*/,
114538 + 0/*WLAN_CAPABILITY_ESS*/);
114539 +
114540 + if(pselect_bss)
114541 + {
114542 + DBG_871X("%s, got bss for cfg80211 for unlinking bss\n", __func__);
114543 +
114544 + cfg80211_unlink_bss(wiphy, pselect_bss);
114545 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0)
114546 + cfg80211_put_bss(wiphy, pselect_bss);
114547 +#else
114548 + cfg80211_put_bss(pselect_bss);
114549 +#endif
114550 +
114551 + }
114552 +
114553 + goto exit;
114554 +#endif
114555 + }
114556 + }
114557 + }
114558 + }
114559 + //_exit_critical_bh(&pwdev_priv->scan_req_lock, &irqL);
114560
114561 - channel = pnetwork->network.Configuration.DSConfig;
114562 + channel = pnetwork->network.Configuration.DSConfig;
114563 if (channel <= RTW_CH_MAX_2G_CHANNEL)
114564 - {
114565 - //band = wiphy->bands[IEEE80211_BAND_2GHZ];
114566 freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ);
114567 - }
114568 else
114569 - {
114570 - //band = wiphy->bands[IEEE80211_BAND_5GHZ];
114571 freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ);
114572 - }
114573
114574 notify_channel = ieee80211_get_channel(wiphy, freq);
114575
114576 @@ -267,53 +439,59 @@ static int rtw_cfg80211_inform_bss(_adap
114577
114578 notify_ie = pnetwork->network.IEs+_FIXED_IE_LENGTH_;
114579 notify_ielen = pnetwork->network.IELength-_FIXED_IE_LENGTH_;
114580 -
114581 - //notify_signal = (s16)le16_to_cpu(bi->RSSI) * 100;
114582
114583 //We've set wiphy's signal_type as CFG80211_SIGNAL_TYPE_MBM: signal strength in mBm (100*dBm)
114584 - notify_signal = 100*translate_percentage_to_dbm(pnetwork->network.PhyInfo.SignalStrength);//dbm
114585 + if ( check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE &&
114586 + is_same_network(&pmlmepriv->cur_network.network, &pnetwork->network)) {
114587 + notify_signal = 100*translate_percentage_to_dbm(padapter->recvpriv.signal_strength);//dbm
114588 + } else {
114589 + notify_signal = 100*translate_percentage_to_dbm(pnetwork->network.PhyInfo.SignalStrength);//dbm
114590 + }
114591
114592 /*
114593 - printk("bssid: %2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X\n",
114594 + DBG_8192C("bssid: %2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X\n",
114595 pnetwork->network.MacAddress[0], pnetwork->network.MacAddress[1], pnetwork->network.MacAddress[2],
114596 pnetwork->network.MacAddress[3], pnetwork->network.MacAddress[4], pnetwork->network.MacAddress[5]);
114597 - printk("Channel: %d(%d)\n", channel, freq);
114598 - printk("Capability: %X\n", notify_capability);
114599 - printk("Beacon interval: %d\n", notify_interval);
114600 - printk("Signal: %d\n", notify_signal);
114601 - printk("notify_timestamp: %#018llx\n", notify_timestamp);
114602 + DBG_8192C("Channel: %d(%d)\n", channel, freq);
114603 + DBG_8192C("Capability: %X\n", notify_capability);
114604 + DBG_8192C("Beacon interval: %d\n", notify_interval);
114605 + DBG_8192C("Signal: %d\n", notify_signal);
114606 + DBG_8192C("notify_timestamp: %#018llx\n", notify_timestamp);
114607 */
114608
114609 pbuf = buf;
114610 +
114611 pwlanhdr = (struct rtw_ieee80211_hdr *)pbuf;
114612 fctrl = &(pwlanhdr->frame_ctl);
114613 - *(fctrl) = 0;
114614 -
114615 + *(fctrl) = 0;
114616 +
114617 SetSeqNum(pwlanhdr, 0/*pmlmeext->mgnt_seq*/);
114618 //pmlmeext->mgnt_seq++;
114619 -
114620 - if (pnetwork->network.Reserved[0] == 1) { // WIFI_BEACON
114621
114622 + if (pnetwork->network.Reserved[0] == 1) { // WIFI_BEACON
114623 _rtw_memcpy(pwlanhdr->addr1, bc_addr, ETH_ALEN);
114624 -
114625 SetFrameSubType(pbuf, WIFI_BEACON);
114626 -
114627 } else {
114628 -
114629 - _rtw_memcpy(pwlanhdr->addr1, myid(&(padapter->eeprompriv)), ETH_ALEN);
114630 -
114631 + _rtw_memcpy(pwlanhdr->addr1, myid(&(padapter->eeprompriv)), ETH_ALEN);
114632 SetFrameSubType(pbuf, WIFI_PROBERSP);
114633 }
114634
114635 _rtw_memcpy(pwlanhdr->addr2, pnetwork->network.MacAddress, ETH_ALEN);
114636 _rtw_memcpy(pwlanhdr->addr3, pnetwork->network.MacAddress, ETH_ALEN);
114637 -
114638 +
114639
114640 pbuf += sizeof(struct rtw_ieee80211_hdr_3addr);
114641 len = sizeof (struct rtw_ieee80211_hdr_3addr);
114642
114643 _rtw_memcpy(pbuf, pnetwork->network.IEs, pnetwork->network.IELength);
114644 len += pnetwork->network.IELength;
114645 +
114646 + //#ifdef CONFIG_P2P
114647 + //if(rtw_get_p2p_ie(pnetwork->network.IEs+12, pnetwork->network.IELength-12, NULL, NULL))
114648 + //{
114649 + // DBG_8192C("%s, got p2p_ie\n", __func__);
114650 + //}
114651 + //#endif
114652
114653
114654 #if 1
114655 @@ -327,26 +505,96 @@ static int rtw_cfg80211_inform_bss(_adap
114656 #endif
114657
114658 if (unlikely(!bss)) {
114659 - printk("rtw_cfg80211_inform_bss error\n");
114660 + DBG_8192C("rtw_cfg80211_inform_bss error\n");
114661 return -EINVAL;
114662 }
114663
114664 +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38))
114665 +#ifndef COMPAT_KERNEL_RELEASE
114666 + //patch for cfg80211, update beacon ies to information_elements
114667 + if (pnetwork->network.Reserved[0] == 1) { // WIFI_BEACON
114668 +
114669 + if(bss->len_information_elements != bss->len_beacon_ies)
114670 + {
114671 + bss->information_elements = bss->beacon_ies;
114672 + bss->len_information_elements = bss->len_beacon_ies;
114673 + }
114674 + }
114675 +#endif //COMPAT_KERNEL_RELEASE
114676 +#endif //LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)
114677 +
114678 +/*
114679 + {
114680 + if( bss->information_elements == bss->proberesp_ies)
114681 + {
114682 + if( bss->len_information_elements != bss->len_proberesp_ies)
114683 + {
114684 + DBG_8192C("error!, len_information_elements != bss->len_proberesp_ies\n");
114685 + }
114686 +
114687 + }
114688 + else if(bss->len_information_elements < bss->len_beacon_ies)
114689 + {
114690 + bss->information_elements = bss->beacon_ies;
114691 + bss->len_information_elements = bss->len_beacon_ies;
114692 + }
114693 + }
114694 +*/
114695 +
114696 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0)
114697 + cfg80211_put_bss(wiphy, bss);
114698 +#else
114699 + cfg80211_put_bss(bss);
114700 +#endif
114701 +
114702 +exit:
114703 return ret;
114704
114705 }
114706
114707 +/*
114708 + Check the given bss is valid by kernel API cfg80211_get_bss()
114709 + @padapter : the given adapter
114710 +
114711 + return _TRUE if bss is valid, _FALSE for not found.
114712 +*/
114713 +int rtw_cfg80211_check_bss(_adapter *padapter)
114714 +{
114715 + WLAN_BSSID_EX *pnetwork = &(padapter->mlmeextpriv.mlmext_info.network);
114716 + struct cfg80211_bss *bss = NULL;
114717 + struct ieee80211_channel *notify_channel = NULL;
114718 + u32 freq;
114719 +
114720 + if (!(pnetwork) || !(padapter->rtw_wdev))
114721 + return _FALSE;
114722 +
114723 + if (pnetwork->Configuration.DSConfig <= RTW_CH_MAX_2G_CHANNEL)
114724 + freq = rtw_ieee80211_channel_to_frequency(pnetwork->Configuration.DSConfig, IEEE80211_BAND_2GHZ);
114725 + else
114726 + freq = rtw_ieee80211_channel_to_frequency(pnetwork->Configuration.DSConfig, IEEE80211_BAND_5GHZ);
114727 +
114728 + notify_channel = ieee80211_get_channel(padapter->rtw_wdev->wiphy, freq);
114729 + bss = cfg80211_get_bss(padapter->rtw_wdev->wiphy, notify_channel,
114730 + pnetwork->MacAddress, pnetwork->Ssid.Ssid,
114731 + pnetwork->Ssid.SsidLength,
114732 + WLAN_CAPABILITY_ESS, WLAN_CAPABILITY_ESS);
114733 +
114734 + return (bss!=NULL);
114735 +}
114736 +
114737 void rtw_cfg80211_indicate_connect(_adapter *padapter)
114738 {
114739 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
114740 struct wlan_network *cur_network = &(pmlmepriv->cur_network);
114741 struct wireless_dev *pwdev = padapter->rtw_wdev;
114742 +#ifdef CONFIG_P2P
114743 struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
114744 +#endif
114745 + struct cfg80211_bss *bss = NULL;
114746
114747 -
114748 - printk("%s\n", __func__);
114749 -
114750 + DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter));
114751 if (pwdev->iftype != NL80211_IFTYPE_STATION
114752 - #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
114753 + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
114754 && pwdev->iftype != NL80211_IFTYPE_P2P_CLIENT
114755 #endif
114756 ) {
114757 @@ -355,33 +603,59 @@ void rtw_cfg80211_indicate_connect(_adap
114758
114759 if(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
114760 return;
114761 -
114762 - if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
114763 +
114764 +#ifdef CONFIG_P2P
114765 + if(pwdinfo->driver_interface == DRIVER_CFG80211 )
114766 {
114767 - rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
114768 - rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT);
114769 - rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_OK);
114770 - printk("%s, role=%d, p2p_state=%d, pre_p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo), rtw_p2p_pre_state(pwdinfo));
114771 + if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
114772 + {
114773 + rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
114774 + rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT);
114775 + rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_OK);
114776 + DBG_8192C("%s, role=%d, p2p_state=%d, pre_p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo), rtw_p2p_pre_state(pwdinfo));
114777 + }
114778 }
114779 +#endif //CONFIG_P2P
114780
114781 #ifdef CONFIG_LAYER2_ROAMING
114782 - if(pmlmepriv->to_roaming > 0) {
114783 - //rtw_cfg80211_inform_bss(padapter, cur_network);
114784 + if (rtw_to_roaming(padapter) > 0) {
114785 + #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 39) || defined(COMPAT_KERNEL_RELEASE)
114786 + struct wiphy *wiphy = pwdev->wiphy;
114787 + struct ieee80211_channel *notify_channel;
114788 + u32 freq;
114789 + u16 channel = cur_network->network.Configuration.DSConfig;
114790 +
114791 + if (channel <= RTW_CH_MAX_2G_CHANNEL)
114792 + freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ);
114793 + else
114794 + freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ);
114795 +
114796 + notify_channel = ieee80211_get_channel(wiphy, freq);
114797 + #endif
114798 +
114799 DBG_871X("%s call cfg80211_roamed\n", __FUNCTION__);
114800 - cfg80211_roamed(padapter->pnetdev,
114801 - #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 39)
114802 - NULL,
114803 + cfg80211_roamed(padapter->pnetdev
114804 + #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 39) || defined(COMPAT_KERNEL_RELEASE)
114805 + , notify_channel
114806 #endif
114807 - cur_network->network.MacAddress,
114808 - cur_network->network.IEs+_FIXED_IE_LENGTH_, cur_network->network.IELength-_FIXED_IE_LENGTH_,
114809 - NULL, 0, GFP_ATOMIC
114810 - );
114811 + , cur_network->network.MacAddress
114812 + , pmlmepriv->assoc_req+sizeof(struct rtw_ieee80211_hdr_3addr)+2
114813 + , pmlmepriv->assoc_req_len-sizeof(struct rtw_ieee80211_hdr_3addr)-2
114814 + , pmlmepriv->assoc_rsp+sizeof(struct rtw_ieee80211_hdr_3addr)+6
114815 + , pmlmepriv->assoc_rsp_len-sizeof(struct rtw_ieee80211_hdr_3addr)-6
114816 + , GFP_ATOMIC);
114817 }
114818 else
114819 #endif
114820 {
114821 - cfg80211_connect_result(padapter->pnetdev, cur_network->network.MacAddress, NULL, 0, NULL, 0,
114822 - WLAN_STATUS_SUCCESS, GFP_ATOMIC/*GFP_KERNEL*/);
114823 + DBG_8192C("pwdev->sme_state(b)=%d\n", pwdev->sme_state);
114824 + cfg80211_connect_result(padapter->pnetdev, cur_network->network.MacAddress
114825 + , pmlmepriv->assoc_req+sizeof(struct rtw_ieee80211_hdr_3addr)+2
114826 + , pmlmepriv->assoc_req_len-sizeof(struct rtw_ieee80211_hdr_3addr)-2
114827 + , pmlmepriv->assoc_rsp+sizeof(struct rtw_ieee80211_hdr_3addr)+6
114828 + , pmlmepriv->assoc_rsp_len-sizeof(struct rtw_ieee80211_hdr_3addr)-6
114829 + , WLAN_STATUS_SUCCESS, GFP_ATOMIC);
114830 + DBG_8192C("pwdev->sme_state(a)=%d\n", pwdev->sme_state);
114831 }
114832 }
114833
114834 @@ -389,12 +663,14 @@ void rtw_cfg80211_indicate_disconnect(_a
114835 {
114836 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
114837 struct wireless_dev *pwdev = padapter->rtw_wdev;
114838 +#ifdef CONFIG_P2P
114839 struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
114840 +#endif
114841
114842 - printk("%s\n", __func__);
114843 + DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter));
114844
114845 if (pwdev->iftype != NL80211_IFTYPE_STATION
114846 - #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
114847 + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
114848 && pwdev->iftype != NL80211_IFTYPE_P2P_CLIENT
114849 #endif
114850 ) {
114851 @@ -404,28 +680,36 @@ void rtw_cfg80211_indicate_disconnect(_a
114852 if(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
114853 return;
114854
114855 -
114856 - if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
114857 +#ifdef CONFIG_P2P
114858 + if( pwdinfo->driver_interface == DRIVER_CFG80211 )
114859 {
114860 - _cancel_timer_ex( &pwdinfo->find_phase_timer );
114861 - _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
114862 - _cancel_timer_ex( &pwdinfo->pre_tx_scan_timer);
114863 + if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
114864 + {
114865 + _cancel_timer_ex( &pwdinfo->find_phase_timer );
114866 + _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
114867 + _cancel_timer_ex( &pwdinfo->pre_tx_scan_timer);
114868
114869 - rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
114870 - rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
114871 + rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
114872 + rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
114873
114874 - printk("%s, role=%d, p2p_state=%d, pre_p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo), rtw_p2p_pre_state(pwdinfo));
114875 + DBG_8192C("%s, role=%d, p2p_state=%d, pre_p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo), rtw_p2p_pre_state(pwdinfo));
114876 + }
114877 }
114878 +#endif //CONFIG_P2P
114879
114880 - if(pwdev->sme_state==CFG80211_SME_CONNECTING)
114881 - cfg80211_connect_result(padapter->pnetdev, NULL, NULL, 0, NULL, 0,
114882 - WLAN_STATUS_UNSPECIFIED_FAILURE, GFP_ATOMIC/*GFP_KERNEL*/);
114883 - else if(pwdev->sme_state==CFG80211_SME_CONNECTED)
114884 - cfg80211_disconnected(padapter->pnetdev, 0,
114885 - NULL, 0, GFP_ATOMIC);
114886 - else
114887 - printk("pwdev->sme_state=%d\n", pwdev->sme_state);
114888 + if (!padapter->mlmepriv.not_indic_disco) {
114889 + DBG_8192C("pwdev->sme_state(b)=%d\n", pwdev->sme_state);
114890 +
114891 + if(pwdev->sme_state==CFG80211_SME_CONNECTING)
114892 + cfg80211_connect_result(padapter->pnetdev, NULL, NULL, 0, NULL, 0,
114893 + WLAN_STATUS_UNSPECIFIED_FAILURE, GFP_ATOMIC/*GFP_KERNEL*/);
114894 + else if(pwdev->sme_state==CFG80211_SME_CONNECTED)
114895 + cfg80211_disconnected(padapter->pnetdev, 0, NULL, 0, GFP_ATOMIC);
114896 + //else
114897 + //DBG_8192C("pwdev->sme_state=%d\n", pwdev->sme_state);
114898
114899 + DBG_8192C("pwdev->sme_state(a)=%d\n", pwdev->sme_state);
114900 + }
114901 }
114902
114903
114904 @@ -493,6 +777,8 @@ static int set_group_key(_adapter *padap
114905 _rtw_memset(psetkeyparm, 0, sizeof(struct setkey_parm));
114906
114907 psetkeyparm->keyid=(u8)keyid;
114908 + if (is_wep_enc(alg))
114909 + padapter->securitypriv.key_mask |= BIT(psetkeyparm->keyid);
114910
114911 psetkeyparm->algorithm = alg;
114912
114913 @@ -558,7 +844,6 @@ static int rtw_cfg80211_ap_set_encryptio
114914 {
114915 int ret = 0;
114916 u32 wep_key_idx, wep_key_len,wep_total_len;
114917 - NDIS_802_11_WEP *pwep = NULL;
114918 struct sta_info *psta = NULL, *pbcmc_sta = NULL;
114919 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
114920 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
114921 @@ -624,67 +909,33 @@ static int rtw_cfg80211_ap_set_encryptio
114922 goto exit;
114923 }
114924
114925 -
114926 if (wep_key_len > 0)
114927 {
114928 wep_key_len = wep_key_len <= 5 ? 5 : 13;
114929 - wep_total_len = wep_key_len + FIELD_OFFSET(NDIS_802_11_WEP, KeyMaterial);
114930 - pwep =(NDIS_802_11_WEP *)rtw_malloc(wep_total_len);
114931 - if(pwep == NULL){
114932 - DBG_8192C(" r871x_set_encryption: pwep allocate fail !!!\n");
114933 - goto exit;
114934 - }
114935 -
114936 - _rtw_memset(pwep, 0, wep_total_len);
114937 -
114938 - pwep->KeyLength = wep_key_len;
114939 - pwep->Length = wep_total_len;
114940 -
114941 }
114942
114943 - pwep->KeyIndex = wep_key_idx;
114944 -
114945 - _rtw_memcpy(pwep->KeyMaterial, param->u.crypt.key, pwep->KeyLength);
114946 -
114947 - if(param->u.crypt.set_tx)
114948 + if (psecuritypriv->bWepDefaultKeyIdxSet == 0)
114949 {
114950 - DBG_8192C("wep, set_tx=1\n");
114951 + //wep default key has not been set, so use this key index as default key.
114952
114953 psecuritypriv->ndisencryptstatus = Ndis802_11Encryption1Enabled;
114954 psecuritypriv->dot11PrivacyAlgrthm=_WEP40_;
114955 psecuritypriv->dot118021XGrpPrivacy=_WEP40_;
114956
114957 - if(pwep->KeyLength==13)
114958 + if(wep_key_len == 13)
114959 {
114960 psecuritypriv->dot11PrivacyAlgrthm=_WEP104_;
114961 psecuritypriv->dot118021XGrpPrivacy=_WEP104_;
114962 }
114963
114964 -
114965 psecuritypriv->dot11PrivacyKeyIndex = wep_key_idx;
114966 -
114967 - _rtw_memcpy(&(psecuritypriv->dot11DefKey[wep_key_idx].skey[0]), pwep->KeyMaterial, pwep->KeyLength);
114968 -
114969 - psecuritypriv->dot11DefKeylen[wep_key_idx]=pwep->KeyLength;
114970 -
114971 - set_wep_key(padapter, pwep->KeyMaterial, pwep->KeyLength, wep_key_idx);
114972 -
114973 -
114974 }
114975 - else
114976 - {
114977 - DBG_8192C("wep, set_tx=0\n");
114978
114979 - //don't update "psecuritypriv->dot11PrivacyAlgrthm" and
114980 - //"psecuritypriv->dot11PrivacyKeyIndex=keyid", but can rtw_set_key to cam
114981 + _rtw_memcpy(&(psecuritypriv->dot11DefKey[wep_key_idx].skey[0]), param->u.crypt.key, wep_key_len);
114982
114983 - _rtw_memcpy(&(psecuritypriv->dot11DefKey[wep_key_idx].skey[0]), pwep->KeyMaterial, pwep->KeyLength);
114984 -
114985 - psecuritypriv->dot11DefKeylen[wep_key_idx] = pwep->KeyLength;
114986 + psecuritypriv->dot11DefKeylen[wep_key_idx] = wep_key_len;
114987
114988 - set_wep_key(padapter, pwep->KeyMaterial, pwep->KeyLength, wep_key_idx);
114989 -
114990 - }
114991 + set_wep_key(padapter, param->u.crypt.key, wep_key_len, wep_key_idx);
114992
114993 goto exit;
114994
114995 @@ -693,8 +944,7 @@ static int rtw_cfg80211_ap_set_encryptio
114996
114997 if(!psta && check_fwstate(pmlmepriv, WIFI_AP_STATE)) // //group key
114998 {
114999 - //if(param->u.crypt.set_tx == 1)
115000 - if(param->u.crypt.set_tx == 0)
115001 + if(param->u.crypt.set_tx == 0) //group key
115002 {
115003 if(strcmp(param->u.crypt.alg, "WEP") == 0)
115004 {
115005 @@ -765,7 +1015,7 @@ static int rtw_cfg80211_ap_set_encryptio
115006 {
115007 if(check_fwstate(pmlmepriv, WIFI_AP_STATE))
115008 {
115009 - if(param->u.crypt.set_tx ==1)
115010 + if(param->u.crypt.set_tx ==1) //pairwise key
115011 {
115012 _rtw_memcpy(psta->dot118021x_UncstKey.skey, param->u.crypt.key, (param->u.crypt.key_len>16 ?16:param->u.crypt.key_len));
115013
115014 @@ -874,11 +1124,6 @@ static int rtw_cfg80211_ap_set_encryptio
115015
115016 exit:
115017
115018 - if(pwep)
115019 - {
115020 - rtw_mfree((u8 *)pwep, wep_total_len);
115021 - }
115022 -
115023 return ret;
115024
115025 }
115026 @@ -888,7 +1133,6 @@ static int rtw_cfg80211_set_encryption(s
115027 {
115028 int ret = 0;
115029 u32 wep_key_idx, wep_key_len,wep_total_len;
115030 - NDIS_802_11_WEP *pwep = NULL;
115031 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
115032 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
115033 struct security_priv *psecuritypriv = &padapter->securitypriv;
115034 @@ -898,7 +1142,7 @@ static int rtw_cfg80211_set_encryption(s
115035
115036 _func_enter_;
115037
115038 - printk("%s\n", __func__);
115039 + DBG_8192C("%s\n", __func__);
115040
115041 param->u.crypt.err = 0;
115042 param->u.crypt.alg[IEEE_CRYPT_ALG_NAME_LEN - 1] = '\0';
115043 @@ -913,9 +1157,13 @@ _func_enter_;
115044 param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff &&
115045 param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff)
115046 {
115047 - if (param->u.crypt.idx >= WEP_KEYS)
115048 + if (param->u.crypt.idx >= WEP_KEYS
115049 +#ifdef CONFIG_IEEE80211W
115050 + && param->u.crypt.idx > BIP_MAX_KEYID
115051 +#endif //CONFIG_IEEE80211W
115052 + )
115053 {
115054 - ret = -EINVAL;
115055 + ret = -EINVAL;
115056 goto exit;
115057 }
115058 } else {
115059 @@ -928,77 +1176,39 @@ _func_enter_;
115060 RT_TRACE(_module_rtl871x_ioctl_os_c,_drv_err_,("wpa_set_encryption, crypt.alg = WEP\n"));
115061 DBG_8192C("wpa_set_encryption, crypt.alg = WEP\n");
115062
115063 - padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
115064 - padapter->securitypriv.dot11PrivacyAlgrthm=_WEP40_;
115065 - padapter->securitypriv.dot118021XGrpPrivacy=_WEP40_;
115066 -
115067 wep_key_idx = param->u.crypt.idx;
115068 wep_key_len = param->u.crypt.key_len;
115069
115070 - RT_TRACE(_module_rtl871x_ioctl_os_c,_drv_info_,("(1)wep_key_idx=%d\n", wep_key_idx));
115071 - DBG_8192C("(1)wep_key_idx=%d\n", wep_key_idx);
115072 -
115073 - if (wep_key_idx > WEP_KEYS)
115074 - return -EINVAL;
115075 -
115076 - RT_TRACE(_module_rtl871x_ioctl_os_c,_drv_info_,("(2)wep_key_idx=%d\n", wep_key_idx));
115077 -
115078 - if (wep_key_len > 0)
115079 + if ((wep_key_idx > WEP_KEYS) || (wep_key_len <= 0))
115080 {
115081 - wep_key_len = wep_key_len <= 5 ? 5 : 13;
115082 - wep_total_len = wep_key_len + FIELD_OFFSET(NDIS_802_11_WEP, KeyMaterial);
115083 - pwep =(NDIS_802_11_WEP *) rtw_malloc(wep_total_len);
115084 - if(pwep == NULL){
115085 - RT_TRACE(_module_rtl871x_ioctl_os_c,_drv_err_,(" wpa_set_encryption: pwep allocate fail !!!\n"));
115086 - goto exit;
115087 - }
115088 -
115089 - _rtw_memset(pwep, 0, wep_total_len);
115090 -
115091 - pwep->KeyLength = wep_key_len;
115092 - pwep->Length = wep_total_len;
115093 -
115094 - if(wep_key_len==13)
115095 - {
115096 - padapter->securitypriv.dot11PrivacyAlgrthm=_WEP104_;
115097 - padapter->securitypriv.dot118021XGrpPrivacy=_WEP104_;
115098 - }
115099 - }
115100 - else {
115101 ret = -EINVAL;
115102 goto exit;
115103 }
115104
115105 - pwep->KeyIndex = wep_key_idx;
115106 - pwep->KeyIndex |= 0x80000000;
115107 + if (psecuritypriv->bWepDefaultKeyIdxSet == 0)
115108 + {
115109 + //wep default key has not been set, so use this key index as default key.
115110
115111 - _rtw_memcpy(pwep->KeyMaterial, param->u.crypt.key, pwep->KeyLength);
115112 + wep_key_len = wep_key_len <= 5 ? 5 : 13;
115113
115114 - if(param->u.crypt.set_tx)
115115 - {
115116 - DBG_8192C("wep, set_tx=1\n");
115117 + psecuritypriv->ndisencryptstatus = Ndis802_11Encryption1Enabled;
115118 + psecuritypriv->dot11PrivacyAlgrthm = _WEP40_;
115119 + psecuritypriv->dot118021XGrpPrivacy = _WEP40_;
115120
115121 - if(rtw_set_802_11_add_wep(padapter, pwep) == (u8)_FAIL)
115122 + if(wep_key_len==13)
115123 {
115124 - ret = -EOPNOTSUPP ;
115125 + psecuritypriv->dot11PrivacyAlgrthm = _WEP104_;
115126 + psecuritypriv->dot118021XGrpPrivacy = _WEP104_;
115127 }
115128 +
115129 + psecuritypriv->dot11PrivacyKeyIndex = wep_key_idx;
115130 }
115131 - else
115132 - {
115133 - DBG_8192C("wep, set_tx=0\n");
115134
115135 - //don't update "psecuritypriv->dot11PrivacyAlgrthm" and
115136 - //"psecuritypriv->dot11PrivacyKeyIndex=keyid", but can rtw_set_key to fw/cam
115137 + _rtw_memcpy(&(psecuritypriv->dot11DefKey[wep_key_idx].skey[0]), param->u.crypt.key, wep_key_len);
115138
115139 - if (wep_key_idx >= WEP_KEYS) {
115140 - ret = -EOPNOTSUPP ;
115141 - goto exit;
115142 - }
115143 + psecuritypriv->dot11DefKeylen[wep_key_idx] = wep_key_len;
115144
115145 - _rtw_memcpy(&(psecuritypriv->dot11DefKey[wep_key_idx].skey[0]), pwep->KeyMaterial, pwep->KeyLength);
115146 - psecuritypriv->dot11DefKeylen[wep_key_idx]=pwep->KeyLength;
115147 - rtw_set_key(padapter, psecuritypriv, wep_key_idx, 0);
115148 - }
115149 + rtw_set_key(padapter, psecuritypriv, wep_key_idx, 0);
115150
115151 goto exit;
115152 }
115153 @@ -1008,14 +1218,14 @@ _func_enter_;
115154 struct sta_info * psta,*pbcmc_sta;
115155 struct sta_priv * pstapriv = &padapter->stapriv;
115156
115157 - //printk("%s, : dot11AuthAlgrthm == dot11AuthAlgrthm_8021X \n", __func__);
115158 + //DBG_8192C("%s, : dot11AuthAlgrthm == dot11AuthAlgrthm_8021X \n", __func__);
115159
115160 if (check_fwstate(pmlmepriv, WIFI_STATION_STATE | WIFI_MP_STATE) == _TRUE) //sta mode
115161 {
115162 psta = rtw_get_stainfo(pstapriv, get_bssid(pmlmepriv));
115163 if (psta == NULL) {
115164 //DEBUG_ERR( ("Set wpa_set_encryption: Obtain Sta_info fail \n"));
115165 - printk("%s, : Obtain Sta_info fail \n", __func__);
115166 + DBG_8192C("%s, : Obtain Sta_info fail \n", __func__);
115167 }
115168 else
115169 {
115170 @@ -1033,7 +1243,7 @@ _func_enter_;
115171 if(param->u.crypt.set_tx ==1)//pairwise key
115172 {
115173
115174 - printk("%s, : param->u.crypt.set_tx ==1 \n", __func__);
115175 + DBG_8192C("%s, : param->u.crypt.set_tx ==1 \n", __func__);
115176
115177 _rtw_memcpy(psta->dot118021x_UncstKey.skey, param->u.crypt.key, (param->u.crypt.key_len>16 ?16:param->u.crypt.key_len));
115178
115179 @@ -1047,29 +1257,50 @@ _func_enter_;
115180 //_set_timer(&padapter->securitypriv.tkip_timer, 50);
115181 }
115182
115183 - //DEBUG_ERR(("\n param->u.crypt.key_len=%d\n",param->u.crypt.key_len));
115184 - //DEBUG_ERR(("\n ~~~~stastakey:unicastkey\n"));
115185 - DBG_871X("\n ~~~~stastakey:unicastkey\n");
115186 + //DEBUG_ERR((" param->u.crypt.key_len=%d\n",param->u.crypt.key_len));
115187 + DBG_871X(" ~~~~set sta key:unicastkey\n");
115188
115189 rtw_setstakey_cmd(padapter, (unsigned char *)psta, _TRUE);
115190 }
115191 else//group key
115192 - {
115193 - _rtw_memcpy(padapter->securitypriv.dot118021XGrpKey[param->u.crypt.idx].skey, param->u.crypt.key,(param->u.crypt.key_len>16 ?16:param->u.crypt.key_len));
115194 - _rtw_memcpy(padapter->securitypriv.dot118021XGrptxmickey[param->u.crypt.idx].skey,&(param->u.crypt.key[16]),8);
115195 - _rtw_memcpy(padapter->securitypriv.dot118021XGrprxmickey[param->u.crypt.idx].skey,&(param->u.crypt.key[24]),8);
115196 - padapter->securitypriv.binstallGrpkey = _TRUE;
115197 - //DEBUG_ERR(("\n param->u.crypt.key_len=%d\n", param->u.crypt.key_len));
115198 - //DEBUG_ERR(("\n ~~~~stastakey:groupkey\n"));
115199 - DBG_871X("\n ~~~~stastakey:groupkey\n");
115200 -
115201 - padapter->securitypriv.dot118021XGrpKeyid = param->u.crypt.idx;
115202 -
115203 - rtw_set_key(padapter,&padapter->securitypriv,param->u.crypt.idx, 1);
115204 + {
115205 + if(strcmp(param->u.crypt.alg, "TKIP") == 0 || strcmp(param->u.crypt.alg, "CCMP") == 0)
115206 + {
115207 + _rtw_memcpy(padapter->securitypriv.dot118021XGrpKey[param->u.crypt.idx].skey, param->u.crypt.key,(param->u.crypt.key_len>16 ?16:param->u.crypt.key_len));
115208 + _rtw_memcpy(padapter->securitypriv.dot118021XGrptxmickey[param->u.crypt.idx].skey,&(param->u.crypt.key[16]),8);
115209 + _rtw_memcpy(padapter->securitypriv.dot118021XGrprxmickey[param->u.crypt.idx].skey,&(param->u.crypt.key[24]),8);
115210 + padapter->securitypriv.binstallGrpkey = _TRUE;
115211 + //DEBUG_ERR((" param->u.crypt.key_len=%d\n", param->u.crypt.key_len));
115212 + DBG_871X(" ~~~~set sta key:groupkey\n");
115213 +
115214 + padapter->securitypriv.dot118021XGrpKeyid = param->u.crypt.idx;
115215 +
115216 + rtw_set_key(padapter,&padapter->securitypriv,param->u.crypt.idx, 1);
115217 + }
115218 +#ifdef CONFIG_IEEE80211W
115219 + else if(strcmp(param->u.crypt.alg, "BIP") == 0)
115220 + {
115221 + int no;
115222 + //DBG_871X("BIP key_len=%d , index=%d @@@@@@@@@@@@@@@@@@\n", param->u.crypt.key_len, param->u.crypt.idx);
115223 + //save the IGTK key, length 16 bytes
115224 + _rtw_memcpy(padapter->securitypriv.dot11wBIPKey[param->u.crypt.idx].skey, param->u.crypt.key,(param->u.crypt.key_len>16 ?16:param->u.crypt.key_len));
115225 + /*DBG_871X("IGTK key below:\n");
115226 + for(no=0;no<16;no++)
115227 + printk(" %02x ", padapter->securitypriv.dot11wBIPKey[param->u.crypt.idx].skey[no]);
115228 + DBG_871X("\n");*/
115229 + padapter->securitypriv.dot11wBIPKeyid = param->u.crypt.idx;
115230 + padapter->securitypriv.binstallBIPkey = _TRUE;
115231 + DBG_871X(" ~~~~set sta key:IGKT\n");
115232 + }
115233 +#endif //CONFIG_IEEE80211W
115234 +
115235 #ifdef CONFIG_P2P
115236 - if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_PROVISIONING_ING))
115237 + if(pwdinfo->driver_interface == DRIVER_CFG80211 )
115238 {
115239 - rtw_p2p_set_state(pwdinfo, P2P_STATE_PROVISIONING_DONE);
115240 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_PROVISIONING_ING))
115241 + {
115242 + rtw_p2p_set_state(pwdinfo, P2P_STATE_PROVISIONING_DONE);
115243 + }
115244 }
115245 #endif //CONFIG_P2P
115246
115247 @@ -1101,11 +1332,7 @@ _func_enter_;
115248
115249 exit:
115250
115251 - printk("%s, ret=%d\n", __func__, ret);
115252 -
115253 - if (pwep) {
115254 - rtw_mfree((u8 *)pwep,wep_total_len);
115255 - }
115256 + DBG_8192C("%s, ret=%d\n", __func__, ret);
115257
115258 _func_exit_;
115259
115260 @@ -1113,7 +1340,7 @@ exit:
115261 }
115262
115263 static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev,
115264 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
115265 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
115266 u8 key_index, bool pairwise, const u8 *mac_addr,
115267 #else // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
115268 u8 key_index, const u8 *mac_addr,
115269 @@ -1128,22 +1355,15 @@ static int cfg80211_rtw_add_key(struct w
115270 _adapter *padapter = wiphy_to_adapter(wiphy);
115271 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
115272
115273 -
115274 - printk("%s, Adding key for %pM\n", __func__, mac_addr);
115275 -
115276 - printk("cipher=0x%x\n", params->cipher);
115277 -
115278 - printk("key_len=0x%x\n", params->key_len);
115279 -
115280 - printk("seq_len=0x%x\n", params->seq_len);
115281 -
115282 - printk("key_index=%d\n", key_index);
115283 -
115284 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
115285 - printk("pairwise=%d\n", pairwise);
115286 + DBG_871X(FUNC_NDEV_FMT" adding key for %pM\n", FUNC_NDEV_ARG(ndev), mac_addr);
115287 + DBG_871X("cipher=0x%x\n", params->cipher);
115288 + DBG_871X("key_len=0x%x\n", params->key_len);
115289 + DBG_871X("seq_len=0x%x\n", params->seq_len);
115290 + DBG_871X("key_index=%d\n", key_index);
115291 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
115292 + DBG_871X("pairwise=%d\n", pairwise);
115293 #endif // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
115294
115295 -
115296 param_len = sizeof(struct ieee_param) + params->key_len;
115297 param = (struct ieee_param *)rtw_malloc(param_len);
115298 if (param == NULL)
115299 @@ -1170,6 +1390,11 @@ static int cfg80211_rtw_add_key(struct w
115300 case WLAN_CIPHER_SUITE_CCMP:
115301 alg_name = "CCMP";
115302 break;
115303 +#ifdef CONFIG_IEEE80211W
115304 + case WLAN_CIPHER_SUITE_AES_CMAC:
115305 + alg_name = "BIP";
115306 + break;
115307 +#endif //CONFIG_IEEE80211W
115308 default:
115309 return -ENOTSUPP;
115310 }
115311 @@ -1179,9 +1404,9 @@ static int cfg80211_rtw_add_key(struct w
115312
115313 if (!mac_addr || is_broadcast_ether_addr(mac_addr))
115314 {
115315 - param->u.crypt.set_tx = 0;
115316 + param->u.crypt.set_tx = 0; //for wpa/wpa2 group key
115317 } else {
115318 - param->u.crypt.set_tx = 1;
115319 + param->u.crypt.set_tx = 1; //for wpa/wpa2 pairwise key
115320 }
115321
115322
115323 @@ -1199,12 +1424,11 @@ static int cfg80211_rtw_add_key(struct w
115324 _rtw_memcpy(param->u.crypt.key, params->key, params->key_len);
115325 }
115326
115327 - //if(rtw_wdev->iftype == NL80211_IFTYPE_STATION)
115328 if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) == _TRUE)
115329 {
115330 ret = rtw_cfg80211_set_encryption(ndev, param, param_len);
115331 }
115332 - else if(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)//else if(rtw_wdev->iftype == NL80211_IFTYPE_AP)
115333 + else if(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
115334 {
115335 #ifdef CONFIG_AP_MODE
115336 if(mac_addr)
115337 @@ -1215,7 +1439,7 @@ static int cfg80211_rtw_add_key(struct w
115338 }
115339 else
115340 {
115341 - printk("error! fw_state=0x%x, iftype=%d\n", pmlmepriv->fw_state, rtw_wdev->iftype);
115342 + DBG_8192C("error! fw_state=0x%x, iftype=%d\n", pmlmepriv->fw_state, rtw_wdev->iftype);
115343
115344 }
115345
115346 @@ -1229,7 +1453,7 @@ static int cfg80211_rtw_add_key(struct w
115347 }
115348
115349 static int cfg80211_rtw_get_key(struct wiphy *wiphy, struct net_device *ndev,
115350 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
115351 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
115352 u8 key_index, bool pairwise, const u8 *mac_addr,
115353 #else // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
115354 u8 key_index, const u8 *mac_addr,
115355 @@ -1256,123 +1480,165 @@ static int cfg80211_rtw_get_key(struct w
115356 callback(cookie, &params);
115357
115358 return key->key_len ? 0 : -ENOENT;
115359 -#endif
115360 - printk("%s\n", __func__);
115361 +#endif
115362 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
115363 return 0;
115364 }
115365
115366 static int cfg80211_rtw_del_key(struct wiphy *wiphy, struct net_device *ndev,
115367 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
115368 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
115369 u8 key_index, bool pairwise, const u8 *mac_addr)
115370 #else // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
115371 u8 key_index, const u8 *mac_addr)
115372 #endif // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
115373 {
115374 -#if 0
115375 - struct iwm_priv *iwm = ndev_to_iwm(ndev);
115376 - struct iwm_key *key = &iwm->keys[key_index];
115377 + _adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);
115378 + struct security_priv *psecuritypriv = &padapter->securitypriv;
115379
115380 - if (!iwm->keys[key_index].key_len) {
115381 - IWM_DBG_WEXT(iwm, DBG, "Key %d not used\n", key_index);
115382 - return 0;
115383 - }
115384 + DBG_871X(FUNC_NDEV_FMT" key_index=%d\n", FUNC_NDEV_ARG(ndev), key_index);
115385
115386 - if (key_index == iwm->default_key)
115387 - iwm->default_key = -1;
115388 + if (key_index == psecuritypriv->dot11PrivacyKeyIndex)
115389 + {
115390 + //clear the flag of wep default key set.
115391 + psecuritypriv->bWepDefaultKeyIdxSet = 0;
115392 + }
115393
115394 - return iwm_set_key(iwm, 1, key);
115395 -#endif
115396 - printk("%s\n", __func__);
115397 return 0;
115398 }
115399
115400 static int cfg80211_rtw_set_default_key(struct wiphy *wiphy,
115401 - struct net_device *ndev,
115402 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
115403 - u8 key_index, bool unicast, bool multicast)
115404 -#else // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
115405 - u8 key_index)
115406 -#endif // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
115407 + struct net_device *ndev, u8 key_index
115408 + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
115409 + , bool unicast, bool multicast
115410 + #endif
115411 + )
115412 {
115413 -#if 0
115414 - struct iwm_priv *iwm = ndev_to_iwm(ndev);
115415 + _adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);
115416 + struct security_priv *psecuritypriv = &padapter->securitypriv;
115417 +
115418 + DBG_871X(FUNC_NDEV_FMT" key_index=%d"
115419 + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
115420 + ", unicast=%d, multicast=%d"
115421 + #endif
115422 + ".\n", FUNC_NDEV_ARG(ndev), key_index
115423 + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
115424 + , unicast, multicast
115425 + #endif
115426 + );
115427
115428 - IWM_DBG_WEXT(iwm, DBG, "Default key index is: %d\n", key_index);
115429 + if ((key_index < WEP_KEYS) && ((psecuritypriv->dot11PrivacyAlgrthm == _WEP40_) || (psecuritypriv->dot11PrivacyAlgrthm == _WEP104_))) //set wep default key
115430 + {
115431 + psecuritypriv->ndisencryptstatus = Ndis802_11Encryption1Enabled;
115432
115433 - if (!iwm->keys[key_index].key_len) {
115434 - IWM_ERR(iwm, "Key %d not used\n", key_index);
115435 - return -EINVAL;
115436 - }
115437 + psecuritypriv->dot11PrivacyKeyIndex = key_index;
115438
115439 - iwm->default_key = key_index;
115440 + psecuritypriv->dot11PrivacyAlgrthm = _WEP40_;
115441 + psecuritypriv->dot118021XGrpPrivacy = _WEP40_;
115442 + if (psecuritypriv->dot11DefKeylen[key_index] == 13)
115443 + {
115444 + psecuritypriv->dot11PrivacyAlgrthm = _WEP104_;
115445 + psecuritypriv->dot118021XGrpPrivacy = _WEP104_;
115446 + }
115447 +
115448 + psecuritypriv->bWepDefaultKeyIdxSet = 1; //set the flag to represent that wep default key has been set
115449 + }
115450
115451 - return iwm_set_tx_key(iwm, key_index);
115452 -#endif
115453 - printk("%s\n", __func__);
115454 return 0;
115455 +
115456 }
115457
115458 static int cfg80211_rtw_get_station(struct wiphy *wiphy,
115459 struct net_device *ndev,
115460 u8 *mac, struct station_info *sinfo)
115461 {
115462 + int ret = 0;
115463 _adapter *padapter = wiphy_to_adapter(wiphy);
115464 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
115465 + struct sta_info *psta = NULL;
115466 + struct sta_priv *pstapriv = &padapter->stapriv;
115467 +
115468 + sinfo->filled = 0;
115469 +
115470 + if (!mac) {
115471 + DBG_871X(FUNC_NDEV_FMT" mac==%p\n", FUNC_NDEV_ARG(ndev), mac);
115472 + ret = -ENOENT;
115473 + goto exit;
115474 + }
115475
115476 - if(!mac) {
115477 - DBG_871X("%s, mac==%p\n", __func__, mac);
115478 - return -ENOENT;
115479 + psta = rtw_get_stainfo(pstapriv, mac);
115480 + if (psta == NULL) {
115481 + DBG_8192C("%s, sta_info is null\n", __func__);
115482 + ret = -ENOENT;
115483 + goto exit;
115484 }
115485
115486 #ifdef CONFIG_DEBUG_CFG80211
115487 - DBG_871X("%s, mac="MAC_FMT"\n", __func__, MAC_ARG(mac));
115488 + DBG_871X(FUNC_NDEV_FMT" mac="MAC_FMT"\n", FUNC_NDEV_ARG(ndev), MAC_ARG(mac));
115489 #endif
115490
115491 //for infra./P2PClient mode
115492 - if(check_fwstate(pmlmepriv, WIFI_STATION_STATE)
115493 + if( check_fwstate(pmlmepriv, WIFI_STATION_STATE)
115494 && check_fwstate(pmlmepriv, _FW_LINKED)
115495 )
115496 {
115497 struct wlan_network *cur_network = &(pmlmepriv->cur_network);
115498 -
115499 - if (_rtw_memcmp(mac, cur_network->network.MacAddress, ETH_ALEN) == _FALSE)
115500 - {
115501 +
115502 + if (_rtw_memcmp(mac, cur_network->network.MacAddress, ETH_ALEN) == _FALSE) {
115503 DBG_871X("%s, mismatch bssid="MAC_FMT"\n", __func__, MAC_ARG(cur_network->network.MacAddress));
115504 - return -ENOENT;
115505 + ret = -ENOENT;
115506 + goto exit;
115507 }
115508
115509 sinfo->filled |= STATION_INFO_SIGNAL;
115510 sinfo->signal = translate_percentage_to_dbm(padapter->recvpriv.signal_strength);
115511
115512 sinfo->filled |= STATION_INFO_TX_BITRATE;
115513 - sinfo->txrate.legacy = 10 * rtw_get_network_max_rate(padapter, &pmlmepriv->cur_network.network);
115514 + sinfo->txrate.legacy = rtw_get_cur_max_rate(padapter);
115515 +
115516 + sinfo->filled |= STATION_INFO_RX_PACKETS;
115517 + sinfo->rx_packets = sta_rx_data_pkts(psta);
115518 +
115519 + sinfo->filled |= STATION_INFO_TX_PACKETS;
115520 + sinfo->tx_packets = psta->sta_stats.tx_pkts;
115521 +
115522 }
115523 -
115524 +
115525 //for Ad-Hoc/AP mode
115526 if ((check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)
115527 - ||check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)
115528 - ||check_fwstate(pmlmepriv, WIFI_AP_STATE) )
115529 + ||check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)
115530 + ||check_fwstate(pmlmepriv, WIFI_AP_STATE))
115531 && check_fwstate(pmlmepriv, _FW_LINKED)
115532 )
115533 {
115534 - struct sta_info *psta = NULL;
115535 - struct sta_priv *pstapriv = &padapter->stapriv;
115536 -
115537 - psta = rtw_get_stainfo(pstapriv, mac);
115538 - if(psta == NULL)
115539 - {
115540 - printk("%s, sta_info is null\n", __func__);
115541 - return -ENOENT;
115542 - }
115543 -
115544 //TODO: should acquire station info...
115545 }
115546
115547 - return 0;
115548 +exit:
115549 + return ret;
115550 }
115551
115552 extern int netdev_open(struct net_device *pnetdev);
115553 +#ifdef CONFIG_CONCURRENT_MODE
115554 +extern int netdev_if2_open(struct net_device *pnetdev);
115555 +#endif
115556
115557 +/*
115558 +enum nl80211_iftype {
115559 + NL80211_IFTYPE_UNSPECIFIED,
115560 + NL80211_IFTYPE_ADHOC, //1
115561 + NL80211_IFTYPE_STATION, //2
115562 + NL80211_IFTYPE_AP, //3
115563 + NL80211_IFTYPE_AP_VLAN,
115564 + NL80211_IFTYPE_WDS,
115565 + NL80211_IFTYPE_MONITOR, //6
115566 + NL80211_IFTYPE_MESH_POINT,
115567 + NL80211_IFTYPE_P2P_CLIENT, //8
115568 + NL80211_IFTYPE_P2P_GO, //9
115569 + //keep last
115570 + NUM_NL80211_IFTYPES,
115571 + NL80211_IFTYPE_MAX = NUM_NL80211_IFTYPES - 1
115572 +};
115573 +*/
115574 static int cfg80211_rtw_change_iface(struct wiphy *wiphy,
115575 struct net_device *ndev,
115576 enum nl80211_iftype type, u32 *flags,
115577 @@ -1381,60 +1647,99 @@ static int cfg80211_rtw_change_iface(str
115578 enum nl80211_iftype old_type;
115579 NDIS_802_11_NETWORK_INFRASTRUCTURE networkType ;
115580 _adapter *padapter = wiphy_to_adapter(wiphy);
115581 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
115582 struct wireless_dev *rtw_wdev = wiphy_to_wdev(wiphy);
115583 - struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
115584 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
115585 + _irqL irqL;
115586 + _queue *queue = &pmlmepriv->scanned_queue;
115587 +#ifdef CONFIG_P2P
115588 + struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
115589 +#endif
115590 int ret = 0;
115591 u8 change = _FALSE;
115592
115593 -
115594 - DBG_871X("%s call netdev_open\n", __FUNCTION__);
115595 - if(netdev_open(ndev) != 0) {
115596 + if (adapter_to_dvobj(padapter)->processing_dev_remove == _TRUE) {
115597 ret= -EPERM;
115598 goto exit;
115599 }
115600
115601 +#ifdef CONFIG_CONCURRENT_MODE
115602 + if(padapter->adapter_type == SECONDARY_ADAPTER)
115603 + {
115604 + DBG_871X(FUNC_NDEV_FMT" call netdev_if2_open\n", FUNC_NDEV_ARG(ndev));
115605 + if(netdev_if2_open(ndev) != 0) {
115606 + ret= -EPERM;
115607 + goto exit;
115608 + }
115609 + }
115610 + else if(padapter->adapter_type == PRIMARY_ADAPTER)
115611 +#endif //CONFIG_CONCURRENT_MODE
115612 + {
115613 + DBG_871X(FUNC_NDEV_FMT" call netdev_open\n", FUNC_NDEV_ARG(ndev));
115614 + if(netdev_open(ndev) != 0) {
115615 + ret= -EPERM;
115616 + goto exit;
115617 + }
115618 + }
115619 +
115620 if(_FAIL == rtw_pwr_wakeup(padapter)) {
115621 ret= -EPERM;
115622 goto exit;
115623 }
115624
115625 old_type = rtw_wdev->iftype;
115626 - printk("%s, old_iftype=%d, new_iftype=%d\n", __func__, old_type, type);
115627 -
115628 -
115629 + DBG_871X(FUNC_NDEV_FMT" old_iftype=%d, new_iftype=%d\n",
115630 + FUNC_NDEV_ARG(ndev), old_type, type);
115631
115632 if(old_type != type)
115633 + {
115634 change = _TRUE;
115635 + pmlmeext->action_public_rxseq = 0xffff;
115636 + pmlmeext->action_public_dialog_token = 0xff;
115637 + }
115638
115639 -
115640 switch (type) {
115641 case NL80211_IFTYPE_ADHOC:
115642 networkType = Ndis802_11IBSS;
115643 break;
115644 +#if defined(CONFIG_P2P) && ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE))
115645 + case NL80211_IFTYPE_P2P_CLIENT:
115646 +#endif
115647 case NL80211_IFTYPE_STATION:
115648 networkType = Ndis802_11Infrastructure;
115649 - if(change && rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
115650 + #ifdef CONFIG_P2P
115651 + if(pwdinfo->driver_interface == DRIVER_CFG80211 )
115652 {
115653 + if(change && rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
115654 + {
115655 + _cancel_timer_ex( &pwdinfo->find_phase_timer );
115656 + _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
115657 + _cancel_timer_ex( &pwdinfo->pre_tx_scan_timer);
115658
115659 - _cancel_timer_ex( &pwdinfo->find_phase_timer );
115660 - _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
115661 - _cancel_timer_ex( &pwdinfo->pre_tx_scan_timer);
115662 -
115663 - //it means remove GO and change mode from AP(GO) to station(P2P DEVICE)
115664 - rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
115665 - rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
115666 + //it means remove GO and change mode from AP(GO) to station(P2P DEVICE)
115667 + rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
115668 + rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
115669
115670 - printk("%s, role=%d, p2p_state=%d, pre_p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo), rtw_p2p_pre_state(pwdinfo));
115671 -
115672 + DBG_8192C("%s, role=%d, p2p_state=%d, pre_p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo), rtw_p2p_pre_state(pwdinfo));
115673 + }
115674 }
115675 + #endif //CONFIG_P2P
115676 break;
115677 +#if defined(CONFIG_P2P) && ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE))
115678 + case NL80211_IFTYPE_P2P_GO:
115679 +#endif
115680 case NL80211_IFTYPE_AP:
115681 networkType = Ndis802_11APMode;
115682 - if(change && !rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
115683 + #ifdef CONFIG_P2P
115684 + if(pwdinfo->driver_interface == DRIVER_CFG80211 )
115685 {
115686 - //it means P2P Group created, we will be GO and change mode from P2P DEVICE to AP(GO)
115687 - rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO);
115688 - }
115689 + if(change && !rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
115690 + {
115691 + //it means P2P Group created, we will be GO and change mode from P2P DEVICE to AP(GO)
115692 + rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO);
115693 + }
115694 + }
115695 + #endif //CONFIG_P2P
115696 break;
115697 default:
115698 return -EOPNOTSUPP;
115699 @@ -1442,12 +1747,19 @@ static int cfg80211_rtw_change_iface(str
115700
115701 rtw_wdev->iftype = type;
115702
115703 + _enter_critical_bh(&pmlmepriv->lock, &irqL);
115704 + _enter_critical_bh(&queue->lock, &irqL);
115705 +
115706 if (rtw_set_802_11_infrastructure_mode(padapter, networkType) ==_FALSE)
115707 {
115708 rtw_wdev->iftype = old_type;
115709 ret = -EPERM;
115710 + _exit_critical_bh(&queue->lock, &irqL);
115711 + _exit_critical_bh(&pmlmepriv->lock, &irqL);
115712 goto exit;
115713 }
115714 + _exit_critical_bh(&queue->lock, &irqL);
115715 + _exit_critical_bh(&pmlmepriv->lock, &irqL);
115716
115717 rtw_setopmode_cmd(padapter, networkType);
115718
115719 @@ -1465,18 +1777,27 @@ void rtw_cfg80211_indicate_scan_done(str
115720 {
115721 //struct cfg80211_scan_request *scan_request = pwdev_priv->scan_request;
115722
115723 -#ifdef CONFIG_DEBUG_CFG80211
115724 + #ifdef CONFIG_DEBUG_CFG80211
115725 DBG_871X("%s with scan req\n", __FUNCTION__);
115726 -#endif
115727 + #endif
115728
115729 //avoid WARN_ON(request != wiphy_to_dev(request->wiphy)->scan_req);
115730 //if(scan_request == wiphy_to_dev(scan_request->wiphy)->scan_req)
115731 + if(pwdev_priv->scan_request->wiphy != pwdev_priv->rtw_wdev->wiphy)
115732 + {
115733 + DBG_8192C("error wiphy compare\n");
115734 + }
115735 + else
115736 + {
115737 + cfg80211_scan_done(pwdev_priv->scan_request, aborted);
115738 + }
115739
115740 - cfg80211_scan_done(pwdev_priv->scan_request, aborted);
115741 pwdev_priv->scan_request = NULL;
115742
115743 } else {
115744 - DBG_871X("%s without scan req\n", __FUNCTION__);
115745 + #ifdef CONFIG_DEBUG_CFG80211
115746 + DBG_871X("%s without scan req\n", __FUNCTION__);
115747 + #endif
115748 }
115749 _exit_critical_bh(&pwdev_priv->scan_req_lock, &irqL);
115750 }
115751 @@ -1498,46 +1819,7 @@ void rtw_cfg80211_surveydone_event_callb
115752 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
115753
115754 #ifdef CONFIG_DEBUG_CFG80211
115755 - printk("%s\n", __func__);
115756 -#endif
115757 -
115758 -#if 0
115759 - if(padapter->pwrctrlpriv.brfoffbyhw && padapter->bDriverStopped)
115760 - {
115761 - return;
115762 - }
115763 -
115764 -#ifdef CONFIG_P2P
115765 - if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
115766 - {
115767 - // P2P is enabled
115768 - wait_for_surveydone = 200;
115769 - }
115770 - else
115771 - {
115772 - // P2P is disabled
115773 - wait_for_surveydone = 100;
115774 - }
115775 -#else
115776 - {
115777 - wait_for_surveydone = 100;
115778 - }
115779 -#endif //CONFIG_P2P
115780 -
115781 -
115782 - wait_status = _FW_UNDER_SURVEY
115783 - #ifndef CONFIG_ANDROID
115784 - |_FW_UNDER_LINKING
115785 - #endif
115786 - ;
115787 -
115788 - while(check_fwstate(pmlmepriv, wait_status) == _TRUE)
115789 - {
115790 - rtw_msleep_os(30);
115791 - cnt++;
115792 - if(cnt > wait_for_surveydone )
115793 - break;
115794 - }
115795 + DBG_8192C("%s\n", __func__);
115796 #endif
115797
115798 _enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
115799 @@ -1553,10 +1835,9 @@ void rtw_cfg80211_surveydone_event_callb
115800 pnetwork = LIST_CONTAINOR(plist, struct wlan_network, list);
115801
115802 //report network only if the current channel set contains the channel to which this network belongs
115803 - if( _TRUE == rtw_is_channel_set_contains_channel(padapter->mlmeextpriv.channel_set, pnetwork->network.Configuration.DSConfig)
115804 - #ifdef CONFIG_VALIDATE_SSID
115805 + if(rtw_ch_set_search_ch(padapter->mlmeextpriv.channel_set, pnetwork->network.Configuration.DSConfig) >= 0
115806 + && rtw_mlme_band_check(padapter, pnetwork->network.Configuration.DSConfig) == _TRUE
115807 && _TRUE == rtw_validate_ssid(&(pnetwork->network.Ssid))
115808 - #endif
115809 )
115810 {
115811 //ev=translate_scan(padapter, a, pnetwork, ev, stop);
115812 @@ -1568,44 +1849,24 @@ void rtw_cfg80211_surveydone_event_callb
115813 }
115814
115815 _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
115816 -
115817 - #if 0
115818 - // Disable P2P Listen State
115819 - if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
115820 - {
115821 - _cancel_timer_ex( &pwdinfo->find_phase_timer );
115822 - _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
115823 - _cancel_timer_ex( &pwdinfo->pre_tx_scan_timer);
115824 -
115825 - //rtw_p2p_set_state(pwdinfo, P2P_STATE_NONE);
115826 - rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
115827 -#ifdef CONFIG_DEBUG_CFG80211
115828 - printk("%s, role=%d, p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo));
115829 -#endif
115830 -
115831 - if(pwrpriv->bips_processing == _FALSE){
115832 - rtw_set_pwr_state_check_timer(pwrpriv);
115833 - }
115834 - }
115835 - #endif
115836 -
115837 +
115838 //call this after other things have been done
115839 - rtw_indicate_scan_done(padapter, _FALSE);
115840 -
115841 + rtw_cfg80211_indicate_scan_done(wdev_to_priv(padapter->rtw_wdev), _FALSE);
115842 }
115843
115844 -static int rtw_cfg80211_set_probe_req_wpsp2pie(struct net_device *net, char *buf, int len)
115845 +static int rtw_cfg80211_set_probe_req_wpsp2pie(_adapter *padapter, char *buf, int len)
115846 {
115847 int ret = 0;
115848 uint wps_ielen = 0;
115849 u8 *wps_ie;
115850 u32 p2p_ielen = 0;
115851 u8 *p2p_ie;
115852 - _adapter *padapter = (_adapter *)rtw_netdev_priv(net);
115853 + u32 wfd_ielen = 0;
115854 + u8 *wfd_ie;
115855 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
115856
115857 #ifdef CONFIG_DEBUG_CFG80211
115858 - printk("%s, ielen=%d\n", __func__, len);
115859 + DBG_8192C("%s, ielen=%d\n", __func__, len);
115860 #endif
115861
115862 if(len>0)
115863 @@ -1613,7 +1874,7 @@ static int rtw_cfg80211_set_probe_req_wp
115864 if((wps_ie = rtw_get_wps_ie(buf, len, NULL, &wps_ielen)))
115865 {
115866 #ifdef CONFIG_DEBUG_CFG80211
115867 - printk("probe_req_wps_ielen=%d\n", wps_ielen);
115868 + DBG_8192C("probe_req_wps_ielen=%d\n", wps_ielen);
115869 #endif
115870
115871 if(pmlmepriv->wps_probe_req_ie)
115872 @@ -1626,7 +1887,7 @@ static int rtw_cfg80211_set_probe_req_wp
115873
115874 pmlmepriv->wps_probe_req_ie = rtw_malloc(wps_ielen);
115875 if ( pmlmepriv->wps_probe_req_ie == NULL) {
115876 - printk("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
115877 + DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
115878 return -EINVAL;
115879
115880 }
115881 @@ -1634,12 +1895,18 @@ static int rtw_cfg80211_set_probe_req_wp
115882 pmlmepriv->wps_probe_req_ie_len = wps_ielen;
115883 }
115884
115885 - buf += wps_ielen;
115886 - len -= wps_ielen;
115887 + //buf += wps_ielen;
115888 + //len -= wps_ielen;
115889 +
115890 + #ifdef CONFIG_P2P
115891 if((p2p_ie=rtw_get_p2p_ie(buf, len, NULL, &p2p_ielen)))
115892 {
115893 + struct wifidirect_info *wdinfo = &padapter->wdinfo;
115894 + u32 attr_contentlen = 0;
115895 + u8 listen_ch_attr[5];
115896 +
115897 #ifdef CONFIG_DEBUG_CFG80211
115898 - printk("probe_req_p2p_ielen=%d\n", p2p_ielen);
115899 + DBG_8192C("probe_req_p2p_ielen=%d\n", p2p_ielen);
115900 #endif
115901
115902 if(pmlmepriv->p2p_probe_req_ie)
115903 @@ -1650,58 +1917,67 @@ static int rtw_cfg80211_set_probe_req_wp
115904 pmlmepriv->p2p_probe_req_ie = NULL;
115905 }
115906
115907 - pmlmepriv->p2p_probe_req_ie = rtw_malloc(len);
115908 + pmlmepriv->p2p_probe_req_ie = rtw_malloc(p2p_ielen);
115909 if ( pmlmepriv->p2p_probe_req_ie == NULL) {
115910 - printk("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
115911 + DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
115912 return -EINVAL;
115913
115914 }
115915 _rtw_memcpy(pmlmepriv->p2p_probe_req_ie, p2p_ie, p2p_ielen);
115916 pmlmepriv->p2p_probe_req_ie_len = p2p_ielen;
115917 - }
115918 -
115919 - }
115920 -
115921 - return ret;
115922 -
115923 -}
115924 -
115925 -static void rtw_cfg80211_scan_abort(_adapter *padapter)
115926 -{
115927 - u32 cnt=0;
115928 - u32 wait_for_surveydone;
115929 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
115930 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
115931
115932 -#ifdef CONFIG_DEBUG_CFG80211
115933 - printk("%s\n", __func__);
115934 -#endif
115935 + if(rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_LISTEN_CH, (u8*)listen_ch_attr, (uint*) &attr_contentlen)
115936 + && attr_contentlen == 5)
115937 + {
115938 + if (wdinfo->listen_channel != listen_ch_attr[4]) {
115939 + DBG_871X(FUNC_ADPT_FMT" listen channel - country:%c%c%c, class:%u, ch:%u\n",
115940 + FUNC_ADPT_ARG(padapter), listen_ch_attr[0], listen_ch_attr[1], listen_ch_attr[2],
115941 + listen_ch_attr[3], listen_ch_attr[4]);
115942 + wdinfo->listen_channel = listen_ch_attr[4];
115943 + }
115944 + }
115945 + }
115946 + #endif //CONFIG_P2P
115947 +
115948 + //buf += p2p_ielen;
115949 + //len -= p2p_ielen;
115950
115951 - wait_for_surveydone = 10;
115952 + #ifdef CONFIG_WFD
115953 + if(rtw_get_wfd_ie(buf, len, NULL, &wfd_ielen))
115954 + {
115955 + #ifdef CONFIG_DEBUG_CFG80211
115956 + DBG_8192C("probe_req_wfd_ielen=%d\n", wfd_ielen);
115957 + #endif
115958
115959 - pmlmeext->scan_abort = _TRUE;
115960 + if(pmlmepriv->wfd_probe_req_ie)
115961 + {
115962 + u32 free_len = pmlmepriv->wfd_probe_req_ie_len;
115963 + pmlmepriv->wfd_probe_req_ie_len = 0;
115964 + rtw_mfree(pmlmepriv->wfd_probe_req_ie, free_len);
115965 + pmlmepriv->wfd_probe_req_ie = NULL;
115966 + }
115967
115968 - while(check_fwstate(pmlmepriv, _FW_UNDER_SURVEY) == _TRUE)
115969 - {
115970 - printk("%s : fw_state=_FW_UNDER_SURVEY!\n", __func__);
115971 + pmlmepriv->wfd_probe_req_ie = rtw_malloc(wfd_ielen);
115972 + if ( pmlmepriv->wfd_probe_req_ie == NULL) {
115973 + DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
115974 + return -EINVAL;
115975 +
115976 + }
115977 + rtw_get_wfd_ie(buf, len, pmlmepriv->wfd_probe_req_ie, &pmlmepriv->wfd_probe_req_ie_len);
115978 + }
115979 + #endif //CONFIG_WFD
115980
115981 - rtw_msleep_os(20);
115982 - cnt++;
115983 - if(cnt > wait_for_surveydone )
115984 - {
115985 - printk("waiting for scan_abort time out!\n");
115986 - break;
115987 - }
115988 }
115989
115990 - pmlmeext->scan_abort = _FALSE;
115991 -
115992 - rtw_cfg80211_indicate_scan_done(wdev_to_priv(padapter->rtw_wdev), _TRUE);
115993 -
115994 + return ret;
115995 +
115996 }
115997
115998 -static int cfg80211_rtw_scan(struct wiphy *wiphy, struct net_device *ndev,
115999 - struct cfg80211_scan_request *request)
116000 +static int cfg80211_rtw_scan(struct wiphy *wiphy
116001 + #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 6, 0))
116002 + , struct net_device *ndev
116003 + #endif
116004 + , struct cfg80211_scan_request *request)
116005 {
116006 int i;
116007 u8 _status = _FALSE;
116008 @@ -1709,11 +1985,14 @@ static int cfg80211_rtw_scan(struct wiph
116009 _adapter *padapter = wiphy_to_adapter(wiphy);
116010 struct mlme_priv *pmlmepriv= &padapter->mlmepriv;
116011 NDIS_802_11_SSID ssid[RTW_SSID_SCAN_AMOUNT];
116012 + struct rtw_ieee80211_channel ch[RTW_CHANNEL_SCAN_AMOUNT];
116013 _irqL irqL;
116014 u8 *wps_ie=NULL;
116015 uint wps_ielen=0;
116016 u8 *p2p_ie=NULL;
116017 uint p2p_ielen=0;
116018 + u8 survey_times=3;
116019 + u8 survey_times_for_one_ch=6;
116020 #ifdef CONFIG_P2P
116021 struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
116022 #endif //CONFIG_P2P
116023 @@ -1721,10 +2000,21 @@ static int cfg80211_rtw_scan(struct wiph
116024 struct cfg80211_ssid *ssids = request->ssids;
116025 int social_channel = 0, j = 0;
116026 bool need_indicate_scan_done = _FALSE;
116027 -
116028 -#ifdef CONFIG_DEBUG_CFG80211
116029 - printk("%s\n", __func__);
116030 -#endif
116031 +#ifdef CONFIG_CONCURRENT_MODE
116032 + PADAPTER pbuddy_adapter = NULL;
116033 + struct mlme_priv *pbuddy_mlmepriv = NULL;
116034 +#endif //CONFIG_CONCURRENT_MODE
116035 +
116036 +//#ifdef CONFIG_DEBUG_CFG80211
116037 + DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter));
116038 +//#endif
116039 +
116040 +#ifdef CONFIG_CONCURRENT_MODE
116041 + if (padapter->pbuddy_adapter) {
116042 + pbuddy_adapter = padapter->pbuddy_adapter;
116043 + pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
116044 + }
116045 +#endif //CONFIG_CONCURRENT_MODE
116046
116047 #ifdef CONFIG_MP_INCLUDED
116048 if (check_fwstate(pmlmepriv, WIFI_MP_STATE) == _TRUE)
116049 @@ -1740,8 +2030,22 @@ static int cfg80211_rtw_scan(struct wiph
116050
116051 if (check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
116052 {
116053 - //need_indicate_scan_done = _TRUE;
116054 - //goto check_need_indicate_scan_done;
116055 +#ifdef CONFIG_DEBUG_CFG80211
116056 + DBG_871X("%s under WIFI_AP_STATE\n", __FUNCTION__);
116057 +#endif
116058 +
116059 + if (check_fwstate(pmlmepriv, WIFI_UNDER_WPS|_FW_UNDER_SURVEY|_FW_UNDER_LINKING) == _TRUE)
116060 + {
116061 + DBG_8192C("%s, fwstate=0x%x\n", __func__, pmlmepriv->fw_state);
116062 +
116063 + if(check_fwstate(pmlmepriv, WIFI_UNDER_WPS))
116064 + {
116065 + DBG_8192C("AP mode process WPS \n");
116066 + }
116067 +
116068 + need_indicate_scan_done = _TRUE;
116069 + goto check_need_indicate_scan_done;
116070 + }
116071 }
116072
116073 if(_FAIL == rtw_pwr_wakeup(padapter)) {
116074 @@ -1749,26 +2053,31 @@ static int cfg80211_rtw_scan(struct wiph
116075 goto check_need_indicate_scan_done;
116076 }
116077
116078 - if( ssids->ssid != NULL )
116079 + #ifdef CONFIG_P2P
116080 + if( pwdinfo->driver_interface == DRIVER_CFG80211 )
116081 {
116082 - if( _rtw_memcmp(ssids->ssid, "DIRECT-", 7)
116083 + if(ssids->ssid != NULL
116084 + && _rtw_memcmp(ssids->ssid, "DIRECT-", 7)
116085 && rtw_get_p2p_ie((u8 *)request->ie, request->ie_len, NULL, NULL)
116086 )
116087 {
116088 if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
116089 {
116090 + u32 initialgain = 0x30;
116091 rtw_p2p_enable(padapter, P2P_ROLE_DEVICE);
116092 wdev_to_priv(padapter->rtw_wdev)->p2p_enabled = _TRUE;
116093 + padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_INITIAL_GAIN, (u8 *)&(initialgain));
116094 + padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_INITIAL_GAIN, (u8 *)&(initialgain));
116095 }
116096 else
116097 {
116098 rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
116099 #ifdef CONFIG_DEBUG_CFG80211
116100 - printk("%s, role=%d, p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo));
116101 + DBG_8192C("%s, role=%d, p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo));
116102 #endif
116103 }
116104 rtw_p2p_set_state(pwdinfo, P2P_STATE_LISTEN);
116105 -
116106 +
116107 if(request->n_channels == 3 &&
116108 request->channels[0]->hw_value == 1 &&
116109 request->channels[1]->hw_value == 6 &&
116110 @@ -1779,37 +2088,72 @@ static int cfg80211_rtw_scan(struct wiph
116111 }
116112 }
116113 }
116114 + #endif //CONFIG_P2P
116115
116116 if(request->ie && request->ie_len>0)
116117 {
116118 - rtw_cfg80211_set_probe_req_wpsp2pie( ndev, (u8 *)request->ie, request->ie_len );
116119 + rtw_cfg80211_set_probe_req_wpsp2pie(padapter, (u8 *)request->ie, request->ie_len );
116120 }
116121
116122 if (pmlmepriv->LinkDetectInfo.bBusyTraffic == _TRUE)
116123 {
116124 - printk("%s, bBusyTraffic == _TRUE\n", __func__);
116125 + DBG_8192C("%s, bBusyTraffic == _TRUE\n", __func__);
116126 need_indicate_scan_done = _TRUE;
116127 goto check_need_indicate_scan_done;
116128 - }
116129 + }
116130 + if (rtw_is_scan_deny(padapter)){
116131 + DBG_871X(FUNC_ADPT_FMT ": scan deny\n", FUNC_ADPT_ARG(padapter));
116132 + need_indicate_scan_done = _TRUE;
116133 + goto check_need_indicate_scan_done;
116134 + }
116135 +
116136 +#ifdef CONFIG_CONCURRENT_MODE
116137 + if(pbuddy_mlmepriv && (pbuddy_mlmepriv->LinkDetectInfo.bBusyTraffic == _TRUE))
116138 + {
116139 + DBG_8192C("%s, bBusyTraffic == _TRUE at buddy_intf\n", __func__);
116140 + need_indicate_scan_done = _TRUE;
116141 + goto check_need_indicate_scan_done;
116142 + }
116143 +#endif //CONFIG_CONCURRENT_MODE
116144
116145 if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY|_FW_UNDER_LINKING) == _TRUE)
116146 {
116147 - printk("%s, fwstate=0x%x\n", __func__, pmlmepriv->fw_state);
116148 + DBG_8192C("%s, fwstate=0x%x\n", __func__, pmlmepriv->fw_state);
116149 need_indicate_scan_done = _TRUE;
116150 goto check_need_indicate_scan_done;
116151 }
116152
116153 +#ifdef CONFIG_CONCURRENT_MODE
116154 + if (check_buddy_fwstate(padapter,
116155 + _FW_UNDER_SURVEY|_FW_UNDER_LINKING|WIFI_UNDER_WPS) == _TRUE)
116156 + {
116157 + if(check_buddy_fwstate(padapter, _FW_UNDER_SURVEY))
116158 + {
116159 + DBG_8192C("scanning_via_buddy_intf\n");
116160 + pmlmepriv->scanning_via_buddy_intf = _TRUE;
116161 + }
116162 +
116163 + DBG_8192C("buddy_intf's mlme state:0x%x\n", pbuddy_mlmepriv->fw_state);
116164 +
116165 + need_indicate_scan_done = _TRUE;
116166 + goto check_need_indicate_scan_done;
116167 + }
116168 +#endif
116169 +
116170
116171 #ifdef CONFIG_P2P
116172 - if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE) && !rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE))
116173 + if( pwdinfo->driver_interface == DRIVER_CFG80211 )
116174 {
116175 - rtw_p2p_set_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH);
116176 - rtw_free_network_queue(padapter, _TRUE);
116177 + if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE) && !rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE))
116178 + {
116179 + rtw_p2p_set_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH);
116180 + rtw_free_network_queue(padapter, _TRUE);
116181
116182 - if(social_channel == 0)
116183 - rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_NONE);
116184 - else
116185 - rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_SOCIAL_LAST);
116186 + if(social_channel == 0)
116187 + rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_NONE);
116188 + else
116189 + rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_SOCIAL_LAST);
116190 + }
116191 }
116192 #endif //CONFIG_P2P
116193
116194 @@ -1818,20 +2162,38 @@ static int cfg80211_rtw_scan(struct wiph
116195 //parsing request ssids, n_ssids
116196 for (i = 0; i < request->n_ssids && i < RTW_SSID_SCAN_AMOUNT; i++) {
116197 #ifdef CONFIG_DEBUG_CFG80211
116198 - printk("ssid=%s, len=%d\n", ssids[i].ssid, ssids[i].ssid_len);
116199 + DBG_8192C("ssid=%s, len=%d\n", ssids[i].ssid, ssids[i].ssid_len);
116200 #endif
116201 _rtw_memcpy(ssid[i].Ssid, ssids[i].ssid, ssids[i].ssid_len);
116202 ssid[i].SsidLength = ssids[i].ssid_len;
116203 }
116204
116205
116206 -#ifdef CONFIG_DEBUG_CFG80211
116207 - //parsing channels, n_channels
116208 - DBG_871X("%s n_channels:%u\n", __FUNCTION__, request->n_channels);
116209 -#endif
116210 + /* parsing channels, n_channels */
116211 + _rtw_memset(ch, 0, sizeof(struct rtw_ieee80211_channel)*RTW_CHANNEL_SCAN_AMOUNT);
116212 + for (i=0;i<request->n_channels && i<RTW_CHANNEL_SCAN_AMOUNT;i++) {
116213 + #ifdef CONFIG_DEBUG_CFG80211
116214 + DBG_871X(FUNC_ADPT_FMT CHAN_FMT"\n", FUNC_ADPT_ARG(padapter), CHAN_ARG(request->channels[i]));
116215 + #endif
116216 + ch[i].hw_value = request->channels[i]->hw_value;
116217 + ch[i].flags = request->channels[i]->flags;
116218 + }
116219
116220 - _enter_critical_bh(&pmlmepriv->lock, &irqL);
116221 - _status = rtw_sitesurvey_cmd(padapter, ssid, RTW_SSID_SCAN_AMOUNT);
116222 + _enter_critical_bh(&pmlmepriv->lock, &irqL);
116223 + if (request->n_channels == 1) {
116224 + for(i=1;i<survey_times_for_one_ch;i++)
116225 + _rtw_memcpy(&ch[i], &ch[0], sizeof(struct rtw_ieee80211_channel));
116226 + _status = rtw_sitesurvey_cmd(padapter, ssid, RTW_SSID_SCAN_AMOUNT, ch, survey_times_for_one_ch);
116227 + } else if (request->n_channels == 2) {
116228 + _rtw_memcpy(&ch[3], &ch[1], sizeof(struct rtw_ieee80211_channel));
116229 + for(i=1;i<survey_times;i++) {
116230 + _rtw_memcpy(&ch[i], &ch[0], sizeof(struct rtw_ieee80211_channel));
116231 + _rtw_memcpy(&ch[i+3], &ch[3], sizeof(struct rtw_ieee80211_channel));
116232 + }
116233 + _status = rtw_sitesurvey_cmd(padapter, ssid, RTW_SSID_SCAN_AMOUNT, ch, survey_times * 2);
116234 + } else {
116235 + _status = rtw_sitesurvey_cmd(padapter, ssid, RTW_SSID_SCAN_AMOUNT, NULL, 0);
116236 + }
116237 _exit_critical_bh(&pmlmepriv->lock, &irqL);
116238
116239
116240 @@ -1881,11 +2243,11 @@ static int cfg80211_rtw_set_wiphy_params
116241 return ret;
116242 }
116243 #endif
116244 - printk("%s\n", __func__);
116245 + DBG_8192C("%s\n", __func__);
116246 return 0;
116247 }
116248
116249 -static int cfg80211_rtw_join_ibss(struct wiphy *wiphy, struct net_device *dev,
116250 +static int cfg80211_rtw_join_ibss(struct wiphy *wiphy, struct net_device *ndev,
116251 struct cfg80211_ibss_params *params)
116252 {
116253 #if 0
116254 @@ -1908,11 +2270,11 @@ static int cfg80211_rtw_join_ibss(struct
116255
116256 return iwm_send_mlme_profile(iwm);
116257 #endif
116258 - printk("%s\n", __func__);
116259 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
116260 return 0;
116261 }
116262
116263 -static int cfg80211_rtw_leave_ibss(struct wiphy *wiphy, struct net_device *dev)
116264 +static int cfg80211_rtw_leave_ibss(struct wiphy *wiphy, struct net_device *ndev)
116265 {
116266 #if 0
116267 struct iwm_priv *iwm = wiphy_to_iwm(wiphy);
116268 @@ -1920,14 +2282,13 @@ static int cfg80211_rtw_leave_ibss(struc
116269 if (iwm->umac_profile_active)
116270 return iwm_invalidate_mlme_profile(iwm);
116271 #endif
116272 - printk("%s\n", __func__);
116273 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
116274 return 0;
116275 }
116276
116277 static int rtw_cfg80211_set_wpa_version(struct security_priv *psecuritypriv, u32 wpa_version)
116278 {
116279 - printk("%s, wpa_version=%d\n", __func__, wpa_version);
116280 -
116281 + DBG_8192C("%s, wpa_version=%d\n", __func__, wpa_version);
116282
116283 if (!wpa_version) {
116284 psecuritypriv->ndisauthtype = Ndis802_11AuthModeOpen;
116285 @@ -1954,7 +2315,7 @@ static int rtw_cfg80211_set_wpa_version(
116286 static int rtw_cfg80211_set_auth_type(struct security_priv *psecuritypriv,
116287 enum nl80211_auth_type sme_auth_type)
116288 {
116289 - printk("%s, nl80211_auth_type=%d\n", __func__, sme_auth_type);
116290 + DBG_8192C("%s, nl80211_auth_type=%d\n", __func__, sme_auth_type);
116291
116292
116293 switch (sme_auth_type) {
116294 @@ -1995,7 +2356,7 @@ static int rtw_cfg80211_set_cipher(struc
116295 u32 *profile_cipher = ucast ? &psecuritypriv->dot11PrivacyAlgrthm :
116296 &psecuritypriv->dot118021XGrpPrivacy;
116297
116298 - printk("%s, ucast=%d, cipher=0x%x\n", __func__, ucast, cipher);
116299 + DBG_8192C("%s, ucast=%d, cipher=0x%x\n", __func__, ucast, cipher);
116300
116301
116302 if (!cipher) {
116303 @@ -2026,7 +2387,7 @@ static int rtw_cfg80211_set_cipher(struc
116304 ndisencryptstatus = Ndis802_11Encryption3Enabled;
116305 break;
116306 default:
116307 - printk("Unsupported cipher: 0x%x\n", cipher);
116308 + DBG_8192C("Unsupported cipher: 0x%x\n", cipher);
116309 return -ENOTSUPP;
116310 }
116311
116312 @@ -2043,7 +2404,7 @@ static int rtw_cfg80211_set_cipher(struc
116313
116314 static int rtw_cfg80211_set_key_mgt(struct security_priv *psecuritypriv, u32 key_mgt)
116315 {
116316 - printk("%s, key_mgt=0x%x\n", __func__, key_mgt);
116317 + DBG_8192C("%s, key_mgt=0x%x\n", __func__, key_mgt);
116318
116319 if (key_mgt == WLAN_AKM_SUITE_8021X)
116320 //*auth_type = UMAC_AUTH_TYPE_8021X;
116321 @@ -2051,7 +2412,7 @@ static int rtw_cfg80211_set_key_mgt(stru
116322 else if (key_mgt == WLAN_AKM_SUITE_PSK) {
116323 psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_8021X;
116324 } else {
116325 - printk("Invalid key mgt: 0x%x\n", key_mgt);
116326 + DBG_8192C("Invalid key mgt: 0x%x\n", key_mgt);
116327 //return -EINVAL;
116328 }
116329
116330 @@ -2064,230 +2425,225 @@ static int rtw_cfg80211_set_wpa_ie(_adap
116331 u32 left;
116332 int group_cipher = 0, pairwise_cipher = 0;
116333 int ret = 0;
116334 -#ifdef CONFIG_P2P
116335 - struct wifidirect_info* pwdinfo = &padapter->wdinfo;
116336 -#endif //CONFIG_P2P
116337 int wpa_ielen=0;
116338 int wpa2_ielen=0;
116339 u8 *pwpa, *pwpa2;
116340 + u8 null_addr[]= {0,0,0,0,0,0};
116341
116342 + if (pie == NULL || !ielen) {
116343 + /* Treat this as normal case, but need to clear WIFI_UNDER_WPS */
116344 + _clr_fwstate_(&padapter->mlmepriv, WIFI_UNDER_WPS);
116345 + goto exit;
116346 + }
116347
116348 - if((ielen > MAX_WPA_IE_LEN+MAX_WPS_IE_LEN+MAX_P2P_IE_LEN) || (pie == NULL)){
116349 - padapter->securitypriv.wps_phase = _FALSE;
116350 - if(pie == NULL)
116351 - return ret;
116352 - else
116353 - return -EINVAL;
116354 + if (ielen > MAX_WPA_IE_LEN+MAX_WPS_IE_LEN+MAX_P2P_IE_LEN) {
116355 + ret = -EINVAL;
116356 + goto exit;
116357 }
116358
116359 - if(ielen)
116360 - {
116361 - buf = rtw_zmalloc(ielen);
116362 - if (buf == NULL){
116363 - ret = -ENOMEM;
116364 - goto exit;
116365 - }
116366 -
116367 - _rtw_memcpy(buf, pie , ielen);
116368 + buf = rtw_zmalloc(ielen);
116369 + if (buf == NULL){
116370 + ret = -ENOMEM;
116371 + goto exit;
116372 + }
116373
116374 - //dump
116375 - {
116376 - int i;
116377 - DBG_8192C("set wpa_ie(length:%d):\n", ielen);
116378 - for(i=0;i<ielen;i=i+8)
116379 - DBG_8192C("0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x \n",buf[i],buf[i+1],buf[i+2],buf[i+3],buf[i+4],buf[i+5],buf[i+6],buf[i+7]);
116380 - }
116381 -
116382 - pos = buf;
116383 - if(ielen < RSN_HEADER_LEN){
116384 - RT_TRACE(_module_rtl871x_ioctl_os_c,_drv_err_,("Ie len too short %d\n", ielen));
116385 - ret = -1;
116386 - goto exit;
116387 - }
116388 + _rtw_memcpy(buf, pie , ielen);
116389
116390 -#if 0
116391 - pos += RSN_HEADER_LEN;
116392 - left = ielen - RSN_HEADER_LEN;
116393 -
116394 - if (left >= RSN_SELECTOR_LEN){
116395 - pos += RSN_SELECTOR_LEN;
116396 - left -= RSN_SELECTOR_LEN;
116397 - }
116398 - else if (left > 0){
116399 - RT_TRACE(_module_rtl871x_ioctl_os_c,_drv_err_,("Ie length mismatch, %u too much \n", left));
116400 - ret =-1;
116401 - goto exit;
116402 - }
116403 -#endif
116404 -
116405 - pwpa = rtw_get_wpa_ie(buf, &wpa_ielen, ielen);
116406 - pwpa2 = rtw_get_wpa2_ie(buf, &wpa2_ielen, ielen);
116407 -
116408 - if(pwpa && wpa_ielen>0)
116409 + //dump
116410 + {
116411 + int i;
116412 + DBG_8192C("set wpa_ie(length:%zu):\n", ielen);
116413 + for(i=0;i<ielen;i=i+8)
116414 + DBG_8192C("0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x \n",buf[i],buf[i+1],buf[i+2],buf[i+3],buf[i+4],buf[i+5],buf[i+6],buf[i+7]);
116415 + }
116416 +
116417 + pos = buf;
116418 + if(ielen < RSN_HEADER_LEN){
116419 + RT_TRACE(_module_rtl871x_ioctl_os_c,_drv_err_,("Ie len too short %d\n", ielen));
116420 + ret = -1;
116421 + goto exit;
116422 + }
116423 +
116424 + pwpa = rtw_get_wpa_ie(buf, &wpa_ielen, ielen);
116425 + if(pwpa && wpa_ielen>0)
116426 + {
116427 + if(rtw_parse_wpa_ie(pwpa, wpa_ielen+2, &group_cipher, &pairwise_cipher) == _SUCCESS)
116428 {
116429 - if(rtw_parse_wpa_ie(pwpa, wpa_ielen+2, &group_cipher, &pairwise_cipher) == _SUCCESS)
116430 - {
116431 - padapter->securitypriv.dot11AuthAlgrthm= dot11AuthAlgrthm_8021X;
116432 - padapter->securitypriv.ndisauthtype=Ndis802_11AuthModeWPAPSK;
116433 - _rtw_memcpy(padapter->securitypriv.supplicant_ie, &pwpa[0], wpa_ielen+2);
116434 + padapter->securitypriv.dot11AuthAlgrthm= dot11AuthAlgrthm_8021X;
116435 + padapter->securitypriv.ndisauthtype=Ndis802_11AuthModeWPAPSK;
116436 + _rtw_memcpy(padapter->securitypriv.supplicant_ie, &pwpa[0], wpa_ielen+2);
116437
116438 - printk("got wpa_ie\n");
116439 - }
116440 + DBG_8192C("got wpa_ie, wpa_ielen:%u\n", wpa_ielen);
116441 }
116442 -
116443 - if(pwpa2 && wpa2_ielen>0)
116444 + }
116445 +
116446 + pwpa2 = rtw_get_wpa2_ie(buf, &wpa2_ielen, ielen);
116447 + if(pwpa2 && wpa2_ielen>0)
116448 + {
116449 + if(rtw_parse_wpa2_ie(pwpa2, wpa2_ielen+2, &group_cipher, &pairwise_cipher) == _SUCCESS)
116450 {
116451 - if(rtw_parse_wpa2_ie(pwpa2, wpa2_ielen+2, &group_cipher, &pairwise_cipher) == _SUCCESS)
116452 - {
116453 - padapter->securitypriv.dot11AuthAlgrthm= dot11AuthAlgrthm_8021X;
116454 - padapter->securitypriv.ndisauthtype=Ndis802_11AuthModeWPA2PSK;
116455 - _rtw_memcpy(padapter->securitypriv.supplicant_ie, &pwpa2[0], wpa2_ielen+2);
116456 + padapter->securitypriv.dot11AuthAlgrthm= dot11AuthAlgrthm_8021X;
116457 + padapter->securitypriv.ndisauthtype=Ndis802_11AuthModeWPA2PSK;
116458 + _rtw_memcpy(padapter->securitypriv.supplicant_ie, &pwpa2[0], wpa2_ielen+2);
116459
116460 - printk("got wpa2_ie\n");
116461 - }
116462 + DBG_8192C("got wpa2_ie, wpa2_ielen:%u\n", wpa2_ielen);
116463 }
116464 -
116465 - switch(group_cipher)
116466 - {
116467 - case WPA_CIPHER_NONE:
116468 - padapter->securitypriv.dot118021XGrpPrivacy=_NO_PRIVACY_;
116469 - padapter->securitypriv.ndisencryptstatus=Ndis802_11EncryptionDisabled;
116470 - break;
116471 - case WPA_CIPHER_WEP40:
116472 - padapter->securitypriv.dot118021XGrpPrivacy=_WEP40_;
116473 - padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
116474 - break;
116475 - case WPA_CIPHER_TKIP:
116476 - padapter->securitypriv.dot118021XGrpPrivacy=_TKIP_;
116477 - padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption2Enabled;
116478 - break;
116479 - case WPA_CIPHER_CCMP:
116480 - padapter->securitypriv.dot118021XGrpPrivacy=_AES_;
116481 - padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption3Enabled;
116482 - break;
116483 - case WPA_CIPHER_WEP104:
116484 - padapter->securitypriv.dot118021XGrpPrivacy=_WEP104_;
116485 - padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
116486 - break;
116487 + }
116488 +
116489 + if (group_cipher == 0)
116490 + {
116491 + group_cipher = WPA_CIPHER_NONE;
116492 + }
116493 + if (pairwise_cipher == 0)
116494 + {
116495 + pairwise_cipher = WPA_CIPHER_NONE;
116496 + }
116497 +
116498 + switch(group_cipher)
116499 + {
116500 + case WPA_CIPHER_NONE:
116501 + padapter->securitypriv.dot118021XGrpPrivacy=_NO_PRIVACY_;
116502 + padapter->securitypriv.ndisencryptstatus=Ndis802_11EncryptionDisabled;
116503 + break;
116504 + case WPA_CIPHER_WEP40:
116505 + padapter->securitypriv.dot118021XGrpPrivacy=_WEP40_;
116506 + padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
116507 + break;
116508 + case WPA_CIPHER_TKIP:
116509 + padapter->securitypriv.dot118021XGrpPrivacy=_TKIP_;
116510 + padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption2Enabled;
116511 + break;
116512 + case WPA_CIPHER_CCMP:
116513 + padapter->securitypriv.dot118021XGrpPrivacy=_AES_;
116514 + padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption3Enabled;
116515 + break;
116516 + case WPA_CIPHER_WEP104:
116517 + padapter->securitypriv.dot118021XGrpPrivacy=_WEP104_;
116518 + padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
116519 + break;
116520 + }
116521 +
116522 + switch(pairwise_cipher)
116523 + {
116524 + case WPA_CIPHER_NONE:
116525 + padapter->securitypriv.dot11PrivacyAlgrthm=_NO_PRIVACY_;
116526 + padapter->securitypriv.ndisencryptstatus=Ndis802_11EncryptionDisabled;
116527 + break;
116528 + case WPA_CIPHER_WEP40:
116529 + padapter->securitypriv.dot11PrivacyAlgrthm=_WEP40_;
116530 + padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
116531 + break;
116532 + case WPA_CIPHER_TKIP:
116533 + padapter->securitypriv.dot11PrivacyAlgrthm=_TKIP_;
116534 + padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption2Enabled;
116535 + break;
116536 + case WPA_CIPHER_CCMP:
116537 + padapter->securitypriv.dot11PrivacyAlgrthm=_AES_;
116538 + padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption3Enabled;
116539 + break;
116540 + case WPA_CIPHER_WEP104:
116541 + padapter->securitypriv.dot11PrivacyAlgrthm=_WEP104_;
116542 + padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
116543 + break;
116544 + }
116545 +
116546 + {/* handle wps_ie */
116547 + uint wps_ielen;
116548 + u8 *wps_ie;
116549 +
116550 + wps_ie = rtw_get_wps_ie(buf, ielen, NULL, &wps_ielen);
116551 + if (wps_ie && wps_ielen > 0) {
116552 + DBG_8192C("got wps_ie, wps_ielen:%u\n", wps_ielen);
116553 + padapter->securitypriv.wps_ie_len = wps_ielen<MAX_WPS_IE_LEN?wps_ielen:MAX_WPS_IE_LEN;
116554 + _rtw_memcpy(padapter->securitypriv.wps_ie, wps_ie, padapter->securitypriv.wps_ie_len);
116555 + set_fwstate(&padapter->mlmepriv, WIFI_UNDER_WPS);
116556 + } else {
116557 + _clr_fwstate_(&padapter->mlmepriv, WIFI_UNDER_WPS);
116558 }
116559 + }
116560 +
116561 + #ifdef CONFIG_P2P
116562 + {//check p2p_ie for assoc req;
116563 + uint p2p_ielen=0;
116564 + u8 *p2p_ie;
116565 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
116566
116567 - switch(pairwise_cipher)
116568 + if((p2p_ie=rtw_get_p2p_ie(buf, ielen, NULL, &p2p_ielen)))
116569 {
116570 - case WPA_CIPHER_NONE:
116571 - padapter->securitypriv.dot11PrivacyAlgrthm=_NO_PRIVACY_;
116572 - padapter->securitypriv.ndisencryptstatus=Ndis802_11EncryptionDisabled;
116573 - break;
116574 - case WPA_CIPHER_WEP40:
116575 - padapter->securitypriv.dot11PrivacyAlgrthm=_WEP40_;
116576 - padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
116577 - break;
116578 - case WPA_CIPHER_TKIP:
116579 - padapter->securitypriv.dot11PrivacyAlgrthm=_TKIP_;
116580 - padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption2Enabled;
116581 - break;
116582 - case WPA_CIPHER_CCMP:
116583 - padapter->securitypriv.dot11PrivacyAlgrthm=_AES_;
116584 - padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption3Enabled;
116585 - break;
116586 - case WPA_CIPHER_WEP104:
116587 - padapter->securitypriv.dot11PrivacyAlgrthm=_WEP104_;
116588 - padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
116589 - break;
116590 - }
116591 -
116592 + #ifdef CONFIG_DEBUG_CFG80211
116593 + DBG_8192C("%s p2p_assoc_req_ielen=%d\n", __FUNCTION__, p2p_ielen);
116594 + #endif
116595
116596 -
116597 - padapter->securitypriv.wps_phase = _FALSE;
116598 - {//set wps_ie
116599 - u16 cnt = 0;
116600 - u8 eid, wps_oui[4]={0x0,0x50,0xf2,0x04};
116601 - uint wps_ielen=0;
116602 - u8 *pwps;
116603 -
116604 - pwps = rtw_get_wps_ie(buf, ielen, NULL, &wps_ielen);
116605 -
116606 - //while( cnt < ielen )
116607 - while( cnt < wps_ielen )
116608 + if(pmlmepriv->p2p_assoc_req_ie)
116609 {
116610 - //eid = buf[cnt];
116611 - eid = pwps[cnt];
116612 -
116613 - if((eid==_VENDOR_SPECIFIC_IE_)&&(_rtw_memcmp(&pwps[cnt+2], wps_oui, 4)==_TRUE))
116614 - {
116615 - DBG_8192C("SET WPS_IE\n");
116616 + u32 free_len = pmlmepriv->p2p_assoc_req_ie_len;
116617 + pmlmepriv->p2p_assoc_req_ie_len = 0;
116618 + rtw_mfree(pmlmepriv->p2p_assoc_req_ie, free_len);
116619 + pmlmepriv->p2p_assoc_req_ie = NULL;
116620 + }
116621
116622 - padapter->securitypriv.wps_ie_len = ( (pwps[cnt+1]+2) < (MAX_WPA_IE_LEN<<2)) ? (pwps[cnt+1]+2):(MAX_WPA_IE_LEN<<2);
116623 -
116624 - _rtw_memcpy(padapter->securitypriv.wps_ie, &pwps[cnt], padapter->securitypriv.wps_ie_len);
116625 -
116626 - if(pwpa==NULL && pwpa2==NULL)
116627 - {
116628 - padapter->securitypriv.wps_phase = _TRUE;
116629 -
116630 - DBG_8192C("SET WPS_IE, wps_phase==_TRUE\n");
116631 - }
116632 -#ifdef CONFIG_P2P
116633 - if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_OK))
116634 - {
116635 - //rtw_p2p_set_state(pwdinfo, P2P_STATE_PROVISIONING_ING);
116636 - }
116637 -#endif //CONFIG_P2P
116638 + pmlmepriv->p2p_assoc_req_ie = rtw_malloc(p2p_ielen);
116639 + if ( pmlmepriv->p2p_assoc_req_ie == NULL) {
116640 + DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
116641 + goto exit;
116642 + }
116643 + _rtw_memcpy(pmlmepriv->p2p_assoc_req_ie, p2p_ie, p2p_ielen);
116644 + pmlmepriv->p2p_assoc_req_ie_len = p2p_ielen;
116645 + }
116646 + }
116647 + #endif //CONFIG_P2P
116648
116649 - cnt += pwps[cnt+1]+2;
116650 -
116651 - break;
116652 - } else {
116653 - cnt += pwps[cnt+1]+2; //goto next
116654 - }
116655 - }
116656 - }//set wps_ie
116657 + #ifdef CONFIG_WFD
116658 + {//check wfd_ie for assoc req;
116659 + uint wfd_ielen=0;
116660 + u8 *wfd_ie;
116661 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
116662
116663 - {//check p2p_ie for assoc req;
116664 - uint p2p_ielen=0;
116665 - u8 *p2p_ie;
116666 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
116667 + if(rtw_get_wfd_ie(buf, ielen, NULL, &wfd_ielen))
116668 + {
116669 + #ifdef CONFIG_DEBUG_CFG80211
116670 + DBG_8192C("%s wfd_assoc_req_ielen=%d\n", __FUNCTION__, wfd_ielen);
116671 + #endif
116672
116673 - if((p2p_ie=rtw_get_p2p_ie(buf, ielen, NULL, &p2p_ielen)))
116674 + if(pmlmepriv->wfd_assoc_req_ie)
116675 {
116676 - #ifdef CONFIG_DEBUG_CFG80211
116677 - printk("%s p2p_assoc_req_ielen=%d\n", __FUNCTION__, p2p_ielen);
116678 - #endif
116679 -
116680 - if(pmlmepriv->p2p_assoc_req_ie)
116681 - {
116682 - u32 free_len = pmlmepriv->p2p_assoc_req_ie_len;
116683 - pmlmepriv->p2p_assoc_req_ie_len = 0;
116684 - rtw_mfree(pmlmepriv->p2p_assoc_req_ie, free_len);
116685 - pmlmepriv->p2p_assoc_req_ie = NULL;
116686 - }
116687 + u32 free_len = pmlmepriv->wfd_assoc_req_ie_len;
116688 + pmlmepriv->wfd_assoc_req_ie_len = 0;
116689 + rtw_mfree(pmlmepriv->wfd_assoc_req_ie, free_len);
116690 + pmlmepriv->wfd_assoc_req_ie = NULL;
116691 + }
116692
116693 - pmlmepriv->p2p_assoc_req_ie = rtw_malloc(p2p_ielen);
116694 - if ( pmlmepriv->p2p_assoc_req_ie == NULL) {
116695 - printk("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
116696 - goto exit;
116697 -
116698 - }
116699 - _rtw_memcpy(pmlmepriv->p2p_assoc_req_ie, p2p_ie, p2p_ielen);
116700 - pmlmepriv->p2p_assoc_req_ie_len = p2p_ielen;
116701 -
116702 + pmlmepriv->wfd_assoc_req_ie = rtw_malloc(wfd_ielen);
116703 + if ( pmlmepriv->wfd_assoc_req_ie == NULL) {
116704 + DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
116705 + goto exit;
116706 }
116707 + rtw_get_wfd_ie(buf, ielen, pmlmepriv->wfd_assoc_req_ie, &pmlmepriv->wfd_assoc_req_ie_len);
116708 }
116709 -
116710 }
116711 -
116712 -
116713 + #endif //CONFIG_WFD
116714 +
116715 + //TKIP and AES disallow multicast packets until installing group key
116716 + if(padapter->securitypriv.dot11PrivacyAlgrthm == _TKIP_
116717 + || padapter->securitypriv.dot11PrivacyAlgrthm == _TKIP_WTMIC_
116718 + || padapter->securitypriv.dot11PrivacyAlgrthm == _AES_)
116719 + //WPS open need to enable multicast
116720 + //|| check_fwstate(&padapter->mlmepriv, WIFI_UNDER_WPS) == _TRUE)
116721 + rtw_hal_set_hwreg(padapter, HW_VAR_OFF_RCR_AM, null_addr);
116722 +
116723 RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_info_,
116724 - ("rtw_set_wpa_ie: pairwise_cipher=0x%08x padapter->securitypriv.ndisencryptstatus=%d padapter->securitypriv.ndisauthtype=%d\n",
116725 - pairwise_cipher, padapter->securitypriv.ndisencryptstatus, padapter->securitypriv.ndisauthtype));
116726 -
116727 -exit:
116728 + ("rtw_set_wpa_ie: pairwise_cipher=0x%08x padapter->securitypriv.ndisencryptstatus=%d padapter->securitypriv.ndisauthtype=%d\n",
116729 + pairwise_cipher, padapter->securitypriv.ndisencryptstatus, padapter->securitypriv.ndisauthtype));
116730
116731 - if (buf) rtw_mfree(buf, ielen);
116732 -
116733 - return ret;
116734 +exit:
116735 + if (buf)
116736 + rtw_mfree(buf, ielen);
116737 + if (ret)
116738 + _clr_fwstate_(&padapter->mlmepriv, WIFI_UNDER_WPS);
116739 + return ret;
116740 }
116741
116742 -static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *dev,
116743 +static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev,
116744 struct cfg80211_connect_params *sme)
116745 {
116746 int ret=0;
116747 @@ -2306,10 +2662,9 @@ static int cfg80211_rtw_connect(struct w
116748 struct security_priv *psecuritypriv = &padapter->securitypriv;
116749 _queue *queue = &pmlmepriv->scanned_queue;
116750
116751 - printk("\n=>%s\n",__FUNCTION__);
116752 -
116753 -
116754 - printk("privacy=%d, key=%p, key_len=%d, key_idx=%d\n", sme->privacy, sme->key, sme->key_len, sme->key_idx);
116755 + DBG_871X("=>"FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
116756 + DBG_871X("privacy=%d, key=%p, key_len=%d, key_idx=%d\n",
116757 + sme->privacy, sme->key, sme->key_len, sme->key_idx);
116758
116759
116760 if(wdev_to_priv(padapter->rtw_wdev)->block == _TRUE)
116761 @@ -2319,6 +2674,22 @@ static int cfg80211_rtw_connect(struct w
116762 goto exit;
116763 }
116764
116765 +#ifdef CONFIG_PLATFORM_MSTAR
116766 + printk("MStar Android!\n");
116767 + if((wdev_to_priv(padapter->rtw_wdev))->bandroid_scan == _FALSE)
116768 + {
116769 +#ifdef CONFIG_P2P
116770 + struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
116771 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
116772 +#endif //CONFIG_P2P
116773 + {
116774 + ret = -EBUSY;
116775 + printk("Android hasn't attached yet!\n");
116776 + goto exit;
116777 + }
116778 + }
116779 +#endif
116780 +
116781 if(_FAIL == rtw_pwr_wakeup(padapter)) {
116782 ret= -EPERM;
116783 goto exit;
116784 @@ -2329,6 +2700,17 @@ static int cfg80211_rtw_connect(struct w
116785 goto exit;
116786 }
116787
116788 +#ifdef CONFIG_CONCURRENT_MODE
116789 + if (check_buddy_fwstate(padapter, _FW_UNDER_LINKING) == _TRUE) {
116790 + DBG_8192C("%s, but buddy_intf is under linking\n", __FUNCTION__);
116791 + ret = -EINVAL;
116792 + goto exit;
116793 + }
116794 + if (check_buddy_fwstate(padapter, _FW_UNDER_SURVEY) == _TRUE) {
116795 + rtw_scan_abort(padapter->pbuddy_adapter);
116796 + }
116797 +#endif
116798 +
116799 if (!sme->ssid || !sme->ssid_len)
116800 {
116801 ret = -EINVAL;
116802 @@ -2341,104 +2723,25 @@ static int cfg80211_rtw_connect(struct w
116803 goto exit;
116804 }
116805
116806 -
116807 _rtw_memset(&ndis_ssid, 0, sizeof(NDIS_802_11_SSID));
116808 ndis_ssid.SsidLength = sme->ssid_len;
116809 _rtw_memcpy(ndis_ssid.Ssid, sme->ssid, sme->ssid_len);
116810
116811 - DBG_8192C("ssid=%s, len=%d\n", ndis_ssid.Ssid, sme->ssid_len);
116812 + DBG_8192C("ssid=%s, len=%zu\n", ndis_ssid.Ssid, sme->ssid_len);
116813
116814
116815 if (sme->bssid)
116816 - printk("bssid="MAC_FMT"\n", MAC_ARG(sme->bssid));
116817 + DBG_8192C("bssid="MAC_FMT"\n", MAC_ARG(sme->bssid));
116818
116819
116820 - if(check_fwstate(pmlmepriv, _FW_UNDER_SURVEY|_FW_UNDER_LINKING) == _TRUE)
116821 - {
116822 + if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING) == _TRUE) {
116823 ret = -EBUSY;
116824 - printk("%s, fw_state=0x%x, goto exit\n", __FUNCTION__, pmlmepriv->fw_state);
116825 + DBG_8192C("%s, fw_state=0x%x, goto exit\n", __FUNCTION__, pmlmepriv->fw_state);
116826 goto exit;
116827 - }
116828 -
116829 -
116830 - _enter_critical_bh(&queue->lock, &irqL);
116831 -
116832 - phead = get_list_head(queue);
116833 - pmlmepriv->pscanned = get_next(phead);
116834 -
116835 - while (1)
116836 - {
116837 - if (rtw_end_of_queue_search(phead, pmlmepriv->pscanned) == _TRUE)
116838 - {
116839 - break;
116840 - }
116841 -
116842 - pnetwork = LIST_CONTAINOR(pmlmepriv->pscanned, struct wlan_network, list);
116843 - pmlmepriv->pscanned = get_next(pmlmepriv->pscanned);
116844 -
116845 - dst_ssid = pnetwork->network.Ssid.Ssid;
116846 - dst_bssid = pnetwork->network.MacAddress;
116847 -
116848 - if(sme->bssid) {
116849 - if(_rtw_memcmp(pnetwork->network.MacAddress, sme->bssid, ETH_ALEN) == _FALSE)
116850 - continue;
116851 - }
116852 -
116853 - if(sme->ssid && sme->ssid_len) {
116854 - if( pnetwork->network.Ssid.SsidLength != sme->ssid_len
116855 - || _rtw_memcmp(pnetwork->network.Ssid.Ssid, sme->ssid, sme->ssid_len) == _FALSE
116856 - )
116857 - continue;
116858 - }
116859 -
116860 -
116861 - if (sme->bssid)
116862 - {
116863 - src_bssid = sme->bssid;
116864 -
116865 - if ((_rtw_memcmp(dst_bssid, src_bssid, ETH_ALEN)) == _TRUE)
116866 - {
116867 - printk("matched by bssid\n");
116868 -
116869 - ndis_ssid.SsidLength = pnetwork->network.Ssid.SsidLength;
116870 - _rtw_memcpy(ndis_ssid.Ssid, pnetwork->network.Ssid.Ssid, pnetwork->network.Ssid.SsidLength);
116871 -
116872 - matched=_TRUE;
116873 - break;
116874 - }
116875 -
116876 - }
116877 - else if (sme->ssid && sme->ssid_len)
116878 - {
116879 - src_ssid = ndis_ssid.Ssid;
116880 -
116881 - if ((_rtw_memcmp(dst_ssid, src_ssid, ndis_ssid.SsidLength) == _TRUE) &&
116882 - (pnetwork->network.Ssid.SsidLength==ndis_ssid.SsidLength))
116883 - {
116884 - printk("matched by ssid\n");
116885 - matched=_TRUE;
116886 - break;
116887 - }
116888 - }
116889 -
116890 - }
116891 -
116892 - _exit_critical_bh(&queue->lock, &irqL);
116893 -
116894 - if((matched == _FALSE) || (pnetwork== NULL))
116895 - {
116896 - ret = -ENOENT;
116897 - printk("connect, matched == _FALSE, goto exit\n");
116898 - goto exit;
116899 }
116900 -
116901 -
116902 - if (rtw_set_802_11_infrastructure_mode(padapter, pnetwork->network.InfrastructureMode) == _FALSE)
116903 - {
116904 - ret = -EPERM;
116905 - goto exit;
116906 + if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY) == _TRUE) {
116907 + rtw_scan_abort(padapter);
116908 }
116909 -
116910
116911 psecuritypriv->ndisencryptstatus = Ndis802_11EncryptionDisabled;
116912 psecuritypriv->dot11PrivacyAlgrthm = _NO_PRIVACY_;
116913 @@ -2455,6 +2758,11 @@ static int cfg80211_rtw_connect(struct w
116914 if (ret < 0)
116915 goto exit;
116916
116917 + DBG_8192C("%s, ie_len=%zu\n", __func__, sme->ie_len);
116918 +
116919 + ret = rtw_cfg80211_set_wpa_ie(padapter, sme->ie, sme->ie_len);
116920 + if (ret < 0)
116921 + goto exit;
116922
116923 if (sme->crypto.n_ciphers_pairwise) {
116924 ret = rtw_cfg80211_set_cipher(psecuritypriv, sme->crypto.ciphers_pairwise[0], _TRUE);
116925 @@ -2534,24 +2842,17 @@ static int cfg80211_rtw_connect(struct w
116926 goto exit;
116927 }
116928
116929 - printk("%s, ie_len=%d\n", __func__, sme->ie_len);
116930 -
116931 - ret = rtw_cfg80211_set_wpa_ie(padapter, sme->ie, sme->ie_len);
116932 - if (ret < 0)
116933 - goto exit;
116934 -
116935 authmode = psecuritypriv->ndisauthtype;
116936 rtw_set_802_11_authentication_mode(padapter, authmode);
116937
116938 //rtw_set_802_11_encryption_mode(padapter, padapter->securitypriv.ndisencryptstatus);
116939
116940 - if (rtw_set_802_11_ssid(padapter, &ndis_ssid) == _FALSE) {
116941 + if (rtw_set_802_11_connect(padapter, sme->bssid, &ndis_ssid) == _FALSE) {
116942 ret = -1;
116943 goto exit;
116944 }
116945
116946 -
116947 - printk("set ssid:dot11AuthAlgrthm=%d, dot11PrivacyAlgrthm=%d, dot118021XGrpPrivacy=%d\n", psecuritypriv->dot11AuthAlgrthm, psecuritypriv->dot11PrivacyAlgrthm, psecuritypriv->dot118021XGrpPrivacy);
116948 + DBG_8192C("set ssid:dot11AuthAlgrthm=%d, dot11PrivacyAlgrthm=%d, dot118021XGrpPrivacy=%d\n", psecuritypriv->dot11AuthAlgrthm, psecuritypriv->dot11PrivacyAlgrthm, psecuritypriv->dot118021XGrpPrivacy);
116949
116950 exit:
116951
116952 @@ -2560,20 +2861,26 @@ exit:
116953 return ret;
116954 }
116955
116956 -static int cfg80211_rtw_disconnect(struct wiphy *wiphy, struct net_device *dev,
116957 +static int cfg80211_rtw_disconnect(struct wiphy *wiphy, struct net_device *ndev,
116958 u16 reason_code)
116959 {
116960 _adapter *padapter = wiphy_to_adapter(wiphy);
116961
116962 - printk("\n%s\n", __func__);
116963 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
116964 +
116965 + rtw_set_roaming(padapter, 0);
116966
116967 if(check_fwstate(&padapter->mlmepriv, _FW_LINKED))
116968 {
116969 - rtw_disassoc_cmd(padapter);
116970 + rtw_scan_abort(padapter);
116971 + LeaveAllPowerSaveMode(padapter);
116972 + rtw_disassoc_cmd(padapter, 500, _FALSE);
116973
116974 - DBG_871X("%s...call rtw_indicate_disconnect\n ", __FUNCTION__);
116975 + DBG_871X("%s...call rtw_indicate_disconnect\n", __FUNCTION__);
116976
116977 + padapter->mlmepriv.not_indic_disco = _TRUE;
116978 rtw_indicate_disconnect(padapter);
116979 + padapter->mlmepriv.not_indic_disco = _FALSE;
116980
116981 rtw_free_assoc_resources(padapter, 1);
116982 }
116983 @@ -2582,11 +2889,14 @@ static int cfg80211_rtw_disconnect(struc
116984 }
116985
116986 static int cfg80211_rtw_set_txpower(struct wiphy *wiphy,
116987 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36))
116988 - enum nl80211_tx_power_setting type, int mbm)
116989 -#else // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36))
116990 - enum tx_power_setting type, int dbm)
116991 -#endif // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36))
116992 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0))
116993 + struct wireless_dev *wdev,
116994 +#endif
116995 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)) || defined(COMPAT_KERNEL_RELEASE)
116996 + enum nl80211_tx_power_setting type, int mbm)
116997 +#else
116998 + enum tx_power_setting type, int dbm)
116999 +#endif
117000 {
117001 #if 0
117002 struct iwm_priv *iwm = wiphy_to_iwm(wiphy);
117003 @@ -2614,44 +2924,47 @@ static int cfg80211_rtw_set_txpower(stru
117004 return -EOPNOTSUPP;
117005 }
117006 #endif
117007 - printk("%s\n", __func__);
117008 + DBG_8192C("%s\n", __func__);
117009 return 0;
117010 }
117011
117012 -static int cfg80211_rtw_get_txpower(struct wiphy *wiphy, int *dbm)
117013 +static int cfg80211_rtw_get_txpower(struct wiphy *wiphy,
117014 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0))
117015 + struct wireless_dev *wdev,
117016 +#endif
117017 + int *dbm)
117018 {
117019 //_adapter *padapter = wiphy_to_adapter(wiphy);
117020
117021 - printk("%s\n", __func__);
117022 + DBG_8192C("%s\n", __func__);
117023
117024 *dbm = (12);
117025
117026 return 0;
117027 }
117028
117029 +inline bool rtw_cfg80211_pwr_mgmt(_adapter *adapter)
117030 +{
117031 + struct rtw_wdev_priv *rtw_wdev_priv = wdev_to_priv(adapter->rtw_wdev);
117032 + return rtw_wdev_priv->power_mgmt;
117033 +}
117034 +
117035 static int cfg80211_rtw_set_power_mgmt(struct wiphy *wiphy,
117036 - struct net_device *dev,
117037 + struct net_device *ndev,
117038 bool enabled, int timeout)
117039 {
117040 -#if 0
117041 - struct iwm_priv *iwm = wiphy_to_iwm(wiphy);
117042 - u32 power_index;
117043 -
117044 - if (enabled)
117045 - power_index = IWM_POWER_INDEX_DEFAULT;
117046 - else
117047 - power_index = IWM_POWER_INDEX_MIN;
117048 -
117049 - if (power_index == iwm->conf.power_index)
117050 - return 0;
117051 -
117052 - iwm->conf.power_index = power_index;
117053 + _adapter *padapter = wiphy_to_adapter(wiphy);
117054 + struct rtw_wdev_priv *rtw_wdev_priv = wdev_to_priv(padapter->rtw_wdev);
117055 +
117056 + DBG_871X(FUNC_NDEV_FMT" enabled:%u, timeout:%d\n", FUNC_NDEV_ARG(ndev),
117057 + enabled, timeout);
117058
117059 - return iwm_umac_set_config_fix(iwm, UMAC_PARAM_TBL_CFG_FIX,
117060 - CFG_POWER_INDEX, iwm->conf.power_index);
117061 -#endif
117062 + rtw_wdev_priv->power_mgmt = enabled;
117063
117064 - printk("%s\n", __func__);
117065 + #ifdef CONFIG_LPS
117066 + if (!enabled)
117067 + LPS_Leave(padapter);
117068 + #endif
117069
117070 return 0;
117071 }
117072 @@ -2660,12 +2973,52 @@ static int cfg80211_rtw_set_pmksa(struct
117073 struct net_device *netdev,
117074 struct cfg80211_pmksa *pmksa)
117075 {
117076 - //struct iwm_priv *iwm = wiphy_to_iwm(wiphy);
117077 - _adapter *padapter = wiphy_to_adapter(wiphy);
117078 + u8 index,blInserted = _FALSE;
117079 + _adapter *padapter = wiphy_to_adapter(wiphy);
117080 + struct security_priv *psecuritypriv = &padapter->securitypriv;
117081 + u8 strZeroMacAddress[ ETH_ALEN ] = { 0x00 };
117082 +
117083 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(netdev));
117084 +
117085 + if ( _rtw_memcmp( pmksa->bssid, strZeroMacAddress, ETH_ALEN ) == _TRUE )
117086 + {
117087 + return -EINVAL;
117088 + }
117089 +
117090 + blInserted = _FALSE;
117091 +
117092 + //overwrite PMKID
117093 + for(index=0 ; index<NUM_PMKID_CACHE; index++)
117094 + {
117095 + if( _rtw_memcmp( psecuritypriv->PMKIDList[index].Bssid, pmksa->bssid, ETH_ALEN) ==_TRUE )
117096 + { // BSSID is matched, the same AP => rewrite with new PMKID.
117097 + DBG_871X(FUNC_NDEV_FMT" BSSID exists in the PMKList.\n", FUNC_NDEV_ARG(netdev));
117098 +
117099 + _rtw_memcpy( psecuritypriv->PMKIDList[index].PMKID, pmksa->pmkid, WLAN_PMKID_LEN);
117100 + psecuritypriv->PMKIDList[index].bUsed = _TRUE;
117101 + psecuritypriv->PMKIDIndex = index+1;
117102 + blInserted = _TRUE;
117103 + break;
117104 + }
117105 + }
117106 +
117107 + if(!blInserted)
117108 + {
117109 + // Find a new entry
117110 + DBG_871X(FUNC_NDEV_FMT" Use the new entry index = %d for this PMKID.\n",
117111 + FUNC_NDEV_ARG(netdev), psecuritypriv->PMKIDIndex );
117112
117113 - printk("%s\n", __func__);
117114 + _rtw_memcpy(psecuritypriv->PMKIDList[psecuritypriv->PMKIDIndex].Bssid, pmksa->bssid, ETH_ALEN);
117115 + _rtw_memcpy(psecuritypriv->PMKIDList[psecuritypriv->PMKIDIndex].PMKID, pmksa->pmkid, WLAN_PMKID_LEN);
117116 +
117117 + psecuritypriv->PMKIDList[psecuritypriv->PMKIDIndex].bUsed = _TRUE;
117118 + psecuritypriv->PMKIDIndex++ ;
117119 + if(psecuritypriv->PMKIDIndex==16)
117120 + {
117121 + psecuritypriv->PMKIDIndex =0;
117122 + }
117123 + }
117124
117125 - //return iwm_send_pmkid_update(iwm, pmksa, IWM_CMD_PMKID_ADD);
117126 return 0;
117127 }
117128
117129 @@ -2673,28 +3026,45 @@ static int cfg80211_rtw_del_pmksa(struct
117130 struct net_device *netdev,
117131 struct cfg80211_pmksa *pmksa)
117132 {
117133 - //struct iwm_priv *iwm = wiphy_to_iwm(wiphy);
117134 - _adapter *padapter = wiphy_to_adapter(wiphy);
117135 + u8 index, bMatched = _FALSE;
117136 + _adapter *padapter = wiphy_to_adapter(wiphy);
117137 + struct security_priv *psecuritypriv = &padapter->securitypriv;
117138 +
117139 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(netdev));
117140 +
117141 + for(index=0 ; index<NUM_PMKID_CACHE; index++)
117142 + {
117143 + if( _rtw_memcmp( psecuritypriv->PMKIDList[index].Bssid, pmksa->bssid, ETH_ALEN) ==_TRUE )
117144 + { // BSSID is matched, the same AP => Remove this PMKID information and reset it.
117145 + _rtw_memset( psecuritypriv->PMKIDList[index].Bssid, 0x00, ETH_ALEN );
117146 + _rtw_memset( psecuritypriv->PMKIDList[index].PMKID, 0x00, WLAN_PMKID_LEN );
117147 + psecuritypriv->PMKIDList[index].bUsed = _FALSE;
117148 + bMatched = _TRUE;
117149 + break;
117150 + }
117151 + }
117152
117153 - printk("%s\n", __func__);
117154 + if(_FALSE == bMatched)
117155 + {
117156 + DBG_871X(FUNC_NDEV_FMT" do not have matched BSSID\n"
117157 + , FUNC_NDEV_ARG(netdev));
117158 + return -EINVAL;
117159 + }
117160
117161 - //return iwm_send_pmkid_update(iwm, pmksa, IWM_CMD_PMKID_DEL);
117162 return 0;
117163 }
117164
117165 static int cfg80211_rtw_flush_pmksa(struct wiphy *wiphy,
117166 struct net_device *netdev)
117167 {
117168 - //struct iwm_priv *iwm = wiphy_to_iwm(wiphy);
117169 - _adapter *padapter = wiphy_to_adapter(wiphy);
117170 - struct cfg80211_pmksa pmksa;
117171 + _adapter *padapter = wiphy_to_adapter(wiphy);
117172 + struct security_priv *psecuritypriv = &padapter->securitypriv;
117173
117174 - printk("%s\n", __func__);
117175 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(netdev));
117176
117177 - memset(&pmksa, 0, sizeof(struct cfg80211_pmksa));
117178 + _rtw_memset( &psecuritypriv->PMKIDList[ 0 ], 0x00, sizeof( RT_PMKID_LIST ) * NUM_PMKID_CACHE );
117179 + psecuritypriv->PMKIDIndex = 0;
117180
117181 -
117182 - //return iwm_send_pmkid_update(iwm, &pmksa, IWM_CMD_PMKID_FLUSH);
117183 return 0;
117184 }
117185
117186 @@ -2705,30 +3075,50 @@ void rtw_cfg80211_indicate_sta_assoc(_ad
117187 int channel;
117188 struct wireless_dev *pwdev = padapter->rtw_wdev;
117189 struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
117190 + struct net_device *ndev = padapter->pnetdev;
117191
117192 - printk("%s\n", __func__);
117193 + DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter));
117194
117195 +#if defined(RTW_USE_CFG80211_STA_EVENT) || defined(COMPAT_KERNEL_RELEASE)
117196 + {
117197 + struct station_info sinfo;
117198 + u8 ie_offset;
117199 + if (GetFrameSubType(pmgmt_frame) == WIFI_ASSOCREQ)
117200 + ie_offset = _ASOCREQ_IE_OFFSET_;
117201 + else // WIFI_REASSOCREQ
117202 + ie_offset = _REASOCREQ_IE_OFFSET_;
117203 +
117204 + sinfo.filled = 0;
117205 + sinfo.filled = STATION_INFO_ASSOC_REQ_IES;
117206 + sinfo.assoc_req_ies = pmgmt_frame + WLAN_HDR_A3_LEN + ie_offset;
117207 + sinfo.assoc_req_ies_len = frame_len - WLAN_HDR_A3_LEN - ie_offset;
117208 + cfg80211_new_sta(ndev, GetAddr2Ptr(pmgmt_frame), &sinfo, GFP_ATOMIC);
117209 + }
117210 +#else /* defined(RTW_USE_CFG80211_STA_EVENT) */
117211 channel = pmlmeext->cur_channel;
117212 -
117213 if (channel <= RTW_CH_MAX_2G_CHANNEL)
117214 - {
117215 freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ);
117216 - }
117217 else
117218 - {
117219 freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ);
117220 - }
117221 -
117222
117223 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
117224 - cfg80211_rx_mgmt(padapter->pnetdev, freq, pmgmt_frame, frame_len, GFP_ATOMIC);
117225 -#else
117226 - //to avoid WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION) when calling cfg80211_send_rx_assoc()
117227 - pwdev->iftype = NL80211_IFTYPE_STATION;
117228 - cfg80211_send_rx_assoc(padapter->pnetdev, pmgmt_frame, frame_len);
117229 - pwdev->iftype = NL80211_IFTYPE_AP;
117230 - //cfg80211_rx_action(padapter->pnetdev, freq, pmgmt_frame, frame_len, GFP_ATOMIC);
117231 -#endif
117232 + #ifdef COMPAT_KERNEL_RELEASE
117233 + rtw_cfg80211_rx_mgmt(padapter, freq, 0, pmgmt_frame, frame_len, GFP_ATOMIC);
117234 + #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
117235 + rtw_cfg80211_rx_mgmt(padapter, freq, 0, pmgmt_frame, frame_len, GFP_ATOMIC);
117236 + #else //COMPAT_KERNEL_RELEASE
117237 + {
117238 + //to avoid WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION) when calling cfg80211_send_rx_assoc()
117239 + #ifndef CONFIG_PLATFORM_MSTAR
117240 + pwdev->iftype = NL80211_IFTYPE_STATION;
117241 + #endif //CONFIG_PLATFORM_MSTAR
117242 + DBG_8192C("iftype=%d before call cfg80211_send_rx_assoc()\n", pwdev->iftype);
117243 + rtw_cfg80211_send_rx_assoc(padapter, NULL, pmgmt_frame, frame_len);
117244 + DBG_8192C("iftype=%d after call cfg80211_send_rx_assoc()\n", pwdev->iftype);
117245 + pwdev->iftype = NL80211_IFTYPE_AP;
117246 + //cfg80211_rx_action(padapter->pnetdev, freq, pmgmt_frame, frame_len, GFP_ATOMIC);
117247 + }
117248 + #endif //COMPAT_KERNEL_RELEASE
117249 +#endif /* defined(RTW_USE_CFG80211_STA_EVENT) */
117250
117251 }
117252
117253 @@ -2743,21 +3133,18 @@ void rtw_cfg80211_indicate_sta_disassoc(
117254 u8 mgmt_buf[128] = {0};
117255 struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
117256 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
117257 + struct net_device *ndev = padapter->pnetdev;
117258
117259 -
117260 - printk("%s\n", __func__);
117261 + DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter));
117262
117263 +#if defined(RTW_USE_CFG80211_STA_EVENT) || defined(COMPAT_KERNEL_RELEASE)
117264 + cfg80211_del_sta(ndev, da, GFP_ATOMIC);
117265 +#else /* defined(RTW_USE_CFG80211_STA_EVENT) */
117266 channel = pmlmeext->cur_channel;
117267 -
117268 if (channel <= RTW_CH_MAX_2G_CHANNEL)
117269 - {
117270 freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ);
117271 - }
117272 else
117273 - {
117274 freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ);
117275 - }
117276 -
117277
117278 pmgmt_frame = mgmt_buf;
117279 pwlanhdr = (struct rtw_ieee80211_hdr *)pmgmt_frame;
117280 @@ -2781,20 +3168,22 @@ void rtw_cfg80211_indicate_sta_disassoc(
117281 reason = cpu_to_le16(reason);
117282 pmgmt_frame = rtw_set_fixed_ie(pmgmt_frame, _RSON_CODE_ , (unsigned char *)&reason, &frame_len);
117283
117284 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
117285 - cfg80211_rx_mgmt(padapter->pnetdev, freq, mgmt_buf, frame_len, GFP_ATOMIC);
117286 -#else
117287 + #ifdef COMPAT_KERNEL_RELEASE
117288 + rtw_cfg80211_rx_mgmt(padapter, freq, 0, mgmt_buf, frame_len, GFP_ATOMIC);
117289 + #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
117290 + rtw_cfg80211_rx_mgmt(padapter, freq, 0, mgmt_buf, frame_len, GFP_ATOMIC);
117291 + #else //COMPAT_KERNEL_RELEASE
117292 cfg80211_send_disassoc(padapter->pnetdev, mgmt_buf, frame_len);
117293 //cfg80211_rx_action(padapter->pnetdev, freq, mgmt_buf, frame_len, GFP_ATOMIC);
117294 -#endif
117295 -
117296 + #endif //COMPAT_KERNEL_RELEASE
117297 +#endif /* defined(RTW_USE_CFG80211_STA_EVENT) */
117298 }
117299
117300 static int rtw_cfg80211_monitor_if_open(struct net_device *ndev)
117301 {
117302 int ret = 0;
117303
117304 - printk("%s\n", __func__);
117305 + DBG_8192C("%s\n", __func__);
117306
117307 return ret;
117308 }
117309 @@ -2803,7 +3192,7 @@ static int rtw_cfg80211_monitor_if_close
117310 {
117311 int ret = 0;
117312
117313 - printk("%s\n", __func__);
117314 + DBG_8192C("%s\n", __func__);
117315
117316 return ret;
117317 }
117318 @@ -2816,14 +3205,17 @@ static int rtw_cfg80211_monitor_if_xmit_
117319 int dot11_hdr_len = 24;
117320 int snap_len = 6;
117321 unsigned char *pdata;
117322 - unsigned short frame_ctl;
117323 + u16 frame_ctl;
117324 unsigned char src_mac_addr[6];
117325 unsigned char dst_mac_addr[6];
117326 struct ieee80211_hdr *dot11_hdr;
117327 struct ieee80211_radiotap_header *rtap_hdr;
117328 _adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);
117329
117330 - printk("%s\n", __func__);
117331 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
117332 +
117333 + if (skb)
117334 + rtw_mstat_update(MSTAT_TYPE_SKB, MSTAT_ALLOC_SUCCESS, skb->truesize);
117335
117336 if (unlikely(skb->len < sizeof(struct ieee80211_radiotap_header)))
117337 goto fail;
117338 @@ -2838,7 +3230,7 @@ static int rtw_cfg80211_monitor_if_xmit_
117339
117340 if(rtap_len != 14)
117341 {
117342 - printk("radiotap len (should be 14): %d\n", rtap_len);
117343 + DBG_8192C("radiotap len (should be 14): %d\n", rtap_len);
117344 goto fail;
117345 }
117346
117347 @@ -2848,7 +3240,7 @@ static int rtw_cfg80211_monitor_if_xmit_
117348 dot11_hdr = (struct ieee80211_hdr *)skb->data;
117349 frame_ctl = le16_to_cpu(dot11_hdr->frame_control);
117350 /* Check if the QoS bit is set */
117351 - if ((frame_ctl & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA) {
117352 + if ((frame_ctl & RTW_IEEE80211_FCTL_FTYPE) == RTW_IEEE80211_FTYPE_DATA) {
117353 /* Check if this ia a Wireless Distribution System (WDS) frame
117354 * which has 4 MAC addresses
117355 */
117356 @@ -2868,15 +3260,17 @@ static int rtw_cfg80211_monitor_if_xmit_
117357 memcpy(pdata, dst_mac_addr, sizeof(dst_mac_addr));
117358 memcpy(pdata + sizeof(dst_mac_addr), src_mac_addr, sizeof(src_mac_addr));
117359
117360 - printk("should be eapol packet\n");
117361 + DBG_8192C("should be eapol packet\n");
117362
117363 /* Use the real net device to transmit the packet */
117364 - ret = rtw_xmit_entry(skb, padapter->pnetdev);
117365 + ret = _rtw_xmit_entry(skb, padapter->pnetdev);
117366
117367 return ret;
117368
117369 }
117370 - else if((frame_ctl & (IEEE80211_FCTL_FTYPE|IEEE80211_FCTL_STYPE)) == cpu_to_le16(IEEE80211_STYPE_ACTION))
117371 + else if ((frame_ctl & (RTW_IEEE80211_FCTL_FTYPE|RTW_IEEE80211_FCTL_STYPE))
117372 + == (RTW_IEEE80211_FTYPE_MGMT|RTW_IEEE80211_STYPE_ACTION)
117373 + )
117374 {
117375 //only for action frames
117376 struct xmit_frame *pmgntframe;
117377 @@ -2889,50 +3283,27 @@ static int rtw_cfg80211_monitor_if_xmit_
117378 struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
117379 u8 *buf = skb->data;
117380 u32 len = skb->len;
117381 + u8 category, action;
117382 + int type = -1;
117383
117384 - if(rtw_p2p_check_frames(padapter, buf, len, _TRUE) < 0)
117385 - {
117386 + if (rtw_action_frame_parse(buf, len, &category, &action) == _FALSE) {
117387 + DBG_8192C(FUNC_NDEV_FMT" frame_control:0x%x\n", FUNC_NDEV_ARG(ndev),
117388 + le16_to_cpu(((struct rtw_ieee80211_hdr_3addr *)buf)->frame_ctl));
117389 goto fail;
117390 - }
117391 -
117392 -/*
117393 - frame_body = (unsigned char *)(buf + sizeof(struct rtw_ieee80211_hdr_3addr));
117394 - category = frame_body[0];
117395 - //just for check
117396 - if(category == RTW_WLAN_CATEGORY_PUBLIC)
117397 - {
117398 - action = frame_body[ 1 ];
117399 - OUI_Subtype = frame_body[ 6 ];
117400 - dialogToken = frame_body[7];
117401 -
117402 - if ( action == ACT_PUBLIC_P2P )
117403 - {
117404 - printk("ACTION_CATEGORY_PUBLIC: ACT_PUBLIC_P2P, OUI=0x%x, OUI_Subtype=%d, dialogToken=%d\n",
117405 - cpu_to_be32( *( ( u32* ) ( frame_body + 2 ) ) ), OUI_Subtype, dialogToken);
117406 - }
117407 - else
117408 - {
117409 - printk("ACTION_CATEGORY_PUBLIC: action=%d, OUI=0x%x, OUI_Subtype=%d, dialogToken=%d\n",
117410 - action, cpu_to_be32( *( ( u32* ) ( frame_body + 2 ) ) ), OUI_Subtype, dialogToken);
117411 - }
117412 + }
117413
117414 - }
117415 - else if(category == RTW_WLAN_CATEGORY_P2P)
117416 - {
117417 - OUI_Subtype = frame_body[5];
117418 - dialogToken = frame_body[6];
117419 -
117420 - printk("ACTION_CATEGORY_P2P: OUI=0x%x, OUI_Subtype=%d, dialogToken=%d\n",
117421 - cpu_to_be32( *( ( u32* ) ( frame_body + 1 ) ) ), OUI_Subtype, dialogToken);
117422 + DBG_8192C("RTW_Tx:da="MAC_FMT" via "FUNC_NDEV_FMT"\n",
117423 + MAC_ARG(GetAddr1Ptr(buf)), FUNC_NDEV_ARG(ndev));
117424 + #ifdef CONFIG_P2P
117425 + if((type = rtw_p2p_check_frames(padapter, buf, len, _TRUE)) >= 0)
117426 + goto dump;
117427 + #endif
117428 + if (category == RTW_WLAN_CATEGORY_PUBLIC)
117429 + DBG_871X("RTW_Tx:%s\n", action_public_str(action));
117430 + else
117431 + DBG_871X("RTW_Tx:category(%u), action(%u)\n", category, action);
117432
117433 - }
117434 - else
117435 - {
117436 - printk("%s, action frame category=%d, drop!\n", __func__, category);
117437 - goto fail;
117438 - }
117439 -*/
117440 -
117441 +dump:
117442 //starting alloc mgmt frame to dump it
117443 if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
117444 {
117445 @@ -2949,6 +3320,19 @@ static int rtw_cfg80211_monitor_if_xmit_
117446 pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
117447
117448 _rtw_memcpy(pframe, (void*)buf, len);
117449 + #ifdef CONFIG_WFD
117450 + if (type >= 0)
117451 + {
117452 + struct wifi_display_info *pwfd_info;
117453 +
117454 + pwfd_info = padapter->wdinfo.wfd_info;
117455 +
117456 + if ( _TRUE == pwfd_info->wfd_enable )
117457 + {
117458 + rtw_append_wfd_ie( padapter, pframe, &len );
117459 + }
117460 + }
117461 + #endif // CONFIG_WFD
117462 pattrib->pktlen = len;
117463
117464 pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
117465 @@ -2961,12 +3345,11 @@ static int rtw_cfg80211_monitor_if_xmit_
117466 pattrib->last_txcmdsz = pattrib->pktlen;
117467
117468 dump_mgntframe(padapter, pmgntframe);
117469 -
117470
117471 }
117472 else
117473 {
117474 - printk("frame_ctl=0x%x\n", frame_ctl & (IEEE80211_FCTL_FTYPE|IEEE80211_FCTL_STYPE));
117475 + DBG_8192C("frame_ctl=0x%x\n", frame_ctl & (RTW_IEEE80211_FCTL_FTYPE|RTW_IEEE80211_FCTL_STYPE));
117476 }
117477
117478
117479 @@ -2980,14 +3363,14 @@ fail:
117480
117481 static void rtw_cfg80211_monitor_if_set_multicast_list(struct net_device *ndev)
117482 {
117483 - printk("%s\n", __func__);
117484 + DBG_8192C("%s\n", __func__);
117485 }
117486
117487 static int rtw_cfg80211_monitor_if_set_mac_address(struct net_device *ndev, void *addr)
117488 {
117489 int ret = 0;
117490
117491 - printk("%s\n", __func__);
117492 + DBG_8192C("%s\n", __func__);
117493
117494 return ret;
117495 }
117496 @@ -2997,181 +3380,210 @@ static const struct net_device_ops rtw_c
117497 .ndo_open = rtw_cfg80211_monitor_if_open,
117498 .ndo_stop = rtw_cfg80211_monitor_if_close,
117499 .ndo_start_xmit = rtw_cfg80211_monitor_if_xmit_entry,
117500 + #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,2,0))
117501 .ndo_set_multicast_list = rtw_cfg80211_monitor_if_set_multicast_list,
117502 + #endif
117503 .ndo_set_mac_address = rtw_cfg80211_monitor_if_set_mac_address,
117504 };
117505 #endif
117506
117507 -static struct net_device *rtw_cfg80211_add_monitor_if(_adapter *padapter, char *name)
117508 +static int rtw_cfg80211_add_monitor_if(_adapter *padapter, char *name, struct net_device **ndev)
117509 {
117510 int ret = 0;
117511 - struct net_device* ndev = NULL;
117512 + struct net_device* mon_ndev = NULL;
117513 + struct wireless_dev* mon_wdev = NULL;
117514 struct rtw_netdev_priv_indicator *pnpi;
117515 struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(padapter->rtw_wdev);
117516 -
117517 - printk("%s\n", __func__);
117518
117519 - if (!name ) {
117520 + if (!name ) {
117521 + DBG_871X(FUNC_ADPT_FMT" without specific name\n", FUNC_ADPT_ARG(padapter));
117522 ret = -EINVAL;
117523 goto out;
117524 }
117525
117526 - if((strnicmp(name, pwdev_priv->ifname_mon, strlen(name)) ==0)
117527 - && pwdev_priv->pmon_ndev)
117528 - {
117529 - ndev = pwdev_priv->pmon_ndev;
117530 -
117531 - printk("%s, monitor interface(%s) has existed\n", __func__, name);
117532 -
117533 + if (pwdev_priv->pmon_ndev) {
117534 + DBG_871X(FUNC_ADPT_FMT" monitor interface exist: "NDEV_FMT"\n",
117535 + FUNC_ADPT_ARG(padapter), NDEV_ARG(pwdev_priv->pmon_ndev));
117536 + ret = -EBUSY;
117537 goto out;
117538 }
117539 -
117540 -
117541 - ndev = alloc_etherdev(sizeof(struct rtw_netdev_priv_indicator));
117542 - if (!ndev) {
117543 +
117544 + mon_ndev = alloc_etherdev(sizeof(struct rtw_netdev_priv_indicator));
117545 + if (!mon_ndev) {
117546 + DBG_871X(FUNC_ADPT_FMT" allocate ndev fail\n", FUNC_ADPT_ARG(padapter));
117547 ret = -ENOMEM;
117548 goto out;
117549 }
117550
117551 - ndev->type = ARPHRD_IEEE80211_RADIOTAP;
117552 - strncpy(ndev->name, name, IFNAMSIZ);
117553 - ndev->name[IFNAMSIZ - 1] = 0;
117554 + mon_ndev->type = ARPHRD_IEEE80211_RADIOTAP;
117555 + strncpy(mon_ndev->name, name, IFNAMSIZ);
117556 + mon_ndev->name[IFNAMSIZ - 1] = 0;
117557 + mon_ndev->destructor = rtw_ndev_destructor;
117558
117559 -#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
117560 - ndev->netdev_ops = &rtw_cfg80211_monitor_if_ops;
117561 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
117562 + mon_ndev->netdev_ops = &rtw_cfg80211_monitor_if_ops;
117563 #else
117564 - ndev->open = rtw_cfg80211_monitor_if_open;
117565 - ndev->stop = rtw_cfg80211_monitor_if_close;
117566 - ndev->hard_start_xmit = rtw_cfg80211_monitor_if_xmit_entry;
117567 - ndev->set_mac_address = rtw_cfg80211_monitor_if_set_mac_address;
117568 + mon_ndev->open = rtw_cfg80211_monitor_if_open;
117569 + mon_ndev->stop = rtw_cfg80211_monitor_if_close;
117570 + mon_ndev->hard_start_xmit = rtw_cfg80211_monitor_if_xmit_entry;
117571 + mon_ndev->set_mac_address = rtw_cfg80211_monitor_if_set_mac_address;
117572 #endif
117573
117574 - pnpi = netdev_priv(ndev);
117575 + pnpi = netdev_priv(mon_ndev);
117576 pnpi->priv = padapter;
117577 pnpi->sizeof_priv = sizeof(_adapter);
117578
117579 - ret = register_netdevice(ndev);
117580 - if (ret) {
117581 + /* wdev */
117582 + mon_wdev = (struct wireless_dev *)rtw_zmalloc(sizeof(struct wireless_dev));
117583 + if (!mon_wdev) {
117584 + DBG_871X(FUNC_ADPT_FMT" allocate mon_wdev fail\n", FUNC_ADPT_ARG(padapter));
117585 + ret = -ENOMEM;
117586 goto out;
117587 }
117588
117589 - pwdev_priv->pmon_ndev = ndev;
117590 + mon_wdev->wiphy = padapter->rtw_wdev->wiphy;
117591 + mon_wdev->netdev = mon_ndev;
117592 + mon_wdev->iftype = NL80211_IFTYPE_MONITOR;
117593 + mon_ndev->ieee80211_ptr = mon_wdev;
117594 +
117595 + ret = register_netdevice(mon_ndev);
117596 + if (ret) {
117597 + goto out;
117598 + }
117599 +
117600 + *ndev = pwdev_priv->pmon_ndev = mon_ndev;
117601 _rtw_memcpy(pwdev_priv->ifname_mon, name, IFNAMSIZ+1);
117602
117603 out:
117604 - if (ret && ndev)
117605 - {
117606 - free_netdev(ndev);
117607 - ndev = NULL;
117608 + if (ret && mon_wdev) {
117609 + rtw_mfree((u8*)mon_wdev, sizeof(struct wireless_dev));
117610 + mon_wdev = NULL;
117611 }
117612 -
117613 -
117614 - printk("%s, ndev=%p, pmon_ndev=%p, ret=%d\n", __func__, ndev, pwdev_priv->pmon_ndev, ret);
117615 -
117616 - return ndev;
117617 +
117618 + if (ret && mon_ndev) {
117619 + free_netdev(mon_ndev);
117620 + *ndev = mon_ndev = NULL;
117621 + }
117622 +
117623 + return ret;
117624 }
117625
117626 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
117627 -static struct net_device * cfg80211_rtw_add_virtual_intf(struct wiphy *wiphy, char *name,
117628 -#else // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
117629 -static int cfg80211_rtw_add_virtual_intf(struct wiphy *wiphy, char *name,
117630 -#endif // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
117631 - enum nl80211_iftype type, u32 *flags,
117632 - struct vif_params *params)
117633 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
117634 +static struct wireless_dev *
117635 +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
117636 +static struct net_device *
117637 +#else
117638 +static int
117639 +#endif
117640 + cfg80211_rtw_add_virtual_intf(
117641 + struct wiphy *wiphy,
117642 + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,7,0))
117643 + const char *name,
117644 + #else
117645 + char *name,
117646 + #endif
117647 + enum nl80211_iftype type, u32 *flags, struct vif_params *params)
117648 {
117649 + int ret = 0;
117650 struct net_device* ndev = NULL;
117651 - _adapter *padapter = wiphy_to_adapter(wiphy);
117652 + _adapter *padapter = wiphy_to_adapter(wiphy);
117653 +
117654 + DBG_871X(FUNC_ADPT_FMT " wiphy:%s, name:%s, type:%d\n",
117655 + FUNC_ADPT_ARG(padapter), wiphy_name(wiphy), name, type);
117656
117657 - printk("%s, ifname=%s, type=%d\n", __func__, name, type);
117658 -
117659 -
117660 switch (type) {
117661 case NL80211_IFTYPE_ADHOC:
117662 case NL80211_IFTYPE_AP_VLAN:
117663 case NL80211_IFTYPE_WDS:
117664 case NL80211_IFTYPE_MESH_POINT:
117665 -
117666 + ret = -ENODEV;
117667 break;
117668 case NL80211_IFTYPE_MONITOR:
117669 - ndev = rtw_cfg80211_add_monitor_if(padapter, name);
117670 + ret = rtw_cfg80211_add_monitor_if(padapter, (char *)name, &ndev);
117671 break;
117672
117673 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
117674 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
117675 case NL80211_IFTYPE_P2P_CLIENT:
117676 #endif
117677 case NL80211_IFTYPE_STATION:
117678 -
117679 + ret = -ENODEV;
117680 break;
117681
117682 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
117683 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
117684 case NL80211_IFTYPE_P2P_GO:
117685 #endif
117686 case NL80211_IFTYPE_AP:
117687 -
117688 + ret = -ENODEV;
117689 break;
117690 default:
117691 - printk("Unsupported interface type\n");
117692 + ret = -ENODEV;
117693 + DBG_871X("Unsupported interface type\n");
117694 break;
117695 }
117696
117697 - printk("ndev=%p\n", ndev);
117698 -
117699 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
117700 - return ndev;
117701 -#else // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
117702 - return 0;
117703 -#endif // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
117704 -
117705 + DBG_871X(FUNC_ADPT_FMT" ndev:%p, ret:%d\n", FUNC_ADPT_ARG(padapter), ndev, ret);
117706 +
117707 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
117708 + return ndev ? ndev->ieee80211_ptr : ERR_PTR(ret);
117709 +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
117710 + return ndev ? ndev : ERR_PTR(ret);
117711 +#else
117712 + return ret;
117713 +#endif
117714 }
117715
117716 -static int cfg80211_rtw_del_virtual_intf(struct wiphy *wiphy, struct net_device *dev)
117717 +static int cfg80211_rtw_del_virtual_intf(struct wiphy *wiphy,
117718 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
117719 + struct wireless_dev *wdev
117720 +#else
117721 + struct net_device *ndev
117722 +#endif
117723 +)
117724 {
117725 - _adapter *padapter = wiphy_to_adapter(wiphy);
117726 struct rtw_wdev_priv *pwdev_priv = (struct rtw_wdev_priv *)wiphy_priv(wiphy);
117727 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
117728 + struct net_device *ndev;
117729 + ndev = wdev ? wdev->netdev : NULL;
117730 +#endif
117731
117732 - printk("%s\n", __func__);
117733 + if (!ndev)
117734 + goto exit;
117735
117736 - if(dev)
117737 - {
117738 - unregister_netdev(dev);
117739 -
117740 - free_netdev(dev);
117741 + unregister_netdevice(ndev);
117742
117743 - if(dev == pwdev_priv->pmon_ndev)
117744 - {
117745 - printk("remove monitor interface\n");
117746 - pwdev_priv->pmon_ndev = NULL;
117747 - pwdev_priv->ifname_mon[0] = '\0';
117748 - }
117749 - }
117750 -
117751 + if (ndev == pwdev_priv->pmon_ndev) {
117752 + pwdev_priv->pmon_ndev = NULL;
117753 + pwdev_priv->ifname_mon[0] = '\0';
117754 + DBG_871X(FUNC_NDEV_FMT" remove monitor interface\n", FUNC_NDEV_ARG(ndev));
117755 + }
117756 +
117757 +exit:
117758 return 0;
117759 }
117760
117761 -static int cfg80211_rtw_add_beacon(struct wiphy *wiphy, struct net_device *dev,
117762 - struct beacon_parameters *info)
117763 +static int rtw_add_beacon(_adapter *adapter, const u8 *head, size_t head_len, const u8 *tail, size_t tail_len)
117764 {
117765 int ret=0;
117766 u8 *pbuf = NULL;
117767 uint len, wps_ielen=0;
117768 uint p2p_ielen=0;
117769 u8 *p2p_ie;
117770 - _adapter *padapter = wiphy_to_adapter(wiphy);
117771 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
117772 + u8 got_p2p_ie = _FALSE;
117773 + struct mlme_priv *pmlmepriv = &(adapter->mlmepriv);
117774 //struct sta_priv *pstapriv = &padapter->stapriv;
117775
117776
117777 - printk("%s, beacon_head_len=%d, beacon_tail_len=%d\n", __FUNCTION__, info->head_len, info->tail_len);
117778 + DBG_8192C("%s beacon_head_len=%zu, beacon_tail_len=%zu\n", __FUNCTION__, head_len, tail_len);
117779
117780
117781 if(check_fwstate(pmlmepriv, WIFI_AP_STATE) != _TRUE)
117782 return -EINVAL;
117783
117784 - if(info->head_len<24)
117785 + if(head_len<24)
117786 return -EINVAL;
117787
117788
117789 - pbuf = rtw_zmalloc(info->head_len+info->tail_len);
117790 + pbuf = rtw_zmalloc(head_len+tail_len);
117791 if(!pbuf)
117792 return -ENOMEM;
117793
117794 @@ -3182,38 +3594,33 @@ static int cfg80211_rtw_add_beacon(struc
117795 // pstapriv->max_num_sta = NUM_STA;
117796
117797
117798 - _rtw_memcpy(pbuf, info->head+24, info->head_len-24);// 24=beacon header len.
117799 - _rtw_memcpy(pbuf+info->head_len-24, info->tail, info->tail_len);
117800 + _rtw_memcpy(pbuf, (void *)head+24, head_len-24);// 24=beacon header len.
117801 + _rtw_memcpy(pbuf+head_len-24, (void *)tail, tail_len);
117802
117803 - len = info->head_len+info->tail_len-24;
117804 + len = head_len+tail_len-24;
117805
117806 //check wps ie if inclued
117807 if(rtw_get_wps_ie(pbuf+_FIXED_IE_LENGTH_, len-_FIXED_IE_LENGTH_, NULL, &wps_ielen))
117808 - printk("add bcn, wps_ielen=%d\n", wps_ielen);
117809 + DBG_8192C("add bcn, wps_ielen=%d\n", wps_ielen);
117810
117811 -
117812 +#ifdef CONFIG_P2P
117813 //check p2p ie if inclued
117814 - if(rtw_get_p2p_ie(pbuf+_FIXED_IE_LENGTH_, len-_FIXED_IE_LENGTH_, NULL, &p2p_ielen))
117815 - printk("got p2p_ie, len=%d\n", p2p_ielen);
117816 -
117817 -
117818 -
117819 - // pbss_network->IEs will not include p2p_ie
117820 - if(rtw_check_beacon_data(padapter, pbuf, len-p2p_ielen) == _SUCCESS)
117821 - //if(rtw_check_beacon_data(padapter, pbuf, len) == _SUCCESS)
117822 + if( adapter->wdinfo.driver_interface == DRIVER_CFG80211 )
117823 {
117824 -#ifdef CONFIG_P2P
117825 //check p2p if enable
117826 - if((p2p_ie=rtw_get_p2p_ie(pbuf+_FIXED_IE_LENGTH_, len-_FIXED_IE_LENGTH_, NULL, &p2p_ielen)))
117827 + if(rtw_get_p2p_ie(pbuf+_FIXED_IE_LENGTH_, len-_FIXED_IE_LENGTH_, NULL, &p2p_ielen))
117828 {
117829 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
117830 - struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
117831 + struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
117832 + struct wifidirect_info *pwdinfo= &(adapter->wdinfo);
117833 +
117834 + DBG_8192C("got p2p_ie, len=%d\n", p2p_ielen);
117835 + got_p2p_ie = _TRUE;
117836
117837 if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
117838 - {
117839 - printk("Enable P2P function for the first time\n");
117840 - rtw_p2p_enable(padapter, P2P_ROLE_GO);
117841 - wdev_to_priv(padapter->rtw_wdev)->p2p_enabled = _TRUE;
117842 + {
117843 + DBG_8192C("Enable P2P function for the first time\n");
117844 + rtw_p2p_enable(adapter, P2P_ROLE_GO);
117845 + wdev_to_priv(adapter->rtw_wdev)->p2p_enabled = _TRUE;
117846 }
117847 else
117848 {
117849 @@ -3221,20 +3628,32 @@ static int cfg80211_rtw_add_beacon(struc
117850 _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
117851 _cancel_timer_ex( &pwdinfo->pre_tx_scan_timer);
117852
117853 - printk("enter GO Mode, p2p_ielen=%d\n", p2p_ielen);
117854 + DBG_8192C("enter GO Mode, p2p_ielen=%d\n", p2p_ielen);
117855
117856 rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO);
117857 rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_OK);
117858 pwdinfo->intent = 15;
117859 - }
117860 + }
117861 + }
117862 + }
117863 +#endif // CONFIG_P2P
117864
117865 + /* pbss_network->IEs will not include p2p_ie, wfd ie */
117866 + rtw_ies_remove_ie(pbuf, &len, _BEACON_IE_OFFSET_, _VENDOR_SPECIFIC_IE_, P2P_OUI, 4);
117867 + rtw_ies_remove_ie(pbuf, &len, _BEACON_IE_OFFSET_, _VENDOR_SPECIFIC_IE_, WFD_OUI, 4);
117868 +
117869 + if (rtw_check_beacon_data(adapter, pbuf, len) == _SUCCESS)
117870 + {
117871 +#ifdef CONFIG_P2P
117872 + //check p2p if enable
117873 + if(got_p2p_ie == _TRUE)
117874 + {
117875 + struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
117876 + struct wifidirect_info *pwdinfo= &(adapter->wdinfo);
117877 pwdinfo->operating_channel = pmlmeext->cur_channel;
117878 -
117879 }
117880 #endif //CONFIG_P2P
117881 -
117882 ret = 0;
117883 -
117884 }
117885 else
117886 {
117887 @@ -3242,66 +3661,136 @@ static int cfg80211_rtw_add_beacon(struc
117888 }
117889
117890
117891 - rtw_mfree(pbuf, info->head_len+info->tail_len);
117892 + rtw_mfree(pbuf, head_len+tail_len);
117893
117894 return ret;
117895 -
117896 }
117897
117898 -static int cfg80211_rtw_set_beacon(struct wiphy *wiphy, struct net_device *dev,
117899 +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0)) && !defined(COMPAT_KERNEL_RELEASE)
117900 +static int cfg80211_rtw_add_beacon(struct wiphy *wiphy, struct net_device *ndev,
117901 + struct beacon_parameters *info)
117902 +{
117903 + int ret=0;
117904 + _adapter *adapter = wiphy_to_adapter(wiphy);
117905 +
117906 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
117907 + ret = rtw_add_beacon(adapter, info->head, info->head_len, info->tail, info->tail_len);
117908 +
117909 + return ret;
117910 +}
117911 +
117912 +static int cfg80211_rtw_set_beacon(struct wiphy *wiphy, struct net_device *ndev,
117913 struct beacon_parameters *info)
117914 {
117915 _adapter *padapter = wiphy_to_adapter(wiphy);
117916 struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
117917
117918 - printk("%s\n", __func__);
117919 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
117920
117921 pmlmeext->bstart_bss = _TRUE;
117922
117923 - cfg80211_rtw_add_beacon(wiphy, dev, info);
117924 + cfg80211_rtw_add_beacon(wiphy, ndev, info);
117925
117926 return 0;
117927 }
117928
117929 -static int cfg80211_rtw_del_beacon(struct wiphy *wiphy, struct net_device *dev)
117930 +static int cfg80211_rtw_del_beacon(struct wiphy *wiphy, struct net_device *ndev)
117931 {
117932 - printk("%s\n", __func__);
117933 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
117934
117935 return 0;
117936 }
117937 +#else
117938 +static int cfg80211_rtw_start_ap(struct wiphy *wiphy, struct net_device *ndev,
117939 + struct cfg80211_ap_settings *settings)
117940 +{
117941 + int ret = 0;
117942 + _adapter *adapter = wiphy_to_adapter(wiphy);
117943 +
117944 + DBG_871X(FUNC_NDEV_FMT" hidden_ssid:%d, auth_type:%d\n", FUNC_NDEV_ARG(ndev),
117945 + settings->hidden_ssid, settings->auth_type);
117946 +
117947 + ret = rtw_add_beacon(adapter, settings->beacon.head, settings->beacon.head_len,
117948 + settings->beacon.tail, settings->beacon.tail_len);
117949 +
117950 + adapter->mlmeextpriv.mlmext_info.hidden_ssid_mode = settings->hidden_ssid;
117951 +
117952 + if (settings->ssid && settings->ssid_len) {
117953 + WLAN_BSSID_EX *pbss_network = &adapter->mlmepriv.cur_network.network;
117954 + WLAN_BSSID_EX *pbss_network_ext = &adapter->mlmeextpriv.mlmext_info.network;
117955 +
117956 + if(0)
117957 + DBG_871X(FUNC_ADPT_FMT" ssid:(%s,%d), from ie:(%s,%d)\n", FUNC_ADPT_ARG(adapter),
117958 + settings->ssid, settings->ssid_len,
117959 + pbss_network->Ssid.Ssid, pbss_network->Ssid.SsidLength);
117960 +
117961 + _rtw_memcpy(pbss_network->Ssid.Ssid, (void *)settings->ssid, settings->ssid_len);
117962 + pbss_network->Ssid.SsidLength = settings->ssid_len;
117963 + _rtw_memcpy(pbss_network_ext->Ssid.Ssid, (void *)settings->ssid, settings->ssid_len);
117964 + pbss_network_ext->Ssid.SsidLength = settings->ssid_len;
117965 +
117966 + if(0)
117967 + DBG_871X(FUNC_ADPT_FMT" after ssid:(%s,%d), (%s,%d)\n", FUNC_ADPT_ARG(adapter),
117968 + pbss_network->Ssid.Ssid, pbss_network->Ssid.SsidLength,
117969 + pbss_network_ext->Ssid.Ssid, pbss_network_ext->Ssid.SsidLength);
117970 + }
117971 +
117972 + return ret;
117973 +}
117974 +
117975 +static int cfg80211_rtw_change_beacon(struct wiphy *wiphy, struct net_device *ndev,
117976 + struct cfg80211_beacon_data *info)
117977 +{
117978 + int ret = 0;
117979 + _adapter *adapter = wiphy_to_adapter(wiphy);
117980
117981 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
117982
117983 -static int cfg80211_rtw_add_station(struct wiphy *wiphy, struct net_device *dev,
117984 + ret = rtw_add_beacon(adapter, info->head, info->head_len, info->tail, info->tail_len);
117985 +
117986 + return ret;
117987 +}
117988 +
117989 +static int cfg80211_rtw_stop_ap(struct wiphy *wiphy, struct net_device *ndev)
117990 +{
117991 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
117992 + return 0;
117993 +}
117994 +
117995 +#endif //(LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0))
117996 +
117997 +static int cfg80211_rtw_add_station(struct wiphy *wiphy, struct net_device *ndev,
117998 u8 *mac, struct station_parameters *params)
117999 {
118000 - printk("%s\n", __func__);
118001 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
118002
118003 return 0;
118004 }
118005
118006 -static int cfg80211_rtw_del_station(struct wiphy *wiphy, struct net_device *dev,
118007 +static int cfg80211_rtw_del_station(struct wiphy *wiphy, struct net_device *ndev,
118008 u8 *mac)
118009 {
118010 int ret=0;
118011 _irqL irqL;
118012 _list *phead, *plist;
118013 + u8 updated;
118014 struct sta_info *psta = NULL;
118015 - _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
118016 + _adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);
118017 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
118018 struct sta_priv *pstapriv = &padapter->stapriv;
118019
118020 - printk("+%s\n", __func__);
118021 + DBG_871X("+"FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
118022
118023 if(check_fwstate(pmlmepriv, (_FW_LINKED|WIFI_AP_STATE)) != _TRUE)
118024 {
118025 - printk("%s, fw_state != FW_LINKED|WIFI_AP_STATE\n", __func__);
118026 + DBG_8192C("%s, fw_state != FW_LINKED|WIFI_AP_STATE\n", __func__);
118027 return -EINVAL;
118028 }
118029
118030
118031 if(!mac)
118032 {
118033 - printk("flush all sta, and cam_entry\n");
118034 + DBG_8192C("flush all sta, and cam_entry\n");
118035
118036 flush_all_cam_entry(padapter); //clear CAM
118037
118038 @@ -3311,7 +3800,7 @@ static int cfg80211_rtw_del_station(stru
118039 }
118040
118041
118042 - printk("free sta macaddr =" MAC_FMT "\n", MAC_ARG(mac));
118043 + DBG_8192C("free sta macaddr =" MAC_FMT "\n", MAC_ARG(mac));
118044
118045 if (mac[0] == 0xff && mac[1] == 0xff &&
118046 mac[2] == 0xff && mac[3] == 0xff &&
118047 @@ -3344,9 +3833,10 @@ static int cfg80211_rtw_del_station(stru
118048 DBG_8192C("free psta=%p, aid=%d\n", psta, psta->aid);
118049
118050 rtw_list_delete(&psta->asoc_list);
118051 + pstapriv->asoc_list_cnt--;
118052
118053 //_exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
118054 - ap_free_sta(padapter, psta);
118055 + updated = ap_free_sta(padapter, psta, _TRUE, WLAN_REASON_DEAUTH_LEAVING);
118056 //_enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
118057
118058 psta = NULL;
118059 @@ -3360,73 +3850,48 @@ static int cfg80211_rtw_del_station(stru
118060
118061 _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
118062
118063 -
118064 -#if 0
118065 - psta = rtw_get_stainfo(pstapriv, mac);
118066 - if(psta)
118067 - {
118068 - //DBG_8192C("free psta=%p, aid=%d\n", psta, psta->aid);
118069 -
118070 - _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
118071 - if(rtw_is_list_empty(&psta->asoc_list)==_FALSE)
118072 - {
118073 - rtw_list_delete(&psta->asoc_list);
118074 - ap_free_sta(padapter, psta);
118075 -
118076 - psta = NULL;
118077 + associated_clients_update(padapter, updated);
118078
118079 - }
118080 - _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
118081 -
118082 - }
118083 - else
118084 - {
118085 - DBG_8192C("cfg80211_rtw_del_station(), sta has already been removed or never been added\n");
118086 -
118087 - //ret = -1;
118088 - }
118089 -#endif
118090 -
118091 - printk("-%s\n", __func__);
118092 + DBG_871X("-"FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
118093
118094 return ret;
118095
118096 }
118097
118098 -static int cfg80211_rtw_change_station(struct wiphy *wiphy, struct net_device *dev,
118099 +static int cfg80211_rtw_change_station(struct wiphy *wiphy, struct net_device *ndev,
118100 u8 *mac, struct station_parameters *params)
118101 {
118102 - printk("%s\n", __func__);
118103 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
118104
118105 return 0;
118106 }
118107
118108 -static int cfg80211_rtw_dump_station(struct wiphy *wiphy, struct net_device *dev,
118109 +static int cfg80211_rtw_dump_station(struct wiphy *wiphy, struct net_device *ndev,
118110 int idx, u8 *mac, struct station_info *sinfo)
118111 {
118112 - printk("%s\n", __func__);
118113 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
118114
118115 //TODO: dump scanned queue
118116
118117 return -ENOENT;
118118 }
118119
118120 -static int cfg80211_rtw_change_bss(struct wiphy *wiphy, struct net_device *dev,
118121 +static int cfg80211_rtw_change_bss(struct wiphy *wiphy, struct net_device *ndev,
118122 struct bss_parameters *params)
118123 {
118124 u8 i;
118125
118126 - printk("%s\n", __func__);
118127 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
118128 /*
118129 - printk("use_cts_prot=%d\n", params->use_cts_prot);
118130 - printk("use_short_preamble=%d\n", params->use_short_preamble);
118131 - printk("use_short_slot_time=%d\n", params->use_short_slot_time);
118132 - printk("ap_isolate=%d\n", params->ap_isolate);
118133 + DBG_8192C("use_cts_prot=%d\n", params->use_cts_prot);
118134 + DBG_8192C("use_short_preamble=%d\n", params->use_short_preamble);
118135 + DBG_8192C("use_short_slot_time=%d\n", params->use_short_slot_time);
118136 + DBG_8192C("ap_isolate=%d\n", params->ap_isolate);
118137
118138 - printk("basic_rates_len=%d\n", params->basic_rates_len);
118139 + DBG_8192C("basic_rates_len=%d\n", params->basic_rates_len);
118140 for(i=0; i<params->basic_rates_len; i++)
118141 {
118142 - printk("basic_rates=%d\n", params->basic_rates[i]);
118143 + DBG_8192C("basic_rates=%d\n", params->basic_rates[i]);
118144
118145 }
118146 */
118147 @@ -3434,27 +3899,31 @@ static int cfg80211_rtw_change_bss(struc
118148
118149 }
118150
118151 -static int cfg80211_rtw_set_channel(struct wiphy *wiphy, struct net_device *dev,
118152 - struct ieee80211_channel *chan,
118153 - enum nl80211_channel_type channel_type)
118154 +static int cfg80211_rtw_set_channel(struct wiphy *wiphy
118155 + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
118156 + , struct net_device *ndev
118157 + #endif
118158 + , struct ieee80211_channel *chan, enum nl80211_channel_type channel_type)
118159 {
118160 - printk("%s\n", __func__);
118161 + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
118162 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
118163 + #endif
118164
118165 return 0;
118166 }
118167
118168 -static int cfg80211_rtw_auth(struct wiphy *wiphy, struct net_device *dev,
118169 +static int cfg80211_rtw_auth(struct wiphy *wiphy, struct net_device *ndev,
118170 struct cfg80211_auth_request *req)
118171 {
118172 - printk("%s\n", __func__);
118173 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
118174
118175 return 0;
118176 }
118177
118178 -static int cfg80211_rtw_assoc(struct wiphy *wiphy, struct net_device *dev,
118179 +static int cfg80211_rtw_assoc(struct wiphy *wiphy, struct net_device *ndev,
118180 struct cfg80211_assoc_request *req)
118181 {
118182 - printk("%s\n", __func__);
118183 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
118184
118185 return 0;
118186 }
118187 @@ -3462,66 +3931,108 @@ static int cfg80211_rtw_assoc(struct wip
118188
118189 void rtw_cfg80211_rx_action_p2p(_adapter *padapter, u8 *pmgmt_frame, uint frame_len)
118190 {
118191 + int type;
118192 s32 freq;
118193 - int channel;
118194 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
118195 + int channel;
118196 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
118197 + u8 category, action;
118198
118199 -#ifdef CONFIG_DEBUG_CFG80211
118200 - printk("%s\n", __func__);
118201 -#endif
118202 + channel = rtw_get_oper_ch(padapter);
118203
118204 - rtw_p2p_check_frames(padapter, pmgmt_frame, frame_len, _FALSE);
118205 + DBG_8192C("RTW_Rx:cur_ch=%d\n", channel);
118206 + #ifdef CONFIG_P2P
118207 + type = rtw_p2p_check_frames(padapter, pmgmt_frame, frame_len, _FALSE);
118208 + if (type >= 0)
118209 + goto indicate;
118210 + #endif
118211 + rtw_action_frame_parse(pmgmt_frame, frame_len, &category, &action);
118212 + DBG_871X("RTW_Rx:category(%u), action(%u)\n", category, action);
118213
118214 - channel = pmlmeext->cur_channel;
118215 -
118216 +indicate:
118217 if (channel <= RTW_CH_MAX_2G_CHANNEL)
118218 - {
118219 freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ);
118220 - }
118221 else
118222 - {
118223 freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ);
118224 - }
118225
118226 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
118227 - cfg80211_rx_mgmt(padapter->pnetdev, freq, pmgmt_frame, frame_len, GFP_ATOMIC);
118228 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
118229 + rtw_cfg80211_rx_mgmt(padapter, freq, 0, pmgmt_frame, frame_len, GFP_ATOMIC);
118230 #else
118231 cfg80211_rx_action(padapter->pnetdev, freq, pmgmt_frame, frame_len, GFP_ATOMIC);
118232 #endif
118233 -
118234 }
118235
118236 void rtw_cfg80211_rx_p2p_action_public(_adapter *padapter, u8 *pmgmt_frame, uint frame_len)
118237 {
118238 + int type;
118239 s32 freq;
118240 int channel;
118241 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
118242 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
118243 + u8 category, action;
118244
118245 -#ifdef CONFIG_DEBUG_CFG80211
118246 - printk("%s\n", __func__);
118247 -#endif
118248 + channel = rtw_get_oper_ch(padapter);
118249
118250 - rtw_p2p_check_frames(padapter, pmgmt_frame, frame_len, _FALSE);
118251 + DBG_8192C("RTW_Rx:cur_ch=%d\n", channel);
118252 + #ifdef CONFIG_P2P
118253 + type = rtw_p2p_check_frames(padapter, pmgmt_frame, frame_len, _FALSE);
118254 + if (type >= 0) {
118255 + switch (type) {
118256 + case P2P_GO_NEGO_CONF:
118257 + case P2P_PROVISION_DISC_RESP:
118258 + case P2P_INVIT_RESP:
118259 + rtw_set_scan_deny(padapter, 2000);
118260 + rtw_clear_scan_deny(padapter);
118261 + }
118262 + goto indicate;
118263 + }
118264 + #endif
118265 + rtw_action_frame_parse(pmgmt_frame, frame_len, &category, &action);
118266 + DBG_871X("RTW_Rx:category(%u), action(%u)\n", category, action);
118267
118268 - channel = pmlmeext->cur_channel;
118269 -
118270 +indicate:
118271 if (channel <= RTW_CH_MAX_2G_CHANNEL)
118272 - {
118273 freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ);
118274 - }
118275 else
118276 - {
118277 freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ);
118278 - }
118279
118280 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
118281 - cfg80211_rx_mgmt(padapter->pnetdev, freq, pmgmt_frame, frame_len, GFP_ATOMIC);
118282 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
118283 + rtw_cfg80211_rx_mgmt(padapter, freq, 0, pmgmt_frame, frame_len, GFP_ATOMIC);
118284 #else
118285 cfg80211_rx_action(padapter->pnetdev, freq, pmgmt_frame, frame_len, GFP_ATOMIC);
118286 #endif
118287 +}
118288 +
118289 +void rtw_cfg80211_rx_action(_adapter *adapter, u8 *frame, uint frame_len, const char*msg)
118290 +{
118291 + s32 freq;
118292 + int channel;
118293 + struct mlme_ext_priv *pmlmeext = &(adapter->mlmeextpriv);
118294 + struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(adapter->rtw_wdev);
118295 + u8 category, action;
118296 +
118297 + channel = rtw_get_oper_ch(adapter);
118298 +
118299 + rtw_action_frame_parse(frame, frame_len, &category, &action);
118300 +
118301 + DBG_8192C("RTW_Rx:cur_ch=%d\n", channel);
118302 + if (msg)
118303 + DBG_871X("RTW_Rx:%s\n", msg);
118304 + else
118305 + DBG_871X("RTW_Rx:category(%u), action(%u)\n", category, action);
118306 +
118307 + if (channel <= RTW_CH_MAX_2G_CHANNEL)
118308 + freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ);
118309 + else
118310 + freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ);
118311 +
118312 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
118313 + rtw_cfg80211_rx_mgmt(adapter, freq, 0, frame, frame_len, GFP_ATOMIC);
118314 +#else
118315 + cfg80211_rx_action(adapter->pnetdev, freq, frame, frame_len, GFP_ATOMIC);
118316 +#endif
118317
118318 }
118319
118320 +#ifdef CONFIG_P2P
118321 void rtw_cfg80211_issue_p2p_provision_request(_adapter *padapter, const u8 *buf, size_t len)
118322 {
118323 u16 wps_devicepassword_id = 0x0000;
118324 @@ -3625,9 +4136,9 @@ void rtw_cfg80211_issue_p2p_provision_re
118325 fctrl = &(pwlanhdr->frame_ctl);
118326 *(fctrl) = 0;
118327
118328 - _rtw_memcpy(pwlanhdr->addr1, pwdinfo->tx_prov_disc_info.peerIFAddr, ETH_ALEN);
118329 + _rtw_memcpy(pwlanhdr->addr1, pwdinfo->tx_prov_disc_info.peerDevAddr, ETH_ALEN);
118330 _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
118331 - _rtw_memcpy(pwlanhdr->addr3, pwdinfo->tx_prov_disc_info.peerIFAddr, ETH_ALEN);
118332 + _rtw_memcpy(pwlanhdr->addr3, pwdinfo->tx_prov_disc_info.peerDevAddr, ETH_ALEN);
118333
118334 SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
118335 pmlmeext->mgnt_seq++;
118336 @@ -3668,8 +4179,7 @@ void rtw_cfg80211_issue_p2p_provision_re
118337
118338 // Value:
118339 // Device Capability Bitmap, 1 byte
118340 - // Be able to participate in additional P2P Groups and
118341 - // support the P2P Invitation Procedure
118342 + // Group Capability Bitmap, 1 byte
118343 _rtw_memcpy(p2p_ie + p2pielen, &capability, 2);
118344 p2pielen += 2;
118345
118346 @@ -3736,344 +4246,528 @@ void rtw_cfg80211_issue_p2p_provision_re
118347
118348 pattrib->last_txcmdsz = pattrib->pktlen;
118349
118350 - dump_mgntframe(padapter, pmgntframe);
118351 + //dump_mgntframe(padapter, pmgntframe);
118352 + if (dump_mgntframe_and_wait_ack(padapter, pmgntframe) != _SUCCESS)
118353 + DBG_8192C("%s, ack to\n", __func__);
118354
118355 //if(wps_devicepassword_id == WPS_DPID_REGISTRAR_SPEC)
118356 //{
118357 - // printk("waiting for p2p peer key-in PIN CODE\n");
118358 + // DBG_8192C("waiting for p2p peer key-in PIN CODE\n");
118359 // rtw_msleep_os(15000); // 15 sec for key in PIN CODE, workaround for GS2 before issuing Nego Req.
118360 //}
118361
118362 }
118363
118364 -static int cfg80211_rtw_mgmt_tx(struct wiphy *wiphy, struct net_device *dev,
118365 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
118366 - struct ieee80211_channel *chan, bool offchan,
118367 - enum nl80211_channel_type channel_type,
118368 - bool channel_type_valid, unsigned int wait,
118369 -#else //(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
118370 - struct ieee80211_channel *chan,
118371 - enum nl80211_channel_type channel_type,
118372 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
118373 - bool channel_type_valid,
118374 +static s32 cfg80211_rtw_remain_on_channel(struct wiphy *wiphy,
118375 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
118376 + struct wireless_dev *wdev,
118377 +#else
118378 + struct net_device *ndev,
118379 +#endif
118380 + struct ieee80211_channel * channel,
118381 +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0))
118382 + enum nl80211_channel_type channel_type,
118383 #endif
118384 -#endif //(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
118385 - const u8 *buf, size_t len, u64 *cookie)
118386 + unsigned int duration, u64 *cookie)
118387 {
118388 - struct xmit_frame *pmgntframe;
118389 - struct pkt_attrib *pattrib;
118390 - unsigned char *pframe;
118391 - const struct ieee80211_mgmt *mgmt;
118392 - //u8 category, action, OUI_Subtype, dialogToken=0;
118393 - //unsigned char *frame_body;
118394 - int ret = 0;
118395 - int type = (-1);
118396 - u16 fc;
118397 - bool ack = _TRUE;
118398 - struct rtw_ieee80211_hdr *pwlanhdr;
118399 - _adapter *padapter = wiphy_to_adapter(wiphy);
118400 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
118401 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
118402 + s32 err = 0;
118403 + _adapter *padapter = wiphy_to_adapter(wiphy);
118404 + struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(padapter->rtw_wdev);
118405 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
118406 + struct wifidirect_info *pwdinfo = &padapter->wdinfo;
118407 + struct cfg80211_wifidirect_info *pcfg80211_wdinfo = &padapter->cfg80211_wdinfo;
118408 + u8 remain_ch = (u8) ieee80211_frequency_to_channel(channel->center_freq);
118409 + u8 ready_on_channel = _FALSE;
118410
118411 + DBG_871X(FUNC_ADPT_FMT" ch:%u duration:%d\n", FUNC_ADPT_ARG(padapter), remain_ch, duration);
118412
118413 - /* cookie generation */
118414 - *cookie = (unsigned long) buf;
118415 + if(pcfg80211_wdinfo->is_ro_ch == _TRUE)
118416 + {
118417 + DBG_8192C("%s, cancel ro ch timer\n", __func__);
118418 +
118419 + _cancel_timer_ex(&padapter->cfg80211_wdinfo.remain_on_ch_timer);
118420
118421 +#ifdef CONFIG_CONCURRENT_MODE
118422 + ATOMIC_SET(&pwdev_priv->ro_ch_to, 1);
118423 +#endif //CONFIG_CONCURRENT_MODE
118424
118425 - printk("%s, len=%d, ch=%d, ch_type=%d\n", __func__, len,
118426 - ieee80211_frequency_to_channel(chan->center_freq), channel_type);
118427 + p2p_protocol_wk_hdl(padapter, P2P_RO_CH_WK);
118428 + }
118429 +
118430 + pcfg80211_wdinfo->is_ro_ch = _TRUE;
118431
118432 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
118433 - printk("channel_type_valid=%d\n", channel_type_valid);
118434 + if(_FAIL == rtw_pwr_wakeup(padapter)) {
118435 + err = -EFAULT;
118436 + goto exit;
118437 + }
118438 +
118439 + _rtw_memcpy(&pcfg80211_wdinfo->remain_on_ch_channel, channel, sizeof(struct ieee80211_channel));
118440 + #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0))
118441 + pcfg80211_wdinfo->remain_on_ch_type= channel_type;
118442 + #endif
118443 + pcfg80211_wdinfo->remain_on_ch_cookie= *cookie;
118444 +
118445 + rtw_scan_abort(padapter);
118446 +#ifdef CONFIG_CONCURRENT_MODE
118447 + if(rtw_buddy_adapter_up(padapter))
118448 + rtw_scan_abort(padapter->pbuddy_adapter);
118449 +#endif //CONFIG_CONCURRENT_MODE
118450 +
118451 + //if(!rtw_p2p_chk_role(pwdinfo, P2P_ROLE_CLIENT) && !rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
118452 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
118453 + {
118454 + rtw_p2p_enable(padapter, P2P_ROLE_DEVICE);
118455 + wdev_to_priv(padapter->rtw_wdev)->p2p_enabled = _TRUE;
118456 + }
118457 + else
118458 + {
118459 + rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
118460 +#ifdef CONFIG_DEBUG_CFG80211
118461 + DBG_8192C("%s, role=%d, p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo));
118462 #endif
118463 + }
118464 +
118465 +
118466 + rtw_p2p_set_state(pwdinfo, P2P_STATE_LISTEN);
118467 +
118468 +
118469 + if(duration < 400)
118470 + duration = duration*3;//extend from exper.
118471 +
118472
118473 - mgmt = (const struct ieee80211_mgmt *) buf;
118474 - fc = mgmt->frame_control;
118475 - if (fc != IEEE80211_STYPE_ACTION)
118476 +#ifdef CONFIG_CONCURRENT_MODE
118477 + if(check_buddy_fwstate(padapter, _FW_LINKED) &&
118478 + (duration<pwdinfo->ext_listen_interval))
118479 {
118480 - if (fc == IEEE80211_STYPE_PROBE_RESP)
118481 - {
118482 - printk("%s, fc == IEEE80211_STYPE_PROBE_RESP\n", __func__);
118483 - }
118484 - else
118485 + duration = duration + pwdinfo->ext_listen_interval;
118486 + }
118487 +#endif
118488 +
118489 + pcfg80211_wdinfo->restore_channel = rtw_get_oper_ch(padapter);
118490 +
118491 + if(rtw_ch_set_search_ch(pmlmeext->channel_set, remain_ch) >= 0) {
118492 +#ifdef CONFIG_CONCURRENT_MODE
118493 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
118494 {
118495 - printk("%s, frame_control == 0x%x\n", __func__, fc);
118496 - }
118497 -
118498 - //cfg80211_mgmt_tx_status(dev, *cookie, buf, len, ack, GFP_KERNEL);
118499 -
118500 - goto exit;
118501 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
118502 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
118503 +
118504 + if(remain_ch != pbuddy_mlmeext->cur_channel)
118505 + {
118506 + if(ATOMIC_READ(&pwdev_priv->switch_ch_to)==1 ||
118507 + (remain_ch != pmlmeext->cur_channel))
118508 + {
118509 + DBG_8192C("%s, issue nulldata pwrbit=1\n", __func__);
118510 + issue_nulldata(padapter->pbuddy_adapter, NULL, 1, 3, 500);
118511 +
118512 + ATOMIC_SET(&pwdev_priv->switch_ch_to, 0);
118513 +
118514 + DBG_8192C("%s, set switch ch timer, duration=%d\n", __func__, duration-pwdinfo->ext_listen_interval);
118515 + _set_timer(&pwdinfo->ap_p2p_switch_timer, duration-pwdinfo->ext_listen_interval);
118516 + }
118517 + }
118518
118519 - }
118520 - else
118521 - {
118522 - u32 cnt=0;
118523 - u32 wait_for_surveydone;
118524 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
118525 + ready_on_channel = _TRUE;
118526 + //pmlmeext->cur_channel = remain_ch;
118527 + //set_channel_bwmode(padapter, remain_ch, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
118528 + }else
118529 +#endif //CONFIG_CONCURRENT_MODE
118530 + if(remain_ch != pmlmeext->cur_channel )
118531 + {
118532 + ready_on_channel = _TRUE;
118533 + //pmlmeext->cur_channel = remain_ch;
118534 + //set_channel_bwmode(padapter, remain_ch, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
118535 + }
118536 + } else {
118537 + DBG_871X("%s remain_ch:%u not in channel plan!!!!\n", __FUNCTION__, remain_ch);
118538 + }
118539 +
118540
118541 -#ifdef CONFIG_DEBUG_CFG80211
118542 - printk("%s, do: scan_abort\n", __func__);
118543 + //call this after other things have been done
118544 +#ifdef CONFIG_CONCURRENT_MODE
118545 + if(ATOMIC_READ(&pwdev_priv->ro_ch_to)==1 ||
118546 + (remain_ch != pmlmeext->cur_channel))
118547 + {
118548 + u8 co_channel = 0xff;
118549 + ATOMIC_SET(&pwdev_priv->ro_ch_to, 0);
118550 #endif
118551 -
118552 - /* Abort the dwell time of any previous off-channel action frame that may
118553 - * be still in effect. Sending off-channel action frames relies on the
118554 - * driver's scan engine. If a previous off-channel action frame tx is
118555 - * still in progress (including the dwell time), then this new action
118556 - * frame will not be sent out.
118557 - */
118558
118559 - rtw_cfg80211_scan_abort(padapter);
118560 - }
118561 -#if 0
118562 - if (wl->p2p->vif_created) {
118563 - wifi_p2p_pub_act_frame_t *act_frm =
118564 - (wifi_p2p_pub_act_frame_t *) (action_frame->data);
118565 - WL_DBG(("action_frame->len: %d chan %d category %d subtype %d\n",
118566 - action_frame->len, af_params->channel,
118567 - act_frm->category, act_frm->subtype));
118568 - /*
118569 - * To make sure to send successfully action frame, we have to turn off mpc
118570 - */
118571 - if ((act_frm->subtype == P2P_PAF_GON_REQ)||
118572 - (act_frm->subtype == P2P_PAF_GON_RSP)) {
118573 - wldev_iovar_setint(dev, "mpc", 0);
118574 - } else if (act_frm->subtype == P2P_PAF_GON_CONF) {
118575 - wldev_iovar_setint(dev, "mpc", 1);
118576 - } else if (act_frm->subtype == P2P_PAF_DEVDIS_REQ) {
118577 - af_params->dwell_time = WL_LONG_DWELL_TIME;
118578 + if(ready_on_channel == _TRUE)
118579 + {
118580 + if ( !check_fwstate(&padapter->mlmepriv, _FW_LINKED ) )
118581 + pmlmeext->cur_channel = remain_ch;
118582 +
118583 +#ifdef CONFIG_CONCURRENT_MODE
118584 + co_channel = rtw_get_oper_ch(padapter);
118585 +
118586 + if(co_channel !=remain_ch)
118587 +#endif
118588 + {
118589 + if (!padapter->mlmepriv.LinkDetectInfo.bBusyTraffic)
118590 + set_channel_bwmode(padapter, remain_ch, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
118591 + }
118592 }
118593 + DBG_8192C("%s, set ro ch timer, duration=%d\n", __func__, duration);
118594 + _set_timer( &pcfg80211_wdinfo->remain_on_ch_timer, duration);
118595 +
118596 +#ifdef CONFIG_CONCURRENT_MODE
118597 }
118598 #endif
118599
118600 -/*
118601 - frame_body = (unsigned char *)(buf + sizeof(struct rtw_ieee80211_hdr_3addr));
118602 - category = frame_body[0];
118603 - //just for check
118604 - if(category == RTW_WLAN_CATEGORY_PUBLIC)
118605 - {
118606 - action = frame_body[ 1 ];
118607 - OUI_Subtype = frame_body[ 6 ];
118608 - dialogToken = frame_body[7];
118609 + rtw_cfg80211_ready_on_channel(padapter, *cookie, channel, channel_type, duration, GFP_KERNEL);
118610
118611 - if ( action == ACT_PUBLIC_P2P )
118612 - {
118613 - printk("ACTION_CATEGORY_PUBLIC: ACT_PUBLIC_P2P, OUI=0x%x, OUI_Subtype=%d, dialogToken=%d\n",
118614 - cpu_to_be32( *( ( u32* ) ( frame_body + 2 ) ) ), OUI_Subtype, dialogToken);
118615 - }
118616 - else
118617 - {
118618 - printk("ACTION_CATEGORY_PUBLIC: action=%d, OUI=0x%x, OUI_Subtype=%d, dialogToken=%d\n",
118619 - action, cpu_to_be32( *( ( u32* ) ( frame_body + 2 ) ) ), OUI_Subtype, dialogToken);
118620 - }
118621 -
118622 - }
118623 - else if(category == RTW_WLAN_CATEGORY_P2P)
118624 - {
118625 - OUI_Subtype = frame_body[5];
118626 - dialogToken = frame_body[6];
118627 +exit:
118628 + if (err)
118629 + pcfg80211_wdinfo->is_ro_ch = _FALSE;
118630
118631 - printk("ACTION_CATEGORY_P2P: OUI=0x%x, OUI_Subtype=%d, dialogToken=%d\n",
118632 - cpu_to_be32( *( ( u32* ) ( frame_body + 1 ) ) ), OUI_Subtype, dialogToken);
118633 + return err;
118634 +}
118635
118636 - }
118637 - else
118638 - {
118639 - printk("%s, action frame category=%d\n", __func__, category);
118640 - ack = _FALSE;
118641 - goto exit;
118642 +static s32 cfg80211_rtw_cancel_remain_on_channel(struct wiphy *wiphy,
118643 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
118644 + struct wireless_dev *wdev,
118645 +#else
118646 + struct net_device *ndev,
118647 +#endif
118648 + u64 cookie)
118649 +{
118650 + s32 err = 0;
118651 + _adapter *padapter = wiphy_to_adapter(wiphy);
118652 + struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(padapter->rtw_wdev);
118653 + struct wifidirect_info *pwdinfo = &padapter->wdinfo;
118654 + struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
118655 + struct cfg80211_wifidirect_info *pcfg80211_wdinfo = &padapter->cfg80211_wdinfo;
118656 +
118657 + DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter));
118658 +
118659 + if (pcfg80211_wdinfo->is_ro_ch == _TRUE) {
118660 + DBG_8192C("%s, cancel ro ch timer\n", __func__);
118661 + _cancel_timer_ex(&padapter->cfg80211_wdinfo.remain_on_ch_timer);
118662 + #ifdef CONFIG_CONCURRENT_MODE
118663 + ATOMIC_SET(&pwdev_priv->ro_ch_to, 1);
118664 + #endif
118665 + p2p_protocol_wk_hdl(padapter, P2P_RO_CH_WK);
118666 }
118667 -*/
118668
118669 - if( ieee80211_frequency_to_channel(chan->center_freq) != pmlmeext->cur_channel )
118670 + #if 0
118671 + // Disable P2P Listen State
118672 + if(!rtw_p2p_chk_role(pwdinfo, P2P_ROLE_CLIENT) && !rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
118673 {
118674 - pmlmeext->cur_channel = ieee80211_frequency_to_channel(chan->center_freq);
118675 - set_channel_bwmode(padapter, pmlmeext->cur_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
118676 + if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
118677 + {
118678 + _cancel_timer_ex( &pwdinfo->find_phase_timer );
118679 + _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
118680 + _cancel_timer_ex( &pwdinfo->pre_tx_scan_timer);
118681 +
118682 + rtw_p2p_set_state(pwdinfo, P2P_STATE_NONE);
118683 + _rtw_memset(pwdinfo, 0x00, sizeof(struct wifidirect_info));
118684 + }
118685 }
118686 -
118687 -
118688 - if( (type = rtw_p2p_check_frames(padapter, buf, len, _TRUE)) < 0)
118689 + else
118690 + #endif
118691 {
118692 - ack = _FALSE;
118693 - goto exit;
118694 - }
118695 + rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
118696 +#ifdef CONFIG_DEBUG_CFG80211
118697 + DBG_8192C("%s, role=%d, p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo));
118698 +#endif
118699 + }
118700 + pcfg80211_wdinfo->is_ro_ch = _FALSE;
118701
118702 + return err;
118703 +}
118704
118705 - //if(type == P2P_GO_NEGO_REQ)
118706 - //{
118707 - // rtw_cfg80211_issue_p2p_provision_request(padapter, buf, len);
118708 - //}
118709 -
118710 -
118711 - //starting alloc mgmt frame to dump it
118712 - if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
118713 - {
118714 - ack = _FALSE;
118715 - ret = -ENOMEM;
118716 +#endif //CONFIG_P2P
118717 +
118718 +static int _cfg80211_rtw_mgmt_tx(_adapter *padapter, u8 tx_ch, const u8 *buf, size_t len)
118719 +{
118720 + struct xmit_frame *pmgntframe;
118721 + struct pkt_attrib *pattrib;
118722 + unsigned char *pframe;
118723 + int ret = _FAIL;
118724 + bool ack = _TRUE;
118725 + struct rtw_ieee80211_hdr *pwlanhdr;
118726 + struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(padapter->rtw_wdev);
118727 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
118728 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
118729 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
118730 + struct wifidirect_info *pwdinfo = &padapter->wdinfo;
118731 + //struct cfg80211_wifidirect_info *pcfg80211_wdinfo = &padapter->cfg80211_wdinfo;
118732 +
118733 + if(_FAIL == rtw_pwr_wakeup(padapter)) {
118734 + ret = -EFAULT;
118735 goto exit;
118736 }
118737
118738 - //update attribute
118739 - pattrib = &pmgntframe->attrib;
118740 - update_mgntframe_attrib(padapter, pattrib);
118741 - pattrib->retry_ctrl = _FALSE;
118742 + rtw_set_scan_deny(padapter, 1000);
118743
118744 - _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
118745 + rtw_scan_abort(padapter);
118746 + #ifdef CONFIG_CONCURRENT_MODE
118747 + if(rtw_buddy_adapter_up(padapter))
118748 + rtw_scan_abort(padapter->pbuddy_adapter);
118749 + #endif /* CONFIG_CONCURRENT_MODE */
118750 +
118751 + if (padapter->cfg80211_wdinfo.is_ro_ch == _TRUE) {
118752 + //DBG_8192C("%s, cancel ro ch timer\n", __func__);
118753 + //_cancel_timer_ex(&padapter->cfg80211_wdinfo.remain_on_ch_timer);
118754 + //padapter->cfg80211_wdinfo.is_ro_ch = _FALSE;
118755 + #ifdef CONFIG_CONCURRENT_MODE
118756 + if (!check_fwstate(&padapter->mlmepriv, _FW_LINKED ))
118757 + {
118758 + DBG_8192C("%s, extend ro ch time\n", __func__);
118759 + _set_timer( &padapter->cfg80211_wdinfo.remain_on_ch_timer, pwdinfo->ext_listen_period);
118760 + }
118761 + #endif //CONFIG_CONCURRENT_MODE
118762 + }
118763
118764 - pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
118765 +#ifdef CONFIG_CONCURRENT_MODE
118766 + if (check_buddy_fwstate(padapter, _FW_LINKED )) {
118767 + u8 co_channel=0xff;
118768 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
118769 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
118770
118771 - _rtw_memcpy(pframe, (void*)buf, len);
118772 - pattrib->pktlen = len;
118773 -
118774 - pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
118775 - //update seq number
118776 - pmlmeext->mgnt_seq = GetSequence(pwlanhdr);
118777 - pattrib->seqnum = pmlmeext->mgnt_seq;
118778 - pmlmeext->mgnt_seq++;
118779 + co_channel = rtw_get_oper_ch(padapter);
118780
118781 -
118782 - pattrib->last_txcmdsz = pattrib->pktlen;
118783 -
118784 -#ifdef CONFIG_DEBUG_CFG80211
118785 - printk("%s, ack=%d, ok!\n", __func__, ack );
118786 -#endif
118787 + if (tx_ch != pbuddy_mlmeext->cur_channel) {
118788
118789 - //indicate ack before issue frame to avoid racing with rsp frame
118790 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
118791 - cfg80211_mgmt_tx_status(dev, *cookie, buf, len, ack, GFP_KERNEL);
118792 -#elif (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,34) && LINUX_VERSION_CODE<=KERNEL_VERSION(2,6,35))
118793 - cfg80211_action_tx_status(dev, *cookie, buf, len, ack, GFP_KERNEL);
118794 -#endif
118795 -
118796 - dump_mgntframe(padapter, pmgntframe);
118797 -
118798 - return ret;
118799 -
118800 -exit:
118801 -
118802 - printk("%s, ack=%d \n", __func__, ack );
118803 + u16 ext_listen_period;
118804
118805 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
118806 - cfg80211_mgmt_tx_status(dev, *cookie, buf, len, ack, GFP_KERNEL);
118807 -#elif (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,34) && LINUX_VERSION_CODE<=KERNEL_VERSION(2,6,35))
118808 - cfg80211_action_tx_status(dev, *cookie, buf, len, ack, GFP_KERNEL);
118809 -#endif
118810 -
118811 - return ret;
118812 + if (ATOMIC_READ(&pwdev_priv->switch_ch_to)==1) {
118813 + DBG_8192C("%s, issue nulldata pwrbit=1\n", __func__);
118814 + issue_nulldata(padapter->pbuddy_adapter, NULL, 1, 3, 500);
118815
118816 -}
118817 + ATOMIC_SET(&pwdev_priv->switch_ch_to, 0);
118818
118819 -static s32 cfg80211_rtw_remain_on_channel(struct wiphy *wiphy, struct net_device *dev,
118820 - struct ieee80211_channel * channel,
118821 - enum nl80211_channel_type channel_type,
118822 - unsigned int duration, u64 *cookie)
118823 -{
118824 - s32 err = 0;
118825 - _adapter *padapter = wiphy_to_adapter(wiphy);
118826 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
118827 - struct wifidirect_info *pwdinfo = &padapter->wdinfo;
118828 - struct cfg80211_wifidirect_info *pcfg80211_wdinfo = &padapter->cfg80211_wdinfo;
118829 - u8 remain_ch = (u8) ieee80211_frequency_to_channel(channel->center_freq);
118830 + //DBG_8192C("%s, set switch ch timer, period=%d\n", __func__, pwdinfo->ext_listen_period);
118831 + //_set_timer(&pwdinfo->ap_p2p_switch_timer, pwdinfo->ext_listen_period);
118832 + }
118833 +
118834 + if (check_fwstate(&padapter->mlmepriv, _FW_LINKED ))
118835 + {
118836 + ext_listen_period = 500;// 500ms
118837 + }
118838 + else
118839 + {
118840 + ext_listen_period = pwdinfo->ext_listen_period;
118841 + }
118842 +
118843 + DBG_8192C("%s, set switch ch timer, period=%d\n", __func__, ext_listen_period);
118844 + _set_timer(&pwdinfo->ap_p2p_switch_timer, ext_listen_period);
118845 +
118846 + }
118847
118848 - printk("%s channel %02u duration %d\n", __func__, remain_ch, duration);
118849 + if (!check_fwstate(&padapter->mlmepriv, _FW_LINKED ))
118850 + pmlmeext->cur_channel = tx_ch;
118851
118852 - if(_FAIL == rtw_pwr_wakeup(padapter)) {
118853 - err = -EFAULT;
118854 + if (tx_ch != co_channel)
118855 + set_channel_bwmode(padapter, tx_ch, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
118856 + }else
118857 +#endif //CONFIG_CONCURRENT_MODE
118858 + //if (tx_ch != pmlmeext->cur_channel) {
118859 + if(tx_ch != rtw_get_oper_ch(padapter)) {
118860 + if (!check_fwstate(&padapter->mlmepriv, _FW_LINKED ))
118861 + pmlmeext->cur_channel = tx_ch;
118862 + set_channel_bwmode(padapter, tx_ch, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
118863 + }
118864 +
118865 + //starting alloc mgmt frame to dump it
118866 + if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
118867 + {
118868 + //ret = -ENOMEM;
118869 + ret = _FAIL;
118870 goto exit;
118871 }
118872
118873 - pcfg80211_wdinfo->remain_on_ch_dev = dev;
118874 - _rtw_memcpy(&pcfg80211_wdinfo->remain_on_ch_channel, channel, sizeof(struct ieee80211_channel));
118875 - pcfg80211_wdinfo->remain_on_ch_type= channel_type;
118876 - pcfg80211_wdinfo->remain_on_ch_cookie= *cookie;
118877 - cfg80211_ready_on_channel(dev, *cookie, channel, channel_type, duration, GFP_KERNEL);
118878 + //update attribute
118879 + pattrib = &pmgntframe->attrib;
118880 + update_mgntframe_attrib(padapter, pattrib);
118881 + pattrib->retry_ctrl = _FALSE;
118882 +
118883 + _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
118884
118885 - pcfg80211_wdinfo->restore_channel = pmlmeext->cur_channel;
118886 + pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
118887
118888 - rtw_cfg80211_scan_abort(padapter);
118889 + _rtw_memcpy(pframe, (void*)buf, len);
118890 + pattrib->pktlen = len;
118891 +
118892 + pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
118893 + //update seq number
118894 + pmlmeext->mgnt_seq = GetSequence(pwlanhdr);
118895 + pattrib->seqnum = pmlmeext->mgnt_seq;
118896 + pmlmeext->mgnt_seq++;
118897
118898 - if( remain_ch != pmlmeext->cur_channel )
118899 +#ifdef CONFIG_WFD
118900 {
118901 - if(rtw_is_channel_set_contains_channel(pmlmeext->channel_set, remain_ch)) {
118902 - pmlmeext->cur_channel = remain_ch;
118903 - set_channel_bwmode(padapter, pmlmeext->cur_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
118904 - } else {
118905 - DBG_871X("%s remain_ch:%u not in channel plan!!!!\n", __FUNCTION__, remain_ch);
118906 + struct wifi_display_info *pwfd_info;
118907 +
118908 + pwfd_info = padapter->wdinfo.wfd_info;
118909 +
118910 + if ( _TRUE == pwfd_info->wfd_enable )
118911 + {
118912 + rtw_append_wfd_ie( padapter, pframe, &pattrib->pktlen );
118913 }
118914 }
118915 +#endif // CONFIG_WFD
118916 +
118917 + pattrib->last_txcmdsz = pattrib->pktlen;
118918
118919 - //if(!rtw_p2p_chk_role(pwdinfo, P2P_ROLE_CLIENT) && !rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
118920 - if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
118921 + if (dump_mgntframe_and_wait_ack(padapter, pmgntframe) != _SUCCESS)
118922 {
118923 - rtw_p2p_enable(padapter, P2P_ROLE_DEVICE);
118924 - wdev_to_priv(padapter->rtw_wdev)->p2p_enabled = _TRUE;
118925 + ack = _FALSE;
118926 + ret = _FAIL;
118927 +
118928 + #ifdef CONFIG_DEBUG_CFG80211
118929 + DBG_8192C("%s, ack == _FAIL\n", __func__);
118930 + #endif
118931 }
118932 - else
118933 + else
118934 {
118935 - rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
118936 -#ifdef CONFIG_DEBUG_CFG80211
118937 - printk("%s, role=%d, p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo));
118938 -#endif
118939 + #ifdef CONFIG_DEBUG_CFG80211
118940 + DBG_8192C("%s, ack=%d, ok!\n", __func__, ack);
118941 + #endif
118942 + ret = _SUCCESS;
118943 }
118944 -
118945 - rtw_p2p_set_state(pwdinfo, P2P_STATE_LISTEN);
118946 - pwdinfo->listen_channel = pmlmeext->cur_channel;
118947 -
118948 - //call this after other things have been done
118949 - _set_timer( &pcfg80211_wdinfo->remain_on_ch_timer, duration);
118950 -
118951 +
118952 exit:
118953 - return err;
118954 +
118955 + #ifdef CONFIG_DEBUG_CFG80211
118956 + DBG_8192C("%s, ret=%d\n", __func__, ret);
118957 + #endif
118958 +
118959 + return ret;
118960 +
118961 }
118962
118963 -static s32 cfg80211_rtw_cancel_remain_on_channel(struct wiphy *wiphy, struct net_device *dev,
118964 - u64 cookie)
118965 +static int cfg80211_rtw_mgmt_tx(struct wiphy *wiphy,
118966 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
118967 + struct wireless_dev *wdev,
118968 +#else
118969 + struct net_device *ndev,
118970 +#endif
118971 + struct ieee80211_channel *chan,
118972 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
118973 + bool offchan,
118974 +#endif
118975 +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0))
118976 + enum nl80211_channel_type channel_type,
118977 + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
118978 + bool channel_type_valid,
118979 + #endif
118980 +#endif
118981 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
118982 + unsigned int wait,
118983 +#endif
118984 + const u8 *buf, size_t len,
118985 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0))
118986 + bool no_cck,
118987 +#endif
118988 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0))
118989 + bool dont_wait_for_ack,
118990 +#endif
118991 + u64 *cookie)
118992 {
118993 - s32 err = 0;
118994 - _adapter *padapter = wiphy_to_adapter(wiphy);
118995 - struct wifidirect_info *pwdinfo = &padapter->wdinfo;
118996 - struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
118997 -
118998 - printk("%s\n", __func__);
118999 + _adapter *padapter = (_adapter *)wiphy_to_adapter(wiphy);
119000 + struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(padapter->rtw_wdev);
119001 + int ret = 0;
119002 + int tx_ret;
119003 + u32 dump_limit = RTW_MAX_MGMT_TX_CNT;
119004 + u32 dump_cnt = 0;
119005 + bool ack = _TRUE;
119006 + u8 tx_ch = (u8)ieee80211_frequency_to_channel(chan->center_freq);
119007 + u8 category, action;
119008 + int type = (-1);
119009 + u32 start = rtw_get_current_time();
119010
119011 - //Modified bu Kurt 20120114
119012 - _cancel_timer_ex(&padapter->cfg80211_wdinfo.remain_on_ch_timer);
119013 + /* cookie generation */
119014 + *cookie = (unsigned long) buf;
119015
119016 - #if 0
119017 - // Disable P2P Listen State
119018 - if(!rtw_p2p_chk_role(pwdinfo, P2P_ROLE_CLIENT) && !rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
119019 - {
119020 - if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
119021 - {
119022 - _cancel_timer_ex( &pwdinfo->find_phase_timer );
119023 - _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
119024 - _cancel_timer_ex( &pwdinfo->pre_tx_scan_timer);
119025 -
119026 - rtw_p2p_set_state(pwdinfo, P2P_STATE_NONE);
119027 - _rtw_memset(pwdinfo, 0x00, sizeof(struct wifidirect_info));
119028 +#ifdef CONFIG_DEBUG_CFG80211
119029 + DBG_871X(FUNC_ADPT_FMT" len=%zu, ch=%d"
119030 + #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0))
119031 + ", ch_type=%d"
119032 + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
119033 + ", channel_type_valid=%d"
119034 + #endif
119035 + #endif
119036 + "\n", FUNC_ADPT_ARG(padapter),
119037 + len, tx_ch
119038 + #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0))
119039 + , channel_type
119040 + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
119041 + , channel_type_valid
119042 + #endif
119043 + #endif
119044 + );
119045 +#endif /* CONFIG_DEBUG_CFG80211 */
119046
119047 - if(pwrpriv->bips_processing == _FALSE){
119048 - rtw_set_pwr_state_check_timer(pwrpriv);
119049 - }
119050 - }
119051 + /* indicate ack before issue frame to avoid racing with rsp frame */
119052 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
119053 + rtw_cfg80211_mgmt_tx_status(padapter, *cookie, buf, len, ack, GFP_KERNEL);
119054 +#elif (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,34) && LINUX_VERSION_CODE<=KERNEL_VERSION(2,6,35))
119055 + cfg80211_action_tx_status(ndev, *cookie, buf, len, ack, GFP_KERNEL);
119056 +#endif
119057 +
119058 + if (rtw_action_frame_parse(buf, len, &category, &action) == _FALSE) {
119059 + DBG_8192C(FUNC_ADPT_FMT" frame_control:0x%x\n", FUNC_ADPT_ARG(padapter),
119060 + le16_to_cpu(((struct rtw_ieee80211_hdr_3addr *)buf)->frame_ctl));
119061 + goto exit;
119062 + }
119063 +
119064 + DBG_8192C("RTW_Tx:tx_ch=%d, da="MAC_FMT"\n", tx_ch, MAC_ARG(GetAddr1Ptr(buf)));
119065 + #ifdef CONFIG_P2P
119066 + if((type = rtw_p2p_check_frames(padapter, buf, len, _TRUE)) >= 0) {
119067 + goto dump;
119068 }
119069 - else
119070 #endif
119071 - {
119072 - rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
119073 -#ifdef CONFIG_DEBUG_CFG80211
119074 - printk("%s, role=%d, p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo));
119075 -#endif
119076 + if (category == RTW_WLAN_CATEGORY_PUBLIC)
119077 + DBG_871X("RTW_Tx:%s\n", action_public_str(action));
119078 + else
119079 + DBG_871X("RTW_Tx:category(%u), action(%u)\n", category, action);
119080 +
119081 +dump:
119082 + do {
119083 + dump_cnt++;
119084 + tx_ret = _cfg80211_rtw_mgmt_tx(padapter, tx_ch, buf, len);
119085 + } while (dump_cnt < dump_limit && tx_ret != _SUCCESS);
119086 +
119087 + if (tx_ret != _SUCCESS || dump_cnt > 1) {
119088 + DBG_871X(FUNC_ADPT_FMT" %s (%d/%d) in %d ms\n", FUNC_ADPT_ARG(padapter),
119089 + tx_ret==_SUCCESS?"OK":"FAIL", dump_cnt, dump_limit, rtw_get_passing_time_ms(start));
119090 }
119091
119092 - return err;
119093 + switch (type) {
119094 + case P2P_GO_NEGO_CONF:
119095 + rtw_clear_scan_deny(padapter);
119096 + break;
119097 + case P2P_INVIT_RESP:
119098 + if (pwdev_priv->invit_info.flags & BIT(0)
119099 + && pwdev_priv->invit_info.status == 0)
119100 + {
119101 + DBG_871X(FUNC_ADPT_FMT" agree with invitation of persistent group\n",
119102 + FUNC_ADPT_ARG(padapter));
119103 + rtw_set_scan_deny(padapter, 5000);
119104 + rtw_pwr_wakeup_ex(padapter, 5000);
119105 + rtw_clear_scan_deny(padapter);
119106 + }
119107 + break;
119108 + }
119109 +
119110 +exit:
119111 + return ret;
119112 }
119113
119114 -static void cfg80211_rtw_mgmt_frame_register(struct wiphy *wiphy, struct net_device *dev,
119115 +static void cfg80211_rtw_mgmt_frame_register(struct wiphy *wiphy,
119116 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 6, 0))
119117 + struct wireless_dev *wdev,
119118 +#else
119119 + struct net_device *ndev,
119120 +#endif
119121 u16 frame_type, bool reg)
119122 {
119123 + _adapter *adapter = wiphy_to_adapter(wiphy);
119124
119125 #ifdef CONFIG_DEBUG_CFG80211
119126 - printk("%s: frame_type: %x, reg: %d\n", __func__, frame_type, reg);
119127 + DBG_871X(FUNC_ADPT_FMT" frame_type:%x, reg:%d\n", FUNC_ADPT_ARG(adapter),
119128 + frame_type, reg);
119129 #endif
119130
119131 if (frame_type != (IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_PROBE_REQ))
119132 @@ -4082,7 +4776,7 @@ static void cfg80211_rtw_mgmt_frame_regi
119133 return;
119134 }
119135
119136 -static int rtw_cfg80211_set_beacon_wpsp2pie(struct net_device *net, char *buf, int len)
119137 +static int rtw_cfg80211_set_beacon_wpsp2pie(struct net_device *ndev, char *buf, int len)
119138 {
119139 int ret = 0;
119140 uint wps_ielen = 0;
119141 @@ -4090,18 +4784,20 @@ static int rtw_cfg80211_set_beacon_wpsp2
119142 u32 p2p_ielen = 0;
119143 u8 wps_oui[8]={0x0,0x50,0xf2,0x04};
119144 u8 *p2p_ie;
119145 - _adapter *padapter = (_adapter *)rtw_netdev_priv(net);
119146 + u32 wfd_ielen = 0;
119147 + u8 *wfd_ie;
119148 + _adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);
119149 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
119150 struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
119151
119152 - printk("%s, ielen=%d\n", __func__, len);
119153 + DBG_871X(FUNC_NDEV_FMT" ielen=%d\n", FUNC_NDEV_ARG(ndev), len);
119154
119155 if(len>0)
119156 {
119157 if((wps_ie = rtw_get_wps_ie(buf, len, NULL, &wps_ielen)))
119158 {
119159 #ifdef CONFIG_DEBUG_CFG80211
119160 - printk("bcn_wps_ielen=%d\n", wps_ielen);
119161 + DBG_8192C("bcn_wps_ielen=%d\n", wps_ielen);
119162 #endif
119163
119164 if(pmlmepriv->wps_beacon_ie)
119165 @@ -4114,7 +4810,7 @@ static int rtw_cfg80211_set_beacon_wpsp2
119166
119167 pmlmepriv->wps_beacon_ie = rtw_malloc(wps_ielen);
119168 if ( pmlmepriv->wps_beacon_ie == NULL) {
119169 - printk("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
119170 + DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
119171 return -EINVAL;
119172
119173 }
119174 @@ -4126,13 +4822,14 @@ static int rtw_cfg80211_set_beacon_wpsp2
119175
119176 }
119177
119178 - buf += wps_ielen;
119179 - len -= wps_ielen;
119180 -
119181 + //buf += wps_ielen;
119182 + //len -= wps_ielen;
119183 +
119184 + #ifdef CONFIG_P2P
119185 if((p2p_ie=rtw_get_p2p_ie(buf, len, NULL, &p2p_ielen)))
119186 {
119187 #ifdef CONFIG_DEBUG_CFG80211
119188 - printk("bcn_p2p_ielen=%d\n", p2p_ielen);
119189 + DBG_8192C("bcn_p2p_ielen=%d\n", p2p_ielen);
119190 #endif
119191
119192 if(pmlmepriv->p2p_beacon_ie)
119193 @@ -4145,7 +4842,7 @@ static int rtw_cfg80211_set_beacon_wpsp2
119194
119195 pmlmepriv->p2p_beacon_ie = rtw_malloc(p2p_ielen);
119196 if ( pmlmepriv->p2p_beacon_ie == NULL) {
119197 - printk("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
119198 + DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
119199 return -EINVAL;
119200
119201 }
119202 @@ -4154,6 +4851,35 @@ static int rtw_cfg80211_set_beacon_wpsp2
119203 pmlmepriv->p2p_beacon_ie_len = p2p_ielen;
119204
119205 }
119206 + #endif //CONFIG_P2P
119207 +
119208 + //buf += p2p_ielen;
119209 + //len -= p2p_ielen;
119210 +
119211 + #ifdef CONFIG_WFD
119212 + if(rtw_get_wfd_ie(buf, len, NULL, &wfd_ielen))
119213 + {
119214 + #ifdef CONFIG_DEBUG_CFG80211
119215 + DBG_8192C("bcn_wfd_ielen=%d\n", wfd_ielen);
119216 + #endif
119217 +
119218 + if(pmlmepriv->wfd_beacon_ie)
119219 + {
119220 + u32 free_len = pmlmepriv->wfd_beacon_ie_len;
119221 + pmlmepriv->wfd_beacon_ie_len = 0;
119222 + rtw_mfree(pmlmepriv->wfd_beacon_ie, free_len);
119223 + pmlmepriv->wfd_beacon_ie = NULL;
119224 + }
119225 +
119226 + pmlmepriv->wfd_beacon_ie = rtw_malloc(wfd_ielen);
119227 + if ( pmlmepriv->wfd_beacon_ie == NULL) {
119228 + DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
119229 + return -EINVAL;
119230 +
119231 + }
119232 + rtw_get_wfd_ie(buf, len, pmlmepriv->wfd_beacon_ie, &pmlmepriv->wfd_beacon_ie_len);
119233 + }
119234 + #endif //CONFIG_WFD
119235
119236 pmlmeext->bstart_bss = _TRUE;
119237
119238 @@ -4170,11 +4896,13 @@ static int rtw_cfg80211_set_probe_resp_w
119239 u8 *wps_ie;
119240 u32 p2p_ielen = 0;
119241 u8 *p2p_ie;
119242 + u32 wfd_ielen = 0;
119243 + u8 *wfd_ie;
119244 _adapter *padapter = (_adapter *)rtw_netdev_priv(net);
119245 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
119246
119247 #ifdef CONFIG_DEBUG_CFG80211
119248 - printk("%s, ielen=%d\n", __func__, len);
119249 + DBG_8192C("%s, ielen=%d\n", __func__, len);
119250 #endif
119251
119252 if(len>0)
119253 @@ -4185,9 +4913,25 @@ static int rtw_cfg80211_set_probe_resp_w
119254 u16 uconfig_method, *puconfig_method = NULL;
119255
119256 #ifdef CONFIG_DEBUG_CFG80211
119257 - printk("probe_resp_wps_ielen=%d\n", wps_ielen);
119258 + DBG_8192C("probe_resp_wps_ielen=%d\n", wps_ielen);
119259 #endif
119260 -
119261 +
119262 + if(check_fwstate(pmlmepriv, WIFI_UNDER_WPS))
119263 + {
119264 + u8 sr = 0;
119265 + rtw_get_wps_attr_content(wps_ie, wps_ielen, WPS_ATTR_SELECTED_REGISTRAR, (u8*)(&sr), NULL);
119266 +
119267 + if (sr != 0)
119268 + {
119269 + DBG_871X("%s, got sr\n", __func__);
119270 + }
119271 + else
119272 + {
119273 + DBG_8192C("GO mode process WPS under site-survey, sr no set\n");
119274 + return ret;
119275 + }
119276 + }
119277 +
119278 if(pmlmepriv->wps_probe_resp_ie)
119279 {
119280 u32 free_len = pmlmepriv->wps_probe_resp_ie_len;
119281 @@ -4198,7 +4942,7 @@ static int rtw_cfg80211_set_probe_resp_w
119282
119283 pmlmepriv->wps_probe_resp_ie = rtw_malloc(wps_ielen);
119284 if ( pmlmepriv->wps_probe_resp_ie == NULL) {
119285 - printk("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
119286 + DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
119287 return -EINVAL;
119288
119289 }
119290 @@ -4221,9 +4965,10 @@ static int rtw_cfg80211_set_probe_resp_w
119291
119292 }
119293
119294 - buf += wps_ielen;
119295 - len -= wps_ielen;
119296 -
119297 + //buf += wps_ielen;
119298 + //len -= wps_ielen;
119299 +
119300 + #ifdef CONFIG_P2P
119301 if((p2p_ie=rtw_get_p2p_ie(buf, len, NULL, &p2p_ielen)))
119302 {
119303 u8 is_GO = _FALSE;
119304 @@ -4231,7 +4976,7 @@ static int rtw_cfg80211_set_probe_resp_w
119305 u16 cap_attr=0;
119306
119307 #ifdef CONFIG_DEBUG_CFG80211
119308 - printk("probe_resp_p2p_ielen=%d\n", p2p_ielen);
119309 + DBG_8192C("probe_resp_p2p_ielen=%d\n", p2p_ielen);
119310 #endif
119311
119312 //Check P2P Capability ATTR
119313 @@ -4245,7 +4990,7 @@ static int rtw_cfg80211_set_probe_resp_w
119314 is_GO = (grp_cap&BIT(0)) ? _TRUE:_FALSE;
119315
119316 if(is_GO)
119317 - printk("Got P2P Capability Attr, grp_cap=0x%x, is_GO\n", grp_cap);
119318 + DBG_8192C("Got P2P Capability Attr, grp_cap=0x%x, is_GO\n", grp_cap);
119319 }
119320
119321
119322 @@ -4261,7 +5006,7 @@ static int rtw_cfg80211_set_probe_resp_w
119323
119324 pmlmepriv->p2p_probe_resp_ie = rtw_malloc(p2p_ielen);
119325 if ( pmlmepriv->p2p_probe_resp_ie == NULL) {
119326 - printk("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
119327 + DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
119328 return -EINVAL;
119329
119330 }
119331 @@ -4280,7 +5025,7 @@ static int rtw_cfg80211_set_probe_resp_w
119332
119333 pmlmepriv->p2p_go_probe_resp_ie = rtw_malloc(p2p_ielen);
119334 if ( pmlmepriv->p2p_go_probe_resp_ie == NULL) {
119335 - printk("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
119336 + DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
119337 return -EINVAL;
119338
119339 }
119340 @@ -4288,7 +5033,36 @@ static int rtw_cfg80211_set_probe_resp_w
119341 pmlmepriv->p2p_go_probe_resp_ie_len = p2p_ielen;
119342 }
119343
119344 - }
119345 + }
119346 + #endif //CONFIG_P2P
119347 +
119348 + //buf += p2p_ielen;
119349 + //len -= p2p_ielen;
119350 +
119351 + #ifdef CONFIG_WFD
119352 + if(rtw_get_wfd_ie(buf, len, NULL, &wfd_ielen))
119353 + {
119354 + #ifdef CONFIG_DEBUG_CFG80211
119355 + DBG_8192C("probe_resp_wfd_ielen=%d\n", wfd_ielen);
119356 + #endif
119357 +
119358 + if(pmlmepriv->wfd_probe_resp_ie)
119359 + {
119360 + u32 free_len = pmlmepriv->wfd_probe_resp_ie_len;
119361 + pmlmepriv->wfd_probe_resp_ie_len = 0;
119362 + rtw_mfree(pmlmepriv->wfd_probe_resp_ie, free_len);
119363 + pmlmepriv->wfd_probe_resp_ie = NULL;
119364 + }
119365 +
119366 + pmlmepriv->wfd_probe_resp_ie = rtw_malloc(wfd_ielen);
119367 + if ( pmlmepriv->wfd_probe_resp_ie == NULL) {
119368 + DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
119369 + return -EINVAL;
119370 +
119371 + }
119372 + rtw_get_wfd_ie(buf, len, pmlmepriv->wfd_probe_resp_ie, &pmlmepriv->wfd_probe_resp_ie_len);
119373 + }
119374 + #endif //CONFIG_WFD
119375
119376 }
119377
119378 @@ -4302,7 +5076,7 @@ static int rtw_cfg80211_set_assoc_resp_w
119379 _adapter *padapter = (_adapter *)rtw_netdev_priv(net);
119380 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
119381
119382 - printk("%s, ielen=%d\n", __func__, len);
119383 + DBG_8192C("%s, ielen=%d\n", __func__, len);
119384
119385 if(len>0)
119386 {
119387 @@ -4316,7 +5090,7 @@ static int rtw_cfg80211_set_assoc_resp_w
119388
119389 pmlmepriv->wps_assoc_resp_ie = rtw_malloc(len);
119390 if ( pmlmepriv->wps_assoc_resp_ie == NULL) {
119391 - printk("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
119392 + DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
119393 return -EINVAL;
119394
119395 }
119396 @@ -4336,11 +5110,14 @@ int rtw_cfg80211_set_mgnt_wpsp2pie(struc
119397 u32 p2p_ielen = 0;
119398
119399 #ifdef CONFIG_DEBUG_CFG80211
119400 - printk("%s, ielen=%d\n", __func__, len);
119401 + DBG_8192C("%s, ielen=%d\n", __func__, len);
119402 #endif
119403
119404 - if((rtw_get_wps_ie(buf, len, NULL, &wps_ielen) && (wps_ielen>0)) ||
119405 - (rtw_get_p2p_ie(buf, len, NULL, &p2p_ielen) && (p2p_ielen>0)) )
119406 + if( (rtw_get_wps_ie(buf, len, NULL, &wps_ielen) && (wps_ielen>0))
119407 + #ifdef CONFIG_P2P
119408 + || (rtw_get_p2p_ie(buf, len, NULL, &p2p_ielen) && (p2p_ielen>0))
119409 + #endif
119410 + )
119411 {
119412 if (net != NULL)
119413 {
119414 @@ -4382,24 +5159,39 @@ static struct cfg80211_ops rtw_cfg80211_
119415 .set_pmksa = cfg80211_rtw_set_pmksa,
119416 .del_pmksa = cfg80211_rtw_del_pmksa,
119417 .flush_pmksa = cfg80211_rtw_flush_pmksa,
119418 +
119419 #ifdef CONFIG_AP_MODE
119420 .add_virtual_intf = cfg80211_rtw_add_virtual_intf,
119421 .del_virtual_intf = cfg80211_rtw_del_virtual_intf,
119422 +
119423 + #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 4, 0)) && !defined(COMPAT_KERNEL_RELEASE)
119424 .add_beacon = cfg80211_rtw_add_beacon,
119425 .set_beacon = cfg80211_rtw_set_beacon,
119426 .del_beacon = cfg80211_rtw_del_beacon,
119427 + #else
119428 + .start_ap = cfg80211_rtw_start_ap,
119429 + .change_beacon = cfg80211_rtw_change_beacon,
119430 + .stop_ap = cfg80211_rtw_stop_ap,
119431 + #endif
119432 +
119433 .add_station = cfg80211_rtw_add_station,
119434 .del_station = cfg80211_rtw_del_station,
119435 .change_station = cfg80211_rtw_change_station,
119436 .dump_station = cfg80211_rtw_dump_station,
119437 .change_bss = cfg80211_rtw_change_bss,
119438 + #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 6, 0))
119439 .set_channel = cfg80211_rtw_set_channel,
119440 + #endif
119441 //.auth = cfg80211_rtw_auth,
119442 //.assoc = cfg80211_rtw_assoc,
119443 #endif //CONFIG_AP_MODE
119444 +
119445 +#ifdef CONFIG_P2P
119446 .remain_on_channel = cfg80211_rtw_remain_on_channel,
119447 - .cancel_remain_on_channel = cfg80211_rtw_cancel_remain_on_channel,
119448 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
119449 + .cancel_remain_on_channel = cfg80211_rtw_cancel_remain_on_channel,
119450 +#endif
119451 +
119452 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
119453 .mgmt_tx = cfg80211_rtw_mgmt_tx,
119454 .mgmt_frame_register = cfg80211_rtw_mgmt_frame_register,
119455 #elif (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,34) && LINUX_VERSION_CODE<=KERNEL_VERSION(2,6,35))
119456 @@ -4458,7 +5250,7 @@ static void rtw_cfg80211_init_ht_capab(s
119457 }
119458 else
119459 {
119460 - printk("%s, error rf_type=%d\n", __func__, rf_type);
119461 + DBG_8192C("%s, error rf_type=%d\n", __func__, rf_type);
119462 }
119463
119464 }
119465 @@ -4470,18 +5262,48 @@ void rtw_cfg80211_init_wiphy(_adapter *p
119466 struct wireless_dev *pwdev = padapter->rtw_wdev;
119467 struct wiphy *wiphy = pwdev->wiphy;
119468
119469 - padapter->HalFunc.GetHwRegHandler(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
119470 + rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
119471
119472 - printk("%s:rf_type=%d\n", __func__, rf_type);
119473 -
119474 - bands = wiphy->bands[IEEE80211_BAND_2GHZ];
119475 - rtw_cfg80211_init_ht_capab(&bands->ht_cap, IEEE80211_BAND_2GHZ, rf_type);
119476 + DBG_8192C("%s:rf_type=%d\n", __func__, rf_type);
119477
119478 + /* if (padapter->registrypriv.wireless_mode & WIRELESS_11G) */
119479 + {
119480 + bands = wiphy->bands[IEEE80211_BAND_2GHZ];
119481 + if(bands)
119482 + rtw_cfg80211_init_ht_capab(&bands->ht_cap, IEEE80211_BAND_2GHZ, rf_type);
119483 + }
119484
119485 - bands = wiphy->bands[IEEE80211_BAND_5GHZ];
119486 - rtw_cfg80211_init_ht_capab(&bands->ht_cap, IEEE80211_BAND_5GHZ, rf_type);
119487 + /* if (padapter->registrypriv.wireless_mode & WIRELESS_11A) */
119488 + {
119489 + bands = wiphy->bands[IEEE80211_BAND_5GHZ];
119490 + if(bands)
119491 + rtw_cfg80211_init_ht_capab(&bands->ht_cap, IEEE80211_BAND_5GHZ, rf_type);
119492 + }
119493 }
119494
119495 +/*
119496 +struct ieee80211_iface_limit rtw_limits[] = {
119497 + { .max = 1, .types = BIT(NL80211_IFTYPE_STATION)
119498 + | BIT(NL80211_IFTYPE_ADHOC)
119499 +#ifdef CONFIG_AP_MODE
119500 + | BIT(NL80211_IFTYPE_AP)
119501 +#endif
119502 +#if defined(CONFIG_P2P) && ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE))
119503 + | BIT(NL80211_IFTYPE_P2P_CLIENT)
119504 + | BIT(NL80211_IFTYPE_P2P_GO)
119505 +#endif
119506 + },
119507 + {.max = 1, .types = BIT(NL80211_IFTYPE_MONITOR)},
119508 +};
119509 +
119510 +struct ieee80211_iface_combination rtw_combinations = {
119511 + .limits = rtw_limits,
119512 + .n_limits = ARRAY_SIZE(rtw_limits),
119513 + .max_interfaces = 2,
119514 + .num_different_channels = 1,
119515 +};
119516 +*/
119517 +
119518 static void rtw_cfg80211_preinit_wiphy(_adapter *padapter, struct wiphy *wiphy)
119519 {
119520
119521 @@ -4491,95 +5313,134 @@ static void rtw_cfg80211_preinit_wiphy(_
119522 wiphy->max_scan_ie_len = RTW_SCAN_IE_LEN_MAX;
119523 wiphy->max_num_pmkids = RTW_MAX_NUM_PMKIDS;
119524
119525 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
119526 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
119527 wiphy->max_remain_on_channel_duration = RTW_MAX_REMAIN_ON_CHANNEL_DURATION;
119528 #endif
119529
119530 - wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
119531 - BIT(NL80211_IFTYPE_ADHOC)
119532 + wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION)
119533 + | BIT(NL80211_IFTYPE_ADHOC)
119534 #ifdef CONFIG_AP_MODE
119535 - | BIT(NL80211_IFTYPE_AP) | BIT(NL80211_IFTYPE_MONITOR)
119536 + | BIT(NL80211_IFTYPE_AP)
119537 + | BIT(NL80211_IFTYPE_MONITOR)
119538 +#endif
119539 +#if defined(CONFIG_P2P) && ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE))
119540 + | BIT(NL80211_IFTYPE_P2P_CLIENT)
119541 + | BIT(NL80211_IFTYPE_P2P_GO)
119542 #endif
119543 -#if defined(CONFIG_P2P) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
119544 - | BIT(NL80211_IFTYPE_P2P_CLIENT) | BIT(NL80211_IFTYPE_P2P_GO)
119545 -#endif
119546 - ;
119547 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
119548 + ;
119549 +
119550 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
119551 #ifdef CONFIG_AP_MODE
119552 wiphy->mgmt_stypes = rtw_cfg80211_default_mgmt_stypes;
119553 #endif //CONFIG_AP_MODE
119554 #endif
119555
119556 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0))
119557 + wiphy->software_iftypes |= BIT(NL80211_IFTYPE_MONITOR);
119558 +#endif
119559 +
119560 + /*
119561 + wiphy->iface_combinations = &rtw_combinations;
119562 + wiphy->n_iface_combinations = 1;
119563 + */
119564 +
119565 wiphy->cipher_suites = rtw_cipher_suites;
119566 wiphy->n_cipher_suites = ARRAY_SIZE(rtw_cipher_suites);
119567
119568 -
119569 - wiphy->bands[IEEE80211_BAND_2GHZ] = &rtw_band_2ghz;
119570 - wiphy->bands[IEEE80211_BAND_5GHZ] = &rtw_band_5ghz;
119571 + /* if (padapter->registrypriv.wireless_mode & WIRELESS_11G) */
119572 + wiphy->bands[IEEE80211_BAND_2GHZ] = rtw_spt_band_alloc(IEEE80211_BAND_2GHZ);
119573 + /* if (padapter->registrypriv.wireless_mode & WIRELESS_11A) */
119574 + wiphy->bands[IEEE80211_BAND_5GHZ] = rtw_spt_band_alloc(IEEE80211_BAND_5GHZ);
119575
119576 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) && LINUX_VERSION_CODE < KERNEL_VERSION(3,0,0))
119577 + wiphy->flags |= WIPHY_FLAG_SUPPORTS_SEPARATE_DEFAULT_KEYS;
119578 +#endif
119579 +
119580 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0))
119581 + wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
119582 + wiphy->flags |= WIPHY_FLAG_OFFCHAN_TX | WIPHY_FLAG_HAVE_AP_SME;
119583 +#endif
119584 +
119585 + if(padapter->registrypriv.power_mgnt != PS_MODE_ACTIVE)
119586 + wiphy->flags |= WIPHY_FLAG_PS_ON_BY_DEFAULT;
119587 + else
119588 + wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
119589 }
119590
119591 int rtw_wdev_alloc(_adapter *padapter, struct device *dev)
119592 {
119593 int ret = 0;
119594 + struct wiphy *wiphy;
119595 struct wireless_dev *wdev;
119596 struct rtw_wdev_priv *pwdev_priv;
119597 struct net_device *pnetdev = padapter->pnetdev;
119598
119599 - printk("%s\n", __func__);
119600 + DBG_8192C("%s(padapter=%p)\n", __func__, padapter);
119601
119602 - wdev = (struct wireless_dev *)rtw_zmalloc(sizeof(struct wireless_dev));
119603 - if (!wdev) {
119604 - printk("Couldn't allocate wireless device\n");
119605 - return (-ENOMEM);
119606 + /* wiphy */
119607 + wiphy = wiphy_new(&rtw_cfg80211_ops, sizeof(struct rtw_wdev_priv));
119608 + if (!wiphy) {
119609 + DBG_8192C("Couldn't allocate wiphy device\n");
119610 + ret = -ENOMEM;
119611 + goto exit;
119612 }
119613 + set_wiphy_dev(wiphy, dev);
119614 + rtw_cfg80211_preinit_wiphy(padapter, wiphy);
119615
119616 - wdev->wiphy = wiphy_new(&rtw_cfg80211_ops, sizeof(struct rtw_wdev_priv));
119617 - if (!wdev->wiphy) {
119618 - printk("Couldn't allocate wiphy device\n");
119619 - ret = -ENOMEM;
119620 - goto out_err_new;
119621 + ret = wiphy_register(wiphy);
119622 + if (ret < 0) {
119623 + DBG_8192C("Couldn't register wiphy device\n");
119624 + goto free_wiphy;
119625 }
119626
119627 - set_wiphy_dev(wdev->wiphy, dev);
119628 -
119629 - //
119630 + /* wdev */
119631 + wdev = (struct wireless_dev *)rtw_zmalloc(sizeof(struct wireless_dev));
119632 + if (!wdev) {
119633 + DBG_8192C("Couldn't allocate wireless device\n");
119634 + ret = -ENOMEM;
119635 + goto unregister_wiphy;
119636 + }
119637 + wdev->wiphy = wiphy;
119638 + wdev->netdev = pnetdev;
119639 + //wdev->iftype = NL80211_IFTYPE_STATION;
119640 + wdev->iftype = NL80211_IFTYPE_MONITOR; // for rtw_setopmode_cmd() in cfg80211_rtw_change_iface()
119641 padapter->rtw_wdev = wdev;
119642 pnetdev->ieee80211_ptr = wdev;
119643
119644 //init pwdev_priv
119645 pwdev_priv = wdev_to_priv(wdev);
119646 - pwdev_priv->pmon_ndev = NULL;
119647 - pwdev_priv->ifname_mon[0] = '\0';
119648 pwdev_priv->rtw_wdev = wdev;
119649 + pwdev_priv->pmon_ndev = NULL;
119650 + pwdev_priv->ifname_mon[0] = '\0';
119651 pwdev_priv->padapter = padapter;
119652 pwdev_priv->scan_request = NULL;
119653 _rtw_spinlock_init(&pwdev_priv->scan_req_lock);
119654
119655 pwdev_priv->p2p_enabled = _FALSE;
119656 pwdev_priv->provdisc_req_issued = _FALSE;
119657 + rtw_wdev_invit_info_init(&pwdev_priv->invit_info);
119658 + rtw_wdev_nego_info_init(&pwdev_priv->nego_info);
119659
119660 - wdev->netdev = pnetdev;
119661 - wdev->iftype = NL80211_IFTYPE_MONITOR;
119662 -
119663 - rtw_cfg80211_preinit_wiphy(padapter, wdev->wiphy);
119664 -
119665 - ret = wiphy_register(wdev->wiphy);
119666 - if (ret < 0) {
119667 - printk("Couldn't register wiphy device\n");
119668 - goto out_err_register;
119669 - }
119670 + pwdev_priv->bandroid_scan = _FALSE;
119671
119672 - SET_NETDEV_DEV(pnetdev, wiphy_dev(wdev->wiphy));
119673 + if(padapter->registrypriv.power_mgnt != PS_MODE_ACTIVE)
119674 + pwdev_priv->power_mgmt = _TRUE;
119675 + else
119676 + pwdev_priv->power_mgmt = _FALSE;
119677 +
119678 +#ifdef CONFIG_CONCURRENT_MODE
119679 + ATOMIC_SET(&pwdev_priv->switch_ch_to, 1);
119680 + ATOMIC_SET(&pwdev_priv->ro_ch_to, 1);
119681 +#endif
119682
119683 return ret;
119684
119685 - out_err_register:
119686 - wiphy_free(wdev->wiphy);
119687 -
119688 - out_err_new:
119689 rtw_mfree((u8*)wdev, sizeof(struct wireless_dev));
119690 -
119691 +unregister_wiphy:
119692 + wiphy_unregister(wiphy);
119693 + free_wiphy:
119694 + wiphy_free(wiphy);
119695 +exit:
119696 return ret;
119697
119698 }
119699 @@ -4588,30 +5449,40 @@ void rtw_wdev_free(struct wireless_dev *
119700 {
119701 struct rtw_wdev_priv *pwdev_priv;
119702
119703 - printk("%s\n", __func__);
119704 + DBG_8192C("%s(wdev=%p)\n", __func__, wdev);
119705
119706 if (!wdev)
119707 return;
119708
119709 pwdev_priv = wdev_to_priv(wdev);
119710 +
119711 + rtw_spt_band_free(wdev->wiphy->bands[IEEE80211_BAND_2GHZ]);
119712 + rtw_spt_band_free(wdev->wiphy->bands[IEEE80211_BAND_5GHZ]);
119713
119714 - printk("%s, scan abort when device remove\n", __func__);
119715 + wiphy_free(wdev->wiphy);
119716 +
119717 + rtw_mfree((u8*)wdev, sizeof(struct wireless_dev));
119718 +}
119719 +
119720 +void rtw_wdev_unregister(struct wireless_dev *wdev)
119721 +{
119722 + struct rtw_wdev_priv *pwdev_priv;
119723 +
119724 + DBG_8192C("%s(wdev=%p)\n", __func__, wdev);
119725 +
119726 + if (!wdev)
119727 + return;
119728 +
119729 + pwdev_priv = wdev_to_priv(wdev);
119730 +
119731 rtw_cfg80211_indicate_scan_done(pwdev_priv, _TRUE);
119732 -
119733 - if(pwdev_priv->pmon_ndev)
119734 - {
119735 - printk("%s, unregister monitor interface\n", __func__);
119736 -
119737 +
119738 + if (pwdev_priv->pmon_ndev) {
119739 + DBG_8192C("%s, unregister monitor interface\n", __func__);
119740 unregister_netdev(pwdev_priv->pmon_ndev);
119741 -
119742 - free_netdev(pwdev_priv->pmon_ndev);
119743 - }
119744 -
119745 + }
119746
119747 wiphy_unregister(wdev->wiphy);
119748 - wiphy_free(wdev->wiphy);
119749 -
119750 - rtw_mfree((u8*)wdev, sizeof(struct wireless_dev));
119751 }
119752
119753 #endif //CONFIG_IOCTL_CFG80211
119754 --- a/drivers/net/wireless/rtl8192cu/os_dep/linux/ioctl_linux.c
119755 +++ b/drivers/net/wireless/rtl8192cu/os_dep/linux/ioctl_linux.c
119756 @@ -34,7 +34,7 @@
119757 //#ifdef CONFIG_MP_INCLUDED
119758 #include <rtw_mp_ioctl.h>
119759 //#endif
119760 -
119761 +
119762 #ifdef CONFIG_USB_HCI
119763 #include <usb_ops.h>
119764 #endif //CONFIG_USB_HCI
119765 @@ -76,8 +76,7 @@ extern int ui_pid[3];
119766
119767 extern u8 key_2char2num(u8 hch, u8 lch);
119768 extern u8 str_2char2num(u8 hch, u8 lch);
119769 -
119770 -int rfpwrstate_check(_adapter *padapter);
119771 +extern u8 convert_ip_addr(u8 hch, u8 mch, u8 lch);
119772
119773 u32 rtw_rates[] = {1000000,2000000,5500000,11000000,
119774 6000000,9000000,12000000,18000000,24000000,36000000,48000000,54000000};
119775 @@ -139,11 +138,12 @@ static int hwaddr_aton_i(const char *txt
119776
119777 static void indicate_wx_custom_event(_adapter *padapter, char *msg)
119778 {
119779 +#ifndef CONFIG_IOCTL_CFG80211
119780 u8 *buff, *p;
119781 union iwreq_data wrqu;
119782
119783 - if (strlen(msg) > IW_CUSTOM_MAX) {
119784 - DBG_871X("%s strlen(msg):%u > IW_CUSTOM_MAX:%u\n", __FUNCTION__ ,strlen(msg), IW_CUSTOM_MAX);
119785 + if ((u32)strlen(msg) > IW_CUSTOM_MAX) {
119786 + DBG_871X("%s strlen(msg):%u > IW_CUSTOM_MAX:%u\n", __FUNCTION__ ,(u32)strlen(msg), IW_CUSTOM_MAX);
119787 return;
119788 }
119789
119790 @@ -152,90 +152,96 @@ static void indicate_wx_custom_event(_ad
119791 return;
119792
119793 _rtw_memcpy(buff, msg, strlen(msg));
119794 -
119795 +
119796 _rtw_memset(&wrqu,0,sizeof(wrqu));
119797 wrqu.data.length = strlen(msg);
119798
119799 - DBG_8192C("%s %s\n", __FUNCTION__, buff);
119800 + DBG_871X("%s %s\n", __FUNCTION__, buff);
119801 wireless_send_event(padapter->pnetdev, IWEVCUSTOM, &wrqu, buff);
119802
119803 rtw_mfree(buff, IW_CUSTOM_MAX+1);
119804 -
119805 +#endif
119806 }
119807
119808
119809 static void request_wps_pbc_event(_adapter *padapter)
119810 {
119811 +#ifndef CONFIG_IOCTL_CFG80211
119812 u8 *buff, *p;
119813 union iwreq_data wrqu;
119814
119815 -
119816 buff = rtw_malloc(IW_CUSTOM_MAX);
119817 if(!buff)
119818 return;
119819 -
119820 +
119821 _rtw_memset(buff, 0, IW_CUSTOM_MAX);
119822 -
119823 +
119824 p=buff;
119825 -
119826 +
119827 p+=sprintf(p, "WPS_PBC_START.request=TRUE");
119828 -
119829 +
119830 _rtw_memset(&wrqu,0,sizeof(wrqu));
119831 -
119832 +
119833 wrqu.data.length = p-buff;
119834 -
119835 +
119836 wrqu.data.length = (wrqu.data.length<IW_CUSTOM_MAX) ? wrqu.data.length:IW_CUSTOM_MAX;
119837
119838 - DBG_8192C("%s\n", __FUNCTION__);
119839 -
119840 + DBG_871X("%s\n", __FUNCTION__);
119841 +
119842 wireless_send_event(padapter->pnetdev, IWEVCUSTOM, &wrqu, buff);
119843
119844 if(buff)
119845 {
119846 rtw_mfree(buff, IW_CUSTOM_MAX);
119847 }
119848 -
119849 +#endif
119850 }
119851
119852
119853 void indicate_wx_scan_complete_event(_adapter *padapter)
119854 -{
119855 +{
119856 +#ifndef CONFIG_IOCTL_CFG80211
119857 union iwreq_data wrqu;
119858 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
119859 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
119860
119861 _rtw_memset(&wrqu, 0, sizeof(union iwreq_data));
119862
119863 - //DBG_8192C("+rtw_indicate_wx_scan_complete_event\n");
119864 + //DBG_871X("+rtw_indicate_wx_scan_complete_event\n");
119865 wireless_send_event(padapter->pnetdev, SIOCGIWSCAN, &wrqu, NULL);
119866 +#endif
119867 }
119868
119869
119870 void rtw_indicate_wx_assoc_event(_adapter *padapter)
119871 -{
119872 +{
119873 +#ifndef CONFIG_IOCTL_CFG80211
119874 union iwreq_data wrqu;
119875 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
119876 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
119877
119878 _rtw_memset(&wrqu, 0, sizeof(union iwreq_data));
119879 -
119880 - wrqu.ap_addr.sa_family = ARPHRD_ETHER;
119881 -
119882 +
119883 + wrqu.ap_addr.sa_family = ARPHRD_ETHER;
119884 +
119885 _rtw_memcpy(wrqu.ap_addr.sa_data, pmlmepriv->cur_network.network.MacAddress, ETH_ALEN);
119886
119887 - //DBG_8192C("+rtw_indicate_wx_assoc_event\n");
119888 + //DBG_871X("+rtw_indicate_wx_assoc_event\n");
119889 wireless_send_event(padapter->pnetdev, SIOCGIWAP, &wrqu, NULL);
119890 +#endif
119891 }
119892
119893 void rtw_indicate_wx_disassoc_event(_adapter *padapter)
119894 -{
119895 +{
119896 +#ifndef CONFIG_IOCTL_CFG80211
119897 union iwreq_data wrqu;
119898
119899 _rtw_memset(&wrqu, 0, sizeof(union iwreq_data));
119900
119901 wrqu.ap_addr.sa_family = ARPHRD_ETHER;
119902 _rtw_memset(wrqu.ap_addr.sa_data, 0, ETH_ALEN);
119903 -
119904 - //DBG_8192C("+rtw_indicate_wx_disassoc_event\n");
119905 +
119906 + //DBG_871X("+rtw_indicate_wx_disassoc_event\n");
119907 wireless_send_event(padapter->pnetdev, SIOCGIWAP, &wrqu, NULL);
119908 +#endif
119909 }
119910
119911 /*
119912 @@ -291,36 +297,87 @@ static char *translate_scan(_adapter *pa
119913 #endif //CONFIG_P2P
119914
119915 #ifdef CONFIG_P2P
119916 - if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE) && !rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE))
119917 +#ifdef CONFIG_WFD
119918 + if ( SCAN_RESULT_ALL == pwdinfo->wfd_info->scan_result_type )
119919 {
119920 - u32 blnGotP2PIE = _FALSE;
119921 -
119922 - // User is doing the P2P device discovery
119923 - // The prefix of SSID should be "DIRECT-" and the IE should contains the P2P IE.
119924 - // If not, the driver should ignore this AP and go to the next AP.
119925
119926 - // Verifying the SSID
119927 - if ( _rtw_memcmp( pnetwork->network.Ssid.Ssid, pwdinfo->p2p_wildcard_ssid, P2P_WILDCARD_SSID_LEN ) )
119928 + }
119929 + else if ( ( SCAN_RESULT_P2P_ONLY == pwdinfo->wfd_info->scan_result_type ) ||
119930 + ( SCAN_RESULT_WFD_TYPE == pwdinfo->wfd_info->scan_result_type ) )
119931 +#endif // CONFIG_WFD
119932 + {
119933 + if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
119934 {
119935 - u32 p2pielen = 0;
119936 + u32 blnGotP2PIE = _FALSE;
119937 +
119938 + // User is doing the P2P device discovery
119939 + // The prefix of SSID should be "DIRECT-" and the IE should contains the P2P IE.
119940 + // If not, the driver should ignore this AP and go to the next AP.
119941
119942 - // Verifying the P2P IE
119943 - if ( rtw_get_p2p_ie( &pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &p2pielen) )
119944 + // Verifying the SSID
119945 + if ( _rtw_memcmp( pnetwork->network.Ssid.Ssid, pwdinfo->p2p_wildcard_ssid, P2P_WILDCARD_SSID_LEN ) )
119946 {
119947 - blnGotP2PIE = _TRUE;
119948 + u32 p2pielen = 0;
119949 +
119950 + // Verifying the P2P IE
119951 + if ( rtw_get_p2p_ie( &pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &p2pielen) )
119952 + {
119953 + blnGotP2PIE = _TRUE;
119954 + }
119955 }
119956
119957 + if ( blnGotP2PIE == _FALSE )
119958 + {
119959 + return start;
119960 + }
119961 +
119962 }
119963 + }
119964
119965 - if ( blnGotP2PIE == _FALSE )
119966 +#ifdef CONFIG_WFD
119967 + if ( SCAN_RESULT_WFD_TYPE == pwdinfo->wfd_info->scan_result_type )
119968 + {
119969 + u32 blnGotWFD = _FALSE;
119970 + u8 wfd_ie[ 128 ] = { 0x00 };
119971 + uint wfd_ielen = 0;
119972 +
119973 + if ( rtw_get_wfd_ie( &pnetwork->network.IEs[12], pnetwork->network.IELength - 12, wfd_ie, &wfd_ielen ) )
119974 {
119975 - return start;
119976 + u8 wfd_devinfo[ 6 ] = { 0x00 };
119977 + uint wfd_devlen = 6;
119978 +
119979 + if ( rtw_get_wfd_attr_content( wfd_ie, wfd_ielen, WFD_ATTR_DEVICE_INFO, wfd_devinfo, &wfd_devlen) )
119980 + {
119981 + if ( pwdinfo->wfd_info->wfd_device_type == WFD_DEVINFO_PSINK )
119982 + {
119983 + // the first two bits will indicate the WFD device type
119984 + if ( ( wfd_devinfo[ 1 ] & 0x03 ) == WFD_DEVINFO_SOURCE )
119985 + {
119986 + // If this device is Miracast PSink device, the scan reuslt should just provide the Miracast source.
119987 + blnGotWFD = _TRUE;
119988 + }
119989 + }
119990 + else if ( pwdinfo->wfd_info->wfd_device_type == WFD_DEVINFO_SOURCE )
119991 + {
119992 + // the first two bits will indicate the WFD device type
119993 + if ( ( wfd_devinfo[ 1 ] & 0x03 ) == WFD_DEVINFO_PSINK )
119994 + {
119995 + // If this device is Miracast source device, the scan reuslt should just provide the Miracast PSink.
119996 + // Todo: How about the SSink?!
119997 + blnGotWFD = _TRUE;
119998 + }
119999 + }
120000 + }
120001 }
120002
120003 + if ( blnGotWFD == _FALSE )
120004 + {
120005 + return start;
120006 + }
120007 }
120008 +#endif // CONFIG_WFD
120009
120010 #endif //CONFIG_P2P
120011 -
120012 /* AP MAC address */
120013 iwe.cmd = SIOCGIWAP;
120014 iwe.u.ap_addr.sa_family = ARPHRD_ETHER;
120015 @@ -335,7 +392,7 @@ static char *translate_scan(_adapter *pa
120016 start = iwe_stream_add_point(info, start, stop, &iwe, pnetwork->network.Ssid.Ssid);
120017
120018 //parsing HT_CAP_IE
120019 - p = rtw_get_ie(&pnetwork->network.IEs[12], _HT_CAPABILITY_IE_, &ht_ielen, pnetwork->network.IELength-12);
120020 + p = rtw_get_ie(&pnetwork->network.IEs[12], _HT_CAPABILITY_IE_, &ht_ielen, pnetwork->network.IELength-12);
120021
120022 if(p && ht_ielen>0)
120023 {
120024 @@ -445,7 +502,7 @@ static char *translate_scan(_adapter *pa
120025 }
120026 else//default MCS7
120027 {
120028 - DBG_8192C("wx_get_scan, mcs_rate_bitmap=0x%x\n", mcs_rate);
120029 + DBG_871X("wx_get_scan, mcs_rate_bitmap=0x%x\n", mcs_rate);
120030 max_rate = (bw_40MHz) ? ((short_GI)?150:135):((short_GI)?72:65);
120031 }
120032
120033 @@ -508,58 +565,56 @@ static char *translate_scan(_adapter *pa
120034 }
120035
120036 { //parsing WPS IE
120037 - int cnt = 0,total_ielen=0;
120038 + uint cnt = 0,total_ielen;
120039 u8 *wpsie_ptr=NULL;
120040 uint wps_ielen = 0;
120041
120042 u8 *ie_ptr = pnetwork->network.IEs +_FIXED_IE_LENGTH_;
120043 total_ielen= pnetwork->network.IELength - _FIXED_IE_LENGTH_;
120044 - if((ie_ptr) && (total_ielen>0))
120045 +
120046 + while(cnt < total_ielen)
120047 {
120048 - while(cnt < total_ielen)
120049 + if(rtw_is_wps_ie(&ie_ptr[cnt], &wps_ielen) && (wps_ielen>2))
120050 {
120051 - if(rtw_is_wps_ie(&ie_ptr[cnt], &wps_ielen) && (wps_ielen>2))
120052 - {
120053 - wpsie_ptr = &ie_ptr[cnt];
120054 - iwe.cmd =IWEVGENIE;
120055 - iwe.u.data.length = (u16)wps_ielen;
120056 - start = iwe_stream_add_point(info, start, stop, &iwe, wpsie_ptr);
120057 - }
120058 - cnt+=ie_ptr[cnt+1]+2; //goto next
120059 - }
120060 + wpsie_ptr = &ie_ptr[cnt];
120061 + iwe.cmd =IWEVGENIE;
120062 + iwe.u.data.length = (u16)wps_ielen;
120063 + start = iwe_stream_add_point(info, start, stop, &iwe, wpsie_ptr);
120064 + }
120065 + cnt+=ie_ptr[cnt+1]+2; //goto next
120066 }
120067 }
120068
120069 +
120070 +{
120071 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
120072 + u8 ss, sq;
120073 +
120074 /* Add quality statistics */
120075 iwe.cmd = IWEVQUAL;
120076 - rssi = pnetwork->network.Rssi;//dBM
120077 -
120078 -#ifdef CONFIG_RTL8711
120079 - rssi = (rssi*2) + 190;
120080 - if(rssi>100) rssi = 100;
120081 - if(rssi<0) rssi = 0;
120082 -#endif
120083 -
120084 - //DBG_8192C("RSSI=0x%X%%\n", rssi);
120085 -
120086 - // we only update signal_level (signal strength) that is rssi.
120087 iwe.u.qual.updated = IW_QUAL_QUAL_UPDATED | IW_QUAL_LEVEL_UPDATED | IW_QUAL_NOISE_INVALID
120088 -#ifdef CONFIG_PLATFORM_MT53XX
120089 - ;
120090 - iwe.u.qual.level = (u8)pnetwork->network.PhyInfo.SignalStrength;//%
120091 -#else
120092 #ifdef CONFIG_SIGNAL_DISPLAY_DBM
120093 | IW_QUAL_DBM
120094 #endif
120095 ;
120096
120097 + if ( check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE &&
120098 + is_same_network(&pmlmepriv->cur_network.network, &pnetwork->network)) {
120099 + ss = padapter->recvpriv.signal_strength;
120100 + sq = padapter->recvpriv.signal_qual;
120101 + } else {
120102 + ss = pnetwork->network.PhyInfo.SignalStrength;
120103 + sq = pnetwork->network.PhyInfo.SignalQuality;
120104 + }
120105 +
120106 +
120107 #ifdef CONFIG_SIGNAL_DISPLAY_DBM
120108 - iwe.u.qual.level = (u8) translate_percentage_to_dbm(pnetwork->network.PhyInfo.SignalStrength);//dbm
120109 + iwe.u.qual.level = (u8) translate_percentage_to_dbm(ss);//dbm
120110 #else
120111 - iwe.u.qual.level = (u8)pnetwork->network.PhyInfo.SignalStrength;//%
120112 + iwe.u.qual.level = (u8)ss;//%
120113 #endif
120114 -#endif
120115 - iwe.u.qual.qual = (u8)pnetwork->network.PhyInfo.SignalQuality; // signal quality
120116 +
120117 + iwe.u.qual.qual = (u8)sq; // signal quality
120118
120119 #ifdef CONFIG_PLATFORM_ROCKCHIPS
120120 iwe.u.qual.noise = -100; // noise level suggest by zhf@rockchips
120121 @@ -567,14 +622,10 @@ static char *translate_scan(_adapter *pa
120122 iwe.u.qual.noise = 0; // noise level
120123 #endif //CONFIG_PLATFORM_ROCKCHIPS
120124
120125 - //DBG_8192C("iqual=%d, ilevel=%d, inoise=%d, iupdated=%d\n", iwe.u.qual.qual, iwe.u.qual.level , iwe.u.qual.noise, iwe.u.qual.updated);
120126 + //DBG_871X("iqual=%d, ilevel=%d, inoise=%d, iupdated=%d\n", iwe.u.qual.qual, iwe.u.qual.level , iwe.u.qual.noise, iwe.u.qual.updated);
120127
120128 start = iwe_stream_add_event(info, start, stop, &iwe, IW_EV_QUAL_LEN);
120129 -
120130 - //how to translate rssi to ?%
120131 - //rssi = (iwe.u.qual.level*2) + 190;
120132 - //if(rssi>100) rssi = 100;
120133 - //if(rssi<0) rssi = 0;
120134 +}
120135
120136 return start;
120137 }
120138 @@ -586,14 +637,14 @@ static int wpa_set_auth_algs(struct net_
120139
120140 if ((value & AUTH_ALG_SHARED_KEY)&&(value & AUTH_ALG_OPEN_SYSTEM))
120141 {
120142 - DBG_8192C("wpa_set_auth_algs, AUTH_ALG_SHARED_KEY and AUTH_ALG_OPEN_SYSTEM [value:0x%x]\n",value);
120143 + DBG_871X("wpa_set_auth_algs, AUTH_ALG_SHARED_KEY and AUTH_ALG_OPEN_SYSTEM [value:0x%x]\n",value);
120144 padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
120145 padapter->securitypriv.ndisauthtype = Ndis802_11AuthModeAutoSwitch;
120146 padapter->securitypriv.dot11AuthAlgrthm = dot11AuthAlgrthm_Auto;
120147 }
120148 else if (value & AUTH_ALG_SHARED_KEY)
120149 {
120150 - DBG_8192C("wpa_set_auth_algs, AUTH_ALG_SHARED_KEY [value:0x%x]\n",value);
120151 + DBG_871X("wpa_set_auth_algs, AUTH_ALG_SHARED_KEY [value:0x%x]\n",value);
120152 padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
120153
120154 #ifdef CONFIG_PLATFORM_MT53XX
120155 @@ -606,7 +657,7 @@ static int wpa_set_auth_algs(struct net_
120156 }
120157 else if(value & AUTH_ALG_OPEN_SYSTEM)
120158 {
120159 - DBG_8192C("wpa_set_auth_algs, AUTH_ALG_OPEN_SYSTEM\n");
120160 + DBG_871X("wpa_set_auth_algs, AUTH_ALG_OPEN_SYSTEM\n");
120161 //padapter->securitypriv.ndisencryptstatus = Ndis802_11EncryptionDisabled;
120162 if(padapter->securitypriv.ndisauthtype < Ndis802_11AuthModeWPAPSK)
120163 {
120164 @@ -622,11 +673,11 @@ static int wpa_set_auth_algs(struct net_
120165 }
120166 else if(value & AUTH_ALG_LEAP)
120167 {
120168 - DBG_8192C("wpa_set_auth_algs, AUTH_ALG_LEAP\n");
120169 + DBG_871X("wpa_set_auth_algs, AUTH_ALG_LEAP\n");
120170 }
120171 else
120172 {
120173 - DBG_8192C("wpa_set_auth_algs, error!\n");
120174 + DBG_871X("wpa_set_auth_algs, error!\n");
120175 ret = -EINVAL;
120176 }
120177
120178 @@ -661,20 +712,30 @@ _func_enter_;
120179 param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff &&
120180 param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff)
120181 {
120182 - if (param->u.crypt.idx >= WEP_KEYS)
120183 +
120184 + if (param->u.crypt.idx >= WEP_KEYS
120185 +#ifdef CONFIG_IEEE80211W
120186 + && param->u.crypt.idx > BIP_MAX_KEYID
120187 +#endif //CONFIG_IEEE80211W
120188 + )
120189 + {
120190 + ret = -EINVAL;
120191 + goto exit;
120192 + }
120193 + }
120194 + else
120195 + {
120196 +
120197 {
120198 ret = -EINVAL;
120199 goto exit;
120200 }
120201 - } else {
120202 - ret = -EINVAL;
120203 - goto exit;
120204 }
120205
120206 if (strcmp(param->u.crypt.alg, "WEP") == 0)
120207 {
120208 RT_TRACE(_module_rtl871x_ioctl_os_c,_drv_err_,("wpa_set_encryption, crypt.alg = WEP\n"));
120209 - DBG_8192C("wpa_set_encryption, crypt.alg = WEP\n");
120210 + DBG_871X("wpa_set_encryption, crypt.alg = WEP\n");
120211
120212 padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
120213 padapter->securitypriv.dot11PrivacyAlgrthm=_WEP40_;
120214 @@ -684,7 +745,7 @@ _func_enter_;
120215 wep_key_len = param->u.crypt.key_len;
120216
120217 RT_TRACE(_module_rtl871x_ioctl_os_c,_drv_info_,("(1)wep_key_idx=%d\n", wep_key_idx));
120218 - DBG_8192C("(1)wep_key_idx=%d\n", wep_key_idx);
120219 + DBG_871X("(1)wep_key_idx=%d\n", wep_key_idx);
120220
120221 if (wep_key_idx > WEP_KEYS)
120222 return -EINVAL;
120223 @@ -724,7 +785,7 @@ _func_enter_;
120224
120225 if(param->u.crypt.set_tx)
120226 {
120227 - DBG_8192C("wep, set_tx=1\n");
120228 + DBG_871X("wep, set_tx=1\n");
120229
120230 if(rtw_set_802_11_add_wep(padapter, pwep) == (u8)_FAIL)
120231 {
120232 @@ -733,7 +794,7 @@ _func_enter_;
120233 }
120234 else
120235 {
120236 - DBG_8192C("wep, set_tx=0\n");
120237 + DBG_871X("wep, set_tx=0\n");
120238
120239 //don't update "psecuritypriv->dot11PrivacyAlgrthm" and
120240 //"psecuritypriv->dot11PrivacyKeyIndex=keyid", but can rtw_set_key to fw/cam
120241 @@ -796,17 +857,40 @@ _func_enter_;
120242 }
120243 else//group key
120244 {
120245 - _rtw_memcpy(padapter->securitypriv.dot118021XGrpKey[param->u.crypt.idx].skey, param->u.crypt.key,(param->u.crypt.key_len>16 ?16:param->u.crypt.key_len));
120246 - _rtw_memcpy(padapter->securitypriv.dot118021XGrptxmickey[param->u.crypt.idx].skey,&(param->u.crypt.key[16]),8);
120247 - _rtw_memcpy(padapter->securitypriv.dot118021XGrprxmickey[param->u.crypt.idx].skey,&(param->u.crypt.key[24]),8);
120248 - padapter->securitypriv.binstallGrpkey = _TRUE;
120249 - //DEBUG_ERR(("\n param->u.crypt.key_len=%d\n", param->u.crypt.key_len));
120250 - //DEBUG_ERR(("\n ~~~~stastakey:groupkey\n"));
120251 - DBG_871X("\n ~~~~stastakey:groupkey\n");
120252 -
120253 - padapter->securitypriv.dot118021XGrpKeyid = param->u.crypt.idx;
120254 -
120255 - rtw_set_key(padapter,&padapter->securitypriv,param->u.crypt.idx, 1);
120256 + if(strcmp(param->u.crypt.alg, "TKIP") == 0 || strcmp(param->u.crypt.alg, "CCMP") == 0)
120257 + {
120258 + _rtw_memcpy(padapter->securitypriv.dot118021XGrpKey[param->u.crypt.idx].skey, param->u.crypt.key,(param->u.crypt.key_len>16 ?16:param->u.crypt.key_len));
120259 + //only TKIP group key need to install this
120260 + if(param->u.crypt.key_len > 16)
120261 + {
120262 + _rtw_memcpy(padapter->securitypriv.dot118021XGrptxmickey[param->u.crypt.idx].skey,&(param->u.crypt.key[16]),8);
120263 + _rtw_memcpy(padapter->securitypriv.dot118021XGrprxmickey[param->u.crypt.idx].skey,&(param->u.crypt.key[24]),8);
120264 + }
120265 + padapter->securitypriv.binstallGrpkey = _TRUE;
120266 + //DEBUG_ERR((" param->u.crypt.key_len=%d\n", param->u.crypt.key_len));
120267 + DBG_871X(" ~~~~set sta key:groupkey\n");
120268 +
120269 + padapter->securitypriv.dot118021XGrpKeyid = param->u.crypt.idx;
120270 +
120271 + rtw_set_key(padapter,&padapter->securitypriv,param->u.crypt.idx, 1);
120272 + }
120273 +#ifdef CONFIG_IEEE80211W
120274 + else if(strcmp(param->u.crypt.alg, "BIP") == 0)
120275 + {
120276 + int no;
120277 + //printk("BIP key_len=%d , index=%d @@@@@@@@@@@@@@@@@@\n", param->u.crypt.key_len, param->u.crypt.idx);
120278 + //save the IGTK key, length 16 bytes
120279 + _rtw_memcpy(padapter->securitypriv.dot11wBIPKey[param->u.crypt.idx].skey, param->u.crypt.key,(param->u.crypt.key_len>16 ?16:param->u.crypt.key_len));
120280 + /*printk("IGTK key below:\n");
120281 + for(no=0;no<16;no++)
120282 + printk(" %02x ", padapter->securitypriv.dot11wBIPKey[param->u.crypt.idx].skey[no]);
120283 + printk("\n");*/
120284 + padapter->securitypriv.dot11wBIPKeyid = param->u.crypt.idx;
120285 + padapter->securitypriv.binstallBIPkey = _TRUE;
120286 + DBG_871X(" ~~~~set sta key:IGKT\n");
120287 + }
120288 +#endif //CONFIG_IEEE80211W
120289 +
120290 #ifdef CONFIG_P2P
120291 if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_PROVISIONING_ING))
120292 {
120293 @@ -843,7 +927,7 @@ _func_enter_;
120294 exit:
120295
120296 if (pwep) {
120297 - rtw_mfree((u8 *)pwep,wep_total_len);
120298 + rtw_mfree((u8 *)pwep, wep_total_len);
120299 }
120300
120301 _func_exit_;
120302 @@ -857,12 +941,13 @@ static int rtw_set_wpa_ie(_adapter *pada
120303 u32 left;
120304 int group_cipher = 0, pairwise_cipher = 0;
120305 int ret = 0;
120306 + u8 null_addr[]= {0,0,0,0,0,0};
120307 #ifdef CONFIG_P2P
120308 struct wifidirect_info* pwdinfo = &padapter->wdinfo;
120309 #endif //CONFIG_P2P
120310
120311 if((ielen > MAX_WPA_IE_LEN) || (pie == NULL)){
120312 - padapter->securitypriv.wps_phase = _FALSE;
120313 + _clr_fwstate_(&padapter->mlmepriv, WIFI_UNDER_WPS);
120314 if(pie == NULL)
120315 return ret;
120316 else
120317 @@ -882,9 +967,9 @@ static int rtw_set_wpa_ie(_adapter *pada
120318 //dump
120319 {
120320 int i;
120321 - DBG_8192C("\n wpa_ie(length:%d):\n", ielen);
120322 + DBG_871X("\n wpa_ie(length:%d):\n", ielen);
120323 for(i=0;i<ielen;i=i+8)
120324 - DBG_8192C("0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x \n",buf[i],buf[i+1],buf[i+2],buf[i+3],buf[i+4],buf[i+5],buf[i+6],buf[i+7]);
120325 + DBG_871X("0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x \n",buf[i],buf[i+1],buf[i+2],buf[i+3],buf[i+4],buf[i+5],buf[i+6],buf[i+7]);
120326 }
120327
120328 pos = buf;
120329 @@ -923,6 +1008,15 @@ static int rtw_set_wpa_ie(_adapter *pada
120330 _rtw_memcpy(padapter->securitypriv.supplicant_ie, &buf[0], ielen);
120331 }
120332
120333 + if (group_cipher == 0)
120334 + {
120335 + group_cipher = WPA_CIPHER_NONE;
120336 + }
120337 + if (pairwise_cipher == 0)
120338 + {
120339 + pairwise_cipher = WPA_CIPHER_NONE;
120340 + }
120341 +
120342 switch(group_cipher)
120343 {
120344 case WPA_CIPHER_NONE:
120345 @@ -971,7 +1065,7 @@ static int rtw_set_wpa_ie(_adapter *pada
120346 break;
120347 }
120348
120349 - padapter->securitypriv.wps_phase = _FALSE;
120350 + _clr_fwstate_(&padapter->mlmepriv, WIFI_UNDER_WPS);
120351 {//set wps_ie
120352 u16 cnt = 0;
120353 u8 eid, wps_oui[4]={0x0,0x50,0xf2,0x04};
120354 @@ -982,13 +1076,13 @@ static int rtw_set_wpa_ie(_adapter *pada
120355
120356 if((eid==_VENDOR_SPECIFIC_IE_)&&(_rtw_memcmp(&buf[cnt+2], wps_oui, 4)==_TRUE))
120357 {
120358 - DBG_8192C("SET WPS_IE\n");
120359 + DBG_871X("SET WPS_IE\n");
120360
120361 padapter->securitypriv.wps_ie_len = ( (buf[cnt+1]+2) < (MAX_WPA_IE_LEN<<2)) ? (buf[cnt+1]+2):(MAX_WPA_IE_LEN<<2);
120362
120363 _rtw_memcpy(padapter->securitypriv.wps_ie, &buf[cnt], padapter->securitypriv.wps_ie_len);
120364
120365 - padapter->securitypriv.wps_phase = _TRUE;
120366 + set_fwstate(&padapter->mlmepriv, WIFI_UNDER_WPS);
120367
120368 #ifdef CONFIG_P2P
120369 if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_OK))
120370 @@ -996,8 +1090,6 @@ static int rtw_set_wpa_ie(_adapter *pada
120371 rtw_p2p_set_state(pwdinfo, P2P_STATE_PROVISIONING_ING);
120372 }
120373 #endif //CONFIG_P2P
120374 - DBG_8192C("SET WPS_IE, wps_phase==_TRUE\n");
120375 -
120376 cnt += buf[cnt+1]+2;
120377
120378 break;
120379 @@ -1007,7 +1099,15 @@ static int rtw_set_wpa_ie(_adapter *pada
120380 }
120381 }
120382 }
120383 -
120384 +
120385 + //TKIP and AES disallow multicast packets until installing group key
120386 + if(padapter->securitypriv.dot11PrivacyAlgrthm == _TKIP_
120387 + || padapter->securitypriv.dot11PrivacyAlgrthm == _TKIP_WTMIC_
120388 + || padapter->securitypriv.dot11PrivacyAlgrthm == _AES_)
120389 + //WPS open need to enable multicast
120390 + //|| check_fwstate(&padapter->mlmepriv, WIFI_UNDER_WPS) == _TRUE)
120391 + rtw_hal_set_hwreg(padapter, HW_VAR_OFF_RCR_AM, null_addr);
120392 +
120393 RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_info_,
120394 ("rtw_set_wpa_ie: pairwise_cipher=0x%08x padapter->securitypriv.ndisencryptstatus=%d padapter->securitypriv.ndisauthtype=%d\n",
120395 pairwise_cipher, padapter->securitypriv.ndisencryptstatus, padapter->securitypriv.ndisauthtype));
120396 @@ -1135,10 +1235,12 @@ static int rtw_wx_set_mode(struct net_de
120397 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
120398 NDIS_802_11_NETWORK_INFRASTRUCTURE networkType ;
120399 int ret = 0;
120400 -
120401 + _irqL irqL;
120402 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
120403 + _queue *queue = &pmlmepriv->scanned_queue;
120404 _func_enter_;
120405
120406 - if(_FAIL == rfpwrstate_check(padapter)) {
120407 + if(_FAIL == rtw_pwr_wakeup(padapter)) {
120408 ret= -EPERM;
120409 goto exit;
120410 }
120411 @@ -1152,20 +1254,20 @@ static int rtw_wx_set_mode(struct net_de
120412 {
120413 case IW_MODE_AUTO:
120414 networkType = Ndis802_11AutoUnknown;
120415 - DBG_8192C("set_mode = IW_MODE_AUTO\n");
120416 + DBG_871X("set_mode = IW_MODE_AUTO\n");
120417 break;
120418 case IW_MODE_ADHOC:
120419 networkType = Ndis802_11IBSS;
120420 - DBG_8192C("set_mode = IW_MODE_ADHOC\n");
120421 + DBG_871X("set_mode = IW_MODE_ADHOC\n");
120422 break;
120423 case IW_MODE_MASTER:
120424 networkType = Ndis802_11APMode;
120425 - DBG_8192C("set_mode = IW_MODE_MASTER\n");
120426 + DBG_871X("set_mode = IW_MODE_MASTER\n");
120427 //rtw_setopmode_cmd(padapter, networkType);
120428 break;
120429 case IW_MODE_INFRA:
120430 networkType = Ndis802_11Infrastructure;
120431 - DBG_8192C("set_mode = IW_MODE_INFRA\n");
120432 + DBG_871X("set_mode = IW_MODE_INFRA\n");
120433 break;
120434
120435 default :
120436 @@ -1184,14 +1286,18 @@ static int rtw_wx_set_mode(struct net_de
120437 rtw_setopmode_cmd(padapter, Ndis802_11AutoUnknown);
120438 }
120439 */
120440 -
120441 + _enter_critical_bh(&pmlmepriv->lock, &irqL);
120442 + _enter_critical_bh(&queue->lock, &irqL);
120443 if (rtw_set_802_11_infrastructure_mode(padapter, networkType) ==_FALSE){
120444
120445 ret = -EPERM;
120446 + _exit_critical_bh(&queue->lock, &irqL);
120447 + _exit_critical_bh(&pmlmepriv->lock, &irqL);
120448 goto exit;
120449
120450 }
120451 -
120452 + _exit_critical_bh(&queue->lock, &irqL);
120453 + _exit_critical_bh(&pmlmepriv->lock, &irqL);
120454 rtw_setopmode_cmd(padapter, networkType);
120455
120456 exit:
120457 @@ -1267,7 +1373,7 @@ static int rtw_wx_set_pmkid(struct net_d
120458 _rtw_memcpy( strIssueBssid, pPMK->bssid.sa_data, ETH_ALEN);
120459 if ( pPMK->cmd == IW_PMKSA_ADD )
120460 {
120461 - DBG_8192C( "[rtw_wx_set_pmkid] IW_PMKSA_ADD!\n" );
120462 + DBG_871X( "[rtw_wx_set_pmkid] IW_PMKSA_ADD!\n" );
120463 if ( _rtw_memcmp( strIssueBssid, strZeroMacAddress, ETH_ALEN ) == _TRUE )
120464 {
120465 return( intReturn );
120466 @@ -1284,7 +1390,7 @@ static int rtw_wx_set_pmkid(struct net_d
120467 if( _rtw_memcmp( psecuritypriv->PMKIDList[j].Bssid, strIssueBssid, ETH_ALEN) ==_TRUE )
120468 { // BSSID is matched, the same AP => rewrite with new PMKID.
120469
120470 - DBG_8192C( "[rtw_wx_set_pmkid] BSSID exists in the PMKList.\n" );
120471 + DBG_871X( "[rtw_wx_set_pmkid] BSSID exists in the PMKList.\n" );
120472
120473 _rtw_memcpy( psecuritypriv->PMKIDList[j].PMKID, pPMK->pmkid, IW_PMKID_LEN);
120474 psecuritypriv->PMKIDList[ j ].bUsed = _TRUE;
120475 @@ -1297,7 +1403,7 @@ static int rtw_wx_set_pmkid(struct net_d
120476 if(!blInserted)
120477 {
120478 // Find a new entry
120479 - DBG_8192C( "[rtw_wx_set_pmkid] Use the new entry index = %d for this PMKID.\n",
120480 + DBG_871X( "[rtw_wx_set_pmkid] Use the new entry index = %d for this PMKID.\n",
120481 psecuritypriv->PMKIDIndex );
120482
120483 _rtw_memcpy(psecuritypriv->PMKIDList[psecuritypriv->PMKIDIndex].Bssid, strIssueBssid, ETH_ALEN);
120484 @@ -1313,7 +1419,7 @@ static int rtw_wx_set_pmkid(struct net_d
120485 }
120486 else if ( pPMK->cmd == IW_PMKSA_REMOVE )
120487 {
120488 - DBG_8192C( "[rtw_wx_set_pmkid] IW_PMKSA_REMOVE!\n" );
120489 + DBG_871X( "[rtw_wx_set_pmkid] IW_PMKSA_REMOVE!\n" );
120490 intReturn = _TRUE;
120491 for(j=0 ; j<NUM_PMKID_CACHE; j++)
120492 {
120493 @@ -1327,7 +1433,7 @@ static int rtw_wx_set_pmkid(struct net_d
120494 }
120495 else if ( pPMK->cmd == IW_PMKSA_FLUSH )
120496 {
120497 - DBG_8192C( "[rtw_wx_set_pmkid] IW_PMKSA_FLUSH!\n" );
120498 + DBG_871X( "[rtw_wx_set_pmkid] IW_PMKSA_FLUSH!\n" );
120499 _rtw_memset( &psecuritypriv->PMKIDList[ 0 ], 0x00, sizeof( RT_PMKID_LIST ) * NUM_PMKID_CACHE );
120500 psecuritypriv->PMKIDIndex = 0;
120501 intReturn = _TRUE;
120502 @@ -1509,10 +1615,39 @@ static int rtw_wx_set_wap(struct net_dev
120503 _queue *queue = &(pmlmepriv->scanned_queue);
120504 struct wlan_network *pnetwork = NULL;
120505 NDIS_802_11_AUTHENTICATION_MODE authmode;
120506 -
120507 - _func_enter_;
120508
120509 - if(_FAIL == rfpwrstate_check(padapter))
120510 + _func_enter_;
120511 +/*
120512 +#ifdef CONFIG_CONCURRENT_MODE
120513 + if(padapter->iface_type > PRIMARY_IFACE)
120514 + {
120515 + ret = -EINVAL;
120516 + goto exit;
120517 + }
120518 +#endif
120519 +*/
120520 +
120521 +#ifdef CONFIG_CONCURRENT_MODE
120522 + if (check_buddy_fwstate(padapter, _FW_UNDER_SURVEY|_FW_UNDER_LINKING) == _TRUE)
120523 + {
120524 + printk("set bssid, but buddy_intf is under scanning or linking\n");
120525 +
120526 + ret = -EINVAL;
120527 +
120528 + goto exit;
120529 + }
120530 +#endif
120531 +
120532 +#ifdef CONFIG_DUALMAC_CONCURRENT
120533 + if (dc_check_fwstate(padapter, _FW_UNDER_SURVEY|_FW_UNDER_LINKING)== _TRUE)
120534 + {
120535 + printk("set bssid, but buddy_intf is under scanning or linking\n");
120536 + ret = -EINVAL;
120537 + goto exit;
120538 + }
120539 +#endif
120540 +
120541 + if(_FAIL == rtw_pwr_wakeup(padapter))
120542 {
120543 ret= -1;
120544 goto exit;
120545 @@ -1530,6 +1665,7 @@ static int rtw_wx_set_wap(struct net_dev
120546 }
120547
120548 authmode = padapter->securitypriv.ndisauthtype;
120549 + _enter_critical_bh(&pmlmepriv->lock, &irqL);
120550 _enter_critical_bh(&queue->lock, &irqL);
120551 phead = get_list_head(queue);
120552 pmlmepriv->pscanned = get_next(phead);
120553 @@ -1572,6 +1708,7 @@ static int rtw_wx_set_wap(struct net_dev
120554 {
120555 ret = -1;
120556 _exit_critical_bh(&queue->lock, &irqL);
120557 + _exit_critical_bh(&pmlmepriv->lock, &irqL);
120558 goto exit;
120559 }
120560
120561 @@ -1580,7 +1717,7 @@ static int rtw_wx_set_wap(struct net_dev
120562
120563 }
120564 _exit_critical_bh(&queue->lock, &irqL);
120565 -
120566 + _exit_critical_bh(&pmlmepriv->lock, &irqL);
120567 rtw_set_802_11_authentication_mode(padapter, authmode);
120568 //set_802_11_encryption_mode(padapter, padapter->securitypriv.ndisencryptstatus);
120569 if (rtw_set_802_11_bssid(padapter, temp->sa_data) == _FALSE) {
120570 @@ -1653,8 +1790,13 @@ struct iw_mlme
120571 if(mlme==NULL)
120572 return -1;
120573
120574 + printk("%s\n", __FUNCTION__);
120575 +
120576 reason = cpu_to_le16(mlme->reason_code);
120577
120578 +
120579 + printk("%s, cmd=%d, reason=%d\n", __FUNCTION__, mlme->cmd, reason);
120580 +
120581 switch (mlme->cmd)
120582 {
120583 case IW_MLME_DEAUTH:
120584 @@ -1676,77 +1818,6 @@ struct iw_mlme
120585
120586 }
120587
120588 -int rfpwrstate_check(_adapter *padapter)
120589 -{
120590 - struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
120591 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
120592 - int ret = _SUCCESS;
120593 -
120594 - //block here for system suspend only
120595 - if((pwrpriv->bInternalAutoSuspend == _FALSE) && (_TRUE == pwrpriv->bInSuspend )){
120596 - ret = _FAIL;
120597 - goto exit;
120598 - }
120599 -
120600 - if( pwrpriv->power_mgnt == PS_MODE_ACTIVE ) {
120601 - goto exit;
120602 - }
120603 -
120604 - if((pwrpriv->bInternalAutoSuspend == _TRUE) && (padapter->net_closed == _TRUE)) {
120605 - ret = _FAIL;
120606 - goto exit;
120607 - }
120608 - if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)
120609 - {
120610 - ret = _SUCCESS;
120611 - goto exit;
120612 - }
120613 -
120614 - if(rf_off == pwrpriv->rf_pwrstate )
120615 - {
120616 -#ifdef CONFIG_USB_HCI
120617 -#ifdef CONFIG_AUTOSUSPEND
120618 - if(pwrpriv->brfoffbyhw==_TRUE)
120619 - {
120620 - DBG_8192C("hw still in rf_off state ...........\n");
120621 - ret = _FAIL;
120622 - goto exit;
120623 - }
120624 - else if(padapter->registrypriv.usbss_enable)
120625 - {
120626 - DBG_8192C("\n %s call autoresume_enter....\n",__FUNCTION__);
120627 - if(_FAIL == autoresume_enter(padapter))
120628 - {
120629 - DBG_8192C("======> autoresume fail.............\n");
120630 - ret = _FAIL;
120631 - goto exit;
120632 - }
120633 - }
120634 - else
120635 -#endif
120636 -#endif
120637 - {
120638 -#ifdef CONFIG_IPS
120639 - DBG_8192C("\n %s call ips_leave....\n",__FUNCTION__);
120640 - if(_FAIL == ips_leave(padapter))
120641 - {
120642 - DBG_8192C("======> ips_leave fail.............\n");
120643 - ret = _FAIL;
120644 - goto exit;
120645 - }
120646 -#endif
120647 - }
120648 - }else {
120649 - //Jeff: reset timer to avoid falling ips or selective suspend soon
120650 - if(pwrpriv->bips_processing == _FALSE)
120651 - rtw_set_pwr_state_check_timer(pwrpriv);
120652 - }
120653 -
120654 -exit:
120655 - return ret;
120656 -
120657 -}
120658 -
120659 static int rtw_wx_set_scan(struct net_device *dev, struct iw_request_info *a,
120660 union iwreq_data *wrqu, char *extra)
120661 {
120662 @@ -1756,7 +1827,6 @@ static int rtw_wx_set_scan(struct net_de
120663 struct mlme_priv *pmlmepriv= &padapter->mlmepriv;
120664 NDIS_802_11_SSID ssid[RTW_SSID_SCAN_AMOUNT];
120665 _irqL irqL;
120666 -
120667 #ifdef CONFIG_P2P
120668 struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
120669 #endif //CONFIG_P2P
120670 @@ -1767,6 +1837,15 @@ _func_enter_;
120671 #ifdef DBG_IOCTL
120672 DBG_871X("DBG_IOCTL %s:%d\n",__FUNCTION__, __LINE__);
120673 #endif
120674 +/*
120675 +#ifdef CONFIG_CONCURRENT_MODE
120676 + if(padapter->iface_type > PRIMARY_IFACE)
120677 + {
120678 + ret = -1;
120679 + goto exit;
120680 + }
120681 +#endif
120682 +*/
120683
120684 #ifdef CONFIG_MP_INCLUDED
120685 if (check_fwstate(pmlmepriv, WIFI_MP_STATE) == _TRUE)
120686 @@ -1776,14 +1855,14 @@ _func_enter_;
120687 }
120688 #endif
120689
120690 - if(_FAIL == rfpwrstate_check(padapter))
120691 + if(_FAIL == rtw_pwr_wakeup(padapter))
120692 {
120693 ret= -1;
120694 goto exit;
120695 }
120696
120697 if(padapter->bDriverStopped){
120698 - DBG_8192C("bDriverStopped=%d\n", padapter->bDriverStopped);
120699 + DBG_871X("bDriverStopped=%d\n", padapter->bDriverStopped);
120700 ret= -1;
120701 goto exit;
120702 }
120703 @@ -1813,6 +1892,30 @@ _func_enter_;
120704 goto exit;
120705 }
120706
120707 +#ifdef CONFIG_CONCURRENT_MODE
120708 + if (check_buddy_fwstate(padapter,
120709 + _FW_UNDER_SURVEY|_FW_UNDER_LINKING|WIFI_UNDER_WPS) == _TRUE)
120710 + {
120711 + if(check_buddy_fwstate(padapter, _FW_UNDER_SURVEY))
120712 + {
120713 + printk("scanning_via_buddy_intf\n");
120714 + pmlmepriv->scanning_via_buddy_intf = _TRUE;
120715 + }
120716 +
120717 + indicate_wx_scan_complete_event(padapter);
120718 +
120719 + goto exit;
120720 + }
120721 +#endif
120722 +
120723 +#ifdef CONFIG_DUALMAC_CONCURRENT
120724 + if (dc_check_fwstate(padapter, _FW_UNDER_SURVEY|_FW_UNDER_LINKING)== _TRUE)
120725 + {
120726 + indicate_wx_scan_complete_event(padapter);
120727 + goto exit;
120728 + }
120729 +#endif
120730 +
120731 // Mareded by Albert 20101103
120732 // For the DMP WiFi Display project, the driver won't to scan because
120733 // the pmlmepriv->scan_interval is always equal to 3.
120734 @@ -1824,15 +1927,16 @@ _func_enter_;
120735
120736 if(pmlmepriv->scan_interval > 0)
120737 {
120738 - DBG_8192C("scan done\n");
120739 + DBG_871X("scan done\n");
120740 ret = 0;
120741 goto exit;
120742 }
120743
120744 */
120745 #ifdef CONFIG_P2P
120746 - if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE) && !rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE))
120747 + if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
120748 {
120749 + rtw_p2p_set_pre_state( pwdinfo, rtw_p2p_state( pwdinfo ) );
120750 rtw_p2p_set_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH);
120751 rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_FULL);
120752 rtw_free_network_queue(padapter, _TRUE);
120753 @@ -1853,18 +1957,18 @@ _func_enter_;
120754 _rtw_memcpy(ssid[0].Ssid, req->essid, len);
120755 ssid[0].SsidLength = len;
120756
120757 - DBG_8192C("IW_SCAN_THIS_ESSID, ssid=%s, len=%d\n", req->essid, req->essid_len);
120758 + DBG_871X("IW_SCAN_THIS_ESSID, ssid=%s, len=%d\n", req->essid, req->essid_len);
120759
120760 _enter_critical_bh(&pmlmepriv->lock, &irqL);
120761
120762 - _status = rtw_sitesurvey_cmd(padapter, ssid, 1);
120763 + _status = rtw_sitesurvey_cmd(padapter, ssid, 1, NULL, 0);
120764
120765 _exit_critical_bh(&pmlmepriv->lock, &irqL);
120766
120767 }
120768 else if (req->scan_type == IW_SCAN_TYPE_PASSIVE)
120769 {
120770 - DBG_8192C("rtw_wx_set_scan, req->scan_type == IW_SCAN_TYPE_PASSIVE\n");
120771 + DBG_871X("rtw_wx_set_scan, req->scan_type == IW_SCAN_TYPE_PASSIVE\n");
120772 }
120773
120774 }
120775 @@ -1942,15 +2046,13 @@ _func_enter_;
120776
120777 }
120778
120779 - //jeff: it has still some scan paramater to parse, we only do this now...
120780 - _enter_critical_bh(&pmlmepriv->lock, &irqL);
120781 - _status = rtw_sitesurvey_cmd(padapter, ssid, RTW_SSID_SCAN_AMOUNT);
120782 - _exit_critical_bh(&pmlmepriv->lock, &irqL);
120783 + //jeff: it has still some scan paramater to parse, we only do this now...
120784 + _status = rtw_set_802_11_bssid_list_scan(padapter, ssid, RTW_SSID_SCAN_AMOUNT);
120785
120786 } else
120787
120788 {
120789 - _status = rtw_set_802_11_bssid_list_scan(padapter);
120790 + _status = rtw_set_802_11_bssid_list_scan(padapter, NULL, 0);
120791 }
120792
120793 if(_status == _FALSE)
120794 @@ -1972,7 +2074,7 @@ static int rtw_wx_get_scan(struct net_de
120795 _irqL irqL;
120796 _list *plist, *phead;
120797 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
120798 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
120799 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
120800 _queue *queue = &(pmlmepriv->scanned_queue);
120801 struct wlan_network *pnetwork = NULL;
120802 char *ev = extra;
120803 @@ -1981,6 +2083,10 @@ static int rtw_wx_get_scan(struct net_de
120804 u32 cnt=0;
120805 u32 wait_for_surveydone;
120806 sint wait_status;
120807 +#ifdef CONFIG_CONCURRENT_MODE
120808 + //PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
120809 + //struct mlme_priv *pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
120810 +#endif
120811 #ifdef CONFIG_P2P
120812 struct wifidirect_info* pwdinfo = &padapter->wdinfo;
120813 #endif //CONFIG_P2P
120814 @@ -1993,6 +2099,15 @@ static int rtw_wx_get_scan(struct net_de
120815 DBG_871X("DBG_IOCTL %s:%d\n",__FUNCTION__, __LINE__);
120816 #endif
120817
120818 +/*
120819 +#ifdef CONFIG_CONCURRENT_MODE
120820 + if(padapter->iface_type > PRIMARY_IFACE)
120821 + {
120822 + ret = -EINVAL;
120823 + goto exit;
120824 + }
120825 +#endif
120826 +*/
120827 if(padapter->pwrctrlpriv.brfoffbyhw && padapter->bDriverStopped)
120828 {
120829 ret = -EINVAL;
120830 @@ -2003,7 +2118,10 @@ static int rtw_wx_get_scan(struct net_de
120831 if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
120832 {
120833 // P2P is enabled
120834 - wait_for_surveydone = 200;
120835 + if ( padapter->chip_type == RTL8192D )
120836 + wait_for_surveydone = 300; // Because the 8192du supports more channels.
120837 + else
120838 + wait_for_surveydone = 200;
120839 }
120840 else
120841 {
120842 @@ -2016,14 +2134,39 @@ static int rtw_wx_get_scan(struct net_de
120843 }
120844 #endif //CONFIG_P2P
120845
120846 +/*
120847 +#ifdef CONFIG_CONCURRENT_MODE
120848 + if(pmlmepriv->scanning_via_buddy_intf == _TRUE)
120849 + {
120850 + pmlmepriv->scanning_via_buddy_intf = _FALSE;//reset
120851 +
120852 + // change pointers to buddy interface
120853 + padapter = pbuddy_adapter;
120854 + pmlmepriv = pbuddy_mlmepriv;
120855 + queue = &(pbuddy_mlmepriv->scanned_queue);
120856 +
120857 + }
120858 +#endif // CONFIG_CONCURRENT_MODE
120859 +*/
120860 +
120861 wait_status = _FW_UNDER_SURVEY
120862 #ifndef CONFIG_ANDROID
120863 |_FW_UNDER_LINKING
120864 #endif
120865 ;
120866
120867 - while(check_fwstate(pmlmepriv, wait_status) == _TRUE)
120868 - {
120869 +#ifdef CONFIG_DUALMAC_CONCURRENT
120870 + while(dc_check_fwstate(padapter, wait_status)== _TRUE)
120871 + {
120872 + rtw_msleep_os(30);
120873 + cnt++;
120874 + if(cnt > wait_for_surveydone )
120875 + break;
120876 + }
120877 +#endif // CONFIG_DUALMAC_CONCURRENT
120878 +
120879 + while(check_fwstate(pmlmepriv, wait_status) == _TRUE)
120880 + {
120881 rtw_msleep_os(30);
120882 cnt++;
120883 if(cnt > wait_for_surveydone )
120884 @@ -2048,10 +2191,9 @@ static int rtw_wx_get_scan(struct net_de
120885 pnetwork = LIST_CONTAINOR(plist, struct wlan_network, list);
120886
120887 //report network only if the current channel set contains the channel to which this network belongs
120888 - if( _TRUE == rtw_is_channel_set_contains_channel(padapter->mlmeextpriv.channel_set, pnetwork->network.Configuration.DSConfig)
120889 - #ifdef CONFIG_VALIDATE_SSID
120890 + if(rtw_ch_set_search_ch(padapter->mlmeextpriv.channel_set, pnetwork->network.Configuration.DSConfig) >= 0
120891 + && rtw_mlme_band_check(padapter, pnetwork->network.Configuration.DSConfig) == _TRUE
120892 && _TRUE == rtw_validate_ssid(&(pnetwork->network.Ssid))
120893 - #endif
120894 )
120895 {
120896 ev=translate_scan(padapter, a, pnetwork, ev, stop);
120897 @@ -2095,7 +2237,6 @@ static int rtw_wx_set_essid(struct net_d
120898 _list *phead;
120899 s8 status = _TRUE;
120900 struct wlan_network *pnetwork = NULL;
120901 -
120902 NDIS_802_11_AUTHENTICATION_MODE authmode;
120903 NDIS_802_11_SSID ndis_ssid;
120904 u8 *dst_ssid, *src_ssid;
120905 @@ -2108,9 +2249,39 @@ static int rtw_wx_set_essid(struct net_d
120906 DBG_871X("DBG_IOCTL %s:%d\n",__FUNCTION__, __LINE__);
120907 #endif
120908
120909 +/*
120910 +#ifdef CONFIG_CONCURRENT_MODE
120911 + if(padapter->iface_type > PRIMARY_IFACE)
120912 + {
120913 + ret = -EINVAL;
120914 + goto exit;
120915 + }
120916 +#endif
120917 +*/
120918 +
120919 +#ifdef CONFIG_CONCURRENT_MODE
120920 + if (check_buddy_fwstate(padapter, _FW_UNDER_SURVEY|_FW_UNDER_LINKING) == _TRUE)
120921 + {
120922 + printk("set ssid, but buddy_intf is under scanning or linking\n");
120923 +
120924 + ret = -EINVAL;
120925 +
120926 + goto exit;
120927 + }
120928 +#endif
120929 +
120930 +#ifdef CONFIG_DUALMAC_CONCURRENT
120931 + if (dc_check_fwstate(padapter, _FW_UNDER_SURVEY|_FW_UNDER_LINKING)== _TRUE)
120932 + {
120933 + printk("set bssid, but buddy_intf is under scanning or linking\n");
120934 + ret = -EINVAL;
120935 + goto exit;
120936 + }
120937 +#endif
120938 +
120939 RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_info_,
120940 ("+rtw_wx_set_essid: fw_state=0x%08x\n", get_fwstate(pmlmepriv)));
120941 - if(_FAIL == rfpwrstate_check(padapter))
120942 + if(_FAIL == rtw_pwr_wakeup(padapter))
120943 {
120944 ret = -1;
120945 goto exit;
120946 @@ -2136,7 +2307,7 @@ static int rtw_wx_set_essid(struct net_d
120947 }
120948
120949 authmode = padapter->securitypriv.ndisauthtype;
120950 - DBG_8192C("=>%s\n",__FUNCTION__);
120951 + DBG_871X("=>%s\n",__FUNCTION__);
120952 if (wrqu->essid.flags && wrqu->essid.length)
120953 {
120954 // Commented by Albert 20100519
120955 @@ -2153,7 +2324,8 @@ static int rtw_wx_set_essid(struct net_d
120956 len = (wrqu->essid.length < IW_ESSID_MAX_SIZE) ? wrqu->essid.length : IW_ESSID_MAX_SIZE;
120957 #endif
120958
120959 - DBG_8192C("ssid=%s, len=%d\n", extra, wrqu->essid.length);
120960 + if( wrqu->essid.length != 33 )
120961 + DBG_871X("ssid=%s, len=%d\n", extra, wrqu->essid.length);
120962
120963 _rtw_memset(&ndis_ssid, 0, sizeof(NDIS_802_11_SSID));
120964 ndis_ssid.SsidLength = len;
120965 @@ -2161,6 +2333,7 @@ static int rtw_wx_set_essid(struct net_d
120966 src_ssid = ndis_ssid.Ssid;
120967
120968 RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_info_, ("rtw_wx_set_essid: ssid=[%s]\n", src_ssid));
120969 + _enter_critical_bh(&pmlmepriv->lock, &irqL);
120970 _enter_critical_bh(&queue->lock, &irqL);
120971 phead = get_list_head(queue);
120972 pmlmepriv->pscanned = get_next(phead);
120973 @@ -2215,6 +2388,7 @@ static int rtw_wx_set_essid(struct net_d
120974 {
120975 ret = -1;
120976 _exit_critical_bh(&queue->lock, &irqL);
120977 + _exit_critical_bh(&pmlmepriv->lock, &irqL);
120978 goto exit;
120979 }
120980
120981 @@ -2222,6 +2396,7 @@ static int rtw_wx_set_essid(struct net_d
120982 }
120983 }
120984 _exit_critical_bh(&queue->lock, &irqL);
120985 + _exit_critical_bh(&pmlmepriv->lock, &irqL);
120986 RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_info_,
120987 ("set ssid: set_802_11_auth. mode=%d\n", authmode));
120988 rtw_set_802_11_authentication_mode(padapter, authmode);
120989 @@ -2234,7 +2409,7 @@ static int rtw_wx_set_essid(struct net_d
120990
120991 exit:
120992
120993 - DBG_8192C("<=%s, ret %d\n",__FUNCTION__, ret);
120994 + DBG_871X("<=%s, ret %d\n",__FUNCTION__, ret);
120995
120996 #ifdef DBG_IOCTL
120997 DBG_871X("DBG_IOCTL %s:%d return %d\n",__FUNCTION__, __LINE__, ret);
120998 @@ -2379,94 +2554,43 @@ static int rtw_wx_get_rate(struct net_de
120999 struct iw_request_info *info,
121000 union iwreq_data *wrqu, char *extra)
121001 {
121002 - int i;
121003 - u8 *p;
121004 - u16 rate = 0, max_rate = 0, ht_cap=_FALSE;
121005 - u32 ht_ielen = 0;
121006 - _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121007 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
121008 - WLAN_BSSID_EX *pcur_bss = &pmlmepriv->cur_network.network;
121009 - struct rtw_ieee80211_ht_cap *pht_capie;
121010 - u8 bw_40MHz=0, short_GI=0;
121011 - u16 mcs_rate=0;
121012 - u8 rf_type = 0;
121013 - struct registry_priv *pregpriv = &padapter->registrypriv;
121014 -
121015 -
121016 - i=0;
121017 -#ifdef CONFIG_MP_INCLUDED
121018 - if (check_fwstate(pmlmepriv, WIFI_MP_STATE) == _TRUE)
121019 - return -1;
121020 -#endif
121021 - if((check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) || (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == _TRUE))
121022 - {
121023 - p = rtw_get_ie(&pcur_bss->IEs[12], _HT_CAPABILITY_IE_, &ht_ielen, pcur_bss->IELength-12);
121024 - if(p && ht_ielen>0)
121025 - {
121026 - ht_cap = _TRUE;
121027 + u16 max_rate = 0;
121028
121029 - pht_capie = (struct rtw_ieee80211_ht_cap *)(p+2);
121030 -
121031 - _rtw_memcpy(&mcs_rate , pht_capie->supp_mcs_set, 2);
121032 + max_rate = rtw_get_cur_max_rate((_adapter *)rtw_netdev_priv(dev));
121033
121034 - bw_40MHz = (pht_capie->cap_info&IEEE80211_HT_CAP_SUP_WIDTH) ? 1:0;
121035 + if(max_rate == 0)
121036 + return -EPERM;
121037 +
121038 + wrqu->bitrate.fixed = 0; /* no auto select */
121039 + wrqu->bitrate.value = max_rate * 100000;
121040
121041 - short_GI = (pht_capie->cap_info&(IEEE80211_HT_CAP_SGI_20|IEEE80211_HT_CAP_SGI_40)) ? 1:0;
121042 - }
121043 + return 0;
121044 +}
121045
121046 - while( (pcur_bss->SupportedRates[i]!=0) && (pcur_bss->SupportedRates[i]!=0xFF))
121047 - {
121048 - rate = pcur_bss->SupportedRates[i]&0x7F;
121049 - if(rate>max_rate)
121050 - max_rate = rate;
121051 +static int rtw_wx_set_rts(struct net_device *dev,
121052 + struct iw_request_info *info,
121053 + union iwreq_data *wrqu, char *extra)
121054 +{
121055 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121056
121057 - wrqu->bitrate.fixed = 0; /* no auto select */
121058 - //wrqu->bitrate.disabled = 1/;
121059 -
121060 - i++;
121061 - }
121062 + _func_enter_;
121063
121064 - if(ht_cap == _TRUE)
121065 - {
121066 -#if 0 //have some issue,neet to debug - 20101008-georgia
121067 - if(mcs_rate&0x8000)//MCS15
121068 - {
121069 - max_rate = (bw_40MHz) ? ((short_GI)?300:270):((short_GI)?144:130);
121070 -
121071 - }
121072 - else if(mcs_rate&0x0080)//MCS7
121073 - {
121074 - max_rate = (bw_40MHz) ? ((short_GI)?150:135):((short_GI)?72:65);
121075 - }
121076 - else//default MCS7
121077 - {
121078 - //DBG_8192C("wx_get_rate, mcs_rate_bitmap=0x%x\n", mcs_rate);
121079 - max_rate = (bw_40MHz) ? ((short_GI)?150:135):((short_GI)?72:65);
121080 - }
121081 -#else
121082 - padapter->HalFunc.GetHwRegHandler(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
121083 - if(rf_type == RF_1T1R)
121084 - max_rate = (bw_40MHz) ? ((short_GI)?150:135):((short_GI)?72:65);
121085 - else
121086 - max_rate = (bw_40MHz) ? ((short_GI)?300:270):((short_GI)?144:130);
121087 -#endif
121088 - max_rate = max_rate*2;//Mbps/2
121089 - wrqu->bitrate.value = max_rate*500000;
121090 -
121091 - }
121092 - else
121093 - {
121094 - wrqu->bitrate.value = max_rate*500000;
121095 - }
121096 -
121097 - }
121098 - else
121099 - {
121100 - return -1;
121101 + if (wrqu->rts.disabled)
121102 + padapter->registrypriv.rts_thresh = 2347;
121103 + else {
121104 + if (wrqu->rts.value < 0 ||
121105 + wrqu->rts.value > 2347)
121106 + return -EINVAL;
121107 +
121108 + padapter->registrypriv.rts_thresh = wrqu->rts.value;
121109 }
121110
121111 - return 0;
121112 + DBG_871X("%s, rts_thresh=%d\n", __func__, padapter->registrypriv.rts_thresh);
121113 +
121114 + _func_exit_;
121115
121116 + return 0;
121117 +
121118 }
121119
121120 static int rtw_wx_get_rts(struct net_device *dev,
121121 @@ -2476,7 +2600,8 @@ static int rtw_wx_get_rts(struct net_dev
121122 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121123
121124 _func_enter_;
121125 - RT_TRACE(_module_rtl871x_mlme_c_,_drv_info_,(" rtw_wx_get_rts \n"));
121126 +
121127 + DBG_871X("%s, rts_thresh=%d\n", __func__, padapter->registrypriv.rts_thresh);
121128
121129 wrqu->rts.value = padapter->registrypriv.rts_thresh;
121130 wrqu->rts.fixed = 0; /* no auto select */
121131 @@ -2504,6 +2629,8 @@ static int rtw_wx_set_frag(struct net_de
121132
121133 padapter->xmitpriv.frag_len = wrqu->frag.value & ~0x1;
121134 }
121135 +
121136 + DBG_871X("%s, frag_len=%d\n", __func__, padapter->xmitpriv.frag_len);
121137
121138 _func_exit_;
121139
121140 @@ -2511,7 +2638,6 @@ static int rtw_wx_set_frag(struct net_de
121141
121142 }
121143
121144 -
121145 static int rtw_wx_get_frag(struct net_device *dev,
121146 struct iw_request_info *info,
121147 union iwreq_data *wrqu, char *extra)
121148 @@ -2519,6 +2645,8 @@ static int rtw_wx_get_frag(struct net_de
121149 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121150
121151 _func_enter_;
121152 +
121153 + DBG_871X("%s, frag_len=%d\n", __func__, padapter->xmitpriv.frag_len);
121154
121155 wrqu->frag.value = padapter->xmitpriv.frag_len;
121156 wrqu->frag.fixed = 0; /* no auto select */
121157 @@ -2579,7 +2707,7 @@ static int rtw_wx_set_enc(struct net_dev
121158 struct iw_point *erq = &(wrqu->encoding);
121159 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121160 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
121161 - DBG_8192C("+rtw_wx_set_enc, flags=0x%x\n", erq->flags);
121162 + DBG_871X("+rtw_wx_set_enc, flags=0x%x\n", erq->flags);
121163
121164 _rtw_memset(&wep, 0, sizeof(NDIS_802_11_WEP));
121165
121166 @@ -2589,7 +2717,7 @@ static int rtw_wx_set_enc(struct net_dev
121167
121168 if (erq->flags & IW_ENCODE_DISABLED)
121169 {
121170 - DBG_8192C("EncryptionDisabled\n");
121171 + DBG_871X("EncryptionDisabled\n");
121172 padapter->securitypriv.ndisencryptstatus = Ndis802_11EncryptionDisabled;
121173 padapter->securitypriv.dot11PrivacyAlgrthm=_NO_PRIVACY_;
121174 padapter->securitypriv.dot118021XGrpPrivacy=_NO_PRIVACY_;
121175 @@ -2610,13 +2738,13 @@ static int rtw_wx_set_enc(struct net_dev
121176 {
121177 keyindex_provided = 0;
121178 key = padapter->securitypriv.dot11PrivacyKeyIndex;
121179 - DBG_8192C("rtw_wx_set_enc, key=%d\n", key);
121180 + DBG_871X("rtw_wx_set_enc, key=%d\n", key);
121181 }
121182
121183 //set authentication mode
121184 if(erq->flags & IW_ENCODE_OPEN)
121185 {
121186 - DBG_8192C("rtw_wx_set_enc():IW_ENCODE_OPEN\n");
121187 + DBG_871X("rtw_wx_set_enc():IW_ENCODE_OPEN\n");
121188 padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;//Ndis802_11EncryptionDisabled;
121189
121190 #ifdef CONFIG_PLATFORM_MT53XX
121191 @@ -2632,7 +2760,7 @@ static int rtw_wx_set_enc(struct net_dev
121192 }
121193 else if(erq->flags & IW_ENCODE_RESTRICTED)
121194 {
121195 - DBG_8192C("rtw_wx_set_enc():IW_ENCODE_RESTRICTED\n");
121196 + DBG_871X("rtw_wx_set_enc():IW_ENCODE_RESTRICTED\n");
121197 padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
121198
121199 #ifdef CONFIG_PLATFORM_MT53XX
121200 @@ -2648,7 +2776,7 @@ static int rtw_wx_set_enc(struct net_dev
121201 }
121202 else
121203 {
121204 - DBG_8192C("rtw_wx_set_enc():erq->flags=0x%x\n", erq->flags);
121205 + DBG_871X("rtw_wx_set_enc():erq->flags=0x%x\n", erq->flags);
121206
121207 padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;//Ndis802_11EncryptionDisabled;
121208 padapter->securitypriv.dot11AuthAlgrthm= dot11AuthAlgrthm_Open; //open system
121209 @@ -2673,7 +2801,7 @@ static int rtw_wx_set_enc(struct net_dev
121210 {
121211 padapter->securitypriv.dot11PrivacyKeyIndex = key;
121212
121213 - DBG_8192C("(keyindex_provided == 1), keyid=%d, key_len=%d\n", key, padapter->securitypriv.dot11DefKeylen[key]);
121214 + DBG_871X("(keyindex_provided == 1), keyid=%d, key_len=%d\n", key, padapter->securitypriv.dot11DefKeylen[key]);
121215
121216 switch(padapter->securitypriv.dot11DefKeylen[key])
121217 {
121218 @@ -2910,7 +3038,8 @@ static int rtw_wx_set_auth(struct net_de
121219 * It's the starting point of a link layer connection using wpa_supplicant
121220 */
121221 if(check_fwstate(&padapter->mlmepriv, _FW_LINKED)) {
121222 - rtw_disassoc_cmd(padapter);
121223 + LeaveAllPowerSaveMode(padapter);
121224 + rtw_disassoc_cmd(padapter, 500, _FALSE);
121225 DBG_871X("%s...call rtw_indicate_disconnect\n ",__FUNCTION__);
121226 rtw_indicate_disconnect(padapter);
121227 rtw_free_assoc_resources(padapter, 1);
121228 @@ -2987,6 +3116,11 @@ static int rtw_wx_set_enc_ext(struct net
121229 case IW_ENCODE_ALG_CCMP:
121230 alg_name = "CCMP";
121231 break;
121232 +#ifdef CONFIG_IEEE80211W
121233 + case IW_ENCODE_ALG_AES_CMAC:
121234 + alg_name = "BIP";
121235 + break;
121236 +#endif //CONFIG_IEEE80211W
121237 default:
121238 return -1;
121239 }
121240 @@ -2994,7 +3128,11 @@ static int rtw_wx_set_enc_ext(struct net
121241 strncpy((char *)param->u.crypt.alg, alg_name, IEEE_CRYPT_ALG_NAME_LEN);
121242
121243
121244 - if(pext->ext_flags & IW_ENCODE_EXT_GROUP_KEY)//?
121245 + if((pext->ext_flags & IW_ENCODE_EXT_GROUP_KEY)//?
121246 +#ifdef CONFIG_IEEE80211W
121247 + || (pext->ext_flags & IW_ENCODE_ALG_AES_CMAC)
121248 +#endif //CONFIG_IEEE80211W
121249 + )
121250 {
121251 param->u.crypt.set_tx = 0;
121252 }
121253 @@ -3065,40 +3203,40 @@ static int rtw_wx_get_nick(struct net_de
121254 u32 ndisencryptstatus;
121255 */
121256
121257 - //DBG_8192C("auth_alg=0x%x, enc_alg=0x%x, auth_type=0x%x, enc_type=0x%x\n",
121258 + //DBG_871X("auth_alg=0x%x, enc_alg=0x%x, auth_type=0x%x, enc_type=0x%x\n",
121259 // psecuritypriv->dot11AuthAlgrthm, psecuritypriv->dot11PrivacyAlgrthm,
121260 // psecuritypriv->ndisauthtype, psecuritypriv->ndisencryptstatus);
121261
121262 - //DBG_8192C("enc_alg=0x%x\n", psecuritypriv->dot11PrivacyAlgrthm);
121263 - //DBG_8192C("auth_type=0x%x\n", psecuritypriv->ndisauthtype);
121264 - //DBG_8192C("enc_type=0x%x\n", psecuritypriv->ndisencryptstatus);
121265 + //DBG_871X("enc_alg=0x%x\n", psecuritypriv->dot11PrivacyAlgrthm);
121266 + //DBG_871X("auth_type=0x%x\n", psecuritypriv->ndisauthtype);
121267 + //DBG_871X("enc_type=0x%x\n", psecuritypriv->ndisencryptstatus);
121268
121269 #if 0
121270 - DBG_8192C("dbg(0x210)=0x%x\n", rtw_read32(padapter, 0x210));
121271 - DBG_8192C("dbg(0x608)=0x%x\n", rtw_read32(padapter, 0x608));
121272 - DBG_8192C("dbg(0x280)=0x%x\n", rtw_read32(padapter, 0x280));
121273 - DBG_8192C("dbg(0x284)=0x%x\n", rtw_read32(padapter, 0x284));
121274 - DBG_8192C("dbg(0x288)=0x%x\n", rtw_read32(padapter, 0x288));
121275 + DBG_871X("dbg(0x210)=0x%x\n", rtw_read32(padapter, 0x210));
121276 + DBG_871X("dbg(0x608)=0x%x\n", rtw_read32(padapter, 0x608));
121277 + DBG_871X("dbg(0x280)=0x%x\n", rtw_read32(padapter, 0x280));
121278 + DBG_871X("dbg(0x284)=0x%x\n", rtw_read32(padapter, 0x284));
121279 + DBG_871X("dbg(0x288)=0x%x\n", rtw_read32(padapter, 0x288));
121280
121281 - DBG_8192C("dbg(0x664)=0x%x\n", rtw_read32(padapter, 0x664));
121282 + DBG_871X("dbg(0x664)=0x%x\n", rtw_read32(padapter, 0x664));
121283
121284
121285 - DBG_8192C("\n");
121286 + DBG_871X("\n");
121287
121288 - DBG_8192C("dbg(0x430)=0x%x\n", rtw_read32(padapter, 0x430));
121289 - DBG_8192C("dbg(0x438)=0x%x\n", rtw_read32(padapter, 0x438));
121290 + DBG_871X("dbg(0x430)=0x%x\n", rtw_read32(padapter, 0x430));
121291 + DBG_871X("dbg(0x438)=0x%x\n", rtw_read32(padapter, 0x438));
121292
121293 - DBG_8192C("dbg(0x440)=0x%x\n", rtw_read32(padapter, 0x440));
121294 + DBG_871X("dbg(0x440)=0x%x\n", rtw_read32(padapter, 0x440));
121295
121296 - DBG_8192C("dbg(0x458)=0x%x\n", rtw_read32(padapter, 0x458));
121297 + DBG_871X("dbg(0x458)=0x%x\n", rtw_read32(padapter, 0x458));
121298
121299 - DBG_8192C("dbg(0x484)=0x%x\n", rtw_read32(padapter, 0x484));
121300 - DBG_8192C("dbg(0x488)=0x%x\n", rtw_read32(padapter, 0x488));
121301 + DBG_871X("dbg(0x484)=0x%x\n", rtw_read32(padapter, 0x484));
121302 + DBG_871X("dbg(0x488)=0x%x\n", rtw_read32(padapter, 0x488));
121303
121304 - DBG_8192C("dbg(0x444)=0x%x\n", rtw_read32(padapter, 0x444));
121305 - DBG_8192C("dbg(0x448)=0x%x\n", rtw_read32(padapter, 0x448));
121306 - DBG_8192C("dbg(0x44c)=0x%x\n", rtw_read32(padapter, 0x44c));
121307 - DBG_8192C("dbg(0x450)=0x%x\n", rtw_read32(padapter, 0x450));
121308 + DBG_871X("dbg(0x444)=0x%x\n", rtw_read32(padapter, 0x444));
121309 + DBG_871X("dbg(0x448)=0x%x\n", rtw_read32(padapter, 0x448));
121310 + DBG_871X("dbg(0x44c)=0x%x\n", rtw_read32(padapter, 0x44c));
121311 + DBG_871X("dbg(0x450)=0x%x\n", rtw_read32(padapter, 0x450));
121312 #endif
121313
121314 return 0;
121315 @@ -3109,15 +3247,51 @@ static int rtw_wx_read32(struct net_devi
121316 struct iw_request_info *info,
121317 union iwreq_data *wrqu, char *extra)
121318 {
121319 - _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121320 -
121321 + PADAPTER padapter;
121322 + struct iw_point *p;
121323 + u16 len;
121324 u32 addr;
121325 u32 data32;
121326 + u32 bytes;
121327 + u8 *ptmp;
121328 +
121329 +
121330 + padapter = (PADAPTER)rtw_netdev_priv(dev);
121331 + p = &wrqu->data;
121332 + len = p->length;
121333 + ptmp = (u8*)rtw_malloc(len);
121334 + if (NULL == ptmp)
121335 + return -ENOMEM;
121336 +
121337 + if (copy_from_user(ptmp, p->pointer, len)) {
121338 + rtw_mfree(ptmp, len);
121339 + return -EFAULT;
121340 + }
121341 +
121342 + bytes = 0;
121343 + addr = 0;
121344 + sscanf(ptmp, "%d,%x", &bytes, &addr);
121345
121346 + switch (bytes) {
121347 + case 1:
121348 + data32 = rtw_read8(padapter, addr);
121349 + sprintf(extra, "0x%02X", data32);
121350 + break;
121351 + case 2:
121352 + data32 = rtw_read16(padapter, addr);
121353 + sprintf(extra, "0x%04X", data32);
121354 + break;
121355 + case 4:
121356 + data32 = rtw_read32(padapter, addr);
121357 + sprintf(extra, "0x%08X", data32);
121358 + break;
121359 + default:
121360 + printk(KERN_INFO "%s: usage> read [bytes],[address(hex)]\n", __func__);
121361 + return -EINVAL;
121362 + }
121363 + printk(KERN_INFO "%s: addr=0x%08X data=%s\n", __func__, addr, extra);
121364
121365 - addr = *(u32*)extra;
121366 - data32 = rtw_read32(padapter, addr);
121367 - sprintf(extra, "0x%08x", data32);
121368 + rtw_mfree(ptmp, len);
121369
121370 return 0;
121371 }
121372 @@ -3126,15 +3300,35 @@ static int rtw_wx_write32(struct net_dev
121373 struct iw_request_info *info,
121374 union iwreq_data *wrqu, char *extra)
121375 {
121376 - _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121377 + PADAPTER padapter = (PADAPTER)rtw_netdev_priv(dev);
121378
121379 u32 addr;
121380 u32 data32;
121381 + u32 bytes;
121382 +
121383
121384 + bytes = 0;
121385 + addr = 0;
121386 + data32 = 0;
121387 + sscanf(extra, "%d,%x,%x", &bytes, &addr, &data32);
121388
121389 - addr = *(u32*)extra;
121390 - data32 = *((u32*)extra + 1);
121391 - rtw_write32(padapter, addr, data32);
121392 + switch (bytes) {
121393 + case 1:
121394 + rtw_write8(padapter, addr, (u8)data32);
121395 + printk(KERN_INFO "%s: addr=0x%08X data=0x%02X\n", __func__, addr, (u8)data32);
121396 + break;
121397 + case 2:
121398 + rtw_write16(padapter, addr, (u16)data32);
121399 + printk(KERN_INFO "%s: addr=0x%08X data=0x%04X\n", __func__, addr, (u16)data32);
121400 + break;
121401 + case 4:
121402 + rtw_write32(padapter, addr, data32);
121403 + printk(KERN_INFO "%s: addr=0x%08X data=0x%08X\n", __func__, addr, data32);
121404 + break;
121405 + default:
121406 + printk(KERN_INFO "%s: usage> write [bytes],[address(hex)],[data(hex)]\n", __func__);
121407 + return -EINVAL;
121408 + }
121409
121410 return 0;
121411 }
121412 @@ -3149,8 +3343,8 @@ static int rtw_wx_read_rf(struct net_dev
121413
121414 path = *(u32*)extra;
121415 addr = *((u32*)extra + 1);
121416 - data32 = padapter->HalFunc.read_rfreg(padapter, path, addr, 0xFFFFF);
121417 -// DBG_8192C("%s: path=%d addr=0x%02x data=0x%05x\n", __func__, path, addr, data32);
121418 + data32 = rtw_hal_read_rfreg(padapter, path, addr, 0xFFFFF);
121419 +// DBG_871X("%s: path=%d addr=0x%02x data=0x%05x\n", __func__, path, addr, data32);
121420 /*
121421 * IMPORTANT!!
121422 * Only when wireless private ioctl is at odd order,
121423 @@ -3172,8 +3366,8 @@ static int rtw_wx_write_rf(struct net_de
121424 path = *(u32*)extra;
121425 addr = *((u32*)extra + 1);
121426 data32 = *((u32*)extra + 2);
121427 -// DBG_8192C("%s: path=%d addr=0x%02x data=0x%05x\n", __func__, path, addr, data32);
121428 - padapter->HalFunc.write_rfreg(padapter, path, addr, 0xFFFFF, data32);
121429 +// DBG_871X("%s: path=%d addr=0x%02x data=0x%05x\n", __func__, path, addr, data32);
121430 + rtw_hal_write_rfreg(padapter, path, addr, 0xFFFFF, data32);
121431
121432 return 0;
121433 }
121434 @@ -3190,7 +3384,7 @@ static int dummy(struct net_device *dev,
121435 //_adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121436 //struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
121437
121438 - //DBG_8192C("cmd_code=%x, fwstate=0x%x\n", a->cmd, get_fwstate(pmlmepriv));
121439 + //DBG_871X("cmd_code=%x, fwstate=0x%x\n", a->cmd, get_fwstate(pmlmepriv));
121440
121441 return -1;
121442
121443 @@ -3213,7 +3407,7 @@ static int rtw_wx_set_channel_plan(struc
121444 #endif
121445
121446 if( _SUCCESS == rtw_set_chplan_cmd(padapter, channel_plan_req, 1) ) {
121447 - DBG_871X("\n======== Set channel_plan = 0x%02X ========\n", pmlmepriv->ChannelPlan);
121448 + DBG_871X("%s set channel_plan = 0x%02X\n", __func__, pmlmepriv->ChannelPlan);
121449 } else
121450 return -EPERM;
121451
121452 @@ -3245,7 +3439,7 @@ static int rtw_wx_get_sensitivity(struct
121453 // Modified by Albert 20110914
121454 // This is in dbm format for MTK platform.
121455 wrqu->qual.level = padapter->recvpriv.rssi;
121456 - DBG_8192C(" level = %u\n", wrqu->qual.level );
121457 + DBG_871X(" level = %u\n", wrqu->qual.level );
121458 #endif
121459 return 0;
121460 }
121461 @@ -3391,12 +3585,12 @@ static void rtw_dbg_mode_hdl(_adapter *p
121462 u8 offset;
121463 u32 value;
121464
121465 - DBG_8192C("%s\n", __FUNCTION__);
121466 + DBG_871X("%s\n", __FUNCTION__);
121467
121468 switch(id)
121469 {
121470 case GEN_MP_IOCTL_SUBCODE(MP_START):
121471 - DBG_8192C("871x_driver is only for normal mode, can't enter mp mode\n");
121472 + DBG_871X("871x_driver is only for normal mode, can't enter mp mode\n");
121473 break;
121474 case GEN_MP_IOCTL_SUBCODE(READ_REG):
121475 RegRWStruct = (pRW_Reg)pdata;
121476 @@ -3441,7 +3635,7 @@ static void rtw_dbg_mode_hdl(_adapter *p
121477 path = (u8)prfreg->path;
121478 offset = (u8)prfreg->offset;
121479
121480 - value = padapter->HalFunc.read_rfreg(padapter, path, offset, 0xffffffff);
121481 + value = rtw_hal_read_rfreg(padapter, path, offset, 0xffffffff);
121482
121483 prfreg->value = value;
121484
121485 @@ -3454,27 +3648,26 @@ static void rtw_dbg_mode_hdl(_adapter *p
121486 offset = (u8)prfreg->offset;
121487 value = prfreg->value;
121488
121489 - padapter->HalFunc.write_rfreg(padapter, path, offset, 0xffffffff, value);
121490 + rtw_hal_write_rfreg(padapter, path, offset, 0xffffffff, value);
121491
121492 break;
121493 case GEN_MP_IOCTL_SUBCODE(TRIGGER_GPIO):
121494 - DBG_8192C("==> trigger gpio 0\n");
121495 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_TRIGGER_GPIO_0, 0);
121496 + DBG_871X("==> trigger gpio 0\n");
121497 + rtw_hal_set_hwreg(padapter, HW_VAR_TRIGGER_GPIO_0, 0);
121498 break;
121499 #ifdef CONFIG_BT_COEXIST
121500 case GEN_MP_IOCTL_SUBCODE(SET_DM_BT):
121501 - DBG_8192C("==> set dm_bt_coexist:%x\n",*(u8 *)pdata);
121502 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_BT_SET_COEXIST, pdata);
121503 + DBG_871X("==> set dm_bt_coexist:%x\n",*(u8 *)pdata);
121504 + rtw_hal_set_hwreg(padapter, HW_VAR_BT_SET_COEXIST, pdata);
121505 break;
121506 case GEN_MP_IOCTL_SUBCODE(DEL_BA):
121507 - DBG_8192C("==> delete ba:%x\n",*(u8 *)pdata);
121508 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_BT_ISSUE_DELBA, pdata);
121509 + DBG_871X("==> delete ba:%x\n",*(u8 *)pdata);
121510 + rtw_hal_set_hwreg(padapter, HW_VAR_BT_ISSUE_DELBA, pdata);
121511 break;
121512 #endif
121513 #ifdef DBG_CONFIG_ERROR_DETECT
121514 case GEN_MP_IOCTL_SUBCODE(GET_WIFI_STATUS):
121515 - if(padapter->HalFunc.sreset_get_wifi_status)
121516 - *pdata = padapter->HalFunc.sreset_get_wifi_status(padapter);
121517 + *pdata = rtw_hal_sreset_get_wifi_status(padapter);
121518 break;
121519 #endif
121520
121521 @@ -3495,10 +3688,10 @@ static int rtw_mp_ioctl_hdl(struct net_d
121522 uint status=0;
121523 u16 len;
121524 u8 *pparmbuf = NULL, bset;
121525 - _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121526 + PADAPTER padapter = (PADAPTER)rtw_netdev_priv(dev);
121527 struct iw_point *p = &wrqu->data;
121528
121529 - //DBG_8192C("+rtw_mp_ioctl_hdl\n");
121530 + //DBG_871X("+rtw_mp_ioctl_hdl\n");
121531
121532 //mutex_lock(&ioctl_mutex);
121533
121534 @@ -3532,7 +3725,7 @@ static int rtw_mp_ioctl_hdl(struct net_d
121535 goto _rtw_mp_ioctl_hdl_exit;
121536 }
121537
121538 - //DBG_8192C("%s: %d\n", __func__, poidparam->subcode);
121539 + //DBG_871X("%s: %d\n", __func__, poidparam->subcode);
121540
121541 #ifdef CONFIG_MP_INCLUDED
121542 phandler = mp_ioctl_hdl + poidparam->subcode;
121543 @@ -3572,7 +3765,7 @@ static int rtw_mp_ioctl_hdl(struct net_d
121544 //todo:check status, BytesNeeded, etc.
121545 }
121546 else {
121547 - DBG_8192C("rtw_mp_ioctl_hdl(): err!, subcode=%d, oid=%d, handler=%p\n",
121548 + DBG_871X("rtw_mp_ioctl_hdl(): err!, subcode=%d, oid=%d, handler=%p\n",
121549 poidparam->subcode, phandler->oid, phandler->handler);
121550 ret = -EFAULT;
121551 goto _rtw_mp_ioctl_hdl_exit;
121552 @@ -3620,7 +3813,7 @@ static int rtw_get_ap_info(struct net_de
121553 _queue *queue = &(pmlmepriv->scanned_queue);
121554 struct iw_point *pdata = &wrqu->data;
121555
121556 - DBG_8192C("+rtw_get_aplist_info\n");
121557 + DBG_871X("+rtw_get_aplist_info\n");
121558
121559 if((padapter->bDriverStopped) || (pdata==NULL))
121560 {
121561 @@ -3669,7 +3862,7 @@ static int rtw_get_ap_info(struct net_de
121562 //if(hwaddr_aton_i(pdata->pointer, bssid))
121563 if(hwaddr_aton_i(data, bssid))
121564 {
121565 - DBG_8192C("Invalid BSSID '%s'.\n", (u8*)data);
121566 + DBG_871X("Invalid BSSID '%s'.\n", (u8*)data);
121567 _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
121568 return -EINVAL;
121569 }
121570 @@ -3677,7 +3870,7 @@ static int rtw_get_ap_info(struct net_de
121571
121572 if(_rtw_memcmp(bssid, pnetwork->network.MacAddress, ETH_ALEN) == _TRUE)//BSSID match, then check if supporting wpa/wpa2
121573 {
121574 - DBG_8192C("BSSID:" MAC_FMT "\n", MAC_ARG(bssid));
121575 + DBG_871X("BSSID:" MAC_FMT "\n", MAC_ARG(bssid));
121576
121577 pbuf = rtw_get_wpa_ie(&pnetwork->network.IEs[12], &wpa_ielen, pnetwork->network.IELength-12);
121578 if(pbuf && (wpa_ielen>0))
121579 @@ -3768,17 +3961,17 @@ static int rtw_wps_start(struct net_devi
121580 goto exit;
121581 }
121582
121583 - if ( u32wps_start == 0 )
121584 - {
121585 - u32wps_start = *extra;
121586 - }
121587 + if ( u32wps_start == 0 )
121588 + {
121589 + u32wps_start = *extra;
121590 + }
121591
121592 - DBG_8192C( "[%s] wps_start = %d\n", __FUNCTION__, u32wps_start );
121593 + DBG_871X( "[%s] wps_start = %d\n", __FUNCTION__, u32wps_start );
121594
121595 - if ( u32wps_start == 1 ) // WPS Start
121596 - {
121597 + if ( u32wps_start == 1 ) // WPS Start
121598 + {
121599 rtw_led_control(padapter, LED_CTL_START_WPS);
121600 - }
121601 + }
121602 else if ( u32wps_start == 2 ) // WPS Stop because of wps success
121603 {
121604 rtw_led_control(padapter, LED_CTL_STOP_WPS);
121605 @@ -3787,6 +3980,11 @@ static int rtw_wps_start(struct net_devi
121606 {
121607 rtw_led_control(padapter, LED_CTL_STOP_WPS_FAIL);
121608 }
121609 +
121610 +#ifdef CONFIG_INTEL_WIDI
121611 + process_intel_widi_wps_status(padapter, u32wps_start);
121612 +#endif //CONFIG_INTEL_WIDI
121613 +
121614 exit:
121615
121616 return ret;
121617 @@ -3794,7 +3992,6 @@ exit:
121618 }
121619
121620 #ifdef CONFIG_P2P
121621 -
121622 static int rtw_wext_p2p_enable(struct net_device *dev,
121623 struct iw_request_info *info,
121624 union iwreq_data *wrqu, char *extra)
121625 @@ -3834,9 +4031,34 @@ static int rtw_wext_p2p_enable(struct ne
121626 {
121627 // Stay at the listen state and wait for discovery.
121628 channel = pwdinfo->listen_channel;
121629 + pwdinfo->operating_channel = pwdinfo->listen_channel;
121630 ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
121631 - bwmode = HT_CHANNEL_WIDTH_20;
121632 + bwmode = HT_CHANNEL_WIDTH_20;
121633 + }
121634 +#ifdef CONFIG_CONCURRENT_MODE
121635 + else if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE))
121636 + {
121637 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
121638 + //struct wifidirect_info *pbuddy_wdinfo = &pbuddy_adapter->wdinfo;
121639 + struct mlme_priv *pbuddy_mlmepriv = &pbuddy_adapter->mlmepriv;
121640 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
121641 +
121642 + _set_timer( &pwdinfo->ap_p2p_switch_timer, pwdinfo->ext_listen_interval );
121643 + if ( check_fwstate( pbuddy_mlmepriv, _FW_LINKED ) )
121644 + {
121645 + pwdinfo->operating_channel = pbuddy_mlmeext->cur_channel;
121646 + // How about the ch_offset and bwmode ??
121647 + }
121648 + else
121649 + {
121650 + pwdinfo->operating_channel = pwdinfo->listen_channel;
121651 + }
121652 +
121653 + channel = pbuddy_mlmeext->cur_channel;
121654 + ch_offset = pbuddy_mlmeext->cur_ch_offset;
121655 + bwmode = pbuddy_mlmeext->cur_bwmode;
121656 }
121657 +#endif
121658 else
121659 {
121660 pwdinfo->operating_channel = pmlmeext->cur_channel;
121661 @@ -3865,7 +4087,7 @@ static int rtw_p2p_set_go_nego_ssid(stru
121662 struct iw_point *pdata = &wrqu->data;
121663 struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
121664
121665 - DBG_8192C( "[%s] ssid = %s, len = %d\n", __FUNCTION__, extra, strlen( extra ) );
121666 + DBG_871X( "[%s] ssid = %s, len = %d\n", __FUNCTION__, extra, (u32)strlen( extra ) );
121667 _rtw_memcpy( pwdinfo->nego_ssid, extra, strlen( extra ) );
121668 pwdinfo->nego_ssidlen = strlen( extra );
121669
121670 @@ -3878,28 +4100,15 @@ static int rtw_p2p_set_intent(struct net
121671 struct iw_request_info *info,
121672 union iwreq_data *wrqu, char *extra)
121673 {
121674 -
121675 - int ret = 0;
121676 - _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121677 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
121678 - struct iw_point *pdata = &wrqu->data;
121679 - struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
121680 - u8 intent = pwdinfo->intent;
121681 + int ret = 0;
121682 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121683 + struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
121684 + u8 intent = pwdinfo->intent;
121685
121686 - switch( wrqu->data.length )
121687 - {
121688 - case 1:
121689 - {
121690 - intent = extra[ 0 ] - '0';
121691 - break;
121692 - }
121693 - case 2:
121694 - {
121695 - intent = str_2char2num( extra[ 0 ], extra[ 1 ]);
121696 - break;
121697 - }
121698 - }
121699 + extra[ wrqu->data.length ] = 0x00;
121700
121701 + intent = rtw_atoi( extra );
121702 +
121703 if ( intent <= 15 )
121704 {
121705 pwdinfo->intent= intent;
121706 @@ -3909,10 +4118,10 @@ static int rtw_p2p_set_intent(struct net
121707 ret = -1;
121708 }
121709
121710 - DBG_8192C( "[%s] intent = %d\n", __FUNCTION__, intent);
121711 -
121712 + DBG_871X( "[%s] intent = %d\n", __FUNCTION__, intent);
121713 +
121714 return ret;
121715 -
121716 +
121717 }
121718
121719 static int rtw_p2p_set_listen_ch(struct net_device *dev,
121720 @@ -3922,26 +4131,13 @@ static int rtw_p2p_set_listen_ch(struct
121721
121722 int ret = 0;
121723 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121724 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
121725 - struct iw_point *pdata = &wrqu->data;
121726 struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
121727 u8 listen_ch = pwdinfo->listen_channel; // Listen channel number
121728
121729 - switch( wrqu->data.length )
121730 - {
121731 - case 1:
121732 - {
121733 - listen_ch = extra[ 0 ] - '0';
121734 - break;
121735 - }
121736 - case 2:
121737 - {
121738 - listen_ch = str_2char2num( extra[ 0 ], extra[ 1 ]);
121739 - break;
121740 - }
121741 - }
121742 + extra[ wrqu->data.length ] = 0x00;
121743 + listen_ch = rtw_atoi( extra );
121744
121745 - if ( listen_ch > 0 && listen_ch <= 13 )
121746 + if ( ( listen_ch == 1 ) || ( listen_ch == 6 ) || ( listen_ch == 11 ) )
121747 {
121748 pwdinfo->listen_channel = listen_ch;
121749 set_channel_bwmode(padapter, pwdinfo->listen_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
121750 @@ -3951,7 +4147,7 @@ static int rtw_p2p_set_listen_ch(struct
121751 ret = -1;
121752 }
121753
121754 - DBG_8192C( "[%s] listen_ch = %d\n", __FUNCTION__, pwdinfo->listen_channel );
121755 + DBG_871X( "[%s] listen_ch = %d\n", __FUNCTION__, pwdinfo->listen_channel );
121756
121757 return ret;
121758
121759 @@ -3966,30 +4162,13 @@ static int rtw_p2p_set_op_ch(struct net_
121760
121761 int ret = 0;
121762 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121763 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
121764 - struct iw_point *pdata = &wrqu->data;
121765 struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
121766 u8 op_ch = pwdinfo->operating_channel; // Operating channel number
121767
121768 - switch( wrqu->data.length )
121769 - {
121770 - case 1:
121771 - {
121772 - op_ch = extra[ 0 ] - '0';
121773 - break;
121774 - }
121775 - case 2:
121776 - {
121777 - op_ch = str_2char2num( extra[ 0 ], extra[ 1 ]);
121778 - break;
121779 - }
121780 - }
121781 + extra[ wrqu->data.length ] = 0x00;
121782
121783 - if ( op_ch > 0 && op_ch <= 13 )
121784 - {
121785 - pwdinfo->operating_channel = op_ch;
121786 - }
121787 - else if(IsLegal5GChannel(padapter, op_ch))
121788 + op_ch = ( u8 ) rtw_atoi( extra );
121789 + if ( op_ch > 0 )
121790 {
121791 pwdinfo->operating_channel = op_ch;
121792 }
121793 @@ -3998,10 +4177,10 @@ static int rtw_p2p_set_op_ch(struct net_
121794 ret = -1;
121795 }
121796
121797 - DBG_8192C( "[%s] op_ch = %d\n", __FUNCTION__, pwdinfo->operating_channel );
121798 + DBG_871X( "[%s] op_ch = %d\n", __FUNCTION__, pwdinfo->operating_channel );
121799
121800 return ret;
121801 -
121802 +
121803 }
121804
121805
121806 @@ -4012,8 +4191,6 @@ static int rtw_p2p_profilefound(struct n
121807
121808 int ret = 0;
121809 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121810 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
121811 - struct iw_point *pdata = &wrqu->data;
121812 struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
121813
121814 // Comment by Albert 2010/10/13
121815 @@ -4026,7 +4203,7 @@ static int rtw_p2p_profilefound(struct n
121816 // YY => SSID Length
121817 // SSID => SSID for persistence group
121818
121819 - DBG_8192C( "[%s] In value = %s, len = %d \n", __FUNCTION__, extra, wrqu->data.length -1);
121820 + DBG_871X( "[%s] In value = %s, len = %d \n", __FUNCTION__, extra, wrqu->data.length -1);
121821
121822
121823 // The upper application should pass the SSID to driver by using this rtw_p2p_profilefound function.
121824 @@ -4055,8 +4232,8 @@ static int rtw_p2p_profilefound(struct n
121825 pwdinfo->profileinfo[ pwdinfo->profileindex ].peermac[ jj ] = key_2char2num(extra[ kk ], extra[ kk+ 1 ]);
121826 }
121827
121828 - pwdinfo->profileinfo[ pwdinfo->profileindex ].ssidlen = ( extra[18] - '0' ) * 10 + ( extra[ 19 ] - '0' );
121829 - _rtw_memcpy( pwdinfo->profileinfo[ pwdinfo->profileindex ].ssid, &extra[ 20 ], pwdinfo->profileinfo[ pwdinfo->profileindex ].ssidlen );
121830 + //pwdinfo->profileinfo[ pwdinfo->profileindex ].ssidlen = ( extra[18] - '0' ) * 10 + ( extra[ 19 ] - '0' );
121831 + //_rtw_memcpy( pwdinfo->profileinfo[ pwdinfo->profileindex ].ssid, &extra[ 20 ], pwdinfo->profileinfo[ pwdinfo->profileindex ].ssidlen );
121832 pwdinfo->profileindex++;
121833 }
121834 }
121835 @@ -4073,16 +4250,14 @@ static int rtw_p2p_setDN(struct net_devi
121836
121837 int ret = 0;
121838 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121839 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
121840 - struct iw_point *pdata = &wrqu->data;
121841 struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
121842
121843
121844 - DBG_8192C( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
121845 - pwdinfo->device_name_len = wrqu->data.length - 1;
121846 + DBG_871X( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
121847 +
121848 _rtw_memset( pwdinfo->device_name, 0x00, WPS_MAX_DEVICE_NAME_LEN );
121849 - _rtw_memcpy( pwdinfo->device_name, extra, pwdinfo->device_name_len );
121850 -
121851 + _rtw_memcpy( pwdinfo->device_name, extra, wrqu->data.length - 1 );
121852 + pwdinfo->device_name_len = wrqu->data.length - 1;
121853 return ret;
121854
121855 }
121856 @@ -4098,23 +4273,20 @@ static int rtw_p2p_get_status(struct net
121857 struct iw_point *pdata = &wrqu->data;
121858 struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
121859
121860 -
121861 - DBG_8192C( "[%s] Role = %d, Status = %d, peer addr = %.2X:%.2X:%.2X:%.2X:%.2X:%.2X\n", __FUNCTION__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo),
121862 - pwdinfo->p2p_peer_interface_addr[ 0 ], pwdinfo->p2p_peer_interface_addr[ 1 ], pwdinfo->p2p_peer_interface_addr[ 2 ],
121863 - pwdinfo->p2p_peer_interface_addr[ 3 ], pwdinfo->p2p_peer_interface_addr[ 4 ], pwdinfo->p2p_peer_interface_addr[ 5 ]);
121864
121865 + if ( padapter->bShowGetP2PState )
121866 + {
121867 + DBG_871X( "[%s] Role = %d, Status = %d, peer addr = %.2X:%.2X:%.2X:%.2X:%.2X:%.2X\n", __FUNCTION__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo),
121868 + pwdinfo->p2p_peer_interface_addr[ 0 ], pwdinfo->p2p_peer_interface_addr[ 1 ], pwdinfo->p2p_peer_interface_addr[ 2 ],
121869 + pwdinfo->p2p_peer_interface_addr[ 3 ], pwdinfo->p2p_peer_interface_addr[ 4 ], pwdinfo->p2p_peer_interface_addr[ 5 ]);
121870 + }
121871 +
121872 // Commented by Albert 2010/10/12
121873 // Because of the output size limitation, I had removed the "Role" information.
121874 // About the "Role" information, we will use the new private IOCTL to get the "Role" information.
121875 sprintf( extra, "\n\nStatus=%.2d\n", rtw_p2p_state(pwdinfo) );
121876 wrqu->data.length = strlen( extra );
121877
121878 - if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_LISTEN))
121879 - {
121880 - // Stay at the listen state and wait for discovery.
121881 - set_channel_bwmode(padapter, pwdinfo->listen_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
121882 - }
121883 -
121884 return ret;
121885
121886 }
121887 @@ -4152,7 +4324,7 @@ static int rtw_p2p_get_role(struct net_d
121888 struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
121889
121890
121891 - DBG_8192C( "[%s] Role = %d, Status = %d, peer addr = %.2X:%.2X:%.2X:%.2X:%.2X:%.2X\n", __FUNCTION__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo),
121892 + DBG_871X( "[%s] Role = %d, Status = %d, peer addr = %.2X:%.2X:%.2X:%.2X:%.2X:%.2X\n", __FUNCTION__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo),
121893 pwdinfo->p2p_peer_interface_addr[ 0 ], pwdinfo->p2p_peer_interface_addr[ 1 ], pwdinfo->p2p_peer_interface_addr[ 2 ],
121894 pwdinfo->p2p_peer_interface_addr[ 3 ], pwdinfo->p2p_peer_interface_addr[ 4 ], pwdinfo->p2p_peer_interface_addr[ 5 ]);
121895
121896 @@ -4174,7 +4346,7 @@ static int rtw_p2p_get_peer_ifaddr(struc
121897 struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
121898
121899
121900 - DBG_8192C( "[%s] Role = %d, Status = %d, peer addr = %.2X:%.2X:%.2X:%.2X:%.2X:%.2X\n", __FUNCTION__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo),
121901 + DBG_871X( "[%s] Role = %d, Status = %d, peer addr = %.2X:%.2X:%.2X:%.2X:%.2X:%.2X\n", __FUNCTION__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo),
121902 pwdinfo->p2p_peer_interface_addr[ 0 ], pwdinfo->p2p_peer_interface_addr[ 1 ], pwdinfo->p2p_peer_interface_addr[ 2 ],
121903 pwdinfo->p2p_peer_interface_addr[ 3 ], pwdinfo->p2p_peer_interface_addr[ 4 ], pwdinfo->p2p_peer_interface_addr[ 5 ]);
121904
121905 @@ -4197,7 +4369,7 @@ static int rtw_p2p_get_peer_devaddr(stru
121906 struct iw_point *pdata = &wrqu->data;
121907 struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
121908
121909 - DBG_8192C( "[%s] Role = %d, Status = %d, peer addr = %.2X:%.2X:%.2X:%.2X:%.2X:%.2X\n", __FUNCTION__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo),
121910 + DBG_871X( "[%s] Role = %d, Status = %d, peer addr = %.2X:%.2X:%.2X:%.2X:%.2X:%.2X\n", __FUNCTION__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo),
121911 pwdinfo->rx_prov_disc_info.peerDevAddr[ 0 ], pwdinfo->rx_prov_disc_info.peerDevAddr[ 1 ],
121912 pwdinfo->rx_prov_disc_info.peerDevAddr[ 2 ], pwdinfo->rx_prov_disc_info.peerDevAddr[ 3 ],
121913 pwdinfo->rx_prov_disc_info.peerDevAddr[ 4 ], pwdinfo->rx_prov_disc_info.peerDevAddr[ 5 ]);
121914 @@ -4210,6 +4382,30 @@ static int rtw_p2p_get_peer_devaddr(stru
121915
121916 }
121917
121918 +static int rtw_p2p_get_peer_devaddr_by_invitation(struct net_device *dev,
121919 + struct iw_request_info *info,
121920 + union iwreq_data *wrqu, char *extra)
121921 +
121922 +{
121923 +
121924 + int ret = 0;
121925 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121926 + struct iw_point *pdata = &wrqu->data;
121927 + struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
121928 +
121929 + DBG_871X( "[%s] Role = %d, Status = %d, peer addr = %.2X:%.2X:%.2X:%.2X:%.2X:%.2X\n", __FUNCTION__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo),
121930 + pwdinfo->p2p_peer_device_addr[ 0 ], pwdinfo->p2p_peer_device_addr[ 1 ],
121931 + pwdinfo->p2p_peer_device_addr[ 2 ], pwdinfo->p2p_peer_device_addr[ 3 ],
121932 + pwdinfo->p2p_peer_device_addr[ 4 ], pwdinfo->p2p_peer_device_addr[ 5 ]);
121933 + sprintf( extra, "\nMAC %.2X:%.2X:%.2X:%.2X:%.2X:%.2X",
121934 + pwdinfo->p2p_peer_device_addr[ 0 ], pwdinfo->p2p_peer_device_addr[ 1 ],
121935 + pwdinfo->p2p_peer_device_addr[ 2 ], pwdinfo->p2p_peer_device_addr[ 3 ],
121936 + pwdinfo->p2p_peer_device_addr[ 4 ], pwdinfo->p2p_peer_device_addr[ 5 ]);
121937 + wrqu->data.length = strlen( extra );
121938 + return ret;
121939 +
121940 +}
121941 +
121942 static int rtw_p2p_get_groupid(struct net_device *dev,
121943 struct iw_request_info *info,
121944 union iwreq_data *wrqu, char *extra)
121945 @@ -4221,7 +4417,7 @@ static int rtw_p2p_get_groupid(struct ne
121946 struct iw_point *pdata = &wrqu->data;
121947 struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
121948
121949 - sprintf( extra, "\n%.2X:%.2X:%.2X:%.2X:%.2X:%.2X-%s",
121950 + sprintf( extra, "\n%.2X:%.2X:%.2X:%.2X:%.2X:%.2X %s",
121951 pwdinfo->groupid_info.go_device_addr[ 0 ], pwdinfo->groupid_info.go_device_addr[ 1 ],
121952 pwdinfo->groupid_info.go_device_addr[ 2 ], pwdinfo->groupid_info.go_device_addr[ 3 ],
121953 pwdinfo->groupid_info.go_device_addr[ 4 ], pwdinfo->groupid_info.go_device_addr[ 5 ],
121954 @@ -4231,46 +4427,551 @@ static int rtw_p2p_get_groupid(struct ne
121955
121956 }
121957
121958 -
121959 -static int rtw_p2p_get_wps_configmethod(struct net_device *dev,
121960 +static int rtw_p2p_get_op_ch(struct net_device *dev,
121961 struct iw_request_info *info,
121962 union iwreq_data *wrqu, char *extra)
121963 +
121964 {
121965
121966 int ret = 0;
121967 - _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121968 - struct iw_point *pdata = &wrqu->data;
121969 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121970 + struct iw_point *pdata = &wrqu->data;
121971 struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
121972 - u8 peerMAC[ ETH_ALEN ] = { 0x00 };
121973 - int jj,kk;
121974 - u8 peerMACStr[ 17 ] = { 0x00 };
121975 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
121976 - _irqL irqL;
121977 - _list *plist, *phead;
121978 - _queue *queue = &(pmlmepriv->scanned_queue);
121979 - struct wlan_network *pnetwork = NULL;
121980 - u8 blnMatch = 0;
121981 - u16 attr_content = 0;
121982 - uint attr_contentlen = 0;
121983 - //6 is the string "wpsCM=", 17 is the MAC addr, we have to clear it at wrqu->data.pointer
121984 - u8 attr_content_str[ 6 + 17 ] = { 0x00 };
121985 -
121986
121987 - // Commented by Albert 20110727
121988 - // The input data is the MAC address which the application wants to know its WPS config method.
121989 - // After knowing its WPS config method, the application can decide the config method for provisioning discovery.
121990 - // Format: iwpriv wlanx p2p_get_wpsCM 00:E0:4C:00:00:05
121991 +
121992 + DBG_871X( "[%s] Op_ch = %02x\n", __FUNCTION__, pwdinfo->operating_channel);
121993 +
121994 + sprintf( extra, "\n\nOp_ch=%.2d\n", pwdinfo->operating_channel );
121995 + wrqu->data.length = strlen( extra );
121996 + return ret;
121997 +
121998 +}
121999
122000 - DBG_8192C( "[%s] data = %s\n", __FUNCTION__, ( char* ) extra );
122001 - //_rtw_memcpy( peerMACStr , extra , 17 );
122002 +inline static void macstr2num(u8 *dst, u8 *src)
122003 +{
122004 + int jj, kk;
122005 + for (jj = 0, kk = 0; jj < ETH_ALEN; jj++, kk += 3)
122006 + {
122007 + dst[jj] = key_2char2num(src[kk], src[kk + 1]);
122008 + }
122009 +}
122010 +
122011 +static int rtw_p2p_get_wps_configmethod(struct net_device *dev,
122012 + struct iw_request_info *info,
122013 + union iwreq_data *wrqu, char *extra, char *subcmd)
122014 +{
122015 +
122016 + int ret = 0;
122017 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
122018 + u8 peerMAC[ETH_ALEN] = { 0x00 };
122019 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
122020 + _irqL irqL;
122021 + _list * plist,*phead;
122022 + _queue *queue = &(pmlmepriv->scanned_queue);
122023 + struct wlan_network *pnetwork = NULL;
122024 + u8 blnMatch = 0;
122025 + u16 attr_content = 0;
122026 + uint attr_contentlen = 0;
122027 + u8 attr_content_str[P2P_PRIVATE_IOCTL_SET_LEN] = { 0x00 };
122028 +
122029 + // Commented by Albert 20110727
122030 + // The input data is the MAC address which the application wants to know its WPS config method.
122031 + // After knowing its WPS config method, the application can decide the config method for provisioning discovery.
122032 + // Format: iwpriv wlanx p2p_get_wpsCM 00:E0:4C:00:00:05
122033 +
122034 + DBG_871X("[%s] data = %s\n", __FUNCTION__, subcmd);
122035 +
122036 + macstr2num(peerMAC, subcmd);
122037 +
122038 + _enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
122039 +
122040 + phead = get_list_head(queue);
122041 + plist = get_next(phead);
122042 +
122043 + while (1)
122044 + {
122045 + if (rtw_end_of_queue_search(phead, plist) == _TRUE) break;
122046 +
122047 + pnetwork = LIST_CONTAINOR(plist, struct wlan_network, list);
122048 + if (_rtw_memcmp(pnetwork->network.MacAddress, peerMAC, ETH_ALEN))
122049 + {
122050 + u8 *wpsie;
122051 + uint wpsie_len = 0;
122052 +
122053 + // The mac address is matched.
122054 +
122055 + if ((wpsie = rtw_get_wps_ie(&pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &wpsie_len)))
122056 + {
122057 + rtw_get_wps_attr_content(wpsie, wpsie_len, WPS_ATTR_CONF_METHOD, (u8 *)&attr_content, &attr_contentlen);
122058 + if (attr_contentlen)
122059 + {
122060 + attr_content = be16_to_cpu(attr_content);
122061 + sprintf(attr_content_str, "\n\nM=%.4d", attr_content);
122062 + blnMatch = 1;
122063 + }
122064 + }
122065 +
122066 + break;
122067 + }
122068 +
122069 + plist = get_next(plist);
122070 +
122071 + }
122072 +
122073 + _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
122074 +
122075 + if (!blnMatch)
122076 + {
122077 + sprintf(attr_content_str, "\n\nM=0000");
122078 + }
122079 +
122080 + wrqu->data.length = strlen(attr_content_str);
122081 + _rtw_memcpy(extra, attr_content_str, wrqu->data.length);
122082 +
122083 + return ret;
122084 +
122085 +}
122086 +
122087 +#ifdef CONFIG_WFD
122088 +static int rtw_p2p_get_peer_wfd_port(struct net_device *dev,
122089 + struct iw_request_info *info,
122090 + union iwreq_data *wrqu, char *extra)
122091 +{
122092 +
122093 + int ret = 0;
122094 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
122095 + struct iw_point *pdata = &wrqu->data;
122096 + struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
122097 +
122098 + DBG_871X( "[%s] p2p_state = %d\n", __FUNCTION__, rtw_p2p_state(pwdinfo) );
122099 +
122100 + sprintf( extra, "\n\nPort=%d\n", pwdinfo->wfd_info->peer_rtsp_ctrlport );
122101 + DBG_871X( "[%s] remote port = %d\n", __FUNCTION__, pwdinfo->wfd_info->peer_rtsp_ctrlport );
122102 +
122103 + wrqu->data.length = strlen( extra );
122104 + return ret;
122105 +
122106 +}
122107 +
122108 +static int rtw_p2p_get_peer_wfd_preferred_connection(struct net_device *dev,
122109 + struct iw_request_info *info,
122110 + union iwreq_data *wrqu, char *extra)
122111 +{
122112 +
122113 + int ret = 0;
122114 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
122115 + struct iw_point *pdata = &wrqu->data;
122116 + struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
122117 +
122118 + sprintf( extra, "\n\nwfd_pc=%d\n", pwdinfo->wfd_info->wfd_pc );
122119 + DBG_871X( "[%s] wfd_pc = %d\n", __FUNCTION__, pwdinfo->wfd_info->wfd_pc );
122120 +
122121 + wrqu->data.length = strlen( extra );
122122 + pwdinfo->wfd_info->wfd_pc = _FALSE; // Reset the WFD preferred connection to P2P
122123 + return ret;
122124 +
122125 +}
122126 +
122127 +static int rtw_p2p_get_peer_wfd_session_available(struct net_device *dev,
122128 + struct iw_request_info *info,
122129 + union iwreq_data *wrqu, char *extra)
122130 +{
122131 +
122132 + int ret = 0;
122133 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
122134 + struct iw_point *pdata = &wrqu->data;
122135 + struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
122136 +
122137 + sprintf( extra, "\n\nwfd_sa=%d\n", pwdinfo->wfd_info->peer_session_avail );
122138 + DBG_871X( "[%s] wfd_sa = %d\n", __FUNCTION__, pwdinfo->wfd_info->peer_session_avail );
122139 +
122140 + wrqu->data.length = strlen( extra );
122141 + pwdinfo->wfd_info->peer_session_avail = _TRUE; // Reset the WFD session available
122142 + return ret;
122143 +
122144 +}
122145 +
122146 +#endif // CONFIG_WFD
122147 +
122148 +static int rtw_p2p_get_go_device_address(struct net_device *dev,
122149 + struct iw_request_info *info,
122150 + union iwreq_data *wrqu, char *extra, char *subcmd)
122151 +{
122152 +
122153 + int ret = 0;
122154 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
122155 + u8 peerMAC[ETH_ALEN] = { 0x00 };
122156 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
122157 + _irqL irqL;
122158 + _list *plist, *phead;
122159 + _queue *queue = &(pmlmepriv->scanned_queue);
122160 + struct wlan_network *pnetwork = NULL;
122161 + u8 blnMatch = 0;
122162 + u8 *p2pie;
122163 + uint p2pielen = 0, attr_contentlen = 0;
122164 + u8 attr_content[100] = { 0x00 };
122165 + u8 go_devadd_str[P2P_PRIVATE_IOCTL_SET_LEN] = { 0x00 };
122166 +
122167 + // Commented by Albert 20121209
122168 + // The input data is the GO's interface address which the application wants to know its device address.
122169 + // Format: iwpriv wlanx p2p_get2 go_devadd=00:E0:4C:00:00:05
122170 +
122171 + DBG_871X("[%s] data = %s\n", __FUNCTION__, subcmd);
122172 +
122173 + macstr2num(peerMAC, subcmd);
122174 +
122175 + _enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
122176 +
122177 + phead = get_list_head(queue);
122178 + plist = get_next(phead);
122179 +
122180 + while (1)
122181 + {
122182 + if (rtw_end_of_queue_search(phead, plist) == _TRUE) break;
122183 +
122184 + pnetwork = LIST_CONTAINOR(plist, struct wlan_network, list);
122185 + if (_rtw_memcmp(pnetwork->network.MacAddress, peerMAC, ETH_ALEN))
122186 + {
122187 + // Commented by Albert 2011/05/18
122188 + // Match the device address located in the P2P IE
122189 + // This is for the case that the P2P device address is not the same as the P2P interface address.
122190 +
122191 + if ((p2pie = rtw_get_p2p_ie(&pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &p2pielen)))
122192 + {
122193 + while (p2pie)
122194 + {
122195 + // The P2P Device ID attribute is included in the Beacon frame.
122196 + // The P2P Device Info attribute is included in the probe response frame.
122197 +
122198 + _rtw_memset(attr_content, 0x00, 100);
122199 + if (rtw_get_p2p_attr_content(p2pie, p2pielen, P2P_ATTR_DEVICE_ID, attr_content, &attr_contentlen))
122200 + {
122201 + // Handle the P2P Device ID attribute of Beacon first
122202 + blnMatch = 1;
122203 + break;
122204 +
122205 + } else if (rtw_get_p2p_attr_content(p2pie, p2pielen, P2P_ATTR_DEVICE_INFO, attr_content, &attr_contentlen))
122206 + {
122207 + // Handle the P2P Device Info attribute of probe response
122208 + blnMatch = 1;
122209 + break;
122210 + }
122211 +
122212 + //Get the next P2P IE
122213 + p2pie = rtw_get_p2p_ie(p2pie + p2pielen, pnetwork->network.IELength - 12 - (p2pie - &pnetwork->network.IEs[12] + p2pielen), NULL, &p2pielen);
122214 + }
122215 + }
122216 + }
122217 +
122218 + plist = get_next(plist);
122219 +
122220 + }
122221 +
122222 + _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
122223 +
122224 + if (!blnMatch)
122225 + {
122226 + sprintf(go_devadd_str, "\n\ndev_add=NULL");
122227 + } else
122228 + {
122229 + sprintf(go_devadd_str, "\n\ndev_add=%.2X:%.2X:%.2X:%.2X:%.2X:%.2X",
122230 + attr_content[0], attr_content[1], attr_content[2], attr_content[3], attr_content[4], attr_content[5]);
122231 + }
122232 +
122233 + wrqu->data.length = strlen(go_devadd_str);
122234 + _rtw_memcpy(extra, go_devadd_str, wrqu->data.length);
122235 +
122236 + return ret;
122237 +
122238 +}
122239 +
122240 +static int rtw_p2p_get_device_type(struct net_device *dev,
122241 + struct iw_request_info *info,
122242 + union iwreq_data *wrqu, char *extra, char *subcmd)
122243 +{
122244 +
122245 + int ret = 0;
122246 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
122247 + u8 peerMAC[ETH_ALEN] = { 0x00 };
122248 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
122249 + _irqL irqL;
122250 + _list *plist, *phead;
122251 + _queue *queue = &(pmlmepriv->scanned_queue);
122252 + struct wlan_network *pnetwork = NULL;
122253 + u8 blnMatch = 0;
122254 + u8 dev_type[8] = { 0x00 };
122255 + uint dev_type_len = 0;
122256 + u8 dev_type_str[P2P_PRIVATE_IOCTL_SET_LEN] = { 0x00 }; // +9 is for the str "dev_type=", we have to clear it at wrqu->data.pointer
122257 +
122258 + // Commented by Albert 20121209
122259 + // The input data is the MAC address which the application wants to know its device type.
122260 + // Such user interface could know the device type.
122261 + // Format: iwpriv wlanx p2p_get2 dev_type=00:E0:4C:00:00:05
122262 +
122263 + DBG_871X("[%s] data = %s\n", __FUNCTION__, subcmd);
122264 +
122265 + macstr2num(peerMAC, subcmd);
122266 +
122267 + _enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
122268 +
122269 + phead = get_list_head(queue);
122270 + plist = get_next(phead);
122271 +
122272 + while (1)
122273 + {
122274 + if (rtw_end_of_queue_search(phead, plist) == _TRUE) break;
122275 +
122276 + pnetwork = LIST_CONTAINOR(plist, struct wlan_network, list);
122277 + if (_rtw_memcmp(pnetwork->network.MacAddress, peerMAC, ETH_ALEN))
122278 + {
122279 + u8 *wpsie;
122280 + uint wpsie_len = 0;
122281 +
122282 + // The mac address is matched.
122283 +
122284 + if ((wpsie = rtw_get_wps_ie(&pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &wpsie_len)))
122285 + {
122286 + rtw_get_wps_attr_content(wpsie, wpsie_len, WPS_ATTR_PRIMARY_DEV_TYPE, dev_type, &dev_type_len);
122287 + if (dev_type_len)
122288 + {
122289 + u16 type = 0;
122290 +
122291 + _rtw_memcpy(&type, dev_type, 2);
122292 + type = be16_to_cpu(type);
122293 + sprintf(dev_type_str, "\n\nN=%.2d", type);
122294 + blnMatch = 1;
122295 + }
122296 + }
122297 + break;
122298 + }
122299 +
122300 + plist = get_next(plist);
122301 +
122302 + }
122303 +
122304 + _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
122305 +
122306 + if (!blnMatch)
122307 + {
122308 + sprintf(dev_type_str, "\n\nN=00");
122309 + }
122310 +
122311 + wrqu->data.length = strlen(dev_type_str);
122312 + _rtw_memcpy(extra, dev_type_str, wrqu->data.length);
122313 +
122314 + return ret;
122315 +
122316 +}
122317 +
122318 +static int rtw_p2p_get_device_name(struct net_device *dev,
122319 + struct iw_request_info *info,
122320 + union iwreq_data *wrqu, char *extra, char *subcmd)
122321 +{
122322 +
122323 + int ret = 0;
122324 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
122325 + u8 peerMAC[ETH_ALEN] = { 0x00 };
122326 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
122327 + _irqL irqL;
122328 + _list *plist, *phead;
122329 + _queue *queue = &(pmlmepriv->scanned_queue);
122330 + struct wlan_network *pnetwork = NULL;
122331 + u8 blnMatch = 0;
122332 + u8 dev_name[WPS_MAX_DEVICE_NAME_LEN] = { 0x00 };
122333 + uint dev_len = 0;
122334 + u8 dev_name_str[P2P_PRIVATE_IOCTL_SET_LEN] = { 0x00 };
122335 +
122336 + // Commented by Albert 20121225
122337 + // The input data is the MAC address which the application wants to know its device name.
122338 + // Such user interface could show peer device's device name instead of ssid.
122339 + // Format: iwpriv wlanx p2p_get2 devN=00:E0:4C:00:00:05
122340 +
122341 + DBG_871X("[%s] data = %s\n", __FUNCTION__, subcmd);
122342 +
122343 + macstr2num(peerMAC, subcmd);
122344 +
122345 + _enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
122346 +
122347 + phead = get_list_head(queue);
122348 + plist = get_next(phead);
122349 +
122350 + while (1)
122351 + {
122352 + if (rtw_end_of_queue_search(phead, plist) == _TRUE) break;
122353 +
122354 + pnetwork = LIST_CONTAINOR(plist, struct wlan_network, list);
122355 + if (_rtw_memcmp(pnetwork->network.MacAddress, peerMAC, ETH_ALEN))
122356 + {
122357 + u8 *wpsie;
122358 + uint wpsie_len = 0;
122359 +
122360 + // The mac address is matched.
122361 +
122362 + if ((wpsie = rtw_get_wps_ie(&pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &wpsie_len)))
122363 + {
122364 + rtw_get_wps_attr_content(wpsie, wpsie_len, WPS_ATTR_DEVICE_NAME, dev_name, &dev_len);
122365 + if (dev_len)
122366 + {
122367 + sprintf(dev_name_str, "\n\nN=%s", dev_name);
122368 + blnMatch = 1;
122369 + }
122370 + }
122371 + break;
122372 + }
122373 +
122374 + plist = get_next(plist);
122375 +
122376 + }
122377 +
122378 + _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
122379 +
122380 + if (!blnMatch)
122381 + {
122382 + sprintf(dev_name_str, "\n\nN=0000");
122383 + }
122384 +
122385 + wrqu->data.length = strlen(dev_name_str);
122386 + _rtw_memcpy(extra, dev_name_str, wrqu->data.length);
122387 +
122388 + return ret;
122389 +
122390 +}
122391 +
122392 +static int rtw_p2p_get_invitation_procedure(struct net_device *dev,
122393 + struct iw_request_info *info,
122394 + union iwreq_data *wrqu, char *extra, char *subcmd)
122395 +{
122396 +
122397 + int ret = 0;
122398 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
122399 + u8 peerMAC[ETH_ALEN] = { 0x00 };
122400 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
122401 + _irqL irqL;
122402 + _list *plist, *phead;
122403 + _queue *queue = &(pmlmepriv->scanned_queue);
122404 + struct wlan_network *pnetwork = NULL;
122405 + u8 blnMatch = 0;
122406 + u8 *p2pie;
122407 + uint p2pielen = 0, attr_contentlen = 0;
122408 + u8 attr_content[2] = { 0x00 };
122409 + u8 inv_proc_str[P2P_PRIVATE_IOCTL_SET_LEN] = { 0x00 };
122410 +
122411 + // Commented by Ouden 20121226
122412 + // The application wants to know P2P initation procedure is support or not.
122413 + // Format: iwpriv wlanx p2p_get2 InvProc=00:E0:4C:00:00:05
122414 +
122415 + DBG_871X("[%s] data = %s\n", __FUNCTION__, subcmd);
122416 +
122417 + macstr2num(peerMAC, subcmd);
122418 +
122419 + _enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
122420 +
122421 + phead = get_list_head(queue);
122422 + plist = get_next(phead);
122423 +
122424 + while (1)
122425 + {
122426 + if (rtw_end_of_queue_search(phead, plist) == _TRUE) break;
122427 +
122428 + pnetwork = LIST_CONTAINOR(plist, struct wlan_network, list);
122429 + if (_rtw_memcmp(pnetwork->network.MacAddress, peerMAC, ETH_ALEN))
122430 + {
122431 + // Commented by Albert 20121226
122432 + // Match the device address located in the P2P IE
122433 + // This is for the case that the P2P device address is not the same as the P2P interface address.
122434 +
122435 + if ((p2pie = rtw_get_p2p_ie(&pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &p2pielen)))
122436 + {
122437 + while (p2pie)
122438 + {
122439 + //_rtw_memset( attr_content, 0x00, 2);
122440 + if (rtw_get_p2p_attr_content(p2pie, p2pielen, P2P_ATTR_CAPABILITY, attr_content, &attr_contentlen))
122441 + {
122442 + // Handle the P2P capability attribute
122443 + blnMatch = 1;
122444 + break;
122445 +
122446 + }
122447 +
122448 + //Get the next P2P IE
122449 + p2pie = rtw_get_p2p_ie(p2pie + p2pielen, pnetwork->network.IELength - 12 - (p2pie - &pnetwork->network.IEs[12] + p2pielen), NULL, &p2pielen);
122450 + }
122451 + }
122452 + }
122453 +
122454 + plist = get_next(plist);
122455 +
122456 + }
122457 +
122458 + _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
122459 +
122460 + if (!blnMatch)
122461 + {
122462 + sprintf(inv_proc_str, "\nIP=-1");
122463 + } else
122464 + {
122465 + if (attr_content[0] && 0x20)
122466 + {
122467 + sprintf(inv_proc_str, "\nIP=1");
122468 + } else
122469 + {
122470 + sprintf(inv_proc_str, "\nIP=0");
122471 + }
122472 + }
122473 +
122474 + wrqu->data.length = strlen(inv_proc_str);
122475 + _rtw_memcpy(extra, inv_proc_str, wrqu->data.length);
122476 +
122477 + return ret;
122478 +
122479 +}
122480 +
122481 +static int rtw_p2p_connect(struct net_device *dev,
122482 + struct iw_request_info *info,
122483 + union iwreq_data *wrqu, char *extra)
122484 +{
122485 +
122486 + int ret = 0;
122487 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
122488 + struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
122489 + u8 peerMAC[ ETH_ALEN ] = { 0x00 };
122490 + int jj,kk;
122491 + u8 peerMACStr[ ETH_ALEN * 2 ] = { 0x00 };
122492 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
122493 + _irqL irqL;
122494 + _list *plist, *phead;
122495 + _queue *queue = &(pmlmepriv->scanned_queue);
122496 + struct wlan_network *pnetwork = NULL;
122497 + uint uintPeerChannel = 0;
122498 +#ifdef CONFIG_CONCURRENT_MODE
122499 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
122500 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
122501 +#endif // CONFIG_CONCURRENT_MODE
122502 +
122503 +
122504 + // Commented by Albert 20110304
122505 + // The input data contains two informations.
122506 + // 1. First information is the MAC address which wants to formate with
122507 + // 2. Second information is the WPS PINCode or "pbc" string for push button method
122508 + // Format: 00:E0:4C:00:00:05
122509 + // Format: 00:E0:4C:00:00:05
122510
122511 - if ( copy_from_user(peerMACStr, wrqu->data.pointer + 6 , 17) ) {
122512 - return -EFAULT;
122513 - }
122514 + DBG_871X( "[%s] data = %s\n", __FUNCTION__, extra );
122515
122516 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
122517 + {
122518 + DBG_871X( "[%s] WiFi Direct is disable!\n", __FUNCTION__ );
122519 + return ret;
122520 + }
122521 +
122522 + if ( pwdinfo->ui_got_wps_info == P2P_NO_WPSINFO )
122523 + {
122524 + return -1;
122525 + }
122526 +
122527 for( jj = 0, kk = 0; jj < ETH_ALEN; jj++, kk += 3 )
122528 {
122529 - peerMAC[ jj ] = key_2char2num( peerMACStr[kk], peerMACStr[kk+ 1] );
122530 + peerMAC[ jj ] = key_2char2num( extra[kk], extra[kk+ 1] );
122531 }
122532
122533 _enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
122534 @@ -4286,67 +4987,441 @@ static int rtw_p2p_get_wps_configmethod(
122535 pnetwork = LIST_CONTAINOR(plist, struct wlan_network, list);
122536 if ( _rtw_memcmp( pnetwork->network.MacAddress, peerMAC, ETH_ALEN ) )
122537 {
122538 - u8 *wpsie;
122539 - uint wpsie_len = 0;
122540 + uintPeerChannel = pnetwork->network.Configuration.DSConfig;
122541 + break;
122542 + }
122543 +
122544 + plist = get_next(plist);
122545 +
122546 + }
122547 +
122548 + _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
122549 +
122550 + if ( uintPeerChannel )
122551 + {
122552 +#ifdef CONFIG_CONCURRENT_MODE
122553 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
122554 + {
122555 + _cancel_timer_ex( &pwdinfo->ap_p2p_switch_timer );
122556 + }
122557 +#endif // CONFIG_CONCURRENT_MODE
122558 +
122559 + _rtw_memset( &pwdinfo->nego_req_info, 0x00, sizeof( struct tx_nego_req_info ) );
122560 + _rtw_memset( &pwdinfo->groupid_info, 0x00, sizeof( struct group_id_info ) );
122561 +
122562 + pwdinfo->nego_req_info.peer_channel_num[ 0 ] = uintPeerChannel;
122563 + _rtw_memcpy( pwdinfo->nego_req_info.peerDevAddr, pnetwork->network.MacAddress, ETH_ALEN );
122564 + pwdinfo->nego_req_info.benable = _TRUE;
122565 +
122566 + _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
122567 + if ( rtw_p2p_state(pwdinfo) != P2P_STATE_GONEGO_OK )
122568 + {
122569 + // Restore to the listen state if the current p2p state is not nego OK
122570 + rtw_p2p_set_state(pwdinfo, P2P_STATE_LISTEN );
122571 + }
122572 +
122573 + rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
122574 + rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_ING);
122575 +
122576 +#ifdef CONFIG_CONCURRENT_MODE
122577 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
122578 + {
122579 + // Have to enter the power saving with the AP
122580 + set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
122581
122582 - // The mac address is matched.
122583 + issue_nulldata(pbuddy_adapter, NULL, 1, 3, 500);
122584 + }
122585 +#endif // CONFIG_CONCURRENT_MODE
122586 +
122587 + DBG_871X( "[%s] Start PreTx Procedure!\n", __FUNCTION__ );
122588 + _set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
122589 +
122590 +#ifdef CONFIG_CONCURRENT_MODE
122591 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
122592 + {
122593 + _set_timer( &pwdinfo->restore_p2p_state_timer, P2P_CONCURRENT_GO_NEGO_TIMEOUT );
122594 + }
122595 + else
122596 + {
122597 + _set_timer( &pwdinfo->restore_p2p_state_timer, P2P_GO_NEGO_TIMEOUT );
122598 + }
122599 +#else
122600 + _set_timer( &pwdinfo->restore_p2p_state_timer, P2P_GO_NEGO_TIMEOUT );
122601 +#endif // CONFIG_CONCURRENT_MODE
122602 +
122603 + }
122604 + else
122605 + {
122606 + DBG_871X( "[%s] Not Found in Scanning Queue~\n", __FUNCTION__ );
122607 + ret = -1;
122608 + }
122609 +exit:
122610 + return ret;
122611 +}
122612 +
122613 +static int rtw_p2p_invite_req(struct net_device *dev,
122614 + struct iw_request_info *info,
122615 + union iwreq_data *wrqu, char *extra)
122616 +{
122617 +
122618 + int ret = 0;
122619 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
122620 + struct iw_point *pdata = &wrqu->data;
122621 + struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
122622 + int jj,kk;
122623 + u8 peerMACStr[ ETH_ALEN * 2 ] = { 0x00 };
122624 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
122625 + _list *plist, *phead;
122626 + _queue *queue = &(pmlmepriv->scanned_queue);
122627 + struct wlan_network *pnetwork = NULL;
122628 + uint uintPeerChannel = 0;
122629 + u8 attr_content[50] = { 0x00 }, _status = 0;
122630 + u8 *p2pie;
122631 + uint p2pielen = 0, attr_contentlen = 0;
122632 + _irqL irqL;
122633 + struct tx_invite_req_info* pinvite_req_info = &pwdinfo->invitereq_info;
122634 +#ifdef CONFIG_CONCURRENT_MODE
122635 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
122636 + struct mlme_priv *pbuddy_mlmepriv = &pbuddy_adapter->mlmepriv;
122637 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
122638 +#endif // CONFIG_CONCURRENT_MODE
122639 +
122640 +#ifdef CONFIG_WFD
122641 + struct wifi_display_info* pwfd_info = pwdinfo->wfd_info;
122642 +#endif // CONFIG_WFD
122643 +
122644 + // Commented by Albert 20120321
122645 + // The input data contains two informations.
122646 + // 1. First information is the P2P device address which you want to send to.
122647 + // 2. Second information is the group id which combines with GO's mac address, space and GO's ssid.
122648 + // Command line sample: iwpriv wlan0 p2p_set invite="00:11:22:33:44:55 00:E0:4C:00:00:05 DIRECT-xy"
122649 + // Format: 00:11:22:33:44:55 00:E0:4C:00:00:05 DIRECT-xy
122650 +
122651 + DBG_871X( "[%s] data = %s\n", __FUNCTION__, extra );
122652 +
122653 + if ( wrqu->data.length <= 37 )
122654 + {
122655 + DBG_871X( "[%s] Wrong format!\n", __FUNCTION__ );
122656 + return ret;
122657 + }
122658 +
122659 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
122660 + {
122661 + DBG_871X( "[%s] WiFi Direct is disable!\n", __FUNCTION__ );
122662 + return ret;
122663 + }
122664 + else
122665 + {
122666 + // Reset the content of struct tx_invite_req_info
122667 + pinvite_req_info->benable = _FALSE;
122668 + _rtw_memset( pinvite_req_info->go_bssid, 0x00, ETH_ALEN );
122669 + _rtw_memset( pinvite_req_info->go_ssid, 0x00, WLAN_SSID_MAXLEN );
122670 + pinvite_req_info->ssidlen = 0x00;
122671 + pinvite_req_info->operating_ch = pwdinfo->operating_channel;
122672 + _rtw_memset( pinvite_req_info->peer_macaddr, 0x00, ETH_ALEN );
122673 + pinvite_req_info->token = 3;
122674 + }
122675 +
122676 + for( jj = 0, kk = 0; jj < ETH_ALEN; jj++, kk += 3 )
122677 + {
122678 + pinvite_req_info->peer_macaddr[ jj ] = key_2char2num( extra[kk], extra[kk+ 1] );
122679 + }
122680 +
122681 + _enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
122682 +
122683 + phead = get_list_head(queue);
122684 + plist = get_next(phead);
122685 +
122686 + while(1)
122687 + {
122688 + if (rtw_end_of_queue_search(phead,plist)== _TRUE)
122689 + break;
122690 +
122691 + pnetwork = LIST_CONTAINOR(plist, struct wlan_network, list);
122692 +
122693 + // Commented by Albert 2011/05/18
122694 + // Match the device address located in the P2P IE
122695 + // This is for the case that the P2P device address is not the same as the P2P interface address.
122696 +
122697 + if ( (p2pie=rtw_get_p2p_ie( &pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &p2pielen)) )
122698 + {
122699 + // The P2P Device ID attribute is included in the Beacon frame.
122700 + // The P2P Device Info attribute is included in the probe response frame.
122701 +
122702 + if ( rtw_get_p2p_attr_content( p2pie, p2pielen, P2P_ATTR_DEVICE_ID, attr_content, &attr_contentlen) )
122703 + {
122704 + // Handle the P2P Device ID attribute of Beacon first
122705 + if ( _rtw_memcmp( attr_content, pinvite_req_info->peer_macaddr, ETH_ALEN ) )
122706 + {
122707 + uintPeerChannel = pnetwork->network.Configuration.DSConfig;
122708 + break;
122709 + }
122710 + }
122711 + else if ( rtw_get_p2p_attr_content( p2pie, p2pielen, P2P_ATTR_DEVICE_INFO, attr_content, &attr_contentlen) )
122712 + {
122713 + // Handle the P2P Device Info attribute of probe response
122714 + if ( _rtw_memcmp( attr_content, pinvite_req_info->peer_macaddr, ETH_ALEN ) )
122715 + {
122716 + uintPeerChannel = pnetwork->network.Configuration.DSConfig;
122717 + break;
122718 + }
122719 + }
122720 +
122721 + }
122722 +
122723 + plist = get_next(plist);
122724 +
122725 + }
122726 +
122727 + _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
122728 +
122729 +#ifdef CONFIG_WFD
122730 + if ( uintPeerChannel )
122731 + {
122732 + u8 wfd_ie[ 128 ] = { 0x00 };
122733 + uint wfd_ielen = 0;
122734 +
122735 + if ( rtw_get_wfd_ie( &pnetwork->network.IEs[12], pnetwork->network.IELength - 12, wfd_ie, &wfd_ielen ) )
122736 + {
122737 + u8 wfd_devinfo[ 6 ] = { 0x00 };
122738 + uint wfd_devlen = 6;
122739
122740 - if ( (wpsie=rtw_get_wps_ie( &pnetwork->network.IEs[ 12 ], pnetwork->network.IELength - 12, NULL, &wpsie_len )) )
122741 + DBG_871X( "[%s] Found WFD IE!\n", __FUNCTION__ );
122742 + if ( rtw_get_wfd_attr_content( wfd_ie, wfd_ielen, WFD_ATTR_DEVICE_INFO, wfd_devinfo, &wfd_devlen ) )
122743 {
122744 - rtw_get_wps_attr_content( wpsie, wpsie_len, WPS_ATTR_CONF_METHOD, ( u8* ) &attr_content, &attr_contentlen);
122745 - if ( attr_contentlen )
122746 + u16 wfd_devinfo_field = 0;
122747 +
122748 + // Commented by Albert 20120319
122749 + // The first two bytes are the WFD device information field of WFD device information subelement.
122750 + // In big endian format.
122751 + wfd_devinfo_field = RTW_GET_BE16(wfd_devinfo);
122752 + if ( wfd_devinfo_field & WFD_DEVINFO_SESSION_AVAIL )
122753 {
122754 - attr_content = be16_to_cpu( attr_content );
122755 - sprintf( attr_content_str, "\n\nM=%.4d", attr_content );
122756 - blnMatch = 1;
122757 + pwfd_info->peer_session_avail = _TRUE;
122758 + }
122759 + else
122760 + {
122761 + pwfd_info->peer_session_avail = _FALSE;
122762 }
122763 }
122764 + }
122765 +
122766 + if ( _FALSE == pwfd_info->peer_session_avail )
122767 + {
122768 + DBG_871X( "[%s] WFD Session not avaiable!\n", __FUNCTION__ );
122769 + goto exit;
122770 + }
122771 + }
122772 +#endif // CONFIG_WFD
122773 +
122774 + if ( uintPeerChannel )
122775 + {
122776 +#ifdef CONFIG_CONCURRENT_MODE
122777 + if ( check_fwstate( pbuddy_mlmepriv, _FW_LINKED ) )
122778 + {
122779 + _cancel_timer_ex( &pwdinfo->ap_p2p_switch_timer );
122780 + }
122781 +#endif // CONFIG_CONCURRENT_MODE
122782 +
122783 + // Store the GO's bssid
122784 + for( jj = 0, kk = 18; jj < ETH_ALEN; jj++, kk += 3 )
122785 + {
122786 + pinvite_req_info->go_bssid[ jj ] = key_2char2num( extra[kk], extra[kk+ 1] );
122787 + }
122788 +
122789 + // Store the GO's ssid
122790 + pinvite_req_info->ssidlen = wrqu->data.length - 36;
122791 + _rtw_memcpy( pinvite_req_info->go_ssid, &extra[ 36 ], (u32) pinvite_req_info->ssidlen );
122792 + pinvite_req_info->benable = _TRUE;
122793 + pinvite_req_info->peer_ch = uintPeerChannel;
122794 +
122795 + rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
122796 + rtw_p2p_set_state(pwdinfo, P2P_STATE_TX_INVITE_REQ);
122797 +
122798 +#ifdef CONFIG_CONCURRENT_MODE
122799 + if ( check_fwstate( pbuddy_mlmepriv, _FW_LINKED ) )
122800 + {
122801 + // Have to enter the power saving with the AP
122802 + set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
122803
122804 - break;
122805 - }
122806 + issue_nulldata(pbuddy_adapter, NULL, 1, 3, 500);
122807 + }
122808 + else
122809 + {
122810 + set_channel_bwmode(padapter, uintPeerChannel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
122811 + }
122812 +#else
122813 + set_channel_bwmode(padapter, uintPeerChannel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
122814 +#endif
122815 +
122816 + _set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
122817 +
122818 +#ifdef CONFIG_CONCURRENT_MODE
122819 + if ( check_fwstate( pbuddy_mlmepriv, _FW_LINKED ) )
122820 + {
122821 + _set_timer( &pwdinfo->restore_p2p_state_timer, P2P_CONCURRENT_INVITE_TIMEOUT );
122822 + }
122823 + else
122824 + {
122825 + _set_timer( &pwdinfo->restore_p2p_state_timer, P2P_INVITE_TIMEOUT );
122826 + }
122827 +#else
122828 + _set_timer( &pwdinfo->restore_p2p_state_timer, P2P_INVITE_TIMEOUT );
122829 +#endif // CONFIG_CONCURRENT_MODE
122830 +
122831 +
122832 + }
122833 + else
122834 + {
122835 + DBG_871X( "[%s] NOT Found in the Scanning Queue!\n", __FUNCTION__ );
122836 + }
122837 +exit:
122838 +
122839 + return ret;
122840 +
122841 +}
122842 +
122843 +static int rtw_p2p_set_persistent(struct net_device *dev,
122844 + struct iw_request_info *info,
122845 + union iwreq_data *wrqu, char *extra)
122846 +{
122847 +
122848 + int ret = 0;
122849 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
122850 + struct iw_point *pdata = &wrqu->data;
122851 + struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
122852 + int jj,kk;
122853 + u8 peerMACStr[ ETH_ALEN * 2 ] = { 0x00 };
122854 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
122855 + _list *plist, *phead;
122856 + _queue *queue = &(pmlmepriv->scanned_queue);
122857 + struct wlan_network *pnetwork = NULL;
122858 + uint uintPeerChannel = 0;
122859 + u8 attr_content[50] = { 0x00 }, _status = 0;
122860 + u8 *p2pie;
122861 + uint p2pielen = 0, attr_contentlen = 0;
122862 + _irqL irqL;
122863 + struct tx_invite_req_info* pinvite_req_info = &pwdinfo->invitereq_info;
122864 +#ifdef CONFIG_CONCURRENT_MODE
122865 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
122866 + struct mlme_priv *pbuddy_mlmepriv = &pbuddy_adapter->mlmepriv;
122867 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
122868 +#endif // CONFIG_CONCURRENT_MODE
122869 +
122870 +#ifdef CONFIG_WFD
122871 + struct wifi_display_info* pwfd_info = pwdinfo->wfd_info;
122872 +#endif // CONFIG_WFD
122873 +
122874 + // Commented by Albert 20120328
122875 + // The input data is 0 or 1
122876 + // 0: disable persistent group functionality
122877 + // 1: enable persistent group founctionality
122878 +
122879 + DBG_871X( "[%s] data = %s\n", __FUNCTION__, extra );
122880 +
122881 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
122882 + {
122883 + DBG_871X( "[%s] WiFi Direct is disable!\n", __FUNCTION__ );
122884 + return ret;
122885 + }
122886 + else
122887 + {
122888 + if ( extra[ 0 ] == '0' ) // Disable the persistent group function.
122889 + {
122890 + pwdinfo->persistent_supported = _FALSE;
122891 + }
122892 + else if ( extra[ 0 ] == '1' ) // Enable the persistent group function.
122893 + {
122894 + pwdinfo->persistent_supported = _TRUE;
122895 + }
122896 + else
122897 + {
122898 + pwdinfo->persistent_supported = _FALSE;
122899 + }
122900 + }
122901 + printk( "[%s] persistent_supported = %d\n", __FUNCTION__, pwdinfo->persistent_supported );
122902 +
122903 +exit:
122904 +
122905 + return ret;
122906 +
122907 +}
122908 +
122909 +static int hexstr2bin(const char *hex, u8 *buf, size_t len)
122910 +{
122911 + size_t i;
122912 + int a;
122913 + const char *ipos = hex;
122914 + u8 *opos = buf;
122915 +
122916 + for (i = 0; i < len; i++) {
122917 + a = hex2byte_i(ipos);
122918 + if (a < 0)
122919 + return -1;
122920 + *opos++ = a;
122921 + ipos += 2;
122922 + }
122923 + return 0;
122924 +}
122925 +
122926 +static int uuid_str2bin(const char *str, u8 *bin)
122927 +{
122928 + const char *pos;
122929 + u8 *opos;
122930 +
122931 + pos = str;
122932 + opos = bin;
122933 +
122934 + if (hexstr2bin(pos, opos, 4))
122935 + return -1;
122936 + pos += 8;
122937 + opos += 4;
122938 +
122939 + if (*pos++ != '-' || hexstr2bin(pos, opos, 2))
122940 + return -1;
122941 + pos += 4;
122942 + opos += 2;
122943
122944 - plist = get_next(plist);
122945 -
122946 - }
122947 + if (*pos++ != '-' || hexstr2bin(pos, opos, 2))
122948 + return -1;
122949 + pos += 4;
122950 + opos += 2;
122951
122952 - _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
122953 + if (*pos++ != '-' || hexstr2bin(pos, opos, 2))
122954 + return -1;
122955 + pos += 4;
122956 + opos += 2;
122957
122958 - if ( !blnMatch )
122959 - {
122960 - sprintf( attr_content_str, "\n\nM=0000" );
122961 - }
122962 + if (*pos++ != '-' || hexstr2bin(pos, opos, 6))
122963 + return -1;
122964
122965 - if ( copy_to_user(wrqu->data.pointer, attr_content_str, 6 + 17)) {
122966 - return -EFAULT;
122967 - }
122968 -
122969 - return ret;
122970 -
122971 + return 0;
122972 }
122973
122974 -#ifdef CONFIG_WFD
122975 -static int rtw_p2p_get_peer_WFD_port(struct net_device *dev,
122976 - struct iw_request_info *info,
122977 - union iwreq_data *wrqu, char *extra)
122978 +static int rtw_p2p_set_wps_uuid(struct net_device *dev,
122979 + struct iw_request_info *info,
122980 + union iwreq_data *wrqu, char *extra)
122981 {
122982 -
122983 - int ret = 0;
122984 - _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
122985 - struct iw_point *pdata = &wrqu->data;
122986 - struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
122987
122988 - DBG_871X( "[%s] p2p_state = %d\n", __FUNCTION__, rtw_p2p_state(pwdinfo) );
122989 + int ret = 0;
122990 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
122991 + struct wifidirect_info *pwdinfo = &(padapter->wdinfo);
122992 +
122993 + DBG_871X("[%s] data = %s\n", __FUNCTION__, extra);
122994 +
122995 + if ((36 == strlen(extra)) && (uuid_str2bin(extra, pwdinfo->uuid) == 0))
122996 + {
122997 + pwdinfo->external_uuid = 1;
122998 + } else {
122999 + pwdinfo->external_uuid = 0;
123000 + ret = -EINVAL;
123001 + }
123002
123003 - sprintf( extra, "\n\nPort=%d\n", pwdinfo->wfd_info.peer_rtsp_ctrlport );
123004 - DBG_8192C( "[%s] remote port = %d\n", __FUNCTION__, pwdinfo->wfd_info.peer_rtsp_ctrlport );
123005 -
123006 - wrqu->data.length = strlen( extra );
123007 return ret;
123008 -
123009 -}
123010 -#endif // CONFIG_WFD
123011
123012 -static int rtw_p2p_get_device_name(struct net_device *dev,
123013 +}
123014 +#ifdef CONFIG_WFD
123015 +static int rtw_p2p_set_pc(struct net_device *dev,
123016 struct iw_request_info *info,
123017 union iwreq_data *wrqu, char *extra)
123018 {
123019 @@ -4357,32 +5432,37 @@ static int rtw_p2p_get_device_name(struc
123020 struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
123021 u8 peerMAC[ ETH_ALEN ] = { 0x00 };
123022 int jj,kk;
123023 - u8 peerMACStr[ 17 ] = { 0x00 };
123024 + u8 peerMACStr[ ETH_ALEN * 2 ] = { 0x00 };
123025 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
123026 - _irqL irqL;
123027 _list *plist, *phead;
123028 _queue *queue = &(pmlmepriv->scanned_queue);
123029 struct wlan_network *pnetwork = NULL;
123030 - u8 blnMatch = 0;
123031 - u8 dev_name[ WPS_MAX_DEVICE_NAME_LEN ] = { 0x00 };
123032 - uint dev_len = 0;
123033 - u8 dev_name_str[ WPS_MAX_DEVICE_NAME_LEN + 5 ] = { 0x00 }; // +5 is for the str "devN=", we have to clear it at wrqu->data.pointer
123034 -
123035 - // Commented by Kurt 20110727
123036 - // The input data is the MAC address which the application wants to know its device name.
123037 - // Such user interface could show peer device's device name instead of ssid.
123038 - // Format: iwpriv wlanx p2p_get_wpsCM 00:E0:4C:00:00:05
123039 -
123040 - DBG_8192C( "[%s] data = %s\n", __FUNCTION__, ( char* ) extra );
123041 - //_rtw_memcpy( peerMACStr , extra , 17 );
123042 + u8 attr_content[50] = { 0x00 }, _status = 0;
123043 + u8 *p2pie;
123044 + uint p2pielen = 0, attr_contentlen = 0;
123045 + _irqL irqL;
123046 + uint uintPeerChannel = 0;
123047 +#ifdef CONFIG_CONCURRENT_MODE
123048 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
123049 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
123050 +#endif // CONFIG_CONCURRENT_MODE
123051 + struct wifi_display_info* pwfd_info = pwdinfo->wfd_info;
123052 +
123053 + // Commented by Albert 20120512
123054 + // 1. Input information is the MAC address which wants to know the Preferred Connection bit (PC bit)
123055 + // Format: 00:E0:4C:00:00:05
123056
123057 - if ( copy_from_user(peerMACStr, wrqu->data.pointer + 5 , 17) ) {
123058 - return -EFAULT;
123059 - }
123060 + DBG_871X( "[%s] data = %s\n", __FUNCTION__, extra );
123061
123062 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
123063 + {
123064 + DBG_871X( "[%s] WiFi Direct is disable!\n", __FUNCTION__ );
123065 + return ret;
123066 + }
123067 +
123068 for( jj = 0, kk = 0; jj < ETH_ALEN; jj++, kk += 3 )
123069 {
123070 - peerMAC[ jj ] = key_2char2num( peerMACStr[kk], peerMACStr[kk+ 1] );
123071 + peerMAC[ jj ] = key_2char2num( extra[kk], extra[kk+ 1] );
123072 }
123073
123074 _enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
123075 @@ -4396,146 +5476,260 @@ static int rtw_p2p_get_device_name(struc
123076 break;
123077
123078 pnetwork = LIST_CONTAINOR(plist, struct wlan_network, list);
123079 - if ( _rtw_memcmp( pnetwork->network.MacAddress, peerMAC, ETH_ALEN ) )
123080 - {
123081 - u8 *wpsie;
123082 - uint wpsie_len = 0;
123083
123084 -
123085 - // The mac address is matched.
123086 + // Commented by Albert 2011/05/18
123087 + // Match the device address located in the P2P IE
123088 + // This is for the case that the P2P device address is not the same as the P2P interface address.
123089
123090 - if ( (wpsie=rtw_get_wps_ie( &pnetwork->network.IEs[ 12 ], pnetwork->network.IELength - 12, NULL, &wpsie_len )) )
123091 + if ( (p2pie=rtw_get_p2p_ie( &pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &p2pielen)) )
123092 + {
123093 + // The P2P Device ID attribute is included in the Beacon frame.
123094 + // The P2P Device Info attribute is included in the probe response frame.
123095 + printk( "[%s] Got P2P IE\n", __FUNCTION__ );
123096 + if ( rtw_get_p2p_attr_content( p2pie, p2pielen, P2P_ATTR_DEVICE_ID, attr_content, &attr_contentlen) )
123097 {
123098 - rtw_get_wps_attr_content( wpsie, wpsie_len, WPS_ATTR_DEVICE_NAME, dev_name, &dev_len);
123099 - if ( dev_len )
123100 + // Handle the P2P Device ID attribute of Beacon first
123101 + printk( "[%s] P2P_ATTR_DEVICE_ID \n", __FUNCTION__ );
123102 + if ( _rtw_memcmp( attr_content, peerMAC, ETH_ALEN ) )
123103 {
123104 - sprintf( dev_name_str, "\n\nN=%s", dev_name );
123105 - blnMatch = 1;
123106 + uintPeerChannel = pnetwork->network.Configuration.DSConfig;
123107 + break;
123108 }
123109 - }
123110 - break;
123111 - }
123112 + }
123113 + else if ( rtw_get_p2p_attr_content( p2pie, p2pielen, P2P_ATTR_DEVICE_INFO, attr_content, &attr_contentlen) )
123114 + {
123115 + // Handle the P2P Device Info attribute of probe response
123116 + printk( "[%s] P2P_ATTR_DEVICE_INFO \n", __FUNCTION__ );
123117 + if ( _rtw_memcmp( attr_content, peerMAC, ETH_ALEN ) )
123118 + {
123119 + uintPeerChannel = pnetwork->network.Configuration.DSConfig;
123120 + break;
123121 + }
123122 + }
123123 +
123124 + }
123125
123126 plist = get_next(plist);
123127
123128 - }
123129 + }
123130
123131 _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
123132 + printk( "[%s] channel = %d\n", __FUNCTION__, uintPeerChannel );
123133 +
123134 + if ( uintPeerChannel )
123135 + {
123136 + u8 wfd_ie[ 128 ] = { 0x00 };
123137 + uint wfd_ielen = 0;
123138 +
123139 + if ( rtw_get_wfd_ie( &pnetwork->network.IEs[12], pnetwork->network.IELength - 12, wfd_ie, &wfd_ielen ) )
123140 + {
123141 + u8 wfd_devinfo[ 6 ] = { 0x00 };
123142 + uint wfd_devlen = 6;
123143
123144 - if ( !blnMatch )
123145 + DBG_871X( "[%s] Found WFD IE!\n", __FUNCTION__ );
123146 + if ( rtw_get_wfd_attr_content( wfd_ie, wfd_ielen, WFD_ATTR_DEVICE_INFO, wfd_devinfo, &wfd_devlen ) )
123147 + {
123148 + u16 wfd_devinfo_field = 0;
123149 +
123150 + // Commented by Albert 20120319
123151 + // The first two bytes are the WFD device information field of WFD device information subelement.
123152 + // In big endian format.
123153 + wfd_devinfo_field = RTW_GET_BE16(wfd_devinfo);
123154 + if ( wfd_devinfo_field & WFD_DEVINFO_PC_TDLS )
123155 + {
123156 + pwfd_info->wfd_pc = _TRUE;
123157 + }
123158 + else
123159 + {
123160 + pwfd_info->wfd_pc = _FALSE;
123161 + }
123162 + }
123163 + }
123164 + }
123165 + else
123166 {
123167 - sprintf( dev_name_str, "\n\nN=0000" );
123168 + DBG_871X( "[%s] NOT Found in the Scanning Queue!\n", __FUNCTION__ );
123169 }
123170
123171 - if ( copy_to_user(wrqu->data.pointer, dev_name_str, 5+ (( dev_len > 17 )? dev_len : 17) )) {
123172 - return -EFAULT;
123173 - }
123174 +exit:
123175
123176 return ret;
123177
123178 }
123179
123180 -static int rtw_p2p_connect(struct net_device *dev,
123181 +static int rtw_p2p_set_wfd_device_type(struct net_device *dev,
123182 struct iw_request_info *info,
123183 union iwreq_data *wrqu, char *extra)
123184 {
123185
123186 int ret = 0;
123187 - _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
123188 - struct iw_point *pdata = &wrqu->data;
123189 - struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
123190 - u8 peerMAC[ ETH_ALEN ] = { 0x00 };
123191 - int jj,kk;
123192 - u8 peerMACStr[ ETH_ALEN * 2 ] = { 0x00 };
123193 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
123194 - _irqL irqL;
123195 - _list *plist, *phead;
123196 - _queue *queue = &(pmlmepriv->scanned_queue);
123197 - struct wlan_network *pnetwork = NULL;
123198 - uint uintPeerChannel = 0;
123199 -
123200 - // Commented by Albert 20110304
123201 - // The input data contains two informations.
123202 - // 1. First information is the MAC address which wants to formate with
123203 - // 2. Second information is the WPS PINCode or "pbc" string for push button method
123204 - // Format: 00:E0:4C:00:00:05
123205 - // Format: 00:E0:4C:00:00:05
123206 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
123207 + struct iw_point *pdata = &wrqu->data;
123208 + struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
123209 + struct wifi_display_info *pwfd_info = pwdinfo->wfd_info;
123210
123211 - DBG_8192C( "[%s] data = %s\n", __FUNCTION__, extra );
123212 + // Commented by Albert 20120328
123213 + // The input data is 0 or 1
123214 + // 0: specify to Miracast source device
123215 + // 1 or others: specify to Miracast sink device (display device)
123216 +
123217 + DBG_871X( "[%s] data = %s\n", __FUNCTION__, extra );
123218
123219 - if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE) || rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE))
123220 + if ( extra[ 0 ] == '0' ) // Set to Miracast source device.
123221 {
123222 - DBG_8192C( "[%s] WiFi Direct is disable!\n", __FUNCTION__ );
123223 - return ret;
123224 + pwfd_info->wfd_device_type = WFD_DEVINFO_SOURCE;
123225 }
123226 -
123227 - if ( pwdinfo->ui_got_wps_info == P2P_NO_WPSINFO )
123228 + else // Set to Miracast sink device.
123229 {
123230 - return -1;
123231 + pwfd_info->wfd_device_type = WFD_DEVINFO_PSINK;
123232 }
123233
123234 - for( jj = 0, kk = 0; jj < ETH_ALEN; jj++, kk += 3 )
123235 +exit:
123236 +
123237 + return ret;
123238 +
123239 +}
123240 +
123241 +static int rtw_p2p_set_scan_result_type(struct net_device *dev,
123242 + struct iw_request_info *info,
123243 + union iwreq_data *wrqu, char *extra)
123244 +{
123245 +
123246 + int ret = 0;
123247 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
123248 + struct iw_point *pdata = &wrqu->data;
123249 + struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
123250 + struct wifi_display_info *pwfd_info = pwdinfo->wfd_info;
123251 +
123252 + // Commented by Albert 20120328
123253 + // The input data is 0 , 1 , 2
123254 + // 0: when the P2P is enabled, the scan result will return all the found P2P device.
123255 + // 1: when the P2P is enabled, the scan result will return all the found P2P device and AP.
123256 + // 2: when the P2P is enabled, the scan result will show up the found Miracast devices base on...
123257 + // It will show up all the Miracast source device if this device is sink.
123258 + // It will show up all the Miracast sink device if this device is source.
123259 +
123260 + DBG_871X( "[%s] data = %s\n", __FUNCTION__, extra );
123261 +
123262 + if ( extra[ 0 ] == '0' )
123263 {
123264 - peerMAC[ jj ] = key_2char2num( extra[kk], extra[kk+ 1] );
123265 + pwfd_info->scan_result_type = SCAN_RESULT_P2P_ONLY;
123266 + }
123267 + else if ( extra[ 0 ] == '1' )
123268 + {
123269 + pwfd_info->scan_result_type = SCAN_RESULT_ALL;
123270 + }
123271 + else if ( extra[ 0 ] == '2' )
123272 + {
123273 + pwfd_info->scan_result_type = SCAN_RESULT_WFD_TYPE;
123274 + }
123275 + else
123276 + {
123277 + pwfd_info->scan_result_type = SCAN_RESULT_P2P_ONLY;
123278 }
123279 +
123280 +exit:
123281 +
123282 + return ret;
123283 +
123284 +}
123285
123286 - _enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
123287 +static int rtw_p2p_set_wfd_enable(struct net_device *dev,
123288 + struct iw_request_info *info,
123289 + union iwreq_data *wrqu, char *extra)
123290 +{
123291 +// Commented by Kurt 20121206
123292 +// This function is used to set wfd enabled
123293
123294 - phead = get_list_head(queue);
123295 - plist = get_next(phead);
123296 -
123297 - while(1)
123298 - {
123299 - if (rtw_end_of_queue_search(phead,plist)== _TRUE)
123300 - break;
123301 + int ret = 0;
123302 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
123303 + struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
123304
123305 - pnetwork = LIST_CONTAINOR(plist, struct wlan_network, list);
123306 - if ( _rtw_memcmp( pnetwork->network.MacAddress, peerMAC, ETH_ALEN ) )
123307 - {
123308 - uintPeerChannel = pnetwork->network.Configuration.DSConfig;
123309 - break;
123310 - }
123311 + if(*extra == '0' )
123312 + pwdinfo->wfd_info->wfd_enable = _FALSE;
123313 + else if(*extra == '1')
123314 + pwdinfo->wfd_info->wfd_enable = _TRUE;
123315
123316 - plist = get_next(plist);
123317 + DBG_871X( "[%s] wfd_enable = %d\n", __FUNCTION__, pwdinfo->wfd_info->wfd_enable );
123318
123319 - }
123320 + return ret;
123321 +
123322 +}
123323
123324 - _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
123325 +static int rtw_p2p_set_driver_iface(struct net_device *dev,
123326 + struct iw_request_info *info,
123327 + union iwreq_data *wrqu, char *extra)
123328 +{
123329 +// Commented by Kurt 20121206
123330 +// This function is used to set driver iface is WEXT or CFG80211
123331 + int ret = 0;
123332 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
123333 + struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
123334
123335 - if ( uintPeerChannel )
123336 + if(*extra == '1' )
123337 {
123338 - _rtw_memset( &pwdinfo->nego_req_info, 0x00, sizeof( struct tx_nego_req_info ) );
123339 - _rtw_memset( &pwdinfo->groupid_info, 0x00, sizeof( struct group_id_info ) );
123340 -
123341 - pwdinfo->nego_req_info.peer_channel_num[ 0 ] = uintPeerChannel;
123342 - _rtw_memcpy( pwdinfo->nego_req_info.peerDevAddr, pnetwork->network.MacAddress, ETH_ALEN );
123343 - pwdinfo->nego_req_info.benable = _TRUE;
123344 -
123345 - rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
123346 - rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_ING);
123347 + pwdinfo->driver_interface = DRIVER_WEXT;
123348 + DBG_871X( "[%s] driver_interface = WEXT\n", __FUNCTION__);
123349 + }
123350 + else if(*extra == '2')
123351 + {
123352 + pwdinfo->driver_interface = DRIVER_CFG80211;
123353 + DBG_871X( "[%s] driver_interface = CFG80211\n", __FUNCTION__);
123354 + }
123355 +
123356 + return ret;
123357
123358 - DBG_8192C( "[%s] Start PreTx Procedure!\n", __FUNCTION__ );
123359 - _set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
123360 - _set_timer( &pwdinfo->restore_p2p_state_timer, P2P_GO_NEGO_TIMEOUT );
123361 +}
123362 +
123363 +// To set the WFD session available to enable or disable
123364 +static int rtw_p2p_set_sa(struct net_device *dev,
123365 + struct iw_request_info *info,
123366 + union iwreq_data *wrqu, char *extra)
123367 +{
123368 +
123369 + int ret = 0;
123370 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
123371 + struct iw_point *pdata = &wrqu->data;
123372 + struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
123373 + struct wifi_display_info *pwfd_info = pwdinfo->wfd_info;
123374 +
123375 + DBG_871X( "[%s] data = %s\n", __FUNCTION__, extra );
123376 +
123377 + if( 0 )
123378 + {
123379 + DBG_871X( "[%s] WiFi Direct is disable!\n", __FUNCTION__ );
123380 + return ret;
123381 }
123382 else
123383 {
123384 - DBG_8192C( "[%s] Not Found in Scanning Queue~\n", __FUNCTION__ );
123385 - ret = -1;
123386 + if ( extra[ 0 ] == '0' ) // Disable the session available.
123387 + {
123388 + pwdinfo->session_available = _FALSE;
123389 + }
123390 + else if ( extra[ 0 ] == '1' ) // Enable the session available.
123391 + {
123392 + pwdinfo->session_available = _TRUE;
123393 + }
123394 + else
123395 + {
123396 + pwdinfo->session_available = _FALSE;
123397 + }
123398 }
123399 + printk( "[%s] session available = %d\n", __FUNCTION__, pwdinfo->session_available );
123400 +
123401 exit:
123402
123403 - return ret;
123404 + return ret;
123405 +
123406 }
123407 +#endif //CONFIG_WFD
123408
123409 static int rtw_p2p_prov_disc(struct net_device *dev,
123410 struct iw_request_info *info,
123411 union iwreq_data *wrqu, char *extra)
123412 -{
123413 -
123414 +{
123415 int ret = 0;
123416 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
123417 - struct iw_point *pdata = &wrqu->data;
123418 struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
123419 u8 peerMAC[ ETH_ALEN ] = { 0x00 };
123420 int jj,kk;
123421 @@ -4545,10 +5739,19 @@ static int rtw_p2p_prov_disc(struct net_
123422 _queue *queue = &(pmlmepriv->scanned_queue);
123423 struct wlan_network *pnetwork = NULL;
123424 uint uintPeerChannel = 0;
123425 - u8 attr_content[50] = { 0x00 }, _status = 0;
123426 + u8 attr_content[100] = { 0x00 }, _status = 0;
123427 u8 *p2pie;
123428 uint p2pielen = 0, attr_contentlen = 0;
123429 _irqL irqL;
123430 + u8 ie_offset;
123431 +#ifdef CONFIG_CONCURRENT_MODE
123432 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
123433 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
123434 +#endif // CONFIG_CONCURRENT_MODE
123435 +
123436 +#ifdef CONFIG_WFD
123437 + struct wifi_display_info* pwfd_info = pwdinfo->wfd_info;
123438 +#endif // CONFIG_WFD
123439
123440 // Commented by Albert 20110301
123441 // The input data contains two informations.
123442 @@ -4559,21 +5762,28 @@ static int rtw_p2p_prov_disc(struct net_
123443 // Format: 00:E0:4C:00:00:05_pbc
123444 // Format: 00:E0:4C:00:00:05_label
123445
123446 - DBG_8192C( "[%s] data = %s\n", __FUNCTION__, extra );
123447 + DBG_871X( "[%s] data = %s\n", __FUNCTION__, extra );
123448
123449 - if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE) || rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE))
123450 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
123451 {
123452 - DBG_8192C( "[%s] WiFi Direct is disable!\n", __FUNCTION__ );
123453 + DBG_871X( "[%s] WiFi Direct is disable!\n", __FUNCTION__ );
123454 return ret;
123455 }
123456 else
123457 {
123458 +#ifdef CONFIG_INTEL_WIDI
123459 + if(check_fwstate(pmlmepriv, _FW_UNDER_SURVEY) == _TRUE){
123460 + DBG_871X( "[%s] WiFi is under survey!\n", __FUNCTION__ );
123461 + return ret;
123462 + }
123463 +#endif //CONFIG_INTEL_WIDI
123464 +
123465 // Reset the content of struct tx_provdisc_req_info excluded the wps_config_method_request.
123466 _rtw_memset( pwdinfo->tx_prov_disc_info.peerDevAddr, 0x00, ETH_ALEN );
123467 _rtw_memset( pwdinfo->tx_prov_disc_info.peerIFAddr, 0x00, ETH_ALEN );
123468 _rtw_memset( &pwdinfo->tx_prov_disc_info.ssid, 0x00, sizeof( NDIS_802_11_SSID ) );
123469 pwdinfo->tx_prov_disc_info.peer_channel_num[ 0 ] = 0;
123470 - pwdinfo->tx_prov_disc_info.peer_channel_num[ 1 ] = 0;
123471 + pwdinfo->tx_prov_disc_info.peer_channel_num[ 1 ] = 0;
123472 pwdinfo->tx_prov_disc_info.benable = _FALSE;
123473 }
123474
123475 @@ -4600,10 +5810,11 @@ static int rtw_p2p_prov_disc(struct net_
123476 }
123477 else
123478 {
123479 - DBG_8192C( "[%s] Unknown WPS config methodn", __FUNCTION__ );
123480 + DBG_871X( "[%s] Unknown WPS config methodn", __FUNCTION__ );
123481 return( ret );
123482 }
123483
123484 +
123485 _enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
123486
123487 phead = get_list_head(queue);
123488 @@ -4614,37 +5825,64 @@ static int rtw_p2p_prov_disc(struct net_
123489 if (rtw_end_of_queue_search(phead,plist)== _TRUE)
123490 break;
123491
123492 + if( uintPeerChannel != 0 )
123493 + break;
123494 +
123495 pnetwork = LIST_CONTAINOR(plist, struct wlan_network, list);
123496
123497 // Commented by Albert 2011/05/18
123498 // Match the device address located in the P2P IE
123499 // This is for the case that the P2P device address is not the same as the P2P interface address.
123500
123501 - if ( (p2pie=rtw_get_p2p_ie( &pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &p2pielen)) )
123502 + if (pnetwork->network.Reserved[0] == 2) { // Probe Request
123503 + ie_offset = 0;
123504 + } else { // Beacon or Probe Respones
123505 + ie_offset = 12;
123506 + }
123507 + if ( (p2pie=rtw_get_p2p_ie( &pnetwork->network.IEs[ie_offset], pnetwork->network.IELength - ie_offset, NULL, &p2pielen)) )
123508 {
123509 - // The P2P Device ID attribute is included in the Beacon frame.
123510 - // The P2P Device Info attribute is included in the probe response frame.
123511 -
123512 - if ( rtw_get_p2p_attr_content( p2pie, p2pielen, P2P_ATTR_DEVICE_ID, attr_content, &attr_contentlen) )
123513 + while ( p2pie )
123514 {
123515 - // Handle the P2P Device ID attribute of Beacon first
123516 - if ( _rtw_memcmp( attr_content, peerMAC, ETH_ALEN ) )
123517 + // The P2P Device ID attribute is included in the Beacon frame.
123518 + // The P2P Device Info attribute is included in the probe response frame.
123519 +
123520 + if ( rtw_get_p2p_attr_content( p2pie, p2pielen, P2P_ATTR_DEVICE_ID, attr_content, &attr_contentlen) )
123521 {
123522 - uintPeerChannel = pnetwork->network.Configuration.DSConfig;
123523 - break;
123524 + // Handle the P2P Device ID attribute of Beacon first
123525 + if ( _rtw_memcmp( attr_content, peerMAC, ETH_ALEN ) )
123526 + {
123527 + uintPeerChannel = pnetwork->network.Configuration.DSConfig;
123528 + break;
123529 + }
123530 + }
123531 + else if ( rtw_get_p2p_attr_content( p2pie, p2pielen, P2P_ATTR_DEVICE_INFO, attr_content, &attr_contentlen) )
123532 + {
123533 + // Handle the P2P Device Info attribute of probe response
123534 + if ( _rtw_memcmp( attr_content, peerMAC, ETH_ALEN ) )
123535 + {
123536 + uintPeerChannel = pnetwork->network.Configuration.DSConfig;
123537 + break;
123538 + }
123539 }
123540 +
123541 + //Get the next P2P IE
123542 + p2pie = rtw_get_p2p_ie(p2pie+p2pielen, pnetwork->network.IELength - ie_offset -(p2pie -&pnetwork->network.IEs[ie_offset] + p2pielen), NULL, &p2pielen);
123543 }
123544 - else if ( rtw_get_p2p_attr_content( p2pie, p2pielen, P2P_ATTR_DEVICE_INFO, attr_content, &attr_contentlen) )
123545 + }
123546 +
123547 +#ifdef CONFIG_INTEL_WIDI
123548 + // Some Intel WiDi source may not provide P2P IE,
123549 + // so we could only compare mac addr by 802.11 Source Address
123550 + if( pmlmepriv->widi_state == INTEL_WIDI_STATE_WFD_CONNECTION
123551 + && uintPeerChannel == 0 )
123552 {
123553 - // Handle the P2P Device Info attribute of probe response
123554 - if ( _rtw_memcmp( attr_content, peerMAC, ETH_ALEN ) )
123555 + if ( _rtw_memcmp( pnetwork->network.MacAddress, peerMAC, ETH_ALEN ) )
123556 {
123557 uintPeerChannel = pnetwork->network.Configuration.DSConfig;
123558 break;
123559 - }
123560 + }
123561 }
123562 -
123563 - }
123564 +#endif //CONFIG_INTEL_WIDI
123565
123566 plist = get_next(plist);
123567
123568 @@ -4654,6 +5892,51 @@ static int rtw_p2p_prov_disc(struct net_
123569
123570 if ( uintPeerChannel )
123571 {
123572 +#ifdef CONFIG_WFD
123573 + {
123574 + u8 wfd_ie[ 128 ] = { 0x00 };
123575 + uint wfd_ielen = 0;
123576 +
123577 + if ( rtw_get_wfd_ie( &pnetwork->network.IEs[12], pnetwork->network.IELength - 12, wfd_ie, &wfd_ielen ) )
123578 + {
123579 + u8 wfd_devinfo[ 6 ] = { 0x00 };
123580 + uint wfd_devlen = 6;
123581 +
123582 + DBG_871X( "[%s] Found WFD IE!\n", __FUNCTION__ );
123583 + if ( rtw_get_wfd_attr_content( wfd_ie, wfd_ielen, WFD_ATTR_DEVICE_INFO, wfd_devinfo, &wfd_devlen ) )
123584 + {
123585 + u16 wfd_devinfo_field = 0;
123586 +
123587 + // Commented by Albert 20120319
123588 + // The first two bytes are the WFD device information field of WFD device information subelement.
123589 + // In big endian format.
123590 + wfd_devinfo_field = RTW_GET_BE16(wfd_devinfo);
123591 + if ( wfd_devinfo_field & WFD_DEVINFO_SESSION_AVAIL )
123592 + {
123593 + pwfd_info->peer_session_avail = _TRUE;
123594 + }
123595 + else
123596 + {
123597 + pwfd_info->peer_session_avail = _FALSE;
123598 + }
123599 + }
123600 + }
123601 +
123602 + if ( _FALSE == pwfd_info->peer_session_avail )
123603 + {
123604 + DBG_871X( "[%s] WFD Session not avaiable!\n", __FUNCTION__ );
123605 + goto exit;
123606 + }
123607 + }
123608 +#endif // CONFIG_WFD
123609 +
123610 + DBG_871X( "[%s] peer channel: %d!\n", __FUNCTION__, uintPeerChannel );
123611 +#ifdef CONFIG_CONCURRENT_MODE
123612 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
123613 + {
123614 + _cancel_timer_ex( &pwdinfo->ap_p2p_switch_timer );
123615 + }
123616 +#endif // CONFIG_CONCURRENT_MODE
123617 _rtw_memcpy( pwdinfo->tx_prov_disc_info.peerIFAddr, pnetwork->network.MacAddress, ETH_ALEN );
123618 _rtw_memcpy( pwdinfo->tx_prov_disc_info.peerDevAddr, peerMAC, ETH_ALEN );
123619 pwdinfo->tx_prov_disc_info.peer_channel_num[0] = ( u16 ) uintPeerChannel;
123620 @@ -4665,20 +5948,56 @@ static int rtw_p2p_prov_disc(struct net_
123621 {
123622 _rtw_memcpy( &pwdinfo->tx_prov_disc_info.ssid, &pnetwork->network.Ssid, sizeof( NDIS_802_11_SSID ) );
123623 }
123624 - else if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_DEVICE) || rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
123625 + else if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_DEVICE) || rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
123626 {
123627 _rtw_memcpy( pwdinfo->tx_prov_disc_info.ssid.Ssid, pwdinfo->p2p_wildcard_ssid, P2P_WILDCARD_SSID_LEN );
123628 pwdinfo->tx_prov_disc_info.ssid.SsidLength= P2P_WILDCARD_SSID_LEN;
123629 }
123630
123631 +#ifdef CONFIG_CONCURRENT_MODE
123632 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
123633 + {
123634 + // Have to enter the power saving with the AP
123635 + set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
123636 +
123637 + issue_nulldata(pbuddy_adapter, NULL, 1, 3, 500);
123638 + }
123639 + else
123640 + {
123641 + set_channel_bwmode(padapter, uintPeerChannel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
123642 + }
123643 +#else
123644 set_channel_bwmode(padapter, uintPeerChannel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
123645 +#endif
123646 +
123647 _set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
123648 +
123649 +#ifdef CONFIG_CONCURRENT_MODE
123650 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
123651 + {
123652 + _set_timer( &pwdinfo->restore_p2p_state_timer, P2P_CONCURRENT_PROVISION_TIMEOUT );
123653 + }
123654 + else
123655 + {
123656 + _set_timer( &pwdinfo->restore_p2p_state_timer, P2P_PROVISION_TIMEOUT );
123657 + }
123658 +#else
123659 _set_timer( &pwdinfo->restore_p2p_state_timer, P2P_PROVISION_TIMEOUT );
123660 +#endif // CONFIG_CONCURRENT_MODE
123661 +
123662
123663 }
123664 else
123665 {
123666 - DBG_8192C( "[%s] NOT Found in the Scanning Queue!\n", __FUNCTION__ );
123667 + DBG_871X( "[%s] NOT Found in the Scanning Queue!\n", __FUNCTION__ );
123668 +#ifdef CONFIG_INTEL_WIDI
123669 + rtw_p2p_set_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH);
123670 + rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_NONE);
123671 + rtw_free_network_queue(padapter, _TRUE);
123672 + _enter_critical_bh(&pmlmepriv->lock, &irqL);
123673 + rtw_sitesurvey_cmd(padapter, NULL, 0, NULL, 0);
123674 + _exit_critical_bh(&pmlmepriv->lock, &irqL);
123675 +#endif //CONFIG_INTEL_WIDI
123676 }
123677 exit:
123678
123679 @@ -4697,11 +6016,10 @@ static int rtw_p2p_got_wpsinfo(struct ne
123680
123681 int ret = 0;
123682 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
123683 - struct iw_point *pdata = &wrqu->data;
123684 struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
123685
123686
123687 - DBG_8192C( "[%s] data = %s\n", __FUNCTION__, extra );
123688 + DBG_871X( "[%s] data = %s\n", __FUNCTION__, extra );
123689 // Added by Albert 20110328
123690 // if the input data is P2P_NO_WPSINFO -> reset the wpsinfo
123691 // if the input data is P2P_GOT_WPSINFO_PEER_DISPLAY_PIN -> the utility just input the PIN code got from the peer P2P device.
123692 @@ -4749,7 +6067,7 @@ static int rtw_p2p_set(struct net_device
123693 struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
123694 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
123695
123696 - DBG_8192C( "[%s] extra = %s\n", __FUNCTION__, extra );
123697 + DBG_871X( "[%s] extra = %s\n", __FUNCTION__, extra );
123698
123699 if ( _rtw_memcmp( extra, "enable=", 7 ) )
123700 {
123701 @@ -4809,8 +6127,56 @@ static int rtw_p2p_set(struct net_device
123702 wrqu->data.length -= 7;
123703 rtw_p2p_set_op_ch( dev, info, wrqu, &extra[6] );
123704 }
123705 -
123706 -
123707 + else if ( _rtw_memcmp( extra, "invite=", 7 ) )
123708 + {
123709 + wrqu->data.length -= 8;
123710 + rtw_p2p_invite_req( dev, info, wrqu, &extra[7] );
123711 + }
123712 + else if ( _rtw_memcmp( extra, "persistent=", 11 ) )
123713 + {
123714 + wrqu->data.length -= 11;
123715 + rtw_p2p_set_persistent( dev, info, wrqu, &extra[11] );
123716 + }
123717 + else if ( _rtw_memcmp ( extra, "uuid=", 5) )
123718 + {
123719 + wrqu->data.length -= 5;
123720 + ret = rtw_p2p_set_wps_uuid( dev, info, wrqu, &extra[5] );
123721 + }
123722 +#ifdef CONFIG_WFD
123723 + else if ( _rtw_memcmp( extra, "sa=", 3 ) )
123724 + {
123725 + // sa: WFD Session Available information
123726 + wrqu->data.length -= 3;
123727 + rtw_p2p_set_sa( dev, info, wrqu, &extra[3] );
123728 + }
123729 + else if ( _rtw_memcmp( extra, "pc=", 3 ) )
123730 + {
123731 + // pc: WFD Preferred Connection
123732 + wrqu->data.length -= 3;
123733 + rtw_p2p_set_pc( dev, info, wrqu, &extra[3] );
123734 + }
123735 + else if ( _rtw_memcmp( extra, "wfd_type=", 9 ) )
123736 + {
123737 + // Specify this device is Mircast source or sink
123738 + wrqu->data.length -= 9;
123739 + rtw_p2p_set_wfd_device_type( dev, info, wrqu, &extra[9] );
123740 + }
123741 + else if ( _rtw_memcmp( extra, "scan_type=", 10 ) )
123742 + {
123743 + wrqu->data.length -= 10;
123744 + rtw_p2p_set_scan_result_type( dev, info, wrqu, &extra[10] );
123745 + }
123746 + else if ( _rtw_memcmp( extra, "wfd_enable=", 11 ) )
123747 + {
123748 + wrqu->data.length -= 11;
123749 + rtw_p2p_set_wfd_enable( dev, info, wrqu, &extra[11] );
123750 + }
123751 + else if ( _rtw_memcmp( extra, "driver_iface=", 13 ) )
123752 + {
123753 + wrqu->data.length -= 13;
123754 + rtw_p2p_set_driver_iface( dev, info, wrqu, &extra[13] );
123755 + }
123756 +#endif //CONFIG_WFD
123757 #endif //CONFIG_P2P
123758
123759 return ret;
123760 @@ -4832,7 +6198,10 @@ static int rtw_p2p_get(struct net_device
123761 struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
123762 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
123763
123764 - DBG_8192C( "[%s] extra = %s\n", __FUNCTION__, (char*) wrqu->data.pointer );
123765 + if ( padapter->bShowGetP2PState )
123766 + {
123767 + DBG_871X( "[%s] extra = %s\n", __FUNCTION__, (char*) wrqu->data.pointer );
123768 + }
123769
123770 if ( _rtw_memcmp( wrqu->data.pointer, "status", 6 ) )
123771 {
123772 @@ -4852,16 +6221,34 @@ static int rtw_p2p_get(struct net_device
123773 }
123774 else if ( _rtw_memcmp( wrqu->data.pointer, "peer_deva", 9 ) )
123775 {
123776 + // Get the P2P device address when receiving the provision discovery request frame.
123777 rtw_p2p_get_peer_devaddr( dev, info, wrqu, extra);
123778 }
123779 else if ( _rtw_memcmp( wrqu->data.pointer, "group_id", 8 ) )
123780 {
123781 rtw_p2p_get_groupid( dev, info, wrqu, extra);
123782 }
123783 + else if ( _rtw_memcmp( wrqu->data.pointer, "inv_peer_deva", 13 ) )
123784 + {
123785 + // Get the P2P device address when receiving the P2P Invitation request frame.
123786 + rtw_p2p_get_peer_devaddr_by_invitation( dev, info, wrqu, extra);
123787 + }
123788 + else if ( _rtw_memcmp( wrqu->data.pointer, "op_ch", 5 ) )
123789 + {
123790 + rtw_p2p_get_op_ch( dev, info, wrqu, extra);
123791 + }
123792 #ifdef CONFIG_WFD
123793 else if ( _rtw_memcmp( wrqu->data.pointer, "peer_port", 9 ) )
123794 {
123795 - rtw_p2p_get_peer_WFD_port( dev, info, wrqu, extra );
123796 + rtw_p2p_get_peer_wfd_port( dev, info, wrqu, extra );
123797 + }
123798 + else if ( _rtw_memcmp( wrqu->data.pointer, "wfd_sa", 6 ) )
123799 + {
123800 + rtw_p2p_get_peer_wfd_session_available( dev, info, wrqu, extra );
123801 + }
123802 + else if ( _rtw_memcmp( wrqu->data.pointer, "wfd_pc", 6 ) )
123803 + {
123804 + rtw_p2p_get_peer_wfd_preferred_connection( dev, info, wrqu, extra );
123805 }
123806 #endif // CONFIG_WFD
123807
123808 @@ -4872,40 +6259,64 @@ static int rtw_p2p_get(struct net_device
123809 }
123810
123811 static int rtw_p2p_get2(struct net_device *dev,
123812 - struct iw_request_info *info,
123813 - union iwreq_data *wrqu, char *extra)
123814 + struct iw_request_info *info,
123815 + union iwreq_data *wrqu, char *extra)
123816 {
123817 -
123818 - int ret = 0;
123819 -
123820 +
123821 + int ret = 0;
123822 +
123823 #ifdef CONFIG_P2P
123824
123825 - _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
123826 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
123827 - struct iw_point *pdata = &wrqu->data;
123828 - struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
123829 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
123830 + int length = wrqu->data.length;
123831 + char *buffer = (u8 *)rtw_malloc(length);
123832
123833 - DBG_8192C( "[%s] extra = %s\n", __FUNCTION__, (char*) wrqu->data.pointer );
123834 -
123835 - if ( _rtw_memcmp( extra, "wpsCM=", 6 ) )
123836 + if (buffer == NULL)
123837 {
123838 - wrqu->data.length -= 6;
123839 - rtw_p2p_get_wps_configmethod( dev, info, wrqu, &extra[6]);
123840 + ret = -ENOMEM;
123841 + goto bad;
123842 }
123843 - else if ( _rtw_memcmp( extra, "devN=", 5 ) )
123844 +
123845 + if (copy_from_user(buffer, wrqu->data.pointer, wrqu->data.length))
123846 {
123847 - wrqu->data.length -= 5;
123848 - rtw_p2p_get_device_name( dev, info, wrqu, &extra[5] );
123849 + ret - EFAULT;
123850 + goto bad;
123851 }
123852 -
123853 +
123854 + DBG_871X("[%s] buffer = %s\n", __FUNCTION__, buffer);
123855 +
123856 + if (_rtw_memcmp(buffer, "wpsCM=", 6))
123857 + {
123858 + ret = rtw_p2p_get_wps_configmethod(dev, info, wrqu, extra, &buffer[6]);
123859 + } else if (_rtw_memcmp(buffer, "devN=", 5))
123860 + {
123861 + ret = rtw_p2p_get_device_name(dev, info, wrqu, extra, &buffer[5]);
123862 + } else if (_rtw_memcmp(buffer, "dev_type=", 9))
123863 + {
123864 + ret = rtw_p2p_get_device_type(dev, info, wrqu, extra, &buffer[9]);
123865 + } else if (_rtw_memcmp(buffer, "go_devadd=", 10))
123866 + {
123867 + ret = rtw_p2p_get_go_device_address(dev, info, wrqu, extra, &buffer[10]);
123868 + } else if (_rtw_memcmp(buffer, "InvProc=", 8))
123869 + {
123870 + ret = rtw_p2p_get_invitation_procedure(dev, info, wrqu, extra, &buffer[8]);
123871 + } else
123872 + {
123873 + snprintf(extra, sizeof("Command not found."), "Command not found.");
123874 + wrqu->data.length = strlen(extra);
123875 + }
123876 +
123877 +bad:
123878 + if (buffer)
123879 + {
123880 + rtw_mfree(buffer, length);
123881 + }
123882 +
123883 #endif //CONFIG_P2P
123884
123885 return ret;
123886 -
123887 +
123888 }
123889
123890 -extern char *ifname;
123891 extern int rtw_change_ifname(_adapter *padapter, const char *ifname);
123892 static int rtw_rereg_nd_name(struct net_device *dev,
123893 struct iw_request_info *info,
123894 @@ -4917,7 +6328,15 @@ static int rtw_rereg_nd_name(struct net_
123895 char new_ifname[IFNAMSIZ];
123896
123897 if(rereg_priv->old_ifname[0] == 0) {
123898 - strncpy(rereg_priv->old_ifname, ifname, IFNAMSIZ);
123899 + char *reg_ifname;
123900 +#ifdef CONFIG_CONCURRENT_MODE
123901 + if (padapter->isprimary)
123902 + reg_ifname = padapter->registrypriv.ifname;
123903 + else
123904 +#endif
123905 + reg_ifname = padapter->registrypriv.if2name;
123906 +
123907 + strncpy(rereg_priv->old_ifname, reg_ifname, IFNAMSIZ);
123908 rereg_priv->old_ifname[IFNAMSIZ-1] = 0;
123909 }
123910
123911 @@ -4940,7 +6359,7 @@ static int rtw_rereg_nd_name(struct net_
123912
123913 if(_rtw_memcmp(rereg_priv->old_ifname, "disable%d", 9) == _TRUE) {
123914 padapter->ledpriv.bRegUseLed= rereg_priv->old_bRegUseLed;
123915 - rtw_sw_led_init(padapter);
123916 + rtw_hal_sw_led_init(padapter);
123917 rtw_ips_mode_req(&padapter->pwrctrlpriv, rereg_priv->old_ips_mode);
123918 }
123919
123920 @@ -4957,7 +6376,7 @@ static int rtw_rereg_nd_name(struct net_
123921 rtw_led_control(padapter, LED_CTL_POWER_OFF);
123922 rereg_priv->old_bRegUseLed = padapter->ledpriv.bRegUseLed;
123923 padapter->ledpriv.bRegUseLed= _FALSE;
123924 - rtw_sw_led_deinit(padapter);
123925 + rtw_hal_sw_led_deinit(padapter);
123926
123927 // the interface is being "disabled", we can do deeper IPS
123928 rereg_priv->old_ips_mode = rtw_get_ips_mode_req(&padapter->pwrctrlpriv);
123929 @@ -4972,46 +6391,46 @@ exit:
123930 void mac_reg_dump(_adapter *padapter)
123931 {
123932 int i,j=1;
123933 - DBG_8192C("\n======= MAC REG =======\n");
123934 + DBG_871X("\n======= MAC REG =======\n");
123935 for(i=0x0;i<0x300;i+=4)
123936 {
123937 - if(j%4==1) DBG_8192C("0x%02x",i);
123938 - DBG_8192C(" 0x%08x ",rtw_read32(padapter,i));
123939 - if((j++)%4 == 0) DBG_8192C("\n");
123940 + if(j%4==1) DBG_871X("0x%02x",i);
123941 + DBG_871X(" 0x%08x ",rtw_read32(padapter,i));
123942 + if((j++)%4 == 0) DBG_871X("\n");
123943 }
123944 for(i=0x400;i<0x800;i+=4)
123945 {
123946 - if(j%4==1) DBG_8192C("0x%02x",i);
123947 - DBG_8192C(" 0x%08x ",rtw_read32(padapter,i));
123948 - if((j++)%4 == 0) DBG_8192C("\n");
123949 + if(j%4==1) DBG_871X("0x%02x",i);
123950 + DBG_871X(" 0x%08x ",rtw_read32(padapter,i));
123951 + if((j++)%4 == 0) DBG_871X("\n");
123952 }
123953 }
123954 void bb_reg_dump(_adapter *padapter)
123955 {
123956 int i,j=1;
123957 - DBG_8192C("\n======= BB REG =======\n");
123958 + DBG_871X("\n======= BB REG =======\n");
123959 for(i=0x800;i<0x1000;i+=4)
123960 {
123961 - if(j%4==1) DBG_8192C("0x%02x",i);
123962 + if(j%4==1) DBG_871X("0x%02x",i);
123963
123964 - DBG_8192C(" 0x%08x ",rtw_read32(padapter,i));
123965 - if((j++)%4 == 0) DBG_8192C("\n");
123966 + DBG_871X(" 0x%08x ",rtw_read32(padapter,i));
123967 + if((j++)%4 == 0) DBG_871X("\n");
123968 }
123969 }
123970 void rf_reg_dump(_adapter *padapter)
123971 {
123972 int i,j=1,path;
123973 u32 value;
123974 - DBG_8192C("\n======= RF REG =======\n");
123975 + DBG_871X("\n======= RF REG =======\n");
123976 for(path=0;path<2;path++)
123977 {
123978 - DBG_8192C("\nRF_Path(%x)\n",path);
123979 + DBG_871X("\nRF_Path(%x)\n",path);
123980 for(i=0;i<0x100;i++)
123981 {
123982 value = PHY_QueryRFReg(padapter, (RF90_RADIO_PATH_E)path,i, bMaskDWord);
123983 - if(j%4==1) DBG_8192C("0x%02x ",i);
123984 - DBG_8192C(" 0x%08x ",value);
123985 - if((j++)%4==0) DBG_8192C("\n");
123986 + if(j%4==1) DBG_871X("0x%02x ",i);
123987 + DBG_871X(" 0x%08x ",value);
123988 + if((j++)%4==0) DBG_871X("\n");
123989 }
123990 }
123991 }
123992 @@ -5021,30 +6440,30 @@ void rf_reg_dump(_adapter *padapter)
123993 void mac_reg_dump(_adapter *padapter)
123994 {
123995 int i,j=1;
123996 - DBG_8192C("\n======= MAC REG =======\n");
123997 + DBG_871X("\n======= MAC REG =======\n");
123998 for(i=0x0;i<0x300;i+=4)
123999 {
124000 - if(j%4==1) DBG_8192C("0x%02x",i);
124001 - DBG_8192C(" 0x%08x ",rtw_read32(padapter,i));
124002 - if((j++)%4 == 0) DBG_8192C("\n");
124003 + if(j%4==1) DBG_871X("0x%02x",i);
124004 + DBG_871X(" 0x%08x ",rtw_read32(padapter,i));
124005 + if((j++)%4 == 0) DBG_871X("\n");
124006 }
124007 for(i=0x400;i<0x800;i+=4)
124008 {
124009 - if(j%4==1) DBG_8192C("0x%02x",i);
124010 - DBG_8192C(" 0x%08x ",rtw_read32(padapter,i));
124011 - if((j++)%4 == 0) DBG_8192C("\n");
124012 + if(j%4==1) DBG_871X("0x%02x",i);
124013 + DBG_871X(" 0x%08x ",rtw_read32(padapter,i));
124014 + if((j++)%4 == 0) DBG_871X("\n");
124015 }
124016 }
124017 void bb_reg_dump(_adapter *padapter)
124018 {
124019 int i,j=1;
124020 - DBG_8192C("\n======= BB REG =======\n");
124021 + DBG_871X("\n======= BB REG =======\n");
124022 for(i=0x800;i<0x1000;i+=4)
124023 {
124024 - if(j%4==1) DBG_8192C("0x%02x",i);
124025 + if(j%4==1) DBG_871X("0x%02x",i);
124026
124027 - DBG_8192C(" 0x%08x ",rtw_read32(padapter,i));
124028 - if((j++)%4 == 0) DBG_8192C("\n");
124029 + DBG_871X(" 0x%08x ",rtw_read32(padapter,i));
124030 + if((j++)%4 == 0) DBG_871X("\n");
124031 }
124032 }
124033 void rf_reg_dump(_adapter *padapter)
124034 @@ -5052,9 +6471,9 @@ void rf_reg_dump(_adapter *padapter)
124035 int i,j=1,path;
124036 u32 value;
124037 u8 rf_type,path_nums = 0;
124038 - padapter->HalFunc.GetHwRegHandler(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
124039 + rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
124040
124041 - DBG_8192C("\n======= RF REG =======\n");
124042 + DBG_871X("\n======= RF REG =======\n");
124043 if((RF_1T2R == rf_type) ||(RF_1T1R ==rf_type ))
124044 path_nums = 1;
124045 else
124046 @@ -5062,14 +6481,14 @@ void rf_reg_dump(_adapter *padapter)
124047
124048 for(path=0;path<path_nums;path++)
124049 {
124050 - DBG_8192C("\nRF_Path(%x)\n",path);
124051 + DBG_871X("\nRF_Path(%x)\n",path);
124052 for(i=0;i<0x100;i++)
124053 {
124054 //value = PHY_QueryRFReg(padapter, (RF90_RADIO_PATH_E)path,i, bMaskDWord);
124055 - value =padapter->HalFunc.read_rfreg(padapter, path, i, 0xffffffff);
124056 - if(j%4==1) DBG_8192C("0x%02x ",i);
124057 - DBG_8192C(" 0x%08x ",value);
124058 - if((j++)%4==0) DBG_8192C("\n");
124059 + value =rtw_hal_read_rfreg(padapter, path, i, 0xffffffff);
124060 + if(j%4==1) DBG_871X("0x%02x ",i);
124061 + DBG_871X(" 0x%08x ",value);
124062 + if((j++)%4==0) DBG_871X("\n");
124063 }
124064 }
124065 }
124066 @@ -5077,6 +6496,9 @@ void rf_reg_dump(_adapter *padapter)
124067 #ifdef CONFIG_IOL
124068 #include <rtw_iol.h>
124069 #endif
124070 +#ifdef DBG_CONFIG_ERROR_DETECT
124071 +#include <rtw_sreset.h>
124072 +#endif
124073 static int rtw_dbg_port(struct net_device *dev,
124074 struct iw_request_info *info,
124075 union iwreq_data *wrqu, char *extra)
124076 @@ -5111,13 +6533,13 @@ static int rtw_dbg_port(struct net_devic
124077 switch(minor_cmd)
124078 {
124079 case 1:
124080 - DBG_8192C("rtw_read8(0x%x)=0x%02x\n", arg, rtw_read8(padapter, arg));
124081 + DBG_871X("rtw_read8(0x%x)=0x%02x\n", arg, rtw_read8(padapter, arg));
124082 break;
124083 case 2:
124084 - DBG_8192C("rtw_read16(0x%x)=0x%04x\n", arg, rtw_read16(padapter, arg));
124085 + DBG_871X("rtw_read16(0x%x)=0x%04x\n", arg, rtw_read16(padapter, arg));
124086 break;
124087 case 4:
124088 - DBG_8192C("rtw_read32(0x%x)=0x%08x\n", arg, rtw_read32(padapter, arg));
124089 + DBG_871X("rtw_read32(0x%x)=0x%08x\n", arg, rtw_read32(padapter, arg));
124090 break;
124091 }
124092 break;
124093 @@ -5126,31 +6548,31 @@ static int rtw_dbg_port(struct net_devic
124094 {
124095 case 1:
124096 rtw_write8(padapter, arg, extra_arg);
124097 - DBG_8192C("rtw_write8(0x%x)=0x%02x\n", arg, rtw_read8(padapter, arg));
124098 + DBG_871X("rtw_write8(0x%x)=0x%02x\n", arg, rtw_read8(padapter, arg));
124099 break;
124100 case 2:
124101 rtw_write16(padapter, arg, extra_arg);
124102 - DBG_8192C("rtw_write16(0x%x)=0x%04x\n", arg, rtw_read16(padapter, arg));
124103 + DBG_871X("rtw_write16(0x%x)=0x%04x\n", arg, rtw_read16(padapter, arg));
124104 break;
124105 case 4:
124106 rtw_write32(padapter, arg, extra_arg);
124107 - DBG_8192C("rtw_write32(0x%x)=0x%08x\n", arg, rtw_read32(padapter, arg));
124108 + DBG_871X("rtw_write32(0x%x)=0x%08x\n", arg, rtw_read32(padapter, arg));
124109 break;
124110 }
124111 break;
124112 case 0x72://read_bb
124113 - DBG_8192C("read_bbreg(0x%x)=0x%x\n", arg, padapter->HalFunc.read_bbreg(padapter, arg, 0xffffffff));
124114 + DBG_871X("read_bbreg(0x%x)=0x%x\n", arg, rtw_hal_read_bbreg(padapter, arg, 0xffffffff));
124115 break;
124116 case 0x73://write_bb
124117 - padapter->HalFunc.write_bbreg(padapter, arg, 0xffffffff, extra_arg);
124118 - DBG_8192C("write_bbreg(0x%x)=0x%x\n", arg, padapter->HalFunc.read_bbreg(padapter, arg, 0xffffffff));
124119 + rtw_hal_write_bbreg(padapter, arg, 0xffffffff, extra_arg);
124120 + DBG_871X("write_bbreg(0x%x)=0x%x\n", arg, rtw_hal_read_bbreg(padapter, arg, 0xffffffff));
124121 break;
124122 case 0x74://read_rf
124123 - DBG_8192C("read RF_reg path(0x%02x),offset(0x%x),value(0x%08x)\n",minor_cmd,arg,padapter->HalFunc.read_rfreg(padapter, minor_cmd, arg, 0xffffffff));
124124 + DBG_871X("read RF_reg path(0x%02x),offset(0x%x),value(0x%08x)\n",minor_cmd,arg,rtw_hal_read_rfreg(padapter, minor_cmd, arg, 0xffffffff));
124125 break;
124126 case 0x75://write_rf
124127 - padapter->HalFunc.write_rfreg(padapter, minor_cmd, arg, 0xffffffff, extra_arg);
124128 - DBG_8192C("write RF_reg path(0x%02x),offset(0x%x),value(0x%08x)\n",minor_cmd,arg, padapter->HalFunc.read_rfreg(padapter, minor_cmd, arg, 0xffffffff));
124129 + rtw_hal_write_rfreg(padapter, minor_cmd, arg, 0xffffffff, extra_arg);
124130 + DBG_871X("write RF_reg path(0x%02x),offset(0x%x),value(0x%08x)\n",minor_cmd,arg, rtw_hal_read_rfreg(padapter, minor_cmd, arg, 0xffffffff));
124131 break;
124132
124133 case 0x76:
124134 @@ -5315,29 +6737,33 @@ static int rtw_dbg_port(struct net_devic
124135 #endif //CONFIG_IOL
124136 }
124137 break;
124138 + case 0x7a:
124139 + receive_disconnect(padapter, pmlmeinfo->network.MacAddress
124140 + , WLAN_REASON_EXPIRATION_CHK);
124141 + break;
124142
124143 case 0x7F:
124144 switch(minor_cmd)
124145 {
124146 case 0x0:
124147 - DBG_8192C("fwstate=0x%x\n", get_fwstate(pmlmepriv));
124148 + DBG_871X("fwstate=0x%x\n", get_fwstate(pmlmepriv));
124149 break;
124150 case 0x01:
124151 - DBG_8192C("auth_alg=0x%x, enc_alg=0x%x, auth_type=0x%x, enc_type=0x%x\n",
124152 + DBG_871X("auth_alg=0x%x, enc_alg=0x%x, auth_type=0x%x, enc_type=0x%x\n",
124153 psecuritypriv->dot11AuthAlgrthm, psecuritypriv->dot11PrivacyAlgrthm,
124154 psecuritypriv->ndisauthtype, psecuritypriv->ndisencryptstatus);
124155 break;
124156 case 0x02:
124157 - DBG_8192C("pmlmeinfo->state=0x%x\n", pmlmeinfo->state);
124158 + DBG_871X("pmlmeinfo->state=0x%x\n", pmlmeinfo->state);
124159 break;
124160 case 0x03:
124161 - DBG_8192C("qos_option=%d\n", pmlmepriv->qospriv.qos_option);
124162 - DBG_8192C("ht_option=%d\n", pmlmepriv->htpriv.ht_option);
124163 + DBG_871X("qos_option=%d\n", pmlmepriv->qospriv.qos_option);
124164 + DBG_871X("ht_option=%d\n", pmlmepriv->htpriv.ht_option);
124165 break;
124166 case 0x04:
124167 - DBG_8192C("cur_ch=%d\n", pmlmeext->cur_channel);
124168 - DBG_8192C("cur_bw=%d\n", pmlmeext->cur_bwmode);
124169 - DBG_8192C("cur_ch_off=%d\n", pmlmeext->cur_ch_offset);
124170 + DBG_871X("cur_ch=%d\n", pmlmeext->cur_channel);
124171 + DBG_871X("cur_bw=%d\n", pmlmeext->cur_bwmode);
124172 + DBG_871X("cur_ch_off=%d\n", pmlmeext->cur_ch_offset);
124173 break;
124174 case 0x05:
124175 psta = rtw_get_stainfo(pstapriv, cur_network->network.MacAddress);
124176 @@ -5346,41 +6772,43 @@ static int rtw_dbg_port(struct net_devic
124177 int i;
124178 struct recv_reorder_ctrl *preorder_ctrl;
124179
124180 - DBG_8192C("sta's macaddr:" MAC_FMT "\n", MAC_ARG(psta->hwaddr));
124181 - DBG_8192C("rtsen=%d, cts2slef=%d\n", psta->rtsen, psta->cts2self);
124182 - DBG_8192C("qos_en=%d, ht_en=%d, init_rate=%d\n", psta->qos_option, psta->htpriv.ht_option, psta->init_rate);
124183 - DBG_8192C("state=0x%x, aid=%d, macid=%d, raid=%d\n", psta->state, psta->aid, psta->mac_id, psta->raid);
124184 - DBG_8192C("bwmode=%d, ch_offset=%d, sgi=%d\n", psta->htpriv.bwmode, psta->htpriv.ch_offset, psta->htpriv.sgi);
124185 - DBG_8192C("ampdu_enable = %d\n", psta->htpriv.ampdu_enable);
124186 - DBG_8192C("agg_enable_bitmap=%x, candidate_tid_bitmap=%x\n", psta->htpriv.agg_enable_bitmap, psta->htpriv.candidate_tid_bitmap);
124187 + DBG_871X("SSID=%s\n", cur_network->network.Ssid.Ssid);
124188 + DBG_871X("sta's macaddr:" MAC_FMT "\n", MAC_ARG(psta->hwaddr));
124189 + DBG_871X("cur_channel=%d, cur_bwmode=%d, cur_ch_offset=%d\n", pmlmeext->cur_channel, pmlmeext->cur_bwmode, pmlmeext->cur_ch_offset);
124190 + DBG_871X("rtsen=%d, cts2slef=%d\n", psta->rtsen, psta->cts2self);
124191 + DBG_871X("qos_en=%d, ht_en=%d, init_rate=%d\n", psta->qos_option, psta->htpriv.ht_option, psta->init_rate);
124192 + DBG_871X("state=0x%x, aid=%d, macid=%d, raid=%d\n", psta->state, psta->aid, psta->mac_id, psta->raid);
124193 + DBG_871X("bwmode=%d, ch_offset=%d, sgi=%d\n", psta->htpriv.bwmode, psta->htpriv.ch_offset, psta->htpriv.sgi);
124194 + DBG_871X("ampdu_enable = %d\n", psta->htpriv.ampdu_enable);
124195 + DBG_871X("agg_enable_bitmap=%x, candidate_tid_bitmap=%x\n", psta->htpriv.agg_enable_bitmap, psta->htpriv.candidate_tid_bitmap);
124196
124197 for(i=0;i<16;i++)
124198 {
124199 preorder_ctrl = &psta->recvreorder_ctrl[i];
124200 if(preorder_ctrl->enable)
124201 {
124202 - DBG_8192C("tid=%d, indicate_seq=%d\n", i, preorder_ctrl->indicate_seq);
124203 + DBG_871X("tid=%d, indicate_seq=%d\n", i, preorder_ctrl->indicate_seq);
124204 }
124205 }
124206
124207 }
124208 else
124209 {
124210 - DBG_8192C("can't get sta's macaddr, cur_network's macaddr:" MAC_FMT "\n", MAC_ARG(cur_network->network.MacAddress));
124211 + DBG_871X("can't get sta's macaddr, cur_network's macaddr:" MAC_FMT "\n", MAC_ARG(cur_network->network.MacAddress));
124212 }
124213 break;
124214 case 0x06:
124215 {
124216 u8 DMFlag;
124217 - padapter->HalFunc.GetHwRegHandler(padapter, HW_VAR_DM_FLAG, (u8 *)(&DMFlag));
124218 - DBG_8192C("(B)DMFlag=0x%x, arg=0x%x\n", DMFlag, arg);
124219 + rtw_hal_get_hwreg(padapter, HW_VAR_DM_FLAG, (u8 *)(&DMFlag));
124220 + DBG_871X("(B)DMFlag=0x%x, arg=0x%x\n", DMFlag, arg);
124221 DMFlag = (u8)(0x0f&arg);
124222 - DBG_8192C("(A)DMFlag=0x%x\n", DMFlag);
124223 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_DM_FLAG, (u8 *)(&DMFlag));
124224 + DBG_871X("(A)DMFlag=0x%x\n", DMFlag);
124225 + rtw_hal_set_hwreg(padapter, HW_VAR_DM_FLAG, (u8 *)(&DMFlag));
124226 }
124227 break;
124228 case 0x07:
124229 - DBG_8192C("bSurpriseRemoved=%d, bDriverStopped=%d\n",
124230 + DBG_871X("bSurpriseRemoved=%d, bDriverStopped=%d\n",
124231 padapter->bSurpriseRemoved, padapter->bDriverStopped);
124232 break;
124233 case 0x08:
124234 @@ -5388,10 +6816,14 @@ static int rtw_dbg_port(struct net_devic
124235 struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
124236 struct recv_priv *precvpriv = &padapter->recvpriv;
124237
124238 - DBG_8192C("free_xmitbuf_cnt=%d, free_xmitframe_cnt=%d\n",
124239 - pxmitpriv->free_xmitbuf_cnt, pxmitpriv->free_xmitframe_cnt);
124240 + DBG_871X("free_xmitbuf_cnt=%d, free_xmitframe_cnt=%d"
124241 + ", free_xmit_extbuf_cnt=%d, free_xframe_ext_cnt=%d"
124242 + ", free_recvframe_cnt=%d\n",
124243 + pxmitpriv->free_xmitbuf_cnt, pxmitpriv->free_xmitframe_cnt,
124244 + pxmitpriv->free_xmit_extbuf_cnt, pxmitpriv->free_xframe_ext_cnt,
124245 + precvpriv->free_recvframe_cnt);
124246 #ifdef CONFIG_USB_HCI
124247 - DBG_8192C("rx_urb_pending_cn=%d\n", precvpriv->rx_pending_cnt);
124248 + DBG_871X("rx_urb_pending_cn=%d\n", precvpriv->rx_pending_cnt);
124249 #endif
124250 }
124251 break;
124252 @@ -5402,7 +6834,7 @@ static int rtw_dbg_port(struct net_devic
124253 struct recv_reorder_ctrl *preorder_ctrl;
124254
124255 #ifdef CONFIG_AP_MODE
124256 - DBG_8192C("sta_dz_bitmap=0x%x, tim_bitmap=0x%x\n", pstapriv->sta_dz_bitmap, pstapriv->tim_bitmap);
124257 + DBG_871X("sta_dz_bitmap=0x%x, tim_bitmap=0x%x\n", pstapriv->sta_dz_bitmap, pstapriv->tim_bitmap);
124258 #endif
124259 _enter_critical_bh(&pstapriv->sta_hash_lock, &irqL);
124260
124261 @@ -5419,20 +6851,22 @@ static int rtw_dbg_port(struct net_devic
124262
124263 if(extra_arg == psta->aid)
124264 {
124265 - DBG_8192C("sta's macaddr:" MAC_FMT "\n", MAC_ARG(psta->hwaddr));
124266 - DBG_8192C("rtsen=%d, cts2slef=%d\n", psta->rtsen, psta->cts2self);
124267 - DBG_8192C("qos_en=%d, ht_en=%d, init_rate=%d\n", psta->qos_option, psta->htpriv.ht_option, psta->init_rate);
124268 - DBG_8192C("state=0x%x, aid=%d, macid=%d, raid=%d\n", psta->state, psta->aid, psta->mac_id, psta->raid);
124269 - DBG_8192C("bwmode=%d, ch_offset=%d, sgi=%d\n", psta->htpriv.bwmode, psta->htpriv.ch_offset, psta->htpriv.sgi);
124270 - DBG_8192C("ampdu_enable = %d\n", psta->htpriv.ampdu_enable);
124271 - DBG_8192C("agg_enable_bitmap=%x, candidate_tid_bitmap=%x\n", psta->htpriv.agg_enable_bitmap, psta->htpriv.candidate_tid_bitmap);
124272 - DBG_8192C("capability=0x%x\n", psta->capability);
124273 - DBG_8192C("flags=0x%x\n", psta->flags);
124274 - DBG_8192C("wpa_psk=0x%x\n", psta->wpa_psk);
124275 - DBG_8192C("wpa2_group_cipher=0x%x\n", psta->wpa2_group_cipher);
124276 - DBG_8192C("wpa2_pairwise_cipher=0x%x\n", psta->wpa2_pairwise_cipher);
124277 - DBG_8192C("qos_info=0x%x\n", psta->qos_info);
124278 - DBG_8192C("dot118021XPrivacy=0x%x\n", psta->dot118021XPrivacy);
124279 + DBG_871X("sta's macaddr:" MAC_FMT "\n", MAC_ARG(psta->hwaddr));
124280 + DBG_871X("rtsen=%d, cts2slef=%d\n", psta->rtsen, psta->cts2self);
124281 + DBG_871X("qos_en=%d, ht_en=%d, init_rate=%d\n", psta->qos_option, psta->htpriv.ht_option, psta->init_rate);
124282 + DBG_871X("state=0x%x, aid=%d, macid=%d, raid=%d\n", psta->state, psta->aid, psta->mac_id, psta->raid);
124283 + DBG_871X("bwmode=%d, ch_offset=%d, sgi=%d\n", psta->htpriv.bwmode, psta->htpriv.ch_offset, psta->htpriv.sgi);
124284 + DBG_871X("ampdu_enable = %d\n", psta->htpriv.ampdu_enable);
124285 + DBG_871X("agg_enable_bitmap=%x, candidate_tid_bitmap=%x\n", psta->htpriv.agg_enable_bitmap, psta->htpriv.candidate_tid_bitmap);
124286 +#ifdef CONFIG_AP_MODE
124287 + DBG_871X("capability=0x%x\n", psta->capability);
124288 + DBG_871X("flags=0x%x\n", psta->flags);
124289 + DBG_871X("wpa_psk=0x%x\n", psta->wpa_psk);
124290 + DBG_871X("wpa2_group_cipher=0x%x\n", psta->wpa2_group_cipher);
124291 + DBG_871X("wpa2_pairwise_cipher=0x%x\n", psta->wpa2_pairwise_cipher);
124292 + DBG_871X("qos_info=0x%x\n", psta->qos_info);
124293 +#endif
124294 + DBG_871X("dot118021XPrivacy=0x%x\n", psta->dot118021XPrivacy);
124295
124296
124297
124298 @@ -5441,7 +6875,7 @@ static int rtw_dbg_port(struct net_devic
124299 preorder_ctrl = &psta->recvreorder_ctrl[j];
124300 if(preorder_ctrl->enable)
124301 {
124302 - DBG_8192C("tid=%d, indicate_seq=%d\n", j, preorder_ctrl->indicate_seq);
124303 + DBG_871X("tid=%d, indicate_seq=%d\n", j, preorder_ctrl->indicate_seq);
124304 }
124305 }
124306
124307 @@ -5457,9 +6891,9 @@ static int rtw_dbg_port(struct net_devic
124308
124309 case 0x0c://dump rx packet
124310 {
124311 - DBG_8192C("dump rx packet (%d)\n",extra_arg);
124312 + DBG_871X("dump rx packet (%d)\n",extra_arg);
124313 //pHalData->bDumpRxPkt =extra_arg;
124314 - padapter->HalFunc.SetHalDefVarHandler(padapter, HAL_DEF_DBG_DUMP_RXPKT, &(extra_arg));
124315 + rtw_hal_set_def_var(padapter, HAL_DEF_DBG_DUMP_RXPKT, &(extra_arg));
124316 }
124317 break;
124318 #if 0
124319 @@ -5477,31 +6911,88 @@ static int rtw_dbg_port(struct net_devic
124320 case 0x0f:
124321 {
124322 if(extra_arg == 0){
124323 - DBG_8192C("###### silent reset test.......#####\n");
124324 - if(padapter->HalFunc.silentreset)
124325 - padapter->HalFunc.silentreset(padapter);
124326 + DBG_871X("###### silent reset test.......#####\n");
124327 + rtw_hal_sreset_reset(padapter);
124328 + } else {
124329 + sreset_set_trigger_point(padapter, extra_arg);
124330 }
124331
124332 }
124333 break;
124334 - case 0x12:
124335 + case 0x15:
124336 {
124337 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
124338 - DBG_8192C("==>silent resete cnts:%d\n",pwrpriv->ips_enter_cnts);
124339 + DBG_871X("==>silent resete cnts:%d\n",pwrpriv->ips_enter_cnts);
124340 }
124341 break;
124342
124343 #endif
124344
124345 case 0x10:// driver version display
124346 - DBG_8192C("rtw driver version=%s\n", DRIVERVERSION);
124347 + DBG_871X("rtw driver version=%s\n", DRIVERVERSION);
124348 break;
124349 case 0x11:
124350 {
124351 - DBG_8192C("turn %s Rx RSSI display function\n",(extra_arg==1)?"on":"off");
124352 + DBG_871X("turn %s Rx RSSI display function\n",(extra_arg==1)?"on":"off");
124353 padapter->bRxRSSIDisplay = extra_arg ;
124354 }
124355 break;
124356 + case 0x12: //set rx_stbc
124357 + {
124358 + struct registry_priv *pregpriv = &padapter->registrypriv;
124359 + // 0: disable, bit(0):enable 2.4g, bit(1):enable 5g, 0x3: enable both 2.4g and 5g
124360 + //default is set to enable 2.4GHZ for IOT issue with bufflao's AP at 5GHZ
124361 + if( pregpriv && (extra_arg == 0 || extra_arg == 1|| extra_arg == 2 || extra_arg == 3))
124362 + {
124363 + pregpriv->rx_stbc= extra_arg;
124364 + DBG_871X("set rx_stbc=%d\n",pregpriv->rx_stbc);
124365 + }
124366 + else
124367 + DBG_871X("get rx_stbc=%d\n",pregpriv->rx_stbc);
124368 +
124369 + }
124370 + break;
124371 + case 0x13: //set ampdu_enable
124372 + {
124373 + struct registry_priv *pregpriv = &padapter->registrypriv;
124374 + // 0: disable, 0x1:enable (but wifi_spec should be 0), 0x2: force enable (don't care wifi_spec)
124375 + if( pregpriv && extra_arg >= 0 && extra_arg < 3 )
124376 + {
124377 + pregpriv->ampdu_enable= extra_arg;
124378 + DBG_871X("set ampdu_enable=%d\n",pregpriv->ampdu_enable);
124379 + }
124380 + else
124381 + DBG_871X("get ampdu_enable=%d\n",pregpriv->ampdu_enable);
124382 +
124383 + }
124384 + break;
124385 + case 0x14: //get wifi_spec
124386 + {
124387 + struct registry_priv *pregpriv = &padapter->registrypriv;
124388 + DBG_871X("get wifi_spec=%d\n",pregpriv->wifi_spec);
124389 +
124390 + }
124391 + break;
124392 + case 0x22:
124393 + {
124394 + DBG_871X("turn %s the ForceWriteInitGain Variable\n",(extra_arg==1)?"on":"off");
124395 + padapter->bForceWriteInitGain = extra_arg;
124396 + break;
124397 + }
124398 + case 0x23:
124399 + {
124400 + DBG_871X("turn %s the bNotifyChannelChange Variable\n",(extra_arg==1)?"on":"off");
124401 + padapter->bNotifyChannelChange = extra_arg;
124402 + break;
124403 + }
124404 + case 0x24:
124405 + {
124406 +#ifdef CONFIG_P2P
124407 + DBG_871X("turn %s the bShowGetP2PState Variable\n",(extra_arg==1)?"on":"off");
124408 + padapter->bShowGetP2PState = extra_arg;
124409 +#endif // CONFIG_P2P
124410 + break;
124411 + }
124412 #if 1
124413 case 0xdd://registers dump , 0 for mac reg,1 for bb reg, 2 for rf reg
124414 {
124415 @@ -5523,15 +7014,15 @@ static int rtw_dbg_port(struct net_devic
124416 u8 dm_flag;
124417
124418 if(0xf==extra_arg){
124419 - padapter->HalFunc.GetHalDefVarHandler(padapter, HAL_DEF_DBG_DM_FUNC,&dm_flag);
124420 - DBG_8192C(" === DMFlag(0x%02x) === \n",dm_flag);
124421 - DBG_8192C("extra_arg = 0 - disable all dynamic func \n");
124422 - DBG_8192C("extra_arg = 1 - disable DIG- BIT(0)\n");
124423 - DBG_8192C("extra_arg = 2 - disable High power - BIT(1)\n");
124424 - DBG_8192C("extra_arg = 3 - disable tx power tracking - BIT(2)\n");
124425 - DBG_8192C("extra_arg = 4 - disable BT coexistence - BIT(3)\n");
124426 - DBG_8192C("extra_arg = 5 - disable antenna diversity - BIT(4)\n");
124427 - DBG_8192C("extra_arg = 6 - enable all dynamic func \n");
124428 + rtw_hal_get_def_var(padapter, HAL_DEF_DBG_DM_FUNC,&dm_flag);
124429 + DBG_871X(" === DMFlag(0x%02x) === \n",dm_flag);
124430 + DBG_871X("extra_arg = 0 - disable all dynamic func \n");
124431 + DBG_871X("extra_arg = 1 - disable DIG- BIT(0)\n");
124432 + DBG_871X("extra_arg = 2 - disable High power - BIT(1)\n");
124433 + DBG_871X("extra_arg = 3 - disable tx power tracking - BIT(2)\n");
124434 + DBG_871X("extra_arg = 4 - disable BT coexistence - BIT(3)\n");
124435 + DBG_871X("extra_arg = 5 - disable antenna diversity - BIT(4)\n");
124436 + DBG_871X("extra_arg = 6 - enable all dynamic func \n");
124437 }
124438 else{
124439 /* extra_arg = 0 - disable all dynamic func
124440 @@ -5539,56 +7030,56 @@ static int rtw_dbg_port(struct net_devic
124441 extra_arg = 2 - disable tx power tracking
124442 extra_arg = 3 - turn on all dynamic func
124443 */
124444 - padapter->HalFunc.SetHalDefVarHandler(padapter, HAL_DEF_DBG_DM_FUNC, &(extra_arg));
124445 - padapter->HalFunc.GetHalDefVarHandler(padapter, HAL_DEF_DBG_DM_FUNC,&dm_flag);
124446 - DBG_8192C(" === DMFlag(0x%02x) === \n",dm_flag);
124447 + rtw_hal_set_def_var(padapter, HAL_DEF_DBG_DM_FUNC, &(extra_arg));
124448 + rtw_hal_get_def_var(padapter, HAL_DEF_DBG_DM_FUNC,&dm_flag);
124449 + DBG_871X(" === DMFlag(0x%02x) === \n",dm_flag);
124450 }
124451 }
124452 break;
124453
124454 case 0xfd:
124455 rtw_write8(padapter, 0xc50, arg);
124456 - DBG_8192C("wr(0xc50)=0x%x\n", rtw_read8(padapter, 0xc50));
124457 + DBG_871X("wr(0xc50)=0x%x\n", rtw_read8(padapter, 0xc50));
124458 rtw_write8(padapter, 0xc58, arg);
124459 - DBG_8192C("wr(0xc58)=0x%x\n", rtw_read8(padapter, 0xc58));
124460 + DBG_871X("wr(0xc58)=0x%x\n", rtw_read8(padapter, 0xc58));
124461 break;
124462 case 0xfe:
124463 - DBG_8192C("rd(0xc50)=0x%x\n", rtw_read8(padapter, 0xc50));
124464 - DBG_8192C("rd(0xc58)=0x%x\n", rtw_read8(padapter, 0xc58));
124465 + DBG_871X("rd(0xc50)=0x%x\n", rtw_read8(padapter, 0xc50));
124466 + DBG_871X("rd(0xc58)=0x%x\n", rtw_read8(padapter, 0xc58));
124467 break;
124468 case 0xff:
124469 {
124470 - DBG_8192C("dbg(0x210)=0x%x\n", rtw_read32(padapter, 0x210));
124471 - DBG_8192C("dbg(0x608)=0x%x\n", rtw_read32(padapter, 0x608));
124472 - DBG_8192C("dbg(0x280)=0x%x\n", rtw_read32(padapter, 0x280));
124473 - DBG_8192C("dbg(0x284)=0x%x\n", rtw_read32(padapter, 0x284));
124474 - DBG_8192C("dbg(0x288)=0x%x\n", rtw_read32(padapter, 0x288));
124475 + DBG_871X("dbg(0x210)=0x%x\n", rtw_read32(padapter, 0x210));
124476 + DBG_871X("dbg(0x608)=0x%x\n", rtw_read32(padapter, 0x608));
124477 + DBG_871X("dbg(0x280)=0x%x\n", rtw_read32(padapter, 0x280));
124478 + DBG_871X("dbg(0x284)=0x%x\n", rtw_read32(padapter, 0x284));
124479 + DBG_871X("dbg(0x288)=0x%x\n", rtw_read32(padapter, 0x288));
124480
124481 - DBG_8192C("dbg(0x664)=0x%x\n", rtw_read32(padapter, 0x664));
124482 + DBG_871X("dbg(0x664)=0x%x\n", rtw_read32(padapter, 0x664));
124483
124484
124485 - DBG_8192C("\n");
124486 + DBG_871X("\n");
124487
124488 - DBG_8192C("dbg(0x430)=0x%x\n", rtw_read32(padapter, 0x430));
124489 - DBG_8192C("dbg(0x438)=0x%x\n", rtw_read32(padapter, 0x438));
124490 + DBG_871X("dbg(0x430)=0x%x\n", rtw_read32(padapter, 0x430));
124491 + DBG_871X("dbg(0x438)=0x%x\n", rtw_read32(padapter, 0x438));
124492
124493 - DBG_8192C("dbg(0x440)=0x%x\n", rtw_read32(padapter, 0x440));
124494 + DBG_871X("dbg(0x440)=0x%x\n", rtw_read32(padapter, 0x440));
124495
124496 - DBG_8192C("dbg(0x458)=0x%x\n", rtw_read32(padapter, 0x458));
124497 + DBG_871X("dbg(0x458)=0x%x\n", rtw_read32(padapter, 0x458));
124498
124499 - DBG_8192C("dbg(0x484)=0x%x\n", rtw_read32(padapter, 0x484));
124500 - DBG_8192C("dbg(0x488)=0x%x\n", rtw_read32(padapter, 0x488));
124501 + DBG_871X("dbg(0x484)=0x%x\n", rtw_read32(padapter, 0x484));
124502 + DBG_871X("dbg(0x488)=0x%x\n", rtw_read32(padapter, 0x488));
124503
124504 - DBG_8192C("dbg(0x444)=0x%x\n", rtw_read32(padapter, 0x444));
124505 - DBG_8192C("dbg(0x448)=0x%x\n", rtw_read32(padapter, 0x448));
124506 - DBG_8192C("dbg(0x44c)=0x%x\n", rtw_read32(padapter, 0x44c));
124507 - DBG_8192C("dbg(0x450)=0x%x\n", rtw_read32(padapter, 0x450));
124508 + DBG_871X("dbg(0x444)=0x%x\n", rtw_read32(padapter, 0x444));
124509 + DBG_871X("dbg(0x448)=0x%x\n", rtw_read32(padapter, 0x448));
124510 + DBG_871X("dbg(0x44c)=0x%x\n", rtw_read32(padapter, 0x44c));
124511 + DBG_871X("dbg(0x450)=0x%x\n", rtw_read32(padapter, 0x450));
124512 }
124513 break;
124514 }
124515 break;
124516 default:
124517 - DBG_8192C("error dbg cmd!\n");
124518 + DBG_871X("error dbg cmd!\n");
124519 break;
124520 }
124521
124522 @@ -5688,7 +7179,7 @@ static int wpa_set_param(struct net_devi
124523 case IEEE_PARAM_WPAX_SELECT:
124524
124525 // added for WPA2 mixed mode
124526 - //DBG_8192C(KERN_WARNING "------------------------>wpax value = %x\n", value);
124527 + //DBG_871X(KERN_WARNING "------------------------>wpax value = %x\n", value);
124528 /*
124529 spin_lock_irqsave(&ieee->wpax_suitlist_lock,flags);
124530 ieee->wpax_type_set = 1;
124531 @@ -5789,7 +7280,7 @@ static int wpa_supplicant_ioctl(struct n
124532 break;
124533
124534 default:
124535 - DBG_8192C("Unknown WPA supplicant request: %d\n", param->cmd);
124536 + DBG_871X("Unknown WPA supplicant request: %d\n", param->cmd);
124537 ret = -EOPNOTSUPP;
124538 break;
124539
124540 @@ -5855,7 +7346,7 @@ static int set_group_key(_adapter *padap
124541 struct cmd_priv *pcmdpriv=&(padapter->cmdpriv);
124542 int res=_SUCCESS;
124543
124544 - DBG_8192C("%s\n", __FUNCTION__);
124545 + DBG_871X("%s\n", __FUNCTION__);
124546
124547 pcmd = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
124548 if(pcmd==NULL){
124549 @@ -5872,6 +7363,8 @@ static int set_group_key(_adapter *padap
124550 _rtw_memset(psetkeyparm, 0, sizeof(struct setkey_parm));
124551
124552 psetkeyparm->keyid=(u8)keyid;
124553 + if (is_wep_enc(alg))
124554 + padapter->securitypriv.key_mask |= BIT(psetkeyparm->keyid);
124555
124556 psetkeyparm->algorithm = alg;
124557
124558 @@ -5945,7 +7438,7 @@ static int rtw_set_encryption(struct net
124559 struct security_priv* psecuritypriv=&(padapter->securitypriv);
124560 struct sta_priv *pstapriv = &padapter->stapriv;
124561
124562 - DBG_8192C("%s\n", __FUNCTION__);
124563 + DBG_871X("%s\n", __FUNCTION__);
124564
124565 param->u.crypt.err = 0;
124566 param->u.crypt.alg[IEEE_CRYPT_ALG_NAME_LEN - 1] = '\0';
124567 @@ -5974,7 +7467,7 @@ static int rtw_set_encryption(struct net
124568 if(!psta)
124569 {
124570 //ret = -EINVAL;
124571 - DBG_8192C("rtw_set_encryption(), sta has already been removed or never been added\n");
124572 + DBG_871X("rtw_set_encryption(), sta has already been removed or never been added\n");
124573 goto exit;
124574 }
124575 }
124576 @@ -5983,7 +7476,7 @@ static int rtw_set_encryption(struct net
124577 {
124578 //todo:clear default encryption keys
124579
124580 - DBG_8192C("clear default encryption keys, keyid=%d\n", param->u.crypt.idx);
124581 + DBG_871X("clear default encryption keys, keyid=%d\n", param->u.crypt.idx);
124582
124583 goto exit;
124584 }
124585 @@ -5991,12 +7484,12 @@ static int rtw_set_encryption(struct net
124586
124587 if (strcmp(param->u.crypt.alg, "WEP") == 0 && (psta==NULL))
124588 {
124589 - DBG_8192C("r871x_set_encryption, crypt.alg = WEP\n");
124590 + DBG_871X("r871x_set_encryption, crypt.alg = WEP\n");
124591
124592 wep_key_idx = param->u.crypt.idx;
124593 wep_key_len = param->u.crypt.key_len;
124594
124595 - DBG_8192C("r871x_set_encryption, wep_key_idx=%d, len=%d\n", wep_key_idx, wep_key_len);
124596 + DBG_871X("r871x_set_encryption, wep_key_idx=%d, len=%d\n", wep_key_idx, wep_key_len);
124597
124598 if((wep_key_idx >= WEP_KEYS) || (wep_key_len<=0))
124599 {
124600 @@ -6011,7 +7504,7 @@ static int rtw_set_encryption(struct net
124601 wep_total_len = wep_key_len + FIELD_OFFSET(NDIS_802_11_WEP, KeyMaterial);
124602 pwep =(NDIS_802_11_WEP *)rtw_malloc(wep_total_len);
124603 if(pwep == NULL){
124604 - DBG_8192C(" r871x_set_encryption: pwep allocate fail !!!\n");
124605 + DBG_871X(" r871x_set_encryption: pwep allocate fail !!!\n");
124606 goto exit;
124607 }
124608
124609 @@ -6028,7 +7521,7 @@ static int rtw_set_encryption(struct net
124610
124611 if(param->u.crypt.set_tx)
124612 {
124613 - DBG_8192C("wep, set_tx=1\n");
124614 + DBG_871X("wep, set_tx=1\n");
124615
124616 psecuritypriv->ndisencryptstatus = Ndis802_11Encryption1Enabled;
124617 psecuritypriv->dot11PrivacyAlgrthm=_WEP40_;
124618 @@ -6053,7 +7546,7 @@ static int rtw_set_encryption(struct net
124619 }
124620 else
124621 {
124622 - DBG_8192C("wep, set_tx=0\n");
124623 + DBG_871X("wep, set_tx=0\n");
124624
124625 //don't update "psecuritypriv->dot11PrivacyAlgrthm" and
124626 //"psecuritypriv->dot11PrivacyKeyIndex=keyid", but can rtw_set_key to cam
124627 @@ -6077,7 +7570,7 @@ static int rtw_set_encryption(struct net
124628 {
124629 if(strcmp(param->u.crypt.alg, "WEP") == 0)
124630 {
124631 - DBG_8192C("%s, set group_key, WEP\n", __FUNCTION__);
124632 + DBG_871X("%s, set group_key, WEP\n", __FUNCTION__);
124633
124634 _rtw_memcpy(psecuritypriv->dot118021XGrpKey[param->u.crypt.idx].skey, param->u.crypt.key, (param->u.crypt.key_len>16 ?16:param->u.crypt.key_len));
124635
124636 @@ -6090,7 +7583,7 @@ static int rtw_set_encryption(struct net
124637 }
124638 else if(strcmp(param->u.crypt.alg, "TKIP") == 0)
124639 {
124640 - DBG_8192C("%s, set group_key, TKIP\n", __FUNCTION__);
124641 + DBG_871X("%s, set group_key, TKIP\n", __FUNCTION__);
124642
124643 psecuritypriv->dot118021XGrpPrivacy = _TKIP_;
124644
124645 @@ -6106,7 +7599,7 @@ static int rtw_set_encryption(struct net
124646 }
124647 else if(strcmp(param->u.crypt.alg, "CCMP") == 0)
124648 {
124649 - DBG_8192C("%s, set group_key, CCMP\n", __FUNCTION__);
124650 + DBG_871X("%s, set group_key, CCMP\n", __FUNCTION__);
124651
124652 psecuritypriv->dot118021XGrpPrivacy = _AES_;
124653
124654 @@ -6114,7 +7607,7 @@ static int rtw_set_encryption(struct net
124655 }
124656 else
124657 {
124658 - DBG_8192C("%s, set group_key, none\n", __FUNCTION__);
124659 + DBG_871X("%s, set group_key, none\n", __FUNCTION__);
124660
124661 psecuritypriv->dot118021XGrpPrivacy = _NO_PRIVACY_;
124662 }
124663 @@ -6150,7 +7643,7 @@ static int rtw_set_encryption(struct net
124664
124665 if(strcmp(param->u.crypt.alg, "WEP") == 0)
124666 {
124667 - DBG_8192C("%s, set pairwise key, WEP\n", __FUNCTION__);
124668 + DBG_871X("%s, set pairwise key, WEP\n", __FUNCTION__);
124669
124670 psta->dot118021XPrivacy = _WEP40_;
124671 if(param->u.crypt.key_len==13)
124672 @@ -6160,7 +7653,7 @@ static int rtw_set_encryption(struct net
124673 }
124674 else if(strcmp(param->u.crypt.alg, "TKIP") == 0)
124675 {
124676 - DBG_8192C("%s, set pairwise key, TKIP\n", __FUNCTION__);
124677 + DBG_871X("%s, set pairwise key, TKIP\n", __FUNCTION__);
124678
124679 psta->dot118021XPrivacy = _TKIP_;
124680
124681 @@ -6175,13 +7668,13 @@ static int rtw_set_encryption(struct net
124682 else if(strcmp(param->u.crypt.alg, "CCMP") == 0)
124683 {
124684
124685 - DBG_8192C("%s, set pairwise key, CCMP\n", __FUNCTION__);
124686 + DBG_871X("%s, set pairwise key, CCMP\n", __FUNCTION__);
124687
124688 psta->dot118021XPrivacy = _AES_;
124689 }
124690 else
124691 {
124692 - DBG_8192C("%s, set pairwise key, none\n", __FUNCTION__);
124693 + DBG_871X("%s, set pairwise key, none\n", __FUNCTION__);
124694
124695 psta->dot118021XPrivacy = _NO_PRIVACY_;
124696 }
124697 @@ -6253,7 +7746,7 @@ exit:
124698
124699 if(pwep)
124700 {
124701 - rtw_mfree((u8 *)pwep, wep_total_len);
124702 + rtw_mfree((u8 *)pwep,wep_total_len);
124703 }
124704
124705 return ret;
124706 @@ -6269,25 +7762,23 @@ static int rtw_set_beacon(struct net_dev
124707 unsigned char *pbuf = param->u.bcn_ie.buf;
124708
124709
124710 - DBG_8192C("%s, len=%d\n", __FUNCTION__, len);
124711 + DBG_871X("%s, len=%d\n", __FUNCTION__, len);
124712
124713 if(check_fwstate(pmlmepriv, WIFI_AP_STATE) != _TRUE)
124714 return -EINVAL;
124715
124716 _rtw_memcpy(&pstapriv->max_num_sta, param->u.bcn_ie.reserved, 2);
124717 -#ifdef SUPPORT_64_STA
124718 - pstapriv->max_num_sta = NUM_STA;
124719 -#else //SUPPORT_64_STA
124720 +
124721 if((pstapriv->max_num_sta>NUM_STA) || (pstapriv->max_num_sta<=0))
124722 pstapriv->max_num_sta = NUM_STA;
124723 -#endif//SUPPORT_64_STA
124724 +
124725
124726 if(rtw_check_beacon_data(padapter, pbuf, (len-12-2)) == _SUCCESS)// 12 = param header, 2:no packed
124727 ret = 0;
124728 else
124729 ret = -EINVAL;
124730
124731 -
124732 +
124733 return ret;
124734
124735 }
124736 @@ -6301,40 +7792,10 @@ static int rtw_hostapd_sta_flush(struct
124737 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
124738 //struct sta_priv *pstapriv = &padapter->stapriv;
124739
124740 - DBG_8192C("%s\n", __FUNCTION__);
124741 + DBG_871X("%s\n", __FUNCTION__);
124742
124743 flush_all_cam_entry(padapter); //clear CAM
124744
124745 -#if 0
124746 - phead = &pstapriv->asoc_list;
124747 - plist = get_next(phead);
124748 -
124749 - //free sta asoc_queue
124750 - while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
124751 - {
124752 - psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
124753 -
124754 - plist = get_next(plist);
124755 -
124756 - rtw_list_delete(&psta->asoc_list);
124757 -
124758 - //tear down Rx AMPDU
124759 - send_delba(padapter, 0, psta->hwaddr);// recipient
124760 -
124761 - //tear down TX AMPDU
124762 - send_delba(padapter, 1, psta->hwaddr);// // originator
124763 - psta->htpriv.agg_enable_bitmap = 0x0;//reset
124764 - psta->htpriv.candidate_tid_bitmap = 0x0;//reset
124765 -
124766 - issue_deauth(padapter, psta->hwaddr, WLAN_REASON_DEAUTH_LEAVING);
124767 -
124768 - _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
124769 - rtw_free_stainfo(padapter, psta);
124770 - _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
124771 -
124772 - }
124773 -#endif
124774 -
124775 ret = rtw_sta_flush(padapter);
124776
124777 return ret;
124778 @@ -6350,7 +7811,7 @@ static int rtw_add_sta(struct net_device
124779 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
124780 struct sta_priv *pstapriv = &padapter->stapriv;
124781
124782 - DBG_8192C("rtw_add_sta(aid=%d)=" MAC_FMT "\n", param->u.add_sta.aid, MAC_ARG(param->sta_addr));
124783 + DBG_871X("rtw_add_sta(aid=%d)=" MAC_FMT "\n", param->u.add_sta.aid, MAC_ARG(param->sta_addr));
124784
124785 if(check_fwstate(pmlmepriv, (_FW_LINKED|WIFI_AP_STATE)) != _TRUE)
124786 {
124787 @@ -6368,7 +7829,7 @@ static int rtw_add_sta(struct net_device
124788 psta = rtw_get_stainfo(pstapriv, param->sta_addr);
124789 if(psta)
124790 {
124791 - DBG_8192C("rtw_add_sta(), free has been added psta=%p\n", psta);
124792 + DBG_871X("rtw_add_sta(), free has been added psta=%p\n", psta);
124793 _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
124794 rtw_free_stainfo(padapter, psta);
124795 _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
124796 @@ -6382,7 +7843,7 @@ static int rtw_add_sta(struct net_device
124797 {
124798 int flags = param->u.add_sta.flags;
124799
124800 - //DBG_8192C("rtw_add_sta(), init sta's variables, psta=%p\n", psta);
124801 + //DBG_871X("rtw_add_sta(), init sta's variables, psta=%p\n", psta);
124802
124803 psta->aid = param->u.add_sta.aid;//aid=1~2007
124804
124805 @@ -6430,75 +7891,149 @@ static int rtw_add_sta(struct net_device
124806
124807 }
124808
124809 -static int rtw_del_sta(struct net_device *dev, struct ieee_param *param)
124810 +static int rtw_del_sta(struct net_device *dev, struct ieee_param *param)
124811 +{
124812 + _irqL irqL;
124813 + int ret=0;
124814 + struct sta_info *psta = NULL;
124815 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
124816 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
124817 + struct sta_priv *pstapriv = &padapter->stapriv;
124818 +
124819 + DBG_871X("rtw_del_sta=" MAC_FMT "\n", MAC_ARG(param->sta_addr));
124820 +
124821 + if(check_fwstate(pmlmepriv, (_FW_LINKED|WIFI_AP_STATE)) != _TRUE)
124822 + {
124823 + return -EINVAL;
124824 + }
124825 +
124826 + if (param->sta_addr[0] == 0xff && param->sta_addr[1] == 0xff &&
124827 + param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff &&
124828 + param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff)
124829 + {
124830 + return -EINVAL;
124831 + }
124832 +
124833 + psta = rtw_get_stainfo(pstapriv, param->sta_addr);
124834 + if(psta)
124835 + {
124836 + u8 updated=_FALSE;
124837 +
124838 + //DBG_871X("free psta=%p, aid=%d\n", psta, psta->aid);
124839 +
124840 + _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
124841 + if(rtw_is_list_empty(&psta->asoc_list)==_FALSE)
124842 + {
124843 + rtw_list_delete(&psta->asoc_list);
124844 + pstapriv->asoc_list_cnt--;
124845 + updated = ap_free_sta(padapter, psta, _TRUE, WLAN_REASON_DEAUTH_LEAVING);
124846 +
124847 + }
124848 + _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
124849 +
124850 + associated_clients_update(padapter, updated);
124851 +
124852 + psta = NULL;
124853 +
124854 + }
124855 + else
124856 + {
124857 + DBG_871X("rtw_del_sta(), sta has already been removed or never been added\n");
124858 +
124859 + //ret = -1;
124860 + }
124861 +
124862 +
124863 + return ret;
124864 +
124865 +}
124866 +
124867 +static int rtw_ioctl_get_sta_data(struct net_device *dev, struct ieee_param *param, int len)
124868 {
124869 - _irqL irqL;
124870 int ret=0;
124871 struct sta_info *psta = NULL;
124872 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
124873 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
124874 struct sta_priv *pstapriv = &padapter->stapriv;
124875 + struct ieee_param_ex *param_ex = (struct ieee_param_ex *)param;
124876 + struct sta_data *psta_data = (struct sta_data *)param_ex->data;
124877 +
124878 + DBG_871X("rtw_ioctl_get_sta_info, sta_addr: " MAC_FMT "\n", MAC_ARG(param_ex->sta_addr));
124879
124880 - DBG_8192C("rtw_del_sta=" MAC_FMT "\n", MAC_ARG(param->sta_addr));
124881 -
124882 if(check_fwstate(pmlmepriv, (_FW_LINKED|WIFI_AP_STATE)) != _TRUE)
124883 {
124884 return -EINVAL;
124885 }
124886
124887 - if (param->sta_addr[0] == 0xff && param->sta_addr[1] == 0xff &&
124888 - param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff &&
124889 - param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff)
124890 + if (param_ex->sta_addr[0] == 0xff && param_ex->sta_addr[1] == 0xff &&
124891 + param_ex->sta_addr[2] == 0xff && param_ex->sta_addr[3] == 0xff &&
124892 + param_ex->sta_addr[4] == 0xff && param_ex->sta_addr[5] == 0xff)
124893 {
124894 return -EINVAL;
124895 }
124896
124897 - psta = rtw_get_stainfo(pstapriv, param->sta_addr);
124898 + psta = rtw_get_stainfo(pstapriv, param_ex->sta_addr);
124899 if(psta)
124900 {
124901 - //DBG_8192C("free psta=%p, aid=%d\n", psta, psta->aid);
124902 -
124903 -#if 0
124904 - //tear down Rx AMPDU
124905 - send_delba(padapter, 0, psta->hwaddr);// recipient
124906 -
124907 - //tear down TX AMPDU
124908 - send_delba(padapter, 1, psta->hwaddr);// // originator
124909 - psta->htpriv.agg_enable_bitmap = 0x0;//reset
124910 - psta->htpriv.candidate_tid_bitmap = 0x0;//reset
124911 -
124912 - issue_deauth(padapter, psta->hwaddr, WLAN_REASON_DEAUTH_LEAVING);
124913 -
124914 - _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
124915 - rtw_free_stainfo(padapter, psta);
124916 - _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
124917 -
124918 - pstapriv->sta_dz_bitmap &=~BIT(psta->aid);
124919 - pstapriv->tim_bitmap &=~BIT(psta->aid);
124920 -#endif
124921 +#if 0
124922 + struct {
124923 + u16 aid;
124924 + u16 capability;
124925 + int flags;
124926 + u32 sta_set;
124927 + u8 tx_supp_rates[16];
124928 + u32 tx_supp_rates_len;
124929 + struct rtw_ieee80211_ht_cap ht_cap;
124930 + u64 rx_pkts;
124931 + u64 rx_bytes;
124932 + u64 rx_drops;
124933 + u64 tx_pkts;
124934 + u64 tx_bytes;
124935 + u64 tx_drops;
124936 + } get_sta;
124937 +#endif
124938 + psta_data->aid = (u16)psta->aid;
124939 + psta_data->capability = psta->capability;
124940 + psta_data->flags = psta->flags;
124941
124942 - _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
124943 - if(rtw_is_list_empty(&psta->asoc_list)==_FALSE)
124944 - {
124945 - rtw_list_delete(&psta->asoc_list);
124946 - ap_free_sta(padapter, psta);
124947 +/*
124948 + nonerp_set : BIT(0)
124949 + no_short_slot_time_set : BIT(1)
124950 + no_short_preamble_set : BIT(2)
124951 + no_ht_gf_set : BIT(3)
124952 + no_ht_set : BIT(4)
124953 + ht_20mhz_set : BIT(5)
124954 +*/
124955
124956 - }
124957 - _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
124958 -
124959 - psta = NULL;
124960 + psta_data->sta_set =((psta->nonerp_set) |
124961 + (psta->no_short_slot_time_set <<1) |
124962 + (psta->no_short_preamble_set <<2) |
124963 + (psta->no_ht_gf_set <<3) |
124964 + (psta->no_ht_set <<4) |
124965 + (psta->ht_20mhz_set <<5));
124966 +
124967 + psta_data->tx_supp_rates_len = psta->bssratelen;
124968 + _rtw_memcpy(psta_data->tx_supp_rates, psta->bssrateset, psta->bssratelen);
124969 +
124970 + _rtw_memcpy(&psta_data->ht_cap, &psta->htpriv.ht_cap, sizeof(struct rtw_ieee80211_ht_cap));
124971 +
124972 + psta_data->rx_pkts = psta->sta_stats.rx_data_pkts;
124973 + psta_data->rx_bytes = psta->sta_stats.rx_bytes;
124974 + psta_data->rx_drops = psta->sta_stats.rx_drops;
124975 +
124976 + psta_data->tx_pkts = psta->sta_stats.tx_pkts;
124977 + psta_data->tx_bytes = psta->sta_stats.tx_bytes;
124978 + psta_data->tx_drops = psta->sta_stats.tx_drops;
124979
124980 +
124981 }
124982 else
124983 {
124984 - DBG_8192C("rtw_del_sta(), sta has already been removed or never been added\n");
124985 -
124986 - //ret = -1;
124987 + ret = -1;
124988 }
124989 -
124990 -
124991 +
124992 return ret;
124993 -
124994 +
124995 }
124996
124997 static int rtw_get_sta_wpaie(struct net_device *dev, struct ieee_param *param)
124998 @@ -6509,7 +8044,7 @@ static int rtw_get_sta_wpaie(struct net_
124999 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
125000 struct sta_priv *pstapriv = &padapter->stapriv;
125001
125002 - DBG_8192C("rtw_get_sta_wpaie, sta_addr: " MAC_FMT "\n", MAC_ARG(param->sta_addr));
125003 + DBG_871X("rtw_get_sta_wpaie, sta_addr: " MAC_FMT "\n", MAC_ARG(param->sta_addr));
125004
125005 if(check_fwstate(pmlmepriv, (_FW_LINKED|WIFI_AP_STATE)) != _TRUE)
125006 {
125007 @@ -6542,7 +8077,7 @@ static int rtw_get_sta_wpaie(struct net_
125008 else
125009 {
125010 //ret = -1;
125011 - DBG_8192C("sta's wpa_ie is NONE\n");
125012 + DBG_871X("sta's wpa_ie is NONE\n");
125013 }
125014 }
125015 else
125016 @@ -6564,7 +8099,7 @@ static int rtw_set_wps_beacon(struct net
125017 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
125018 int ie_len;
125019
125020 - DBG_8192C("%s, len=%d\n", __FUNCTION__, len);
125021 + DBG_871X("%s, len=%d\n", __FUNCTION__, len);
125022
125023 if(check_fwstate(pmlmepriv, WIFI_AP_STATE) != _TRUE)
125024 return -EINVAL;
125025 @@ -6583,7 +8118,7 @@ static int rtw_set_wps_beacon(struct net
125026 pmlmepriv->wps_beacon_ie = rtw_malloc(ie_len);
125027 pmlmepriv->wps_beacon_ie_len = ie_len;
125028 if ( pmlmepriv->wps_beacon_ie == NULL) {
125029 - DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
125030 + DBG_871X("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
125031 return -EINVAL;
125032 }
125033
125034 @@ -6607,7 +8142,7 @@ static int rtw_set_wps_probe_resp(struct
125035 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
125036 int ie_len;
125037
125038 - DBG_8192C("%s, len=%d\n", __FUNCTION__, len);
125039 + DBG_871X("%s, len=%d\n", __FUNCTION__, len);
125040
125041 if(check_fwstate(pmlmepriv, WIFI_AP_STATE) != _TRUE)
125042 return -EINVAL;
125043 @@ -6626,7 +8161,7 @@ static int rtw_set_wps_probe_resp(struct
125044 pmlmepriv->wps_probe_resp_ie = rtw_malloc(ie_len);
125045 pmlmepriv->wps_probe_resp_ie_len = ie_len;
125046 if ( pmlmepriv->wps_probe_resp_ie == NULL) {
125047 - DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
125048 + DBG_871X("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
125049 return -EINVAL;
125050 }
125051 _rtw_memcpy(pmlmepriv->wps_probe_resp_ie, param->u.bcn_ie.buf, ie_len);
125052 @@ -6637,38 +8172,6 @@ static int rtw_set_wps_probe_resp(struct
125053
125054 }
125055
125056 -static int rtw_set_hidden_ssid(struct net_device *dev, struct ieee_param *param, int len)
125057 -{
125058 - int ret=0;
125059 - _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
125060 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
125061 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
125062 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
125063 -
125064 - u8 value;
125065 -
125066 - if(check_fwstate(pmlmepriv, WIFI_AP_STATE) != _TRUE)
125067 - return -EINVAL;
125068 -
125069 - if(param->u.wpa_param.name != 0) //dummy test...
125070 - {
125071 - DBG_871X("%s name(%u) != 0\n", __FUNCTION__, param->u.wpa_param.name);
125072 - }
125073 -
125074 - value = param->u.wpa_param.value;
125075 -
125076 - //use the same definition of hostapd's ignore_broadcast_ssid
125077 - if(value != 1 && value != 2)
125078 - value = 0;
125079 -
125080 - DBG_871X("%s value(%u)\n", __FUNCTION__, value);
125081 - pmlmeinfo->hidden_ssid_mode = value;
125082 -
125083 - return ret;
125084 -
125085 -}
125086 -
125087 -
125088 static int rtw_set_wps_assoc_resp(struct net_device *dev, struct ieee_param *param, int len)
125089 {
125090 int ret=0;
125091 @@ -6676,7 +8179,7 @@ static int rtw_set_wps_assoc_resp(struct
125092 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
125093 int ie_len;
125094
125095 - DBG_8192C("%s, len=%d\n", __FUNCTION__, len);
125096 + DBG_871X("%s, len=%d\n", __FUNCTION__, len);
125097
125098 if(check_fwstate(pmlmepriv, WIFI_AP_STATE) != _TRUE)
125099 return -EINVAL;
125100 @@ -6695,7 +8198,7 @@ static int rtw_set_wps_assoc_resp(struct
125101 pmlmepriv->wps_assoc_resp_ie = rtw_malloc(ie_len);
125102 pmlmepriv->wps_assoc_resp_ie_len = ie_len;
125103 if ( pmlmepriv->wps_assoc_resp_ie == NULL) {
125104 - DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
125105 + DBG_871X("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
125106 return -EINVAL;
125107 }
125108
125109 @@ -6707,13 +8210,125 @@ static int rtw_set_wps_assoc_resp(struct
125110
125111 }
125112
125113 +static int rtw_set_hidden_ssid(struct net_device *dev, struct ieee_param *param, int len)
125114 +{
125115 + int ret=0;
125116 + _adapter *adapter = (_adapter *)rtw_netdev_priv(dev);
125117 + struct mlme_priv *mlmepriv = &(adapter->mlmepriv);
125118 + struct mlme_ext_priv *mlmeext = &(adapter->mlmeextpriv);
125119 + struct mlme_ext_info *mlmeinfo = &(mlmeext->mlmext_info);
125120 + int ie_len;
125121 + u8 *ssid_ie;
125122 + char ssid[NDIS_802_11_LENGTH_SSID + 1];
125123 + sint ssid_len;
125124 + u8 ignore_broadcast_ssid;
125125 +
125126 + if(check_fwstate(mlmepriv, WIFI_AP_STATE) != _TRUE)
125127 + return -EPERM;
125128 +
125129 + if (param->u.bcn_ie.reserved[0] != 0xea)
125130 + return -EINVAL;
125131 +
125132 + mlmeinfo->hidden_ssid_mode = ignore_broadcast_ssid = param->u.bcn_ie.reserved[1];
125133 +
125134 + ie_len = len-12-2;// 12 = param header, 2:no packed
125135 + ssid_ie = rtw_get_ie(param->u.bcn_ie.buf, WLAN_EID_SSID, &ssid_len, ie_len);
125136 +
125137 + if (ssid_ie && ssid_len) {
125138 + WLAN_BSSID_EX *pbss_network = &mlmepriv->cur_network.network;
125139 + WLAN_BSSID_EX *pbss_network_ext = &mlmeinfo->network;
125140 +
125141 + _rtw_memcpy(ssid, ssid_ie+2, ssid_len);
125142 + ssid[ssid_len>NDIS_802_11_LENGTH_SSID?NDIS_802_11_LENGTH_SSID:ssid_len] = 0x0;
125143 +
125144 + if(0)
125145 + DBG_871X(FUNC_ADPT_FMT" ssid:(%s,%d), from ie:(%s,%d), (%s,%d)\n", FUNC_ADPT_ARG(adapter),
125146 + ssid, ssid_len,
125147 + pbss_network->Ssid.Ssid, pbss_network->Ssid.SsidLength,
125148 + pbss_network_ext->Ssid.Ssid, pbss_network_ext->Ssid.SsidLength);
125149 +
125150 + _rtw_memcpy(pbss_network->Ssid.Ssid, (void *)ssid, ssid_len);
125151 + pbss_network->Ssid.SsidLength = ssid_len;
125152 + _rtw_memcpy(pbss_network_ext->Ssid.Ssid, (void *)ssid, ssid_len);
125153 + pbss_network_ext->Ssid.SsidLength = ssid_len;
125154 +
125155 + if(0)
125156 + DBG_871X(FUNC_ADPT_FMT" after ssid:(%s,%d), (%s,%d)\n", FUNC_ADPT_ARG(adapter),
125157 + pbss_network->Ssid.Ssid, pbss_network->Ssid.SsidLength,
125158 + pbss_network_ext->Ssid.Ssid, pbss_network_ext->Ssid.SsidLength);
125159 + }
125160 +
125161 + DBG_871X(FUNC_ADPT_FMT" ignore_broadcast_ssid:%d, %s,%d\n", FUNC_ADPT_ARG(adapter),
125162 + ignore_broadcast_ssid, ssid, ssid_len);
125163 +
125164 + return ret;
125165 +}
125166 +
125167 +static int rtw_ioctl_acl_remove_sta(struct net_device *dev, struct ieee_param *param, int len)
125168 +{
125169 + int ret=0;
125170 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
125171 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
125172 +
125173 + if(check_fwstate(pmlmepriv, WIFI_AP_STATE) != _TRUE)
125174 + return -EINVAL;
125175 +
125176 + if (param->sta_addr[0] == 0xff && param->sta_addr[1] == 0xff &&
125177 + param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff &&
125178 + param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff)
125179 + {
125180 + return -EINVAL;
125181 + }
125182 +
125183 + ret = rtw_acl_remove_sta(padapter, param->sta_addr);
125184 +
125185 + return ret;
125186 +
125187 +}
125188 +
125189 +static int rtw_ioctl_acl_add_sta(struct net_device *dev, struct ieee_param *param, int len)
125190 +{
125191 + int ret=0;
125192 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
125193 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
125194 +
125195 + if(check_fwstate(pmlmepriv, WIFI_AP_STATE) != _TRUE)
125196 + return -EINVAL;
125197 +
125198 + if (param->sta_addr[0] == 0xff && param->sta_addr[1] == 0xff &&
125199 + param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff &&
125200 + param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff)
125201 + {
125202 + return -EINVAL;
125203 + }
125204 +
125205 + ret = rtw_acl_add_sta(padapter, param->sta_addr);
125206 +
125207 + return ret;
125208 +
125209 +}
125210 +
125211 +static int rtw_ioctl_set_macaddr_acl(struct net_device *dev, struct ieee_param *param, int len)
125212 +{
125213 + int ret=0;
125214 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
125215 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
125216 +
125217 + if(check_fwstate(pmlmepriv, WIFI_AP_STATE) != _TRUE)
125218 + return -EINVAL;
125219 +
125220 + rtw_set_macaddr_acl(padapter, param->u.mlme.command);
125221 +
125222 + return ret;
125223 +}
125224 +
125225 static int rtw_hostapd_ioctl(struct net_device *dev, struct iw_point *p)
125226 {
125227 struct ieee_param *param;
125228 int ret=0;
125229 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
125230
125231 - //DBG_8192C("%s\n", __FUNCTION__);
125232 + //DBG_871X("%s\n", __FUNCTION__);
125233
125234 /*
125235 * this function is expect to call in master mode, which allows no power saving
125236 @@ -6746,7 +8361,7 @@ static int rtw_hostapd_ioctl(struct net_
125237 goto out;
125238 }
125239
125240 - //DBG_8192C("%s, cmd=%d\n", __FUNCTION__, param->cmd);
125241 + //DBG_871X("%s, cmd=%d\n", __FUNCTION__, param->cmd);
125242
125243 switch (param->cmd)
125244 {
125245 @@ -6809,9 +8424,33 @@ static int rtw_hostapd_ioctl(struct net_
125246 ret = rtw_set_hidden_ssid(dev, param, p->length);
125247
125248 break;
125249 +
125250 + case RTL871X_HOSTAPD_GET_INFO_STA:
125251 +
125252 + ret = rtw_ioctl_get_sta_data(dev, param, p->length);
125253 +
125254 + break;
125255 +
125256 + case RTL871X_HOSTAPD_SET_MACADDR_ACL:
125257 +
125258 + ret = rtw_ioctl_set_macaddr_acl(dev, param, p->length);
125259 +
125260 + break;
125261 +
125262 + case RTL871X_HOSTAPD_ACL_ADD_STA:
125263 +
125264 + ret = rtw_ioctl_acl_add_sta(dev, param, p->length);
125265 +
125266 + break;
125267 +
125268 + case RTL871X_HOSTAPD_ACL_REMOVE_STA:
125269 +
125270 + ret = rtw_ioctl_acl_remove_sta(dev, param, p->length);
125271 +
125272 + break;
125273
125274 default:
125275 - DBG_8192C("Unknown hostapd request: %d\n", param->cmd);
125276 + DBG_871X("Unknown hostapd request: %d\n", param->cmd);
125277 ret = -EOPNOTSUPP;
125278 break;
125279
125280 @@ -6850,7 +8489,8 @@ static int rtw_wx_set_priv(struct net_de
125281 struct iw_point *dwrq = (struct iw_point*)awrq;
125282
125283 //RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_notice_, ("+rtw_wx_set_priv\n"));
125284 -
125285 + if(dwrq->length == 0)
125286 + return -EFAULT;
125287 len = dwrq->length;
125288 if (!(ext = rtw_vmalloc(len)))
125289 return -ENOMEM;
125290 @@ -6952,16 +8592,7 @@ static int rtw_wx_set_priv(struct net_de
125291 break;
125292 case ANDROID_WIFI_CMD_LINKSPEED :
125293 {
125294 - union iwreq_data wrqd;
125295 - int ret_inner;
125296 - int mbps;
125297 -
125298 - if( 0!=(ret_inner=rtw_wx_get_rate(dev, info, &wrqd, extra)) ){
125299 - mbps=0;
125300 - } else {
125301 - mbps=wrqd.bitrate.value / 1000000;
125302 - }
125303 -
125304 + u16 mbps = rtw_get_cur_max_rate(padapter)/10;
125305 sprintf(ext, "LINKSPEED %d", mbps);
125306 }
125307 break;
125308 @@ -6970,15 +8601,13 @@ static int rtw_wx_set_priv(struct net_de
125309 break;
125310 case ANDROID_WIFI_CMD_SCAN_ACTIVE :
125311 {
125312 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
125313 - pmlmepriv->scan_mode=SCAN_ACTIVE;
125314 + //rtw_set_scan_mode(padapter, SCAN_ACTIVE);
125315 sprintf(ext, "OK");
125316 }
125317 break;
125318 case ANDROID_WIFI_CMD_SCAN_PASSIVE :
125319 {
125320 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
125321 - pmlmepriv->scan_mode=SCAN_PASSIVE;
125322 + //rtw_set_scan_mode(padapter, SCAN_PASSIVE);
125323 sprintf(ext, "OK");
125324 }
125325 break;
125326 @@ -6986,33 +8615,11 @@ static int rtw_wx_set_priv(struct net_de
125327 case ANDROID_WIFI_CMD_COUNTRY :
125328 {
125329 char country_code[10];
125330 - int channel_plan = RT_CHANNEL_DOMAIN_FCC;
125331 - union iwreq_data wrqd;
125332 - int ret_inner;
125333 -
125334 - sscanf(ext,"%*s %s",country_code);
125335 -
125336 - if(0 == strcmp(country_code, "US"))
125337 - channel_plan = RT_CHANNEL_DOMAIN_FCC;
125338 - else if(0 == strcmp(country_code, "EU"))
125339 - channel_plan = RT_CHANNEL_DOMAIN_ETSI;
125340 - else if(0 == strcmp(country_code, "JP"))
125341 - channel_plan = RT_CHANNEL_DOMAIN_MKK;
125342 - else if(0 == strcmp(country_code, "CN"))
125343 - channel_plan = RT_CHANNEL_DOMAIN_CHINA;
125344 - else
125345 - DBG_871X("%s unknown country_code:%s, set to RT_CHANNEL_DOMAIN_FCC\n", __FUNCTION__, country_code);
125346 -
125347 - _rtw_memcpy(&wrqd, &channel_plan, sizeof(int));
125348 -
125349 - if( 0!=(ret_inner=rtw_wx_set_channel_plan(dev, info, &wrqd, extra)) ){
125350 - DBG_871X("%s rtw_wx_set_channel_plan error\n", __FUNCTION__);
125351 - }
125352 -
125353 + sscanf(ext, "%*s %s", country_code);
125354 + rtw_set_country(padapter, country_code);
125355 sprintf(ext, "OK");
125356 }
125357 break;
125358 -
125359 default :
125360 #ifdef CONFIG_DEBUG_RTW_WX_SET_PRIV
125361 DBG_871X("%s: %s unknowned req=%s\n", __FUNCTION__,
125362 @@ -7069,7 +8676,7 @@ static int rtw_mp_efuse_get(struct net_d
125363 return -EFAULT;
125364
125365 pch = extra;
125366 - DBG_8192C("%s: in=%s\n", __func__, extra);
125367 + DBG_871X("%s: in=%s\n", __func__, extra);
125368
125369 i=0;
125370 //mac 16 "00e04c871200" rmap,00,2
125371 @@ -7082,38 +8689,38 @@ static int rtw_mp_efuse_get(struct net_d
125372
125373 if ( strcmp(tmp[0],"realmap") == 0 ) {
125374
125375 - DBG_8192C("strcmp OK = %s \n" ,tmp[0]);
125376 + DBG_871X("strcmp OK = %s \n" ,tmp[0]);
125377
125378 mapLen = EFUSE_MAP_SIZE;
125379
125380 if (rtw_efuse_map_read(padapter, 0, mapLen, data) == _SUCCESS){
125381 - DBG_8192C("\t rtw_efuse_map_read \n");
125382 + DBG_871X("\t rtw_efuse_map_read \n");
125383 }else {
125384 - DBG_8192C("\t rtw_efuse_map_read : Fail \n");
125385 + DBG_871X("\t rtw_efuse_map_read : Fail \n");
125386 return -EFAULT;
125387 }
125388 _rtw_memset(extra, '\0', sizeof(extra));
125389 - DBG_8192C("\tOFFSET\tVALUE(hex)\n");
125390 + DBG_871X("\tOFFSET\tVALUE(hex)\n");
125391 sprintf(extra, "%s \n", extra);
125392 for ( i = 0; i < EFUSE_MAP_SIZE; i += 16 )
125393 {
125394 - DBG_8192C("\t0x%02x\t", i);
125395 + DBG_871X("\t0x%02x\t", i);
125396 sprintf(extra, "%s \t0x%02x\t", extra,i);
125397 for (j = 0; j < 8; j++)
125398 {
125399 - DBG_8192C("%02X ", data[i+j]);
125400 + DBG_871X("%02X ", data[i+j]);
125401 sprintf(extra, "%s %02X", extra, data[i+j]);
125402 }
125403 - DBG_8192C("\t");
125404 + DBG_871X("\t");
125405 sprintf(extra,"%s\t",extra);
125406 for (; j < 16; j++){
125407 - DBG_8192C("%02X ", data[i+j]);
125408 + DBG_871X("%02X ", data[i+j]);
125409 sprintf(extra, "%s %02X", extra, data[i+j]);
125410 }
125411 - DBG_8192C("\n");
125412 + DBG_871X("\n");
125413 sprintf(extra,"%s\n",extra);
125414 }
125415 - DBG_8192C("\n");
125416 + DBG_871X("\n");
125417 wrqu->length = strlen(extra);
125418
125419 return 0;
125420 @@ -7123,39 +8730,39 @@ static int rtw_mp_efuse_get(struct net_d
125421 // rmap addr cnts
125422 addr = simple_strtoul(tmp[1], &ptmp, 16);
125423
125424 - DBG_8192C("addr = %x \n" ,addr);
125425 + DBG_871X("addr = %x \n" ,addr);
125426
125427 cnts=simple_strtoul(tmp[2], &ptmp,10);
125428 if(cnts==0) return -EINVAL;
125429
125430 - DBG_8192C("cnts = %d \n" ,cnts);
125431 + DBG_871X("cnts = %d \n" ,cnts);
125432 //_rtw_memset(extra, '\0', wrqu->data.length);
125433
125434 EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_available_size, _FALSE);
125435 if ((addr + cnts) > max_available_size) {
125436 - DBG_8192C("(addr + cnts parameter error \n");
125437 + DBG_871X("(addr + cnts parameter error \n");
125438 return -EFAULT;
125439 }
125440
125441 if (rtw_efuse_map_read(padapter, addr, cnts, data) == _FAIL)
125442 {
125443 - DBG_8192C("rtw_efuse_access error \n");
125444 + DBG_871X("rtw_efuse_access error \n");
125445 }
125446 else{
125447 - DBG_8192C("rtw_efuse_access ok \n");
125448 + DBG_871X("rtw_efuse_access ok \n");
125449 }
125450
125451 _rtw_memset(extra, '\0', sizeof(extra));
125452 for ( i = 0; i < cnts; i ++) {
125453 - DBG_8192C("0x%02x", data[i]);
125454 + DBG_871X("0x%02x", data[i]);
125455 sprintf(extra, "%s 0x%02X", extra, data[i]);
125456 - DBG_8192C(" ");
125457 + DBG_871X(" ");
125458 sprintf(extra,"%s ",extra);
125459 }
125460
125461 wrqu->length = strlen(extra)+1;
125462
125463 - DBG_8192C("extra = %s ", extra);
125464 + DBG_871X("extra = %s ", extra);
125465
125466 return 0;
125467 }
125468 @@ -7165,24 +8772,24 @@ static int rtw_mp_efuse_get(struct net_d
125469
125470 if (rtw_efuse_access(padapter, _FALSE, addr, mapLen, rawdata) == _FAIL)
125471 {
125472 - DBG_8192C("\t rtw_efuse_map_read : Fail \n");
125473 + DBG_871X("\t rtw_efuse_map_read : Fail \n");
125474 return -EFAULT;
125475 } else
125476 {
125477 - DBG_8192C("\t rtw_efuse_access raw ok \n");
125478 + DBG_871X("\t rtw_efuse_access raw ok \n");
125479 }
125480
125481 _rtw_memset(extra, '\0', sizeof(extra));
125482 for ( i=0; i<mapLen; i++ ) {
125483 - DBG_8192C(" %02x", rawdata[i]);
125484 + DBG_871X(" %02x", rawdata[i]);
125485 sprintf(extra, "%s %02x", extra, rawdata[i] );
125486
125487 if ((i & 0xF) == 0xF){
125488 - DBG_8192C("\n\t");
125489 + DBG_871X("\n\t");
125490 sprintf(extra, "%s\n\t", extra);
125491 }
125492 else if ((i & 0x7) == 0x7){
125493 - DBG_8192C("\t");
125494 + DBG_871X("\t");
125495 sprintf(extra, "%s\t", extra);
125496 }
125497 }
125498 @@ -7201,21 +8808,21 @@ static int rtw_mp_efuse_get(struct net_d
125499 #endif
125500 EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_available_size, _FALSE);
125501 if ((addr + mapLen) > max_available_size) {
125502 - DBG_8192C("(addr + cnts parameter error \n");
125503 + DBG_871X("(addr + cnts parameter error \n");
125504 return -EFAULT;
125505 }
125506 if (rtw_efuse_map_read(padapter, addr, cnts, data) == _FAIL)
125507 {
125508 - DBG_8192C("rtw_efuse_access error \n");
125509 + DBG_871X("rtw_efuse_access error \n");
125510 }
125511 else{
125512 - DBG_8192C("rtw_efuse_access ok \n");
125513 + DBG_871X("rtw_efuse_access ok \n");
125514 }
125515 _rtw_memset(extra, '\0', sizeof(extra));
125516 for ( i = 0; i < cnts; i ++) {
125517 - DBG_8192C("0x%02x", data[i]);
125518 + DBG_871X("0x%02x", data[i]);
125519 sprintf(extra, "%s 0x%02X", extra, data[i+j]);
125520 - DBG_8192C(" ");
125521 + DBG_871X(" ");
125522 sprintf(extra,"%s ",extra);
125523 }
125524 wrqu->length = strlen(extra);
125525 @@ -7232,21 +8839,21 @@ static int rtw_mp_efuse_get(struct net_d
125526 cnts = 4;
125527 EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_available_size, _FALSE);
125528 if ((addr + mapLen) > max_available_size) {
125529 - DBG_8192C("(addr + cnts parameter error \n");
125530 + DBG_871X("(addr + cnts parameter error \n");
125531 return -EFAULT;
125532 }
125533 if (rtw_efuse_map_read(padapter, addr, cnts, data) == _FAIL)
125534 {
125535 - DBG_8192C("rtw_efuse_access error \n");
125536 + DBG_871X("rtw_efuse_access error \n");
125537 }
125538 else{
125539 - DBG_8192C("rtw_efuse_access ok \n");
125540 + DBG_871X("rtw_efuse_access ok \n");
125541 }
125542 _rtw_memset(extra, '\0', sizeof(extra));
125543 for ( i = 0; i < cnts; i ++) {
125544 - DBG_8192C("0x%02x", data[i]);
125545 + DBG_871X("0x%02x", data[i]);
125546 sprintf(extra, "%s 0x%02X", extra, data[i+j]);
125547 - DBG_8192C(" ");
125548 + DBG_871X(" ");
125549 sprintf(extra,"%s ",extra);
125550 }
125551 wrqu->length = strlen(extra);
125552 @@ -7271,7 +8878,7 @@ static int rtw_mp_efuse_get(struct net_d
125553
125554 static int rtw_mp_efuse_set(struct net_device *dev,
125555 struct iw_request_info *info,
125556 - union iwreq_data *wdata, char *extra)
125557 + union iwreq_data *wdata, char *extra)
125558 {
125559 struct iw_point *wrqu = (struct iw_point *)wdata;
125560 PADAPTER padapter = rtw_netdev_priv(dev);
125561 @@ -7286,7 +8893,7 @@ static int rtw_mp_efuse_set(struct net_d
125562 u32 cnts = 0;
125563
125564 pch = extra;
125565 - DBG_8192C("%s: in=%s\n", __func__, extra);
125566 + DBG_871X("%s: in=%s\n", __func__, extra);
125567
125568 i=0;
125569 while ( (token = strsep (&pch,",") )!=NULL )
125570 @@ -7304,13 +8911,13 @@ static int rtw_mp_efuse_set(struct net_d
125571
125572 addr = simple_strtoul( tmp[1], &ptmp, 16 );
125573 addr = addr & 0xFF;
125574 - DBG_8192C("addr = %x \n" ,addr);
125575 + DBG_871X("addr = %x \n" ,addr);
125576
125577 cnts = strlen( tmp[2] )/2;
125578 if ( cnts == 0) return -EFAULT;
125579
125580 - DBG_8192C("cnts = %d \n" ,cnts);
125581 - DBG_8192C("target data = %s \n" ,tmp[2]);
125582 + DBG_871X("cnts = %d \n" ,cnts);
125583 + DBG_871X("target data = %s \n" ,tmp[2]);
125584
125585 for( jj = 0, kk = 0; jj < cnts; jj++, kk += 2 )
125586 {
125587 @@ -7320,14 +8927,14 @@ static int rtw_mp_efuse_set(struct net_d
125588 EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_available_size, _FALSE);
125589
125590 if ((addr + cnts) > max_available_size) {
125591 - DBG_8192C("parameter error \n");
125592 + DBG_871X("parameter error \n");
125593 return -EFAULT;
125594 }
125595 if (rtw_efuse_map_write(padapter, addr, cnts, setdata) == _FAIL) {
125596 - DBG_8192C("rtw_efuse_map_write error \n");
125597 + DBG_871X("rtw_efuse_map_write error \n");
125598 return -EFAULT;
125599 } else
125600 - DBG_8192C("rtw_efuse_map_write ok \n");
125601 + DBG_871X("rtw_efuse_map_write ok \n");
125602
125603 return 0;
125604 }
125605 @@ -7336,13 +8943,13 @@ static int rtw_mp_efuse_set(struct net_d
125606 if ( ! strlen( tmp[2] )/2 > 1 ) return -EFAULT;
125607 addr = simple_strtoul( tmp[1], &ptmp, 16 );
125608 addr = addr & 0xFF;
125609 - DBG_8192C("addr = %x \n" ,addr);
125610 + DBG_871X("addr = %x \n" ,addr);
125611
125612 cnts=strlen( tmp[2] )/2;
125613 if ( cnts == 0) return -EFAULT;
125614
125615 - DBG_8192C(" cnts = %d \n" ,cnts );
125616 - DBG_8192C("target data = %s \n" ,tmp[2] );
125617 + DBG_871X(" cnts = %d \n" ,cnts );
125618 + DBG_871X("target data = %s \n" ,tmp[2] );
125619
125620 for( jj = 0, kk = 0; jj < cnts; jj++, kk += 2 )
125621 {
125622 @@ -7350,10 +8957,10 @@ static int rtw_mp_efuse_set(struct net_d
125623 }
125624
125625 if ( rtw_efuse_access( padapter, _TRUE, addr, cnts, setrawdata ) == _FAIL ){
125626 - DBG_8192C("\t rtw_efuse_map_read : Fail \n");
125627 + DBG_871X("\t rtw_efuse_map_read : Fail \n");
125628 return -EFAULT;
125629 } else
125630 - DBG_8192C("\t rtw_efuse_access raw ok \n");
125631 + DBG_871X("\t rtw_efuse_access raw ok \n");
125632
125633 return 0;
125634 }
125635 @@ -7369,11 +8976,11 @@ static int rtw_mp_efuse_set(struct net_d
125636 cnts = strlen( tmp[1] )/2;
125637 if ( cnts == 0) return -EFAULT;
125638 if ( cnts > 6 ){
125639 - DBG_8192C("error data for mac addr = %s \n" ,tmp[1]);
125640 + DBG_871X("error data for mac addr = %s \n" ,tmp[1]);
125641 return -EFAULT;
125642 }
125643
125644 - DBG_8192C("target data = %s \n" ,tmp[1]);
125645 + DBG_871X("target data = %s \n" ,tmp[1]);
125646
125647 for( jj = 0, kk = 0; jj < cnts; jj++, kk += 2 )
125648 {
125649 @@ -7383,14 +8990,14 @@ static int rtw_mp_efuse_set(struct net_d
125650 EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_available_size, _FALSE);
125651
125652 if ((addr + cnts) > max_available_size) {
125653 - DBG_8192C("parameter error \n");
125654 + DBG_871X("parameter error \n");
125655 return -EFAULT;
125656 }
125657 if ( rtw_efuse_map_write(padapter, addr, cnts, setdata) == _FAIL ) {
125658 - DBG_8192C("rtw_efuse_map_write error \n");
125659 + DBG_871X("rtw_efuse_map_write error \n");
125660 return -EFAULT;
125661 } else
125662 - DBG_8192C("rtw_efuse_map_write ok \n");
125663 + DBG_871X("rtw_efuse_map_write ok \n");
125664
125665 return 0;
125666 }
125667 @@ -7406,7 +9013,7 @@ static int rtw_mp_efuse_set(struct net_d
125668
125669 cnts=strlen( tmp[1] )/2;
125670 if ( cnts == 0) return -EFAULT;
125671 - DBG_8192C("target data = %s \n" ,tmp[1]);
125672 + DBG_871X("target data = %s \n" ,tmp[1]);
125673
125674 for( jj = 0, kk = 0; jj < cnts; jj++, kk += 2 )
125675 {
125676 @@ -7416,20 +9023,20 @@ static int rtw_mp_efuse_set(struct net_d
125677 EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_available_size, _FALSE);
125678
125679 if ((addr + cnts) > max_available_size) {
125680 - DBG_8192C("parameter error \n");
125681 + DBG_871X("parameter error \n");
125682 return -EFAULT;
125683 }
125684
125685 if ( rtw_efuse_map_write(padapter, addr, cnts, setdata) == _FAIL ) {
125686 - DBG_8192C("rtw_efuse_map_write error \n");
125687 + DBG_871X("rtw_efuse_map_write error \n");
125688 return -EFAULT;
125689 } else
125690 - DBG_8192C("rtw_efuse_map_write ok \n");
125691 + DBG_871X("rtw_efuse_map_write ok \n");
125692
125693 return 0;
125694 }
125695 else{
125696 - DBG_8192C("Command not found\n");
125697 + DBG_871X("Command not found\n");
125698 return 0;
125699 }
125700
125701 @@ -7534,12 +9141,15 @@ static int rtw_mp_read_reg(struct net_de
125702 u32 ret, i=0, j=0, strtout=0;
125703 PADAPTER padapter = rtw_netdev_priv(dev);
125704
125705 -
125706 if (wrqu->length > 128) return -EFAULT;
125707
125708 if (copy_from_user(input, wrqu->pointer, wrqu->length))
125709 return -EFAULT;
125710
125711 + _rtw_memset(data, 0, 20);
125712 + _rtw_memset(tmp, 0, 20);
125713 + _rtw_memset(extra, 0, wrqu->length);
125714 +
125715 pch = input;
125716 pnext = strpbrk(pch, " ,.-");
125717 if (pnext == NULL) return -EINVAL;
125718 @@ -7559,7 +9169,7 @@ static int rtw_mp_read_reg(struct net_de
125719 // 1 byte
125720 // *(u8*)data = rtw_read8(padapter, addr);
125721 sprintf(extra, "%d\n", rtw_read8(padapter, addr));
125722 - wrqu->length = 4;
125723 + wrqu->length = strlen(extra);
125724 break;
125725 case 'w':
125726 // 2 bytes
125727 @@ -7578,7 +9188,7 @@ static int rtw_mp_read_reg(struct net_de
125728 j++;
125729 }
125730 pch = tmp;
125731 - DBG_8192C("pch=%s",pch);
125732 + DBG_871X("pch=%s",pch);
125733
125734 while( *pch != '\0' )
125735 {
125736 @@ -7594,7 +9204,7 @@ static int rtw_mp_read_reg(struct net_de
125737 }
125738 pch = pnext;
125739 }
125740 - wrqu->length = 8;
125741 + wrqu->length = 6;
125742 break;
125743 case 'd':
125744 // 4 bytes
125745 @@ -7612,7 +9222,7 @@ static int rtw_mp_read_reg(struct net_de
125746 j++;
125747 }
125748 pch = tmp;
125749 - DBG_8192C("pch=%s",pch);
125750 + DBG_871X("pch=%s",pch);
125751
125752 while( *pch != '\0' )
125753 {
125754 @@ -7628,7 +9238,7 @@ static int rtw_mp_read_reg(struct net_de
125755 }
125756 pch = pnext;
125757 }
125758 - wrqu->length = 20;
125759 + wrqu->length = strlen(extra);
125760 break;
125761
125762 default:
125763 @@ -7666,9 +9276,12 @@ static int rtw_mp_read_reg(struct net_de
125764 if (path >= MAX_RF_PATH_NUMS) return -EINVAL;
125765 if (addr > 0xFF) return -EINVAL;
125766 if (data > 0xFFFFF) return -EINVAL;
125767 + _rtw_memset(extra, 0, wrqu->length);
125768
125769 write_rfreg(padapter, path, addr, data);
125770
125771 + sprintf(extra, "write_rf completed \n");
125772 +
125773 return 0;
125774 }
125775
125776 @@ -7697,12 +9310,14 @@ static int rtw_mp_read_rf(struct net_dev
125777 if (copy_from_user(input, wrqu->pointer, wrqu->length))
125778 return -EFAULT;
125779
125780 - ret = sscanf(extra, "%d,%x", &path, &addr);
125781 + ret = sscanf(input, "%d,%x", &path, &addr);
125782 if (ret < 2) return -EINVAL;
125783
125784 if (path >= MAX_RF_PATH_NUMS) return -EINVAL;
125785 if (addr > 0xFF) return -EINVAL;
125786
125787 + _rtw_memset(extra, 0, wrqu->length);
125788 +
125789 //*data = read_rfreg(padapter, path, addr);
125790 sprintf(data, "%08x", read_rfreg(padapter, path, addr));
125791 //add read data format blank
125792 @@ -7717,7 +9332,7 @@ static int rtw_mp_read_rf(struct net_dev
125793 j++;
125794 }
125795 pch = tmp;
125796 - DBG_8192C("pch=%s",pch);
125797 + DBG_871X("pch=%s",pch);
125798
125799 while( *pch != '\0' )
125800 {
125801 @@ -7733,7 +9348,7 @@ static int rtw_mp_read_rf(struct net_dev
125802 }
125803 pch = pnext;
125804 }
125805 - wrqu->length = 10;
125806 + wrqu->length = strlen(extra);
125807
125808 return 0;
125809 }
125810 @@ -7794,7 +9409,7 @@ static int rtw_mp_rate(struct net_device
125811 else
125812 rate =(rate-0x80+MPT_RATE_MCS0);
125813
125814 - //DBG_8192C("%s: rate=%d\n", __func__, rate);
125815 + //DBG_871X("%s: rate=%d\n", __func__, rate);
125816
125817 if (rate >= MPT_RATE_LAST )
125818 return -EINVAL;
125819 @@ -7819,7 +9434,7 @@ static int rtw_mp_channel(struct net_dev
125820 return -EFAULT;
125821
125822 channel = rtw_atoi(input);
125823 - //DBG_8192C("%s: channel=%d\n", __func__, channel);
125824 + //DBG_871X("%s: channel=%d\n", __func__, channel);
125825 sprintf( extra, "Change channel %d to channel %d", padapter->mppriv.channel , channel );
125826
125827 padapter->mppriv.channel = channel;
125828 @@ -7839,14 +9454,14 @@ static int rtw_mp_bandwidth(struct net_d
125829 //if (copy_from_user(buffer, (void*)wrqu->data.pointer, wrqu->data.length))
125830 // return -EFAULT;
125831
125832 - //DBG_8192C("%s:iwpriv in=%s\n", __func__, extra);
125833 + //DBG_871X("%s:iwpriv in=%s\n", __func__, extra);
125834
125835 sscanf(extra, "40M=%d,shortGI=%d", &bandwidth, &sg);
125836
125837 if (bandwidth != HT_CHANNEL_WIDTH_40)
125838 bandwidth = HT_CHANNEL_WIDTH_20;
125839
125840 - //DBG_8192C("%s: bw=%d sg=%d \n", __func__, bandwidth , sg);
125841 + //DBG_871X("%s: bw=%d sg=%d \n", __func__, bandwidth , sg);
125842
125843 padapter->mppriv.bandwidth = (u8)bandwidth;
125844 padapter->mppriv.preamble = sg;
125845 @@ -7869,7 +9484,7 @@ static int rtw_mp_txpower(struct net_dev
125846 return -EFAULT;
125847
125848 sscanf(input,"patha=%d,pathb=%d",&idx_a,&idx_b);
125849 - //DBG_8192C("%s: tx_pwr_idx_a=%x b=%x\n", __func__, idx_a, idx_b);
125850 + //DBG_871X("%s: tx_pwr_idx_a=%x b=%x\n", __func__, idx_a, idx_b);
125851
125852 sprintf( extra, "Set power level path_A:%d path_B:%d", idx_a , idx_b );
125853 padapter->mppriv.txpoweridx = (u8)idx_a;
125854 @@ -7893,7 +9508,7 @@ static int rtw_mp_ant_tx(struct net_devi
125855 if (copy_from_user(input, wrqu->pointer, wrqu->length))
125856 return -EFAULT;
125857
125858 - DBG_8192C("%s: input=%s\n", __func__, input);
125859 + //DBG_871X("%s: input=%s\n", __func__, input);
125860
125861 sprintf( extra, "switch Tx antenna to %s", input );
125862
125863 @@ -7910,9 +9525,9 @@ static int rtw_mp_ant_tx(struct net_devi
125864 }
125865 }
125866 //antenna |= BIT(extra[i]-'a');
125867 - DBG_8192C("%s: antenna=0x%x\n", __func__, antenna);
125868 + //DBG_871X("%s: antenna=0x%x\n", __func__, antenna);
125869 padapter->mppriv.antenna_tx = antenna;
125870 - DBG_8192C("%s:mppriv.antenna_rx=%d\n", __func__, padapter->mppriv.antenna_tx);
125871 + //DBG_871X("%s:mppriv.antenna_rx=%d\n", __func__, padapter->mppriv.antenna_tx);
125872
125873 Hal_SetAntenna(padapter);
125874
125875 @@ -7931,8 +9546,11 @@ static int rtw_mp_ant_rx(struct net_devi
125876
125877 if (copy_from_user(input, wrqu->pointer, wrqu->length))
125878 return -EFAULT;
125879 - //DBG_8192C("%s: input=%s\n", __func__, input);
125880 -
125881 + //DBG_871X("%s: input=%s\n", __func__, input);
125882 + _rtw_memset(extra, 0, wrqu->length);
125883 +
125884 + sprintf( extra, "switch Rx antenna to %s", input );
125885 +
125886 for (i=0; i < strlen(input); i++) {
125887
125888 switch( input[i] )
125889 @@ -7946,11 +9564,11 @@ static int rtw_mp_ant_rx(struct net_devi
125890 }
125891 }
125892
125893 - //DBG_8192C("%s: antenna=0x%x\n", __func__, antenna);
125894 + //DBG_871X("%s: antenna=0x%x\n", __func__, antenna);
125895 padapter->mppriv.antenna_rx = antenna;
125896 - //DBG_8192C("%s:mppriv.antenna_rx=%d\n", __func__, padapter->mppriv.antenna_rx);
125897 + //DBG_871X("%s:mppriv.antenna_rx=%d\n", __func__, padapter->mppriv.antenna_rx);
125898 Hal_SetAntenna(padapter);
125899 - wrqu->length = strlen(extra) + 1;
125900 + wrqu->length = strlen(extra);
125901
125902 return 0;
125903 }
125904 @@ -7973,7 +9591,7 @@ static int rtw_mp_ctx(struct net_device
125905 if (copy_from_user(extra, wrqu->pointer, wrqu->length))
125906 return -EFAULT;
125907
125908 - DBG_8192C("%s: in=%s\n", __func__, extra);
125909 + DBG_871X("%s: in=%s\n", __func__, extra);
125910
125911 countPkTx = strncmp(extra, "count=", 5); // strncmp TRUE is 0
125912 cotuTx = strncmp(extra, "background", 20);
125913 @@ -7984,9 +9602,9 @@ static int rtw_mp_ctx(struct net_device
125914 stop = strncmp(extra, "stop", 5);
125915 sscanf(extra, "count=%d,pkt", &count);
125916
125917 - //DBG_8192C("%s: count=%d countPkTx=%d cotuTx=%d CarrSprTx=%d scTx=%d sgleTx=%d pkTx=%d stop=%d\n", __func__, count, countPkTx, cotuTx, CarrSprTx, pkTx, sgleTx, scTx, stop);
125918 + //DBG_871X("%s: count=%d countPkTx=%d cotuTx=%d CarrSprTx=%d scTx=%d sgleTx=%d pkTx=%d stop=%d\n", __func__, count, countPkTx, cotuTx, CarrSprTx, pkTx, sgleTx, scTx, stop);
125919 _rtw_memset(extra, '\0', sizeof(extra));
125920 -
125921 +
125922 if (stop == 0) {
125923 bStartTest = 0; // To set Stop
125924 pmp_priv->tx.stop = 1;
125925 @@ -7995,7 +9613,7 @@ static int rtw_mp_ctx(struct net_device
125926 bStartTest = 1;
125927 if (pmp_priv->mode != MP_ON) {
125928 if (pmp_priv->tx.stop != 1) {
125929 - DBG_8192C("%s: MP_MODE != ON %d\n", __func__, pmp_priv->mode);
125930 + DBG_871X("%s: MP_MODE != ON %d\n", __func__, pmp_priv->mode);
125931 return -EFAULT;
125932 }
125933 }
125934 @@ -8016,7 +9634,7 @@ static int rtw_mp_ctx(struct net_device
125935 {
125936 case MP_PACKET_TX:
125937
125938 - //DBG_8192C("%s:pkTx %d\n", __func__,bStartTest);
125939 + //DBG_871X("%s:pkTx %d\n", __func__,bStartTest);
125940 if (bStartTest == 0)
125941 {
125942 pmp_priv->tx.stop = 1;
125943 @@ -8026,7 +9644,7 @@ static int rtw_mp_ctx(struct net_device
125944 else if (pmp_priv->tx.stop == 1)
125945 {
125946 sprintf( extra, "Start continuous DA=ffffffffffff len=1500 count=%u,\n",count);
125947 - //DBG_8192C("%s:countPkTx %d\n", __func__,count);
125948 + //DBG_871X("%s:countPkTx %d\n", __func__,count);
125949 pmp_priv->tx.stop = 0;
125950 pmp_priv->tx.count = count;
125951 pmp_priv->tx.payload = 2;
125952 @@ -8036,50 +9654,51 @@ static int rtw_mp_ctx(struct net_device
125953 SetPacketTx(padapter);
125954 }
125955 else {
125956 - //DBG_8192C("%s: pkTx not stop\n", __func__);
125957 + //DBG_871X("%s: pkTx not stop\n", __func__);
125958 return -EFAULT;
125959 }
125960 wrqu->length = strlen(extra);
125961 - return 0;
125962 + return 0;
125963
125964 case MP_SINGLE_TONE_TX:
125965 - //DBG_8192C("%s: sgleTx %d \n", __func__, bStartTest);
125966 + //DBG_871X("%s: sgleTx %d \n", __func__, bStartTest);
125967 if (bStartTest != 0){
125968 sprintf( extra, "Start continuous DA=ffffffffffff len=1500 \n infinite=yes.");
125969 - Hal_SetSingleToneTx(padapter, (u8)bStartTest);
125970 - }
125971 +
125972 + }
125973 + Hal_SetSingleToneTx(padapter, (u8)bStartTest);
125974 break;
125975
125976 case MP_CONTINUOUS_TX:
125977 - //DBG_8192C("%s: cotuTx %d\n", __func__, bStartTest);
125978 + DBG_871X("%s: cotuTx %d\n", __func__, bStartTest);
125979 if (bStartTest != 0){
125980 sprintf( extra, "Start continuous DA=ffffffffffff len=1500 \n infinite=yes.");
125981 - Hal_SetContinuousTx(padapter, (u8)bStartTest);
125982 }
125983 + Hal_SetContinuousTx(padapter, (u8)bStartTest);
125984 break;
125985
125986 case MP_CARRIER_SUPPRISSION_TX:
125987 - //DBG_8192C("%s: CarrSprTx %d\n", __func__, bStartTest);
125988 + //DBG_871X("%s: CarrSprTx %d\n", __func__, bStartTest);
125989 if (bStartTest != 0){
125990 if( pmp_priv->rateidx <= MPT_RATE_11M )
125991 {
125992 sprintf( extra, "Start continuous DA=ffffffffffff len=1500 \n infinite=yes.");
125993 - Hal_SetCarrierSuppressionTx(padapter, (u8)bStartTest);
125994 }else
125995 sprintf( extra, "Specify carrier suppression but not CCK rate");
125996 }
125997 + Hal_SetCarrierSuppressionTx(padapter, (u8)bStartTest);
125998 break;
125999
126000 case MP_SINGLE_CARRIER_TX:
126001 - //DBG_8192C("%s: scTx %d\n", __func__, bStartTest);
126002 + //DBG_871X("%s: scTx %d\n", __func__, bStartTest);
126003 if (bStartTest != 0){
126004 sprintf( extra, "Start continuous DA=ffffffffffff len=1500 \n infinite=yes.");
126005 - Hal_SetSingleCarrierTx(padapter, (u8)bStartTest);
126006 }
126007 + Hal_SetSingleCarrierTx(padapter, (u8)bStartTest);
126008 break;
126009
126010 default:
126011 - //DBG_8192C("%s:No Match MP_MODE\n", __func__);
126012 + //DBG_871X("%s:No Match MP_MODE\n", __func__);
126013 sprintf( extra, "Error! Continuous-Tx is not on-going.");
126014 return -EFAULT;
126015 }
126016 @@ -8088,7 +9707,7 @@ static int rtw_mp_ctx(struct net_device
126017 struct mp_priv *pmp_priv = &padapter->mppriv;
126018 if (pmp_priv->tx.stop == 0) {
126019 pmp_priv->tx.stop = 1;
126020 - //DBG_8192C("%s: pkt tx is running...\n", __func__);
126021 + //DBG_871X("%s: pkt tx is running...\n", __func__);
126022 rtw_msleep_os(5);
126023 }
126024 pmp_priv->tx.stop = 0;
126025 @@ -8113,7 +9732,7 @@ static int rtw_mp_arx(struct net_device
126026 if (copy_from_user(input, wrqu->pointer, wrqu->length))
126027 return -EFAULT;
126028
126029 - DBG_8192C("%s: %s\n", __func__, input);
126030 + DBG_871X("%s: %s\n", __func__, input);
126031
126032 bStartRx = (strncmp(input, "start", 5)==0)?1:0; // strncmp TRUE is 0
126033 bStopRx = (strncmp(input, "stop", 5)==0)?1:0; // strncmp TRUE is 0
126034 @@ -8166,23 +9785,33 @@ static int rtw_mp_pwrtrk(struct net_devi
126035 u32 thermal;
126036 s32 ret;
126037 PADAPTER padapter = rtw_netdev_priv(dev);
126038 + u8 input[wrqu->length];
126039
126040 + if (copy_from_user(input, wrqu->pointer, wrqu->length))
126041 + return -EFAULT;
126042
126043 + _rtw_memset(extra, 0, wrqu->length);
126044 +
126045 enable = 1;
126046 if (wrqu->length > 1) { // not empty string
126047 - if (strncmp(extra, "stop", 4) == 0)
126048 + if (strncmp(input, "stop", 4) == 0)
126049 + {
126050 enable = 0;
126051 - else {
126052 - if (sscanf(extra, "ther=%d", &thermal)) {
126053 + sprintf(extra, "mp tx power tracking stop");
126054 + }
126055 + else if (sscanf(input, "ther=%d", &thermal)) {
126056 ret = Hal_SetThermalMeter(padapter, (u8)thermal);
126057 if (ret == _FAIL) return -EPERM;
126058 - } else
126059 - return -EINVAL;
126060 + sprintf(extra, "mp tx power tracking start,target value=%d ok ",thermal);
126061 + }else {
126062 + return -EINVAL;
126063 }
126064 }
126065
126066 ret = Hal_SetPowerTracking(padapter, enable);
126067 if (ret == _FAIL) return -EPERM;
126068 +
126069 + wrqu->length = strlen(extra);
126070
126071 return 0;
126072 }
126073 @@ -8192,13 +9821,15 @@ static int rtw_mp_psd(struct net_device
126074 struct iw_point *wrqu, char *extra)
126075 {
126076 PADAPTER padapter = rtw_netdev_priv(dev);
126077 + u8 input[wrqu->length];
126078
126079 -
126080 - if (copy_from_user(extra, wrqu->pointer, wrqu->length))
126081 + if (copy_from_user(input, wrqu->pointer, wrqu->length))
126082 return -EFAULT;
126083
126084 - wrqu->length = mp_query_psd(padapter, extra);
126085 + strcpy(extra,input);
126086
126087 + wrqu->length = mp_query_psd(padapter, extra);
126088 +
126089 return 0;
126090 }
126091
126092 @@ -8206,7 +9837,7 @@ static int rtw_mp_thermal(struct net_dev
126093 struct iw_request_info *info,
126094 struct iw_point *wrqu, char *extra)
126095 {
126096 - u8 val;
126097 + u8 val;
126098 u16 bwrite=1;
126099 #ifdef CONFIG_RTL8192C
126100 u16 addr=0x78;
126101 @@ -8221,7 +9852,7 @@ static int rtw_mp_thermal(struct net_dev
126102 if (copy_from_user(extra, wrqu->pointer, wrqu->length))
126103 return -EFAULT;
126104
126105 - //DBG_8192C("print extra %s \n",extra);
126106 + //DBG_871X("print extra %s \n",extra);
126107
126108 bwrite = strncmp(extra, "write", 6); // strncmp TRUE is 0
126109
126110 @@ -8229,16 +9860,16 @@ static int rtw_mp_thermal(struct net_dev
126111
126112 if( bwrite == 0 )
126113 {
126114 - //DBG_8192C("to write val:%d",val);
126115 + //DBG_871X("to write val:%d",val);
126116 EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_available_size, _FALSE);
126117 if( 2 > max_available_size )
126118 {
126119 - DBG_8192C("no available efuse!\n");
126120 + DBG_871X("no available efuse!\n");
126121 return -EFAULT;
126122 }
126123 if ( rtw_efuse_map_write(padapter, addr, cnt, &val) == _FAIL )
126124 {
126125 - DBG_8192C("rtw_efuse_map_write error \n");
126126 + DBG_871X("rtw_efuse_map_write error \n");
126127 return -EFAULT;
126128 }
126129 else
126130 @@ -8248,7 +9879,7 @@ static int rtw_mp_thermal(struct net_dev
126131 }
126132 else
126133 {
126134 - sprintf(extra, "%d", val);
126135 + sprintf(extra, "%d", val);
126136 }
126137 wrqu->length = strlen(extra);
126138
126139 @@ -8291,24 +9922,24 @@ static int rtw_mp_dump(struct net_device
126140
126141 if ( strncmp(extra, "all", 4)==0 )
126142 {
126143 - DBG_8192C("\n======= MAC REG =======\n");
126144 + DBG_871X("\n======= MAC REG =======\n");
126145 for ( i=0x0;i<0x300;i+=4 )
126146 {
126147 - if(j%4==1) DBG_8192C("0x%02x",i);
126148 - DBG_8192C(" 0x%08x ",rtw_read32(padapter,i));
126149 - if((j++)%4 == 0) DBG_8192C("\n");
126150 + if(j%4==1) DBG_871X("0x%02x",i);
126151 + DBG_871X(" 0x%08x ",rtw_read32(padapter,i));
126152 + if((j++)%4 == 0) DBG_871X("\n");
126153 }
126154 for( i=0x400;i<0x800;i+=4 )
126155 {
126156 - if(j%4==1) DBG_8192C("0x%02x",i);
126157 - DBG_8192C(" 0x%08x ",rtw_read32(padapter,i));
126158 - if((j++)%4 == 0) DBG_8192C("\n");
126159 + if(j%4==1) DBG_871X("0x%02x",i);
126160 + DBG_871X(" 0x%08x ",rtw_read32(padapter,i));
126161 + if((j++)%4 == 0) DBG_871X("\n");
126162 }
126163
126164 i,j=1;
126165 - padapter->HalFunc.GetHwRegHandler(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
126166 + rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
126167
126168 - DBG_8192C("\n======= RF REG =======\n");
126169 + DBG_871X("\n======= RF REG =======\n");
126170 if(( RF_1T2R == rf_type ) ||( RF_1T1R ==rf_type ))
126171 path_nums = 1;
126172 else
126173 @@ -8323,10 +9954,10 @@ static int rtw_mp_dump(struct net_device
126174 #endif
126175 {
126176 //value = PHY_QueryRFReg(padapter, (RF90_RADIO_PATH_E)path,i, bMaskDWord);
126177 - value =padapter->HalFunc.read_rfreg(padapter, path, i, 0xffffffff);
126178 - if(j%4==1) DBG_8192C("0x%02x ",i);
126179 - DBG_8192C(" 0x%08x ",value);
126180 - if((j++)%4==0) DBG_8192C("\n");
126181 + value =rtw_hal_read_rfreg(padapter, path, i, 0xffffffff);
126182 + if(j%4==1) DBG_871X("0x%02x ",i);
126183 + DBG_871X(" 0x%08x ",value);
126184 + if((j++)%4==0) DBG_871X("\n");
126185 }
126186 }
126187 }
126188 @@ -8345,7 +9976,7 @@ static int rtw_mp_phypara(struct net_dev
126189 if (copy_from_user(input, wrqu->pointer, wrqu->length))
126190 return -EFAULT;
126191
126192 - DBG_8192C("%s:iwpriv in=%s\n", __func__, input);
126193 + DBG_871X("%s:iwpriv in=%s\n", __func__, input);
126194
126195 sscanf(input, "xcap=%d", &valxcap);
126196
126197 @@ -8407,31 +10038,27 @@ static int rtw_mp_set(struct net_device
126198 break;
126199
126200 case MP_START:
126201 - DBG_8192C("set case mp_start \n");
126202 + DBG_871X("set case mp_start \n");
126203 rtw_mp_start (dev,info,wrqu,extra);
126204 break;
126205
126206 case MP_STOP:
126207 - DBG_8192C("set case mp_stop \n");
126208 + DBG_871X("set case mp_stop \n");
126209 rtw_mp_stop (dev,info,wrqu,extra);
126210 break;
126211
126212 case MP_BANDWIDTH:
126213 - DBG_8192C("set case mp_bandwidth \n");
126214 + DBG_871X("set case mp_bandwidth \n");
126215 rtw_mp_bandwidth (dev,info,wrqu,extra);
126216 break;
126217 - case MP_PWRTRK:
126218 - DBG_8192C("set case MP_PWRTRK \n");
126219 - rtw_mp_pwrtrk (dev,info,wrqu,extra);
126220 - break;
126221
126222 case MP_RESET_STATS:
126223 - DBG_8192C("set case MP_RESET_STATS \n");
126224 + DBG_871X("set case MP_RESET_STATS \n");
126225 rtw_mp_reset_stats (dev,info,wrqu,extra);
126226 break;
126227
126228 case EFUSE_SET:
126229 - DBG_8192C("efuse set \n");
126230 + DBG_871X("efuse set \n");
126231 rtw_mp_efuse_set (dev,info,wdata,extra);
126232 break;
126233
126234 @@ -8450,7 +10077,7 @@ static int rtw_mp_get(struct net_device
126235 u32 subcmd = wrqu->flags;
126236 PADAPTER padapter = rtw_netdev_priv(dev);
126237
126238 - DBG_8192C("in mp_get extra= %s \n",extra);
126239 + //DBG_871X("in mp_get extra= %s \n",extra);
126240
126241 if (padapter == NULL)
126242 {
126243 @@ -8465,86 +10092,212 @@ static int rtw_mp_get(struct net_device
126244 switch(subcmd)
126245 {
126246 case MP_PHYPARA:
126247 - DBG_8192C("mp_get MP_PHYPARA \n");
126248 + DBG_871X("mp_get MP_PHYPARA \n");
126249 rtw_mp_phypara(dev,info,wrqu,extra);
126250 break;
126251
126252 case MP_CHANNEL:
126253 - DBG_8192C("set case mp_channel \n");
126254 + DBG_871X("set case mp_channel \n");
126255 rtw_mp_channel (dev,info,wrqu,extra);
126256 break;
126257
126258 case READ_REG:
126259 - DBG_8192C("mp_get READ_REG \n");
126260 + DBG_871X("mp_get READ_REG \n");
126261 rtw_mp_read_reg (dev,info,wrqu,extra);
126262 break;
126263 case READ_RF:
126264 - DBG_8192C("mp_get READ_RF \n");
126265 + DBG_871X("mp_get READ_RF \n");
126266 rtw_mp_read_rf (dev,info,wrqu,extra);
126267 break;
126268
126269 case MP_RATE:
126270 - DBG_8192C("set case mp_rate \n");
126271 + DBG_871X("set case mp_rate \n");
126272 rtw_mp_rate (dev,info,wrqu,extra);
126273 break;
126274
126275 case MP_TXPOWER:
126276 - DBG_8192C("set case MP_TXPOWER \n");
126277 + DBG_871X("set case MP_TXPOWER \n");
126278 rtw_mp_txpower (dev,info,wrqu,extra);
126279 break;
126280
126281 case MP_ANT_TX:
126282 - DBG_8192C("set case MP_ANT_TX \n");
126283 + DBG_871X("set case MP_ANT_TX \n");
126284 rtw_mp_ant_tx (dev,info,wrqu,extra);
126285 break;
126286
126287 case MP_ANT_RX:
126288 - DBG_8192C("set case MP_ANT_RX \n");
126289 + DBG_871X("set case MP_ANT_RX \n");
126290 rtw_mp_ant_rx (dev,info,wrqu,extra);
126291 break;
126292
126293 case MP_QUERY:
126294 - DBG_8192C("mp_get mp_query MP_QUERY \n");
126295 + DBG_871X("mp_get mp_query MP_QUERY \n");
126296 rtw_mp_trx_query(dev,info,wrqu,extra);
126297 break;
126298
126299 case MP_CTX:
126300 - DBG_8192C("set case MP_CTX \n");
126301 + DBG_871X("set case MP_CTX \n");
126302 rtw_mp_ctx (dev,info,wrqu,extra);
126303 break;
126304
126305 case MP_ARX:
126306 - DBG_8192C("set case MP_ARX \n");
126307 + DBG_871X("set case MP_ARX \n");
126308 rtw_mp_arx (dev,info,wrqu,extra);
126309 break;
126310
126311 case EFUSE_GET:
126312 - DBG_8192C("efuse get EFUSE_GET \n");
126313 + DBG_871X("efuse get EFUSE_GET \n");
126314 rtw_mp_efuse_get(dev,info,wdata,extra);
126315 break;
126316
126317 case MP_DUMP:
126318 - DBG_8192C("set case MP_DUMP \n");
126319 + DBG_871X("set case MP_DUMP \n");
126320 rtw_mp_dump (dev,info,wrqu,extra);
126321 break;
126322 case MP_PSD:
126323 - DBG_8192C("set case MP_PSD \n");
126324 + DBG_871X("set case MP_PSD \n");
126325 rtw_mp_psd (dev,info,wrqu,extra);
126326 - break;
126327 -
126328 + break;
126329 +
126330 case MP_THER:
126331 - DBG_8192C("set case MP_THER \n");
126332 + DBG_871X("set case MP_THER \n");
126333 rtw_mp_thermal (dev,info,wrqu,extra);
126334 - break;
126335 -
126336 + break;
126337 +
126338 + case MP_PWRTRK:
126339 + DBG_871X("set case MP_PWRTRK \n");
126340 + rtw_mp_pwrtrk (dev,info,wrqu,extra);
126341 + break;
126342 + }
126343 +
126344 +return 0;
126345 +}
126346 +
126347 +#endif //#if defined(CONFIG_MP_INCLUDED) && defined(CONFIG_MP_IWPRIV_SUPPORT)
126348 +
126349 +static int rtw_wfd_tdls_enable(struct net_device *dev,
126350 + struct iw_request_info *info,
126351 + union iwreq_data *wrqu, char *extra)
126352 +{
126353 + int ret = 0;
126354 +
126355 +#ifdef CONFIG_TDLS
126356 +#ifdef CONFIG_WFD
126357 +
126358 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
126359 +
126360 + printk( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
126361 +
126362 + if ( extra[ 0 ] == '0' )
126363 + {
126364 + padapter->wdinfo.wfd_tdls_enable = 0;
126365 + }
126366 + else
126367 + {
126368 + padapter->wdinfo.wfd_tdls_enable = 1;
126369 + }
126370 +
126371 +#endif //CONFIG_WFD
126372 +#endif //CONFIG_TDLS
126373 +
126374 + return ret;
126375 +}
126376 +
126377 +static int rtw_tdls_weaksec(struct net_device *dev,
126378 + struct iw_request_info *info,
126379 + union iwreq_data *wrqu, char *extra)
126380 +{
126381 + int ret = 0;
126382 +
126383 +#ifdef CONFIG_TDLS
126384 +
126385 + u8 i, j;
126386 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
126387 +
126388 + DBG_871X( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
126389 +
126390 + if ( extra[ 0 ] == '0' )
126391 + {
126392 + padapter->wdinfo.wfd_tdls_weaksec = 0;
126393 + }
126394 + else
126395 + {
126396 + padapter->wdinfo.wfd_tdls_weaksec = 1;
126397 }
126398 -
126399 -return 0;
126400 +#endif
126401 +
126402 + return ret;
126403 }
126404
126405 -#endif //#if defined(CONFIG_MP_INCLUDED) && defined(CONFIG_MP_IWPRIV_SUPPORT)
126406
126407 +static int rtw_tdls_enable(struct net_device *dev,
126408 + struct iw_request_info *info,
126409 + union iwreq_data *wrqu, char *extra)
126410 +{
126411 + int ret = 0;
126412 +
126413 +#ifdef CONFIG_TDLS
126414 +
126415 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
126416 + struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
126417 + _irqL irqL;
126418 + _list *plist, *phead;
126419 + s32 index;
126420 + struct sta_info *psta = NULL;
126421 + struct sta_priv *pstapriv = &padapter->stapriv;
126422 + u8 tdls_sta[NUM_STA][ETH_ALEN];
126423 + u8 empty_hwaddr[ETH_ALEN] = { 0x00 };
126424 +
126425 + printk( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
126426 +
126427 + _rtw_memset(tdls_sta, 0x00, sizeof(tdls_sta));
126428 +
126429 + if ( extra[ 0 ] == '0' )
126430 + {
126431 + ptdlsinfo->enable = 0;
126432 +
126433 + if(pstapriv->asoc_sta_count==1)
126434 + return ret;
126435 +
126436 + _enter_critical_bh(&pstapriv->sta_hash_lock, &irqL);
126437 + for(index=0; index< NUM_STA; index++)
126438 + {
126439 + phead = &(pstapriv->sta_hash[index]);
126440 + plist = get_next(phead);
126441 +
126442 + while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
126443 + {
126444 + psta = LIST_CONTAINOR(plist, struct sta_info ,hash_list);
126445 +
126446 + plist = get_next(plist);
126447 +
126448 + if(psta->tdls_sta_state != TDLS_STATE_NONE)
126449 + {
126450 + _rtw_memcpy(tdls_sta[index], psta->hwaddr, ETH_ALEN);
126451 + }
126452 + }
126453 + }
126454 + _exit_critical_bh(&pstapriv->sta_hash_lock, &irqL);
126455
126456 + for(index=0; index< NUM_STA; index++)
126457 + {
126458 + if( !_rtw_memcmp(tdls_sta[index], empty_hwaddr, ETH_ALEN) )
126459 + {
126460 + printk("issue tear down to "MAC_FMT"\n", MAC_ARG(tdls_sta[index]));
126461 + issue_tdls_teardown(padapter, tdls_sta[index]);
126462 + }
126463 + }
126464 + rtw_tdls_cmd(padapter, myid(&(padapter->eeprompriv)), TDLS_RS_RCR);
126465 + rtw_reset_tdls_info(padapter);
126466 + }
126467 + else if ( extra[ 0 ] == '1' )
126468 + {
126469 + ptdlsinfo->enable = 1;
126470 + }
126471 +#endif //CONFIG_TDLS
126472 +
126473 + return ret;
126474 +}
126475
126476 static int rtw_tdls_setup(struct net_device *dev,
126477 struct iw_request_info *info,
126478 @@ -8558,20 +10311,40 @@ static int rtw_tdls_setup(struct net_dev
126479 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
126480 u8 mac_addr[ETH_ALEN];
126481
126482 - DBG_8192C( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
126483 +#ifdef CONFIG_WFD
126484 + struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
126485 +#endif // CONFIG_WFD
126486 +
126487 + printk( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
126488
126489 for( i=0, j=0 ; i < ETH_ALEN; i++, j+=3 ){
126490 mac_addr[i]=key_2char2num(*(extra+j), *(extra+j+1));
126491 }
126492
126493 - issue_tdls_setup_req(padapter, mac_addr);
126494 -
126495 +#ifdef CONFIG_WFD
126496 + if ( _AES_ != padapter->securitypriv.dot11PrivacyAlgrthm )
126497 + {
126498 + // Weak Security situation with AP.
126499 + if ( 0 == pwdinfo->wfd_tdls_weaksec )
126500 + {
126501 + // Can't send the tdls setup request out!!
126502 + DBG_871X( "[%s] Current link is not AES, SKIP sending the tdls setup request!!\n", __FUNCTION__ );
126503 + }
126504 + else
126505 + {
126506 + issue_tdls_setup_req(padapter, mac_addr);
126507 + }
126508 + }
126509 + else
126510 +#endif // CONFIG_WFD
126511 + {
126512 + issue_tdls_setup_req(padapter, mac_addr);
126513 + }
126514 #endif
126515
126516 return ret;
126517 }
126518
126519 -
126520 static int rtw_tdls_teardown(struct net_device *dev,
126521 struct iw_request_info *info,
126522 union iwreq_data *wrqu, char *extra)
126523 @@ -8585,12 +10358,12 @@ static int rtw_tdls_teardown(struct net_
126524 struct sta_info *ptdls_sta = NULL;
126525 u8 mac_addr[ETH_ALEN];
126526
126527 - DBG_8192C( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
126528 + printk( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
126529
126530 for( i=0, j=0 ; i < ETH_ALEN; i++, j+=3 ){
126531 mac_addr[i]=key_2char2num(*(extra+j), *(extra+j+1));
126532 }
126533 -
126534 +
126535 ptdls_sta = rtw_get_stainfo( &(padapter->stapriv), mac_addr);
126536
126537 if(ptdls_sta != NULL)
126538 @@ -8599,12 +10372,11 @@ static int rtw_tdls_teardown(struct net_
126539 issue_tdls_teardown(padapter, mac_addr);
126540 }
126541
126542 -#endif
126543 +#endif //CONFIG_TDLS
126544
126545 return ret;
126546 }
126547
126548 -
126549 static int rtw_tdls_discovery(struct net_device *dev,
126550 struct iw_request_info *info,
126551 union iwreq_data *wrqu, char *extra)
126552 @@ -8617,11 +10389,11 @@ static int rtw_tdls_discovery(struct net
126553 struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
126554 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
126555
126556 - DBG_8192C( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
126557 + printk( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
126558
126559 issue_tdls_dis_req(padapter, NULL);
126560
126561 -#endif
126562 +#endif //CONFIG_TDLS
126563
126564 return ret;
126565 }
126566 @@ -8639,7 +10411,7 @@ static int rtw_tdls_ch_switch(struct net
126567 u8 i, j, mac_addr[ETH_ALEN];
126568 struct sta_info *ptdls_sta = NULL;
126569
126570 - DBG_8192C( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
126571 + printk( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
126572
126573 for( i=0, j=0 ; i < ETH_ALEN; i++, j+=3 ){
126574 mac_addr[i]=key_2char2num(*(extra+j), *(extra+j+1));
126575 @@ -8648,15 +10420,14 @@ static int rtw_tdls_ch_switch(struct net
126576 ptdls_sta = rtw_get_stainfo(&padapter->stapriv, mac_addr);
126577 if( ptdls_sta == NULL )
126578 return ret;
126579 - ptdls_sta->option=4;
126580 ptdlsinfo->ch_sensing=1;
126581
126582 rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_INIT_CH_SEN);
126583 -
126584 -#endif
126585 +
126586 +#endif //CONFIG_TDLS
126587
126588 return ret;
126589 - }
126590 +}
126591
126592 static int rtw_tdls_pson(struct net_device *dev,
126593 struct iw_request_info *info,
126594 @@ -8672,7 +10443,7 @@ static int rtw_tdls_pson(struct net_devi
126595 u8 i, j, mac_addr[ETH_ALEN];
126596 struct sta_info *ptdls_sta = NULL;
126597
126598 - DBG_8192C( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
126599 + printk( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
126600
126601 for( i=0, j=0 ; i < ETH_ALEN; i++, j+=3 ){
126602 mac_addr[i]=key_2char2num(*(extra+j), *(extra+j+1));
126603 @@ -8682,9 +10453,9 @@ static int rtw_tdls_pson(struct net_devi
126604
126605 issue_nulldata_to_TDLS_peer_STA(padapter, ptdls_sta, 1);
126606
126607 -#endif
126608 +#endif //CONFIG_TDLS
126609
126610 - return ret;
126611 + return ret;
126612 }
126613
126614 static int rtw_tdls_psoff(struct net_device *dev,
126615 @@ -8701,7 +10472,7 @@ static int rtw_tdls_psoff(struct net_dev
126616 u8 i, j, mac_addr[ETH_ALEN];
126617 struct sta_info *ptdls_sta = NULL;
126618
126619 - DBG_8192C( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
126620 + printk( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
126621
126622 for( i=0, j=0 ; i < ETH_ALEN; i++, j+=3 ){
126623 mac_addr[i]=key_2char2num(*(extra+j), *(extra+j+1));
126624 @@ -8711,9 +10482,185 @@ static int rtw_tdls_psoff(struct net_dev
126625
126626 issue_nulldata_to_TDLS_peer_STA(padapter, ptdls_sta, 0);
126627
126628 -#endif
126629 +#endif //CONFIG_TDLS
126630 +
126631 + return ret;
126632 +}
126633 +
126634 +static int rtw_tdls_setip(struct net_device *dev,
126635 + struct iw_request_info *info,
126636 + union iwreq_data *wrqu, char *extra)
126637 +{
126638 + int ret = 0;
126639 +
126640 +#ifdef CONFIG_TDLS
126641 +#ifdef CONFIG_WFD
126642 +
126643 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
126644 + struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
126645 + struct wifi_display_info *pwfd_info = ptdlsinfo->wfd_info;
126646 + u8 i=0, j=0, k=0, tag=0, ip[3] = { 0xff }, *ptr = extra;
126647 +
126648 + printk( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length - 1 );
126649 +
126650 +
126651 + while( i < 4 )
126652 + {
126653 + for( j=0; j < 4; j++)
126654 + {
126655 + if( *( extra + j + tag ) == '.' || *( extra + j + tag ) == '\0' )
126656 + {
126657 + if( j == 1 )
126658 + pwfd_info->ip_address[i]=convert_ip_addr( '0', '0', *(extra+(j-1)+tag));
126659 + if( j == 2 )
126660 + pwfd_info->ip_address[i]=convert_ip_addr( '0', *(extra+(j-2)+tag), *(extra+(j-1)+tag));
126661 + if( j == 3 )
126662 + pwfd_info->ip_address[i]=convert_ip_addr( *(extra+(j-3)+tag), *(extra+(j-2)+tag), *(extra+(j-1)+tag));
126663 +
126664 + tag += j + 1;
126665 + break;
126666 + }
126667 + }
126668 + i++;
126669 + }
126670 +
126671 + printk( "[%s] Set IP = %u.%u.%u.%u \n", __FUNCTION__,
126672 + ptdlsinfo->wfd_info->ip_address[0], ptdlsinfo->wfd_info->ip_address[1],
126673 + ptdlsinfo->wfd_info->ip_address[2], ptdlsinfo->wfd_info->ip_address[3]
126674 + );
126675 +
126676 +#endif //CONFIG_WFD
126677 +#endif //CONFIG_TDLS
126678 +
126679 + return ret;
126680 +}
126681 +
126682 +static int rtw_tdls_getip(struct net_device *dev,
126683 + struct iw_request_info *info,
126684 + union iwreq_data *wrqu, char *extra)
126685 +{
126686 + int ret = 0;
126687 +
126688 +#ifdef CONFIG_TDLS
126689 +#ifdef CONFIG_WFD
126690 +
126691 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
126692 + struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
126693 + struct wifi_display_info *pwfd_info = ptdlsinfo->wfd_info;
126694 +
126695 + printk( "[%s]\n", __FUNCTION__);
126696 +
126697 + sprintf( extra, "\n\n%u.%u.%u.%u\n",
126698 + pwfd_info->peer_ip_address[0], pwfd_info->peer_ip_address[1],
126699 + pwfd_info->peer_ip_address[2], pwfd_info->peer_ip_address[3]
126700 + );
126701 +
126702 + printk( "[%s] IP=%u.%u.%u.%u\n", __FUNCTION__,
126703 + pwfd_info->peer_ip_address[0], pwfd_info->peer_ip_address[1],
126704 + pwfd_info->peer_ip_address[2], pwfd_info->peer_ip_address[3]
126705 + );
126706 +
126707 + wrqu->data.length = strlen( extra );
126708 +
126709 +#endif //CONFIG_WFD
126710 +#endif //CONFIG_TDLS
126711 +
126712 + return ret;
126713 +}
126714 +
126715 +static int rtw_tdls_getport(struct net_device *dev,
126716 + struct iw_request_info *info,
126717 + union iwreq_data *wrqu, char *extra)
126718 +{
126719 +
126720 + int ret = 0;
126721 +
126722 +#ifdef CONFIG_TDLS
126723 +#ifdef CONFIG_WFD
126724 +
126725 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
126726 + struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
126727 + struct wifi_display_info *pwfd_info = ptdlsinfo->wfd_info;
126728 +
126729 + printk( "[%s]\n", __FUNCTION__);
126730 +
126731 + sprintf( extra, "\n\n%d\n", pwfd_info->peer_rtsp_ctrlport );
126732 + printk( "[%s] remote port = %d\n", __FUNCTION__, pwfd_info->peer_rtsp_ctrlport );
126733 +
126734 + wrqu->data.length = strlen( extra );
126735 +
126736 +#endif //CONFIG_WFD
126737 +#endif //CONFIG_TDLS
126738 +
126739 + return ret;
126740 +
126741 +}
126742 +
126743 +//WFDTDLS, for sigma test
126744 +static int rtw_tdls_dis_result(struct net_device *dev,
126745 + struct iw_request_info *info,
126746 + union iwreq_data *wrqu, char *extra)
126747 +{
126748 +
126749 + int ret = 0;
126750 +
126751 +#ifdef CONFIG_TDLS
126752 +#ifdef CONFIG_WFD
126753 +
126754 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
126755 + struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
126756 + struct wifi_display_info *pwfd_info = ptdlsinfo->wfd_info;
126757 +
126758 + printk( "[%s]\n", __FUNCTION__);
126759 +
126760 + if(ptdlsinfo->dev_discovered == 1 )
126761 + {
126762 + sprintf( extra, "\n\nDis=1\n" );
126763 + ptdlsinfo->dev_discovered = 0;
126764 + }
126765 +
126766 + wrqu->data.length = strlen( extra );
126767 +
126768 +#endif //CONFIG_WFD
126769 +#endif //CONFIG_TDLS
126770 +
126771 + return ret;
126772 +
126773 +}
126774 +
126775 +//WFDTDLS, for sigma test
126776 +static int rtw_wfd_tdls_status(struct net_device *dev,
126777 + struct iw_request_info *info,
126778 + union iwreq_data *wrqu, char *extra)
126779 +{
126780 +
126781 + int ret = 0;
126782 +
126783 +#ifdef CONFIG_TDLS
126784 +#ifdef CONFIG_WFD
126785 +
126786 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
126787 + struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
126788 + struct wifi_display_info *pwfd_info = ptdlsinfo->wfd_info;
126789 +
126790 + printk( "[%s]\n", __FUNCTION__);
126791 +
126792 + if(ptdlsinfo->setup_state == TDLS_LINKED_STATE )
126793 + {
126794 + sprintf( extra, "\n\nStatus=1\n" );
126795 + }
126796 + else
126797 + {
126798 + sprintf( extra, "\n\nStatus=0\n" );
126799 + }
126800 +
126801 + wrqu->data.length = strlen( extra );
126802 +
126803 +#endif //CONFIG_WFD
126804 +#endif //CONFIG_TDLS
126805
126806 return ret;
126807 +
126808 }
126809
126810 static int rtw_tdls_ch_switch_off(struct net_device *dev,
126811 @@ -8728,7 +10675,7 @@ static int rtw_tdls_ch_switch_off(struct
126812 u8 i, j, mac_addr[ETH_ALEN];
126813 struct sta_info *ptdls_sta = NULL;
126814
126815 - DBG_8192C( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
126816 + printk( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
126817
126818 for( i=0, j=0 ; i < ETH_ALEN; i++, j+=3 ){
126819 mac_addr[i]=key_2char2num(*(extra+j), *(extra+j+1));
126820 @@ -8741,11 +10688,11 @@ static int rtw_tdls_ch_switch_off(struct
126821 if((ptdls_sta->tdls_sta_state & TDLS_AT_OFF_CH_STATE) && (ptdls_sta->tdls_sta_state & TDLS_PEER_AT_OFF_STATE)){
126822 pmlmeinfo->tdls_candidate_ch= pmlmeext->cur_channel;
126823 issue_tdls_ch_switch_req(padapter, mac_addr);
126824 - DBG_8192C("issue tdls ch switch req back to base channel\n");
126825 + DBG_871X("issue tdls ch switch req back to base channel\n");
126826 }
126827 */
126828
126829 -#endif
126830 +#endif //CONFIG_TDLS
126831
126832 return ret;
126833 }
126834 @@ -8757,8 +10704,34 @@ static int rtw_tdls(struct net_device *d
126835 int ret = 0;
126836
126837 #ifdef CONFIG_TDLS
126838 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
126839 +
126840 + printk( "[%s] extra = %s\n", __FUNCTION__, extra );
126841 + // WFD Sigma will use the tdls enable command to let the driver know we want to test the tdls now!
126842 + if ( _rtw_memcmp( extra, "wfdenable=", 10 ) )
126843 + {
126844 + wrqu->data.length -=10;
126845 + rtw_wfd_tdls_enable( dev, info, wrqu, &extra[10] );
126846 + return ret;
126847 + }
126848 + else if ( _rtw_memcmp( extra, "weaksec=", 8 ) )
126849 + {
126850 + wrqu->data.length -=8;
126851 + rtw_tdls_weaksec( dev, info, wrqu, &extra[8] );
126852 + return ret;
126853 + }
126854 + else if ( _rtw_memcmp( extra, "tdlsenable=", 11 ) )
126855 + {
126856 + wrqu->data.length -=11;
126857 + rtw_tdls_enable( dev, info, wrqu, &extra[11] );
126858 + return ret;
126859 + }
126860
126861 - DBG_8192C( "[%s] extra = %s\n", __FUNCTION__, extra );
126862 + if( padapter->tdlsinfo.enable == 0 )
126863 + {
126864 + printk("tdls haven't enabled\n");
126865 + return 0;
126866 + }
126867
126868 if ( _rtw_memcmp( extra, "setup=", 6 ) )
126869 {
126870 @@ -8795,89 +10768,56 @@ static int rtw_tdls(struct net_device *d
126871 wrqu->data.length -= 6;
126872 rtw_tdls_psoff( dev, info, wrqu, &extra[6] );
126873 }
126874 -#endif
126875 -
126876 - return ret;
126877 -}
126878 -
126879 -
126880 -static int rtw_pm_set_lps(struct net_device *dev,
126881 - struct iw_request_info *info,
126882 - union iwreq_data *wrqu, char *extra)
126883 -{
126884 -
126885 - int ret = 0;
126886 - _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
126887 - struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
126888 - u8 mode = 0;
126889 -
126890 - switch( wrqu->data.length -1 )
126891 - {
126892 - case 1:
126893 - {
126894 - mode = extra[ 0 ] - '0';
126895 - break;
126896 - }
126897 - case 2:
126898 - {
126899 - mode = str_2char2num( extra[ 0 ], extra[ 1 ]);
126900 - break;
126901 - }
126902 - }
126903 -
126904 - if ( mode < PS_MODE_NUM )
126905 +#ifdef CONFIG_WFD
126906 + else if (_rtw_memcmp( extra, "setip=", 6 ) )
126907 {
126908 - if(pwrctrlpriv->power_mgnt !=mode)
126909 - {
126910 - if(PS_MODE_ACTIVE == mode)
126911 - {
126912 - LeaveAllPowerSaveMode(padapter);
126913 - }
126914 - else
126915 - {
126916 - pwrctrlpriv->LpsIdleCount = 2;
126917 - }
126918 - pwrctrlpriv->power_mgnt = mode;
126919 - pwrctrlpriv->bLeisurePs = (PS_MODE_ACTIVE != pwrctrlpriv->power_mgnt)?_TRUE:_FALSE;
126920 - }
126921 + wrqu->data.length -= 6;
126922 + rtw_tdls_setip( dev, info, wrqu, &extra[6] );
126923 }
126924 - else
126925 + else if (_rtw_memcmp( extra, "tprobe=", 6 ) )
126926 {
126927 - ret = -1;
126928 + issue_tunneled_probe_req((_adapter *)rtw_netdev_priv(dev));
126929 }
126930 +#endif //CONFIG_WFD
126931
126932 +#endif //CONFIG_TDLS
126933 +
126934 return ret;
126935 -
126936 }
126937
126938 -static int rtw_pm_set_ips(struct net_device *dev,
126939 - struct iw_request_info *info,
126940 - union iwreq_data *wrqu, char *extra)
126941 +
126942 +static int rtw_tdls_get(struct net_device *dev,
126943 + struct iw_request_info *info,
126944 + union iwreq_data *wrqu, char *extra)
126945 {
126946 - _adapter *padapter = rtw_netdev_priv(dev);
126947 - struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
126948 - unsigned mode = 0;
126949 + int ret = 0;
126950 +
126951 +#ifdef CONFIG_WFD
126952
126953 - sscanf(extra, "%u", &mode);
126954 + DBG_871X( "[%s] extra = %s\n", __FUNCTION__, (char*) wrqu->data.pointer );
126955
126956 - if( mode == IPS_NORMAL || mode == IPS_LEVEL_2 ) {
126957 - rtw_ips_mode_req(pwrctrlpriv, mode);
126958 - pwrctrlpriv->power_mgnt = PS_MODE_MIN;
126959 - rtw_set_pwr_state_check_timer(pwrctrlpriv);
126960 - DBG_871X("%s %s\n", __FUNCTION__, mode == IPS_NORMAL?"IPS_NORMAL":"IPS_LEVEL_2");
126961 - return 0;
126962 - }
126963 - else if(mode ==IPS_NONE){
126964 - if(_FAIL == rfpwrstate_check(padapter))
126965 - {
126966 - return -EFAULT;
126967 - }
126968 - pwrctrlpriv->power_mgnt = PS_MODE_ACTIVE;
126969 + if ( _rtw_memcmp( wrqu->data.pointer, "ip", 2 ) )
126970 + {
126971 + rtw_tdls_getip( dev, info, wrqu, extra );
126972 + }
126973 + if ( _rtw_memcmp( wrqu->data.pointer, "port", 4 ) )
126974 + {
126975 + rtw_tdls_getport( dev, info, wrqu, extra );
126976 }
126977 - else {
126978 - return -EFAULT;
126979 +
126980 + //WFDTDLS, for sigma test
126981 + if ( _rtw_memcmp( wrqu->data.pointer, "dis", 3 ) )
126982 + {
126983 + rtw_tdls_dis_result( dev, info, wrqu, extra );
126984 }
126985 - return 0;
126986 + if ( _rtw_memcmp( wrqu->data.pointer, "status", 6 ) )
126987 + {
126988 + rtw_wfd_tdls_status( dev, info, wrqu, extra );
126989 + }
126990 +
126991 +#endif //CONFIG_WFD
126992 +
126993 + return ret;
126994 }
126995
126996 static int rtw_pm_set(struct net_device *dev,
126997 @@ -8885,27 +10825,32 @@ static int rtw_pm_set(struct net_device
126998 union iwreq_data *wrqu, char *extra)
126999 {
127000 int ret = 0;
127001 + unsigned mode = 0;
127002 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
127003
127004 - DBG_8192C( "[%s] extra = %s\n", __FUNCTION__, extra );
127005 + DBG_871X( "[%s] extra = %s\n", __FUNCTION__, extra );
127006
127007 if ( _rtw_memcmp( extra, "lps=", 4 ) )
127008 {
127009 - wrqu->data.length -= 4;
127010 - rtw_pm_set_lps( dev, info, wrqu, &extra[4] );
127011 + sscanf(extra+4, "%u", &mode);
127012 + ret = rtw_pm_set_lps(padapter,mode);
127013 }
127014 - if ( _rtw_memcmp( extra, "ips=", 4 ) )
127015 + else if ( _rtw_memcmp( extra, "ips=", 4 ) )
127016 {
127017 - wrqu->data.length -= 4;
127018 - rtw_pm_set_ips(dev, info, wrqu, &extra[4]);
127019 + sscanf(extra+4, "%u", &mode);
127020 + ret = rtw_pm_set_ips(padapter,mode);
127021 + }
127022 + else{
127023 + ret = -EINVAL;
127024 }
127025
127026 return ret;
127027 }
127028
127029 +#ifdef CONFIG_WOWLAN
127030 static int rtw_wowlan_ctrl(struct net_device *dev,
127031 - struct iw_request_info *info,
127032 - union iwreq_data *wrqu, char *extra)
127033 + struct iw_request_info *info,
127034 + union iwreq_data *wrqu, char *extra)
127035 {
127036 int ret = 0;
127037 struct oid_par_priv oid_par;
127038 @@ -8946,7 +10891,7 @@ static int rtw_wowlan_ctrl(struct net_de
127039 DBG_871X("+rtw_wowlan_ctrl: Device didn't support the remote wakeup!!\n");
127040 goto _rtw_wowlan_ctrl_exit_free;
127041 }
127042 - padapter->HalFunc.SetHwRegHandler(padapter,HW_VAR_WOWLAN,(u8 *)poidparam);
127043 + rtw_hal_set_hwreg(padapter,HW_VAR_WOWLAN,(u8 *)poidparam);
127044
127045 DBG_871X("rtw_wowlan_ctrl: subcode [%d], len[%d], buffer_len[%d]\r\n",
127046 poidparam->subcode, poidparam->len, len);
127047 @@ -8964,7 +10909,612 @@ _rtw_wowlan_ctrl_exit:
127048
127049 return ret;
127050 }
127051 +#endif //CONFIG_WOWLAN
127052 +
127053 +#ifdef CONFIG_INTEL_WIDI
127054 +static int rtw_widi_set(struct net_device *dev,
127055 + struct iw_request_info *info,
127056 + union iwreq_data *wrqu, char *extra)
127057 +{
127058 + int ret = 0;
127059 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
127060 +
127061 + process_intel_widi_cmd(padapter, extra);
127062 +
127063 + return ret;
127064 +}
127065 +
127066 +static int rtw_widi_set_probe_request(struct net_device *dev,
127067 + struct iw_request_info *info,
127068 + union iwreq_data *wrqu, char *extra)
127069 +{
127070 + int ret = 0;
127071 + u8 *pbuf = NULL;
127072 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
127073 +
127074 + pbuf = rtw_malloc(sizeof(l2_msg_t));
127075 + if(pbuf)
127076 + {
127077 + copy_from_user(pbuf, wrqu->data.pointer, wrqu->data.length);
127078 + //_rtw_memcpy(pbuf, wrqu->data.pointer, wrqu->data.length);
127079 +
127080 + if( wrqu->data.flags == 0 )
127081 + intel_widi_wk_cmd(padapter, INTEL_WIDI_ISSUE_PROB_WK, pbuf);
127082 + else if( wrqu->data.flags == 1 )
127083 + rtw_set_wfd_rds_sink_info( padapter, (l2_msg_t *)pbuf );
127084 + }
127085 + return ret;
127086 +}
127087 +
127088 +#endif // CONFIG_INTEL_WIDI
127089 +
127090 +#ifdef RTL8723A_SDIO_LOOPBACK
127091 +#include <rtl8723a_hal.h>
127092 +
127093 +static s32 initLoopback(PADAPTER padapter)
127094 +{
127095 + PLOOPBACKDATA ploopback;
127096 +
127097 +
127098 + if (padapter->ploopback == NULL) {
127099 + ploopback = (PLOOPBACKDATA)rtw_zmalloc(sizeof(LOOPBACKDATA));
127100 + if (ploopback == NULL) return -ENOMEM;
127101 +
127102 + _rtw_init_sema(&ploopback->sema, 0);
127103 +
127104 + ploopback->bstop = _TRUE;
127105 + ploopback->cnt = 0;
127106 + ploopback->size = 300;
127107 + _rtw_memset(ploopback->msg, 0, sizeof(ploopback->msg));
127108 +
127109 + padapter->ploopback = ploopback;
127110 + }
127111 +
127112 + return 0;
127113 +}
127114 +
127115 +static void freeLoopback(PADAPTER padapter)
127116 +{
127117 + PLOOPBACKDATA ploopback;
127118 +
127119 +
127120 + ploopback = padapter->ploopback;
127121 + if (ploopback) {
127122 + rtw_mfree((u8*)ploopback, sizeof(LOOPBACKDATA));
127123 + padapter->ploopback = NULL;
127124 + }
127125 +}
127126 +
127127 +static s32 initpseudoadhoc(PADAPTER padapter)
127128 +{
127129 + NDIS_802_11_NETWORK_INFRASTRUCTURE networkType;
127130 + s32 err;
127131 + _irqL irqL;
127132 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
127133 + _queue *queue = &pmlmepriv->scanned_queue;
127134 +
127135 + networkType = Ndis802_11IBSS;
127136 + _enter_critical_bh(&pmlmepriv->lock, &irqL);
127137 + _enter_critical_bh(&queue->lock, &irqL);
127138 + err = rtw_set_802_11_infrastructure_mode(padapter, networkType);
127139 + _exit_critical_bh(&queue->lock, &irqL);
127140 + _exit_critical_bh(&pmlmepriv->lock, &irqL);
127141 + if (err == _FALSE) return _FAIL;
127142 +
127143 + err = rtw_setopmode_cmd(padapter, networkType);
127144 + if (err == _FAIL) return _FAIL;
127145 +
127146 + return _SUCCESS;
127147 +}
127148 +
127149 +static s32 createpseudoadhoc(PADAPTER padapter)
127150 +{
127151 + NDIS_802_11_AUTHENTICATION_MODE authmode;
127152 + struct mlme_priv *pmlmepriv;
127153 + NDIS_802_11_SSID *passoc_ssid;
127154 + WLAN_BSSID_EX *pdev_network;
127155 + u8 *pibss;
127156 + u8 ssid[] = "pseduo_ad-hoc";
127157 + s32 err;
127158 + _irqL irqL;
127159 +
127160 +
127161 + pmlmepriv = &padapter->mlmepriv;
127162 +
127163 + authmode = Ndis802_11AuthModeOpen;
127164 + err = rtw_set_802_11_authentication_mode(padapter, authmode);
127165 + if (err == _FALSE) return _FAIL;
127166 +
127167 + passoc_ssid = &pmlmepriv->assoc_ssid;
127168 + _rtw_memset(passoc_ssid, 0, sizeof(NDIS_802_11_SSID));
127169 + passoc_ssid->SsidLength = sizeof(ssid) - 1;
127170 + _rtw_memcpy(passoc_ssid->Ssid, ssid, passoc_ssid->SsidLength);
127171 +
127172 + pdev_network = &padapter->registrypriv.dev_network;
127173 + pibss = padapter->registrypriv.dev_network.MacAddress;
127174 + _rtw_memcpy(&pdev_network->Ssid, passoc_ssid, sizeof(NDIS_802_11_SSID));
127175 +
127176 + rtw_update_registrypriv_dev_network(padapter);
127177 + rtw_generate_random_ibss(pibss);
127178 +
127179 + _enter_critical_bh(&pmlmepriv->lock, &irqL);
127180 + pmlmepriv->fw_state = WIFI_ADHOC_MASTER_STATE;
127181 + _exit_critical_bh(&pmlmepriv->lock, &irqL);
127182 +
127183 +#if 0
127184 + err = rtw_createbss_cmd(padapter);
127185 + if (err == _FAIL) return _FAIL;
127186 +#else
127187 +{
127188 + struct wlan_network *pcur_network;
127189 + struct sta_info *psta;
127190 +
127191 + //3 create a new psta
127192 + pcur_network = &pmlmepriv->cur_network;
127193 +
127194 + //clear psta in the cur_network, if any
127195 + psta = rtw_get_stainfo(&padapter->stapriv, pcur_network->network.MacAddress);
127196 + if (psta) rtw_free_stainfo(padapter, psta);
127197 +
127198 + psta = rtw_alloc_stainfo(&padapter->stapriv, pibss);
127199 + if (psta == NULL) return _FAIL;
127200 +
127201 + //3 join psudo AdHoc
127202 + pcur_network->join_res = 1;
127203 + pcur_network->aid = psta->aid = 1;
127204 + _rtw_memcpy(&pcur_network->network, pdev_network, get_WLAN_BSSID_EX_sz(pdev_network));
127205 +
127206 + // set msr to WIFI_FW_ADHOC_STATE
127207 +#if 0
127208 + Set_NETYPE0_MSR(padapter, WIFI_FW_ADHOC_STATE);
127209 +#else
127210 + {
127211 + u8 val8;
127212 +
127213 + val8 = rtw_read8(padapter, MSR);
127214 + val8 &= 0xFC; // clear NETYPE0
127215 + val8 |= WIFI_FW_ADHOC_STATE & 0x3;
127216 + rtw_write8(padapter, MSR, val8);
127217 + }
127218 +#endif
127219 +}
127220 +#endif
127221 +
127222 + return _SUCCESS;
127223 +}
127224 +
127225 +extern void rtl8723a_cal_txdesc_chksum(struct tx_desc *ptxdesc);
127226 +extern void rtl8723a_fill_default_txdesc(struct xmit_frame *pxmitframe, u8 *pbuf);
127227 +
127228 +static struct xmit_frame* createloopbackpkt(PADAPTER padapter, u32 size)
127229 +{
127230 + struct xmit_priv *pxmitpriv;
127231 + struct xmit_frame *pframe;
127232 + struct xmit_buf *pxmitbuf;
127233 + struct pkt_attrib *pattrib;
127234 + struct tx_desc *desc;
127235 + u8 *pkt_start, *pkt_end, *ptr;
127236 + struct rtw_ieee80211_hdr *hdr;
127237 + s32 bmcast;
127238 + _irqL irqL;
127239 +
127240 +
127241 + if ((TXDESC_SIZE + WLANHDR_OFFSET + size) > MAX_XMITBUF_SZ) return NULL;
127242 +
127243 + pxmitpriv = &padapter->xmitpriv;
127244 + pframe = NULL;
127245 +
127246 + //2 1. allocate xmit frame
127247 + pframe = rtw_alloc_xmitframe(pxmitpriv);
127248 + if (pframe == NULL) return NULL;
127249 + pframe->padapter = padapter;
127250 +
127251 + //2 2. allocate xmit buffer
127252 + _enter_critical_bh(&pxmitpriv->lock, &irqL);
127253 + pxmitbuf = rtw_alloc_xmitbuf(pxmitpriv);
127254 + _exit_critical_bh(&pxmitpriv->lock, &irqL);
127255 + if (pxmitbuf == NULL) {
127256 + rtw_free_xmitframe(pxmitpriv, pframe);
127257 + return NULL;
127258 + }
127259 +
127260 + pframe->pxmitbuf = pxmitbuf;
127261 + pframe->buf_addr = pxmitbuf->pbuf;
127262 + pxmitbuf->priv_data = pframe;
127263 +
127264 + //2 3. update_attrib()
127265 + pattrib = &pframe->attrib;
127266 +
127267 + // init xmitframe attribute
127268 + _rtw_memset(pattrib, 0, sizeof(struct pkt_attrib));
127269 +
127270 + pattrib->ether_type = 0x8723;
127271 + _rtw_memcpy(pattrib->src, padapter->eeprompriv.mac_addr, ETH_ALEN);
127272 + _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
127273 + _rtw_memset(pattrib->dst, 0xFF, ETH_ALEN);
127274 + _rtw_memcpy(pattrib->ra, pattrib->dst, ETH_ALEN);
127275 +// pattrib->pctrl = 0;
127276 +// pattrib->dhcp_pkt = 0;
127277 +// pattrib->pktlen = 0;
127278 + pattrib->ack_policy = 0;
127279 +// pattrib->pkt_hdrlen = ETH_HLEN;
127280 + pattrib->hdrlen = WLAN_HDR_A3_LEN;
127281 + pattrib->subtype = WIFI_DATA;
127282 + pattrib->priority = 0;
127283 + pattrib->qsel = pattrib->priority;
127284 +// do_queue_select(padapter, pattrib);
127285 + pattrib->nr_frags = 1;
127286 + pattrib->encrypt = 0;
127287 + pattrib->bswenc = _FALSE;
127288 + pattrib->qos_en = _FALSE;
127289 +
127290 + bmcast = IS_MCAST(pattrib->ra);
127291 + if (bmcast) {
127292 + pattrib->mac_id = 1;
127293 + pattrib->psta = rtw_get_bcmc_stainfo(padapter);
127294 + } else {
127295 + pattrib->mac_id = 0;
127296 + pattrib->psta = rtw_get_stainfo(&padapter->stapriv, get_bssid(&padapter->mlmepriv));
127297 + }
127298 +
127299 + pattrib->pktlen = size;
127300 + pattrib->last_txcmdsz = pattrib->hdrlen + pattrib->pktlen;
127301 +
127302 + //2 4. fill TX descriptor
127303 + desc = (struct tx_desc*)pframe->buf_addr;
127304 + _rtw_memset(desc, 0, TXDESC_SIZE);
127305 +
127306 + rtl8723a_fill_default_txdesc(pframe, (u8*)desc);
127307 +
127308 + // Hw set sequence number
127309 + ((PTXDESC)desc)->hwseq_en = 0; // HWSEQ_EN, 0:disable, 1:enable
127310 +// ((PTXDESC)desc)->hwseq_sel = 0; // HWSEQ_SEL
127311 +
127312 + ((PTXDESC)desc)->disdatafb = 1;
127313 +
127314 + // convert to little endian
127315 + desc->txdw0 = cpu_to_le32(desc->txdw0);
127316 + desc->txdw1 = cpu_to_le32(desc->txdw1);
127317 + desc->txdw2 = cpu_to_le32(desc->txdw2);
127318 + desc->txdw3 = cpu_to_le32(desc->txdw3);
127319 + desc->txdw4 = cpu_to_le32(desc->txdw4);
127320 + desc->txdw5 = cpu_to_le32(desc->txdw5);
127321 + desc->txdw6 = cpu_to_le32(desc->txdw6);
127322 + desc->txdw7 = cpu_to_le32(desc->txdw7);
127323 +#ifdef CONFIG_PCI_HCI
127324 + desc->txdw8 = cpu_to_le32(desc->txdw8);
127325 + desc->txdw9 = cpu_to_le32(desc->txdw9);
127326 + desc->txdw10 = cpu_to_le32(desc->txdw10);
127327 + desc->txdw11 = cpu_to_le32(desc->txdw11);
127328 + desc->txdw12 = cpu_to_le32(desc->txdw12);
127329 + desc->txdw13 = cpu_to_le32(desc->txdw13);
127330 + desc->txdw14 = cpu_to_le32(desc->txdw14);
127331 + desc->txdw15 = cpu_to_le32(desc->txdw15);
127332 +#endif
127333 +
127334 + rtl8723a_cal_txdesc_chksum(desc);
127335 +
127336 + //2 5. coalesce
127337 + pkt_start = pframe->buf_addr + TXDESC_SIZE;
127338 + pkt_end = pkt_start + pattrib->last_txcmdsz;
127339 +
127340 + //3 5.1. make wlan header, make_wlanhdr()
127341 + hdr = (struct rtw_ieee80211_hdr *)pkt_start;
127342 + SetFrameSubType(&hdr->frame_ctl, pattrib->subtype);
127343 + _rtw_memcpy(hdr->addr1, pattrib->dst, ETH_ALEN); // DA
127344 + _rtw_memcpy(hdr->addr2, pattrib->src, ETH_ALEN); // SA
127345 + _rtw_memcpy(hdr->addr3, get_bssid(&padapter->mlmepriv), ETH_ALEN); // RA, BSSID
127346 +
127347 + //3 5.2. make payload
127348 + ptr = pkt_start + pattrib->hdrlen;
127349 + get_random_bytes(ptr, pkt_end - ptr);
127350 +
127351 + pxmitbuf->len = TXDESC_SIZE + pattrib->last_txcmdsz;
127352 + pxmitbuf->ptail += pxmitbuf->len;
127353 +
127354 + return pframe;
127355 +}
127356 +
127357 +static void freeloopbackpkt(PADAPTER padapter, struct xmit_frame *pframe)
127358 +{
127359 + struct xmit_priv *pxmitpriv;
127360 + struct xmit_buf *pxmitbuf;
127361 +
127362 +
127363 + pxmitpriv = &padapter->xmitpriv;
127364 + pxmitbuf = pframe->pxmitbuf;
127365 +
127366 + rtw_free_xmitframe(pxmitpriv, pframe);
127367 + rtw_free_xmitbuf(pxmitpriv, pxmitbuf);
127368 +}
127369 +
127370 +extern u32 get_txfifo_hwaddr(struct xmit_frame *pxmitframe);
127371 +
127372 +thread_return lbk_thread(thread_context context)
127373 +{
127374 + s32 err;
127375 + PADAPTER padapter;
127376 + PLOOPBACKDATA ploopback;
127377 + struct xmit_frame *pxmitframe;
127378 + u32 cnt, ok, fail, i, headerlen;
127379 + u32 pktsize;
127380 + u32 ff_hwaddr;
127381 +
127382 +
127383 + padapter = (PADAPTER)context;
127384 + ploopback = padapter->ploopback;
127385 + if (ploopback == NULL) return -1;
127386 + cnt = 0;
127387 + ok = 0;
127388 + fail = 0;
127389 +
127390 + daemonize("%s", "RTW_LBK_THREAD");
127391 + allow_signal(SIGTERM);
127392 +
127393 + do {
127394 + if (ploopback->size == 0) {
127395 + get_random_bytes(&pktsize, 4);
127396 + pktsize = (pktsize % 1535) + 1; // 1~1535
127397 + } else
127398 + pktsize = ploopback->size;
127399 +
127400 + pxmitframe = createloopbackpkt(padapter, pktsize);
127401 + if (pxmitframe == NULL) {
127402 + sprintf(ploopback->msg, "loopback FAIL! 3. create Packet FAIL!");
127403 + break;
127404 + }
127405 +
127406 + ploopback->txsize = TXDESC_SIZE + pxmitframe->attrib.last_txcmdsz;
127407 + _rtw_memcpy(ploopback->txbuf, pxmitframe->buf_addr, ploopback->txsize);
127408 +
127409 + ff_hwaddr = get_txfifo_hwaddr(pxmitframe);
127410 + rtw_write_port(padapter, ff_hwaddr, ploopback->txsize, ploopback->txbuf);
127411 + cnt++;
127412 +
127413 + _rtw_down_sema(&ploopback->sema);
127414 +
127415 +{
127416 + PHAL_DATA_TYPE phal;
127417 + struct recv_stat *prxstat;
127418 + struct recv_stat report;
127419 + PRXREPORT prxreport;
127420 + u32 drvinfosize;
127421 + u32 rxpktsize;
127422 + u8 fcssize;
127423 +
127424 + prxstat = (struct recv_stat*)ploopback->rxbuf;
127425 + report.rxdw0 = le32_to_cpu(prxstat->rxdw0);
127426 + report.rxdw1 = le32_to_cpu(prxstat->rxdw1);
127427 + report.rxdw2 = le32_to_cpu(prxstat->rxdw2);
127428 + report.rxdw3 = le32_to_cpu(prxstat->rxdw3);
127429 + report.rxdw4 = le32_to_cpu(prxstat->rxdw4);
127430 + report.rxdw5 = le32_to_cpu(prxstat->rxdw5);
127431 +
127432 + prxreport = (PRXREPORT)&report;
127433 + drvinfosize = prxreport->drvinfosize << 3;
127434 + rxpktsize = prxreport->pktlen;
127435 +
127436 + phal = GET_HAL_DATA(padapter);
127437 + if (phal->ReceiveConfig & RCR_APPFCS) fcssize = IEEE80211_FCS_LEN;
127438 + else fcssize = 0;
127439 +
127440 + if ((ploopback->txsize - TXDESC_SIZE) != (rxpktsize - fcssize)) {
127441 + printk("%s: cnt=%d, size not match! tx=%d rx=%d\n",
127442 + __func__, i, ploopback->txsize - TXDESC_SIZE,
127443 + rxpktsize - fcssize);
127444 + err = _FALSE;
127445 + } else {
127446 + err = _rtw_memcmp(ploopback->txbuf + TXDESC_SIZE,\
127447 + ploopback->rxbuf + RXDESC_SIZE + drvinfosize,\
127448 + ploopback->txsize - TXDESC_SIZE);
127449 + }
127450 +}
127451 +
127452 + if (err == _TRUE)
127453 + ok++;
127454 + else
127455 + fail++;
127456 +
127457 + ploopback->txsize = 0;
127458 + _rtw_memset(ploopback->txbuf, 0, 0x8000);
127459 + ploopback->rxsize = 0;
127460 + _rtw_memset(ploopback->rxbuf, 0, 0x8000);
127461 +
127462 + freeloopbackpkt(padapter, pxmitframe);
127463 + pxmitframe = NULL;
127464 +
127465 + if (signal_pending(current)) {
127466 + flush_signals(current);
127467 + }
127468 +
127469 + if ((ploopback->bstop == _TRUE) ||
127470 + ((ploopback->cnt != 0) && (ploopback->cnt == cnt)))
127471 + {
127472 + u32 ok_rate, fail_rate;
127473 + ok_rate = (ok*100)/cnt;
127474 + fail_rate = (fail*100)/cnt;
127475 + sprintf(ploopback->msg, "loopback result: ok=%d%%(%d/%d),error=%d%%(%d/%d)", ok_rate, ok, cnt, fail_rate, fail, cnt);
127476 + break;
127477 + }
127478 + } while (1);
127479 +
127480 + ploopback->bstop = _TRUE;
127481 +
127482 + thread_exit();
127483 +}
127484 +
127485 +static void loopbackTest(PADAPTER padapter, u32 cnt, u32 size, u8* pmsg)
127486 +{
127487 + PLOOPBACKDATA ploopback;
127488 + u32 len;
127489 + s32 err;
127490 +
127491 +
127492 + ploopback = padapter->ploopback;
127493 +
127494 + if (ploopback)
127495 + {
127496 + ploopback->bstop = _TRUE;
127497 + len = 0;
127498 + do {
127499 + len = strlen(ploopback->msg);
127500 + if (len) break;
127501 + rtw_msleep_os(1);
127502 + } while (1);
127503 + _rtw_memcpy(pmsg, ploopback->msg, len+1);
127504 + freeLoopback(padapter);
127505 + return;
127506 + }
127507 +
127508 + // create pseudo ad-hoc connection
127509 + err = initpseudoadhoc(padapter);
127510 + if (err == _FAIL) {
127511 + sprintf(pmsg, "loopback FAIL! 1.1 init ad-hoc FAIL!");
127512 + return;
127513 + }
127514 +
127515 + err = createpseudoadhoc(padapter);
127516 + if (err == _FAIL) {
127517 + sprintf(pmsg, "loopback FAIL! 1.2 create ad-hoc master FAIL!");
127518 + return;
127519 + }
127520 +
127521 + err = initLoopback(padapter);
127522 + if (err) {
127523 + sprintf(pmsg, "loopback FAIL! 2. init FAIL! error code=%d", err);
127524 + return;
127525 + }
127526 +
127527 + ploopback = padapter->ploopback;
127528 +
127529 + ploopback->bstop = _FALSE;
127530 + ploopback->cnt = cnt;
127531 + ploopback->size = size;
127532 + ploopback->lbkthread = kthread_run(lbk_thread, padapter, "RTW_LBK_THREAD");
127533 + if (IS_ERR(padapter->lbkthread))
127534 + {
127535 + freeLoopback(padapter);
127536 + sprintf(pmsg, "loopback start FAIL! cnt=%d", cnt);
127537 + return;
127538 + }
127539 +
127540 + sprintf(pmsg, "loopback start! cnt=%d", cnt);
127541 +}
127542 +
127543 +extern u8 _InitPowerOn(PADAPTER padapter);
127544 +extern s32 rtl8723a_FirmwareDownload(PADAPTER padapter);
127545 +
127546 +static int rtw_test(
127547 + struct net_device *dev,
127548 + struct iw_request_info *info,
127549 + union iwreq_data *wrqu, char *extra)
127550 +{
127551 + u32 len;
127552 + u8 *pbuf, *pch;
127553 + char *ptmp;
127554 + u8 *delim = ",";
127555 + PADAPTER padapter = rtw_netdev_priv(dev);
127556 +
127557 +
127558 + printk("+%s\n", __func__);
127559 + len = wrqu->data.length;
127560 +
127561 + pbuf = (u8*)rtw_zmalloc(len);
127562 + if (pbuf == NULL) {
127563 + printk("%s: no memory!\n", __func__);
127564 + return -ENOMEM;
127565 + }
127566
127567 + if (copy_from_user(pbuf, wrqu->data.pointer, len)) {
127568 + rtw_mfree(pbuf, len);
127569 + printk("%s: copy from user fail!\n", __func__);
127570 + return -EFAULT;
127571 + }
127572 + printk("%s: string=\"%s\"\n", __func__, pbuf);
127573 +
127574 + ptmp = (char*)pbuf;
127575 + pch = strsep(&ptmp, delim);
127576 + if ((pch == NULL) || (strlen(pch) == 0)) {
127577 + rtw_mfree(pbuf, len);
127578 + printk("%s: parameter error(level 1)!\n", __func__);
127579 + return -EFAULT;
127580 + }
127581 +
127582 +#ifdef RTL8723A_SDIO_LOOPBACK
127583 + if (strcmp(pch, "loopback") == 0)
127584 + {
127585 + s32 cnt = 0;
127586 + u32 size = 64;
127587 +
127588 + pch = strsep(&ptmp, delim);
127589 + if ((pch == NULL) || (strlen(pch) == 0)) {
127590 + rtw_mfree(pbuf, len);
127591 + printk("%s: parameter error(level 2)!\n", __func__);
127592 + return -EFAULT;
127593 + }
127594 +
127595 + sscanf(pch, "%d", &cnt);
127596 + printk("%s: loopback cnt=%d\n", __func__, cnt);
127597 +
127598 + pch = strsep(&ptmp, delim);
127599 + if ((pch == NULL) || (strlen(pch) == 0)) {
127600 + rtw_mfree(pbuf, len);
127601 + printk("%s: parameter error(level 2)!\n", __func__);
127602 + return -EFAULT;
127603 + }
127604 +
127605 + sscanf(pch, "%d", &size);
127606 + printk("%s: loopback size=%d\n", __func__, size);
127607 +
127608 + loopbackTest(padapter, cnt, size, extra);
127609 + wrqu->data.length = strlen(extra) + 1;
127610 +
127611 + rtw_mfree(pbuf, len);
127612 + return 0;
127613 + }
127614 +#endif
127615 +
127616 + if (strcmp(pch, "poweron") == 0)
127617 + {
127618 + s32 ret;
127619 +
127620 + ret = _InitPowerOn(padapter);
127621 + if (_FAIL == ret)
127622 + printk("%s: power on FAIL!\n", __func__);
127623 + else
127624 + printk("%s: power on OK.\n", __func__);
127625 +
127626 + rtw_mfree(pbuf, len);
127627 + return 0;
127628 + }
127629 +
127630 + if (strcmp(pch, "dlfw") == 0)
127631 + {
127632 + s32 ret;
127633 +
127634 + ret = rtl8723a_FirmwareDownload(padapter);
127635 + if (_FAIL == ret)
127636 + printk("%s: download FW FAIL!\n", __func__);
127637 + else
127638 + printk("%s: download FW OK.\n", __func__);
127639 +
127640 + rtw_mfree(pbuf, len);
127641 + return 0;
127642 + }
127643 +
127644 + rtw_mfree(pbuf, len);
127645 + return 0;
127646 +}
127647 +#else
127648 +static int rtw_test(
127649 + struct net_device *dev,
127650 + struct iw_request_info *info,
127651 + union iwreq_data *wrqu, char *extra)
127652 +{
127653 + printk("%s\n", __func__);
127654 + return 0;
127655 +}
127656 +#endif //RTL8723A_SDIO_LOOPBACK
127657
127658 #include <rtw_android.h>
127659 int rtw_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
127660 @@ -8981,6 +11531,11 @@ int rtw_ioctl(struct net_device *dev, st
127661 case RTL_IOCTL_HOSTAPD:
127662 ret = rtw_hostapd_ioctl(dev, &wrq->u.data);
127663 break;
127664 +#ifdef CONFIG_NO_WIRELESS_HANDLERS
127665 + case SIOCSIWMODE:
127666 + ret = rtw_wx_set_mode(dev, NULL, &wrq->u, NULL);
127667 + break;
127668 +#endif
127669 #endif
127670 case (SIOCDEVPRIVATE+1):
127671 ret = rtw_android_priv_cmd(dev, rq, cmd);
127672 @@ -9029,7 +11584,7 @@ static iw_handler rtw_handlers[] =
127673 NULL, /* -- hole -- */
127674 rtw_wx_set_rate, /* SIOCSIWRATE */
127675 rtw_wx_get_rate, /* SIOCGIWRATE */
127676 - dummy, /* SIOCSIWRTS */
127677 + rtw_wx_set_rts, /* SIOCSIWRTS */
127678 rtw_wx_get_rts, /* SIOCGIWRTS */
127679 rtw_wx_set_frag, /* SIOCSIWFRAG */
127680 rtw_wx_get_frag, /* SIOCGIWFRAG */
127681 @@ -9060,44 +11615,45 @@ static const struct iw_priv_args rtw_pri
127682 { SIOCIWFIRSTPRIV + 0x00, IW_PRIV_TYPE_CHAR | 1024, 0 , ""}, //set
127683 { SIOCIWFIRSTPRIV + 0x01, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK , ""},//get
127684 /* --- sub-ioctls definitions --- */
127685 - { MP_START , IW_PRIV_TYPE_CHAR | 1024, 0, "mp_start" }, //set
127686 + { MP_START , IW_PRIV_TYPE_CHAR | 1024, 0, "mp_start" }, //set
127687 { MP_PHYPARA, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_phypara" },//get
127688 { MP_STOP , IW_PRIV_TYPE_CHAR | 1024, 0, "mp_stop" }, //set
127689 { MP_CHANNEL , IW_PRIV_TYPE_CHAR | 1024 , IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_channel" },//get
127690 { MP_BANDWIDTH , IW_PRIV_TYPE_CHAR | 1024, 0, "mp_bandwidth"}, //set
127691 { MP_RATE , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_rate" },//get
127692 { MP_RESET_STATS , IW_PRIV_TYPE_CHAR | 1024, 0, "mp_reset_stats"},
127693 - { MP_QUERY , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK , "mp_query"}, //get
127694 + { MP_QUERY , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK , "mp_query"}, //get
127695 { MP_NULL, IW_PRIV_TYPE_CHAR | 128, 0,"NULL"},//set
127696 - { READ_REG , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "read_reg" },
127697 + { READ_REG , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "read_reg" },
127698 { MP_NULL, IW_PRIV_TYPE_CHAR | 128, 0,"NULL"},//set
127699 - { MP_RATE , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_rate" },
127700 + { MP_RATE , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_rate" },
127701 { MP_NULL, IW_PRIV_TYPE_CHAR | 128, 0,"NULL"},//set
127702 - { READ_RF , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "read_rf" },
127703 + { READ_RF , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "read_rf" },
127704 { MP_NULL, IW_PRIV_TYPE_CHAR | 128, 0,"NULL"},//set
127705 - { MP_PSD , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_psd"},
127706 + { MP_PSD , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_psd"},
127707 { MP_NULL, IW_PRIV_TYPE_CHAR | 128, 0,"NULL"},//set
127708 - { MP_DUMP, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_dump" },
127709 + { MP_DUMP, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_dump" },
127710 { MP_NULL, IW_PRIV_TYPE_CHAR | 128, 0,"NULL"},//set
127711 - { MP_TXPOWER , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_txpower"},
127712 + { MP_TXPOWER , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_txpower"},
127713 { MP_NULL, IW_PRIV_TYPE_CHAR | 128, 0,"NULL"},//set
127714 - { MP_ANT_TX , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_ant_tx"},
127715 + { MP_ANT_TX , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_ant_tx"},
127716 { MP_NULL, IW_PRIV_TYPE_CHAR | 128, 0,"NULL"},//set
127717 - { MP_ANT_RX , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_ant_rx"},
127718 + { MP_ANT_RX , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_ant_rx"},
127719 { MP_NULL, IW_PRIV_TYPE_CHAR | 128, 0,"NULL"},//set
127720 - { WRITE_REG , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "write_reg" },
127721 + { WRITE_REG , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "write_reg" },
127722 { MP_NULL, IW_PRIV_TYPE_CHAR | 128, 0,"NULL"},//set
127723 - { WRITE_RF , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "write_rf" },
127724 + { WRITE_RF , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "write_rf" },
127725 { MP_NULL, IW_PRIV_TYPE_CHAR | 128, 0,"NULL"},//set
127726 - { MP_CTX , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_ctx"},
127727 + { MP_CTX , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_ctx"},
127728 { MP_NULL, IW_PRIV_TYPE_CHAR | 128, 0,"NULL"},//set
127729 - { MP_ARX , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_arx"},
127730 - { MP_ANT_RX , IW_PRIV_TYPE_CHAR | 1024, 0, "mp_ant_rx"},
127731 - { MP_THER , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_ther"},
127732 - { EFUSE_SET, IW_PRIV_TYPE_CHAR | 1024, 0, "efuse_set" },
127733 - { EFUSE_GET, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "efuse_get" },
127734 - { MP_PWRTRK , IW_PRIV_TYPE_CHAR | 1024, 0, "mp_pwrtrk"},
127735 - { MP_IOCTL, IW_PRIV_TYPE_CHAR | 1024, 0, "mp_ioctl"}, // mp_ioctl
127736 + { MP_ARX , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_arx"},
127737 + { MP_ANT_RX , IW_PRIV_TYPE_CHAR | 1024, 0, "mp_ant_rx"},
127738 + { MP_THER , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_ther"},
127739 + { EFUSE_SET, IW_PRIV_TYPE_CHAR | 1024, 0, "efuse_set" },
127740 + { EFUSE_GET, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "efuse_get" },
127741 + { MP_NULL , IW_PRIV_TYPE_CHAR | 1024, 0, "NULL"},
127742 + { MP_PWRTRK, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_pwrtrk" },
127743 + { MP_IOCTL, IW_PRIV_TYPE_CHAR | 1024, 0, "mp_ioctl"}, // mp_ioctl
127744
127745
127746 { SIOCIWFIRSTPRIV + 0x02, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK , "test"},//set
127747 @@ -9110,23 +11666,23 @@ static iw_handler rtw_private_handler[]
127748 rtw_mp_get,
127749 };
127750
127751 -
127752 #else // not inlucde MP
127753
127754 static const struct iw_priv_args rtw_private_args[] = {
127755 {
127756 SIOCIWFIRSTPRIV + 0x0,
127757 - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, 0, "rtw_write32"
127758 + IW_PRIV_TYPE_CHAR | 0x7FF, 0, "write"
127759 },
127760 {
127761 SIOCIWFIRSTPRIV + 0x1,
127762 - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | IFNAMSIZ, "rtw_read32"
127763 + IW_PRIV_TYPE_CHAR | 0x7FF,
127764 + IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | IFNAMSIZ, "read"
127765 },
127766 {
127767 SIOCIWFIRSTPRIV + 0x2, 0, 0, "driver_ext"
127768 },
127769 {
127770 - SIOCIWFIRSTPRIV + 0x3, 0, 0, "" // mp_ioctl
127771 + SIOCIWFIRSTPRIV + 0x3, 0, 0, "mp_ioctl"
127772 },
127773 {
127774 SIOCIWFIRSTPRIV + 0x4,
127775 @@ -9172,40 +11728,57 @@ static const struct iw_priv_args rtw_pri
127776 SIOCIWFIRSTPRIV + 0xD,
127777 IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | IFNAMSIZ, "rfr"
127778 },
127779 -
127780 +#ifdef CONFIG_WOWLAN
127781 {
127782 SIOCIWFIRSTPRIV + 0xE,0,0, "wowlan_ctrl"
127783 },
127784 -
127785 +#endif // CONFIG_WOWLAN
127786 {
127787 SIOCIWFIRSTPRIV + 0x10,
127788 - IW_PRIV_TYPE_CHAR | P2P_PRIVATE_IOCTL_SET_LEN, 0, "p2p_set"
127789 + IW_PRIV_TYPE_CHAR | 1024, 0, "p2p_set"
127790 },
127791 {
127792 SIOCIWFIRSTPRIV + 0x11,
127793 - IW_PRIV_TYPE_CHAR | P2P_PRIVATE_IOCTL_SET_LEN, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | P2P_PRIVATE_IOCTL_SET_LEN , "p2p_get"
127794 + IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK , "p2p_get"
127795 + },
127796 + {
127797 + SIOCIWFIRSTPRIV + 0x12, 0, 0, "NULL"
127798 },
127799 {
127800 - SIOCIWFIRSTPRIV + 0x12,
127801 - IW_PRIV_TYPE_CHAR | P2P_PRIVATE_IOCTL_SET_LEN, IW_PRIV_TYPE_CHAR | IFNAMSIZ , "p2p_get2"
127802 + SIOCIWFIRSTPRIV + 0x13,
127803 + IW_PRIV_TYPE_CHAR | 64, IW_PRIV_TYPE_CHAR | 64 , "p2p_get2"
127804 },
127805 -#ifdef CONFIG_TDLS
127806 - {SIOCIWFIRSTPRIV + 0x13, IW_PRIV_TYPE_CHAR | 128, 0,"NULL"},
127807 {
127808 SIOCIWFIRSTPRIV + 0x14,
127809 IW_PRIV_TYPE_CHAR | 64, 0, "tdls"
127810 },
127811 -#endif
127812 + {
127813 + SIOCIWFIRSTPRIV + 0x15,
127814 + IW_PRIV_TYPE_CHAR | P2P_PRIVATE_IOCTL_SET_LEN, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | P2P_PRIVATE_IOCTL_SET_LEN , "tdls_get"
127815 + },
127816 {
127817 SIOCIWFIRSTPRIV + 0x16,
127818 - IW_PRIV_TYPE_CHAR | P2P_PRIVATE_IOCTL_SET_LEN, 0, "pm_set"
127819 + IW_PRIV_TYPE_CHAR | 64, 0, "pm_set"
127820 },
127821
127822 {SIOCIWFIRSTPRIV + 0x18, IW_PRIV_TYPE_CHAR | IFNAMSIZ , 0 , "rereg_nd_name"},
127823
127824 {SIOCIWFIRSTPRIV + 0x1A, IW_PRIV_TYPE_CHAR | 128, 0, "efuse_set"},
127825 {SIOCIWFIRSTPRIV + 0x1B, IW_PRIV_TYPE_CHAR | 128, IW_PRIV_TYPE_CHAR |IW_PRIV_SIZE_FIXED |0x700 ,"efuse_get"},
127826 -
127827 + {
127828 + SIOCIWFIRSTPRIV + 0x1D,
127829 + IW_PRIV_TYPE_CHAR | 40, IW_PRIV_TYPE_CHAR | 0x7FF, "test"
127830 + },
127831 +#ifdef CONFIG_INTEL_WIDI
127832 + {
127833 + SIOCIWFIRSTPRIV + 0x1E,
127834 + IW_PRIV_TYPE_CHAR | 1024, 0, "widi_set"
127835 + },
127836 + {
127837 + SIOCIWFIRSTPRIV + 0x1F,
127838 + IW_PRIV_TYPE_CHAR | 128, 0, "widi_prob_req"
127839 + },
127840 +#endif // CONFIG_INTEL_WIDI
127841 };
127842
127843 static iw_handler rtw_private_handler[] =
127844 @@ -9234,18 +11807,20 @@ static iw_handler rtw_private_handler[]
127845 rtw_wx_write_rf, //0x0C
127846 rtw_wx_read_rf, //0x0D
127847
127848 -
127849 +#ifdef CONFIG_WOWLAN
127850 rtw_wowlan_ctrl, //0x0E
127851 -
127852 +#else
127853 + rtw_wx_priv_null, //0x0E
127854 +#endif //CONFIG_WOWLAN
127855 rtw_wx_priv_null, //0x0F
127856
127857 rtw_p2p_set, //0x10
127858 rtw_p2p_get, //0x11
127859 - rtw_p2p_get2, //0x12
127860 + NULL, //0x12
127861 + rtw_p2p_get2, //0x13
127862
127863 - NULL, //0x13
127864 rtw_tdls, //0x14
127865 - rtw_wx_priv_null, //0x15
127866 + rtw_tdls_get, //0x15
127867
127868 rtw_pm_set, //0x16
127869 rtw_wx_priv_null, //0x17
127870 @@ -9254,7 +11829,12 @@ static iw_handler rtw_private_handler[]
127871
127872 rtw_mp_efuse_set, //0x1A
127873 rtw_mp_efuse_get, //0x1B
127874 - // 0x1C is reserved for hostapd
127875 + NULL, // 0x1C is reserved for hostapd
127876 + rtw_test , // 0x1D
127877 +#ifdef CONFIG_INTEL_WIDI
127878 + rtw_widi_set, //0x1E
127879 + rtw_widi_set_probe_request, //0x1F
127880 +#endif // CONFIG_INTEL_WIDI
127881 };
127882
127883 #endif // #if defined(CONFIG_MP_INCLUDED) && defined(CONFIG_MP_IWPRIV_SUPPORT)
127884 @@ -9273,7 +11853,7 @@ static struct iw_statistics *rtw_get_wir
127885 piwstats->qual.qual = 0;
127886 piwstats->qual.level = 0;
127887 piwstats->qual.noise = 0;
127888 - //DBG_8192C("No link level:%d, qual:%d, noise:%d\n", tmp_level, tmp_qual, tmp_noise);
127889 + //DBG_871X("No link level:%d, qual:%d, noise:%d\n", tmp_level, tmp_qual, tmp_noise);
127890 }
127891 else{
127892 #ifdef CONFIG_SIGNAL_DISPLAY_DBM
127893 @@ -9284,7 +11864,7 @@ static struct iw_statistics *rtw_get_wir
127894
127895 tmp_qual = padapter->recvpriv.signal_qual;
127896 tmp_noise =padapter->recvpriv.noise;
127897 - //DBG_8192C("level:%d, qual:%d, noise:%d, rssi (%d)\n", tmp_level, tmp_qual, tmp_noise,padapter->recvpriv.rssi);
127898 + //DBG_871X("level:%d, qual:%d, noise:%d, rssi (%d)\n", tmp_level, tmp_qual, tmp_noise,padapter->recvpriv.rssi);
127899
127900 piwstats->qual.level = tmp_level;
127901 piwstats->qual.qual = tmp_qual;
127902 @@ -9310,16 +11890,20 @@ static struct iw_statistics *rtw_get_wir
127903 }
127904 #endif
127905
127906 +#ifdef CONFIG_WIRELESS_EXT
127907 struct iw_handler_def rtw_handlers_def =
127908 {
127909 .standard = rtw_handlers,
127910 .num_standard = sizeof(rtw_handlers) / sizeof(iw_handler),
127911 +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)) || defined(CONFIG_WEXT_PRIV)
127912 .private = rtw_private_handler,
127913 .private_args = (struct iw_priv_args *)rtw_private_args,
127914 .num_private = sizeof(rtw_private_handler) / sizeof(iw_handler),
127915 .num_private_args = sizeof(rtw_private_args) / sizeof(struct iw_priv_args),
127916 +#endif
127917 #if WIRELESS_EXT >= 17
127918 .get_wireless_stats = rtw_get_wireless_stats,
127919 #endif
127920 };
127921 +#endif
127922
127923 --- a/drivers/net/wireless/rtl8192cu/os_dep/linux/mlme_linux.c
127924 +++ b/drivers/net/wireless/rtl8192cu/os_dep/linux/mlme_linux.c
127925 @@ -135,7 +135,6 @@ extern void rtw_indicate_wx_disassoc_eve
127926
127927 void rtw_os_indicate_connect(_adapter *adapter)
127928 {
127929 - struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
127930
127931 _func_enter_;
127932
127933 @@ -144,14 +143,13 @@ _func_enter_;
127934 #endif //CONFIG_IOCTL_CFG80211
127935
127936 rtw_indicate_wx_assoc_event(adapter);
127937 -
127938 netif_carrier_on(adapter->pnetdev);
127939
127940 if(adapter->pid[2] !=0)
127941 rtw_signal_process(adapter->pid[2], SIGALRM);
127942
127943 #ifdef RTK_DMP_PLATFORM
127944 - _set_workitem(&pmlmepriv->Linkup_workitem);
127945 + _set_workitem(&adapter->mlmepriv.Linkup_workitem);
127946 #endif
127947
127948 _func_exit_;
127949 @@ -173,7 +171,12 @@ void rtw_reset_securitypriv( _adapter *a
127950 u8 backupPMKIDIndex = 0;
127951 u8 backupTKIPCountermeasure = 0x00;
127952 u32 backupTKIPcountermeasure_time = 0;
127953 -
127954 + // add for CONFIG_IEEE80211W, none 11w also can use
127955 + _irqL irqL;
127956 + struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
127957 +
127958 + _enter_critical_bh(&adapter->security_key_mutex, &irqL);
127959 +
127960 if(adapter->securitypriv.dot11AuthAlgrthm == dot11AuthAlgrthm_8021X)//802.1x
127961 {
127962 // Added by Albert 2009/02/18
127963 @@ -187,8 +190,11 @@ void rtw_reset_securitypriv( _adapter *a
127964 _rtw_memcpy( &backupPMKIDList[ 0 ], &adapter->securitypriv.PMKIDList[ 0 ], sizeof( RT_PMKID_LIST ) * NUM_PMKID_CACHE );
127965 backupPMKIDIndex = adapter->securitypriv.PMKIDIndex;
127966 backupTKIPCountermeasure = adapter->securitypriv.btkip_countermeasure;
127967 - backupTKIPcountermeasure_time = adapter->securitypriv.btkip_countermeasure_time;
127968 -
127969 + backupTKIPcountermeasure_time = adapter->securitypriv.btkip_countermeasure_time;
127970 +#ifdef CONFIG_IEEE80211W
127971 + //reset RX BIP packet number
127972 + pmlmeext->mgnt_80211w_IPN_rx = 0;
127973 +#endif //CONFIG_IEEE80211W
127974 _rtw_memset((unsigned char *)&adapter->securitypriv, 0, sizeof (struct security_priv));
127975 //_init_timer(&(adapter->securitypriv.tkip_timer),adapter->pnetdev, rtw_use_tkipkey_handler, adapter);
127976
127977 @@ -197,7 +203,7 @@ void rtw_reset_securitypriv( _adapter *a
127978 _rtw_memcpy( &adapter->securitypriv.PMKIDList[ 0 ], &backupPMKIDList[ 0 ], sizeof( RT_PMKID_LIST ) * NUM_PMKID_CACHE );
127979 adapter->securitypriv.PMKIDIndex = backupPMKIDIndex;
127980 adapter->securitypriv.btkip_countermeasure = backupTKIPCountermeasure;
127981 - adapter->securitypriv.btkip_countermeasure_time = backupTKIPcountermeasure_time;
127982 + adapter->securitypriv.btkip_countermeasure_time = backupTKIPcountermeasure_time;
127983
127984 adapter->securitypriv.ndisauthtype = Ndis802_11AuthModeOpen;
127985 adapter->securitypriv.ndisencryptstatus = Ndis802_11WEPDisabled;
127986 @@ -218,9 +224,10 @@ void rtw_reset_securitypriv( _adapter *a
127987
127988 psec_priv->ndisauthtype = Ndis802_11AuthModeOpen;
127989 psec_priv->ndisencryptstatus = Ndis802_11WEPDisabled;
127990 - psec_priv->wps_phase = _FALSE;
127991 //}
127992 }
127993 + // add for CONFIG_IEEE80211W, none 11w also can use
127994 + _exit_critical_bh(&adapter->security_key_mutex, &irqL);
127995 }
127996
127997 void rtw_os_indicate_disconnect( _adapter *adapter )
127998 @@ -229,17 +236,19 @@ void rtw_os_indicate_disconnect( _adapte
127999
128000 _func_enter_;
128001
128002 + netif_carrier_off(adapter->pnetdev); // Do it first for tx broadcast pkt after disconnection issue!
128003 +
128004 #ifdef CONFIG_IOCTL_CFG80211
128005 rtw_cfg80211_indicate_disconnect(adapter);
128006 #endif //CONFIG_IOCTL_CFG80211
128007
128008 rtw_indicate_wx_disassoc_event(adapter);
128009 - netif_carrier_off(adapter->pnetdev);
128010
128011 #ifdef RTK_DMP_PLATFORM
128012 _set_workitem(&adapter->mlmepriv.Linkdown_workitem);
128013 #endif
128014 - rtw_reset_securitypriv( adapter );
128015 + //modify for CONFIG_IEEE80211W, none 11w also can use the same command
128016 + rtw_reset_securitypriv_cmd(adapter);
128017
128018 _func_exit_;
128019
128020 @@ -313,186 +322,20 @@ void _addba_timer_hdl(void *FunctionCont
128021 addba_timer_hdl(psta);
128022 }
128023
128024 -void init_addba_retry_timer(_adapter *padapter, struct sta_info *psta)
128025 -{
128026 -
128027 - _init_timer(&psta->addba_retry_timer, padapter->pnetdev, _addba_timer_hdl, psta);
128028 -}
128029 -
128030 -#ifdef CONFIG_TDLS
128031 -void _TPK_timer_hdl(void *FunctionContext)
128032 -{
128033 - struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
128034 -
128035 - ptdls_sta->TPK_count++;
128036 - //TPK_timer set 1000 as default
128037 - //retry timer should set at least 301 sec.
128038 - if(ptdls_sta->TPK_count==TPK_RESEND_COUNT){
128039 - ptdls_sta->TPK_count=0;
128040 - issue_tdls_setup_req(ptdls_sta->padapter, ptdls_sta->hwaddr);
128041 - }
128042 -
128043 - _set_timer(&ptdls_sta->TPK_timer, ptdls_sta->TDLS_PeerKey_Lifetime/TPK_RESEND_COUNT);
128044 -}
128045 -
128046 -void init_TPK_timer(_adapter *padapter, struct sta_info *psta)
128047 -{
128048 - psta->padapter=padapter;
128049 -
128050 - _init_timer(&psta->TPK_timer, padapter->pnetdev, _TPK_timer_hdl, psta);
128051 -}
128052 -
128053 -// TDLS_DONE_CH_SEN: channel sensing and report candidate channel
128054 -// TDLS_OFF_CH: first time set channel to off channel
128055 -// TDLS_BASE_CH: when go back to the channel linked with AP, send null data to peer STA as an indication
128056 -void _ch_switch_timer_hdl(void *FunctionContext)
128057 -{
128058 -
128059 - struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
128060 - _adapter *padapter = ptdls_sta->padapter;
128061 -
128062 - if( ptdls_sta->option == TDLS_DONE_CH_SEN ){
128063 - rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_DONE_CH_SEN);
128064 - }else if( ptdls_sta->option == TDLS_OFF_CH ){
128065 - issue_nulldata_to_TDLS_peer_STA(ptdls_sta->padapter, ptdls_sta, 0);
128066 - _set_timer(&ptdls_sta->base_ch_timer, 500);
128067 - }else if( ptdls_sta->option == TDLS_BASE_CH){
128068 - issue_nulldata_to_TDLS_peer_STA(ptdls_sta->padapter, ptdls_sta, 0);
128069 - }
128070 -}
128071 -
128072 -void init_ch_switch_timer(_adapter *padapter, struct sta_info *psta)
128073 -{
128074 - psta->padapter=padapter;
128075 - _init_timer(&psta->option_timer, padapter->pnetdev, _ch_switch_timer_hdl, psta);
128076 -}
128077 -
128078 -void _base_ch_timer_hdl(void *FunctionContext)
128079 -{
128080 - struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
128081 - rtw_tdls_cmd(ptdls_sta->padapter, ptdls_sta->hwaddr, TDLS_P_OFF_CH);
128082 -}
128083 -
128084 -void init_base_ch_timer(_adapter *padapter, struct sta_info *psta)
128085 -{
128086 - psta->padapter=padapter;
128087 - _init_timer(&psta->base_ch_timer, padapter->pnetdev, _base_ch_timer_hdl, psta);
128088 -}
128089 -
128090 -void _off_ch_timer_hdl(void *FunctionContext)
128091 +#ifdef CONFIG_IEEE80211W
128092 +void _sa_query_timer_hdl (void *FunctionContext)
128093 {
128094 - struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
128095 - rtw_tdls_cmd(ptdls_sta->padapter, ptdls_sta->hwaddr, TDLS_P_BASE_CH );
128096 - }
128097 -
128098 -void init_off_ch_timer(_adapter *padapter, struct sta_info *psta)
128099 -{
128100 - psta->padapter=padapter;
128101 - _init_timer(&psta->off_ch_timer, padapter->pnetdev, _off_ch_timer_hdl, psta);
128102 -}
128103 -
128104 -void _tdls_handshake_timer_hdl(void *FunctionContext)
128105 -{
128106 - struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
128107 -
128108 - if(ptdls_sta != NULL)
128109 - {
128110 - if( !(ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE) )
128111 - {
128112 - printk("HANDSHAKE TIME OUT\n");
128113 - free_tdls_sta(ptdls_sta->padapter, ptdls_sta);
128114 - }
128115 - }
128116 -}
128117 -
128118 -void init_handshake_timer(_adapter *padapter, struct sta_info *psta)
128119 -{
128120 - psta->padapter=padapter;
128121 - _init_timer(&psta->handshake_timer, padapter->pnetdev, _tdls_handshake_timer_hdl, psta);
128122 -}
128123 -
128124 -//Check tdls peer sta alive.
128125 -void _tdls_alive_timer_phase1_hdl(void *FunctionContext)
128126 -{
128127 - _irqL irqL;
128128 - struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
128129 - _adapter *padapter = ptdls_sta->padapter;
128130 - struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
128131 -
128132 - _enter_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
128133 - ptdls_sta->timer_flag = 1;
128134 - _exit_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
128135 -
128136 - ptdls_sta->tdls_sta_state &= (~TDLS_ALIVE_STATE);
128137 -
128138 - DBG_8192C("issue_tdls_dis_req to check alive\n");
128139 - issue_tdls_dis_req( padapter, ptdls_sta->hwaddr);
128140 - rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CKALV_PH1);
128141 - sta_update_last_rx_pkts(ptdls_sta);
128142 -
128143 - if ( ptdls_sta->timer_flag == 2 )
128144 - rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_FREE_STA);
128145 - else
128146 - {
128147 - _enter_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
128148 - ptdls_sta->timer_flag = 0;
128149 - _exit_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
128150 - }
128151 -
128152 -}
128153 -
128154 -void _tdls_alive_timer_phase2_hdl(void *FunctionContext)
128155 -{
128156 - _irqL irqL;
128157 - struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
128158 - _adapter *padapter = ptdls_sta->padapter;
128159 - struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
128160 -
128161 - _enter_critical_bh(&(ptdlsinfo->hdl_lock), &irqL);
128162 - ptdls_sta->timer_flag = 1;
128163 - _exit_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
128164 -
128165 - if( (ptdls_sta->tdls_sta_state & TDLS_ALIVE_STATE) &&
128166 - (sta_last_rx_pkts(ptdls_sta) + 3 <= sta_rx_pkts(ptdls_sta)) )
128167 - {
128168 - DBG_8192C("TDLS STA ALIVE\n");
128169 - ptdls_sta->alive_count = 0;
128170 - rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CKALV_PH2);
128171 - }
128172 - else
128173 - {
128174 - DBG_8192C("TDLS STA TOO FAR\n");
128175 - ptdls_sta->alive_count++;
128176 - if( ptdls_sta->alive_count == TDLS_ALIVE_COUNT )
128177 - {
128178 - ptdls_sta->stat_code = _RSON_TDLS_TEAR_TOOFAR_;
128179 - issue_tdls_teardown(padapter, ptdls_sta->hwaddr);
128180 - }
128181 - else
128182 - {
128183 - rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CKALV_PH2);
128184 - }
128185 + _adapter *padapter = (_adapter *)FunctionContext;
128186 + sa_query_timer_hdl(padapter);
128187 }
128188 +#endif //CONFIG_IEEE80211W
128189
128190 - if ( ptdls_sta->timer_flag == 2 )
128191 - rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_FREE_STA);
128192 - else
128193 +void init_addba_retry_timer(_adapter *padapter, struct sta_info *psta)
128194 {
128195 - _enter_critical_bh(&(ptdlsinfo->hdl_lock), &irqL);
128196 - ptdls_sta->timer_flag = 0;
128197 - _exit_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
128198 -}
128199
128200 + _init_timer(&psta->addba_retry_timer, padapter->pnetdev, _addba_timer_hdl, psta);
128201 }
128202
128203 -void init_tdls_alive_timer(_adapter *padapter, struct sta_info *psta)
128204 -{
128205 - psta->padapter=padapter;
128206 - _init_timer(&psta->alive_timer1, padapter->pnetdev, _tdls_alive_timer_phase1_hdl, psta);
128207 - _init_timer(&psta->alive_timer2, padapter->pnetdev, _tdls_alive_timer_phase2_hdl, psta);
128208 -}
128209 -#endif //CONFIG_TDLS
128210 -
128211 /*
128212 void _reauth_timer_hdl(void *FunctionContext)
128213 {
128214 @@ -513,6 +356,9 @@ void init_mlme_ext_timer(_adapter *padap
128215
128216 _init_timer(&pmlmeext->survey_timer, padapter->pnetdev, _survey_timer_hdl, padapter);
128217 _init_timer(&pmlmeext->link_timer, padapter->pnetdev, _link_timer_hdl, padapter);
128218 +#ifdef CONFIG_IEEE80211W
128219 + _init_timer(&pmlmeext->sa_query_timer, padapter->pnetdev, _sa_query_timer_hdl, padapter);
128220 +#endif //CONFIG_IEEE80211W
128221 //_init_timer(&pmlmeext->ADDBA_timer, padapter->pnetdev, _addba_timer_hdl, padapter);
128222
128223 //_init_timer(&pmlmeext->reauth_timer, padapter->pnetdev, _reauth_timer_hdl, padapter);
128224 @@ -579,24 +425,24 @@ static int mgnt_xmit_entry(struct sk_buf
128225 struct hostapd_priv *phostapdpriv = rtw_netdev_priv(pnetdev);
128226 _adapter *padapter = (_adapter *)phostapdpriv->padapter;
128227
128228 - //DBG_8192C("%s\n", __FUNCTION__);
128229 + //DBG_871X("%s\n", __FUNCTION__);
128230
128231 - return padapter->HalFunc.hostap_mgnt_xmit_entry(padapter, skb);
128232 + return rtw_hal_hostap_mgnt_xmit_entry(padapter, skb);
128233 }
128234
128235 static int mgnt_netdev_open(struct net_device *pnetdev)
128236 {
128237 struct hostapd_priv *phostapdpriv = rtw_netdev_priv(pnetdev);
128238
128239 - DBG_8192C("mgnt_netdev_open: MAC Address:" MAC_FMT "\n", MAC_ARG(pnetdev->dev_addr));
128240 + DBG_871X("mgnt_netdev_open: MAC Address:" MAC_FMT "\n", MAC_ARG(pnetdev->dev_addr));
128241
128242
128243 init_usb_anchor(&phostapdpriv->anchored);
128244
128245 - if(!netif_queue_stopped(pnetdev))
128246 - netif_start_queue(pnetdev);
128247 + if(!rtw_netif_queue_stopped(pnetdev))
128248 + rtw_netif_start_queue(pnetdev);
128249 else
128250 - netif_wake_queue(pnetdev);
128251 + rtw_netif_wake_queue(pnetdev);
128252
128253
128254 netif_carrier_on(pnetdev);
128255 @@ -609,14 +455,14 @@ static int mgnt_netdev_close(struct net_
128256 {
128257 struct hostapd_priv *phostapdpriv = rtw_netdev_priv(pnetdev);
128258
128259 - DBG_8192C("%s\n", __FUNCTION__);
128260 + DBG_871X("%s\n", __FUNCTION__);
128261
128262 usb_kill_anchored_urbs(&phostapdpriv->anchored);
128263
128264 netif_carrier_off(pnetdev);
128265
128266 - if (!netif_queue_stopped(pnetdev))
128267 - netif_stop_queue(pnetdev);
128268 + if (!rtw_netif_queue_stopped(pnetdev))
128269 + rtw_netif_stop_queue(pnetdev);
128270
128271 //rtw_write16(phostapdpriv->padapter, 0x0116, 0x3f3f);
128272
128273 @@ -658,7 +504,7 @@ int hostapd_mode_init(_adapter *padapter
128274
128275 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
128276
128277 - DBG_8192C("register rtl871x_mgnt_netdev_ops to netdev_ops\n");
128278 + DBG_871X("register rtl871x_mgnt_netdev_ops to netdev_ops\n");
128279
128280 pnetdev->netdev_ops = &rtl871x_mgnt_netdev_ops;
128281
128282 @@ -690,7 +536,7 @@ int hostapd_mode_init(_adapter *padapter
128283
128284 if(dev_alloc_name(pnetdev,"mgnt.wlan%d") < 0)
128285 {
128286 - DBG_8192C("hostapd_mode_init(): dev_alloc_name, fail! \n");
128287 + DBG_871X("hostapd_mode_init(): dev_alloc_name, fail! \n");
128288 }
128289
128290
128291 @@ -713,7 +559,7 @@ int hostapd_mode_init(_adapter *padapter
128292 /* Tell the network stack we exist */
128293 if (register_netdev(pnetdev) != 0)
128294 {
128295 - DBG_8192C("hostapd_mode_init(): register_netdev fail!\n");
128296 + DBG_871X("hostapd_mode_init(): register_netdev fail!\n");
128297
128298 if(pnetdev)
128299 {
128300 --- a/drivers/net/wireless/rtl8192cu/os_dep/linux/os_intfs.c
128301 +++ b/drivers/net/wireless/rtl8192cu/os_dep/linux/os_intfs.c
128302 @@ -1,7 +1,7 @@
128303 /******************************************************************************
128304 *
128305 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
128306 - *
128307 + *
128308 * This program is free software; you can redistribute it and/or modify it
128309 * under the terms of version 2 of the GNU General Public License as
128310 * published by the Free Software Foundation.
128311 @@ -31,14 +31,10 @@
128312 #include <drv_types.h>
128313 #include <xmit_osdep.h>
128314 #include <recv_osdep.h>
128315 -#include <hal_init.h>
128316 +#include <hal_intf.h>
128317 #include <rtw_ioctl.h>
128318 #include <rtw_version.h>
128319
128320 -#ifdef CONFIG_SDIO_HCI
128321 -#include <sdio_osintf.h>
128322 -#endif
128323 -
128324 #ifdef CONFIG_USB_HCI
128325 #include <usb_osintf.h>
128326 #endif
128327 @@ -62,9 +58,9 @@ int rtw_rfintfs = HWPI;
128328 int rtw_lbkmode = 0;//RTL8712_AIR_TRX;
128329
128330
128331 -int rtw_network_mode = Ndis802_11IBSS;//Ndis802_11Infrastructure;//infra, ad-hoc, auto
128332 +int rtw_network_mode = Ndis802_11IBSS;//Ndis802_11Infrastructure;//infra, ad-hoc, auto
128333 //NDIS_802_11_SSID ssid;
128334 -int rtw_channel = 1;//ad-hoc support requirement
128335 +int rtw_channel = 1;//ad-hoc support requirement
128336 int rtw_wireless_mode = WIRELESS_11BG_24N;
128337 int rtw_vrtl_carrier_sense = AUTO_VCS;
128338 int rtw_vcs_type = RTS_CTS;//*
128339 @@ -74,18 +70,18 @@ int rtw_preamble = PREAMBLE_LONG;//long,
128340 int rtw_scan_mode = 1;//active, passive
128341 int rtw_adhoc_tx_pwr = 1;
128342 int rtw_soft_ap = 0;
128343 -//int smart_ps = 1;
128344 +//int smart_ps = 1;
128345 #ifdef CONFIG_POWER_SAVING
128346 int rtw_power_mgnt = 1;
128347 -#else
128348 -int rtw_power_mgnt = PS_MODE_ACTIVE;
128349 -#endif
128350 -
128351 #ifdef CONFIG_IPS_LEVEL_2
128352 int rtw_ips_mode = IPS_LEVEL_2;
128353 #else
128354 int rtw_ips_mode = IPS_NORMAL;
128355 #endif
128356 +#else
128357 +int rtw_power_mgnt = PS_MODE_ACTIVE;
128358 +int rtw_ips_mode = IPS_NONE;
128359 +#endif
128360 module_param(rtw_ips_mode, int, 0644);
128361 MODULE_PARM_DESC(rtw_ips_mode,"The default IPS mode");
128362
128363 @@ -101,21 +97,21 @@ int rtw_mp_mode = 1;
128364 int rtw_mp_mode = 0;
128365 #endif
128366 int rtw_software_encrypt = 0;
128367 -int rtw_software_decrypt = 0;
128368 +int rtw_software_decrypt = 0;
128369
128370 int rtw_acm_method = 0;// 0:By SW 1:By HW.
128371 -
128372 +
128373 int rtw_wmm_enable = 1;// default is set to enable the wmm.
128374 -int rtw_uapsd_enable = 0;
128375 +int rtw_uapsd_enable = 0;
128376 int rtw_uapsd_max_sp = NO_LIMIT;
128377 int rtw_uapsd_acbk_en = 0;
128378 int rtw_uapsd_acbe_en = 0;
128379 int rtw_uapsd_acvi_en = 0;
128380 int rtw_uapsd_acvo_en = 0;
128381 -
128382 +
128383 #ifdef CONFIG_80211N_HT
128384 int rtw_ht_enable = 1;
128385 -int rtw_cbw40_enable = 1;
128386 +int rtw_cbw40_enable = 3; // 0 :diable, bit(0): enable 2.4g, bit(1): enable 5g
128387 int rtw_ampdu_enable = 1;//for enable tx_ampdu
128388 int rtw_rx_stbc = 1;// 0: disable, bit(0):enable 2.4g, bit(1):enable 5g, default is set to enable 2.4GHZ for IOT issue with bufflao's AP at 5GHZ
128389 int rtw_ampdu_amsdu = 0;// 0: disabled, 1:enabled, 2:auto
128390 @@ -123,7 +119,7 @@ int rtw_ampdu_amsdu = 0;// 0: disabled,
128391
128392 int rtw_lowrate_two_xmit = 1;//Use 2 path Tx to transmit MCS0~7 and legacy mode
128393
128394 -//int rf_config = RF_1T2R; // 1T2R
128395 +//int rf_config = RF_1T2R; // 1T2R
128396 int rtw_rf_config = RF_819X_MAX_TYPE; //auto
128397 int rtw_low_power = 0;
128398 #ifdef CONFIG_WIFI_TEST
128399 @@ -131,6 +127,9 @@ int rtw_wifi_spec = 1;//for wifi test
128400 #else
128401 int rtw_wifi_spec = 0;
128402 #endif
128403 +
128404 +int rtw_special_rf_path = 0; //0: 2T2R ,1: only turn on path A 1T1R, 2: only turn on path B 1T1R
128405 +
128406 int rtw_channel_plan = RT_CHANNEL_DOMAIN_MAX;
128407
128408 #ifdef CONFIG_BT_COEXIST
128409 @@ -151,7 +150,7 @@ int rtw_enusbss = 0;//0:disable,1:enable
128410 int rtw_hwpdn_mode=2;//0:disable,1:enable,2: by EFUSE config
128411
128412 #ifdef CONFIG_HW_PWRP_DETECTION
128413 -int rtw_hwpwrp_detect = 1;
128414 +int rtw_hwpwrp_detect = 1;
128415 #else
128416 int rtw_hwpwrp_detect = 0; //HW power ping detect 0:disable , 1:enable
128417 #endif
128418 @@ -166,11 +165,27 @@ int rtw_hw_wps_pbc = 0;
128419 int rtw_mc2u_disable = 0;
128420 #endif // CONFIG_TX_MCAST2UNI
128421
128422 +int rtw_mac_phy_mode = 0; //0:by efuse, 1:smsp, 2:dmdp, 3:dmsp.
128423 +
128424 +#ifdef CONFIG_80211D
128425 +int rtw_80211d = 0;
128426 +#endif
128427 +
128428 char* ifname = "wlan%d";
128429 +module_param(ifname, charp, 0644);
128430 +MODULE_PARM_DESC(ifname, "The default name to allocate for first interface");
128431 +
128432 +char* if2name = "wlan%d";
128433 +module_param(if2name, charp, 0644);
128434 +MODULE_PARM_DESC(if2name, "The default name to allocate for second interface");
128435
128436 char* rtw_initmac = 0; // temp mac address if users want to use instead of the mac address in Efuse
128437
128438 -module_param(ifname, charp, 0644);
128439 +#ifdef CONFIG_MULTI_VIR_IFACES
128440 +int rtw_ext_iface_num = 1;//primary/secondary iface is excluded
128441 +module_param(rtw_ext_iface_num, int, 0644);
128442 +#endif //CONFIG_MULTI_VIR_IFACES
128443 +
128444 module_param(rtw_initmac, charp, 0644);
128445 module_param(rtw_channel_plan, int, 0644);
128446 module_param(rtw_chip_version, int, 0644);
128447 @@ -198,6 +213,8 @@ module_param(rtw_power_mgnt, int, 0644);
128448 module_param(rtw_low_power, int, 0644);
128449 module_param(rtw_wifi_spec, int, 0644);
128450
128451 +module_param(rtw_special_rf_path, int, 0644);
128452 +
128453 module_param(rtw_antdiv_cfg, int, 0644);
128454
128455
128456 @@ -205,6 +222,8 @@ module_param(rtw_enusbss, int, 0644);
128457 module_param(rtw_hwpdn_mode, int, 0644);
128458 module_param(rtw_hwpwrp_detect, int, 0644);
128459
128460 +module_param(rtw_hw_wps_pbc, int, 0644);
128461 +
128462 #ifdef CONFIG_ADAPTOR_INFO_CACHING_FILE
128463 char *rtw_adaptor_info_caching_file_path= "/data/misc/wifi/rtw_cache";
128464 module_param(rtw_adaptor_info_caching_file_path, charp, 0644);
128465 @@ -223,16 +242,6 @@ module_param(rtw_force_iol, bool, 0644);
128466 MODULE_PARM_DESC(rtw_force_iol,"Force to enable IOL");
128467 #endif //CONFIG_IOL
128468
128469 -#ifdef SUPPORT_64_STA
128470 -uint rtw_bcmc_rate=8;
128471 -module_param(rtw_bcmc_rate, uint, 0644);
128472 -MODULE_PARM_DESC(rtw_bcmc_rate,"The bc/mc data rate");
128473 -#endif // SUPPORT_64_STA
128474 -
128475 -uint rtw_intel_class_mode=0;
128476 -module_param(rtw_intel_class_mode, uint, 0644);
128477 -MODULE_PARM_DESC(rtw_intel_class_mode,"The intel class mode [0: off, 1: on]");
128478 -
128479 #ifdef CONFIG_FILE_FWIMG
128480 char *rtw_fw_file_path= "";
128481 module_param(rtw_fw_file_path, charp, 0644);
128482 @@ -243,7 +252,18 @@ MODULE_PARM_DESC(rtw_fw_file_path, "The
128483 module_param(rtw_mc2u_disable, int, 0644);
128484 #endif // CONFIG_TX_MCAST2UNI
128485
128486 +module_param(rtw_mac_phy_mode, int, 0644);
128487 +
128488 +#ifdef CONFIG_80211D
128489 +module_param(rtw_80211d, int, 0644);
128490 +#endif
128491 +
128492 +uint rtw_notch_filter = RTW_NOTCH_FILTER;
128493 +module_param(rtw_notch_filter, uint, 0644);
128494 +MODULE_PARM_DESC(rtw_notch_filter, "0:Disable, 1:Enable, 2:Enable only for P2P");
128495 +
128496 static uint loadparam( _adapter *padapter, _nic_hdl pnetdev);
128497 +int _netdev_open(struct net_device *pnetdev);
128498 int netdev_open (struct net_device *pnetdev);
128499 static int netdev_close (struct net_device *pnetdev);
128500
128501 @@ -255,23 +275,14 @@ static char rtw_proc_name[IFNAMSIZ];
128502 static struct proc_dir_entry *rtw_proc = NULL;
128503 static int rtw_proc_cnt = 0;
128504
128505 -#ifndef create_proc_entry
128506 -/* dummy routines */
128507 -void rtw_proc_remove_one(struct net_device *dev)
128508 -{
128509 -}
128510 -
128511 -void rtw_proc_init_one(struct net_device *dev)
128512 -{
128513 -}
128514 -
128515 -#else /* create_proc_entry not defined */
128516 +#define RTW_PROC_NAME DRV_NAME
128517
128518 void rtw_proc_init_one(struct net_device *dev)
128519 {
128520 struct proc_dir_entry *dir_dev = NULL;
128521 struct proc_dir_entry *entry=NULL;
128522 _adapter *padapter = rtw_netdev_priv(dev);
128523 + u8 rf_type;
128524
128525 if(rtw_proc == NULL)
128526 {
128527 @@ -283,6 +294,18 @@ void rtw_proc_init_one(struct net_device
128528 {
128529 _rtw_memcpy(rtw_proc_name, RTL8192D_PROC_NAME, sizeof(RTL8192D_PROC_NAME));
128530 }
128531 + else if(padapter->chip_type == RTL8723A)
128532 + {
128533 + _rtw_memcpy(rtw_proc_name, RTW_PROC_NAME, sizeof(RTW_PROC_NAME));
128534 + }
128535 + else if(padapter->chip_type == RTL8188E)
128536 + {
128537 + _rtw_memcpy(rtw_proc_name, RTW_PROC_NAME, sizeof(RTW_PROC_NAME));
128538 + }
128539 + else
128540 + {
128541 + _rtw_memcpy(rtw_proc_name, RTW_PROC_NAME, sizeof(RTW_PROC_NAME));
128542 + }
128543
128544 #if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
128545 rtw_proc=create_proc_entry(rtw_proc_name, S_IFDIR, proc_net);
128546 @@ -290,23 +313,40 @@ void rtw_proc_init_one(struct net_device
128547 rtw_proc=create_proc_entry(rtw_proc_name, S_IFDIR, init_net.proc_net);
128548 #endif
128549 if (rtw_proc == NULL) {
128550 - DBG_8192C(KERN_ERR "Unable to create rtw_proc directory\n");
128551 + DBG_871X(KERN_ERR "Unable to create rtw_proc directory\n");
128552 + return;
128553 + }
128554 +
128555 + entry = create_proc_read_entry("ver_info", S_IFREG | S_IRUGO, rtw_proc, proc_get_drv_version, dev);
128556 + if (!entry) {
128557 + DBG_871X("Unable to create_proc_read_entry!\n");
128558 return;
128559 }
128560
128561 - entry = create_proc_read_entry("ver_info", S_IFREG | S_IRUGO, rtw_proc, proc_get_drv_version, dev);
128562 + entry = create_proc_read_entry("log_level", S_IFREG | S_IRUGO,
128563 + rtw_proc, proc_get_log_level, dev);
128564 + if (!entry) {
128565 + DBG_871X("Unable to create_proc_read_entry!\n");
128566 + return;
128567 + }
128568 + entry->write_proc = proc_set_log_level;
128569 +
128570 +#ifdef DBG_MEM_ALLOC
128571 + entry = create_proc_read_entry("mstat", S_IFREG | S_IRUGO,
128572 + rtw_proc, proc_get_mstat, dev);
128573 if (!entry) {
128574 - DBG_871X("Unable to create_proc_read_entry!\n");
128575 + DBG_871X("Unable to create_proc_read_entry!\n");
128576 return;
128577 }
128578 +#endif /* DBG_MEM_ALLOC */
128579 }
128580
128581 -
128582 +
128583
128584 if(padapter->dir_dev == NULL)
128585 {
128586 - padapter->dir_dev = create_proc_entry(dev->name,
128587 - S_IFDIR | S_IRUGO | S_IXUGO,
128588 + padapter->dir_dev = create_proc_entry(dev->name,
128589 + S_IFDIR | S_IRUGO | S_IXUGO,
128590 rtw_proc);
128591
128592 dir_dev = padapter->dir_dev;
128593 @@ -320,12 +360,12 @@ void rtw_proc_init_one(struct net_device
128594 remove_proc_entry(rtw_proc_name, proc_net);
128595 #else
128596 remove_proc_entry(rtw_proc_name, init_net.proc_net);
128597 -#endif
128598 +#endif
128599 rtw_proc = NULL;
128600 }
128601 }
128602
128603 - DBG_8192C("Unable to create dir_dev directory\n");
128604 + DBG_871X("Unable to create dir_dev directory\n");
128605 return;
128606 }
128607 }
128608 @@ -337,147 +377,283 @@ void rtw_proc_init_one(struct net_device
128609 rtw_proc_cnt++;
128610
128611 entry = create_proc_read_entry("write_reg", S_IFREG | S_IRUGO,
128612 - dir_dev, proc_get_write_reg, dev);
128613 + dir_dev, proc_get_write_reg, dev);
128614 if (!entry) {
128615 - DBG_871X("Unable to create_proc_read_entry!\n");
128616 + DBG_871X("Unable to create_proc_read_entry!\n");
128617 return;
128618 }
128619 entry->write_proc = proc_set_write_reg;
128620
128621 entry = create_proc_read_entry("read_reg", S_IFREG | S_IRUGO,
128622 - dir_dev, proc_get_read_reg, dev);
128623 + dir_dev, proc_get_read_reg, dev);
128624 if (!entry) {
128625 - DBG_871X("Unable to create_proc_read_entry!\n");
128626 + DBG_871X("Unable to create_proc_read_entry!\n");
128627 return;
128628 }
128629 entry->write_proc = proc_set_read_reg;
128630
128631 -
128632 +
128633 entry = create_proc_read_entry("fwstate", S_IFREG | S_IRUGO,
128634 - dir_dev, proc_get_fwstate, dev);
128635 + dir_dev, proc_get_fwstate, dev);
128636 if (!entry) {
128637 - DBG_871X("Unable to create_proc_read_entry!\n");
128638 + DBG_871X("Unable to create_proc_read_entry!\n");
128639 return;
128640 }
128641
128642
128643 entry = create_proc_read_entry("sec_info", S_IFREG | S_IRUGO,
128644 - dir_dev, proc_get_sec_info, dev);
128645 + dir_dev, proc_get_sec_info, dev);
128646 if (!entry) {
128647 - DBG_871X("Unable to create_proc_read_entry!\n");
128648 + DBG_871X("Unable to create_proc_read_entry!\n");
128649 return;
128650 }
128651
128652
128653 entry = create_proc_read_entry("mlmext_state", S_IFREG | S_IRUGO,
128654 - dir_dev, proc_get_mlmext_state, dev);
128655 + dir_dev, proc_get_mlmext_state, dev);
128656 if (!entry) {
128657 - DBG_871X("Unable to create_proc_read_entry!\n");
128658 + DBG_871X("Unable to create_proc_read_entry!\n");
128659 return;
128660 }
128661
128662
128663 entry = create_proc_read_entry("qos_option", S_IFREG | S_IRUGO,
128664 - dir_dev, proc_get_qos_option, dev);
128665 + dir_dev, proc_get_qos_option, dev);
128666 if (!entry) {
128667 - DBG_871X("Unable to create_proc_read_entry!\n");
128668 + DBG_871X("Unable to create_proc_read_entry!\n");
128669 return;
128670 }
128671
128672 entry = create_proc_read_entry("ht_option", S_IFREG | S_IRUGO,
128673 - dir_dev, proc_get_ht_option, dev);
128674 + dir_dev, proc_get_ht_option, dev);
128675 if (!entry) {
128676 - DBG_871X("Unable to create_proc_read_entry!\n");
128677 + DBG_871X("Unable to create_proc_read_entry!\n");
128678 return;
128679 }
128680
128681 entry = create_proc_read_entry("rf_info", S_IFREG | S_IRUGO,
128682 - dir_dev, proc_get_rf_info, dev);
128683 + dir_dev, proc_get_rf_info, dev);
128684 if (!entry) {
128685 - DBG_871X("Unable to create_proc_read_entry!\n");
128686 + DBG_871X("Unable to create_proc_read_entry!\n");
128687 return;
128688 }
128689 -
128690 +
128691 entry = create_proc_read_entry("ap_info", S_IFREG | S_IRUGO,
128692 - dir_dev, proc_get_ap_info, dev);
128693 + dir_dev, proc_get_ap_info, dev);
128694 if (!entry) {
128695 - DBG_871X("Unable to create_proc_read_entry!\n");
128696 + DBG_871X("Unable to create_proc_read_entry!\n");
128697 return;
128698 }
128699
128700 entry = create_proc_read_entry("adapter_state", S_IFREG | S_IRUGO,
128701 - dir_dev, proc_get_adapter_state, dev);
128702 + dir_dev, proc_get_adapter_state, dev);
128703 if (!entry) {
128704 - DBG_871X("Unable to create_proc_read_entry!\n");
128705 + DBG_871X("Unable to create_proc_read_entry!\n");
128706 return;
128707 }
128708
128709 entry = create_proc_read_entry("trx_info", S_IFREG | S_IRUGO,
128710 - dir_dev, proc_get_trx_info, dev);
128711 + dir_dev, proc_get_trx_info, dev);
128712 + if (!entry) {
128713 + DBG_871X("Unable to create_proc_read_entry!\n");
128714 + return;
128715 + }
128716 +
128717 + entry = create_proc_read_entry("mac_reg_dump1", S_IFREG | S_IRUGO,
128718 + dir_dev, proc_get_mac_reg_dump1, dev);
128719 + if (!entry) {
128720 + DBG_871X("Unable to create_proc_read_entry!\n");
128721 + return;
128722 + }
128723 +
128724 + entry = create_proc_read_entry("mac_reg_dump2", S_IFREG | S_IRUGO,
128725 + dir_dev, proc_get_mac_reg_dump2, dev);
128726 + if (!entry) {
128727 + DBG_871X("Unable to create_proc_read_entry!\n");
128728 + return;
128729 + }
128730 +
128731 + entry = create_proc_read_entry("mac_reg_dump3", S_IFREG | S_IRUGO,
128732 + dir_dev, proc_get_mac_reg_dump3, dev);
128733 + if (!entry) {
128734 + DBG_871X("Unable to create_proc_read_entry!\n");
128735 + return;
128736 + }
128737 +
128738 + entry = create_proc_read_entry("bb_reg_dump1", S_IFREG | S_IRUGO,
128739 + dir_dev, proc_get_bb_reg_dump1, dev);
128740 + if (!entry) {
128741 + DBG_871X("Unable to create_proc_read_entry!\n");
128742 + return;
128743 + }
128744 +
128745 + entry = create_proc_read_entry("bb_reg_dump2", S_IFREG | S_IRUGO,
128746 + dir_dev, proc_get_bb_reg_dump2, dev);
128747 + if (!entry) {
128748 + DBG_871X("Unable to create_proc_read_entry!\n");
128749 + return;
128750 + }
128751 +
128752 + entry = create_proc_read_entry("bb_reg_dump3", S_IFREG | S_IRUGO,
128753 + dir_dev, proc_get_bb_reg_dump3, dev);
128754 + if (!entry) {
128755 + DBG_871X("Unable to create_proc_read_entry!\n");
128756 + return;
128757 + }
128758 +
128759 + entry = create_proc_read_entry("rf_reg_dump1", S_IFREG | S_IRUGO,
128760 + dir_dev, proc_get_rf_reg_dump1, dev);
128761 + if (!entry) {
128762 + DBG_871X("Unable to create_proc_read_entry!\n");
128763 + return;
128764 + }
128765 +
128766 + entry = create_proc_read_entry("rf_reg_dump2", S_IFREG | S_IRUGO,
128767 + dir_dev, proc_get_rf_reg_dump2, dev);
128768 if (!entry) {
128769 - DBG_871X("Unable to create_proc_read_entry!\n");
128770 + DBG_871X("Unable to create_proc_read_entry!\n");
128771 return;
128772 }
128773
128774 + rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
128775 + if((RF_1T2R == rf_type) ||(RF_1T1R ==rf_type )) {
128776 + entry = create_proc_read_entry("rf_reg_dump3", S_IFREG | S_IRUGO,
128777 + dir_dev, proc_get_rf_reg_dump3, dev);
128778 + if (!entry) {
128779 + DBG_871X("Unable to create_proc_read_entry!\n");
128780 + return;
128781 + }
128782 +
128783 + entry = create_proc_read_entry("rf_reg_dump4", S_IFREG | S_IRUGO,
128784 + dir_dev, proc_get_rf_reg_dump4, dev);
128785 + if (!entry) {
128786 + DBG_871X("Unable to create_proc_read_entry!\n");
128787 + return;
128788 + }
128789 + }
128790 +
128791 #ifdef CONFIG_AP_MODE
128792
128793 entry = create_proc_read_entry("all_sta_info", S_IFREG | S_IRUGO,
128794 - dir_dev, proc_get_all_sta_info, dev);
128795 + dir_dev, proc_get_all_sta_info, dev);
128796 if (!entry) {
128797 - DBG_871X("Unable to create_proc_read_entry!\n");
128798 + DBG_871X("Unable to create_proc_read_entry!\n");
128799 return;
128800 }
128801 #endif
128802
128803 #ifdef DBG_MEMORY_LEAK
128804 entry = create_proc_read_entry("_malloc_cnt", S_IFREG | S_IRUGO,
128805 - dir_dev, proc_get_malloc_cnt, dev);
128806 + dir_dev, proc_get_malloc_cnt, dev);
128807 if (!entry) {
128808 - DBG_871X("Unable to create_proc_read_entry!\n");
128809 + DBG_871X("Unable to create_proc_read_entry!\n");
128810 return;
128811 }
128812 #endif
128813
128814 #ifdef CONFIG_FIND_BEST_CHANNEL
128815 entry = create_proc_read_entry("best_channel", S_IFREG | S_IRUGO,
128816 - dir_dev, proc_get_best_channel, dev);
128817 + dir_dev, proc_get_best_channel, dev);
128818 if (!entry) {
128819 - DBG_871X("Unable to create_proc_read_entry!\n");
128820 + DBG_871X("Unable to create_proc_read_entry!\n");
128821 return;
128822 }
128823 + entry->write_proc = proc_set_best_channel;
128824 #endif
128825
128826 entry = create_proc_read_entry("rx_signal", S_IFREG | S_IRUGO,
128827 - dir_dev, proc_get_rx_signal, dev);
128828 + dir_dev, proc_get_rx_signal, dev);
128829 if (!entry) {
128830 - DBG_871X("Unable to create_proc_read_entry!\n");
128831 + DBG_871X("Unable to create_proc_read_entry!\n");
128832 return;
128833 }
128834 entry->write_proc = proc_set_rx_signal;
128835
128836 + entry = create_proc_read_entry("ht_enable", S_IFREG | S_IRUGO,
128837 + dir_dev, proc_get_ht_enable, dev);
128838 + if (!entry) {
128839 + DBG_871X("Unable to create_proc_read_entry!\n");
128840 + return;
128841 + }
128842 + entry->write_proc = proc_set_ht_enable;
128843 +
128844 + entry = create_proc_read_entry("cbw40_enable", S_IFREG | S_IRUGO,
128845 + dir_dev, proc_get_cbw40_enable, dev);
128846 + if (!entry) {
128847 + DBG_871X("Unable to create_proc_read_entry!\n");
128848 + return;
128849 + }
128850 + entry->write_proc = proc_set_cbw40_enable;
128851 +
128852 entry = create_proc_read_entry("ampdu_enable", S_IFREG | S_IRUGO,
128853 - dir_dev, proc_get_ampdu_enable, dev);
128854 + dir_dev, proc_get_ampdu_enable, dev);
128855 if (!entry) {
128856 - DBG_871X("Unable to create_proc_read_entry!\n");
128857 + DBG_871X("Unable to create_proc_read_entry!\n");
128858 return;
128859 }
128860 entry->write_proc = proc_set_ampdu_enable;
128861
128862 + entry = create_proc_read_entry("rx_stbc", S_IFREG | S_IRUGO,
128863 + dir_dev, proc_get_rx_stbc, dev);
128864 + if (!entry) {
128865 + DBG_871X("Unable to create_proc_read_entry!\n");
128866 + return;
128867 + }
128868 + entry->write_proc = proc_set_rx_stbc;
128869 +
128870 +
128871 + entry = create_proc_read_entry("path_rssi", S_IFREG | S_IRUGO,
128872 + dir_dev, proc_get_two_path_rssi, dev);
128873 +
128874 + entry = create_proc_read_entry("vid", S_IFREG | S_IRUGO,
128875 + dir_dev, proc_get_vid, dev);
128876 + if (!entry) {
128877 + DBG_871X("Unable to create_proc_read_entry!\n");
128878 + return;
128879 + }
128880 +
128881 + entry = create_proc_read_entry("pid", S_IFREG | S_IRUGO,
128882 + dir_dev, proc_get_pid, dev);
128883 + if (!entry) {
128884 + DBG_871X("Unable to create_proc_read_entry!\n");
128885 + return;
128886 + }
128887 +
128888 entry = create_proc_read_entry("rssi_disp", S_IFREG | S_IRUGO,
128889 - dir_dev, proc_get_rssi_disp, dev);
128890 + dir_dev, proc_get_rssi_disp, dev);
128891 if (!entry) {
128892 - DBG_871X("Unable to create_proc_read_entry!\n");
128893 + DBG_871X("Unable to create_proc_read_entry!\n");
128894 return;
128895 }
128896 entry->write_proc = proc_set_rssi_disp;
128897
128898 +#if defined(DBG_CONFIG_ERROR_DETECT)
128899 + entry = create_proc_read_entry("sreset", S_IFREG | S_IRUGO,
128900 + dir_dev, proc_get_sreset, dev);
128901 + if (!entry) {
128902 + DBG_871X("Unable to create_proc_read_entry!\n");
128903 + return;
128904 + }
128905 + entry->write_proc = proc_set_sreset;
128906 +#endif /* DBG_CONFIG_ERROR_DETECT */
128907 +
128908 +#ifdef CONFIG_DM_ADAPTIVITY
128909 + entry = create_proc_read_entry("dm_adaptivity", S_IFREG | S_IRUGO,
128910 + dir_dev, proc_get_dm_adaptivity, dev);
128911 + if (!entry) {
128912 + DBG_871X("Unable to create_proc_read_entry!\n");
128913 + return;
128914 + }
128915 + entry->write_proc = proc_set_dm_adaptivity;
128916 +#endif /* CONFIG_DM_ADAPTIVITY */
128917 +
128918 }
128919
128920 void rtw_proc_remove_one(struct net_device *dev)
128921 {
128922 struct proc_dir_entry *dir_dev = NULL;
128923 _adapter *padapter = rtw_netdev_priv(dev);
128924 -
128925 + u8 rf_type;
128926
128927 dir_dev = padapter->dir_dev;
128928 padapter->dir_dev = NULL;
128929 @@ -491,29 +667,64 @@ void rtw_proc_remove_one(struct net_devi
128930 remove_proc_entry("mlmext_state", dir_dev);
128931 remove_proc_entry("qos_option", dir_dev);
128932 remove_proc_entry("ht_option", dir_dev);
128933 - remove_proc_entry("rf_info", dir_dev);
128934 + remove_proc_entry("rf_info", dir_dev);
128935 remove_proc_entry("ap_info", dir_dev);
128936 remove_proc_entry("adapter_state", dir_dev);
128937 remove_proc_entry("trx_info", dir_dev);
128938
128939 -#ifdef CONFIG_AP_MODE
128940 + remove_proc_entry("mac_reg_dump1", dir_dev);
128941 + remove_proc_entry("mac_reg_dump2", dir_dev);
128942 + remove_proc_entry("mac_reg_dump3", dir_dev);
128943 + remove_proc_entry("bb_reg_dump1", dir_dev);
128944 + remove_proc_entry("bb_reg_dump2", dir_dev);
128945 + remove_proc_entry("bb_reg_dump3", dir_dev);
128946 + remove_proc_entry("rf_reg_dump1", dir_dev);
128947 + remove_proc_entry("rf_reg_dump2", dir_dev);
128948 + rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
128949 + if((RF_1T2R == rf_type) ||(RF_1T1R ==rf_type )) {
128950 + remove_proc_entry("rf_reg_dump3", dir_dev);
128951 + remove_proc_entry("rf_reg_dump4", dir_dev);
128952 + }
128953 +#ifdef CONFIG_AP_MODE
128954 remove_proc_entry("all_sta_info", dir_dev);
128955 -#endif
128956 +#endif
128957
128958 #ifdef DBG_MEMORY_LEAK
128959 remove_proc_entry("_malloc_cnt", dir_dev);
128960 -#endif
128961 +#endif
128962
128963 #ifdef CONFIG_FIND_BEST_CHANNEL
128964 remove_proc_entry("best_channel", dir_dev);
128965 -#endif
128966 +#endif
128967 remove_proc_entry("rx_signal", dir_dev);
128968
128969 + remove_proc_entry("cbw40_enable", dir_dev);
128970 +
128971 + remove_proc_entry("ht_enable", dir_dev);
128972 +
128973 + remove_proc_entry("ampdu_enable", dir_dev);
128974 +
128975 + remove_proc_entry("rx_stbc", dir_dev);
128976 +
128977 + remove_proc_entry("path_rssi", dir_dev);
128978 +
128979 + remove_proc_entry("vid", dir_dev);
128980 +
128981 + remove_proc_entry("pid", dir_dev);
128982 +
128983 remove_proc_entry("rssi_disp", dir_dev);
128984
128985 +#if defined(DBG_CONFIG_ERROR_DETECT)
128986 + remove_proc_entry("sreset", dir_dev);
128987 +#endif /* DBG_CONFIG_ERROR_DETECT */
128988 +
128989 +#ifdef CONFIG_DM_ADAPTIVITY
128990 + remove_proc_entry("dm_adaptivity", dir_dev);
128991 +#endif
128992 +
128993 remove_proc_entry(dev->name, rtw_proc);
128994 dir_dev = NULL;
128995 -
128996 +
128997 }
128998 else
128999 {
129000 @@ -526,22 +737,26 @@ void rtw_proc_remove_one(struct net_devi
129001 {
129002 if(rtw_proc){
129003 remove_proc_entry("ver_info", rtw_proc);
129004 -
129005 +
129006 + remove_proc_entry("log_level", rtw_proc);
129007 + #ifdef DBG_MEM_ALLOC
129008 + remove_proc_entry("mstat", rtw_proc);
129009 + #endif /* DBG_MEM_ALLOC */
129010 #if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
129011 remove_proc_entry(rtw_proc_name, proc_net);
129012 #else
129013 remove_proc_entry(rtw_proc_name, init_net.proc_net);
129014 -#endif
129015 +#endif
129016 rtw_proc = NULL;
129017 }
129018 }
129019 }
129020 #endif
129021 -#endif
129022
129023 +uint loadparam( _adapter *padapter, _nic_hdl pnetdev);
129024 uint loadparam( _adapter *padapter, _nic_hdl pnetdev)
129025 {
129026 -
129027 +
129028 uint status = _SUCCESS;
129029 struct registry_priv *registry_par = &padapter->registrypriv;
129030
129031 @@ -549,13 +764,13 @@ _func_enter_;
129032
129033 registry_par->chip_version = (u8)rtw_chip_version;
129034 registry_par->rfintfs = (u8)rtw_rfintfs;
129035 - registry_par->lbkmode = (u8)rtw_lbkmode;
129036 + registry_par->lbkmode = (u8)rtw_lbkmode;
129037 //registry_par->hci = (u8)hci;
129038 - registry_par->network_mode = (u8)rtw_network_mode;
129039 + registry_par->network_mode = (u8)rtw_network_mode;
129040
129041 - _rtw_memcpy(registry_par->ssid.Ssid, "ANY", 3);
129042 + _rtw_memcpy(registry_par->ssid.Ssid, "ANY", 3);
129043 registry_par->ssid.SsidLength = 3;
129044 -
129045 +
129046 registry_par->channel = (u8)rtw_channel;
129047 registry_par->wireless_mode = (u8)rtw_wireless_mode;
129048 registry_par->vrtl_carrier_sense = (u8)rtw_vrtl_carrier_sense ;
129049 @@ -566,7 +781,7 @@ _func_enter_;
129050 registry_par->scan_mode = (u8)rtw_scan_mode;
129051 registry_par->adhoc_tx_pwr = (u8)rtw_adhoc_tx_pwr;
129052 registry_par->soft_ap= (u8)rtw_soft_ap;
129053 - //registry_par->smart_ps = (u8)rtw_smart_ps;
129054 + //registry_par->smart_ps = (u8)rtw_smart_ps;
129055 registry_par->power_mgnt = (u8)rtw_power_mgnt;
129056 registry_par->ips_mode = (u8)rtw_ips_mode;
129057 registry_par->radio_enable = (u8)rtw_radio_enable;
129058 @@ -574,16 +789,16 @@ _func_enter_;
129059 registry_par->short_retry_lmt = (u8)rtw_short_retry_lmt;
129060 registry_par->busy_thresh = (u16)rtw_busy_thresh;
129061 //registry_par->qos_enable = (u8)rtw_qos_enable;
129062 - registry_par->ack_policy = (u8)rtw_ack_policy;
129063 - registry_par->mp_mode = (u8)rtw_mp_mode;
129064 + registry_par->ack_policy = (u8)rtw_ack_policy;
129065 + registry_par->mp_mode = (u8)rtw_mp_mode;
129066 registry_par->software_encrypt = (u8)rtw_software_encrypt;
129067 - registry_par->software_decrypt = (u8)rtw_software_decrypt;
129068 + registry_par->software_decrypt = (u8)rtw_software_decrypt;
129069
129070 registry_par->acm_method = (u8)rtw_acm_method;
129071
129072 //UAPSD
129073 registry_par->wmm_enable = (u8)rtw_wmm_enable;
129074 - registry_par->uapsd_enable = (u8)rtw_uapsd_enable;
129075 + registry_par->uapsd_enable = (u8)rtw_uapsd_enable;
129076 registry_par->uapsd_max_sp = (u8)rtw_uapsd_max_sp;
129077 registry_par->uapsd_acbk_en = (u8)rtw_uapsd_acbk_en;
129078 registry_par->uapsd_acbe_en = (u8)rtw_uapsd_acbe_en;
129079 @@ -594,7 +809,7 @@ _func_enter_;
129080 registry_par->ht_enable = (u8)rtw_ht_enable;
129081 registry_par->cbw40_enable = (u8)rtw_cbw40_enable;
129082 registry_par->ampdu_enable = (u8)rtw_ampdu_enable;
129083 - registry_par->rx_stbc = (u8)rtw_rx_stbc;
129084 + registry_par->rx_stbc = (u8)rtw_rx_stbc;
129085 registry_par->ampdu_amsdu = (u8)rtw_ampdu_amsdu;
129086 #endif
129087
129088 @@ -602,9 +817,9 @@ _func_enter_;
129089 registry_par->rf_config = (u8)rtw_rf_config;
129090 registry_par->low_power = (u8)rtw_low_power;
129091
129092 -
129093 - registry_par->wifi_spec = (u8)rtw_wifi_spec;
129094
129095 + registry_par->wifi_spec = (u8)rtw_wifi_spec;
129096 + registry_par->special_rf_path = (u8)rtw_special_rf_path;
129097 registry_par->channel_plan = (u8)rtw_channel_plan;
129098
129099 #ifdef CONFIG_BT_COEXIST
129100 @@ -627,36 +842,49 @@ _func_enter_;
129101 registry_par->hw_wps_pbc = (u8)rtw_hw_wps_pbc;
129102
129103 #ifdef CONFIG_ADAPTOR_INFO_CACHING_FILE
129104 - snprintf(registry_par->adaptor_info_caching_file_path, PATH_LENGTH_MAX, "%s",rtw_adaptor_info_caching_file_path);
129105 + snprintf(registry_par->adaptor_info_caching_file_path, PATH_LENGTH_MAX, "%s", rtw_adaptor_info_caching_file_path);
129106 registry_par->adaptor_info_caching_file_path[PATH_LENGTH_MAX-1]=0;
129107 #endif
129108
129109 #ifdef CONFIG_LAYER2_ROAMING
129110 registry_par->max_roaming_times = (u8)rtw_max_roaming_times;
129111 +#ifdef CONFIG_INTEL_WIDI
129112 + registry_par->max_roaming_times = (u8)rtw_max_roaming_times + 2;
129113 +#endif // CONFIG_INTEL_WIDI
129114 #endif
129115
129116 #ifdef CONFIG_IOL
129117 registry_par->force_iol = rtw_force_iol;
129118 #endif
129119
129120 -#ifdef SUPPORT_64_STA
129121 - registry_par->bcmc_rate= (u8)rtw_bcmc_rate;
129122 + registry_par->mac_phy_mode = rtw_mac_phy_mode;
129123 +
129124 +#ifdef CONFIG_80211D
129125 + registry_par->enable80211d = (u8)rtw_80211d;
129126 #endif
129127 - registry_par->intel_class_mode= (u8)rtw_intel_class_mode;
129128 +
129129 + snprintf(registry_par->ifname, 16, "%s", ifname);
129130 + snprintf(registry_par->if2name, 16, "%s", if2name);
129131 +
129132 + registry_par->notch_filter = (u8)rtw_notch_filter;
129133 +
129134 +#ifdef CONFIG_MULTI_VIR_IFACES
129135 + registry_par->ext_iface_num = (u8)rtw_ext_iface_num;
129136 +#endif //CONFIG_MULTI_VIR_IFACES
129137 +
129138 _func_exit_;
129139
129140 return status;
129141 -
129142 }
129143
129144 static int rtw_net_set_mac_address(struct net_device *pnetdev, void *p)
129145 {
129146 _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
129147 struct sockaddr *addr = p;
129148 -
129149 +
129150 if(padapter->bup == _FALSE)
129151 {
129152 - //DBG_8192C("r8711_net_set_mac_address(), MAC=%x:%x:%x:%x:%x:%x\n", addr->sa_data[0], addr->sa_data[1], addr->sa_data[2], addr->sa_data[3],
129153 + //DBG_871X("r8711_net_set_mac_address(), MAC=%x:%x:%x:%x:%x:%x\n", addr->sa_data[0], addr->sa_data[1], addr->sa_data[2], addr->sa_data[3],
129154 //addr->sa_data[4], addr->sa_data[5]);
129155 _rtw_memcpy(padapter->eeprompriv.mac_addr, addr->sa_data, ETH_ALEN);
129156 //_rtw_memcpy(pnetdev->dev_addr, addr->sa_data, ETH_ALEN);
129157 @@ -673,20 +901,103 @@ static struct net_device_stats *rtw_net_
129158 struct recv_priv *precvpriv = &(padapter->recvpriv);
129159
129160 padapter->stats.tx_packets = pxmitpriv->tx_pkts;//pxmitpriv->tx_pkts++;
129161 - padapter->stats.rx_packets = precvpriv->rx_pkts;//precvpriv->rx_pkts++;
129162 + padapter->stats.rx_packets = precvpriv->rx_pkts;//precvpriv->rx_pkts++;
129163 padapter->stats.tx_dropped = pxmitpriv->tx_drop;
129164 padapter->stats.rx_dropped = precvpriv->rx_drop;
129165 padapter->stats.tx_bytes = pxmitpriv->tx_bytes;
129166 padapter->stats.rx_bytes = precvpriv->rx_bytes;
129167 -
129168 - return &padapter->stats;
129169 +
129170 + return &padapter->stats;
129171 +}
129172 +
129173 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
129174 +/*
129175 + * AC to queue mapping
129176 + *
129177 + * AC_VO -> queue 0
129178 + * AC_VI -> queue 1
129179 + * AC_BE -> queue 2
129180 + * AC_BK -> queue 3
129181 + */
129182 +static const u16 rtw_1d_to_queue[8] = { 2, 3, 3, 2, 1, 1, 0, 0 };
129183 +
129184 +/* Given a data frame determine the 802.1p/1d tag to use. */
129185 +unsigned int rtw_classify8021d(struct sk_buff *skb)
129186 +{
129187 + unsigned int dscp;
129188 +
129189 + /* skb->priority values from 256->263 are magic values to
129190 + * directly indicate a specific 802.1d priority. This is used
129191 + * to allow 802.1d priority to be passed directly in from VLAN
129192 + * tags, etc.
129193 + */
129194 + if (skb->priority >= 256 && skb->priority <= 263)
129195 + return skb->priority - 256;
129196 +
129197 + switch (skb->protocol) {
129198 + case htons(ETH_P_IP):
129199 + dscp = ip_hdr(skb)->tos & 0xfc;
129200 + break;
129201 + default:
129202 + return 0;
129203 + }
129204 +
129205 + return dscp >> 5;
129206 +}
129207 +
129208 +static u16 rtw_select_queue(struct net_device *dev, struct sk_buff *skb)
129209 +{
129210 + _adapter *padapter = rtw_netdev_priv(dev);
129211 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
129212 +
129213 + skb->priority = rtw_classify8021d(skb);
129214 +
129215 + if(pmlmepriv->acm_mask != 0)
129216 + {
129217 + skb->priority = qos_acm(pmlmepriv->acm_mask, skb->priority);
129218 + }
129219 +
129220 + return rtw_1d_to_queue[skb->priority];
129221 +}
129222 +
129223 +u16 rtw_recv_select_queue(struct sk_buff *skb)
129224 +{
129225 + struct iphdr *piphdr;
129226 + unsigned int dscp;
129227 + u16 eth_type;
129228 + u32 priority;
129229 + u8 *pdata = skb->data;
129230 +
129231 + _rtw_memcpy(&eth_type, pdata+(ETH_ALEN<<1), 2);
129232 +
129233 + switch (eth_type) {
129234 + case htons(ETH_P_IP):
129235 +
129236 + piphdr = (struct iphdr *)(pdata+ETH_HLEN);
129237 +
129238 + dscp = piphdr->tos & 0xfc;
129239 +
129240 + priority = dscp >> 5;
129241 +
129242 + break;
129243 + default:
129244 + priority = 0;
129245 + }
129246 +
129247 + return rtw_1d_to_queue[priority];
129248 +
129249 }
129250
129251 +#endif
129252 +
129253 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
129254 static const struct net_device_ops rtw_netdev_ops = {
129255 .ndo_open = netdev_open,
129256 .ndo_stop = netdev_close,
129257 .ndo_start_xmit = rtw_xmit_entry,
129258 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
129259 + .ndo_select_queue = rtw_select_queue,
129260 +#endif
129261 .ndo_set_mac_address = rtw_net_set_mac_address,
129262 .ndo_get_stats = rtw_net_get_stats,
129263 .ndo_do_ioctl = rtw_ioctl,
129264 @@ -715,24 +1026,24 @@ int rtw_init_netdev_name(struct net_devi
129265 TargetNetdev = dev_get_by_name(devnet, "wlan0");
129266 #endif
129267 if(TargetNetdev) {
129268 - DBG_8192C("Force onboard module driver disappear !!!\n");
129269 + DBG_871X("Force onboard module driver disappear !!!\n");
129270 TargetAdapter = rtw_netdev_priv(TargetNetdev);
129271 TargetAdapter->DriverState = DRIVER_DISAPPEAR;
129272
129273 padapter->pid[0] = TargetAdapter->pid[0];
129274 padapter->pid[1] = TargetAdapter->pid[1];
129275 padapter->pid[2] = TargetAdapter->pid[2];
129276 -
129277 +
129278 dev_put(TargetNetdev);
129279 unregister_netdev(TargetNetdev);
129280 -#ifdef CONFIG_PROC_DEBUG
129281 +
129282 if(TargetAdapter->chip_type == padapter->chip_type)
129283 rtw_proc_remove_one(TargetNetdev);
129284 -#endif
129285 +
129286 padapter->DriverState = DRIVER_REPLACE_DONGLE;
129287 }
129288 }
129289 -#endif
129290 +#endif //CONFIG_EASY_REPLACEMENT
129291
129292 if(dev_alloc_name(pnetdev, ifname) < 0)
129293 {
129294 @@ -740,41 +1051,41 @@ int rtw_init_netdev_name(struct net_devi
129295 }
129296
129297 netif_carrier_off(pnetdev);
129298 - //netif_stop_queue(pnetdev);
129299 + //rtw_netif_stop_queue(pnetdev);
129300
129301 return 0;
129302 }
129303
129304 -struct net_device *rtw_init_netdev(_adapter *old_padapter)
129305 +struct net_device *rtw_init_netdev(_adapter *old_padapter)
129306 {
129307 _adapter *padapter;
129308 struct net_device *pnetdev;
129309
129310 RT_TRACE(_module_os_intfs_c_,_drv_info_,("+init_net_dev\n"));
129311
129312 - if(old_padapter != NULL)
129313 + if(old_padapter != NULL)
129314 pnetdev = rtw_alloc_etherdev_with_old_priv(sizeof(_adapter), (void *)old_padapter);
129315 - else
129316 + else
129317 pnetdev = rtw_alloc_etherdev(sizeof(_adapter));
129318 -
129319 +
129320 if (!pnetdev)
129321 return NULL;
129322
129323 padapter = rtw_netdev_priv(pnetdev);
129324 - padapter->pnetdev = pnetdev;
129325 + padapter->pnetdev = pnetdev;
129326
129327 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)
129328 SET_MODULE_OWNER(pnetdev);
129329 #endif
129330 -
129331 +
129332 //pnetdev->init = NULL;
129333 -
129334 +
129335 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
129336 - DBG_8192C("register rtw_netdev_ops to netdev_ops\n");
129337 + DBG_871X("register rtw_netdev_ops to netdev_ops\n");
129338 pnetdev->netdev_ops = &rtw_netdev_ops;
129339 #else
129340 pnetdev->open = netdev_open;
129341 - pnetdev->stop = netdev_close;
129342 + pnetdev->stop = netdev_close;
129343 pnetdev->hard_start_xmit = rtw_xmit_entry;
129344 pnetdev->set_mac_address = rtw_net_set_mac_address;
129345 pnetdev->get_stats = rtw_net_get_stats;
129346 @@ -784,11 +1095,12 @@ struct net_device *rtw_init_netdev(_adap
129347
129348 #ifdef CONFIG_TCP_CSUM_OFFLOAD_TX
129349 pnetdev->features |= NETIF_F_IP_CSUM;
129350 -#endif
129351 +#endif
129352 //pnetdev->tx_timeout = NULL;
129353 pnetdev->watchdog_timeo = HZ*3; /* 3 second timeout */
129354 -
129355 +#ifdef CONFIG_WIRELESS_EXT
129356 pnetdev->wireless_handlers = (struct iw_handler_def *)&rtw_handlers_def;
129357 +#endif
129358
129359 #ifdef WIRELESS_SPY
129360 //priv->wireless_data.spy_data = &priv->spy_data;
129361 @@ -797,36 +1109,72 @@ struct net_device *rtw_init_netdev(_adap
129362
129363 //step 2.
129364 loadparam(padapter, pnetdev);
129365 -
129366 +
129367 return pnetdev;
129368
129369 }
129370
129371 +void rtw_unregister_netdevs(struct dvobj_priv *dvobj)
129372 +{
129373 + int i;
129374 + _adapter *padapter = NULL;
129375 +
129376 + for (i=0;i<dvobj->iface_nums;i++) {
129377 + struct net_device *pnetdev = NULL;
129378 +
129379 + padapter = dvobj->padapters[i];
129380 +
129381 + if (padapter == NULL)
129382 + continue;
129383 +
129384 + pnetdev = padapter->pnetdev;
129385 +
129386 + if((padapter->DriverState != DRIVER_DISAPPEAR) && pnetdev) {
129387 + unregister_netdev(pnetdev); //will call netdev_close()
129388 + rtw_proc_remove_one(pnetdev);
129389 + }
129390 +
129391 + #ifdef CONFIG_IOCTL_CFG80211
129392 + rtw_wdev_unregister(padapter->rtw_wdev);
129393 + #endif
129394 + }
129395 +
129396 +}
129397 +
129398 u32 rtw_start_drv_threads(_adapter *padapter)
129399 {
129400
129401 u32 _status = _SUCCESS;
129402
129403 RT_TRACE(_module_os_intfs_c_,_drv_info_,("+rtw_start_drv_threads\n"));
129404 -
129405 -#ifdef CONFIG_SDIO_HCI
129406 - if(!start_kthread(&padapter->xmitThread, rtw_xmit_thread, padapter, "8192cu-xmit"))
129407 +#ifdef CONFIG_XMIT_THREAD_MODE
129408 + padapter->xmitThread = kthread_run(rtw_xmit_thread, padapter, "RTW_XMIT_THREAD");
129409 + if(IS_ERR(padapter->xmitThread))
129410 _status = _FAIL;
129411 #endif
129412
129413 #ifdef CONFIG_RECV_THREAD_MODE
129414 - if(!start_kthread(&padapter->recvThread, recv_thread, padapter, "8192cu-recv"))
129415 - _status = _FAIL;
129416 + padapter->recvThread = kthread_run(rtw_recv_thread, padapter, "RTW_RECV_THREAD");
129417 + if(IS_ERR(padapter->recvThread))
129418 + _status = _FAIL;
129419 #endif
129420
129421 - if(!start_kthread(&padapter->cmdThread, rtw_cmd_thread, padapter, "8192cu-cmd"))
129422 - _status = _FAIL;
129423 - else
129424 - _rtw_down_sema(&padapter->cmdpriv.terminate_cmdthread_sema); //wait for cmd_thread to run
129425 +#ifdef CONFIG_CONCURRENT_MODE
129426 + if(padapter->isprimary == _TRUE)
129427 +#endif //CONFIG_CONCURRENT_MODE
129428 + {
129429 + padapter->cmdThread = kthread_run(rtw_cmd_thread, padapter, "RTW_CMD_THREAD");
129430 + if(IS_ERR(padapter->cmdThread))
129431 + _status = _FAIL;
129432 + else
129433 + _rtw_down_sema(&padapter->cmdpriv.terminate_cmdthread_sema); //wait for cmd_thread to run
129434 + }
129435 +
129436
129437 #ifdef CONFIG_EVENT_THREAD_MODE
129438 - if(!start_kthread(&padapter->evtThread, event_thread, padapter, "8192cu-evt"))
129439 - _status = _FAIL;
129440 + padapter->evtThread = kthread_run(event_thread, padapter, "RTW_EVENT_THREAD");
129441 + if(IS_ERR(padapter->evtThread))
129442 + _status = _FAIL;
129443 #endif
129444
129445 return _status;
129446 @@ -835,13 +1183,13 @@ u32 rtw_start_drv_threads(_adapter *pada
129447
129448 void rtw_stop_drv_threads (_adapter *padapter)
129449 {
129450 - RT_TRACE(_module_os_intfs_c_,_drv_info_,("+rtw_stop_drv_threads\n"));
129451 + RT_TRACE(_module_os_intfs_c_,_drv_info_,("+rtw_stop_drv_threads\n"));
129452
129453 - //Below is to termindate rtw_cmd_thread & event_thread...
129454 - _rtw_up_sema(&padapter->cmdpriv.cmd_queue_sema);
129455 - //_rtw_up_sema(&padapter->cmdpriv.cmd_done_sema);
129456 - if(padapter->cmdThread){
129457 - _rtw_down_sema(&padapter->cmdpriv.terminate_cmdthread_sema);
129458 +#ifdef CONFIG_CONCURRENT_MODE
129459 + if(padapter->isprimary == _TRUE)
129460 +#endif //CONFIG_CONCURRENT_MODE
129461 + {
129462 + rtw_stop_cmd_thread(padapter);
129463 }
129464
129465 #ifdef CONFIG_EVENT_THREAD_MODE
129466 @@ -853,12 +1201,12 @@ void rtw_stop_drv_threads (_adapter *pad
129467
129468 #ifdef CONFIG_XMIT_THREAD_MODE
129469 // Below is to termindate tx_thread...
129470 - _rtw_up_sema(&padapter->xmitpriv.xmit_sema);
129471 + _rtw_up_sema(&padapter->xmitpriv.xmit_sema);
129472 _rtw_down_sema(&padapter->xmitpriv.terminate_xmitthread_sema);
129473 RT_TRACE(_module_os_intfs_c_,_drv_info_,("\n drv_halt: rtw_xmit_thread can be terminated ! \n"));
129474 #endif
129475 -
129476 -#ifdef CONFIG_RECV_THREAD_MODE
129477 +
129478 +#ifdef CONFIG_RECV_THREAD_MODE
129479 // Below is to termindate rx_thread...
129480 _rtw_up_sema(&padapter->recvpriv.recv_sema);
129481 _rtw_down_sema(&padapter->recvpriv.terminate_recvthread_sema);
129482 @@ -868,12 +1216,12 @@ void rtw_stop_drv_threads (_adapter *pad
129483
129484 }
129485
129486 +u8 rtw_init_default_value(_adapter *padapter);
129487 u8 rtw_init_default_value(_adapter *padapter)
129488 {
129489 u8 ret = _SUCCESS;
129490 struct registry_priv* pregistrypriv = &padapter->registrypriv;
129491 struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
129492 - struct recv_priv *precvpriv = &padapter->recvpriv;
129493 struct mlme_priv *pmlmepriv= &padapter->mlmepriv;
129494 struct security_priv *psecuritypriv = &padapter->securitypriv;
129495
129496 @@ -883,30 +1231,30 @@ u8 rtw_init_default_value(_adapter *pada
129497 pxmitpriv->vcs_type = pregistrypriv->vcs_type;
129498 //pxmitpriv->rts_thresh = pregistrypriv->rts_thresh;
129499 pxmitpriv->frag_len = pregistrypriv->frag_thresh;
129500 -
129501 -
129502 +
129503 +
129504
129505 //recv_priv
129506 -
129507 +
129508
129509 //mlme_priv
129510 pmlmepriv->scan_interval = SCAN_INTERVAL;// 30*2 sec = 60sec
129511 pmlmepriv->scan_mode = SCAN_ACTIVE;
129512 -
129513 +
129514 //qos_priv
129515 //pmlmepriv->qospriv.qos_option = pregistrypriv->wmm_enable;
129516 -
129517 +
129518 //ht_priv
129519 -#ifdef CONFIG_80211N_HT
129520 +#ifdef CONFIG_80211N_HT
129521 pmlmepriv->htpriv.ampdu_enable = _FALSE;//set to disabled
129522 -#endif
129523 +#endif
129524
129525 //security_priv
129526 //rtw_get_encrypt_decrypt_from_registrypriv(padapter);
129527 psecuritypriv->binstallGrpkey = _FAIL;
129528 psecuritypriv->sw_encrypt=pregistrypriv->software_encrypt;
129529 psecuritypriv->sw_decrypt=pregistrypriv->software_decrypt;
129530 -
129531 +
129532 psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_Open; //open system
129533 psecuritypriv->dot11PrivacyAlgrthm = _NO_PRIVACY_;
129534
129535 @@ -917,44 +1265,77 @@ u8 rtw_init_default_value(_adapter *pada
129536
129537 psecuritypriv->ndisauthtype = Ndis802_11AuthModeOpen;
129538 psecuritypriv->ndisencryptstatus = Ndis802_11WEPDisabled;
129539 -
129540 +
129541
129542 //pwrctrl_priv
129543
129544
129545 //registry_priv
129546 - rtw_init_registrypriv_dev_network(padapter);
129547 + rtw_init_registrypriv_dev_network(padapter);
129548 rtw_update_registrypriv_dev_network(padapter);
129549
129550
129551 //hal_priv
129552 - padapter->HalFunc.init_default_value(padapter);
129553 + rtw_hal_def_value_init(padapter);
129554
129555 //misc.
129556 padapter->bReadPortCancel = _FALSE;
129557 padapter->bWritePortCancel = _FALSE;
129558 padapter->bRxRSSIDisplay = 0;
129559 -
129560 + padapter->bForceWriteInitGain = 1;
129561 + padapter->bNotifyChannelChange = 0;
129562 +#ifdef CONFIG_P2P
129563 + padapter->bShowGetP2PState = 1;
129564 +#endif
129565 return ret;
129566 }
129567
129568 -u8 rtw_reset_drv_sw(_adapter *padapter)
129569 +struct dvobj_priv *devobj_init(void)
129570 {
129571 - u8 ret8=_SUCCESS;
129572 - struct mlme_priv *pmlmepriv= &padapter->mlmepriv;
129573 + struct dvobj_priv *pdvobj = NULL;
129574 +
129575 + if ((pdvobj = (struct dvobj_priv*)rtw_zmalloc(sizeof(*pdvobj))) == NULL)
129576 + return NULL;
129577 +
129578 + _rtw_mutex_init(&pdvobj->hw_init_mutex);
129579 + _rtw_mutex_init(&pdvobj->h2c_fwcmd_mutex);
129580 + _rtw_mutex_init(&pdvobj->setch_mutex);
129581 + _rtw_mutex_init(&pdvobj->setbw_mutex);
129582 +
129583 + pdvobj->processing_dev_remove = _FALSE;
129584 +
129585 + return pdvobj;
129586 +}
129587 +
129588 +void devobj_deinit(struct dvobj_priv *pdvobj)
129589 +{
129590 + if(!pdvobj)
129591 + return;
129592 +
129593 + _rtw_mutex_free(&pdvobj->hw_init_mutex);
129594 + _rtw_mutex_free(&pdvobj->h2c_fwcmd_mutex);
129595 + _rtw_mutex_free(&pdvobj->setch_mutex);
129596 + _rtw_mutex_free(&pdvobj->setbw_mutex);
129597 +
129598 + rtw_mfree((u8*)pdvobj, sizeof(*pdvobj));
129599 +}
129600 +
129601 +u8 rtw_reset_drv_sw(_adapter *padapter)
129602 +{
129603 + u8 ret8=_SUCCESS;
129604 + struct mlme_priv *pmlmepriv= &padapter->mlmepriv;
129605 struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
129606
129607 //hal_priv
129608 - padapter->HalFunc.init_default_value(padapter);
129609 + rtw_hal_def_value_init(padapter);
129610 padapter->bReadPortCancel = _FALSE;
129611 padapter->bWritePortCancel = _FALSE;
129612 padapter->bRxRSSIDisplay = 0;
129613 pmlmepriv->scan_interval = SCAN_INTERVAL;// 30*2 sec = 60sec
129614 -
129615 - pwrctrlpriv->bips_processing = _FALSE;
129616 +
129617 + pwrctrlpriv->bips_processing = _FALSE;
129618 pwrctrlpriv->rf_pwrstate = rf_on;
129619 - pwrctrlpriv->bInSuspend = _FALSE;
129620 -
129621 +
129622 padapter->xmitpriv.tx_pkts = 0;
129623 padapter->recvpriv.rx_pkts = 0;
129624
129625 @@ -962,15 +1343,14 @@ u8 rtw_reset_drv_sw(_adapter *padapter)
129626
129627 _clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY |_FW_UNDER_LINKING);
129628
129629 -#ifdef CONFIG_AUTOSUSPEND
129630 +#ifdef CONFIG_AUTOSUSPEND
129631 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,22) && LINUX_VERSION_CODE<=KERNEL_VERSION(2,6,34))
129632 - padapter->dvobjpriv.pusbdev->autosuspend_disabled = 1;//autosuspend disabled by the user
129633 + adapter_to_dvobj(padapter)->pusbdev->autosuspend_disabled = 1;//autosuspend disabled by the user
129634 #endif
129635 #endif
129636
129637 #ifdef DBG_CONFIG_ERROR_DETECT
129638 - if(padapter->HalFunc.sreset_reset_value)
129639 - padapter->HalFunc.sreset_reset_value(padapter);
129640 + rtw_hal_sreset_reset_value(padapter);
129641 #endif
129642 pwrctrlpriv->pwr_state_check_cnts = 0;
129643
129644 @@ -1000,17 +1380,17 @@ _func_enter_;
129645 ret8=_FAIL;
129646 goto exit;
129647 }
129648 -
129649 +
129650 padapter->cmdpriv.padapter=padapter;
129651 -
129652 +
129653 if ((rtw_init_evt_priv(&padapter->evtpriv)) == _FAIL)
129654 {
129655 RT_TRACE(_module_os_intfs_c_,_drv_err_,("\n Can't init evt_priv\n"));
129656 ret8=_FAIL;
129657 goto exit;
129658 }
129659 -
129660 -
129661 +
129662 +
129663 if (rtw_init_mlme_priv(padapter) == _FAIL)
129664 {
129665 RT_TRACE(_module_os_intfs_c_,_drv_err_,("\n Can't init mlme_priv\n"));
129666 @@ -1018,11 +1398,18 @@ _func_enter_;
129667 goto exit;
129668 }
129669
129670 -#ifdef CONFIG_IOCTL_CFG80211
129671 #ifdef CONFIG_P2P
129672 + rtw_init_wifidirect_timers(padapter);
129673 + init_wifidirect_info(padapter, P2P_ROLE_DISABLE);
129674 + reset_global_wifidirect_info(padapter);
129675 + #ifdef CONFIG_IOCTL_CFG80211
129676 rtw_init_cfg80211_wifidirect_info(padapter);
129677 -#endif //CONFIG_P2P
129678 -#endif //CONFIG_IOCTL_CFG80211
129679 + #endif
129680 +#ifdef CONFIG_WFD
129681 + if(rtw_init_wifi_display_info(padapter) == _FAIL)
129682 + RT_TRACE(_module_os_intfs_c_,_drv_err_,("\n Can't init init_wifi_display_info\n"));
129683 +#endif
129684 +#endif /* CONFIG_P2P */
129685
129686 if(init_mlme_ext_priv(padapter) == _FAIL)
129687 {
129688 @@ -1046,18 +1433,20 @@ _func_enter_;
129689 ret8=_FAIL;
129690 goto exit;
129691 }
129692 -
129693 +
129694 if(_rtw_init_recv_priv(&padapter->recvpriv, padapter) == _FAIL)
129695 {
129696 DBG_871X("Can't _rtw_init_recv_priv\n");
129697 ret8=_FAIL;
129698 goto exit;
129699 }
129700 -
129701 - // We don't need to memset padapter->XXX to zero, because adapter is allocated by rtw_zvmalloc().
129702 - //_rtw_memset((unsigned char *)&padapter->securitypriv, 0, sizeof (struct security_priv));
129703 + // add for CONFIG_IEEE80211W, none 11w also can use
129704 + _rtw_spinlock_init(&padapter->security_key_mutex);
129705
129706 - //_init_timer(&(padapter->securitypriv.tkip_timer), padapter->pnetdev, rtw_use_tkipkey_handler, padapter);
129707 + // We don't need to memset padapter->XXX to zero, because adapter is allocated by rtw_zvmalloc().
129708 + //_rtw_memset((unsigned char *)&padapter->securitypriv, 0, sizeof (struct security_priv));
129709 +
129710 + //_init_timer(&(padapter->securitypriv.tkip_timer), padapter->pifp, rtw_use_tkipkey_handler, padapter);
129711
129712 if(_rtw_init_sta_priv(&padapter->stapriv) == _FAIL)
129713 {
129714 @@ -1065,43 +1454,51 @@ _func_enter_;
129715 ret8=_FAIL;
129716 goto exit;
129717 }
129718 -
129719 - padapter->stapriv.padapter = padapter;
129720
129721 + padapter->stapriv.padapter = padapter;
129722 + padapter->setband = GHZ24_50;
129723 rtw_init_bcmc_stainfo(padapter);
129724
129725 - rtw_init_pwrctrl_priv(padapter);
129726 + rtw_init_pwrctrl_priv(padapter);
129727
129728 //_rtw_memset((u8 *)&padapter->qospriv, 0, sizeof (struct qos_priv));//move to mlme_priv
129729 -
129730 +
129731 #ifdef CONFIG_MP_INCLUDED
129732 if (init_mp_priv(padapter) == _FAIL) {
129733 - ERR_8192C("%s: initialize MP private data Fail!\n", __func__);
129734 + DBG_871X("%s: initialize MP private data Fail!\n", __func__);
129735 }
129736 #endif
129737
129738 ret8 = rtw_init_default_value(padapter);
129739
129740 - rtw_dm_init(padapter);
129741 - rtw_sw_led_init(padapter);
129742 + rtw_hal_dm_init(padapter);
129743 + rtw_hal_sw_led_init(padapter);
129744
129745 #ifdef DBG_CONFIG_ERROR_DETECT
129746 - rtw_sreset_init(padapter);
129747 + rtw_hal_sreset_init(padapter);
129748 #endif
129749
129750 +#ifdef CONFIG_INTEL_WIDI
129751 + if(rtw_init_intel_widi(padapter) == _FAIL)
129752 + {
129753 + DBG_871X("Can't rtw_init_intel_widi\n");
129754 + ret8=_FAIL;
129755 + goto exit;
129756 + }
129757 +#endif //CONFIG_INTEL_WIDI
129758
129759 #ifdef CONFIG_BR_EXT
129760 _rtw_spinlock_init(&padapter->br_ext_lock);
129761 #endif // CONFIG_BR_EXT
129762
129763 exit:
129764 -
129765 +
129766 RT_TRACE(_module_os_intfs_c_,_drv_info_,("-rtw_init_drv_sw\n"));
129767
129768 - _func_exit_;
129769 -
129770 + _func_exit_;
129771 +
129772 return ret8;
129773 -
129774 +
129775 }
129776
129777 void rtw_cancel_all_timer(_adapter *padapter)
129778 @@ -1115,13 +1512,13 @@ void rtw_cancel_all_timer(_adapter *pada
129779 //RT_TRACE(_module_os_intfs_c_,_drv_info_,("rtw_cancel_all_timer:cancel tkip_timer! \n"));
129780
129781 _cancel_timer_ex(&padapter->mlmepriv.scan_to_timer);
129782 - RT_TRACE(_module_os_intfs_c_,_drv_info_,("rtw_cancel_all_timer:cancel scan_to_timer! \n"));
129783 -
129784 + RT_TRACE(_module_os_intfs_c_,_drv_info_,("rtw_cancel_all_timer:cancel scan_to_timer! \n"));
129785 +
129786 _cancel_timer_ex(&padapter->mlmepriv.dynamic_chk_timer);
129787 RT_TRACE(_module_os_intfs_c_,_drv_info_,("rtw_cancel_all_timer:cancel dynamic_chk_timer! \n"));
129788
129789 // cancel sw led timer
129790 - rtw_sw_led_deinit(padapter);
129791 + rtw_hal_sw_led_deinit(padapter);
129792 RT_TRACE(_module_os_intfs_c_,_drv_info_,("rtw_cancel_all_timer:cancel DeInitSwLeds! \n"));
129793
129794 _cancel_timer_ex(&padapter->pwrctrlpriv.pwr_state_check_timer);
129795 @@ -1134,6 +1531,7 @@ void rtw_cancel_all_timer(_adapter *pada
129796
129797 #ifdef CONFIG_SET_SCAN_DENY_TIMER
129798 _cancel_timer_ex(&padapter->mlmepriv.set_scan_deny_timer);
129799 + rtw_clear_scan_deny(padapter);
129800 RT_TRACE(_module_os_intfs_c_,_drv_info_,("rtw_cancel_all_timer:cancel set_scan_deny_timer! \n"));
129801 #endif
129802
129803 @@ -1142,15 +1540,16 @@ void rtw_cancel_all_timer(_adapter *pada
129804 #endif
129805
129806 // cancel dm timer
129807 - padapter->HalFunc.dm_deinit(padapter);
129808 + rtw_hal_dm_deinit(padapter);
129809
129810 +#ifdef CONFIG_PLATFORM_FS_MX61
129811 + msleep(50);
129812 +#endif
129813 }
129814
129815 u8 rtw_free_drv_sw(_adapter *padapter)
129816 {
129817 - struct net_device *pnetdev = (struct net_device*)padapter->pnetdev;
129818 -
129819 - RT_TRACE(_module_os_intfs_c_,_drv_info_,("==>rtw_free_drv_sw"));
129820 + RT_TRACE(_module_os_intfs_c_,_drv_info_,("==>rtw_free_drv_sw"));
129821
129822
129823 //we can call rtw_p2p_enable here, but:
129824 @@ -1164,36 +1563,43 @@ u8 rtw_free_drv_sw(_adapter *padapter)
129825 _cancel_timer_ex( &pwdinfo->find_phase_timer );
129826 _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
129827 _cancel_timer_ex( &pwdinfo->pre_tx_scan_timer);
129828 +#ifdef CONFIG_CONCURRENT_MODE
129829 + _cancel_timer_ex( &pwdinfo->ap_p2p_switch_timer );
129830 +#endif // CONFIG_CONCURRENT_MODE
129831 rtw_p2p_set_state(pwdinfo, P2P_STATE_NONE);
129832 }
129833 }
129834 #endif
129835 + // add for CONFIG_IEEE80211W, none 11w also can use
129836 + _rtw_spinlock_free(&padapter->security_key_mutex);
129837
129838 -
129839 #ifdef CONFIG_BR_EXT
129840 _rtw_spinlock_free(&padapter->br_ext_lock);
129841 #endif // CONFIG_BR_EXT
129842
129843 +#ifdef CONFIG_INTEL_WIDI
129844 + rtw_free_intel_widi(padapter);
129845 +#endif //CONFIG_INTEL_WIDI
129846
129847 free_mlme_ext_priv(&padapter->mlmeextpriv);
129848 -
129849 +
129850 #ifdef CONFIG_TDLS
129851 //rtw_free_tdls_info(&padapter->tdlsinfo);
129852 #endif //CONFIG_TDLS
129853 -
129854 +
129855 rtw_free_cmd_priv(&padapter->cmdpriv);
129856 -
129857 +
129858 rtw_free_evt_priv(&padapter->evtpriv);
129859
129860 rtw_free_mlme_priv(&padapter->mlmepriv);
129861 -
129862 +
129863 //free_io_queue(padapter);
129864 -
129865 +
129866 _rtw_free_xmit_priv(&padapter->xmitpriv);
129867 -
129868 +
129869 _rtw_free_sta_priv(&padapter->stapriv); //will free bcmc_stainfo here
129870 -
129871 - _rtw_free_recv_priv(&padapter->recvpriv);
129872 +
129873 + _rtw_free_recv_priv(&padapter->recvpriv);
129874
129875 rtw_free_pwrctrl_priv(padapter);
129876
129877 @@ -1203,7 +1609,7 @@ u8 rtw_free_drv_sw(_adapter *padapter)
129878 free_drvext(&padapter->drvextpriv);
129879 #endif
129880
129881 - padapter->HalFunc.free_hal_data(padapter);
129882 + rtw_hal_free_data(padapter);
129883
129884 RT_TRACE(_module_os_intfs_c_,_drv_info_,("<==rtw_free_drv_sw\n"));
129885
129886 @@ -1211,267 +1617,1028 @@ u8 rtw_free_drv_sw(_adapter *padapter)
129887 if(padapter->rereg_nd_name_priv.old_pnetdev) {
129888 free_netdev(padapter->rereg_nd_name_priv.old_pnetdev);
129889 padapter->rereg_nd_name_priv.old_pnetdev = NULL;
129890 - }
129891 + }
129892
129893 - if(pnetdev)
129894 + // clear pbuddy_adapter to avoid access wrong pointer.
129895 + if(padapter->pbuddy_adapter != NULL)
129896 {
129897 - rtw_free_netdev(pnetdev);
129898 + padapter->pbuddy_adapter->pbuddy_adapter = NULL;
129899 }
129900
129901 RT_TRACE(_module_os_intfs_c_,_drv_info_,("-rtw_free_drv_sw\n"));
129902
129903 return _SUCCESS;
129904 -
129905 +
129906 }
129907
129908 -int _netdev_open(struct net_device *pnetdev)
129909 +#ifdef CONFIG_CONCURRENT_MODE
129910 +
129911 +#ifdef CONFIG_USB_HCI
129912 + #include <usb_hal.h>
129913 +#endif
129914 +
129915 +#ifdef CONFIG_MULTI_VIR_IFACES
129916 +int _netdev_vir_if_open(struct net_device *pnetdev)
129917 {
129918 - uint status;
129919 _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
129920 - struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
129921 + _adapter *primary_padapter = GET_PRIMARY_ADAPTER(padapter);
129922
129923 - RT_TRACE(_module_os_intfs_c_,_drv_info_,("+871x_drv - dev_open\n"));
129924 - DBG_8192C("+871x_drv - drv_open, bup=%d\n", padapter->bup);
129925 + DBG_871X(FUNC_NDEV_FMT" enter\n", FUNC_NDEV_ARG(pnetdev));
129926
129927 - if(pwrctrlpriv->ps_flag == _TRUE){
129928 - padapter->net_closed = _FALSE;
129929 - goto netdev_open_normal_process;
129930 - }
129931 -
129932 - if(padapter->bup == _FALSE)
129933 - {
129934 - padapter->bDriverStopped = _FALSE;
129935 - padapter->bSurpriseRemoved = _FALSE;
129936 - padapter->bCardDisableWOHSM = _FALSE;
129937 -
129938 - status = rtw_hal_init(padapter);
129939 - if (status ==_FAIL)
129940 - {
129941 - RT_TRACE(_module_os_intfs_c_,_drv_err_,("rtl871x_hal_init(): Can't init h/w!\n"));
129942 - goto netdev_open_error;
129943 - }
129944 -
129945 - DBG_8192C("MAC Address = "MAC_FMT"\n", MAC_ARG(pnetdev->dev_addr));
129946 + if(!primary_padapter)
129947 + goto _netdev_virtual_iface_open_error;
129948
129949 -
129950 - status=rtw_start_drv_threads(padapter);
129951 - if(status ==_FAIL)
129952 - {
129953 - RT_TRACE(_module_os_intfs_c_,_drv_err_,("Initialize driver software resource Failed!\n"));
129954 - goto netdev_open_error;
129955 - }
129956 + if(primary_padapter->bup == _FALSE || primary_padapter->hw_init_completed == _FALSE)
129957 + {
129958 + _netdev_open(primary_padapter->pnetdev);
129959 + }
129960
129961 + if(padapter->bup == _FALSE && primary_padapter->bup == _TRUE &&
129962 + primary_padapter->hw_init_completed == _TRUE)
129963 + {
129964 + int i;
129965
129966 - if (init_hw_mlme_ext(padapter) == _FAIL)
129967 - {
129968 - RT_TRACE(_module_os_intfs_c_,_drv_err_,("can't init mlme_ext_priv\n"));
129969 - goto netdev_open_error;
129970 - }
129971 + padapter->bDriverStopped = _FALSE;
129972 + padapter->bSurpriseRemoved = _FALSE;
129973 + padapter->bCardDisableWOHSM = _FALSE;
129974
129975 + _rtw_memcpy(padapter->HalData, primary_padapter->HalData, padapter->hal_data_sz);
129976
129977 -#ifdef CONFIG_DRVEXT_MODULE
129978 - init_drvext(padapter);
129979 -#endif
129980 + padapter->bFWReady = primary_padapter->bFWReady;
129981
129982 - if(padapter->intf_start)
129983 + if(rtw_start_drv_threads(padapter) == _FAIL)
129984 {
129985 - padapter->intf_start(padapter);
129986 + goto _netdev_virtual_iface_open_error;
129987 }
129988
129989 -#ifdef CONFIG_PROC_DEBUG
129990 -#ifndef RTK_DMP_PLATFORM
129991 + padapter->dir_dev = NULL;
129992 rtw_proc_init_one(pnetdev);
129993 -#endif
129994 -#endif
129995
129996 #ifdef CONFIG_IOCTL_CFG80211
129997 rtw_cfg80211_init_wiphy(padapter);
129998 #endif
129999
130000 - rtw_led_control(padapter, LED_CTL_NO_LINK);
130001 -
130002 padapter->bup = _TRUE;
130003 + padapter->hw_init_completed = _TRUE;
130004 +
130005 + rtw_start_mbssid_cam(padapter);//start mbssid_cam after bup = _TRUE & hw_init_completed = _TRUE
130006 +
130007 }
130008 +
130009 padapter->net_closed = _FALSE;
130010
130011 _set_timer(&padapter->mlmepriv.dynamic_chk_timer, 2000);
130012
130013 - if(( pwrctrlpriv->power_mgnt != PS_MODE_ACTIVE ) ||(padapter->pwrctrlpriv.bHWPwrPindetect))
130014 - {
130015 - padapter->pwrctrlpriv.bips_processing = _FALSE;
130016 - rtw_set_pwr_state_check_timer(&padapter->pwrctrlpriv);
130017 - }
130018 -
130019 - //netif_carrier_on(pnetdev);//call this func when rtw_joinbss_event_callback return success
130020 - if(!netif_queue_stopped(pnetdev))
130021 - netif_start_queue(pnetdev);
130022 + if(!rtw_netif_queue_stopped(pnetdev))
130023 + rtw_netif_start_queue(pnetdev);
130024 else
130025 - netif_wake_queue(pnetdev);
130026 -
130027 -#ifdef CONFIG_BR_EXT
130028 -
130029 -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 35))
130030 - rcu_read_lock();
130031 -#endif // (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 35))
130032 -
130033 - //if(check_fwstate(pmlmepriv, WIFI_STATION_STATE|WIFI_ADHOC_STATE) == _TRUE)
130034 - {
130035 - //struct net_bridge *br = pnetdev->br_port->br;//->dev->dev_addr;
130036 -#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 35))
130037 - if (pnetdev->br_port)
130038 -#else // (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 35))
130039 - if (rcu_dereference(padapter->pnetdev->rx_handler_data))
130040 -#endif // (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 35))
130041 - {
130042 - struct net_device *br_netdev;
130043 -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
130044 - br_netdev = dev_get_by_name(CONFIG_BR_EXT_BRNAME);
130045 -#else // (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
130046 - struct net *devnet = NULL;
130047 -
130048 -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26))
130049 - devnet = pnetdev->nd_net;
130050 -#else // (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26))
130051 - devnet = dev_net(pnetdev);
130052 -#endif // (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26))
130053 -
130054 - br_netdev = dev_get_by_name(devnet, CONFIG_BR_EXT_BRNAME);
130055 -#endif // (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
130056 + rtw_netif_wake_queue(pnetdev);
130057
130058 - if (br_netdev) {
130059 - memcpy(padapter->br_mac, br_netdev->dev_addr, ETH_ALEN);
130060 - dev_put(br_netdev);
130061 - } else
130062 - printk("%s()-%d: dev_get_by_name(%s) failed!", __FUNCTION__, __LINE__, CONFIG_BR_EXT_BRNAME);
130063 - }
130064 -
130065 - padapter->ethBrExtInfo.addPPPoETag = 1;
130066 - }
130067
130068 -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 35))
130069 - rcu_read_unlock();
130070 -#endif // (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 35))
130071 + DBG_871X(FUNC_NDEV_FMT" exit\n", FUNC_NDEV_ARG(pnetdev));
130072 + return 0;
130073
130074 -#endif // CONFIG_BR_EXT
130075 +_netdev_virtual_iface_open_error:
130076
130077 -netdev_open_normal_process:
130078 + padapter->bup = _FALSE;
130079
130080 - RT_TRACE(_module_os_intfs_c_,_drv_info_,("-871x_drv - dev_open\n"));
130081 - DBG_8192C("-871x_drv - drv_open, bup=%d\n", padapter->bup);
130082 -
130083 - return 0;
130084 -
130085 -netdev_open_error:
130086 + netif_carrier_off(pnetdev);
130087 + rtw_netif_stop_queue(pnetdev);
130088
130089 - padapter->bup = _FALSE;
130090 -
130091 - netif_carrier_off(pnetdev);
130092 - netif_stop_queue(pnetdev);
130093 -
130094 - RT_TRACE(_module_os_intfs_c_,_drv_err_,("-871x_drv - dev_open, fail!\n"));
130095 - DBG_8192C("-871x_drv - drv_open fail, bup=%d\n", padapter->bup);
130096 -
130097 return (-1);
130098 -
130099 +
130100 }
130101
130102 -int netdev_open(struct net_device *pnetdev)
130103 +int netdev_vir_if_open(struct net_device *pnetdev)
130104 {
130105 int ret;
130106 _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
130107 - struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
130108 -
130109 - _enter_pwrlock(&pwrctrlpriv->lock);
130110 - ret = _netdev_open(pnetdev);
130111 - _exit_pwrlock(&pwrctrlpriv->lock);
130112
130113 + _enter_critical_mutex(&(adapter_to_dvobj(padapter)->hw_init_mutex), NULL);
130114 + ret = _netdev_vir_if_open(pnetdev);
130115 + _exit_critical_mutex(&(adapter_to_dvobj(padapter)->hw_init_mutex), NULL);
130116 return ret;
130117 }
130118
130119 -#ifdef CONFIG_IPS
130120 -int ips_netdrv_open(_adapter *padapter)
130121 +static int netdev_vir_if_close(struct net_device *pnetdev)
130122 {
130123 - int status = _SUCCESS;
130124 - padapter->net_closed = _FALSE;
130125 - DBG_8192C("===> %s.........\n",__FUNCTION__);
130126 -
130127 + _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
130128
130129 - padapter->bDriverStopped = _FALSE;
130130 - padapter->bSurpriseRemoved = _FALSE;
130131 - padapter->bCardDisableWOHSM = _FALSE;
130132 - padapter->bup = _TRUE;
130133 + padapter->net_closed = _TRUE;
130134
130135 - status = rtw_hal_init(padapter);
130136 - if (status ==_FAIL)
130137 + if(pnetdev)
130138 {
130139 - RT_TRACE(_module_os_intfs_c_,_drv_err_,("ips_netdrv_open(): Can't init h/w!\n"));
130140 - goto netdev_open_error;
130141 + if (!rtw_netif_queue_stopped(pnetdev))
130142 + rtw_netif_stop_queue(pnetdev);
130143 }
130144
130145 - if(padapter->intf_start)
130146 - {
130147 - padapter->intf_start(padapter);
130148 - }
130149 +#ifdef CONFIG_IOCTL_CFG80211
130150 + rtw_scan_abort(padapter);
130151 + wdev_to_priv(padapter->rtw_wdev)->bandroid_scan = _FALSE;
130152 +#endif
130153
130154 - rtw_set_pwr_state_check_timer(&padapter->pwrctrlpriv);
130155 - _set_timer(&padapter->mlmepriv.dynamic_chk_timer,5000);
130156 + return 0;
130157 +}
130158
130159 - return _SUCCESS;
130160 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
130161 +static const struct net_device_ops rtw_netdev_vir_if_ops = {
130162 + .ndo_open = netdev_vir_if_open,
130163 + .ndo_stop = netdev_vir_if_close,
130164 + .ndo_start_xmit = rtw_xmit_entry,
130165 + .ndo_set_mac_address = rtw_net_set_mac_address,
130166 + .ndo_get_stats = rtw_net_get_stats,
130167 + .ndo_do_ioctl = rtw_ioctl,
130168 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
130169 + .ndo_select_queue = rtw_select_queue,
130170 +#endif
130171 +};
130172 +#endif
130173
130174 -netdev_open_error:
130175 - padapter->bup = _FALSE;
130176 - DBG_8192C("-ips_netdrv_open - drv_open failure, bup=%d\n", padapter->bup);
130177 +_adapter *rtw_drv_add_vir_if(_adapter *primary_padapter, void (*set_intf_ops)(struct _io_ops *pops))
130178 +{
130179
130180 - return _FAIL;
130181 -}
130182 + int res = _FAIL;
130183 + struct net_device *pnetdev=NULL;
130184 + _adapter *padapter = NULL;
130185 + struct dvobj_priv *pdvobjpriv;
130186 + u8 mac[ETH_ALEN];
130187
130188 +/*
130189 + if((primary_padapter->bup == _FALSE) ||
130190 + (rtw_buddy_adapter_up(primary_padapter) == _FALSE))
130191 + {
130192 + goto error_rtw_drv_add_iface;
130193 + }
130194
130195 -int rtw_ips_pwr_up(_adapter *padapter)
130196 -{
130197 - int result;
130198 - u32 start_time = rtw_get_current_time();
130199 - DBG_8192C("===> rtw_ips_pwr_up..............\n");
130200 - rtw_reset_drv_sw(padapter);
130201 - result = ips_netdrv_open(padapter);
130202 +*/
130203 + /****** init netdev ******/
130204 + pnetdev = rtw_init_netdev(NULL);
130205 + if (!pnetdev)
130206 + goto error_rtw_drv_add_iface;
130207
130208 - rtw_led_control(padapter, LED_CTL_NO_LINK);
130209 -
130210 - DBG_8192C("<=== rtw_ips_pwr_up.............. in %dms\n", rtw_get_passing_time_ms(start_time));
130211 - return result;
130212 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
130213 + DBG_871X("register rtw_netdev_virtual_iface_ops to netdev_ops\n");
130214 + pnetdev->netdev_ops = &rtw_netdev_vir_if_ops;
130215 +#else
130216 + pnetdev->open = netdev_vir_if_open;
130217 + pnetdev->stop = netdev_vir_if_close;
130218 +#endif
130219
130220 -}
130221 +#ifdef CONFIG_NO_WIRELESS_HANDLERS
130222 + pnetdev->wireless_handlers = NULL;
130223 +#endif
130224
130225 -void rtw_ips_pwr_down(_adapter *padapter)
130226 -{
130227 - u32 start_time = rtw_get_current_time();
130228 - DBG_8192C("===> rtw_ips_pwr_down...................\n");
130229 + /****** init adapter ******/
130230 + padapter = rtw_netdev_priv(pnetdev);
130231 + _rtw_memcpy(padapter, primary_padapter, sizeof(_adapter));
130232
130233 - padapter->bCardDisableWOHSM = _TRUE;
130234 + //
130235 + padapter->bup = _FALSE;
130236 padapter->net_closed = _TRUE;
130237 + padapter->hw_init_completed = _FALSE;
130238
130239 - rtw_led_control(padapter, LED_CTL_POWER_OFF);
130240 -
130241 - rtw_ips_dev_unload(padapter);
130242 - padapter->bCardDisableWOHSM = _FALSE;
130243 - DBG_8192C("<=== rtw_ips_pwr_down..................... in %dms\n", rtw_get_passing_time_ms(start_time));
130244 -}
130245 +
130246 + //set adapter_type/iface type
130247 + padapter->isprimary = _FALSE;
130248 + padapter->adapter_type = MAX_ADAPTER;
130249 + padapter->pbuddy_adapter = primary_padapter;
130250 +#if 0
130251 +#ifndef CONFIG_HWPORT_SWAP //Port0 -> Pri , Port1 -> Sec
130252 + padapter->iface_type = IFACE_PORT1;
130253 +#else
130254 + padapter->iface_type = IFACE_PORT0;
130255 +#endif //CONFIG_HWPORT_SWAP
130256 +#else
130257 + //extended virtual interfaces always are set to port0
130258 + padapter->iface_type = IFACE_PORT0;
130259 #endif
130260 -void rtw_ips_dev_unload(_adapter *padapter)
130261 -{
130262 - struct net_device *pnetdev= (struct net_device*)padapter->pnetdev;
130263 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
130264 - DBG_8192C("====> %s...\n",__FUNCTION__);
130265 + //
130266 + padapter->pnetdev = pnetdev;
130267
130268 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_FIFO_CLEARN_UP, 0);
130269 + /****** setup dvobj ******/
130270 + pdvobjpriv = adapter_to_dvobj(padapter);
130271 + padapter->iface_id = pdvobjpriv->iface_nums;
130272 + pdvobjpriv->padapters[pdvobjpriv->iface_nums++] = padapter;
130273
130274 - if(padapter->intf_stop)
130275 - {
130276 - padapter->intf_stop(padapter);
130277 - }
130278 + SET_NETDEV_DEV(pnetdev, dvobj_to_dev(pdvobjpriv));
130279 +#ifdef CONFIG_IOCTL_CFG80211
130280 + rtw_wdev_alloc(padapter, dvobj_to_dev(pdvobjpriv));
130281 +#endif //CONFIG_IOCTL_CFG80211
130282
130283 - //s5.
130284 - if(padapter->bSurpriseRemoved == _FALSE)
130285 - {
130286 + //set interface_type/chip_type/HardwareType
130287 + padapter->interface_type = primary_padapter->interface_type;
130288 + padapter->chip_type = primary_padapter->chip_type;
130289 + padapter->HardwareType = primary_padapter->HardwareType;
130290 +
130291 + //set hal data & hal ops
130292 +#if defined(CONFIG_RTL8192C)
130293 + #if defined(CONFIG_PCI_HCI)
130294 + rtl8192ce_set_hal_ops(padapter);
130295 + #elif defined(CONFIG_USB_HCI)
130296 + rtl8192cu_set_hal_ops(padapter);
130297 + #endif
130298 +#elif defined(CONFIG_RTL8192D)
130299 + #if defined(CONFIG_PCI_HCI)
130300 + rtl8192de_set_hal_ops(padapter);
130301 + #elif defined(CONFIG_USB_HCI)
130302 + rtl8192du_set_hal_ops(padapter);
130303 + #endif
130304 +#endif
130305 +
130306 + padapter->HalFunc.inirp_init = NULL;
130307 + padapter->HalFunc.inirp_deinit = NULL;
130308 + padapter->intf_start = NULL;
130309 + padapter->intf_stop = NULL;
130310 +
130311 + //step init_io_priv
130312 + if ((rtw_init_io_priv(padapter, set_intf_ops)) == _FAIL) {
130313 + RT_TRACE(_module_hci_intfs_c_,_drv_err_,(" \n Can't init io_reqs\n"));
130314 + }
130315 +
130316 + //step read_chip_version
130317 + rtw_hal_read_chip_version(padapter);
130318 +
130319 + //step usb endpoint mapping
130320 + rtw_hal_chip_configure(padapter);
130321 +
130322 +
130323 + //init drv data
130324 + if(rtw_init_drv_sw(padapter)!= _SUCCESS)
130325 + goto error_rtw_drv_add_iface;
130326 +
130327 +
130328 + //get mac address from primary_padapter
130329 + _rtw_memcpy(mac, primary_padapter->eeprompriv.mac_addr, ETH_ALEN);
130330 +
130331 + if (((mac[0]==0xff) &&(mac[1]==0xff) && (mac[2]==0xff) &&
130332 + (mac[3]==0xff) && (mac[4]==0xff) &&(mac[5]==0xff)) ||
130333 + ((mac[0]==0x0) && (mac[1]==0x0) && (mac[2]==0x0) &&
130334 + (mac[3]==0x0) && (mac[4]==0x0) &&(mac[5]==0x0)))
130335 + {
130336 + mac[0] = 0x00;
130337 + mac[1] = 0xe0;
130338 + mac[2] = 0x4c;
130339 + mac[3] = 0x87;
130340 + mac[4] = 0x11;
130341 + mac[5] = 0x22;
130342 + }
130343 + else
130344 + {
130345 + //If the BIT1 is 0, the address is universally administered.
130346 + //If it is 1, the address is locally administered
130347 +#if 1 //needs enable MBSSID CAM
130348 + mac[0] |= BIT(1); // locally administered
130349 + mac[0] |= (padapter->iface_id-1)<<4;
130350 +#endif
130351 + }
130352 +
130353 + _rtw_memcpy(padapter->eeprompriv.mac_addr, mac, ETH_ALEN);
130354 +
130355 + padapter->dir_dev = NULL;
130356 +
130357 + res = _SUCCESS;
130358 +
130359 + return padapter;
130360 +
130361 +
130362 +error_rtw_drv_add_iface:
130363 +
130364 + if(padapter)
130365 + rtw_free_drv_sw(padapter);
130366 +
130367 + if (pnetdev)
130368 + rtw_free_netdev(pnetdev);
130369 +
130370 + return NULL;
130371 +
130372 +}
130373 +
130374 +void rtw_drv_stop_vir_if(_adapter *padapter)
130375 +{
130376 + struct net_device *pnetdev=NULL;
130377 +
130378 + if (padapter == NULL)
130379 + return;
130380 +
130381 + pnetdev = padapter->pnetdev;
130382 +
130383 + rtw_cancel_all_timer(padapter);
130384 +
130385 + if(padapter->bup == _TRUE)
130386 + {
130387 + padapter->bDriverStopped = _TRUE;
130388 +
130389 + #ifdef CONFIG_XMIT_ACK
130390 + if (padapter->xmitpriv.ack_tx)
130391 + rtw_ack_tx_done(&padapter->xmitpriv, RTW_SCTX_DONE_DRV_STOP);
130392 + #endif
130393 +
130394 + if(padapter->intf_stop)
130395 + {
130396 + padapter->intf_stop(padapter);
130397 + }
130398 +
130399 + rtw_stop_drv_threads(padapter);
130400 +
130401 + padapter->bup = _FALSE;
130402 + }
130403 +}
130404 +
130405 +void rtw_drv_free_vir_if(_adapter *padapter)
130406 +{
130407 + struct net_device *pnetdev=NULL;
130408 +
130409 + if (padapter == NULL)
130410 + return;
130411 +
130412 + padapter->pbuddy_adapter = NULL;
130413 +
130414 + pnetdev = padapter->pnetdev;
130415 +
130416 +#ifdef CONFIG_IOCTL_CFG80211
130417 + rtw_wdev_free(padapter->rtw_wdev);
130418 +#endif //CONFIG_IOCTL_CFG80211
130419 +
130420 + rtw_free_drv_sw(padapter);
130421 +
130422 + rtw_free_netdev(pnetdev);
130423 +}
130424 +
130425 +void rtw_drv_stop_vir_ifaces(struct dvobj_priv *dvobj)
130426 +{
130427 + int i;
130428 + //struct dvobj_priv *dvobj = primary_padapter->dvobj;
130429 +
130430 + for(i=2;i<dvobj->iface_nums;i++)
130431 + {
130432 + rtw_drv_stop_vir_if(dvobj->padapters[i]);
130433 + }
130434 +}
130435 +
130436 +void rtw_drv_free_vir_ifaces(struct dvobj_priv *dvobj)
130437 +{
130438 + int i;
130439 + //struct dvobj_priv *dvobj = primary_padapter->dvobj;
130440 +
130441 + for(i=2;i<dvobj->iface_nums;i++)
130442 + {
130443 + rtw_drv_free_vir_if(dvobj->padapters[i]);
130444 + }
130445 +}
130446 +
130447 +void rtw_drv_del_vir_if(_adapter *padapter)
130448 +{
130449 + rtw_drv_stop_vir_if(padapter);
130450 + rtw_drv_free_vir_if(padapter);
130451 +}
130452 +
130453 +void rtw_drv_del_vir_ifaces(_adapter *primary_padapter)
130454 +{
130455 + int i;
130456 + struct dvobj_priv *dvobj = primary_padapter->dvobj;
130457 +
130458 + for(i=2;i<dvobj->iface_nums;i++)
130459 + {
130460 + rtw_drv_del_vir_if(dvobj->padapters[i]);
130461 + }
130462 +}
130463 +#endif //CONFIG_MULTI_VIR_IFACES
130464 +
130465 +int _netdev_if2_open(struct net_device *pnetdev)
130466 +{
130467 + _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
130468 + _adapter *primary_padapter = padapter->pbuddy_adapter;
130469 +
130470 + DBG_871X("+871x_drv - if2_open, bup=%d\n", padapter->bup);
130471 +
130472 + if(primary_padapter->bup == _FALSE || primary_padapter->hw_init_completed == _FALSE)
130473 + {
130474 + _netdev_open(primary_padapter->pnetdev);
130475 + }
130476 +
130477 + if(padapter->bup == _FALSE && primary_padapter->bup == _TRUE &&
130478 + primary_padapter->hw_init_completed == _TRUE)
130479 + {
130480 + int i;
130481 +
130482 + padapter->bDriverStopped = _FALSE;
130483 + padapter->bSurpriseRemoved = _FALSE;
130484 + padapter->bCardDisableWOHSM = _FALSE;
130485 +
130486 + _rtw_memcpy(padapter->HalData, primary_padapter->HalData, padapter->hal_data_sz);
130487 +
130488 + padapter->bFWReady = primary_padapter->bFWReady;
130489 +
130490 + rtw_hal_set_hwreg(padapter, HW_VAR_DM_INIT_PWDB, NULL);
130491 +
130492 + //if (init_mlme_ext_priv(padapter) == _FAIL)
130493 + // goto netdev_if2_open_error;
130494 +
130495 +
130496 + if(rtw_start_drv_threads(padapter) == _FAIL)
130497 + {
130498 + goto netdev_if2_open_error;
130499 + }
130500 +
130501 +
130502 + if(padapter->intf_start)
130503 + {
130504 + padapter->intf_start(padapter);
130505 + }
130506 +
130507 +
130508 + padapter->hw_init_completed = _TRUE;
130509 +
130510 + padapter->dir_dev = NULL;
130511 + rtw_proc_init_one(pnetdev);
130512 +
130513 +
130514 +#ifdef CONFIG_IOCTL_CFG80211
130515 + rtw_cfg80211_init_wiphy(padapter);
130516 +#endif
130517 +
130518 + padapter->bup = _TRUE;
130519 +
130520 + }
130521 +
130522 + padapter->net_closed = _FALSE;
130523 +
130524 + _set_timer(&padapter->mlmepriv.dynamic_chk_timer, 2000);
130525 +
130526 + if(!rtw_netif_queue_stopped(pnetdev))
130527 + rtw_netif_start_queue(pnetdev);
130528 + else
130529 + rtw_netif_wake_queue(pnetdev);
130530 +
130531 + DBG_871X("-871x_drv - if2_open, bup=%d\n", padapter->bup);
130532 + return 0;
130533 +
130534 +netdev_if2_open_error:
130535 +
130536 + padapter->bup = _FALSE;
130537 +
130538 + netif_carrier_off(pnetdev);
130539 + rtw_netif_stop_queue(pnetdev);
130540 +
130541 + return (-1);
130542 +
130543 +}
130544 +
130545 +int netdev_if2_open(struct net_device *pnetdev)
130546 +{
130547 + int ret;
130548 + _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
130549 +
130550 + _enter_critical_mutex(&(adapter_to_dvobj(padapter)->hw_init_mutex), NULL);
130551 + ret = _netdev_if2_open(pnetdev);
130552 + _exit_critical_mutex(&(adapter_to_dvobj(padapter)->hw_init_mutex), NULL);
130553 + return ret;
130554 +}
130555 +
130556 +static int netdev_if2_close(struct net_device *pnetdev)
130557 +{
130558 + _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
130559 +
130560 + padapter->net_closed = _TRUE;
130561 +
130562 + if(pnetdev)
130563 + {
130564 + if (!rtw_netif_queue_stopped(pnetdev))
130565 + rtw_netif_stop_queue(pnetdev);
130566 + }
130567 +
130568 +#ifdef CONFIG_IOCTL_CFG80211
130569 + rtw_scan_abort(padapter);
130570 + wdev_to_priv(padapter->rtw_wdev)->bandroid_scan = _FALSE;
130571 +#endif
130572 +
130573 + return 0;
130574 +}
130575 +
130576 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
130577 +static const struct net_device_ops rtw_netdev_if2_ops = {
130578 + .ndo_open = netdev_if2_open,
130579 + .ndo_stop = netdev_if2_close,
130580 + .ndo_start_xmit = rtw_xmit_entry,
130581 + .ndo_set_mac_address = rtw_net_set_mac_address,
130582 + .ndo_get_stats = rtw_net_get_stats,
130583 + .ndo_do_ioctl = rtw_ioctl,
130584 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
130585 + .ndo_select_queue = rtw_select_queue,
130586 +#endif
130587 +};
130588 +#endif
130589 +
130590 +_adapter *rtw_drv_if2_init(_adapter *primary_padapter, void (*set_intf_ops)(struct _io_ops *pops))
130591 +{
130592 + int res = _FAIL;
130593 + struct net_device *pnetdev = NULL;
130594 + _adapter *padapter = NULL;
130595 + struct dvobj_priv *pdvobjpriv;
130596 + u8 mac[ETH_ALEN];
130597 +
130598 + /****** init netdev ******/
130599 + pnetdev = rtw_init_netdev(NULL);
130600 + if (!pnetdev)
130601 + goto error_rtw_drv_if2_init;
130602 +
130603 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
130604 + DBG_871X("register rtw_netdev_if2_ops to netdev_ops\n");
130605 + pnetdev->netdev_ops = &rtw_netdev_if2_ops;
130606 +#else
130607 + pnetdev->open = netdev_if2_open;
130608 + pnetdev->stop = netdev_if2_close;
130609 +#endif
130610 +
130611 +#ifdef CONFIG_NO_WIRELESS_HANDLERS
130612 + pnetdev->wireless_handlers = NULL;
130613 +#endif
130614 +
130615 + /****** init adapter ******/
130616 + padapter = rtw_netdev_priv(pnetdev);
130617 + _rtw_memcpy(padapter, primary_padapter, sizeof(_adapter));
130618 +
130619 + //
130620 + padapter->bup = _FALSE;
130621 + padapter->net_closed = _TRUE;
130622 + padapter->hw_init_completed = _FALSE;
130623 +
130624 + //set adapter_type/iface type
130625 + padapter->isprimary = _FALSE;
130626 + padapter->adapter_type = SECONDARY_ADAPTER;
130627 + padapter->pbuddy_adapter = primary_padapter;
130628 + padapter->iface_id = IFACE_ID1;
130629 +#ifndef CONFIG_HWPORT_SWAP //Port0 -> Pri , Port1 -> Sec
130630 + padapter->iface_type = IFACE_PORT1;
130631 +#else
130632 + padapter->iface_type = IFACE_PORT0;
130633 +#endif //CONFIG_HWPORT_SWAP
130634 + //
130635 + padapter->pnetdev = pnetdev;
130636 +
130637 + /****** setup dvobj ******/
130638 + pdvobjpriv = adapter_to_dvobj(padapter);
130639 + pdvobjpriv->if2 = padapter;
130640 + pdvobjpriv->padapters[pdvobjpriv->iface_nums++] = padapter;
130641 +
130642 + SET_NETDEV_DEV(pnetdev, dvobj_to_dev(pdvobjpriv));
130643 + #ifdef CONFIG_IOCTL_CFG80211
130644 + rtw_wdev_alloc(padapter, dvobj_to_dev(pdvobjpriv));
130645 + #endif //CONFIG_IOCTL_CFG80211
130646 +
130647 + //set interface_type/chip_type/HardwareType
130648 + padapter->interface_type = primary_padapter->interface_type;
130649 + padapter->chip_type = primary_padapter->chip_type;
130650 + padapter->HardwareType = primary_padapter->HardwareType;
130651 +
130652 + //set hal data & hal ops
130653 +#if defined(CONFIG_RTL8192C)
130654 + #if defined(CONFIG_PCI_HCI)
130655 + rtl8192ce_set_hal_ops(padapter);
130656 + #elif defined(CONFIG_USB_HCI)
130657 + rtl8192cu_set_hal_ops(padapter);
130658 + #endif
130659 +#elif defined(CONFIG_RTL8192D)
130660 + #if defined(CONFIG_PCI_HCI)
130661 + rtl8192de_set_hal_ops(padapter);
130662 + #elif defined(CONFIG_USB_HCI)
130663 + rtl8192du_set_hal_ops(padapter);
130664 + #endif
130665 +#endif
130666 +
130667 + padapter->HalFunc.inirp_init = NULL;
130668 + padapter->HalFunc.inirp_deinit = NULL;
130669 +
130670 + //
130671 + padapter->intf_start = primary_padapter->intf_start;
130672 + padapter->intf_stop = primary_padapter->intf_stop;
130673 +
130674 + //step init_io_priv
130675 + if ((rtw_init_io_priv(padapter, set_intf_ops)) == _FAIL) {
130676 + RT_TRACE(_module_hci_intfs_c_,_drv_err_,(" \n Can't init io_reqs\n"));
130677 + }
130678 +
130679 + //step read_chip_version
130680 + rtw_hal_read_chip_version(padapter);
130681 +
130682 + //step usb endpoint mapping
130683 + rtw_hal_chip_configure(padapter);
130684 +
130685 +
130686 + //init drv data
130687 + if(rtw_init_drv_sw(padapter)!= _SUCCESS)
130688 + goto error_rtw_drv_if2_init;
130689 +
130690 + //get mac address from primary_padapter
130691 + _rtw_memcpy(mac, primary_padapter->eeprompriv.mac_addr, ETH_ALEN);
130692 +
130693 + if (((mac[0]==0xff) &&(mac[1]==0xff) && (mac[2]==0xff) &&
130694 + (mac[3]==0xff) && (mac[4]==0xff) &&(mac[5]==0xff)) ||
130695 + ((mac[0]==0x0) && (mac[1]==0x0) && (mac[2]==0x0) &&
130696 + (mac[3]==0x0) && (mac[4]==0x0) &&(mac[5]==0x0)))
130697 + {
130698 + mac[0] = 0x00;
130699 + mac[1] = 0xe0;
130700 + mac[2] = 0x4c;
130701 + mac[3] = 0x87;
130702 + mac[4] = 0x11;
130703 + mac[5] = 0x22;
130704 + }
130705 + else
130706 + {
130707 + //If the BIT1 is 0, the address is universally administered.
130708 + //If it is 1, the address is locally administered
130709 + mac[0] |= BIT(1); // locally administered
130710 +
130711 + }
130712 +
130713 + _rtw_memcpy(padapter->eeprompriv.mac_addr, mac, ETH_ALEN);
130714 + rtw_init_wifidirect_addrs(padapter, padapter->eeprompriv.mac_addr, padapter->eeprompriv.mac_addr);
130715 +
130716 + primary_padapter->pbuddy_adapter = padapter;
130717 +
130718 + padapter->dir_dev = NULL;
130719 +
130720 + res = _SUCCESS;
130721 +
130722 + return padapter;
130723 +
130724 +
130725 +error_rtw_drv_if2_init:
130726 +
130727 + if(padapter)
130728 + rtw_free_drv_sw(padapter);
130729 +
130730 + if (pnetdev)
130731 + rtw_free_netdev(pnetdev);
130732 +
130733 + return NULL;
130734 +
130735 +}
130736 +
130737 +void rtw_drv_if2_free(_adapter *if2)
130738 +{
130739 + _adapter *padapter = if2;
130740 + struct net_device *pnetdev = NULL;
130741 +
130742 + if (padapter == NULL)
130743 + return;
130744 +
130745 + pnetdev = padapter->pnetdev;
130746 +
130747 +#ifdef CONFIG_IOCTL_CFG80211
130748 + rtw_wdev_free(padapter->rtw_wdev);
130749 +#endif /* CONFIG_IOCTL_CFG80211 */
130750 +
130751 +
130752 + rtw_free_drv_sw(padapter);
130753 +
130754 + rtw_free_netdev(pnetdev);
130755 +
130756 +}
130757 +
130758 +void rtw_drv_if2_stop(_adapter *if2)
130759 +{
130760 + _adapter *padapter = if2;
130761 +
130762 + if (padapter == NULL)
130763 + return;
130764 +
130765 + rtw_cancel_all_timer(padapter);
130766 +
130767 + if (padapter->bup == _TRUE) {
130768 + padapter->bDriverStopped = _TRUE;
130769 + #ifdef CONFIG_XMIT_ACK
130770 + if (padapter->xmitpriv.ack_tx)
130771 + rtw_ack_tx_done(&padapter->xmitpriv, RTW_SCTX_DONE_DRV_STOP);
130772 + #endif
130773 +
130774 + if(padapter->intf_stop)
130775 + {
130776 + padapter->intf_stop(padapter);
130777 + }
130778 +
130779 + rtw_stop_drv_threads(padapter);
130780 +
130781 + padapter->bup = _FALSE;
130782 + }
130783 +}
130784 +#endif //end of CONFIG_CONCURRENT_MODE
130785 +
130786 +#ifdef CONFIG_BR_EXT
130787 +void netdev_br_init(struct net_device *netdev)
130788 +{
130789 + _adapter *adapter = (_adapter *)rtw_netdev_priv(netdev);
130790 +
130791 +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 35))
130792 + rcu_read_lock();
130793 +#endif // (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 35))
130794 +
130795 + //if(check_fwstate(pmlmepriv, WIFI_STATION_STATE|WIFI_ADHOC_STATE) == _TRUE)
130796 + {
130797 + //struct net_bridge *br = netdev->br_port->br;//->dev->dev_addr;
130798 +#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 35))
130799 + if (netdev->br_port)
130800 +#else // (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 35))
130801 + if (rcu_dereference(adapter->pnetdev->rx_handler_data))
130802 +#endif // (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 35))
130803 + {
130804 + struct net_device *br_netdev;
130805 +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
130806 + br_netdev = dev_get_by_name(CONFIG_BR_EXT_BRNAME);
130807 +#else // (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
130808 + struct net *devnet = NULL;
130809 +
130810 +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26))
130811 + devnet = netdev->nd_net;
130812 +#else // (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26))
130813 + devnet = dev_net(netdev);
130814 +#endif // (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26))
130815 +
130816 + br_netdev = dev_get_by_name(devnet, CONFIG_BR_EXT_BRNAME);
130817 +#endif // (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
130818 +
130819 + if (br_netdev) {
130820 + memcpy(adapter->br_mac, br_netdev->dev_addr, ETH_ALEN);
130821 + dev_put(br_netdev);
130822 + } else
130823 + printk("%s()-%d: dev_get_by_name(%s) failed!", __FUNCTION__, __LINE__, CONFIG_BR_EXT_BRNAME);
130824 + }
130825 +
130826 + adapter->ethBrExtInfo.addPPPoETag = 1;
130827 + }
130828 +
130829 +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 35))
130830 + rcu_read_unlock();
130831 +#endif // (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 35))
130832 +}
130833 +#endif //CONFIG_BR_EXT
130834 +
130835 +static int _rtw_drv_register_netdev(_adapter *padapter, char *name)
130836 +{
130837 + int ret = _SUCCESS;
130838 + struct net_device *pnetdev = padapter->pnetdev;
130839 +
130840 + /* alloc netdev name */
130841 + rtw_init_netdev_name(pnetdev, name);
130842 +
130843 + _rtw_memcpy(pnetdev->dev_addr, padapter->eeprompriv.mac_addr, ETH_ALEN);
130844 +
130845 + /* Tell the network stack we exist */
130846 + if (register_netdev(pnetdev) != 0) {
130847 + DBG_871X(FUNC_NDEV_FMT "Failed!\n", FUNC_NDEV_ARG(pnetdev));
130848 + ret = _FAIL;
130849 + goto error_register_netdev;
130850 + }
130851 +
130852 + DBG_871X("%s, MAC Address (if%d) = " MAC_FMT "\n", __FUNCTION__, (padapter->iface_id+1), MAC_ARG(pnetdev->dev_addr));
130853 +
130854 + return ret;
130855 +
130856 +error_register_netdev:
130857 +
130858 + if(padapter->iface_id > IFACE_ID0)
130859 + {
130860 + rtw_free_drv_sw(padapter);
130861 +
130862 + rtw_free_netdev(pnetdev);
130863 + }
130864 +
130865 + return ret;
130866 +}
130867 +
130868 +int rtw_drv_register_netdev(_adapter *if1)
130869 +{
130870 + int i, status = _SUCCESS;
130871 + struct dvobj_priv *dvobj = if1->dvobj;
130872 +
130873 + if(dvobj->iface_nums < IFACE_ID_MAX)
130874 + {
130875 + for(i=0; i<dvobj->iface_nums; i++)
130876 + {
130877 + _adapter *padapter = dvobj->padapters[i];
130878 +
130879 + if(padapter)
130880 + {
130881 + char *name;
130882 +
130883 + if(padapter->iface_id == IFACE_ID0)
130884 + name = if1->registrypriv.ifname;
130885 + else if(padapter->iface_id == IFACE_ID1)
130886 + name = if1->registrypriv.if2name;
130887 + else
130888 + name = "wlan%d";
130889 +
130890 + if((status = _rtw_drv_register_netdev(padapter, name)) != _SUCCESS) {
130891 + break;
130892 + }
130893 + }
130894 + }
130895 + }
130896 +
130897 + return status;
130898 +}
130899 +
130900 +int _netdev_open(struct net_device *pnetdev)
130901 +{
130902 + uint status;
130903 + _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
130904 + struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
130905 +
130906 + RT_TRACE(_module_os_intfs_c_,_drv_info_,("+871x_drv - dev_open\n"));
130907 + DBG_871X("+871x_drv - drv_open, bup=%d\n", padapter->bup);
130908 +
130909 + if(pwrctrlpriv->ps_flag == _TRUE){
130910 + padapter->net_closed = _FALSE;
130911 + goto netdev_open_normal_process;
130912 + }
130913 +
130914 + if(padapter->bup == _FALSE)
130915 + {
130916 + padapter->bDriverStopped = _FALSE;
130917 + padapter->bSurpriseRemoved = _FALSE;
130918 + padapter->bCardDisableWOHSM = _FALSE;
130919 +
130920 + status = rtw_hal_init(padapter);
130921 + if (status ==_FAIL)
130922 + {
130923 + RT_TRACE(_module_os_intfs_c_,_drv_err_,("rtl871x_hal_init(): Can't init h/w!\n"));
130924 + goto netdev_open_error;
130925 + }
130926 +
130927 + DBG_871X("MAC Address = "MAC_FMT"\n", MAC_ARG(pnetdev->dev_addr));
130928 +
130929 +
130930 + status=rtw_start_drv_threads(padapter);
130931 + if(status ==_FAIL)
130932 + {
130933 + RT_TRACE(_module_os_intfs_c_,_drv_err_,("Initialize driver software resource Failed!\n"));
130934 + goto netdev_open_error;
130935 + }
130936 +
130937 +#ifdef CONFIG_DRVEXT_MODULE
130938 + init_drvext(padapter);
130939 +#endif
130940 +
130941 + if(padapter->intf_start)
130942 + {
130943 + padapter->intf_start(padapter);
130944 + }
130945 +
130946 +#ifndef RTK_DMP_PLATFORM
130947 + rtw_proc_init_one(pnetdev);
130948 +#endif
130949 +
130950 +#ifdef CONFIG_IOCTL_CFG80211
130951 + rtw_cfg80211_init_wiphy(padapter);
130952 +#endif
130953 +
130954 + rtw_led_control(padapter, LED_CTL_NO_LINK);
130955 +
130956 + padapter->bup = _TRUE;
130957 + }
130958 + padapter->net_closed = _FALSE;
130959 +
130960 + _set_timer(&padapter->mlmepriv.dynamic_chk_timer, 2000);
130961 +
130962 + padapter->pwrctrlpriv.bips_processing = _FALSE;
130963 + rtw_set_pwr_state_check_timer(&padapter->pwrctrlpriv);
130964 +
130965 + //netif_carrier_on(pnetdev);//call this func when rtw_joinbss_event_callback return success
130966 + if(!rtw_netif_queue_stopped(pnetdev))
130967 + rtw_netif_start_queue(pnetdev);
130968 + else
130969 + rtw_netif_wake_queue(pnetdev);
130970 +
130971 +#ifdef CONFIG_BR_EXT
130972 + netdev_br_init(pnetdev);
130973 +#endif // CONFIG_BR_EXT
130974 +
130975 +netdev_open_normal_process:
130976 +
130977 + #ifdef CONFIG_CONCURRENT_MODE
130978 + {
130979 + _adapter *sec_adapter = padapter->pbuddy_adapter;
130980 + if(sec_adapter && (sec_adapter->bup == _FALSE || sec_adapter->hw_init_completed == _FALSE))
130981 + _netdev_if2_open(sec_adapter->pnetdev);
130982 + }
130983 + #endif
130984 +
130985 + RT_TRACE(_module_os_intfs_c_,_drv_info_,("-871x_drv - dev_open\n"));
130986 + DBG_871X("-871x_drv - drv_open, bup=%d\n", padapter->bup);
130987 +
130988 + return 0;
130989 +
130990 +netdev_open_error:
130991 +
130992 + padapter->bup = _FALSE;
130993 +
130994 + netif_carrier_off(pnetdev);
130995 + rtw_netif_stop_queue(pnetdev);
130996 +
130997 + RT_TRACE(_module_os_intfs_c_,_drv_err_,("-871x_drv - dev_open, fail!\n"));
130998 + DBG_871X("-871x_drv - drv_open fail, bup=%d\n", padapter->bup);
130999 +
131000 + return (-1);
131001 +
131002 +}
131003 +
131004 +int netdev_open(struct net_device *pnetdev)
131005 +{
131006 + int ret;
131007 + _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
131008 +
131009 + _enter_critical_mutex(&(adapter_to_dvobj(padapter)->hw_init_mutex), NULL);
131010 + ret = _netdev_open(pnetdev);
131011 + _exit_critical_mutex(&(adapter_to_dvobj(padapter)->hw_init_mutex), NULL);
131012 +
131013 + return ret;
131014 +}
131015 +
131016 +#ifdef CONFIG_IPS
131017 +int ips_netdrv_open(_adapter *padapter)
131018 +{
131019 + int status = _SUCCESS;
131020 + padapter->net_closed = _FALSE;
131021 + DBG_871X("===> %s.........\n",__FUNCTION__);
131022 +
131023 +
131024 + padapter->bDriverStopped = _FALSE;
131025 + padapter->bCardDisableWOHSM = _FALSE;
131026 + //padapter->bup = _TRUE;
131027 +
131028 + status = rtw_hal_init(padapter);
131029 + if (status ==_FAIL)
131030 + {
131031 + RT_TRACE(_module_os_intfs_c_,_drv_err_,("ips_netdrv_open(): Can't init h/w!\n"));
131032 + goto netdev_open_error;
131033 + }
131034 +
131035 + if(padapter->intf_start)
131036 + {
131037 + padapter->intf_start(padapter);
131038 + }
131039 +
131040 + rtw_set_pwr_state_check_timer(&padapter->pwrctrlpriv);
131041 + _set_timer(&padapter->mlmepriv.dynamic_chk_timer,5000);
131042 +
131043 + return _SUCCESS;
131044 +
131045 +netdev_open_error:
131046 + //padapter->bup = _FALSE;
131047 + DBG_871X("-ips_netdrv_open - drv_open failure, bup=%d\n", padapter->bup);
131048 +
131049 + return _FAIL;
131050 +}
131051 +
131052 +
131053 +int rtw_ips_pwr_up(_adapter *padapter)
131054 +{
131055 + int result;
131056 + u32 start_time = rtw_get_current_time();
131057 + DBG_871X("===> rtw_ips_pwr_up..............\n");
131058 + rtw_reset_drv_sw(padapter);
131059 +
131060 + result = ips_netdrv_open(padapter);
131061 +
131062 + rtw_led_control(padapter, LED_CTL_NO_LINK);
131063 +
131064 + DBG_871X("<=== rtw_ips_pwr_up.............. in %dms\n", rtw_get_passing_time_ms(start_time));
131065 + return result;
131066 +
131067 +}
131068 +
131069 +void rtw_ips_pwr_down(_adapter *padapter)
131070 +{
131071 + u32 start_time = rtw_get_current_time();
131072 + DBG_871X("===> rtw_ips_pwr_down...................\n");
131073 +
131074 + padapter->bCardDisableWOHSM = _TRUE;
131075 + padapter->net_closed = _TRUE;
131076 +
131077 + rtw_led_control(padapter, LED_CTL_POWER_OFF);
131078 +
131079 + rtw_ips_dev_unload(padapter);
131080 + padapter->bCardDisableWOHSM = _FALSE;
131081 + DBG_871X("<=== rtw_ips_pwr_down..................... in %dms\n", rtw_get_passing_time_ms(start_time));
131082 +}
131083 +#endif
131084 +void rtw_ips_dev_unload(_adapter *padapter)
131085 +{
131086 + struct net_device *pnetdev= (struct net_device*)padapter->pnetdev;
131087 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
131088 + DBG_871X("====> %s...\n",__FUNCTION__);
131089 +
131090 + rtw_hal_set_hwreg(padapter, HW_VAR_FIFO_CLEARN_UP, 0);
131091 +
131092 + if(padapter->intf_stop)
131093 + {
131094 + padapter->intf_stop(padapter);
131095 + }
131096 +
131097 + //s5.
131098 + if(padapter->bSurpriseRemoved == _FALSE)
131099 + {
131100 rtw_hal_deinit(padapter);
131101 }
131102
131103 @@ -1481,7 +2648,7 @@ int pm_netdev_open(struct net_device *pn
131104 {
131105 int status;
131106 if(bnormal)
131107 - status = _netdev_open(pnetdev);
131108 + status = netdev_open(pnetdev);
131109 #ifdef CONFIG_IPS
131110 else
131111 status = (_SUCCESS == ips_netdrv_open((_adapter *)rtw_netdev_priv(pnetdev)))?(0):(-1);
131112 @@ -1489,16 +2656,16 @@ int pm_netdev_open(struct net_device *pn
131113
131114 return status;
131115 }
131116 -//extern int rfpwrstate_check(_adapter *padapter);
131117 +
131118 static int netdev_close(struct net_device *pnetdev)
131119 {
131120 _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
131121
131122 - RT_TRACE(_module_os_intfs_c_,_drv_info_,("+871x_drv - drv_close\n"));
131123 + RT_TRACE(_module_os_intfs_c_,_drv_info_,("+871x_drv - drv_close\n"));
131124
131125 if(padapter->pwrctrlpriv.bInternalAutoSuspend == _TRUE)
131126 {
131127 - //rfpwrstate_check(padapter);
131128 + //rtw_pwr_wakeup(padapter);
131129 if(padapter->pwrctrlpriv.rf_pwrstate == rf_off)
131130 padapter->pwrctrlpriv.ps_flag = _TRUE;
131131 }
131132 @@ -1506,7 +2673,7 @@ static int netdev_close(struct net_devic
131133
131134 /* if(!padapter->hw_init_completed)
131135 {
131136 - DBG_8192C("(1)871x_drv - drv_close, bup=%d, hw_init_completed=%d\n", padapter->bup, padapter->hw_init_completed);
131137 + DBG_871X("(1)871x_drv - drv_close, bup=%d, hw_init_completed=%d\n", padapter->bup, padapter->hw_init_completed);
131138
131139 padapter->bDriverStopped = _TRUE;
131140
131141 @@ -1514,22 +2681,22 @@ static int netdev_close(struct net_devic
131142 }
131143 else*/
131144 if(padapter->pwrctrlpriv.rf_pwrstate == rf_on){
131145 - DBG_8192C("(2)871x_drv - drv_close, bup=%d, hw_init_completed=%d\n", padapter->bup, padapter->hw_init_completed);
131146 + DBG_871X("(2)871x_drv - drv_close, bup=%d, hw_init_completed=%d\n", padapter->bup, padapter->hw_init_completed);
131147
131148 //s1.
131149 - if(pnetdev)
131150 - {
131151 - if (!netif_queue_stopped(pnetdev))
131152 - netif_stop_queue(pnetdev);
131153 - }
131154 + if(pnetdev)
131155 + {
131156 + if (!rtw_netif_queue_stopped(pnetdev))
131157 + rtw_netif_stop_queue(pnetdev);
131158 + }
131159
131160 #ifndef CONFIG_ANDROID
131161 - //s2.
131162 - //s2-1. issue rtw_disassoc_cmd to fw
131163 - rtw_disassoc_cmd(padapter);
131164 + //s2.
131165 + LeaveAllPowerSaveMode(padapter);
131166 + rtw_disassoc_cmd(padapter, 500, _FALSE);
131167 //s2-2. indicate disconnect to os
131168 rtw_indicate_disconnect(padapter);
131169 - //s2-3.
131170 + //s2-3.
131171 rtw_free_assoc_resources(padapter, 1);
131172 //s2-4.
131173 rtw_free_network_queue(padapter,_TRUE);
131174 @@ -1539,7 +2706,7 @@ static int netdev_close(struct net_devic
131175 }
131176
131177 #ifdef CONFIG_BR_EXT
131178 - //if (OPMODE & (WIFI_STATION_STATE | WIFI_ADHOC_STATE))
131179 + //if (OPMODE & (WIFI_STATION_STATE | WIFI_ADHOC_STATE))
131180 {
131181 //void nat25_db_cleanup(_adapter *priv);
131182 nat25_db_cleanup(padapter);
131183 @@ -1547,22 +2714,36 @@ static int netdev_close(struct net_devic
131184 #endif // CONFIG_BR_EXT
131185
131186 #ifdef CONFIG_P2P
131187 - #ifdef CONFIG_IOCTL_CFG80211
131188 - if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled == _TRUE)
131189 - wdev_to_priv(padapter->rtw_wdev)->p2p_enabled = _FALSE;
131190 - #endif
131191 +#ifdef CONFIG_IOCTL_CFG80211
131192 + if( padapter->wdinfo.driver_interface == DRIVER_CFG80211 )
131193 + {
131194 + if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled == _TRUE)
131195 + wdev_to_priv(padapter->rtw_wdev)->p2p_enabled = _FALSE;
131196 + }
131197 +#endif //CONFIG_IOCTL_CFG80211
131198 rtw_p2p_enable(padapter, P2P_ROLE_DISABLE);
131199 #endif //CONFIG_P2P
131200
131201 #ifdef CONFIG_IOCTL_CFG80211
131202 - rtw_cfg80211_indicate_scan_done(wdev_to_priv(padapter->rtw_wdev), _TRUE);
131203 + rtw_scan_abort(padapter);
131204 + wdev_to_priv(padapter->rtw_wdev)->bandroid_scan = _FALSE;
131205 padapter->rtw_wdev->iftype = NL80211_IFTYPE_MONITOR; //set this at the end
131206 -#endif
131207 -
131208 +#endif //CONFIG_IOCTL_CFG80211
131209 +
131210 RT_TRACE(_module_os_intfs_c_,_drv_info_,("-871x_drv - drv_close\n"));
131211 - DBG_8192C("-871x_drv - drv_close, bup=%d\n", padapter->bup);
131212 -
131213 + DBG_871X("-871x_drv - drv_close, bup=%d\n", padapter->bup);
131214 +
131215 return 0;
131216 -
131217 +}
131218 +
131219 +void rtw_ndev_destructor(struct net_device *ndev)
131220 +{
131221 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
131222 +
131223 +#ifdef CONFIG_IOCTL_CFG80211
131224 + if (ndev->ieee80211_ptr)
131225 + rtw_mfree((u8 *)ndev->ieee80211_ptr, sizeof(struct wireless_dev));
131226 +#endif
131227 + free_netdev(ndev);
131228 }
131229
131230 --- a/drivers/net/wireless/rtl8192cu/os_dep/linux/pci_intf.c
131231 +++ b/drivers/net/wireless/rtl8192cu/os_dep/linux/pci_intf.c
131232 @@ -1,7 +1,7 @@
131233 /******************************************************************************
131234 *
131235 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
131236 - *
131237 + *
131238 * This program is free software; you can redistribute it and/or modify it
131239 * under the terms of version 2 of the GNU General Public License as
131240 * published by the Free Software Foundation.
131241 @@ -24,7 +24,7 @@
131242 #include <drv_types.h>
131243 #include <recv_osdep.h>
131244 #include <xmit_osdep.h>
131245 -#include <hal_init.h>
131246 +#include <hal_intf.h>
131247 #include <rtw_version.h>
131248
131249 #ifndef CONFIG_PCI_HCI
131250 @@ -79,23 +79,21 @@ struct pci_device_id rtw_pci_id_tbl[] =
131251 {},
131252 };
131253
131254 -typedef struct _driver_priv{
131255 -
131256 +struct pci_drv_priv {
131257 struct pci_driver rtw_pci_drv;
131258 int drv_registered;
131259 -
131260 -}drv_priv, *pdrv_priv;
131261 +};
131262
131263
131264 -static drv_priv drvpriv = {
131265 +static struct pci_drv_priv pci_drvpriv = {
131266 .rtw_pci_drv.name = (char*)DRV_NAME,
131267 .rtw_pci_drv.probe = rtw_drv_init,
131268 .rtw_pci_drv.remove = rtw_dev_remove,
131269 .rtw_pci_drv.id_table = rtw_pci_id_tbl,
131270 -#ifdef CONFIG_PM
131271 +#ifdef CONFIG_PM
131272 .rtw_pci_drv.suspend = rtw_suspend,
131273 .rtw_pci_drv.resume = rtw_resume,
131274 -#else
131275 +#else
131276 .rtw_pci_drv.suspend = NULL,
131277 .rtw_pci_drv.resume = NULL,
131278 #endif
131279 @@ -114,7 +112,7 @@ static u16 pcibridge_vendors[PCI_BRIDGE_
131280
131281 static u8 rtw_pci_platform_switch_device_pci_aspm(_adapter *padapter, u8 value)
131282 {
131283 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
131284 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
131285 u8 bresult = _SUCCESS;
131286 int error;
131287
131288 @@ -125,18 +123,18 @@ static u8 rtw_pci_platform_switch_device
131289 if(error != 0)
131290 {
131291 bresult = _FALSE;
131292 - DBG_8192C("rtw_pci_platform_switch_device_pci_aspm error (%d)\n",error);
131293 + DBG_871X("rtw_pci_platform_switch_device_pci_aspm error (%d)\n",error);
131294 }
131295
131296 return bresult;
131297 }
131298
131299 -//
131300 -// When we set 0x01 to enable clk request. Set 0x0 to disable clk req.
131301 -//
131302 +//
131303 +// When we set 0x01 to enable clk request. Set 0x0 to disable clk req.
131304 +//
131305 static u8 rtw_pci_switch_clk_req(_adapter *padapter, u8 value)
131306 {
131307 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
131308 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
131309 u8 buffer, bresult = _SUCCESS;
131310 int error;
131311
131312 @@ -150,18 +148,18 @@ static u8 rtw_pci_switch_clk_req(_adapte
131313 if(error != 0)
131314 {
131315 bresult = _FALSE;
131316 - DBG_8192C("rtw_pci_switch_clk_req error (%d)\n",error);
131317 + DBG_871X("rtw_pci_switch_clk_req error (%d)\n",error);
131318 }
131319
131320 return bresult;
131321 }
131322
131323 #if 0
131324 -//Description:
131325 +//Description:
131326 //Disable RTL8192SE ASPM & Disable Pci Bridge ASPM
131327 void rtw_pci_disable_aspm(_adapter *padapter)
131328 {
131329 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
131330 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
131331 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
131332 struct pci_priv *pcipriv = &(pdvobjpriv->pcipriv);
131333 u32 pcicfg_addrport = 0;
131334 @@ -170,8 +168,8 @@ void rtw_pci_disable_aspm(_adapter *pada
131335 u16 pcibridge_linkctrlreg, aspmlevel = 0;
131336
131337 // When there exists anyone's busnum, devnum, and funcnum that are set to 0xff,
131338 - // we do not execute any action and return.
131339 - // if it is not intel bus then don't enable ASPM.
131340 + // we do not execute any action and return.
131341 + // if it is not intel bus then don't enable ASPM.
131342 if ((pcipriv->busnumber == 0xff
131343 && pcipriv->devnumber == 0xff
131344 && pcipriv->funcnumber == 0xff)
131345 @@ -179,12 +177,12 @@ void rtw_pci_disable_aspm(_adapter *pada
131346 && pcipriv->pcibridge_devnum == 0xff
131347 && pcipriv->pcibridge_funcnum == 0xff))
131348 {
131349 - DBG_8192C("PlatformEnableASPM(): Fail to enable ASPM. Cannot find the Bus of PCI(Bridge).\n");
131350 + DBG_871X("PlatformEnableASPM(): Fail to enable ASPM. Cannot find the Bus of PCI(Bridge).\n");
131351 return;
131352 }
131353
131354 if (pcipriv->pcibridge_vendor == PCI_BRIDGE_VENDOR_UNKNOWN) {
131355 - DBG_8192C("%s(): Disable ASPM. Recognize the Bus of PCI(Bridge) as UNKNOWN.\n", __func__);
131356 + DBG_871X("%s(): Disable ASPM. Recognize the Bus of PCI(Bridge) as UNKNOWN.\n", __func__);
131357 }
131358
131359 if (pwrpriv->reg_rfps_level & RT_RF_OFF_LEVL_CLK_REQ) {
131360 @@ -224,7 +222,7 @@ void rtw_pci_disable_aspm(_adapter *pada
131361 }
131362 else
131363 {
131364 - //4 //Disable Pci Bridge ASPM
131365 + //4 //Disable Pci Bridge ASPM
131366 pcicfg_addrport = (pcipriv->pcibridge_busnum << 16) |
131367 (pcipriv->pcibridge_devnum << 11) |
131368 (pcipriv->pcibridge_funcnum << 8) | (1 << 31);
131369 @@ -236,9 +234,9 @@ void rtw_pci_disable_aspm(_adapter *pada
131370 // now grab data port with device|vendor 4 byte dword
131371 NdisRawWritePortUchar(PCI_CONF_DATA, pcibridge_linkctrlreg);
131372
131373 - DBG_8192C("rtw_pci_disable_aspm():PciBridge busnumber[%x], DevNumbe[%x], funcnumber[%x], Write reg[%x] = %x\n",
131374 - pcipriv->pcibridge_busnum, pcipriv->pcibridge_devnum,
131375 - pcipriv->pcibridge_funcnum,
131376 + DBG_871X("rtw_pci_disable_aspm():PciBridge busnumber[%x], DevNumbe[%x], funcnumber[%x], Write reg[%x] = %x\n",
131377 + pcipriv->pcibridge_busnum, pcipriv->pcibridge_devnum,
131378 + pcipriv->pcibridge_funcnum,
131379 (pcipriv->pcibridge_pciehdr_offset+0x10), pcibridge_linkctrlreg);
131380
131381 rtw_udelay_os(50);
131382 @@ -246,13 +244,13 @@ void rtw_pci_disable_aspm(_adapter *pada
131383 }
131384
131385 //[ASPM]
131386 -//Description:
131387 +//Description:
131388 // Enable RTL8192SE ASPM & Enable Pci Bridge ASPM for power saving
131389 // We should follow the sequence to enable RTL8192SE first then enable Pci Bridge ASPM
131390 // or the system will show bluescreen.
131391 void rtw_pci_enable_aspm(_adapter *padapter)
131392 {
131393 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
131394 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
131395 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
131396 struct pci_priv *pcipriv = &(pdvobjpriv->pcipriv);
131397 u16 aspmlevel = 0;
131398 @@ -262,8 +260,8 @@ void rtw_pci_enable_aspm(_adapter *padap
131399 u8 u_device_aspmsetting = 0;
131400
131401 // When there exists anyone's busnum, devnum, and funcnum that are set to 0xff,
131402 - // we do not execute any action and return.
131403 - // if it is not intel bus then don't enable ASPM.
131404 + // we do not execute any action and return.
131405 + // if it is not intel bus then don't enable ASPM.
131406
131407 if ((pcipriv->busnumber == 0xff
131408 && pcipriv->devnumber == 0xff
131409 @@ -272,12 +270,12 @@ void rtw_pci_enable_aspm(_adapter *padap
131410 && pcipriv->pcibridge_devnum == 0xff
131411 && pcipriv->pcibridge_funcnum == 0xff))
131412 {
131413 - DBG_8192C("PlatformEnableASPM(): Fail to enable ASPM. Cannot find the Bus of PCI(Bridge).\n");
131414 + DBG_871X("PlatformEnableASPM(): Fail to enable ASPM. Cannot find the Bus of PCI(Bridge).\n");
131415 return;
131416 }
131417
131418 - //4 Enable Pci Bridge ASPM
131419 - pcicfg_addrport = (pcipriv->pcibridge_busnum << 16)
131420 + //4 Enable Pci Bridge ASPM
131421 + pcicfg_addrport = (pcipriv->pcibridge_busnum << 16)
131422 | (pcipriv->pcibridge_devnum << 11)
131423 | (pcipriv->pcibridge_funcnum << 8) | (1 << 31);
131424 num4bytes = (pcipriv->pcibridge_pciehdr_offset + 0x10) / 4;
131425 @@ -293,11 +291,11 @@ void rtw_pci_enable_aspm(_adapter *padap
131426
131427 NdisRawWritePortUchar(PCI_CONF_DATA, u_pcibridge_aspmsetting);
131428
131429 - DBG_8192C("PlatformEnableASPM():PciBridge busnumber[%x], DevNumbe[%x], funcnumber[%x], Write reg[%x] = %x\n",
131430 - pcipriv->pcibridge_busnum,
131431 - pcipriv->pcibridge_devnum,
131432 - pcipriv->pcibridge_funcnum,
131433 - (pcipriv->pcibridge_pciehdr_offset+0x10),
131434 + DBG_871X("PlatformEnableASPM():PciBridge busnumber[%x], DevNumbe[%x], funcnumber[%x], Write reg[%x] = %x\n",
131435 + pcipriv->pcibridge_busnum,
131436 + pcipriv->pcibridge_devnum,
131437 + pcipriv->pcibridge_funcnum,
131438 + (pcipriv->pcibridge_pciehdr_offset+0x10),
131439 u_pcibridge_aspmsetting);
131440
131441 rtw_udelay_os(50);
131442 @@ -318,14 +316,14 @@ void rtw_pci_enable_aspm(_adapter *padap
131443 }
131444
131445 //
131446 -//Description:
131447 +//Description:
131448 //To get link control field by searching from PCIe capability lists.
131449 //
131450 static u8
131451 rtw_get_link_control_field(_adapter *padapter, u8 busnum, u8 devnum,
131452 u8 funcnum)
131453 {
131454 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
131455 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
131456 struct pci_priv *pcipriv = &(pdvobjpriv->pcipriv);
131457 struct rt_pci_capabilities_header capability_hdr;
131458 u8 capability_offset, num4bytes;
131459 @@ -335,7 +333,7 @@ rtw_get_link_control_field(_adapter *pad
131460
131461 //If busnum, devnum, funcnum are set to 0xff.
131462 if (busnum == 0xff && devnum == 0xff && funcnum == 0xff) {
131463 - DBG_8192C("GetLinkControlField(): Fail to find PCIe Capability\n");
131464 + DBG_871X("GetLinkControlField(): Fail to find PCIe Capability\n");
131465 return _FALSE;
131466 }
131467
131468 @@ -351,15 +349,15 @@ rtw_get_link_control_field(_adapter *pad
131469 // now grab data port with device|vendor 4 byte dword
131470 NdisRawReadPortUchar(PCI_CONF_DATA, &capability_offset);
131471
131472 - // Loop through the capabilities in search of the power management capability.
131473 + // Loop through the capabilities in search of the power management capability.
131474 // The list is NULL-terminated, so the last offset will always be zero.
131475
131476 while (capability_offset != 0) {
131477 - // First find the number of 4 Byte.
131478 + // First find the number of 4 Byte.
131479 num4bytes = capability_offset / 4;
131480
131481 // Read the header of the capability at this offset. If the retrieved capability is not
131482 - // the power management capability that we are looking for, follow the link to the
131483 + // the power management capability that we are looking for, follow the link to the
131484 // next capability and continue looping.
131485
131486 //4 get capability_hdr
131487 @@ -397,16 +395,16 @@ rtw_get_link_control_field(_adapter *pad
131488 }
131489 else
131490 {
131491 - // We didn't find a PCIe capability.
131492 - DBG_8192C("GetLinkControlField(): Cannot Find PCIe Capability\n");
131493 + // We didn't find a PCIe capability.
131494 + DBG_871X("GetLinkControlField(): Cannot Find PCIe Capability\n");
131495 }
131496
131497 return status;
131498 }
131499
131500 //
131501 -//Description:
131502 -//To get PCI bus infomation and return busnum, devnum, and funcnum about
131503 +//Description:
131504 +//To get PCI bus infomation and return busnum, devnum, and funcnum about
131505 //the bus(bridge) which the device binds.
131506 //
131507 static u8
131508 @@ -416,7 +414,7 @@ rtw_get_pci_bus_info(_adapter *padapter,
131509 u8 irql, u8 basecode, u8 subclass, u8 filed19val,
131510 u8 * busnum, u8 * devnum, u8 * funcnum)
131511 {
131512 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
131513 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
131514 struct pci_dev *pdev = pdvobjpriv->ppcidev;
131515 u8 busnum_idx, devicenum_idx, functionnum_idx;
131516 u32 pcicfg_addrport = 0;
131517 @@ -431,7 +429,7 @@ rtw_get_pci_bus_info(_adapter *padapter,
131518 *devnum = 0xFF;
131519 *funcnum = 0xFF;
131520
131521 - //DBG_8192C("==============>vendorid:%x,deviceid:%x,irql:%x\n", vendorid,deviceid,irql);
131522 + //DBG_871X("==============>vendorid:%x,deviceid:%x,irql:%x\n", vendorid,deviceid,irql);
131523 if ((basecode == PCI_CLASS_BRIDGE_DEV) &&
131524 (subclass == PCI_SUBCLASS_BR_PCI_TO_PCI)
131525 && (filed19val == U1DONTCARE))
131526 @@ -449,14 +447,14 @@ rtw_get_pci_bus_info(_adapter *padapter,
131527 // <Roger_Notes> We have to skip redundant Bus scan to prevent unexpected system hang
131528 // if single function is present in this device.
131529 // 2009.02.26.
131530 - //
131531 + //
131532 if (functionnum_idx == 0) {
131533 //4 get header type (DWORD #3)
131534 pcicfg_addrport = (busnum_idx << 16) | (devicenum_idx << 11) | (functionnum_idx << 8) | (1 << 31);
131535 NdisRawWritePortUlong(PCI_CONF_ADDRESS, pcicfg_addrport + (3 << 2));
131536 NdisRawReadPortUlong(PCI_CONF_DATA, &headertype);
131537 headertype = ((headertype >> 16) & 0x0080) >> 7; // address 0x0e[7].
131538 - if (headertype == 0) //Single function
131539 + if (headertype == 0) //Single function
131540 b_singlefunc = _TRUE;
131541 }
131542 else
131543 @@ -534,7 +532,7 @@ rtw_get_pci_bus_info(_adapter *padapter,
131544 *devnum = devicenum_idx;
131545 *funcnum = functionnum_idx;
131546
131547 - DBG_8192C("GetPciBusInfo(): Find Device(%X:%X) bus=%d dev=%d, func=%d\n",
131548 + DBG_871X("GetPciBusInfo(): Find Device(%X:%X) bus=%d dev=%d, func=%d\n",
131549 vendorid, deviceid, busnum_idx, devicenum_idx, functionnum_idx);
131550 return _TRUE;
131551 }
131552 @@ -542,7 +540,7 @@ rtw_get_pci_bus_info(_adapter *padapter,
131553 }
131554 }
131555
131556 - DBG_8192C("GetPciBusInfo(): Cannot Find Device(%X:%X:%X)\n", vendorid, deviceid, dev_venid);
131557 + DBG_871X("GetPciBusInfo(): Cannot Find Device(%X:%X:%X)\n", vendorid, deviceid, dev_venid);
131558
131559 return _FALSE;
131560 }
131561 @@ -588,7 +586,7 @@ rtw_get_pci_brideg_info(_adapter *padapt
131562 NdisRawWritePortUlong(PCI_CONF_ADDRESS, pcicfg_addrport + (3 << 2));
131563 NdisRawReadPortUlong(PCI_CONF_DATA, &headertype);
131564 headertype = ((headertype >> 16) & 0x0080) >> 7; // address 0x0e[7].
131565 - if (headertype == 0) //Single function
131566 + if (headertype == 0) //Single function
131567 b_singlefunc = _TRUE;
131568 }
131569 else
131570 @@ -636,7 +634,7 @@ rtw_get_pci_brideg_info(_adapter *padapt
131571 *vendorid = venId;
131572 *deviceid = devId;
131573
131574 - DBG_8192C("GetPciBridegInfo : Find Device(%X:%X) bus=%d dev=%d, func=%d\n",
131575 + DBG_871X("GetPciBridegInfo : Find Device(%X:%X) bus=%d dev=%d, func=%d\n",
131576 venId, devId, busnum_idx, devicenum_idx, functionnum_idx);
131577
131578 return _TRUE;
131579 @@ -645,18 +643,18 @@ rtw_get_pci_brideg_info(_adapter *padapt
131580 }
131581 }
131582
131583 - DBG_8192C("GetPciBridegInfo(): Cannot Find PciBridge for Device\n");
131584 + DBG_871X("GetPciBridegInfo(): Cannot Find PciBridge for Device\n");
131585
131586 return _FALSE;
131587 } // end of GetPciBridegInfo
131588
131589 //
131590 -//Description:
131591 +//Description:
131592 //To find specific bridge information.
131593 //
131594 static void rtw_find_bridge_info(_adapter *padapter)
131595 {
131596 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
131597 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
131598 struct pci_priv *pcipriv = &(pdvobjpriv->pcipriv);
131599 u8 pcibridge_busnum = 0xff;
131600 u8 pcibridge_devnum = 0xff;
131601 @@ -679,11 +677,11 @@ static void rtw_find_bridge_info(_adapte
131602 for (tmp = 0; tmp < PCI_BRIDGE_VENDOR_MAX; tmp++) {
131603 if (pcibridge_vendorid == pcibridge_vendors[tmp]) {
131604 pcipriv->pcibridge_vendor = tmp;
131605 - DBG_8192C("Pci Bridge Vendor is found index: %d\n", tmp);
131606 + DBG_871X("Pci Bridge Vendor is found index: %d\n", tmp);
131607 break;
131608 }
131609 }
131610 - DBG_8192C("Pci Bridge Vendor is %x\n", pcibridge_vendors[tmp]);
131611 + DBG_871X("Pci Bridge Vendor is %x\n", pcibridge_vendors[tmp]);
131612
131613 // Update corresponding PCI bus info.
131614 pcipriv->pcibridge_busnum = pcibridge_busnum;
131615 @@ -726,7 +724,7 @@ rtw_get_amd_l1_patch(_adapter *padapter,
131616 /*Disable RTL8192SE ASPM & Disable Pci Bridge ASPM*/
131617 void rtw_pci_disable_aspm(_adapter *padapter)
131618 {
131619 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
131620 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
131621 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
131622 struct pci_dev *pdev = pdvobjpriv->ppcidev;
131623 struct pci_dev *bridge_pdev = pdev->bus->self;
131624 @@ -762,7 +760,7 @@ void rtw_pci_disable_aspm(_adapter *pada
131625 }
131626
131627 {
131628 - /*for promising device will in L0 state after an I/O.*/
131629 + /*for promising device will in L0 state after an I/O.*/
131630 u8 tmp_u1b;
131631 pci_read_config_byte(pdev, 0x80, &tmp_u1b);
131632 }
131633 @@ -779,14 +777,14 @@ void rtw_pci_disable_aspm(_adapter *pada
131634 }
131635 else
131636 {
131637 - /*Disable Pci Bridge ASPM*/
131638 + /*Disable Pci Bridge ASPM*/
131639 //NdisRawWritePortUlong(PCI_CONF_ADDRESS, pcicfg_addrport + (num4bytes << 2));
131640 //NdisRawWritePortUchar(PCI_CONF_DATA, pcibridge_linkctrlreg);
131641 pci_write_config_byte(bridge_pdev, pcipriv->pcibridge_pciehdr_offset + 0x10, pcibridge_linkctrlreg);
131642
131643 - DBG_8192C("rtw_pci_disable_aspm():PciBridge busnumber[%x], DevNumbe[%x], funcnumber[%x], Write reg[%x] = %x\n",
131644 - pcipriv->pcibridge_busnum, pcipriv->pcibridge_devnum,
131645 - pcipriv->pcibridge_funcnum,
131646 + DBG_871X("rtw_pci_disable_aspm():PciBridge busnumber[%x], DevNumbe[%x], funcnumber[%x], Write reg[%x] = %x\n",
131647 + pcipriv->pcibridge_busnum, pcipriv->pcibridge_devnum,
131648 + pcipriv->pcibridge_funcnum,
131649 (pcipriv->pcibridge_pciehdr_offset+0x10), pcibridge_linkctrlreg);
131650
131651 rtw_udelay_os(50);
131652 @@ -794,18 +792,18 @@ void rtw_pci_disable_aspm(_adapter *pada
131653
131654 }
131655
131656 -/*Enable RTL8192SE ASPM & Enable Pci Bridge ASPM for
131657 -power saving We should follow the sequence to enable
131658 +/*Enable RTL8192SE ASPM & Enable Pci Bridge ASPM for
131659 +power saving We should follow the sequence to enable
131660 RTL8192SE first then enable Pci Bridge ASPM
131661 or the system will show bluescreen.*/
131662 void rtw_pci_enable_aspm(_adapter *padapter)
131663 {
131664 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
131665 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
131666 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
131667 struct pci_dev *pdev = pdvobjpriv->ppcidev;
131668 struct pci_dev *bridge_pdev = pdev->bus->self;
131669 struct pci_priv *pcipriv = &(pdvobjpriv->pcipriv);
131670 - u16 aspmlevel = 0;
131671 + u16 aspmlevel = 0;
131672 u8 u_pcibridge_aspmsetting = 0;
131673 u8 u_device_aspmsetting = 0;
131674 u32 u_device_aspmsupportsetting = 0;
131675 @@ -816,11 +814,11 @@ void rtw_pci_enable_aspm(_adapter *padap
131676 return;
131677
131678 //When there exists anyone's BusNum, DevNum, and FuncNum that are set to 0xff,
131679 - // we do not execute any action and return. Added by tynli.
131680 + // we do not execute any action and return. Added by tynli.
131681 if( (pcipriv->busnumber == 0xff && pcipriv->devnumber == 0xff && pcipriv->funcnumber == 0xff) ||
131682 (pcipriv->pcibridge_busnum == 0xff && pcipriv->pcibridge_devnum == 0xff && pcipriv->pcibridge_funcnum == 0xff) )
131683 {
131684 - DBG_8192C("rtw_pci_enable_aspm(): Fail to enable ASPM. Cannot find the Bus of PCI(Bridge).\n");
131685 + DBG_871X("rtw_pci_enable_aspm(): Fail to enable ASPM. Cannot find the Bus of PCI(Bridge).\n");
131686 return;
131687 }
131688
131689 @@ -834,19 +832,19 @@ void rtw_pci_enable_aspm(_adapter *padap
131690 //NdisRawWritePortUlong((ULONG_PTR)PCI_CONF_ADDRESS , PciCfgAddrPort+(Num4Bytes << 2));
131691 //NdisRawReadPortUlong((ULONG_PTR)PCI_CONF_DATA,&uDeviceASPMSupportSetting);
131692 pci_read_config_dword(bridge_pdev, (pcipriv->pcibridge_pciehdr_offset+0x0C), &u_device_aspmsupportsetting);
131693 - DBG_8192C("rtw_pci_enable_aspm(): Bridge ASPM support %x \n",u_device_aspmsupportsetting);
131694 + DBG_871X("rtw_pci_enable_aspm(): Bridge ASPM support %x \n",u_device_aspmsupportsetting);
131695 if(((u_device_aspmsupportsetting & BIT(11)) != BIT(11)) || ((u_device_aspmsupportsetting & BIT(10)) != BIT(10)))
131696 {
131697 if(pdvobjpriv->const_devicepci_aspm_setting == 3)
131698 {
131699 - DBG_8192C("rtw_pci_enable_aspm(): Bridge not support L0S or L1\n");
131700 + DBG_871X("rtw_pci_enable_aspm(): Bridge not support L0S or L1\n");
131701 return;
131702 }
131703 else if(pdvobjpriv->const_devicepci_aspm_setting == 2)
131704 {
131705 if((u_device_aspmsupportsetting & BIT(11)) != BIT(11))
131706 {
131707 - DBG_8192C("rtw_pci_enable_aspm(): Bridge not support L1 \n");
131708 + DBG_871X("rtw_pci_enable_aspm(): Bridge not support L1 \n");
131709 return;
131710 }
131711 }
131712 @@ -854,7 +852,7 @@ void rtw_pci_enable_aspm(_adapter *padap
131713 {
131714 if((u_device_aspmsupportsetting & BIT(10)) != BIT(10))
131715 {
131716 - DBG_8192C("rtw_pci_enable_aspm(): Bridge not support L0s \n");
131717 + DBG_871X("rtw_pci_enable_aspm(): Bridge not support L0s \n");
131718 return;
131719 }
131720
131721 @@ -862,12 +860,12 @@ void rtw_pci_enable_aspm(_adapter *padap
131722 }
131723 else
131724 {
131725 - DBG_8192C("rtw_pci_enable_aspm(): Bridge support L0s and L1 \n");
131726 + DBG_871X("rtw_pci_enable_aspm(): Bridge support L0s and L1 \n");
131727 }
131728 }
131729
131730
131731 - /*Enable Pci Bridge ASPM*/
131732 + /*Enable Pci Bridge ASPM*/
131733 //PciCfgAddrPort = (pcipriv->pcibridge_busnum << 16)|(pcipriv->pcibridge_devnum<< 11) |(pcipriv->pcibridge_funcnum << 8)|(1 << 31);
131734 //Num4Bytes = (pcipriv->pcibridge_pciehdr_offset+0x10)/4;
131735 // set up address port at 0xCF8 offset field= 0 (dev|vend)
131736 @@ -884,14 +882,14 @@ void rtw_pci_enable_aspm(_adapter *padap
131737 //NdisRawWritePortUchar(PCI_CONF_DATA, u_pcibridge_aspmsetting);
131738 pci_write_config_byte(bridge_pdev, (pcipriv->pcibridge_pciehdr_offset+0x10), u_pcibridge_aspmsetting);
131739
131740 - DBG_8192C("PlatformEnableASPM():PciBridge busnumber[%x], DevNumbe[%x], funcnumber[%x], Write reg[%x] = %x\n",
131741 - pcipriv->pcibridge_busnum, pcipriv->pcibridge_devnum, pcipriv->pcibridge_funcnum,
131742 - (pcipriv->pcibridge_pciehdr_offset+0x10),
131743 + DBG_871X("PlatformEnableASPM():PciBridge busnumber[%x], DevNumbe[%x], funcnumber[%x], Write reg[%x] = %x\n",
131744 + pcipriv->pcibridge_busnum, pcipriv->pcibridge_devnum, pcipriv->pcibridge_funcnum,
131745 + (pcipriv->pcibridge_pciehdr_offset+0x10),
131746 u_pcibridge_aspmsetting);
131747
131748 rtw_udelay_os(50);
131749
131750 - /*Get ASPM level (with/without Clock Req)*/
131751 + /*Get ASPM level (with/without Clock Req)*/
131752 aspmlevel |= pdvobjpriv->const_devicepci_aspm_setting;
131753 u_device_aspmsetting = pcipriv->linkctrl_reg;
131754 u_device_aspmsetting |= aspmlevel; // device 43
131755 @@ -906,10 +904,9 @@ void rtw_pci_enable_aspm(_adapter *padap
131756 rtw_udelay_os(50);
131757 }
131758
131759 -static u8 rtw_pci_get_amd_l1_patch(_adapter *padapter)
131760 +static u8 rtw_pci_get_amd_l1_patch(struct dvobj_priv *dvobj)
131761 {
131762 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
131763 - struct pci_dev *pdev = pdvobjpriv->ppcidev;
131764 + struct pci_dev *pdev = dvobj->ppcidev;
131765 struct pci_dev *bridge_pdev = pdev->bus->self;
131766 u8 status = _FALSE;
131767 u8 offset_e0;
131768 @@ -934,15 +931,14 @@ static u8 rtw_pci_get_amd_l1_patch(_adap
131769 return status;
131770 }
131771
131772 -static void rtw_pci_get_linkcontrol_field(_adapter *padapter)
131773 +static void rtw_pci_get_linkcontrol_field(struct dvobj_priv *dvobj)
131774 {
131775 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
131776 - struct pci_priv *pcipriv = &(pdvobjpriv->pcipriv);
131777 - struct pci_dev *pdev = pdvobjpriv->ppcidev;
131778 + struct pci_priv *pcipriv = &(dvobj->pcipriv);
131779 + struct pci_dev *pdev = dvobj->ppcidev;
131780 struct pci_dev *bridge_pdev = pdev->bus->self;
131781 u8 capabilityoffset = pcipriv->pcibridge_pciehdr_offset;
131782 - u8 linkctrl_reg;
131783 -
131784 + u8 linkctrl_reg;
131785 +
131786 /*Read Link Control Register*/
131787 pci_read_config_byte(bridge_pdev, capabilityoffset + PCI_EXP_LNKCTL, &linkctrl_reg);
131788
131789 @@ -950,10 +946,10 @@ static void rtw_pci_get_linkcontrol_fiel
131790 }
131791 #endif
131792
131793 -static void rtw_pci_parse_configuration(struct pci_dev *pdev, _adapter *padapter)
131794 +static void rtw_pci_parse_configuration(struct dvobj_priv *dvobj)
131795 {
131796 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
131797 - struct pci_priv *pcipriv = &(pdvobjpriv->pcipriv);
131798 + struct pci_dev *pdev = dvobj->ppcidev;
131799 + struct pci_priv *pcipriv = &(dvobj->pcipriv);
131800 u8 tmp;
131801 int pos;
131802 u8 linkctrl_reg;
131803 @@ -963,7 +959,7 @@ static void rtw_pci_parse_configuration(
131804 pci_read_config_byte(pdev, pos + PCI_EXP_LNKCTL, &linkctrl_reg);
131805 pcipriv->linkctrl_reg = linkctrl_reg;
131806
131807 - //DBG_8192C("Link Control Register = %x\n", pcipriv->linkctrl_reg);
131808 + //DBG_871X("Link Control Register = %x\n", pcipriv->linkctrl_reg);
131809
131810 pci_read_config_byte(pdev, 0x98, &tmp);
131811 tmp |= BIT(4);
131812 @@ -978,7 +974,7 @@ static void rtw_pci_parse_configuration(
131813 //
131814 static void rtw_pci_update_default_setting(_adapter *padapter)
131815 {
131816 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
131817 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
131818 struct pci_priv *pcipriv = &(pdvobjpriv->pcipriv);
131819 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
131820
131821 @@ -986,8 +982,8 @@ static void rtw_pci_update_default_setti
131822 pwrpriv->reg_rfps_level = 0;
131823 pwrpriv->b_support_aspm = 0;
131824
131825 - // Dynamic Mechanism,
131826 - //pAdapter->HalFunc.SetHalDefVarHandler(pAdapter, HAL_DEF_INIT_GAIN, &(pDevice->InitGainState));
131827 + // Dynamic Mechanism,
131828 + //rtw_hal_set_def_var(pAdapter, HAL_DEF_INIT_GAIN, &(pDevice->InitGainState));
131829
131830 // Update PCI ASPM setting
131831 pwrpriv->const_amdpci_aspm = pdvobjpriv->const_amdpci_aspm;
131832 @@ -1056,7 +1052,7 @@ static void rtw_pci_update_default_setti
131833 pwrpriv->b_support_aspm = b_support_aspm;
131834
131835 /*if(pAdapter->MgntInfo.CustomerID == RT_CID_TOSHIBA &&
131836 - pcipriv->pcibridge_vendor == PCI_BRIDGE_VENDOR_AMD &&
131837 + pcipriv->pcibridge_vendor == PCI_BRIDGE_VENDOR_AMD &&
131838 !pcipriv->amd_l1_patch)
131839 b_support_backdoor = _FALSE;*/
131840
131841 @@ -1065,7 +1061,7 @@ static void rtw_pci_update_default_setti
131842 break;
131843
131844 case 2: // Set by Chipset.
131845 - // ASPM value set by chipset.
131846 + // ASPM value set by chipset.
131847 if (pcipriv->pcibridge_vendor == PCI_BRIDGE_VENDOR_INTEL) {
131848 u8 b_support_aspm = _TRUE;
131849 pwrpriv->b_support_aspm = b_support_aspm;
131850 @@ -1098,32 +1094,119 @@ static void rtw_pci_initialize_adapter_c
131851
131852 static irqreturn_t rtw_pci_interrupt(int irq, void *priv, struct pt_regs *regs)
131853 {
131854 - _adapter *padapter = (_adapter *)priv;
131855 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
131856 -
131857 + struct dvobj_priv *dvobj = (struct dvobj_priv *)priv;
131858 + _adapter *adapter = dvobj->if1;
131859
131860 - if (pdvobjpriv->irq_enabled == 0) {
131861 + if (dvobj->irq_enabled == 0) {
131862 return IRQ_HANDLED;
131863 }
131864
131865 - if(padapter->HalFunc.interrupt_handler(padapter) == _FAIL)
131866 + if(rtw_hal_interrupt_handler(adapter) == _FAIL)
131867 return IRQ_HANDLED;
131868 //return IRQ_NONE;
131869
131870 return IRQ_HANDLED;
131871 }
131872
131873 -static u32 pci_dvobj_init(_adapter *padapter)
131874 +#ifdef RTK_DMP_PLATFORM
131875 +#define pci_iounmap(x,y) iounmap(y)
131876 +#endif
131877 +
131878 +int pci_alloc_irq(struct dvobj_priv *dvobj)
131879 {
131880 - u32 status = _SUCCESS;
131881 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
131882 - struct pci_priv *pcipriv = &(pdvobjpriv->pcipriv);
131883 - struct pci_dev *pdev = pdvobjpriv->ppcidev;
131884 - struct pci_dev *bridge_pdev = pdev->bus->self;
131885 + int err;
131886 + struct pci_dev *pdev = dvobj->ppcidev;
131887 +
131888 +#if defined(IRQF_SHARED)
131889 + err = request_irq(pdev->irq, &rtw_pci_interrupt, IRQF_SHARED, DRV_NAME, dvobj);
131890 +#else
131891 + err = request_irq(pdev->irq, &rtw_pci_interrupt, SA_SHIRQ, DRV_NAME, dvobj);
131892 +#endif
131893 + if (err) {
131894 + DBG_871X("Error allocating IRQ %d",pdev->irq);
131895 + } else {
131896 + dvobj->irq_alloc = 1;
131897 + DBG_871X("Request_irq OK, IRQ %d\n",pdev->irq);
131898 + }
131899 +
131900 + return err?_FAIL:_SUCCESS;
131901 +}
131902 +
131903 +static struct dvobj_priv *pci_dvobj_init(struct pci_dev *pdev)
131904 +{
131905 + int err;
131906 + u32 status = _FAIL;
131907 + struct dvobj_priv *dvobj = NULL;
131908 + struct pci_priv *pcipriv = NULL;
131909 + struct pci_dev *bridge_pdev = pdev->bus->self;
131910 + unsigned long pmem_start, pmem_len, pmem_flags;
131911 u8 tmp;
131912
131913 _func_enter_;
131914
131915 + if ((dvobj = devobj_init()) == NULL) {
131916 + goto exit;
131917 + }
131918 + dvobj->ppcidev = pdev;
131919 + pcipriv = &(dvobj->pcipriv);
131920 + pci_set_drvdata(pdev, dvobj);
131921 +
131922 + if ( (err = pci_enable_device(pdev)) != 0) {
131923 + DBG_871X(KERN_ERR "%s : Cannot enable new PCI device\n", pci_name(pdev));
131924 + goto free_dvobj;
131925 + }
131926 +
131927 +#ifdef CONFIG_64BIT_DMA
131928 + if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
131929 + DBG_871X("RTL819xCE: Using 64bit DMA\n");
131930 + if ((err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64))) != 0) {
131931 + DBG_871X(KERN_ERR "Unable to obtain 64bit DMA for consistent allocations\n");
131932 + goto disable_picdev;
131933 + }
131934 + dvobj->bdma64 = _TRUE;
131935 + } else
131936 +#endif
131937 + {
131938 + if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
131939 + if ((err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32))) != 0) {
131940 + DBG_871X(KERN_ERR "Unable to obtain 32bit DMA for consistent allocations\n");
131941 + goto disable_picdev;
131942 + }
131943 + }
131944 + }
131945 +
131946 + pci_set_master(pdev);
131947 +
131948 + if ((err = pci_request_regions(pdev, DRV_NAME)) != 0) {
131949 + DBG_871X(KERN_ERR "Can't obtain PCI resources\n");
131950 + goto disable_picdev;
131951 + }
131952 + //MEM map
131953 + pmem_start = pci_resource_start(pdev, 2);
131954 + pmem_len = pci_resource_len(pdev, 2);
131955 + pmem_flags = pci_resource_flags(pdev, 2);
131956 +
131957 +#ifdef RTK_DMP_PLATFORM
131958 + dvobj->pci_mem_start = (unsigned long)ioremap_nocache(pmem_start, pmem_len);
131959 +#else
131960 + dvobj->pci_mem_start = (unsigned long)pci_iomap(pdev, 2, pmem_len); /* shared mem start */
131961 +#endif
131962 + if (dvobj->pci_mem_start == 0) {
131963 + DBG_871X(KERN_ERR "Can't map PCI mem\n");
131964 + goto release_regions;
131965 + }
131966 +
131967 + DBG_871X("Memory mapped space start: 0x%08lx len:%08lx flags:%08lx, after map:0x%08lx\n",
131968 + pmem_start, pmem_len, pmem_flags, dvobj->pci_mem_start);
131969 +
131970 + // Disable Clk Request */
131971 + pci_write_config_byte(pdev, 0x81, 0);
131972 + // leave D3 mode */
131973 + pci_write_config_byte(pdev, 0x44, 0);
131974 + pci_write_config_byte(pdev, 0x04, 0x06);
131975 + pci_write_config_byte(pdev, 0x04, 0x07);
131976 +
131977 +
131978 #if 1
131979 /*find bus info*/
131980 pcipriv->busnumber = pdev->bus->number;
131981 @@ -1137,7 +1220,7 @@ _func_enter_;
131982 for (tmp = 0; tmp < PCI_BRIDGE_VENDOR_MAX; tmp++) {
131983 if (bridge_pdev->vendor == pcibridge_vendors[tmp]) {
131984 pcipriv->pcibridge_vendor = tmp;
131985 - DBG_8192C("Pci Bridge Vendor is found index: %d, %x\n", tmp, pcibridge_vendors[tmp]);
131986 + DBG_871X("Pci Bridge Vendor is found index: %d, %x\n", tmp, pcibridge_vendors[tmp]);
131987 break;
131988 }
131989 }
131990 @@ -1155,15 +1238,15 @@ _func_enter_;
131991 pcipriv->pcibridge_pciehdr_offset = bridge_pdev->pcie_cap;
131992 #endif
131993
131994 - rtw_pci_get_linkcontrol_field(padapter);
131995 -
131996 + rtw_pci_get_linkcontrol_field(dvobj);
131997 +
131998 if (pcipriv->pcibridge_vendor == PCI_BRIDGE_VENDOR_AMD) {
131999 - pcipriv->amd_l1_patch = rtw_pci_get_amd_l1_patch(padapter);
132000 + pcipriv->amd_l1_patch = rtw_pci_get_amd_l1_patch(dvobj);
132001 }
132002 }
132003 #else
132004 //
132005 - // Find bridge related info.
132006 + // Find bridge related info.
132007 //
132008 rtw_get_pci_bus_info(padapter,
132009 pdev->vendor,
132010 @@ -1195,9 +1278,9 @@ _func_enter_;
132011 //
132012 // Allow the hardware to look at PCI config information.
132013 //
132014 - rtw_pci_parse_configuration(pdev, padapter);
132015 + rtw_pci_parse_configuration(dvobj);
132016
132017 - DBG_8192C("pcidev busnumber:devnumber:funcnumber:"
132018 + DBG_871X("pcidev busnumber:devnumber:funcnumber:"
132019 "vendor:link_ctl %d:%d:%d:%x:%x\n",
132020 pcipriv->busnumber,
132021 pcipriv->devnumber,
132022 @@ -1205,8 +1288,8 @@ _func_enter_;
132023 pdev->vendor,
132024 pcipriv->linkctrl_reg);
132025
132026 - DBG_8192C("pci_bridge busnumber:devnumber:funcnumber:vendor:"
132027 - "pcie_cap:link_ctl_reg: %d:%d:%d:%x:%x:%x:%x\n",
132028 + DBG_871X("pci_bridge busnumber:devnumber:funcnumber:vendor:"
132029 + "pcie_cap:link_ctl_reg: %d:%d:%d:%x:%x:%x:%x\n",
132030 pcipriv->pcibridge_busnum,
132031 pcipriv->pcibridge_devnum,
132032 pcipriv->pcibridge_funcnum,
132033 @@ -1215,38 +1298,61 @@ _func_enter_;
132034 pcipriv->pcibridge_linkctrlreg,
132035 pcipriv->amd_l1_patch);
132036
132037 - //.2
132038 - if ((rtw_init_io_priv(padapter)) == _FAIL)
132039 - {
132040 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,(" \n Can't init io_reqs\n"));
132041 - status = _FAIL;
132042 - }
132043 -
132044 - //.3
132045 - intf_read_chip_version(padapter);
132046 - //.4
132047 - intf_chip_configure(padapter);
132048 + status = _SUCCESS;
132049
132050 +iounmap:
132051 + if (status != _SUCCESS && dvobj->pci_mem_start != 0) {
132052 + pci_iounmap(pdev, (void *)dvobj->pci_mem_start);
132053 + dvobj->pci_mem_start = 0;
132054 + }
132055 +release_regions:
132056 + if (status != _SUCCESS)
132057 + pci_release_regions(pdev);
132058 +disable_picdev:
132059 + if (status != _SUCCESS)
132060 + pci_disable_device(pdev);
132061 +free_dvobj:
132062 + if (status != _SUCCESS && dvobj) {
132063 + pci_set_drvdata(pdev, NULL);
132064 + devobj_deinit(dvobj);
132065 + dvobj = NULL;
132066 + }
132067 +exit:
132068 _func_exit_;
132069 -
132070 - return status;
132071 + return dvobj;
132072 }
132073
132074 -static void pci_dvobj_deinit(_adapter * padapter)
132075 +static void pci_dvobj_deinit(struct pci_dev *pdev)
132076 {
132077 - //struct dvobj_priv *pdvobjpriv=&padapter->dvobjpriv;
132078 -
132079 + struct dvobj_priv *dvobj = pci_get_drvdata(pdev);
132080 _func_enter_;
132081
132082 + pci_set_drvdata(pdev, NULL);
132083 + if (dvobj) {
132084 + if (dvobj->irq_alloc) {
132085 + free_irq(pdev->irq, dvobj);
132086 + dvobj->irq_alloc = 0;
132087 + }
132088 +
132089 + if (dvobj->pci_mem_start != 0) {
132090 + pci_iounmap(pdev, (void *)dvobj->pci_mem_start);
132091 + dvobj->pci_mem_start = 0;
132092 + }
132093 +
132094 + devobj_deinit(dvobj);
132095 + }
132096 +
132097 + pci_release_regions(pdev);
132098 + pci_disable_device(pdev);
132099 +
132100 _func_exit_;
132101 }
132102
132103 -
132104 static void decide_chip_type_by_pci_device_id(_adapter *padapter, struct pci_dev *pdev)
132105 {
132106 u16 venderid, deviceid, irqline;
132107 u8 revisionid;
132108 - struct dvobj_priv *pdvobjpriv=&padapter->dvobjpriv;
132109 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
132110
132111
132112 venderid = pdev->vendor;
132113 @@ -1261,13 +1367,13 @@ static void decide_chip_type_by_pci_devi
132114
132115
132116 //
132117 - // Decide hardware type here.
132118 + // Decide hardware type here.
132119 //
132120 if( deviceid == HAL_HW_PCI_8185_DEVICE_ID ||
132121 deviceid == HAL_HW_PCI_8188_DEVICE_ID ||
132122 deviceid == HAL_HW_PCI_8198_DEVICE_ID)
132123 {
132124 - DBG_8192C("Adapter (8185/8185B) is found- VendorID/DeviceID=%x/%x\n", venderid, deviceid);
132125 + DBG_871X("Adapter (8185/8185B) is found- VendorID/DeviceID=%x/%x\n", venderid, deviceid);
132126 padapter->HardwareType=HARDWARE_TYPE_RTL8185;
132127 }
132128 else if (deviceid == HAL_HW_PCI_8190_DEVICE_ID ||
132129 @@ -1275,7 +1381,7 @@ static void decide_chip_type_by_pci_devi
132130 deviceid == HAL_HW_PCI_0046_DEVICE_ID ||
132131 deviceid == HAL_HW_PCI_DLINK_DEVICE_ID)
132132 {
132133 - DBG_8192C("Adapter(8190 PCI) is found - vendorid/deviceid=%x/%x\n", venderid, deviceid);
132134 + DBG_871X("Adapter(8190 PCI) is found - vendorid/deviceid=%x/%x\n", venderid, deviceid);
132135 padapter->HardwareType = HARDWARE_TYPE_RTL8190P;
132136 }
132137 else if (deviceid == HAL_HW_PCI_8192_DEVICE_ID ||
132138 @@ -1292,19 +1398,19 @@ static void decide_chip_type_by_pci_devi
132139 // Added for 92DE. We deferentiate it from SVID,SDID.
132140 if( pdev->subsystem_vendor == 0x10EC && pdev->subsystem_device == 0xE020){
132141 padapter->HardwareType = HARDWARE_TYPE_RTL8192DE;
132142 - DBG_8192C("Adapter(8192DE) is found - VendorID/DeviceID/RID=%X/%X/%X\n", venderid, deviceid, revisionid);
132143 + DBG_871X("Adapter(8192DE) is found - VendorID/DeviceID/RID=%X/%X/%X\n", venderid, deviceid, revisionid);
132144 }else{
132145 switch (revisionid) {
132146 case HAL_HW_PCI_REVISION_ID_8192PCIE:
132147 - DBG_8192C("Adapter(8192 PCI-E) is found - vendorid/deviceid=%x/%x\n", venderid, deviceid);
132148 + DBG_871X("Adapter(8192 PCI-E) is found - vendorid/deviceid=%x/%x\n", venderid, deviceid);
132149 padapter->HardwareType = HARDWARE_TYPE_RTL8192E;
132150 break;
132151 case HAL_HW_PCI_REVISION_ID_8192SE:
132152 - DBG_8192C("Adapter(8192SE) is found - vendorid/deviceid=%x/%x\n", venderid, deviceid);
132153 + DBG_871X("Adapter(8192SE) is found - vendorid/deviceid=%x/%x\n", venderid, deviceid);
132154 padapter->HardwareType = HARDWARE_TYPE_RTL8192SE;
132155 break;
132156 default:
132157 - DBG_8192C("Err: Unknown device - vendorid/deviceid=%x/%x\n", venderid, deviceid);
132158 + DBG_871X("Err: Unknown device - vendorid/deviceid=%x/%x\n", venderid, deviceid);
132159 padapter->HardwareType = HARDWARE_TYPE_RTL8192SE;
132160 break;
132161 }
132162 @@ -1312,25 +1418,25 @@ static void decide_chip_type_by_pci_devi
132163 }
132164 else if(deviceid==HAL_HW_PCI_8723E_DEVICE_ID )
132165 {//RTL8723E may have the same device ID with RTL8192CET
132166 - padapter->HardwareType = HARDWARE_TYPE_RTL8723E;
132167 - DBG_8192C("Adapter(8723 PCI-E) is found - VendorID/DeviceID=%x/%x\n", venderid, deviceid);
132168 + padapter->HardwareType = HARDWARE_TYPE_RTL8723AE;
132169 + DBG_871X("Adapter(8723 PCI-E) is found - VendorID/DeviceID=%x/%x\n", venderid, deviceid);
132170 }
132171 else if (deviceid == HAL_HW_PCI_8192CET_DEVICE_ID ||
132172 deviceid == HAL_HW_PCI_8192CE_DEVICE_ID ||
132173 deviceid == HAL_HW_PCI_8191CE_DEVICE_ID ||
132174 - deviceid == HAL_HW_PCI_8188CE_DEVICE_ID)
132175 + deviceid == HAL_HW_PCI_8188CE_DEVICE_ID)
132176 {
132177 - DBG_8192C("Adapter(8192C PCI-E) is found - vendorid/deviceid=%x/%x\n", venderid, deviceid);
132178 + DBG_871X("Adapter(8192C PCI-E) is found - vendorid/deviceid=%x/%x\n", venderid, deviceid);
132179 padapter->HardwareType = HARDWARE_TYPE_RTL8192CE;
132180 }
132181 else if (deviceid == HAL_HW_PCI_8192DE_DEVICE_ID ||
132182 deviceid == HAL_HW_PCI_002B_DEVICE_ID ){
132183 padapter->HardwareType = HARDWARE_TYPE_RTL8192DE;
132184 - DBG_8192C("Adapter(8192DE) is found - VendorID/DeviceID/RID=%X/%X/%X\n", venderid, deviceid, revisionid);
132185 + DBG_871X("Adapter(8192DE) is found - VendorID/DeviceID/RID=%X/%X/%X\n", venderid, deviceid, revisionid);
132186 }
132187 else
132188 {
132189 - DBG_8192C("Err: Unknown device - vendorid/deviceid=%x/%x\n", venderid, deviceid);
132190 + DBG_871X("Err: Unknown device - vendorid/deviceid=%x/%x\n", venderid, deviceid);
132191 //padapter->HardwareType = HAL_DEFAULT_HARDWARE_TYPE;
132192 }
132193
132194 @@ -1355,13 +1461,16 @@ static void pci_intf_start(_adapter *pad
132195 {
132196
132197 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("+pci_intf_start\n"));
132198 - DBG_8192C("+pci_intf_start\n");
132199 + DBG_871X("+pci_intf_start\n");
132200
132201 +#ifdef CONFIG_PCILED_BLINK
132202 + rtw_led_control(padapter, LED_CTL_NO_LINK);
132203 +#endif
132204 //Enable hw interrupt
132205 - padapter->HalFunc.enable_interrupt(padapter);
132206 + rtw_hal_enable_interrupt(padapter);
132207
132208 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-pci_intf_start\n"));
132209 - DBG_8192C("-pci_intf_start\n");
132210 + DBG_871X("-pci_intf_start\n");
132211 }
132212
132213 static void pci_intf_stop(_adapter *padapter)
132214 @@ -1373,13 +1482,27 @@ static void pci_intf_stop(_adapter *pada
132215 if(padapter->bSurpriseRemoved == _FALSE)
132216 {
132217 //device still exists, so driver can do i/o operation
132218 - padapter->HalFunc.disable_interrupt(padapter);
132219 + rtw_hal_disable_interrupt(padapter);
132220 + tasklet_disable(&(padapter->recvpriv.recv_tasklet));
132221 + tasklet_disable(&(padapter->recvpriv.irq_prepare_beacon_tasklet));
132222 + tasklet_disable(&(padapter->xmitpriv.xmit_tasklet));
132223 +
132224 +#ifdef CONFIG_CONCURRENT_MODE
132225 + /* This function only be called at driver removing. disable buddy_adapter too
132226 + don't disable interrupt of buddy_adapter because it is same as primary.
132227 + */
132228 + if (padapter->pbuddy_adapter){
132229 + tasklet_disable(&(padapter->pbuddy_adapter->recvpriv.recv_tasklet));
132230 + tasklet_disable(&(padapter->pbuddy_adapter->recvpriv.irq_prepare_beacon_tasklet));
132231 + tasklet_disable(&(padapter->pbuddy_adapter->xmitpriv.xmit_tasklet));
132232 + }
132233 +#endif
132234 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("pci_intf_stop: SurpriseRemoved==_FALSE\n"));
132235 }
132236 else
132237 {
132238 // Clear irq_enabled to prevent handle interrupt function.
132239 - padapter->dvobjpriv.irq_enabled = 0;
132240 + adapter_to_dvobj(padapter)->irq_enabled = 0;
132241 }
132242
132243 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-pci_intf_stop\n"));
132244 @@ -1395,25 +1518,13 @@ static void rtw_dev_unload(_adapter *pad
132245
132246 if(padapter->bup == _TRUE)
132247 {
132248 - DBG_8192C("+rtw_dev_unload\n");
132249 - //s1.
132250 -/* if(pnetdev)
132251 - {
132252 - netif_carrier_off(pnetdev);
132253 - netif_stop_queue(pnetdev);
132254 - }
132255 -
132256 - //s2.
132257 - //s2-1. issue rtw_disassoc_cmd to fw
132258 - rtw_disassoc_cmd(padapter);
132259 - //s2-2. indicate disconnect to os
132260 - rtw_indicate_disconnect(padapter);
132261 - //s2-3.
132262 - rtw_free_assoc_resources(padapter, 1);
132263 - //s2-4.
132264 - rtw_free_network_queue(padapter, _TRUE);*/
132265 + DBG_871X("+rtw_dev_unload\n");
132266
132267 padapter->bDriverStopped = _TRUE;
132268 + #ifdef CONFIG_XMIT_ACK
132269 + if (padapter->xmitpriv.ack_tx)
132270 + rtw_ack_tx_done(&padapter->xmitpriv, RTW_SCTX_DONE_DRV_STOP);
132271 + #endif
132272
132273 //s3.
132274 if(padapter->intf_stop)
132275 @@ -1428,7 +1539,7 @@ static void rtw_dev_unload(_adapter *pad
132276 //s5.
132277 if(padapter->bSurpriseRemoved == _FALSE)
132278 {
132279 - DBG_8192C("r871x_dev_unload()->rtl871x_hal_deinit()\n");
132280 + DBG_871X("r871x_dev_unload()->rtl871x_hal_deinit()\n");
132281 rtw_hal_deinit(padapter);
132282
132283 padapter->bSurpriseRemoved = _TRUE;
132284 @@ -1442,7 +1553,7 @@ static void rtw_dev_unload(_adapter *pad
132285 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("r871x_dev_unload():padapter->bup == _FALSE\n" ));
132286 }
132287
132288 - DBG_8192C("-rtw_dev_unload\n");
132289 + DBG_871X("-rtw_dev_unload\n");
132290
132291 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-rtw_dev_unload\n"));
132292
132293 @@ -1475,7 +1586,7 @@ static void disable_ht_for_spec_devid(co
132294
132295 #ifdef CONFIG_PM
132296 static int rtw_suspend(struct pci_dev *pdev, pm_message_t state)
132297 -{
132298 +{
132299 _func_enter_;
132300
132301
132302 @@ -1489,270 +1600,291 @@ static int rtw_resume(struct pci_dev *pd
132303
132304
132305 _func_exit_;
132306 -
132307 +
132308 return 0;
132309 }
132310 #endif
132311
132312 -#ifdef RTK_DMP_PLATFORM
132313 -#define pci_iounmap(x,y) iounmap(y)
132314 -#endif
132315 -
132316 -extern char* ifname;
132317 -
132318 -/*
132319 - * drv_init() - a device potentially for us
132320 - *
132321 - * notes: drv_init() is called when the bus driver has located a card for us to support.
132322 - * We accept the new device by returning 0.
132323 -*/
132324 -static int rtw_drv_init(struct pci_dev *pdev, const struct pci_device_id *pdid)
132325 +_adapter *rtw_pci_if1_init(struct dvobj_priv * dvobj, struct pci_dev *pdev,
132326 + const struct pci_device_id *pdid)
132327 {
132328 - int i, err = -ENODEV;
132329 -
132330 - uint status;
132331 _adapter *padapter = NULL;
132332 - struct dvobj_priv *pdvobjpriv;
132333 - struct net_device *pnetdev;
132334 - unsigned long pmem_start, pmem_len, pmem_flags;
132335 - u8 bdma64 = _FALSE;
132336 + struct net_device *pnetdev = NULL;
132337 + int status = _FAIL;
132338
132339 - RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("+rtw_drv_init\n"));
132340 - //DBG_8192C("+rtw_drv_init\n");
132341 -
132342 - err = pci_enable_device(pdev);
132343 - if (err) {
132344 - DBG_8192C(KERN_ERR "%s : Cannot enable new PCI device\n", pci_name(pdev));
132345 - return err;
132346 + if ((padapter = (_adapter *)rtw_zvmalloc(sizeof(*padapter))) == NULL) {
132347 + goto exit;
132348 }
132349 + padapter->dvobj = dvobj;
132350 + dvobj->if1 = padapter;
132351
132352 -#ifdef CONFIG_64BIT_DMA
132353 - if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
132354 - DBG_8192C("RTL819xCE: Using 64bit DMA\n");
132355 - if (pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64))) {
132356 - DBG_8192C(KERN_ERR "Unable to obtain 64bit DMA for consistent allocations\n");
132357 - err = -ENOMEM;
132358 - pci_disable_device(pdev);
132359 - return err;
132360 - }
132361 - bdma64 = _TRUE;
132362 - } else
132363 + padapter->bDriverStopped=_TRUE;
132364 +
132365 + dvobj->padapters[dvobj->iface_nums++] = padapter;
132366 + padapter->iface_id = IFACE_ID0;
132367 +
132368 +#if defined(CONFIG_CONCURRENT_MODE) || defined(CONFIG_DUALMAC_CONCURRENT)
132369 + //set adapter_type/iface type for primary padapter
132370 + padapter->isprimary = _TRUE;
132371 + padapter->adapter_type = PRIMARY_ADAPTER;
132372 + #ifndef CONFIG_HWPORT_SWAP
132373 + padapter->iface_type = IFACE_PORT0;
132374 + #else
132375 + padapter->iface_type = IFACE_PORT1;
132376 + #endif
132377 #endif
132378 - {
132379 - if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
132380 - if (pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32))) {
132381 - DBG_8192C(KERN_ERR "Unable to obtain 32bit DMA for consistent allocations\n");
132382 - err = -ENOMEM;
132383 - pci_disable_device(pdev);
132384 - return err;
132385 - }
132386 - }
132387 - }
132388 -
132389 - pci_set_master(pdev);
132390 -
132391 - //step 0.
132392 - disable_ht_for_spec_devid(pdid);
132393
132394 + //step 1-1., decide the chip_type via vid/pid
132395 + padapter->interface_type = RTW_PCIE;
132396 + decide_chip_type_by_pci_device_id(padapter, pdev);
132397
132398 - //step 1. set USB interface data
132399 - // init data
132400 - pnetdev = rtw_init_netdev(NULL);
132401 - if (!pnetdev){
132402 - err = -ENOMEM;
132403 - goto fail1;
132404 + if((pnetdev = rtw_init_netdev(padapter)) == NULL) {
132405 + goto free_adapter;
132406 }
132407 - rtw_init_netdev_name(pnetdev,ifname);
132408 -
132409 - if(bdma64){
132410 + if (dvobj->bdma64)
132411 pnetdev->features |= NETIF_F_HIGHDMA;
132412 - }
132413 -
132414 -#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)
132415 - SET_NETDEV_DEV(pnetdev, &pdev->dev);
132416 -#endif
132417 -
132418 + pnetdev->irq = pdev->irq;
132419 + SET_NETDEV_DEV(pnetdev, dvobj_to_dev(dvobj));
132420 padapter = rtw_netdev_priv(pnetdev);
132421 - pdvobjpriv = &padapter->dvobjpriv;
132422 - pdvobjpriv->padapter = padapter;
132423 - pdvobjpriv->ppcidev = pdev;
132424 -
132425 - // set data
132426 - pci_set_drvdata(pdev, pnetdev);
132427 -
132428 - err = pci_request_regions(pdev, DRV_NAME);
132429 - if (err) {
132430 - DBG_8192C(KERN_ERR "Can't obtain PCI resources\n");
132431 - goto fail1;
132432 - }
132433 - //MEM map
132434 - pmem_start = pci_resource_start(pdev, 2);
132435 - pmem_len = pci_resource_len(pdev, 2);
132436 - pmem_flags = pci_resource_flags(pdev, 2);
132437 -
132438 -#ifdef RTK_DMP_PLATFORM
132439 - pdvobjpriv->pci_mem_start = (unsigned long)ioremap_nocache( pmem_start, pmem_len);
132440 -#else
132441 - pdvobjpriv->pci_mem_start = (unsigned long)pci_iomap(pdev, 2, pmem_len); // shared mem start
132442 -#endif
132443 - if (pdvobjpriv->pci_mem_start == 0) {
132444 - DBG_8192C(KERN_ERR "Can't map PCI mem\n");
132445 - goto fail2;
132446 - }
132447 -
132448 - DBG_8192C("Memory mapped space start: 0x%08lx len:%08lx flags:%08lx, after map:0x%08lx\n",
132449 - pmem_start, pmem_len, pmem_flags, pdvobjpriv->pci_mem_start);
132450 -
132451 - // Disable Clk Request */
132452 - pci_write_config_byte(pdev, 0x81, 0);
132453 - // leave D3 mode */
132454 - pci_write_config_byte(pdev, 0x44, 0);
132455 - pci_write_config_byte(pdev, 0x04, 0x06);
132456 - pci_write_config_byte(pdev, 0x04, 0x07);
132457 -
132458
132459 - //set interface_type to usb
132460 - padapter->interface_type = RTW_PCIE;
132461 -
132462 - //step 1-1., decide the chip_type via vid/pid
132463 - decide_chip_type_by_pci_device_id(padapter, pdev);
132464 -
132465 - //step 2.
132466 - if(padapter->chip_type== RTL8188C_8192C)
132467 - {
132468 -#ifdef CONFIG_RTL8192C
132469 + //step 2. hook HalFunc, allocate HalData
132470 + if (padapter->chip_type == RTL8188C_8192C) {
132471 + #ifdef CONFIG_RTL8192C
132472 rtl8192ce_set_hal_ops(padapter);
132473 -#endif
132474 - }
132475 - else if(padapter->chip_type == RTL8192D)
132476 - {
132477 -#ifdef CONFIG_RTL8192D
132478 + #endif
132479 + } else if (padapter->chip_type == RTL8192D) {
132480 + #ifdef CONFIG_RTL8192D
132481 rtl8192de_set_hal_ops(padapter);
132482 -#endif
132483 - }
132484 - else
132485 - {
132486 - status = _FAIL;
132487 - goto error;
132488 + #endif
132489 + } else {
132490 + DBG_871X("Detect NULL_CHIP_TYPE\n");
132491 + goto free_hal_data;
132492 }
132493
132494 - //step 3. initialize the dvobj_priv
132495 - padapter->dvobj_init=&pci_dvobj_init;
132496 - padapter->dvobj_deinit=&pci_dvobj_deinit;
132497 + //step 3. initialize the dvobj_priv
132498 padapter->intf_start=&pci_intf_start;
132499 padapter->intf_stop=&pci_intf_stop;
132500
132501 - if (padapter->dvobj_init == NULL){
132502 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("\n Initialize dvobjpriv.dvobj_init error!!!\n"));
132503 - goto error;
132504 - }
132505
132506 - status = padapter->dvobj_init(padapter);
132507 - if (status != _SUCCESS) {
132508 - RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("initialize device object priv Failed!\n"));
132509 - goto error;
132510 + //.2
132511 + if ((rtw_init_io_priv(padapter, pci_set_intf_ops)) == _FAIL) {
132512 + RT_TRACE(_module_hci_intfs_c_,_drv_err_,(" \n Can't init io_reqs\n"));
132513 + goto free_hal_data;
132514 }
132515
132516 - pnetdev->irq = pdev->irq;
132517 + //.3
132518 + rtw_hal_read_chip_version(padapter);
132519 +
132520 + //.4
132521 + rtw_hal_chip_configure(padapter);
132522
132523 //step 4. read efuse/eeprom data and get mac_addr
132524 - intf_read_chip_info(padapter);
132525 + rtw_hal_read_chip_info(padapter);
132526
132527 - //step 5.
132528 - status = rtw_init_drv_sw(padapter);
132529 - if(status ==_FAIL){
132530 + if (rtw_handle_dualmac(padapter, 1) != _SUCCESS)
132531 + goto free_hal_data;
132532 +
132533 +#ifdef CONFIG_IOCTL_CFG80211
132534 + if(rtw_wdev_alloc(padapter, dvobj_to_dev(dvobj)) != 0) {
132535 + goto handle_dualmac;
132536 + }
132537 +#endif
132538 +
132539 + //step 5.
132540 + if (rtw_init_drv_sw(padapter) == _FAIL) {
132541 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("Initialize driver software resource Failed!\n"));
132542 - goto error;
132543 + goto free_wdev;
132544 }
132545
132546 - status = padapter->HalFunc.inirp_init(padapter);
132547 + status = rtw_hal_inirp_init(padapter);
132548 if(status ==_FAIL){
132549 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("Initialize PCI desc ring Failed!\n"));
132550 - goto error;
132551 + goto free_drv_sw;
132552 }
132553
132554 rtw_macaddr_cfg(padapter->eeprompriv.mac_addr);
132555 + rtw_init_wifidirect_addrs(padapter, padapter->eeprompriv.mac_addr, padapter->eeprompriv.mac_addr);
132556
132557 - _rtw_memcpy(pnetdev->dev_addr, padapter->eeprompriv.mac_addr, ETH_ALEN);
132558 - DBG_8192C("MAC Address from pnetdev->dev_addr= "MAC_FMT"\n", MAC_ARG(pnetdev->dev_addr));
132559
132560 -
132561 - padapter->HalFunc.disable_interrupt(padapter);
132562 -
132563 -#if defined(IRQF_SHARED)
132564 - err = request_irq(pdev->irq, &rtw_pci_interrupt, IRQF_SHARED, DRV_NAME, padapter);
132565 -#else
132566 - err = request_irq(pdev->irq, &rtw_pci_interrupt, SA_SHIRQ, DRV_NAME, padapter);
132567 -#endif
132568 - if (err) {
132569 - DBG_8192C("Error allocating IRQ %d",pdev->irq);
132570 - goto error;
132571 - } else {
132572 - pdvobjpriv->irq_alloc = 1;
132573 - DBG_8192C("Request_irq OK, IRQ %d\n",pdev->irq);
132574 - }
132575 + rtw_hal_disable_interrupt(padapter);
132576
132577 //step 6. Init pci related configuration
132578 rtw_pci_initialize_adapter_common(padapter);
132579
132580 - //step 7.
132581 - /* Tell the network stack we exist */
132582 - if (register_netdev(pnetdev) != 0) {
132583 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("register_netdev() failed\n"));
132584 - goto error;
132585 + DBG_871X("bDriverStopped:%d, bSurpriseRemoved:%d, bup:%d, hw_init_completed:%d\n"
132586 + ,padapter->bDriverStopped
132587 + ,padapter->bSurpriseRemoved
132588 + ,padapter->bup
132589 + ,padapter->hw_init_completed
132590 + );
132591 +
132592 + status = _SUCCESS;
132593 +
132594 +inirp_deinit:
132595 + if (status != _SUCCESS)
132596 + rtw_hal_inirp_deinit(padapter);
132597 +free_drv_sw:
132598 + if (status != _SUCCESS)
132599 + rtw_free_drv_sw(padapter);
132600 +free_wdev:
132601 + if (status != _SUCCESS) {
132602 + #ifdef CONFIG_IOCTL_CFG80211
132603 + rtw_wdev_unregister(padapter->rtw_wdev);
132604 + rtw_wdev_free(padapter->rtw_wdev);
132605 + #endif
132606 + }
132607 +handle_dualmac:
132608 + if (status != _SUCCESS)
132609 + rtw_handle_dualmac(padapter, 0);
132610 +free_hal_data:
132611 + if (status != _SUCCESS && padapter->HalData)
132612 + rtw_mfree(padapter->HalData, sizeof(*(padapter->HalData)));
132613 +free_adapter:
132614 + if (status != _SUCCESS) {
132615 + if (pnetdev)
132616 + rtw_free_netdev(pnetdev);
132617 + else if (padapter)
132618 + rtw_vmfree((u8*)padapter, sizeof(*padapter));
132619 + padapter = NULL;
132620 }
132621 +exit:
132622 + return padapter;
132623 +}
132624
132625 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-drv_init - Adapter->bDriverStopped=%d, Adapter->bSurpriseRemoved=%d\n",padapter->bDriverStopped, padapter->bSurpriseRemoved));
132626 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-871x_drv - drv_init, success!\n"));
132627 - //DBG_8192C("-871x_drv - drv_init, success!\n");
132628 +static void rtw_pci_if1_deinit(_adapter *if1)
132629 +{
132630 + struct net_device *pnetdev = if1->pnetdev;
132631 + struct mlme_priv *pmlmepriv= &if1->mlmepriv;
132632
132633 -#ifdef CONFIG_PROC_DEBUG
132634 -#ifdef RTK_DMP_PLATFORM
132635 - rtw_proc_init_one(pnetdev);
132636 -#endif
132637 -#endif
132638 + // padapter->intf_stop(padapter);
132639
132640 -#ifdef CONFIG_HOSTAPD_MLME
132641 - hostapd_mode_init(padapter);
132642 + if(check_fwstate(pmlmepriv, _FW_LINKED))
132643 + rtw_disassoc_cmd(if1, 0, _FALSE);
132644 +
132645 +#ifdef CONFIG_AP_MODE
132646 + free_mlme_ap_info(if1);
132647 + #ifdef CONFIG_HOSTAPD_MLME
132648 + hostapd_mode_unload(if1);
132649 + #endif
132650 #endif
132651
132652 + rtw_cancel_all_timer(if1);
132653 +#ifdef CONFIG_WOWLAN
132654 + if1->pwrctrlpriv.wowlan_mode=_FALSE;
132655 +#endif //CONFIG_WOWLAN
132656 + rtw_dev_unload(if1);
132657 +
132658 + DBG_871X("%s, hw_init_completed=%d\n", __func__, if1->hw_init_completed);
132659 +
132660 + //s6.
132661 + rtw_handle_dualmac(if1, 0);
132662 +
132663 +#ifdef CONFIG_IOCTL_CFG80211
132664 + if (if1->rtw_wdev)
132665 + rtw_wdev_free(if1->rtw_wdev);
132666 +#endif //CONFIG_IOCTL_CFG80211
132667 +
132668 + rtw_hal_inirp_deinit(if1);
132669 + rtw_free_drv_sw(if1);
132670 +
132671 + if(pnetdev)
132672 + rtw_free_netdev(pnetdev);
132673 +
132674 #ifdef CONFIG_PLATFORM_RTD2880B
132675 - DBG_8192C("wlan link up\n");
132676 - rtd2885_wlan_netlink_sendMsg("linkup", "8712");
132677 + DBG_871X("wlan link down\n");
132678 + rtd2885_wlan_netlink_sendMsg("linkdown", "8712");
132679 #endif
132680 +}
132681
132682 - return 0;
132683 +/*
132684 + * drv_init() - a device potentially for us
132685 + *
132686 + * notes: drv_init() is called when the bus driver has located a card for us to support.
132687 + * We accept the new device by returning 0.
132688 +*/
132689 +static int rtw_drv_init(struct pci_dev *pdev, const struct pci_device_id *did)
132690 +{
132691 + int i, err = -ENODEV;
132692
132693 -error:
132694 + int status;
132695 + _adapter *if1 = NULL, *if2 = NULL;
132696 + struct dvobj_priv *dvobj;
132697
132698 - pci_set_drvdata(pdev, NULL);
132699 + RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("+rtw_drv_init\n"));
132700 +
132701 + //step 0.
132702 + disable_ht_for_spec_devid(did);
132703
132704 - if (pdvobjpriv->irq_alloc) {
132705 - free_irq(pdev->irq, padapter);
132706 - pdvobjpriv->irq_alloc = 0;
132707 + /* Initialize dvobj_priv */
132708 + if ((dvobj = pci_dvobj_init(pdev)) == NULL) {
132709 + RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("initialize device object priv Failed!\n"));
132710 + goto exit;
132711 }
132712
132713 - if (pdvobjpriv->pci_mem_start != 0) {
132714 - pci_iounmap(pdev, (void *)pdvobjpriv->pci_mem_start);
132715 + /* Initialize if1 */
132716 + if ((if1 = rtw_pci_if1_init(dvobj, pdev, did)) == NULL) {
132717 + DBG_871X("rtw_pci_if1_init Failed!\n");
132718 + goto free_dvobj;
132719 }
132720
132721 - pci_dvobj_deinit(padapter);
132722 + /* Initialize if2 */
132723 +#ifdef CONFIG_CONCURRENT_MODE
132724 + if((if2 = rtw_drv_if2_init(if1, pci_set_intf_ops)) == NULL) {
132725 + goto free_if1;
132726 + }
132727 +#endif
132728
132729 - if (pnetdev)
132730 - {
132731 - //unregister_netdev(pnetdev);
132732 - rtw_free_netdev(pnetdev);
132733 +#ifdef CONFIG_GLOBAL_UI_PID
132734 + if (ui_pid[1]!=0) {
132735 + DBG_871X("ui_pid[1]:%d\n",ui_pid[1]);
132736 + rtw_signal_process(ui_pid[1], SIGUSR2);
132737 + }
132738 +#endif
132739 +
132740 + //dev_alloc_name && register_netdev
132741 + if((status = rtw_drv_register_netdev(if1)) != _SUCCESS) {
132742 + goto free_if1;
132743 }
132744
132745 -fail2:
132746 - pci_release_regions(pdev);
132747 +#ifdef CONFIG_HOSTAPD_MLME
132748 + hostapd_mode_init(if1);
132749 +#endif
132750
132751 -fail1:
132752 - pci_disable_device(pdev);
132753 +#ifdef CONFIG_PLATFORM_RTD2880B
132754 + DBG_871X("wlan link up\n");
132755 + rtd2885_wlan_netlink_sendMsg("linkup", "8712");
132756 +#endif
132757
132758 - DBG_8192C("-871x_pci - drv_init, fail!\n");
132759 +#ifdef RTK_DMP_PLATFORM
132760 + rtw_proc_init_one(if1->pnetdev);
132761 +#endif
132762 +
132763 +
132764 + /* alloc irq */
132765 + if (pci_alloc_irq(dvobj) != _SUCCESS)
132766 + goto free_if2;
132767 +
132768 + RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-871x_drv - drv_init, success!\n"));
132769 + //DBG_871X("-871x_drv - drv_init, success!\n");
132770
132771 - return err;
132772 + status = _SUCCESS;
132773 +
132774 +free_if2:
132775 + if(status != _SUCCESS && if2) {
132776 + #ifdef CONFIG_CONCURRENT_MODE
132777 + rtw_drv_if2_stop(if2);
132778 + rtw_drv_if2_free(if2);
132779 + #endif
132780 + }
132781 +free_if1:
132782 + if (status != _SUCCESS && if1) {
132783 + rtw_pci_if1_deinit(if1);
132784 + }
132785 +free_dvobj:
132786 + if (status != _SUCCESS)
132787 + pci_dvobj_deinit(pdev);
132788 +exit:
132789 + return status == _SUCCESS?0:-ENODEV;
132790 }
132791
132792 /*
132793 @@ -1761,100 +1893,67 @@ fail1:
132794 //rmmod module & unplug(SurpriseRemoved) will call r871xu_dev_remove() => how to recognize both
132795 static void rtw_dev_remove(struct pci_dev *pdev)
132796 {
132797 - struct net_device *pnetdev=pci_get_drvdata(pdev);
132798 - _adapter *padapter = (_adapter*)rtw_netdev_priv(pnetdev);
132799 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
132800 + struct dvobj_priv *pdvobjpriv = pci_get_drvdata(pdev);
132801 + _adapter *padapter = pdvobjpriv->if1;
132802 + struct net_device *pnetdev = padapter->pnetdev;
132803
132804 _func_exit_;
132805
132806 + DBG_871X("+rtw_dev_remove\n");
132807 +
132808 + pdvobjpriv->processing_dev_remove = _TRUE;
132809 +
132810 if (unlikely(!padapter)) {
132811 return;
132812 }
132813
132814 - DBG_8192C("+rtw_dev_remove\n");
132815 -
132816 -#if defined(CONFIG_HAS_EARLYSUSPEND ) || defined(CONFIG_ANDROID_POWER)
132817 - rtw_unregister_early_suspend(&padapter->pwrctrlpriv);
132818 -#endif
132819 + rtw_unregister_netdevs(pdvobjpriv);
132820
132821 - LeaveAllPowerSaveMode(padapter);
132822 -
132823 -#ifdef RTK_DMP_PLATFORM
132824 + #if 0
132825 +#ifdef RTK_DMP_PLATFORM
132826 padapter->bSurpriseRemoved = _FALSE; // always trate as device exists
132827 - // this will let the driver to disable it's interrupt
132828 -#else
132829 - if(drvpriv.drv_registered == _TRUE)
132830 + // this will let the driver to disable it's interrupt
132831 +#else
132832 + if(pci_drvpriv.drv_registered == _TRUE)
132833 {
132834 - //DBG_8192C("r871xu_dev_remove():padapter->bSurpriseRemoved == _TRUE\n");
132835 + //DBG_871X("r871xu_dev_remove():padapter->bSurpriseRemoved == _TRUE\n");
132836 padapter->bSurpriseRemoved = _TRUE;
132837 }
132838 /*else
132839 {
132840 - //DBG_8192C("r871xu_dev_remove():module removed\n");
132841 + //DBG_871X("r871xu_dev_remove():module removed\n");
132842 padapter->hw_init_completed = _FALSE;
132843 }*/
132844 #endif
132845 + #endif
132846
132847 -
132848 -#ifdef CONFIG_AP_MODE
132849 - free_mlme_ap_info(padapter);
132850 -#ifdef CONFIG_HOSTAPD_MLME
132851 - hostapd_mode_unload(padapter);
132852 -#endif //CONFIG_HOSTAPD_MLME
132853 -#endif //CONFIG_AP_MODE
132854 -
132855 - if(pnetdev){
132856 - unregister_netdev(pnetdev); //will call netdev_close()
132857 -#ifdef CONFIG_PROC_DEBUG
132858 - rtw_proc_remove_one(pnetdev);
132859 +#if defined(CONFIG_HAS_EARLYSUSPEND) || defined(CONFIG_ANDROID_POWER)
132860 + rtw_unregister_early_suspend(&padapter->pwrctrlpriv);
132861 #endif
132862 - }
132863 -
132864 - rtw_cancel_all_timer(padapter);
132865
132866 - rtw_dev_unload(padapter);
132867 + rtw_pm_set_ips(padapter, IPS_NONE);
132868 + rtw_pm_set_lps(padapter, PS_MODE_ACTIVE);
132869
132870 - DBG_8192C("+r871xu_dev_remove, hw_init_completed=%d\n", padapter->hw_init_completed);
132871 -
132872 - if (pdvobjpriv->irq_alloc) {
132873 - free_irq(pdev->irq, padapter);
132874 - pdvobjpriv->irq_alloc = 0;
132875 - }
132876 + LeaveAllPowerSaveMode(padapter);
132877
132878 - if (pdvobjpriv->pci_mem_start != 0) {
132879 - pci_iounmap(pdev, (void *)pdvobjpriv->pci_mem_start);
132880 - pci_release_regions(pdev);
132881 - }
132882 + rtw_hal_disable_interrupt(padapter);
132883
132884 - pci_disable_device(pdev);
132885 - pci_set_drvdata(pdev, NULL);
132886 +#ifdef CONFIG_CONCURRENT_MODE
132887 + rtw_drv_if2_stop(pdvobjpriv->if2);
132888 +#endif //CONFIG_CONCURRENT_MODE
132889
132890 - padapter->HalFunc.inirp_deinit(padapter);
132891 - //s6.
132892 - if(padapter->dvobj_deinit)
132893 - {
132894 - padapter->dvobj_deinit(padapter);
132895 - }
132896 - else
132897 - {
132898 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("Initialize hcipriv.hci_priv_init error!!!\n"));
132899 - }
132900 -
132901 - rtw_free_drv_sw(padapter);
132902 + rtw_pci_if1_deinit(padapter);
132903
132904 - //after rtw_free_drv_sw(), padapter has beed freed, don't refer to it.
132905 +#ifdef CONFIG_CONCURRENT_MODE
132906 + rtw_drv_if2_free(pdvobjpriv->if2);
132907 +#endif
132908
132909 - DBG_8192C("-r871xu_dev_remove, done\n");
132910 + pci_dvobj_deinit(pdev);
132911
132912 -#ifdef CONFIG_PLATFORM_RTD2880B
132913 - DBG_8192C("wlan link down\n");
132914 - rtd2885_wlan_netlink_sendMsg("linkdown", "8712");
132915 -#endif
132916 + DBG_871X("-r871xu_dev_remove, done\n");
132917
132918 _func_exit_;
132919 -
132920 return;
132921 -
132922 }
132923
132924
132925 @@ -1863,10 +1962,13 @@ static int __init rtw_drv_entry(void)
132926 int ret = 0;
132927
132928 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("+rtw_drv_entry\n"));
132929 - DBG_871X("rtw driver version=%s \n", DRIVERVERSION);
132930 + DBG_871X("rtw driver version=%s\n", DRIVERVERSION);
132931 DBG_871X("Build at: %s %s\n", __DATE__, __TIME__);
132932 - drvpriv.drv_registered = _TRUE;
132933 - ret = pci_register_driver(&drvpriv.rtw_pci_drv);
132934 + pci_drvpriv.drv_registered = _TRUE;
132935 +
132936 + rtw_suspend_lock_init();
132937 +
132938 + ret = pci_register_driver(&pci_drvpriv.rtw_pci_drv);
132939 if (ret) {
132940 RT_TRACE(_module_hci_intfs_c_, _drv_err_, (": No device found\n"));
132941 }
132942 @@ -1877,10 +1979,16 @@ static int __init rtw_drv_entry(void)
132943 static void __exit rtw_drv_halt(void)
132944 {
132945 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("+rtw_drv_halt\n"));
132946 - DBG_8192C("+rtw_drv_halt\n");
132947 - drvpriv.drv_registered = _FALSE;
132948 - pci_unregister_driver(&drvpriv.rtw_pci_drv);
132949 - DBG_8192C("-rtw_drv_halt\n");
132950 + DBG_871X("+rtw_drv_halt\n");
132951 +
132952 + pci_drvpriv.drv_registered = _FALSE;
132953 +
132954 + pci_unregister_driver(&pci_drvpriv.rtw_pci_drv);
132955 +
132956 + rtw_suspend_lock_uninit();
132957 + DBG_871X("-rtw_drv_halt\n");
132958 +
132959 + rtw_mstat_dump();
132960 }
132961
132962
132963 --- /dev/null
132964 +++ b/drivers/net/wireless/rtl8192cu/os_dep/linux/pci_ops_linux.c
132965 @@ -0,0 +1,24 @@
132966 +/******************************************************************************
132967 + *
132968 + * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
132969 + *
132970 + * This program is free software; you can redistribute it and/or modify it
132971 + * under the terms of version 2 of the GNU General Public License as
132972 + * published by the Free Software Foundation.
132973 + *
132974 + * This program is distributed in the hope that it will be useful, but WITHOUT
132975 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
132976 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
132977 + * more details.
132978 + *
132979 + * You should have received a copy of the GNU General Public License along with
132980 + * this program; if not, write to the Free Software Foundation, Inc.,
132981 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
132982 + *
132983 + *******************************************************************************/
132984 +#define _PCI_OPS_LINUX_C_
132985 +
132986 +#include <drv_types.h>
132987 +
132988 +
132989 +
132990 --- a/drivers/net/wireless/rtl8192cu/os_dep/linux/recv_linux.c
132991 +++ b/drivers/net/wireless/rtl8192cu/os_dep/linux/recv_linux.c
132992 @@ -1,7 +1,7 @@
132993 /******************************************************************************
132994 *
132995 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
132996 - *
132997 + *
132998 * This program is free software; you can redistribute it and/or modify it
132999 * under the terms of version 2 of the GNU General Public License as
133000 * published by the Free Software Foundation.
133001 @@ -35,7 +35,7 @@
133002
133003 //init os related resource in struct recv_priv
133004 int rtw_os_recv_resource_init(struct recv_priv *precvpriv, _adapter *padapter)
133005 -{
133006 +{
133007 int res=_SUCCESS;
133008
133009 return res;
133010 @@ -43,7 +43,7 @@ int rtw_os_recv_resource_init(struct rec
133011
133012 //alloc os related resource in union recv_frame
133013 int rtw_os_recv_resource_alloc(_adapter *padapter, union recv_frame *precvframe)
133014 -{
133015 +{
133016 int res=_SUCCESS;
133017
133018 precvframe->u.hdr.pkt_newalloc = precvframe->u.hdr.pkt = NULL;
133019 @@ -64,8 +64,8 @@ int rtw_os_recvbuf_resource_alloc(_adapt
133020 {
133021 int res=_SUCCESS;
133022
133023 -#ifdef CONFIG_USB_HCI
133024 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
133025 +#ifdef CONFIG_USB_HCI
133026 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
133027 struct usb_device *pusbd = pdvobjpriv->pusbdev;
133028
133029 precvbuf->irp_pending = _FALSE;
133030 @@ -85,9 +85,9 @@ int rtw_os_recvbuf_resource_alloc(_adapt
133031 precvbuf->transfer_len = 0;
133032
133033 precvbuf->len = 0;
133034 -
133035 +
133036 #ifdef CONFIG_USE_USB_BUFFER_ALLOC_RX
133037 - precvbuf->pallocated_buf = rtw_usb_buffer_alloc(pusbd, (size_t)precvbuf->alloc_sz, GFP_ATOMIC, &precvbuf->dma_transfer_addr);
133038 + precvbuf->pallocated_buf = rtw_usb_buffer_alloc(pusbd, (size_t)precvbuf->alloc_sz, &precvbuf->dma_transfer_addr);
133039 precvbuf->pbuf = precvbuf->pallocated_buf;
133040 if(precvbuf->pallocated_buf == NULL)
133041 return _FAIL;
133042 @@ -95,18 +95,7 @@ int rtw_os_recvbuf_resource_alloc(_adapt
133043
133044 #endif //CONFIG_USB_HCI
133045
133046 -
133047 -#ifdef CONFIG_SDIO_HCI
133048 - precvbuf->pskb = NULL;
133049 -
133050 - precvbuf->pallocated_buf = precvbuf->pbuf = NULL;
133051 -
133052 - precvbuf->pdata = precvbuf->phead = precvbuf->ptail = precvbuf->pend = NULL;
133053 -
133054 - precvbuf->len = 0;
133055 -#endif
133056 return res;
133057 -
133058 }
133059
133060 //free os related resource in struct recv_buf
133061 @@ -118,7 +107,7 @@ int rtw_os_recvbuf_resource_free(_adapte
133062
133063 #ifdef CONFIG_USE_USB_BUFFER_ALLOC_RX
133064
133065 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
133066 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
133067 struct usb_device *pusbd = pdvobjpriv->pusbdev;
133068
133069 rtw_usb_buffer_free(pusbd, (size_t)precvbuf->alloc_sz, precvbuf->pallocated_buf, precvbuf->dma_transfer_addr);
133070 @@ -132,13 +121,13 @@ int rtw_os_recvbuf_resource_free(_adapte
133071 //usb_kill_urb(precvbuf->purb);
133072 usb_free_urb(precvbuf->purb);
133073 }
133074 -
133075 +
133076 #endif //CONFIG_USB_HCI
133077
133078
133079 if(precvbuf->pskb)
133080 - dev_kfree_skb_any(precvbuf->pskb);
133081 -
133082 + rtw_skb_free(precvbuf->pskb);
133083 +
133084
133085 return ret;
133086
133087 @@ -151,10 +140,10 @@ void rtw_handle_tkip_mic_err(_adapter *p
133088 #endif
133089 union iwreq_data wrqu;
133090 struct iw_michaelmicfailure ev;
133091 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
133092 - struct security_priv *psecuritypriv = &padapter->securitypriv;
133093 + struct mlme_priv* pmlmepriv = &padapter->mlmepriv;
133094 + struct security_priv *psecuritypriv = &padapter->securitypriv;
133095 u32 cur_time = 0;
133096 -
133097 +
133098 if( psecuritypriv->last_mic_err_time == 0 )
133099 {
133100 psecuritypriv->last_mic_err_time = rtw_get_current_time();
133101 @@ -192,11 +181,11 @@ void rtw_handle_tkip_mic_err(_adapter *p
133102 _rtw_memset( &ev, 0x00, sizeof( ev ) );
133103 if ( bgroup )
133104 {
133105 - ev.flags |= IW_MICFAILURE_GROUP;
133106 + ev.flags |= IW_MICFAILURE_GROUP;
133107 }
133108 else
133109 {
133110 - ev.flags |= IW_MICFAILURE_PAIRWISE;
133111 + ev.flags |= IW_MICFAILURE_PAIRWISE;
133112 }
133113
133114 ev.src_addr.sa_family = ARPHRD_ETHER;
133115 @@ -210,47 +199,47 @@ void rtw_handle_tkip_mic_err(_adapter *p
133116
133117 void rtw_hostapd_mlme_rx(_adapter *padapter, union recv_frame *precv_frame)
133118 {
133119 -#ifdef CONFIG_HOSTAPD_MLME
133120 +#ifdef CONFIG_HOSTAPD_MLME
133121 _pkt *skb;
133122 struct hostapd_priv *phostapdpriv = padapter->phostapdpriv;
133123 struct net_device *pmgnt_netdev = phostapdpriv->pmgnt_netdev;
133124 -
133125 +
133126 RT_TRACE(_module_recv_osdep_c_, _drv_info_, ("+rtw_hostapd_mlme_rx\n"));
133127 -
133128 - skb = precv_frame->u.hdr.pkt;
133129 -
133130 - if (skb == NULL)
133131 +
133132 + skb = precv_frame->u.hdr.pkt;
133133 +
133134 + if (skb == NULL)
133135 return;
133136 -
133137 +
133138 skb->data = precv_frame->u.hdr.rx_data;
133139 - skb->tail = precv_frame->u.hdr.rx_tail;
133140 + skb->tail = precv_frame->u.hdr.rx_tail;
133141 skb->len = precv_frame->u.hdr.len;
133142
133143 - //pskb_copy = skb_copy(skb, GFP_ATOMIC);
133144 + //pskb_copy = rtw_skb_copy(skb);
133145 // if(skb == NULL) goto _exit;
133146
133147 skb->dev = pmgnt_netdev;
133148 - skb->ip_summed = CHECKSUM_NONE;
133149 + skb->ip_summed = CHECKSUM_NONE;
133150 skb->pkt_type = PACKET_OTHERHOST;
133151 //skb->protocol = __constant_htons(0x0019); /*ETH_P_80211_RAW*/
133152 skb->protocol = __constant_htons(0x0003); /*ETH_P_80211_RAW*/
133153 -
133154 - //DBG_8192C("(1)data=0x%x, head=0x%x, tail=0x%x, mac_header=0x%x, len=%d\n", skb->data, skb->head, skb->tail, skb->mac_header, skb->len);
133155 +
133156 + //DBG_871X("(1)data=0x%x, head=0x%x, tail=0x%x, mac_header=0x%x, len=%d\n", skb->data, skb->head, skb->tail, skb->mac_header, skb->len);
133157
133158 //skb->mac.raw = skb->data;
133159 skb_reset_mac_header(skb);
133160
133161 //skb_pull(skb, 24);
133162 - _rtw_memset(skb->cb, 0, sizeof(skb->cb));
133163 + _rtw_memset(skb->cb, 0, sizeof(skb->cb));
133164
133165 - netif_rx(skb);
133166 + rtw_netif_rx(pmgnt_netdev, skb);
133167
133168 - precv_frame->u.hdr.pkt = NULL; // set pointer to NULL before rtw_free_recvframe() if call netif_rx()
133169 -#endif
133170 + precv_frame->u.hdr.pkt = NULL; // set pointer to NULL before rtw_free_recvframe() if call rtw_netif_rx()
133171 +#endif
133172 }
133173
133174 int rtw_recv_indicatepkt(_adapter *padapter, union recv_frame *precv_frame)
133175 -{
133176 +{
133177 struct recv_priv *precvpriv;
133178 _queue *pfree_recv_queue;
133179 _pkt *skb;
133180 @@ -265,20 +254,20 @@ int rtw_recv_indicatepkt(_adapter *padap
133181
133182 _func_enter_;
133183
133184 - precvpriv = &(padapter->recvpriv);
133185 - pfree_recv_queue = &(precvpriv->free_recv_queue);
133186 + precvpriv = &(padapter->recvpriv);
133187 + pfree_recv_queue = &(precvpriv->free_recv_queue);
133188
133189 -#ifdef CONFIG_DRVEXT_MODULE
133190 +#ifdef CONFIG_DRVEXT_MODULE
133191 if (drvext_rx_handler(padapter, precv_frame->u.hdr.rx_data, precv_frame->u.hdr.len) == _SUCCESS)
133192 - {
133193 + {
133194 goto _recv_indicatepkt_drop;
133195 }
133196 #endif
133197
133198 - skb = precv_frame->u.hdr.pkt;
133199 + skb = precv_frame->u.hdr.pkt;
133200 if(skb == NULL)
133201 - {
133202 - RT_TRACE(_module_recv_osdep_c_,_drv_err_,("rtw_recv_indicatepkt():skb==NULL something wrong!!!!\n"));
133203 + {
133204 + RT_TRACE(_module_recv_osdep_c_,_drv_err_,("rtw_recv_indicatepkt():skb==NULL something wrong!!!!\n"));
133205 goto _recv_indicatepkt_drop;
133206 }
133207
133208 @@ -288,17 +277,13 @@ _func_enter_;
133209
133210 skb->data = precv_frame->u.hdr.rx_data;
133211
133212 -#ifdef NET_SKBUFF_DATA_USES_OFFSET
133213 skb_set_tail_pointer(skb, precv_frame->u.hdr.len);
133214 -#else
133215 - skb->tail = precv_frame->u.hdr.rx_tail;
133216 -#endif
133217
133218 skb->len = precv_frame->u.hdr.len;
133219
133220 RT_TRACE(_module_recv_osdep_c_,_drv_info_,("\n skb->head=%p skb->data=%p skb->tail=%p skb->end=%p skb->len=%d\n", skb->head, skb->data, skb->tail, skb->end, skb->len));
133221
133222 - if(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
133223 + if(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
133224 {
133225 _pkt *pskb2=NULL;
133226 struct sta_info *psta = NULL;
133227 @@ -315,21 +300,25 @@ _func_enter_;
133228 if(bmcast)
133229 {
133230 psta = rtw_get_bcmc_stainfo(padapter);
133231 - pskb2 = skb_clone(skb, GFP_ATOMIC);
133232 + pskb2 = rtw_skb_clone(skb);
133233 } else {
133234 psta = rtw_get_stainfo(pstapriv, pattrib->dst);
133235 }
133236
133237 if(psta)
133238 {
133239 + struct net_device *pnetdev= (struct net_device*)padapter->pnetdev;
133240 +
133241 //DBG_871X("directly forwarding to the rtw_xmit_entry\n");
133242
133243 //skb->ip_summed = CHECKSUM_NONE;
133244 - //skb->protocol = eth_type_trans(skb, pnetdev);
133245 -
133246 - skb->dev = padapter->pnetdev;
133247 - rtw_xmit_entry(skb, padapter->pnetdev);
133248 -
133249 + skb->dev = pnetdev;
133250 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
133251 + skb_set_queue_mapping(skb, rtw_recv_select_queue(skb));
133252 +#endif //LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35)
133253 +
133254 + _rtw_xmit_entry(skb, pnetdev);
133255 +
133256 if(bmcast)
133257 skb = pskb2;
133258 else
133259 @@ -355,7 +344,7 @@ _func_enter_;
133260 rcu_read_unlock();
133261 #endif // (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 35))
133262
133263 - if( br_port && (check_fwstate(pmlmepriv, WIFI_STATION_STATE|WIFI_ADHOC_STATE) == _TRUE) )
133264 + if( br_port && (check_fwstate(pmlmepriv, WIFI_STATION_STATE|WIFI_ADHOC_STATE) == _TRUE) )
133265 {
133266 int nat25_handle_frame(_adapter *priv, struct sk_buff *skb);
133267 if (nat25_handle_frame(padapter, skb) == -1) {
133268 @@ -376,10 +365,10 @@ _func_enter_;
133269 #ifdef CONFIG_TCP_CSUM_OFFLOAD_RX
133270 if ( (pattrib->tcpchk_valid == 1) && (pattrib->tcp_chkrpt == 1) ) {
133271 skb->ip_summed = CHECKSUM_UNNECESSARY;
133272 - //DBG_8192C("CHECKSUM_UNNECESSARY \n");
133273 + //DBG_871X("CHECKSUM_UNNECESSARY \n");
133274 } else {
133275 skb->ip_summed = CHECKSUM_NONE;
133276 - //DBG_8192C("CHECKSUM_NONE(%d, %d) \n", pattrib->tcpchk_valid, pattrib->tcp_chkrpt);
133277 + //DBG_871X("CHECKSUM_NONE(%d, %d) \n", pattrib->tcpchk_valid, pattrib->tcp_chkrpt);
133278 }
133279 #else /* !CONFIG_TCP_CSUM_OFFLOAD_RX */
133280
133281 @@ -390,7 +379,7 @@ _func_enter_;
133282 skb->dev = padapter->pnetdev;
133283 skb->protocol = eth_type_trans(skb, padapter->pnetdev);
133284
133285 - netif_rx(skb);
133286 + rtw_netif_rx(padapter->pnetdev, skb);
133287
133288 _recv_indicatepkt_end:
133289
133290 @@ -398,21 +387,18 @@ _recv_indicatepkt_end:
133291
133292 rtw_free_recvframe(precv_frame, pfree_recv_queue);
133293
133294 - RT_TRACE(_module_recv_osdep_c_,_drv_info_,("\n rtw_recv_indicatepkt :after netif_rx!!!!\n"));
133295 + RT_TRACE(_module_recv_osdep_c_,_drv_info_,("\n rtw_recv_indicatepkt :after rtw_netif_rx!!!!\n"));
133296
133297 -_func_exit_;
133298 +_func_exit_;
133299
133300 - return _SUCCESS;
133301 + return _SUCCESS;
133302
133303 _recv_indicatepkt_drop:
133304
133305 - //enqueue back to free_recv_queue
133306 + //enqueue back to free_recv_queue
133307 if(precv_frame)
133308 rtw_free_recvframe(precv_frame, pfree_recv_queue);
133309
133310 -
133311 - precvpriv->rx_drop++;
133312 -
133313 return _FAIL;
133314
133315 _func_exit_;
133316 @@ -420,7 +406,7 @@ _func_exit_;
133317 }
133318
133319 void rtw_os_read_port(_adapter *padapter, struct recv_buf *precvbuf)
133320 -{
133321 +{
133322 struct recv_priv *precvpriv = &padapter->recvpriv;
133323
133324 #ifdef CONFIG_USB_HCI
133325 @@ -428,7 +414,7 @@ void rtw_os_read_port(_adapter *padapter
133326 precvbuf->ref_cnt--;
133327
133328 //free skb in recv_buf
133329 - dev_kfree_skb_any(precvbuf->pskb);
133330 + rtw_skb_free(precvbuf->pskb);
133331
133332 precvbuf->pskb = NULL;
133333 precvbuf->reuse = _FALSE;
133334 @@ -436,8 +422,8 @@ void rtw_os_read_port(_adapter *padapter
133335 if(precvbuf->irp_pending == _FALSE)
133336 {
133337 rtw_read_port(padapter, precvpriv->ff_hwaddr, 0, (unsigned char *)precvbuf);
133338 - }
133339 -
133340 + }
133341 +
133342
133343 #endif
133344 #ifdef CONFIG_SDIO_HCI
133345 @@ -457,6 +443,6 @@ void rtw_init_recv_timer(struct recv_reo
133346 _adapter *padapter = preorder_ctrl->padapter;
133347
133348 _init_timer(&(preorder_ctrl->reordering_ctrl_timer), padapter->pnetdev, _rtw_reordering_ctrl_timeout_handler, preorder_ctrl);
133349 -
133350 +
133351 }
133352
133353 --- a/drivers/net/wireless/rtl8192cu/os_dep/linux/rtw_android.c
133354 +++ b/drivers/net/wireless/rtl8192cu/os_dep/linux/rtw_android.c
133355 @@ -27,15 +27,14 @@
133356 #include <ioctl_cfg80211.h>
133357 #include <rtw_ioctl_set.h>
133358
133359 -
133360 -#if defined(CONFIG_WIFI_CONTROL_FUNC) && 0
133361 +#if defined(RTW_ENABLE_WIFI_CONTROL_FUNC)
133362 #include <linux/platform_device.h>
133363 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35))
133364 #include <linux/wlan_plat.h>
133365 #else
133366 #include <linux/wifi_tiwlan.h>
133367 #endif
133368 -#endif /* CONFIG_WIFI_CONTROL_FUNC */
133369 +#endif /* defined(RTW_ENABLE_WIFI_CONTROL_FUNC) */
133370
133371 const char *android_wifi_cmd_str[ANDROID_WIFI_CMD_MAX] = {
133372 "START",
133373 @@ -71,7 +70,11 @@ const char *android_wifi_cmd_str[ANDROID
133374 "MACADDR",
133375
133376 "BLOCK",
133377 -
133378 + "WFD-ENABLE",
133379 + "WFD-DISABLE",
133380 + "WFD-SET-TCPPORT",
133381 + "WFD-SET-MAXTPUT",
133382 + "WFD-SET-DEVTYPE",
133383 };
133384
133385 #ifdef PNO_SUPPORT
133386 @@ -93,12 +96,17 @@ typedef struct cmd_tlv {
133387 #endif /* PNO_SUPPORT */
133388
133389 typedef struct android_wifi_priv_cmd {
133390 +
133391 +#ifdef CONFIG_COMPAT
133392 + compat_uptr_t buf;
133393 +#else
133394 char *buf;
133395 +#endif
133396 +
133397 int used_len;
133398 int total_len;
133399 } android_wifi_priv_cmd;
133400
133401 -
133402 /**
133403 * Local (static) functions and variables
133404 */
133405 @@ -147,7 +155,7 @@ static int wl_android_set_pno_setup(stru
133406 DHD_INFO(("%s: command=%s, len=%d\n", __FUNCTION__, command, total_len));
133407
133408 if (total_len < (strlen(CMD_PNOSETUP_SET) + sizeof(cmd_tlv_t))) {
133409 - DHD_ERROR(("%s argument=%d less min size\n", __FUNCTION__, total_len));
133410 + DBG_871X("%s argument=%d less min size\n", __FUNCTION__, total_len);
133411 goto exit_proc;
133412 }
133413
133414 @@ -174,12 +182,12 @@ static int wl_android_set_pno_setup(stru
133415
133416 if ((nssid = wl_iw_parse_ssid_list_tlv(&str_ptr, ssids_local,
133417 MAX_PFN_LIST_COUNT, &tlv_size_left)) <= 0) {
133418 - DHD_ERROR(("SSID is not presented or corrupted ret=%d\n", nssid));
133419 + DBG_871X("SSID is not presented or corrupted ret=%d\n", nssid);
133420 goto exit_proc;
133421 } else {
133422 if ((str_ptr[0] != PNO_TLV_TYPE_TIME) || (tlv_size_left <= 1)) {
133423 - DHD_ERROR(("%s scan duration corrupted field size %d\n",
133424 - __FUNCTION__, tlv_size_left));
133425 + DBG_871X("%s scan duration corrupted field size %d\n",
133426 + __FUNCTION__, tlv_size_left);
133427 goto exit_proc;
133428 }
133429 str_ptr++;
133430 @@ -188,16 +196,16 @@ static int wl_android_set_pno_setup(stru
133431
133432 if (str_ptr[0] != 0) {
133433 if ((str_ptr[0] != PNO_TLV_FREQ_REPEAT)) {
133434 - DHD_ERROR(("%s pno repeat : corrupted field\n",
133435 - __FUNCTION__));
133436 + DBG_871X("%s pno repeat : corrupted field\n",
133437 + __FUNCTION__);
133438 goto exit_proc;
133439 }
133440 str_ptr++;
133441 pno_repeat = simple_strtoul(str_ptr, &str_ptr, 16);
133442 DHD_INFO(("%s :got pno_repeat=%d\n", __FUNCTION__, pno_repeat));
133443 if (str_ptr[0] != PNO_TLV_FREQ_EXPO_MAX) {
133444 - DHD_ERROR(("%s FREQ_EXPO_MAX corrupted field size\n",
133445 - __FUNCTION__));
133446 + DBG_871X("%s FREQ_EXPO_MAX corrupted field size\n",
133447 + __FUNCTION__);
133448 goto exit_proc;
133449 }
133450 str_ptr++;
133451 @@ -207,7 +215,7 @@ static int wl_android_set_pno_setup(stru
133452 }
133453 }
133454 } else {
133455 - DHD_ERROR(("%s get wrong TLV command\n", __FUNCTION__));
133456 + DBG_871X("%s get wrong TLV command\n", __FUNCTION__);
133457 goto exit_proc;
133458 }
133459
133460 @@ -251,7 +259,7 @@ int rtw_android_get_link_speed(struct ne
133461 int bytes_written = 0;
133462 u16 link_speed = 0;
133463
133464 - link_speed = rtw_get_network_max_rate(padapter, &pcur_network->network);
133465 + link_speed = rtw_get_cur_max_rate(padapter)/10;
133466 bytes_written = snprintf(command, total_len, "LinkSpeed %d", link_speed);
133467
133468 return bytes_written;
133469 @@ -270,7 +278,7 @@ int rtw_android_set_country(struct net_d
133470 {
133471 _adapter *adapter = (_adapter *)rtw_netdev_priv(net);
133472 char *country_code = command + strlen(android_wifi_cmd_str[ANDROID_WIFI_CMD_COUNTRY]) + 1;
133473 - int ret;
133474 + int ret = _FAIL;
133475
133476 ret = rtw_set_country(adapter, country_code);
133477
133478 @@ -279,7 +287,6 @@ int rtw_android_set_country(struct net_d
133479
133480 int rtw_android_get_p2p_dev_addr(struct net_device *net, char *command, int total_len)
133481 {
133482 - int ret;
133483 int bytes_written = 0;
133484
133485 //We use the same address as our HW MAC address
133486 @@ -291,7 +298,6 @@ int rtw_android_get_p2p_dev_addr(struct
133487
133488 int rtw_android_set_block(struct net_device *net, char *command, int total_len)
133489 {
133490 - int ret;
133491 _adapter *adapter = (_adapter *)rtw_netdev_priv(net);
133492 char *block_value = command + strlen(android_wifi_cmd_str[ANDROID_WIFI_CMD_BLOCK]) + 1;
133493
133494 @@ -302,6 +308,45 @@ int rtw_android_set_block(struct net_dev
133495 return 0;
133496 }
133497
133498 +int rtw_android_setband(struct net_device *net, char *command, int total_len)
133499 +{
133500 + _adapter *adapter = (_adapter *)rtw_netdev_priv(net);
133501 + char *arg = command + strlen(android_wifi_cmd_str[ANDROID_WIFI_CMD_SETBAND]) + 1;
133502 + u32 band = GHZ_MAX;
133503 + int ret = _FAIL;
133504 +
133505 + sscanf(arg, "%u", &band);
133506 + ret = rtw_set_band(adapter, band);
133507 +
133508 + return (ret==_SUCCESS)?0:-1;
133509 +}
133510 +
133511 +int rtw_android_getband(struct net_device *net, char *command, int total_len)
133512 +{
133513 + _adapter *adapter = (_adapter *)rtw_netdev_priv(net);
133514 + int bytes_written = 0;
133515 +
133516 + bytes_written = snprintf(command, total_len, "%u", adapter->setband);
133517 +
133518 + return bytes_written;
133519 +}
133520 +
133521 +int get_int_from_command( char* pcmd )
133522 +{
133523 + int i = 0;
133524 +
133525 + for( i = 0; i < strlen( pcmd ); i++ )
133526 + {
133527 + if ( pcmd[ i ] == '=' )
133528 + {
133529 + // Skip the '=' and space characters.
133530 + i += 2;
133531 + break;
133532 + }
133533 + }
133534 + return ( rtw_atoi( pcmd + i ) );
133535 +}
133536 +
133537 int rtw_android_priv_cmd(struct net_device *net, struct ifreq *ifr, int cmd)
133538 {
133539 int ret = 0;
133540 @@ -320,14 +365,21 @@ int rtw_android_priv_cmd(struct net_devi
133541 ret = -EFAULT;
133542 goto exit;
133543 }
133544 - command = kmalloc(priv_cmd.total_len, GFP_KERNEL);
133545 +
133546 + command = rtw_zmalloc(priv_cmd.total_len);
133547 if (!command)
133548 {
133549 DBG_871X("%s: failed to allocate memory\n", __FUNCTION__);
133550 ret = -ENOMEM;
133551 goto exit;
133552 }
133553 - if (copy_from_user(command, priv_cmd.buf, priv_cmd.total_len)) {
133554 +
133555 + if (!access_ok(VERIFY_READ, priv_cmd.buf, priv_cmd.total_len)){
133556 + DBG_871X("%s: failed to access memory\n", __FUNCTION__);
133557 + ret = -EFAULT;
133558 + goto exit;
133559 + }
133560 + if (copy_from_user(command, (void *)priv_cmd.buf, priv_cmd.total_len)) {
133561 ret = -EFAULT;
133562 goto exit;
133563 }
133564 @@ -359,10 +411,15 @@ int rtw_android_priv_cmd(struct net_devi
133565 break;
133566
133567 case ANDROID_WIFI_CMD_SCAN_ACTIVE:
133568 - rtw_set_scan_mode((_adapter *)rtw_netdev_priv(net), SCAN_ACTIVE);
133569 + //rtw_set_scan_mode((_adapter *)rtw_netdev_priv(net), SCAN_ACTIVE);
133570 +#ifdef CONFIG_PLATFORM_MSTAR
133571 +#ifdef CONFIG_IOCTL_CFG80211
133572 + (wdev_to_priv(net->ieee80211_ptr))->bandroid_scan = _TRUE;
133573 +#endif //CONFIG_IOCTL_CFG80211
133574 +#endif //CONFIG_PLATFORM_MSTAR
133575 break;
133576 case ANDROID_WIFI_CMD_SCAN_PASSIVE:
133577 - rtw_set_scan_mode((_adapter *)rtw_netdev_priv(net), SCAN_PASSIVE);
133578 + //rtw_set_scan_mode((_adapter *)rtw_netdev_priv(net), SCAN_PASSIVE);
133579 break;
133580
133581 case ANDROID_WIFI_CMD_RSSI:
133582 @@ -419,11 +476,11 @@ int rtw_android_priv_cmd(struct net_devi
133583 break;
133584
133585 case ANDROID_WIFI_CMD_SETBAND:
133586 - //uint band = *(command + strlen(CMD_SETBAND) + 1) - '0';
133587 - //bytes_written = wldev_set_band(net, band);
133588 + bytes_written = rtw_android_setband(net, command, priv_cmd.total_len);
133589 break;
133590 +
133591 case ANDROID_WIFI_CMD_GETBAND:
133592 - //bytes_written = wl_android_get_band(net, command, priv_cmd.total_len);
133593 + bytes_written = rtw_android_getband(net, command, priv_cmd.total_len);
133594 break;
133595
133596 case ANDROID_WIFI_CMD_COUNTRY:
133597 @@ -467,6 +524,74 @@ int rtw_android_priv_cmd(struct net_devi
133598 }
133599 #endif //CONFIG_IOCTL_CFG80211
133600
133601 +#ifdef CONFIG_WFD
133602 + case ANDROID_WIFI_CMD_WFD_ENABLE:
133603 + {
133604 + // Commented by Albert 2012/07/24
133605 + // We can enable the WFD function by using the following command:
133606 + // wpa_cli driver wfd-enable
133607 +
133608 + struct wifi_display_info *pwfd_info;
133609 + _adapter* padapter = ( _adapter * ) rtw_netdev_priv(net);
133610 +
133611 + pwfd_info = &padapter->wfd_info;
133612 + if( padapter->wdinfo.driver_interface == DRIVER_CFG80211 )
133613 + pwfd_info->wfd_enable = _TRUE;
133614 + break;
133615 + }
133616 +
133617 + case ANDROID_WIFI_CMD_WFD_DISABLE:
133618 + {
133619 + // Commented by Albert 2012/07/24
133620 + // We can disable the WFD function by using the following command:
133621 + // wpa_cli driver wfd-disable
133622 +
133623 + struct wifi_display_info *pwfd_info;
133624 + _adapter* padapter = ( _adapter * ) rtw_netdev_priv(net);
133625 +
133626 + pwfd_info = &padapter->wfd_info;
133627 + if( padapter->wdinfo.driver_interface == DRIVER_CFG80211 )
133628 + pwfd_info->wfd_enable = _FALSE;
133629 + break;
133630 + }
133631 + case ANDROID_WIFI_CMD_WFD_SET_TCPPORT:
133632 + {
133633 + // Commented by Albert 2012/07/24
133634 + // We can set the tcp port number by using the following command:
133635 + // wpa_cli driver wfd-set-tcpport = 554
133636 +
133637 + struct wifi_display_info *pwfd_info;
133638 + _adapter* padapter = ( _adapter * ) rtw_netdev_priv(net);
133639 +
133640 + pwfd_info = &padapter->wfd_info;
133641 + if( padapter->wdinfo.driver_interface == DRIVER_CFG80211 )
133642 + pwfd_info->rtsp_ctrlport = ( u16 ) get_int_from_command( priv_cmd.buf );
133643 + break;
133644 + }
133645 + case ANDROID_WIFI_CMD_WFD_SET_MAX_TPUT:
133646 + {
133647 +
133648 +
133649 + break;
133650 + }
133651 + case ANDROID_WIFI_CMD_WFD_SET_DEVTYPE:
133652 + {
133653 + // Commented by Albert 2012/08/28
133654 + // Specify the WFD device type ( WFD source/primary sink )
133655 +
133656 + struct wifi_display_info *pwfd_info;
133657 + _adapter* padapter = ( _adapter * ) rtw_netdev_priv(net);
133658 +
133659 + pwfd_info = &padapter->wfd_info;
133660 + if( padapter->wdinfo.driver_interface == DRIVER_CFG80211 )
133661 + {
133662 + pwfd_info->wfd_device_type = ( u8 ) get_int_from_command( priv_cmd.buf );
133663 +
133664 + pwfd_info->wfd_device_type &= WFD_DEVINFO_DUAL;
133665 + }
133666 + break;
133667 + }
133668 +#endif
133669 default:
133670 DBG_871X("Unknown PRIVATE command %s - ignored\n", command);
133671 snprintf(command, 3, "OK");
133672 @@ -484,7 +609,7 @@ response:
133673 bytes_written++;
133674 }
133675 priv_cmd.used_len = bytes_written;
133676 - if (copy_to_user(priv_cmd.buf, command, bytes_written)) {
133677 + if (copy_to_user((void *)priv_cmd.buf, command, bytes_written)) {
133678 DBG_871X("%s: failed to copy data to user buffer\n", __FUNCTION__);
133679 ret = -EFAULT;
133680 }
133681 @@ -496,7 +621,7 @@ response:
133682 exit:
133683 rtw_unlock_suspend();
133684 if (command) {
133685 - kfree(command);
133686 + rtw_mfree(command, priv_cmd.total_len);
133687 }
133688
133689 return ret;
133690 @@ -506,7 +631,7 @@ exit:
133691 /**
133692 * Functions for Android WiFi card detection
133693 */
133694 -#if defined(CONFIG_WIFI_CONTROL_FUNC) && 0
133695 +#if defined(RTW_ENABLE_WIFI_CONTROL_FUNC)
133696
133697 static int g_wifidev_registered = 0;
133698 static struct semaphore wifi_control_sem;
133699 @@ -516,14 +641,14 @@ static struct resource *wifi_irqres = NU
133700 static int wifi_add_dev(void);
133701 static void wifi_del_dev(void);
133702
133703 -int wl_android_wifictrl_func_add(void)
133704 +int rtw_android_wifictrl_func_add(void)
133705 {
133706 int ret = 0;
133707 sema_init(&wifi_control_sem, 0);
133708
133709 ret = wifi_add_dev();
133710 if (ret) {
133711 - DHD_ERROR(("%s: platform_driver_register failed\n", __FUNCTION__));
133712 + DBG_871X("%s: platform_driver_register failed\n", __FUNCTION__);
133713 return ret;
133714 }
133715 g_wifidev_registered = 1;
133716 @@ -531,13 +656,13 @@ int wl_android_wifictrl_func_add(void)
133717 /* Waiting callback after platform_driver_register is done or exit with error */
133718 if (down_timeout(&wifi_control_sem, msecs_to_jiffies(1000)) != 0) {
133719 ret = -EINVAL;
133720 - DHD_ERROR(("%s: platform_driver_register timeout\n", __FUNCTION__));
133721 + DBG_871X("%s: platform_driver_register timeout\n", __FUNCTION__);
133722 }
133723
133724 return ret;
133725 }
133726
133727 -void wl_android_wifictrl_func_del(void)
133728 +void rtw_android_wifictrl_func_del(void)
133729 {
133730 if (g_wifidev_registered)
133731 {
133732 @@ -552,14 +677,14 @@ void *wl_android_prealloc(int section, u
133733 if (wifi_control_data && wifi_control_data->mem_prealloc) {
133734 alloc_ptr = wifi_control_data->mem_prealloc(section, size);
133735 if (alloc_ptr) {
133736 - DHD_INFO(("success alloc section %d\n", section));
133737 + DBG_871X("success alloc section %d\n", section);
133738 if (size != 0L)
133739 - bzero(alloc_ptr, size);
133740 + memset(alloc_ptr, 0, size);
133741 return alloc_ptr;
133742 }
133743 }
133744
133745 - DHD_ERROR(("can't alloc section %d\n", section));
133746 + DBG_871X("can't alloc section %d\n", section);
133747 return NULL;
133748 }
133749
133750 @@ -578,7 +703,7 @@ int wifi_get_irq_number(unsigned long *i
133751
133752 int wifi_set_power(int on, unsigned long msec)
133753 {
133754 - DHD_ERROR(("%s = %d\n", __FUNCTION__, on));
133755 + DBG_871X("%s = %d\n", __FUNCTION__, on);
133756 if (wifi_control_data && wifi_control_data->set_power) {
133757 wifi_control_data->set_power(on);
133758 }
133759 @@ -590,7 +715,7 @@ int wifi_set_power(int on, unsigned long
133760 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35))
133761 int wifi_get_mac_addr(unsigned char *buf)
133762 {
133763 - DHD_ERROR(("%s\n", __FUNCTION__));
133764 + DBG_871X("%s\n", __FUNCTION__);
133765 if (!buf)
133766 return -EINVAL;
133767 if (wifi_control_data && wifi_control_data->get_mac_addr) {
133768 @@ -600,10 +725,10 @@ int wifi_get_mac_addr(unsigned char *buf
133769 }
133770 #endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35)) */
133771
133772 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 39))
133773 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 39)) || defined(COMPAT_KERNEL_RELEASE)
133774 void *wifi_get_country_code(char *ccode)
133775 {
133776 - DHD_TRACE(("%s\n", __FUNCTION__));
133777 + DBG_871X("%s\n", __FUNCTION__);
133778 if (!ccode)
133779 return NULL;
133780 if (wifi_control_data && wifi_control_data->get_country_code) {
133781 @@ -615,7 +740,7 @@ void *wifi_get_country_code(char *ccode)
133782
133783 static int wifi_set_carddetect(int on)
133784 {
133785 - DHD_ERROR(("%s = %d\n", __FUNCTION__, on));
133786 + DBG_871X("%s = %d\n", __FUNCTION__, on);
133787 if (wifi_control_data && wifi_control_data->set_carddetect) {
133788 wifi_control_data->set_carddetect(on);
133789 }
133790 @@ -627,7 +752,7 @@ static int wifi_probe(struct platform_de
133791 struct wifi_platform_data *wifi_ctrl =
133792 (struct wifi_platform_data *)(pdev->dev.platform_data);
133793
133794 - DHD_ERROR(("## %s\n", __FUNCTION__));
133795 + DBG_871X("## %s\n", __FUNCTION__);
133796 wifi_irqres = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "bcmdhd_wlan_irq");
133797 if (wifi_irqres == NULL)
133798 wifi_irqres = platform_get_resource_byname(pdev,
133799 @@ -646,7 +771,7 @@ static int wifi_remove(struct platform_d
133800 struct wifi_platform_data *wifi_ctrl =
133801 (struct wifi_platform_data *)(pdev->dev.platform_data);
133802
133803 - DHD_ERROR(("## %s\n", __FUNCTION__));
133804 + DBG_871X("## %s\n", __FUNCTION__);
133805 wifi_control_data = wifi_ctrl;
133806
133807 wifi_set_power(0, 0); /* Power Off */
133808 @@ -658,7 +783,7 @@ static int wifi_remove(struct platform_d
133809
133810 static int wifi_suspend(struct platform_device *pdev, pm_message_t state)
133811 {
133812 - DHD_TRACE(("##> %s\n", __FUNCTION__));
133813 + DBG_871X("##> %s\n", __FUNCTION__);
133814 #if (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 39)) && defined(OOB_INTR_ONLY)
133815 bcmsdh_oob_intr_set(0);
133816 #endif
133817 @@ -667,7 +792,7 @@ static int wifi_suspend(struct platform_
133818
133819 static int wifi_resume(struct platform_device *pdev)
133820 {
133821 - DHD_TRACE(("##> %s\n", __FUNCTION__));
133822 + DBG_871X("##> %s\n", __FUNCTION__);
133823 #if (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 39)) && defined(OOB_INTR_ONLY)
133824 if (dhd_os_check_if_up(bcmsdh_get_drvdata()))
133825 bcmsdh_oob_intr_set(1);
133826 @@ -675,6 +800,7 @@ static int wifi_resume(struct platform_d
133827 return 0;
133828 }
133829
133830 +/* temporarily use these two */
133831 static struct platform_driver wifi_device = {
133832 .probe = wifi_probe,
133833 .remove = wifi_remove,
133834 @@ -697,7 +823,7 @@ static struct platform_driver wifi_devic
133835
133836 static int wifi_add_dev(void)
133837 {
133838 - DHD_TRACE(("## Calling platform_driver_register\n"));
133839 + DBG_871X("## Calling platform_driver_register\n");
133840 platform_driver_register(&wifi_device);
133841 platform_driver_register(&wifi_device_legacy);
133842 return 0;
133843 @@ -705,9 +831,9 @@ static int wifi_add_dev(void)
133844
133845 static void wifi_del_dev(void)
133846 {
133847 - DHD_TRACE(("## Unregister platform_driver_register\n"));
133848 + DBG_871X("## Unregister platform_driver_register\n");
133849 platform_driver_unregister(&wifi_device);
133850 platform_driver_unregister(&wifi_device_legacy);
133851 }
133852 -#endif /* defined(CONFIG_WIFI_CONTROL_FUNC) */
133853 +#endif /* defined(RTW_ENABLE_WIFI_CONTROL_FUNC) */
133854
133855 --- a/drivers/net/wireless/rtl8192cu/os_dep/linux/sdio_intf.c
133856 +++ /dev/null
133857 @@ -1,922 +0,0 @@
133858 -/******************************************************************************
133859 - *
133860 - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
133861 - *
133862 - * This program is free software; you can redistribute it and/or modify it
133863 - * under the terms of version 2 of the GNU General Public License as
133864 - * published by the Free Software Foundation.
133865 - *
133866 - * This program is distributed in the hope that it will be useful, but WITHOUT
133867 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
133868 - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
133869 - * more details.
133870 - *
133871 - * You should have received a copy of the GNU General Public License along with
133872 - * this program; if not, write to the Free Software Foundation, Inc.,
133873 - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
133874 - *
133875 - *
133876 -
133877 -******************************************************************************/
133878 -#define _HCI_INTF_C_
133879 -
133880 -#include <drv_conf.h>
133881 -#include <osdep_service.h>
133882 -#include <drv_types.h>
133883 -#include <recv_osdep.h>
133884 -#include <xmit_osdep.h>
133885 -
133886 -#include <hal_init.h>
133887 -#include <sdio_hal.h>
133888 -#include <sdio_ops.h>
133889 -#include <linux/mmc/sdio_func.h>
133890 -#include <linux/mmc/sdio_ids.h>
133891 -extern u32 rtw_start_drv_threads(_adapter *padapter);
133892 -extern void rtw_stop_drv_threads (_adapter *padapter);
133893 -extern u8 rtw_init_drv_sw(_adapter *padapter);
133894 -extern u8 rtw_free_drv_sw(_adapter *padapter);
133895 -extern void rtw_cancel_all_timer(_adapter *padapter);
133896 -extern struct net_device *rtw_init_netdev(_adapter *old_padapter);
133897 -extern void update_recvframe_attrib_from_recvstat(struct rx_pkt_attrib
133898 -*pattrib, struct recv_stat *prxstat);
133899 -static const struct sdio_device_id sdio_ids[] = {
133900 - { SDIO_DEVICE(0x024c, 0x8712) },
133901 -// { SDIO_DEVICE_CLASS(SDIO_CLASS_WLAN) },
133902 -// { /* end: all zeroes */ },
133903 -};
133904 -
133905 -typedef struct _driver_priv{
133906 - struct sdio_driver r871xs_drv;
133907 -}drv_priv, *pdrv_priv;
133908 -
133909 -void sd_sync_int_hdl(struct sdio_func *func);
133910 -
133911 -extern unsigned int sd_dvobj_init(_adapter * padapter){
133912 -
133913 - struct dvobj_priv *psddev=&padapter->dvobjpriv;
133914 - struct sdio_func *func=psddev->func;
133915 - int ret;
133916 - _func_enter_;
133917 - //_rtw_init_sema(&psddev->init_finish,0);
133918 - sdio_claim_host(func);
133919 - ret=sdio_enable_func(func);
133920 - if(ret){
133921 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("sd_dvobj_init: sdio_enable_func fail!!!!!\n"));
133922 - return _FAIL;
133923 - }
133924 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("sd_dvobj_init: sdio_enable_func success!!!!!\n"));
133925 - padapter->EepromAddressSize = 6;
133926 - psddev->tx_block_mode=1;
133927 - psddev->rx_block_mode=1;
133928 - sdio_set_block_size(func, 512);
133929 - psddev->block_transfer_len=512;
133930 - psddev->blk_shiftbits=9;
133931 - ret=sdio_claim_irq(func,sd_sync_int_hdl);
133932 - sdio_release_host(func);
133933 - psddev->sdio_himr=0xff;
133934 - if(ret)
133935 - return _FAIL;
133936 - _func_exit_;
133937 - return _SUCCESS;
133938 -}
133939 -
133940 -extern void sd_dvobj_deinit(_adapter * padapter)
133941 -{
133942 - unsigned char data;
133943 - struct dvobj_priv *psddev=&padapter->dvobjpriv;
133944 - struct sdio_func *func=psddev->func;
133945 -
133946 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("+SDIO deinit\n"));
133947 - if(func !=0){
133948 - sdio_claim_host(func);
133949 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,(" in sd_dvobj_deinit():sdio_claim_host !\n"));
133950 -// sdio_release_irq(func);
133951 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,(" in sd_dvobj_deinit():sdio_release_irq !\n"));
133952 - sdio_disable_func(func);
133953 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,(" in sd_dvobj_deinit():sdio_disable_func !\n"));
133954 - sdio_release_host(func);
133955 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,(" in sd_dvobj_deinit():sdio_release_host !\n"));
133956 -
133957 -
133958 - }
133959 - return;
133960 -}
133961 -
133962 -uint sdbus_read_reg_int(struct intf_priv *pintfpriv, u32 addr, u32 cnt, void *pdata)
133963 -{
133964 - struct dvobj_priv *pdvobjpriv = (struct dvobj_priv*)pintfpriv->intf_dev;
133965 - struct sdio_func *func = pdvobjpriv->func;
133966 - u8 *mem = NULL;
133967 - int status;
133968 -
133969 -#ifdef CONFIG_IO_4B
133970 - u32 addr_org = addr, addr_offset = 0;
133971 - u32 cnt_org = cnt;
133972 -#endif
133973 -
133974 -_func_enter_;
133975 -
133976 -#ifdef CONFIG_IO_4B
133977 - addr_offset = addr % 4;
133978 - if (addr_offset) {
133979 - addr = addr - addr_offset;
133980 - cnt = cnt + addr_offset;
133981 - }
133982 - if (cnt % 4)
133983 - cnt = ((cnt + 4) >> 2) << 2;
133984 -#endif
133985 -
133986 - mem = rtw_malloc(cnt);
133987 - if (mem == NULL) {
133988 - RT_TRACE(_module_hci_ops_os_c_, _drv_emerg_,
133989 - ("SDIO_STATUS_NO_RESOURCES - memory alloc fail\n"));
133990 - return _FAIL;
133991 - }
133992 -
133993 - status = sdio_memcpy_fromio(func, mem, addr&0x1FFFF, cnt);
133994 - if (status) {
133995 - //error
133996 - RT_TRACE(_module_hci_ops_os_c_, _drv_emerg_,
133997 - ("sdbus_read_reg_int error 0x%x\n"
133998 - "***** Addr = %x *****\n"
133999 - "***** Length = %d *****\n", status, addr, cnt));
134000 - status = _FAIL;
134001 - } else {
134002 -#ifdef CONFIG_IO_4B
134003 - if (cnt != cnt_org)
134004 - _rtw_memcpy(pdata, mem + addr_offset, cnt_org);
134005 - else
134006 -#endif
134007 - _rtw_memcpy(pdata, mem, cnt);
134008 - status = _SUCCESS;
134009 - }
134010 -
134011 - rtw_mfree(mem, cnt);
134012 -
134013 -_func_exit_;
134014 -
134015 - return status;
134016 -}
134017 -
134018 -void sdio_read_int(_adapter *padapter, u32 addr, u8 sz, void *pdata)
134019 -{
134020 - struct io_queue *pio_queue = (struct io_queue*)padapter->pio_queue;
134021 - struct intf_hdl *pintfhdl = &pio_queue->intf;
134022 - struct intf_priv *pintfpriv = pintfhdl->pintfpriv;
134023 - u32 ftaddr = 0, res;
134024 -
134025 -_func_enter_;
134026 -
134027 -// RT_TRACE(_module_hci_ops_c_,_drv_err_,("sdio_read_int\n"));
134028 -
134029 - if ((_cvrt2ftaddr(addr, &ftaddr)) == _SUCCESS) {
134030 - res = sdbus_read_reg_int(pintfpriv, ftaddr, sz, pdata);
134031 - if (res != _SUCCESS) {
134032 - RT_TRACE(_module_hci_ops_c_, _drv_emerg_, ("sdio_read_int fail!!!\n"));
134033 - }
134034 - } else {
134035 - RT_TRACE(_module_hci_ops_c_, _drv_emerg_, (" sdio_read_int address translate error!!!\n"));
134036 - }
134037 -
134038 -_func_exit_;
134039 -}
134040 -
134041 -uint sdbus_write_reg_int(struct intf_priv *pintfpriv, u32 addr, u32 cnt, void *pdata)
134042 -{
134043 - struct dvobj_priv *pdvobjpriv = (struct dvobj_priv*)pintfpriv->intf_dev;
134044 - struct sdio_func *func = pdvobjpriv->func;
134045 - int status;
134046 -#ifdef CONFIG_IO_4B
134047 - u32 addr_org = addr, addr_offset = 0;
134048 - u32 cnt_org = cnt;
134049 - void *pdata_org = pdata;
134050 -#endif
134051 -
134052 -_func_enter_;
134053 -
134054 -#ifdef CONFIG_IO_4B
134055 - addr_offset = addr % 4;
134056 - if (addr_offset) {
134057 - addr = addr - addr_offset;
134058 - cnt = cnt + addr_offset;
134059 - }
134060 - if (cnt % 4)
134061 - cnt = ((cnt + 4) >> 2) << 2;
134062 - if (cnt != cnt_org) {
134063 - pdata = rtw_malloc(cnt);
134064 - if (pdata == NULL) {
134065 - RT_TRACE(_module_hci_ops_os_c_, _drv_emerg_,
134066 - ("SDIO_STATUS_NO_RESOURCES - rtw_malloc fail\n"));
134067 - return _FAIL;
134068 - }
134069 - status = sdio_memcpy_fromio(func, pdata, addr&0x1FFFF, cnt);
134070 - if (status) {
134071 - RT_TRACE(_module_hci_ops_os_c_,_drv_emerg_,
134072 - ("sdbus_write_reg_int read failed 0x%x\n "
134073 - "***** Addr = %x *****\n"
134074 - "***** Length = %d *****\n", status, addr, cnt));
134075 - rtw_mfree(pdata, cnt);
134076 - return _FAIL;
134077 - }
134078 - _rtw_memcpy(pdata + addr_offset, pdata_org, cnt_org);
134079 - /* if data been modify between this read and write, may cause a problem */
134080 - }
134081 -#endif
134082 - status = sdio_memcpy_toio(func, addr&0x1FFFF, pdata, cnt);
134083 - if (status) {
134084 - //error
134085 - RT_TRACE(_module_hci_ops_os_c_, _drv_emerg_,
134086 - ("sdbus_write_reg_int failed 0x%x\n"
134087 - "***** Addr = %x *****\n"
134088 - "***** Length = %d *****\n", status, addr, cnt));
134089 -
134090 - status = _FAIL;
134091 - } else
134092 - status = _SUCCESS;
134093 -
134094 -#ifdef CONFIG_IO_4B
134095 - if (cnt != cnt_org)
134096 - rtw_mfree(pdata, cnt);
134097 -#endif
134098 -
134099 -_func_exit_;
134100 -
134101 - return status;
134102 -}
134103 -
134104 -void sdio_write_int(_adapter *padapter, u32 addr, u32 val, u8 sz)
134105 -{
134106 - struct io_queue *pio_queue = (struct io_queue*)padapter->pio_queue;
134107 - struct intf_hdl *pintfhdl = &pio_queue->intf;
134108 - struct intf_priv *pintfpriv = pintfhdl->pintfpriv;
134109 -
134110 - u32 ftaddr = 0, res;
134111 -
134112 -_func_enter_;
134113 -
134114 -// RT_TRACE(_module_hci_ops_c_,_drv_err_,("sdio_write_int\n"));
134115 -
134116 - val = cpu_to_le32(val);
134117 -
134118 - if ((_cvrt2ftaddr(addr, &ftaddr)) == _SUCCESS) {
134119 - res = sdbus_write_reg_int(pintfpriv, ftaddr, sz, &val);
134120 - if (res != _SUCCESS) {
134121 - RT_TRACE(_module_hci_ops_c_, _drv_emerg_, ("sdio_write_int fail!!!\n"));
134122 - }
134123 - } else {
134124 - RT_TRACE(_module_hci_ops_c_, _drv_emerg_, ("sdio_write_int address translate error!!!\n"));
134125 - }
134126 -
134127 -_func_exit_;
134128 -}
134129 -
134130 -int recvbuf2recvframe_s(_adapter *padapter, struct recv_buf *precvbuf)
134131 -{
134132 -// _irqL irql;
134133 - u8 *pbuf;
134134 -// u8 bsumbit = _FALSE;
134135 - uint pkt_len, pkt_offset;
134136 - int transfer_len;
134137 - struct recv_stat *prxstat;
134138 - u16 pkt_cnt, drvinfo_sz;
134139 - _queue *pfree_recv_queue;
134140 - union recv_frame *precvframe = NULL,*plast_recvframe = NULL;
134141 - struct recv_priv *precvpriv = &padapter->recvpriv;
134142 -// struct intf_hdl *pintfhdl = &padapter->pio_queue->intf;
134143 -
134144 - RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("+recvbuf2recvframe()\n"));
134145 -
134146 - pfree_recv_queue = &(precvpriv->free_recv_queue);
134147 -
134148 - pbuf = (u8*)precvbuf->pbuf;
134149 -
134150 - prxstat = (struct recv_stat *)pbuf;
134151 -/* {
134152 - u8 i;
134153 - DBG_8192C("\n-----recvbuf-----\n");
134154 - for (i=0;i<64;i=i+8) {
134155 - DBG_8192C("0x%.2x:0x%.2x:0x%.2x:0x%.2x:0x%.2x:0x%.2x:0x%.2x:0x%.2x\n",pbuf[i],pbuf[i+1],pbuf[i+2],pbuf[i+3],pbuf[i+4],pbuf[i+5],pbuf[i+6],pbuf[i+7]);
134156 - }
134157 - DBG_8192C("\n-----recvbuf end-----\n");
134158 - }*/
134159 - transfer_len = precvbuf->len;
134160 - precvbuf->ref_cnt = 1;
134161 - do {
134162 - precvframe = NULL;
134163 - precvframe = rtw_alloc_recvframe(pfree_recv_queue);
134164 - if (precvframe == NULL){
134165 - RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("recvbuf2recvframe(), precvframe==NULL\n"));
134166 - break;
134167 - }
134168 - if (plast_recvframe != NULL) {
134169 - if (rtw_recv_entry(plast_recvframe) != _SUCCESS) {
134170 - RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("recvbuf2recvframe(), rtw_recv_entry(precvframe) != _SUCCESS\n"));
134171 - }
134172 - }
134173 - prxstat = (struct recv_stat*)pbuf;
134174 - pkt_len = le32_to_cpu(prxstat->rxdw0&0x00003fff); //pkt_len = prxstat->frame_length;
134175 -
134176 - RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("rxdesc: offsset0:0x%08x, offsset4:0x%08x, offsset8:0x%08x, offssetc:0x%08x\n",prxstat->rxdw0, prxstat->rxdw1, prxstat->rxdw2, prxstat->rxdw4));
134177 -
134178 - drvinfo_sz = le16_to_cpu((prxstat->rxdw0&0x000f0000)>>16);//uint 2^3 = 8 bytes
134179 - drvinfo_sz = drvinfo_sz << 3;
134180 - RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("pkt_len=%d[0x%x] drvinfo_sz=%d[0x%x]\n", pkt_len, pkt_len, drvinfo_sz, drvinfo_sz));
134181 - precvframe->u.hdr.precvbuf = precvbuf;
134182 - precvframe->u.hdr.adapter = padapter;
134183 - rtw_init_recvframe(precvframe, precvpriv);
134184 -
134185 - precvframe->u.hdr.rx_head = precvframe->u.hdr.rx_data = precvframe->u.hdr.rx_tail = pbuf;
134186 - precvframe->u.hdr.rx_end = precvbuf->pend;
134187 - update_recvframe_attrib_from_recvstat(&precvframe->u.hdr.attrib, prxstat);
134188 - pkt_offset = pkt_len + drvinfo_sz + RXDESC_SIZE;
134189 -
134190 - recvframe_put(precvframe, pkt_len + drvinfo_sz + RXDESC_SIZE);
134191 - recvframe_pull(precvframe, drvinfo_sz + RXDESC_SIZE);
134192 -/* {
134193 - u8 i;
134194 - DBG_8192C("\n-----packet-----\n");
134195 - for(i=0;i<32;i++){
134196 - DBG_8192C("0x%.2x:0x%.2x:0x%.2x:0x%.2x:0x%.2x:0x%.2x:0x%.2x:0x%.2x\n",precvframe->u.hdr.rx_data[i],precvframe->u.hdr.rx_data[i+1],precvframe->u.hdr.rx_data[i+2],precvframe->u.hdr.rx_data[i+3],precvframe->u.hdr.rx_data[i+4],precvframe->u.hdr.rx_data[i+5],precvframe->u.hdr.rx_data[i+6],precvframe->u.hdr.rx_data[i+7]);
134197 - }
134198 - DBG_8192C("\n-----packet end-----\n");
134199 - }*/
134200 - RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("\n precvframe->u.hdr.rx_head=%p precvframe->u.hdr.rx_data=%p precvframe->u.hdr.rx_tail=%p precvframe->u.hdr.rx_end=%p\n",precvframe->u.hdr.rx_head,precvframe->u.hdr.rx_data,precvframe->u.hdr.rx_tail,precvframe->u.hdr.rx_end));
134201 -
134202 - RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("\npkt_offset=%d [1]\n",pkt_offset));
134203 - pkt_offset = _RND512(pkt_offset);
134204 - RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("\npkt_offset=%d [2] transfer_len=%d\n",pkt_offset,transfer_len));
134205 - transfer_len -= pkt_offset;
134206 - RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("\n transfer_len=%d \n",transfer_len));
134207 - pbuf += pkt_offset;
134208 - if (transfer_len > 0)
134209 - precvbuf->ref_cnt++;
134210 - plast_recvframe = precvframe;
134211 - precvframe = NULL;
134212 - } while (transfer_len > 0);
134213 -
134214 - if (plast_recvframe != NULL) {
134215 - if (rtw_recv_entry(plast_recvframe) != _SUCCESS) {
134216 - RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("recvbuf2recvframe(), rtw_recv_entry(precvframe) != _SUCCESS\n"));
134217 - }
134218 - }
134219 -
134220 - dev_kfree_skb_any(precvbuf->pskb);
134221 - precvbuf->pskb = NULL;
134222 - return _SUCCESS;
134223 -}
134224 -
134225 -u32 read_pkt2recvbuf(PADAPTER padapter, u32 rd_cnt, struct recv_buf *precvbuf)
134226 -{
134227 - struct recv_priv *precvpriv = &padapter->recvpriv;
134228 - u32 skb_buf_sz;
134229 - if (rd_cnt < 1600)
134230 - skb_buf_sz = 1600;
134231 - else
134232 - skb_buf_sz = rd_cnt;
134233 - RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("\n read_pkt2recvbuf------skb_buf_sz=%d rd_cnt=%d\n",skb_buf_sz,rd_cnt));
134234 -// if (precvbuf->pskb != NULL) {
134235 -// dev_kfree_skb_any(precvbuf->pskb );
134236 -// }
134237 -
134238 - //alloc skb
134239 - {
134240 -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)) // http://www.mail-archive.com/netdev@vger.kernel.org/msg17214.html
134241 - precvbuf->pskb = dev_alloc_skb(skb_buf_sz);
134242 -#else
134243 - precvbuf->pskb = netdev_alloc_skb(padapter->pnetdev, skb_buf_sz);
134244 -#endif
134245 - if (precvbuf->pskb == NULL) {
134246 - RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("==================init_recvbuf(): alloc_skb fail!\n"));
134247 - return _FAIL;
134248 - }
134249 -
134250 - precvbuf->phead = precvbuf->pskb->head;
134251 - precvbuf->pdata = precvbuf->pskb->data;
134252 - precvbuf->ptail = precvbuf->pskb->tail;
134253 - precvbuf->pend = precvbuf->pskb->end;
134254 - precvbuf->pbuf = precvbuf->pskb->data;
134255 - }
134256 -// else {
134257 -// RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("after init_recvbuf(): skb !=NULL!\n"));
134258 -// }
134259 -
134260 - rtw_read_port(padapter, RTL8712_DMA_RX0FF, rd_cnt, (u8*)precvbuf);
134261 - precvbuf->ptail = precvbuf->ptail + rd_cnt;
134262 - precvbuf->len = rd_cnt;
134263 - /*{
134264 - u32 i;
134265 - DBG_8192C("-----After read port[%d]-----\n",skb_buf_sz);
134266 - for (i = 0; i < skb_buf_sz; i = i + 8) {
134267 - DBG_8192C("0x%x:0x%x:0x%x:0x%x:0x%x:0x%x:0x%x:0x%x\n",precvbuf->pbuf[i],precvbuf->pbuf[i+1],precvbuf->pbuf[i+2],precvbuf->pbuf[i+3],precvbuf->pbuf[i+4],precvbuf->pbuf[i+5],precvbuf->pbuf[i+6],precvbuf->pbuf[i+7]);
134268 - }
134269 -
134270 - DBG_8192C("-----------\n");
134271 - }*/
134272 -#if 1
134273 - recvbuf2recvframe_s(padapter, precvbuf);
134274 -#else
134275 -{
134276 - dev_kfree_skb_any(precvbuf->pskb);
134277 - precvbuf->pskb = NULL;
134278 - rtw_list_delete(&(precvbuf->list));
134279 - rtw_list_insert_tail(&precvbuf->list, get_list_head(&precvpriv->free_recv_buf_queue));
134280 - precvpriv->free_recv_buf_queue_cnt++;
134281 -}
134282 -#endif
134283 -
134284 - return _SUCCESS;
134285 -}
134286 -
134287 -void sd_recv_rxfifo(PADAPTER padapter);
134288 -#if 0
134289 -void sd_recv_rxfifo(PADAPTER padapter)
134290 -{
134291 -// u8 *pdata, *ptail, *pfixed_tail,*pfixed_head,*pfixed_end,blk_shift_bit;
134292 - u16 rx_blknum;
134293 - u32 blk_sz, cnt;//,remain,tmp_cnt;
134294 - struct recv_priv *precvpriv;
134295 -// struct recv_stat *prxstat;
134296 - //union recv_frame *precvframe, *ppreframe = NULL;
134297 -// _queue *pfree_recv_queue, *ppending_recv_queue;
134298 -// u8 tmp[2048];
134299 - struct recv_buf *precvbuf;
134300 - _list *precvbuf_head, *precvbuf_list;
134301 - _irqL irql, rx_proc_irq;
134302 -// uint pkt_len;
134303 -// u16 drvinfo_sz;
134304 -
134305 - precvpriv = &padapter->recvpriv;
134306 - blk_sz = padapter->dvobjpriv.block_transfer_len;
134307 -// blk_shift_bit= (u8)padapter->dvobjpriv.blk_shiftbits;
134308 -// pfree_recv_queue = &(precvpriv->free_recv_queue);
134309 -// ppending_recv_queue = &(precvpriv->recv_pending_queue);
134310 -
134311 - rx_blknum = padapter->dvobjpriv.rxblknum;
134312 -// _enter_hwio_critical(&padapter->dvobjpriv.rx_protect, &rx_proc_irq);
134313 -// padapter->dvobjpriv.rxblknum=rtw_read16(padapter, SDIO_RX0_RDYBLK_NUM);
134314 - sdio_read_int(padapter, SDIO_RX0_RDYBLK_NUM, 2, &padapter->dvobjpriv.rxblknum);
134315 - if (rx_blknum>padapter->dvobjpriv.rxblknum) {
134316 - cnt = (0x10000 - rx_blknum + padapter->dvobjpriv.rxblknum) * blk_sz;
134317 - } else {
134318 - cnt = (padapter->dvobjpriv.rxblknum-rx_blknum) * blk_sz;
134319 - }
134320 - RT_TRACE(_module_hci_intfs_c_,_drv_notice_,("=====================sd_recv_rxfifo padapter->dvobjpriv.rxblknum=%x Blk_Num = %x cnt=%d",padapter->dvobjpriv.rxblknum, rx_blknum,cnt));
134321 -
134322 - if (cnt == 0) {
134323 -// remain = 0;
134324 - precvbuf = NULL;
134325 - RT_TRACE(_module_hci_intfs_c_,_drv_info_,("---===============sd_recv_rxfifo padapter->dvobjpriv.rxblknum=0x%x padapter->dvobjpriv.rxblknum_rd=0x%x", padapter->dvobjpriv.rxblknum,padapter->dvobjpriv.rxblknum_rd));
134326 - goto drop_pkt;
134327 - }
134328 -
134329 - if(_rtw_queue_empty(&precvpriv->free_recv_buf_queue) == _TRUE)
134330 - {
134331 - precvbuf = NULL;
134332 - RT_TRACE(_module_hci_intfs_c_,_drv_emerg_,("\n sd_recv_rxfifo : precvbuf= NULL precvpriv->free_recv_buf_queue_cnt=%d \n",precvpriv->free_recv_buf_queue_cnt));
134333 - goto drop_pkt;
134334 - }
134335 - else
134336 - {
134337 - _enter_critical(&precvpriv->free_recv_buf_queue.lock, &irql);
134338 - precvbuf_head = get_list_head(&precvpriv->free_recv_buf_queue);
134339 - precvbuf_list = get_next(precvbuf_head);
134340 - precvbuf = LIST_CONTAINOR(precvbuf_list, struct recv_buf, list);
134341 - rtw_list_delete(&precvbuf->list);
134342 - precvpriv->free_recv_buf_queue_cnt--;
134343 -
134344 - RT_TRACE(_module_hci_intfs_c_,_drv_notice_,("\n sd_recv_rxfifo : precvbuf= 0x%p dequeue: free_recv_buf_queue_cnt=%d\n",precvbuf,precvpriv->free_recv_buf_queue_cnt));
134345 - _exit_critical(&precvpriv->free_recv_buf_queue.lock, &irql);
134346 - }
134347 - read_pkt2recvbuf(padapter, cnt, precvbuf);
134348 -
134349 - return;
134350 -
134351 -drop_pkt:
134352 -
134353 - if (cnt >0) {
134354 - do{
134355 - if (cnt > MAX_RECVBUF_SZ) {
134356 - rtw_read_port(padapter, 0x10380000, MAX_RECVBUF_SZ, (u8 *)precvpriv->recvbuf_drop);
134357 - RT_TRACE(_module_hci_intfs_c_,_drv_notice_,("=========sd_recv_rxfifo precvbuf= NULL no recvbuf cnt=%d tmp read %d",cnt,MAX_RECVBUF_SZ));
134358 - cnt=cnt-MAX_RECVBUF_SZ;
134359 - } else {
134360 - rtw_read_port(padapter, 0x10380000, cnt, (u8 *)precvpriv->recvbuf_drop);
134361 - RT_TRACE(_module_hci_intfs_c_,_drv_notice_,("=========sd_recv_rxfifo precvbuf= NULL no recvbuf cnt=%d tmp read(@) %d",cnt,cnt));
134362 - cnt=0;
134363 - }
134364 - } while(cnt > 0);
134365 - }
134366 -
134367 - return;
134368 -}
134369 -#endif
134370 -#if 0
134371 -void sd_c2h_hdl(PADAPTER padapter)
134372 -{
134373 - u8 cmd_seq, pkt_num = 0;
134374 - u16 tmp16, sz, cmd_len = 0;
134375 - u32 rd_sz=0, cmd_sz = 0;//,ptr;
134376 - struct evt_priv *pevtpriv = &padapter->evtpriv;
134377 - pkt_num = rtw_read8(padapter, 0x102500BF);
134378 -// RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("@ sd_c2h_hdl:pkt_num=%d",pkt_num));
134379 -get_next:
134380 -// ptr=rtw_read32(padapter,0x102500e8);
134381 -// RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("@ sd_c2h_hdl:C2H fifo RDPTR=0x%x",ptr));
134382 -// ptr=rtw_read32(padapter,0x102500ec);
134383 -// RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("@ sd_c2h_hdl:C2H fifo WTPTR=0x%x",ptr));
134384 -// if(pkt_num==0x0 ){
134385 -// RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("@ sd_c2h_hdl:cmd_pkt num=0x%x!",pkt_num));
134386 -// return;
134387 -// }
134388 - RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("@ sd_c2h_hdl:pkt_num=%d",pkt_num));
134389 - //memset(pevtpriv->c2h_mem,0,512);
134390 - rtw_read_port(padapter, RTL8712_DMA_C2HCMD, 512, pevtpriv->c2h_mem);
134391 - cmd_sz = *(u16 *)&pevtpriv->c2h_mem[0];
134392 - cmd_sz &= 0x3fff;
134393 - RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("sd_c2h_hdl: cmd_sz=%d[0x%x]!",cmd_sz,cmd_sz));
134394 - tmp16 = *(u16 *)&pevtpriv->c2h_mem[4];
134395 - tmp16 &= 0x01ff;
134396 - if (tmp16 !=0x1ff) {
134397 - RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("sd_c2h_hdl: 0x1ff error[0x%x]!",pevtpriv->c2h_mem[4]));
134398 - goto exit;
134399 - }
134400 - if((cmd_sz+24) >512){
134401 - rtw_read_port(padapter, RTL8712_DMA_C2HCMD, (cmd_sz+24-512), pevtpriv->c2h_mem+512);
134402 - RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("sd_c2h_hdl: read the second part of c2h event!"));
134403 - }
134404 - cmd_seq = pevtpriv->c2h_mem[27];
134405 - cmd_seq &= 0x7f;
134406 - if (pevtpriv->event_seq != cmd_seq) {
134407 - RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("sd_c2h_hdl: pevtpriv->event_seq (%d) != c2hbuf seq(%d)",pevtpriv->event_seq,cmd_seq));
134408 - } else {
134409 - RT_TRACE(_module_hci_intfs_c_, _drv_notice_, ("sd_c2h_hdl: pevtpriv->event_seq (%d) == c2hbuf seq(%d)",pevtpriv->event_seq,cmd_seq));
134410 - }
134411 - cmd_len = *(u16 *)&pevtpriv->c2h_mem[0];
134412 - cmd_len &= 0x3ff;
134413 - RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("@sd_c2h_hdl: cmd_len=%d",cmd_len));
134414 -// if(cmd_len){
134415 -// memset(pevtpriv->c2h_mem+cmd_len,0,cmd_len);
134416 -// rtw_read_port(padapter, RTL8712_DMA_C2HCMD, cmd_len, pevtpriv->c2h_mem+cmd_len);
134417 -// }
134418 -// pevtpriv->event_seq=pevtpriv->event_seq++;
134419 -// if(pevtpriv->event_seq>127)
134420 -// pevtpriv->event_seq=0;
134421 -
134422 - RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("sd_c2h_hdl:!"));
134423 - rxcmd_event_hdl(padapter,pevtpriv->c2h_mem);
134424 - if (pkt_num > 1) {
134425 - pkt_num--;
134426 - RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("sd_c2h_hdl: pkt_num=%d",pkt_num));
134427 - goto get_next;
134428 - }
134429 -
134430 -exit:
134431 -
134432 - return;
134433 -}
134434 -#endif
134435 -void update_free_ffsz_int(_adapter *padapter )
134436 -{
134437 - struct xmit_priv *pxmitpriv=&padapter->xmitpriv;
134438 - RT_TRACE(_module_hci_ops_c_,_drv_err_,("\n====(before)=padapter->xmitpriv.public_pgsz=0x%x====update_free_ffsz: free_pg=0x%x:0x%x:0x%x:0x%x:0x%x:0x%x:0x%x:0x%x \n",
134439 - padapter->xmitpriv.public_pgsz,
134440 - pxmitpriv->free_pg[0],pxmitpriv->free_pg[1],pxmitpriv->free_pg[2],pxmitpriv->free_pg[3],
134441 - pxmitpriv->free_pg[4],pxmitpriv->free_pg[5],pxmitpriv->free_pg[6],pxmitpriv->free_pg[7]));
134442 -// rtw_read_mem(padapter,SDIO_BCNQ_FREEPG,8,pxmitpriv->free_pg);
134443 - sdio_read_int(padapter, SDIO_BCNQ_FREEPG, 8, pxmitpriv->free_pg);
134444 - padapter->xmitpriv.public_pgsz = pxmitpriv->free_pg[0];
134445 - if (pxmitpriv->public_pgsz > pxmitpriv->init_pgsz) {
134446 - pxmitpriv->init_pgsz = pxmitpriv->public_pgsz;
134447 - }
134448 -
134449 - {
134450 - u8 diff;
134451 - if (pxmitpriv->public_pgsz > (pxmitpriv->init_pgsz - pxmitpriv->used_pgsz)) {
134452 - RT_TRACE(_module_hci_ops_c_,_drv_err_,("\n====(0)=====update_free_ffsz: pxmitpriv->public_pgsz=0x%x pxmitpriv->init_pgsz=0x%x pxmitpriv->used_pgsz=0x%x \n",pxmitpriv->public_pgsz ,pxmitpriv->init_pgsz, pxmitpriv->used_pgsz));
134453 - diff = pxmitpriv->public_pgsz - (pxmitpriv->init_pgsz - pxmitpriv->used_pgsz);
134454 - pxmitpriv->used_pgsz = pxmitpriv->used_pgsz - diff;
134455 -// pxmitpriv->required_pgsz = pxmitpriv->required_pgsz - diff;
134456 - RT_TRACE(_module_hci_ops_c_,_drv_err_,("\n====(1)=====update_free_ffsz: pxmitpriv->public_pgsz =0x%x diff=0x%x pxmitpriv->used_pgsz=0x%x pxmitpriv->required_pgsz=0x%x\n",pxmitpriv->public_pgsz,diff,pxmitpriv->used_pgsz,pxmitpriv->required_pgsz) );
134457 - } else {
134458 -
134459 - }
134460 - }
134461 -
134462 - RT_TRACE(_module_hci_ops_c_,_drv_err_,("\n====(after)=====update_free_ffsz: free_pg=0x%x:0x%x:0x%x:0x%x:0x%x:0x%x:0x%x:0x%x \n",
134463 - pxmitpriv->free_pg[0],pxmitpriv->free_pg[1],pxmitpriv->free_pg[2],pxmitpriv->free_pg[3],
134464 - pxmitpriv->free_pg[4],pxmitpriv->free_pg[5],pxmitpriv->free_pg[6],pxmitpriv->free_pg[7]));
134465 -
134466 - return;
134467 -}
134468 -
134469 -void sd_int_dpc(PADAPTER padapter);
134470 -#if 0
134471 -void sd_int_dpc(PADAPTER padapter)
134472 -{
134473 - uint tasks= (padapter->IsrContent /*& padapter->ImrContent*/);
134474 -// rtw_write16(padapter,SDIO_HIMR,0);
134475 -
134476 - RT_TRACE(_module_hci_intfs_c_,_drv_notice_,(" sd_int_dpc[0x%x] ",padapter->IsrContent));
134477 -
134478 - if ((tasks & _VOQ_AVAL_IND) || (tasks & _VIQ_AVAL_IND) || (tasks & _BEQ_AVAL_IND) || (tasks & _BKQ_AVAL_IND) || (tasks & _BMCQ_AVAL_IND)) {
134479 - RT_TRACE(_module_hci_intfs_c_,_drv_notice_,("==============INT : _TXDONE"));
134480 - update_free_ffsz_int(padapter);
134481 - } else {
134482 - if (((padapter->xmitpriv.init_pgsz - padapter->xmitpriv.used_pgsz) > 0 && (padapter->xmitpriv.init_pgsz - padapter->xmitpriv.used_pgsz) < 0x2f) || padapter->xmitpriv.required_pgsz > 0) {
134483 - RT_TRACE(_module_hci_intfs_c_,_drv_notice_,("==============padapter->xmitpriv.public_pgsz[0x%x] <30 ",padapter->xmitpriv.public_pgsz));
134484 - update_free_ffsz_int(padapter);
134485 - }
134486 - }
134487 -
134488 - if(tasks & _C2HCMD)
134489 - {
134490 -// RT_TRACE(_module_hci_intfs_c_,_drv_err_,("======C2H_CMD========"));
134491 - padapter->IsrContent ^= _C2HCMD;
134492 - sd_c2h_hdl(padapter);
134493 -// RT_TRACE(_module_hci_intfs_c_,_drv_err_,("======C2H_CMD[end]========"));
134494 - }
134495 -
134496 - if(tasks & _RXDONE)
134497 - {
134498 - RT_TRACE(_module_hci_intfs_c_,_drv_notice_,("==============INT : _RXDONE"));
134499 - padapter->IsrContent ^= _RXDONE;
134500 - sd_recv_rxfifo(padapter);
134501 - }
134502 -
134503 -}
134504 -#endif
134505 -void sd_sync_int_hdl(struct sdio_func *func)
134506 -{
134507 - struct dvobj_priv *psdpriv = sdio_get_drvdata(func);
134508 - _adapter *padapter = (_adapter*)psdpriv->padapter;
134509 - u16 tmp16;
134510 -// uint tasks;
134511 -
134512 -_func_enter_;
134513 -
134514 - if ((padapter->bDriverStopped ==_TRUE) || (padapter->bSurpriseRemoved == _TRUE)) {
134515 - goto exit;
134516 - }
134517 -
134518 - //padapter->IsrContent=rtw_read16(padapter, SDIO_HISR);
134519 - sdio_read_int(padapter, SDIO_HISR, 2, &psdpriv->sdio_hisr);
134520 -
134521 - if (psdpriv->sdio_hisr & psdpriv->sdio_himr)
134522 - {
134523 - sdio_write_int(padapter, SDIO_HIMR, 0, 2);
134524 - sd_int_dpc(padapter);
134525 - sdio_write_int(padapter, SDIO_HIMR, psdpriv->sdio_himr, 2);
134526 -
134527 - sdio_read_int(padapter, SDIO_HIMR, 2, &tmp16);
134528 - if (tmp16 != psdpriv->sdio_himr)
134529 - sdio_write_int(padapter, SDIO_HIMR, psdpriv->sdio_himr, 2);
134530 - } else {
134531 - RT_TRACE(_module_hci_intfs_c_, _drv_info_, ("<=========== sd_sync_int_hdl(): not our INT"));
134532 - }
134533 -exit:
134534 -
134535 -_func_exit_;
134536 -
134537 - return;
134538 -}
134539 -
134540 -static int r871xs_drv_init(struct sdio_func *func, const struct sdio_device_id *id)
134541 -{
134542 - _adapter *padapter = NULL;
134543 - struct dvobj_priv *pdvobjpriv;
134544 - struct net_device *pnetdev;
134545 -
134546 - RT_TRACE(_module_hci_intfs_c_,_drv_alert_,("+871x - drv_init:id=0x%p func->vendor=0x%x func->device=0x%x\n",id,func->vendor,func->device));
134547 -
134548 - //step 1.
134549 - pnetdev = rtw_init_netdev(NULL);
134550 - if (!pnetdev)
134551 - goto error;
134552 -
134553 - padapter = rtw_netdev_priv(pnetdev);
134554 - pdvobjpriv = &padapter->dvobjpriv;
134555 - pdvobjpriv->padapter = padapter;
134556 - pdvobjpriv->func = func;
134557 - sdio_set_drvdata(func, pdvobjpriv);
134558 - SET_NETDEV_DEV(pnetdev, &func->dev);
134559 -
134560 -
134561 - //step 2.
134562 - if (alloc_io_queue(padapter) == _FAIL) {
134563 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("Can't init io_reqs\n"));
134564 - goto error;
134565 - }
134566 -
134567 -
134568 -#if 0 //temp remove
134569 - //step 3.
134570 - if (loadparam(padapter, pnetdev) == _FAIL) {
134571 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("Read Parameter Failed!\n"));
134572 - goto error;
134573 - }
134574 -#endif
134575 -
134576 - //step 4.
134577 - //dvobj_init(padapter);
134578 - padapter->dvobj_init = &sd_dvobj_init;
134579 - padapter->dvobj_deinit = &sd_dvobj_deinit;
134580 - padapter->halpriv.hal_bus_init = &sd_hal_bus_init;
134581 - padapter->halpriv.hal_bus_deinit = &sd_hal_bus_deinit;
134582 -
134583 - if (padapter->dvobj_init == NULL) {
134584 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("\n Initialize dvobjpriv.dvobj_init error!!!\n"));
134585 - goto error;
134586 - }
134587 -
134588 - if (padapter->dvobj_init(padapter) == _FAIL) {
134589 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("\n initialize device object priv Failed!\n"));
134590 - goto error;
134591 - }
134592 -
134593 -
134594 - //step 6.
134595 - if (rtw_init_drv_sw(padapter) == _FAIL) {
134596 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("Initialize driver software resource Failed!\n"));
134597 - goto error;
134598 - }
134599 -
134600 -#if 1
134601 -{
134602 - //step 7.
134603 - u8 mac[6];
134604 - mac[0]=0x00;
134605 - mac[1]=0xe0;
134606 - mac[2]=0x4c;
134607 - mac[3]=0x87;
134608 - mac[4]=0x66;
134609 - mac[5]=0x55;
134610 -
134611 - _rtw_memcpy(pnetdev->dev_addr, mac/*padapter->eeprompriv.mac_addr*/, ETH_ALEN);
134612 - RT_TRACE(_module_hci_intfs_c_,_drv_info_,("pnetdev->dev_addr=0x%x:0x%x:0x%x:0x%x:0x%x:0x%x\n",pnetdev->dev_addr[0],pnetdev->dev_addr[1],pnetdev->dev_addr[2],pnetdev->dev_addr[3],pnetdev->dev_addr[4],pnetdev->dev_addr[5]));
134613 -}
134614 -#endif
134615 - //step 8.
134616 - /* Tell the network stack we exist */
134617 - if (register_netdev(pnetdev) != 0) {
134618 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("register_netdev() failed\n"));
134619 - goto error;
134620 - }
134621 - RT_TRACE(_module_hci_intfs_c_,_drv_info_,("register_netdev() success\n"));
134622 - RT_TRACE(_module_hci_intfs_c_,_drv_notice_,("-drv_init - Adapter->bDriverStopped=%d, Adapter->bSurpriseRemoved=%d\n",padapter->bDriverStopped, padapter->bSurpriseRemoved));
134623 - RT_TRACE(_module_hci_intfs_c_,_drv_info_,("-871xs_drv - drv_init, success!\n"));
134624 -
134625 - return 0;
134626 -
134627 -error:
134628 -
134629 - if (padapter->dvobj_deinit == NULL) {
134630 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("\n Initialize dvobjpriv.dvobj_deinit error!!!\n"));
134631 - } else {
134632 - padapter->dvobj_deinit(padapter);
134633 - }
134634 -
134635 - if (pnetdev) {
134636 - unregister_netdev(pnetdev);
134637 - rtw_free_netdev(pnetdev);
134638 - }
134639 -
134640 - RT_TRACE(_module_hci_intfs_c_, _drv_emerg_, ("-871x_sdio - drv_init, fail!\n"));
134641 -
134642 - return -1;
134643 -}
134644 -
134645 -void rtl871x_intf_stop(_adapter *padapter)
134646 -{
134647 - // Disable interrupt, also done in rtl8712_hal_deinit
134648 -// rtw_write16(padapter, SDIO_HIMR, 0x00);
134649 -}
134650 -
134651 -void r871x_dev_unload(_adapter *padapter)
134652 -{
134653 - struct net_device *pnetdev = (struct net_device*)padapter->pnetdev;
134654 -
134655 - RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("+r871x_dev_unload\n"));
134656 -
134657 - if (padapter->bup == _TRUE)
134658 - {
134659 -#if 0
134660 - //s1.
134661 - if (pnetdev) {
134662 - netif_carrier_off(pnetdev);
134663 - netif_stop_queue(pnetdev);
134664 - }
134665 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("@ r871x_dev_unload:complelte s1!\n"));
134666 -
134667 - //s2.
134668 - // indicate-disconnect if necssary (free all assoc-resources)
134669 - // dis-assoc from assoc_sta (optional)
134670 - rtw_indicate_disconnect(padapter);
134671 - rtw_free_network_queue(padapter, _TRUE);
134672 -#endif
134673 -
134674 - padapter->bDriverStopped = _TRUE;
134675 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("@ r871x_dev_unload:complete s2!\n"));
134676 -
134677 - //s3.
134678 - rtl871x_intf_stop(padapter);
134679 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("@ r871x_dev_unload:complete s3!\n"));
134680 -
134681 - //s4.
134682 - rtw_stop_drv_threads(padapter);
134683 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("@ r871x_dev_unload:complete s4!\n"));
134684 -
134685 - //s5.
134686 - if (padapter->bSurpriseRemoved == _FALSE) {
134687 - rtl871x_hal_deinit(padapter);
134688 - padapter->bSurpriseRemoved = _TRUE;
134689 - }
134690 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("@ r871x_dev_unload:complelt s5!\n"));
134691 -
134692 -
134693 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("@ r871x_dev_unload:complete s6!\n"));
134694 -
134695 - padapter->bup = _FALSE;
134696 - }
134697 - else {
134698 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("r871x_dev_unload():padapter->bup == _FALSE\n" ));
134699 - }
134700 -
134701 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-r871x_dev_unload\n"));
134702 -}
134703 -
134704 -static void r8712s_dev_remove(struct sdio_func *func)
134705 -{
134706 - _adapter *padapter = (_adapter*) (((struct dvobj_priv*)sdio_get_drvdata(func))->padapter);
134707 - struct net_device *pnetdev = (struct net_device *)padapter->pnetdev;
134708 -
134709 -_func_exit_;
134710 -
134711 - if (padapter)
134712 - {
134713 - RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("+dev_remove()\n"));
134714 -
134715 -// padapter->bSurpriseRemoved = _TRUE;
134716 -
134717 - if (pnetdev)
134718 - unregister_netdev(pnetdev); //will call netdev_close()
134719 -
134720 - rtw_cancel_all_timer(padapter);
134721 -
134722 - r871x_dev_unload(padapter);
134723 - //s6.
134724 - if (padapter->dvobj_deinit) {
134725 - padapter->dvobj_deinit(padapter); // call sd_dvobj_deinit()
134726 - } else {
134727 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("Initialize hcipriv.hci_priv_init error!!!\n"));
134728 - }
134729 -
134730 - rtw_free_drv_sw(padapter);
134731 - //after rtw_free_drv_sw(), padapter has beed freed, don't refer to it.
134732 -
134733 - sdio_claim_host(func);
134734 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,(" in dev_remove():sdio_claim_host !\n"));
134735 - sdio_release_irq(func);
134736 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,(" in dev_remove():sdio_release_irq !\n"));
134737 - sdio_disable_func(func);
134738 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,(" in dev_remove():sdio_disable_func !\n"));
134739 - sdio_release_host(func);
134740 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,(" in dev_remove():sdio_release_host !\n"));
134741 - }
134742 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-dev_remove()\n"));
134743 -
134744 -_func_exit_;
134745 -
134746 - return;
134747 -}
134748 -
134749 -static drv_priv drvpriv = {
134750 - .r871xs_drv.probe = r871xs_drv_init,
134751 - .r871xs_drv.remove = r8712s_dev_remove,
134752 - .r871xs_drv.name = "rtl871x_sdio_wlan",
134753 - .r871xs_drv.id_table = sdio_ids,
134754 -};
134755 -
134756 -
134757 -static int __init r8712s_drv_entry(void)
134758 -{
134759 - int status;
134760 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("+8712s_sdio - drv_entry\n"));
134761 - status = sdio_register_driver(&drvpriv.r871xs_drv);
134762 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-8712_sdio - drv_entry, status=%d\n", status));
134763 -
134764 - return status;
134765 -}
134766 -
134767 -static void __exit r8712s_drv_halt(void)
134768 -{
134769 - int ret;
134770 -
134771 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("+8712_sdio - drv_halt\n"));
134772 - sdio_unregister_driver(&drvpriv.r871xs_drv); // call r8712s_dev_remove()
134773 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-8712_sdio - drv_halt\n"));
134774 -
134775 -}
134776 -
134777 -
134778 -module_init(r8712s_drv_entry);
134779 -module_exit(r8712s_drv_halt);
134780 --- a/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_intf.c
134781 +++ b/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_intf.c
134782 @@ -1,7 +1,7 @@
134783 /******************************************************************************
134784 *
134785 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
134786 - *
134787 + *
134788 * This program is free software; you can redistribute it and/or modify it
134789 * under the terms of version 2 of the GNU General Public License as
134790 * published by the Free Software Foundation.
134791 @@ -16,8 +16,7 @@
134792 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
134793 *
134794 *
134795 -
134796 -******************************************************************************/
134797 + ******************************************************************************/
134798 #define _HCI_INTF_C_
134799
134800 #include <drv_conf.h>
134801 @@ -25,7 +24,7 @@
134802 #include <drv_types.h>
134803 #include <recv_osdep.h>
134804 #include <xmit_osdep.h>
134805 -#include <hal_init.h>
134806 +#include <hal_intf.h>
134807 #include <rtw_version.h>
134808
134809 #ifndef CONFIG_USB_HCI
134810 @@ -62,7 +61,7 @@ int ui_pid[3] = {0, 0, 0};
134811 extern int pm_netdev_open(struct net_device *pnetdev,u8 bnormal);
134812 static int rtw_suspend(struct usb_interface *intf, pm_message_t message);
134813 static int rtw_resume(struct usb_interface *intf);
134814 -int rtw_resume_process(struct usb_interface *pusb_intf);
134815 +int rtw_resume_process(_adapter *padapter);
134816
134817
134818 static int rtw_drv_init(struct usb_interface *pusb_intf,const struct usb_device_id *pdid);
134819 @@ -70,117 +69,142 @@ static void rtw_dev_remove(struct usb_in
134820
134821 #define USB_VENDER_ID_REALTEK 0x0BDA
134822
134823 -//DID_USB_v82_20110808
134824 -static struct usb_device_id rtw_usb_id_tbl[] ={
134825 -#ifdef CONFIG_RTL8192C
134826 - /*=== Realtek demoboard ===*/
134827 - {USB_DEVICE(0x0BDA, 0x8191)},//Default ID
134828 -
134829 - /****** 8188CUS ********/
134830 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8176)},//8188cu 1*1 dongole
134831 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8170)},//8188CE-VAU USB minCard
134832 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817E)},//8188CE-VAU USB minCard
134833 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817A)},//8188cu Slim Solo
134834 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817B)},//8188cu Slim Combo
134835 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817D)},//8188RU High-power USB Dongle
134836 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8754)},//8188 Combo for BC4
134837 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817F)},//8188RU
134838 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x818A)},//RTL8188CUS-VL
134839 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x018A)},//RTL8188CTV
134840 -
134841 - /****** 8192CUS ********/
134842 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8177)},//8191cu 1*2
134843 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8178)},//8192cu 2*2
134844 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817C)},//8192CE-VAU USB minCard
134845 -
134846 -
134847 - /*=== Customer ID ===*/
134848 - /****** 8188CUS Dongle ********/
134849 - {USB_DEVICE(0x2019, 0xED17)},//PCI - Edimax
134850 - {USB_DEVICE(0x0DF6, 0x0052)},//Sitecom - Edimax
134851 - {USB_DEVICE(0x7392, 0x7811)},//Edimax - Edimax
134852 - {USB_DEVICE(0x07B8, 0x8189)},//Abocom - Abocom
134853 - {USB_DEVICE(0x0EB0, 0x9071)},//NO Brand - Etop
134854 - {USB_DEVICE(0x06F8, 0xE033)},//Hercules - Edimax
134855 - {USB_DEVICE(0x103C, 0x1629)},//HP - Lite-On ,8188CUS Slim Combo
134856 - {USB_DEVICE(0x2001, 0x3308)},//D-Link - Alpha
134857 - {USB_DEVICE(0x050D, 0x1102)},//Belkin - Edimax
134858 - {USB_DEVICE(0x2019, 0xAB2A)},//Planex - Abocom
134859 - {USB_DEVICE(0x20F4, 0x648B)},//TRENDnet - Cameo
134860 - {USB_DEVICE(0x4855, 0x0090)},// - Feixun
134861 - {USB_DEVICE(0x13D3, 0x3357)},// - AzureWave
134862 - {USB_DEVICE(0x0DF6, 0x005C)},//Sitecom - Edimax
134863 - {USB_DEVICE(0x0BDA, 0x5088)},//Thinkware - CC&C
134864 - {USB_DEVICE(0x4856, 0x0091)},//NetweeN - Feixun
134865 - {USB_DEVICE(0x2019, 0x4902)},//Planex - Etop
134866 - {USB_DEVICE(0x2019, 0xAB2E)},//SW-WF02-AD15 -Abocom
134867 - {USB_DEVICE(0x0846, 0x9041)},//Netgear
134868 -
134869 - /****** 8188 RU ********/
134870 - {USB_DEVICE(0x0BDA, 0x317F)},//Netcore,Netcore
134871 -
134872 - /****** 8188CE-VAU ********/
134873 - {USB_DEVICE(0x13D3, 0x3359)},// - Azwave
134874 - {USB_DEVICE(0x13D3, 0x3358)},// - Azwave
134875 -
134876 - /****** 8188CUS Slim Solo********/
134877 - {USB_DEVICE(0x04F2, 0xAFF7)},//XAVI - XAVI
134878 - {USB_DEVICE(0x04F2, 0xAFF9)},//XAVI - XAVI
134879 - {USB_DEVICE(0x04F2, 0xAFFA)},//XAVI - XAVI
134880 -
134881 - /****** 8188CUS Slim Combo ********/
134882 - {USB_DEVICE(0x04F2, 0xAFF8)},//XAVI - XAVI
134883 - {USB_DEVICE(0x04F2, 0xAFFB)},//XAVI - XAVI
134884 - {USB_DEVICE(0x04F2, 0xAFFC)},//XAVI - XAVI
134885 - {USB_DEVICE(0x2019, 0x1201)},//Planex - Vencer
134886 -
134887 - /****** 8192CUS Dongle ********/
134888 - {USB_DEVICE(0x2001, 0x3307)},//D-Link - Cameo
134889 - {USB_DEVICE(0x2001, 0x330A)},//D-Link - Alpha
134890 - {USB_DEVICE(0x2001, 0x3309)},//D-Link - Alpha
134891 - {USB_DEVICE(0x2001, 0x330D)},//D-Link - Alpha(?)
134892 - {USB_DEVICE(0x0586, 0x341F)},//Zyxel - Abocom
134893 - {USB_DEVICE(0x7392, 0x7822)},//Edimax - Edimax
134894 - {USB_DEVICE(0x2019, 0xAB2B)},//Planex - Abocom
134895 - {USB_DEVICE(0x07B8, 0x8178)},//Abocom - Abocom
134896 - {USB_DEVICE(0x07AA, 0x0056)},//ATKK - Gemtek
134897 - {USB_DEVICE(0x4855, 0x0091)},// - Feixun
134898 - {USB_DEVICE(0x2001, 0x3307)},//D-Link-Cameo
134899 - {USB_DEVICE(0x050D, 0x2102)},//Belkin - Sercomm
134900 - {USB_DEVICE(0x050D, 0x2103)},//Belkin - Edimax
134901 - {USB_DEVICE(0x20F4, 0x624D)},//TRENDnet
134902 - {USB_DEVICE(0x0DF6, 0x0061)},//Sitecom - Edimax
134903 - {USB_DEVICE(0x0B05, 0x17AB)},//ASUS - Edimax
134904 - {USB_DEVICE(0x0846, 0x9021)},//Netgear - Sercomm
134905 - {USB_DEVICE(0x0E66, 0x0019)},//Hawking,Edimax
134906 -
134907 - /****** 8192CE-VAU ********/
134908 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8186)},//Intel-Xavi( Azwave)
134909 +/* DID_USB_v915_20121224 */
134910 +#define RTL8192C_USB_IDS \
134911 + /*=== Realtek demoboard ===*/ \
134912 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8191)},/* Default ID */ \
134913 + /****** 8188CUS ********/ \
134914 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8176)},/* 8188cu 1*1 dongole */ \
134915 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8170)},/* 8188CE-VAU USB minCard */ \
134916 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817E)},/* 8188CE-VAU USB minCard */ \
134917 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817A)},/* 8188cu Slim Solo */ \
134918 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817B)},/* 8188cu Slim Combo */ \
134919 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817D)},/* 8188RU High-power USB Dongle */ \
134920 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8754)},/* 8188 Combo for BC4 */ \
134921 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817F)},/* 8188RU */ \
134922 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x818A)},/* RTL8188CUS-VL */ \
134923 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x018A)},/* RTL8188CTV */ \
134924 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x17C0)}, /* RTK demoboard - USB-N10E */ \
134925 + /****** 8192CUS ********/ \
134926 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8177)},/* 8191cu 1*2 */ \
134927 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8178)},/* 8192cu 2*2 */ \
134928 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817C)},/* 8192CE-VAU USB minCard */ \
134929 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8191)},/* 8192CU 2*2 */ \
134930 + {USB_DEVICE(0x1058, 0x0631)},/* Alpha, 8192CU */ \
134931 + /*=== Customer ID ===*/ \
134932 + /****** 8188CUS Dongle ********/ \
134933 + {USB_DEVICE(0x2019, 0xED17)},/* PCI - Edimax */ \
134934 + {USB_DEVICE(0x0DF6, 0x0052)},/* Sitecom - Edimax */ \
134935 + {USB_DEVICE(0x7392, 0x7811)},/* Edimax - Edimax */ \
134936 + {USB_DEVICE(0x07B8, 0x8189)},/* Abocom - Abocom */ \
134937 + {USB_DEVICE(0x0EB0, 0x9071)},/* NO Brand - Etop */ \
134938 + {USB_DEVICE(0x06F8, 0xE033)},/* Hercules - Edimax */ \
134939 + {USB_DEVICE(0x103C, 0x1629)},/* HP - Lite-On ,8188CUS Slim Combo */ \
134940 + {USB_DEVICE(0x2001, 0x3308)},/* D-Link - Alpha */ \
134941 + {USB_DEVICE(0x050D, 0x1102)},/* Belkin - Edimax */ \
134942 + {USB_DEVICE(0x2019, 0xAB2A)},/* Planex - Abocom */ \
134943 + {USB_DEVICE(0x20F4, 0x648B)},/* TRENDnet - Cameo */ \
134944 + {USB_DEVICE(0x4855, 0x0090)},/* - Feixun */ \
134945 + {USB_DEVICE(0x13D3, 0x3357)},/* - AzureWave */ \
134946 + {USB_DEVICE(0x0DF6, 0x005C)},/* Sitecom - Edimax */ \
134947 + {USB_DEVICE(0x0BDA, 0x5088)},/* Thinkware - CC&C */ \
134948 + {USB_DEVICE(0x4856, 0x0091)},/* NetweeN - Feixun */ \
134949 + {USB_DEVICE(0x0846, 0x9041)}, /* Netgear - Cameo */ \
134950 + {USB_DEVICE(0x2019, 0x4902)},/* Planex - Etop */ \
134951 + {USB_DEVICE(0x2019, 0xAB2E)},/* SW-WF02-AD15 -Abocom */ \
134952 + {USB_DEVICE(0x2001, 0x330B)}, /* D-LINK - T&W */ \
134953 + {USB_DEVICE(0xCDAB, 0x8010)}, /* - - compare */ \
134954 + {USB_DEVICE(0x0B05, 0x17BA)}, /* ASUS - Edimax */ \
134955 + {USB_DEVICE(0x0BDA, 0x1E1E)}, /* Intel - - */ \
134956 + {USB_DEVICE(0x04BB, 0x094c)}, /* I-O DATA - Edimax */ \
134957 + /****** 8188CTV ********/ \
134958 + {USB_DEVICE(0xCDAB, 0x8011)}, /* - - compare */ \
134959 + {USB_DEVICE(0x0BDA, 0x0A8A)}, /* Sony - Foxconn */ \
134960 + /****** 8188 RU ********/ \
134961 + {USB_DEVICE(0x0BDA, 0x317F)},/* Netcore,Netcore */ \
134962 + /****** 8188CE-VAU ********/ \
134963 + {USB_DEVICE(0x13D3, 0x3359)},/* - Azwave */ \
134964 + {USB_DEVICE(0x13D3, 0x3358)},/* - Azwave */ \
134965 + /****** 8188CUS Slim Solo********/ \
134966 + {USB_DEVICE(0x04F2, 0xAFF7)},/* XAVI - XAVI */ \
134967 + {USB_DEVICE(0x04F2, 0xAFF9)},/* XAVI - XAVI */ \
134968 + {USB_DEVICE(0x04F2, 0xAFFA)},/* XAVI - XAVI */ \
134969 + /****** 8188CUS Slim Combo ********/ \
134970 + {USB_DEVICE(0x04F2, 0xAFF8)},/* XAVI - XAVI */ \
134971 + {USB_DEVICE(0x04F2, 0xAFFB)},/* XAVI - XAVI */ \
134972 + {USB_DEVICE(0x04F2, 0xAFFC)},/* XAVI - XAVI */ \
134973 + {USB_DEVICE(0x2019, 0x1201)},/* Planex - Vencer */ \
134974 + /****** 8192CUS Dongle ********/ \
134975 + {USB_DEVICE(0x2001, 0x3307)},/* D-Link - Cameo */ \
134976 + {USB_DEVICE(0x2001, 0x330A)},/* D-Link - Alpha */ \
134977 + {USB_DEVICE(0x2001, 0x3309)},/* D-Link - Alpha */ \
134978 + {USB_DEVICE(0x0586, 0x341F)},/* Zyxel - Abocom */ \
134979 + {USB_DEVICE(0x7392, 0x7822)},/* Edimax - Edimax */ \
134980 + {USB_DEVICE(0x2019, 0xAB2B)},/* Planex - Abocom */ \
134981 + {USB_DEVICE(0x07B8, 0x8178)},/* Abocom - Abocom */ \
134982 + {USB_DEVICE(0x07AA, 0x0056)},/* ATKK - Gemtek */ \
134983 + {USB_DEVICE(0x4855, 0x0091)},/* - Feixun */ \
134984 + {USB_DEVICE(0x050D, 0x2102)},/* Belkin - Sercomm */ \
134985 + {USB_DEVICE(0x050D, 0x2103)},/* Belkin - Edimax */ \
134986 + {USB_DEVICE(0x20F4, 0x624D)},/* TRENDnet */ \
134987 + {USB_DEVICE(0x0DF6, 0x0061)},/* Sitecom - Edimax */ \
134988 + {USB_DEVICE(0x0B05, 0x17AB)},/* ASUS - Edimax */ \
134989 + {USB_DEVICE(0x0846, 0x9021)},/* Netgear - Sercomm */ \
134990 + {USB_DEVICE(0x0846, 0xF001)}, /* Netgear - Sercomm */ \
134991 + {USB_DEVICE(0x0E66, 0x0019)},/* Hawking,Edimax */ \
134992 + {USB_DEVICE(0x0E66, 0x0020)}, /* Hawking - Edimax */ \
134993 + {USB_DEVICE(0x050D, 0x1004)}, /* Belkin - Edimax */ \
134994 + {USB_DEVICE(0x0BDA, 0x2E2E)}, /* Intel - - */ \
134995 + {USB_DEVICE(0x2357, 0x0100)}, /* TP-Link - TP-Link */ \
134996 + {USB_DEVICE(0x06F8, 0xE035)}, /* Hercules - Edimax */ \
134997 + {USB_DEVICE(0x04BB, 0x0950)}, /* IO-DATA - Edimax */ \
134998 + {USB_DEVICE(0x0DF6, 0x0070)}, /* Sitecom - Edimax */ \
134999 + {USB_DEVICE(0x0789, 0x016D)}, /* LOGITEC - Edimax */ \
135000 + /****** 8192CE-VAU ********/ \
135001 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8186)},/* Intel-Xavi( Azwave) */
135002 +
135003 +#define RTL8192D_USB_IDS \
135004 + /*=== Realtek demoboard ===*/ \
135005 + /****** 8192DU ********/ \
135006 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8193)},/* 8192DU-VC */ \
135007 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8194)},/* 8192DU-VS */ \
135008 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8111)},/* Realtek 5G dongle for WiFi Display */ \
135009 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x0193)},/* 8192DE-VAU */ \
135010 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8171)},/* 8192DU-VC */ \
135011 + /*=== Customer ID ===*/ \
135012 + /****** 8192DU-VC ********/ \
135013 + {USB_DEVICE(0x2019, 0xAB2C)},/* PCI - Abocm */ \
135014 + {USB_DEVICE(0x2019, 0x4903)},/* PCI - ETOP */ \
135015 + {USB_DEVICE(0x2019, 0x4904)},/* PCI - ETOP */ \
135016 + {USB_DEVICE(0x07B8, 0x8193)},/* Abocom - Abocom */ \
135017 + /****** 8192DU-VS ********/ \
135018 + {USB_DEVICE(0x20F4, 0x664B)}, /* TRENDnet - Cameo */ \
135019 + {USB_DEVICE(0x04DD, 0x954F)}, /* Sharp */ \
135020 + {USB_DEVICE(0x04DD, 0x96A6)}, /* Sharp */ \
135021 + {USB_DEVICE(0x050D, 0x110A)}, /* Belkin - Edimax */ \
135022 + {USB_DEVICE(0x050D, 0x1105)}, /* Belkin - Edimax */ \
135023 + {USB_DEVICE(0x050D, 0x120A)}, /* Belkin - Edimax */ \
135024 + {USB_DEVICE(0x1668, 0x8102)}, /* - */ \
135025 + {USB_DEVICE(0x0BDA, 0xE194)}, /* - Edimax */ \
135026 + /****** 8192DU-WiFi Display Dongle ********/ \
135027 + {USB_DEVICE(0x2019, 0xAB2D)},/* Planex - Abocom ,5G dongle for WiFi Display */
135028 +
135029 +#ifndef CONFIG_RTL8192C
135030 + #undef RTL8192C_USB_IDS
135031 + #define RTL8192C_USB_IDS
135032 +#endif
135033 +#ifndef CONFIG_RTL8192D
135034 + #undef RTL8192D_USB_IDS
135035 + #define RTL8192D_USB_IDS
135036 #endif
135037 -#ifdef CONFIG_RTL8192D
135038 - /*=== Realtek demoboard ===*/
135039 - /****** 8192DU ********/
135040 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8193)},//8192DU-VC
135041 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8194)},//8192DU-VS
135042 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8111)},//Realtek 5G dongle for WiFi Display
135043 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x0193)},//8192DE-VAU
135044 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8171)},//8192DU-VC
135045 -
135046 - /*=== Customer ID ===*/
135047 - /****** 8192DU-VC ********/
135048 - {USB_DEVICE(0x2019, 0xAB2C)},//PCI - Abocm
135049 - {USB_DEVICE(0x2019, 0x4903)},//PCI - ETOP
135050 - {USB_DEVICE(0x2019, 0x4904)},//PCI - ETOP
135051 - {USB_DEVICE(0x07B8, 0x8193)},//Abocom - Abocom
135052 -
135053 - /****** 8192DU-VS ********/
135054 - {USB_DEVICE(0x20F4, 0x664B)},//TRENDnet
135055
135056 - /****** 8192DU-WiFi Display Dongle ********/
135057 - {USB_DEVICE(0x2019, 0xAB2D)},//Planex - Abocom ,5G dongle for WiFi Display
135058 -#endif
135059 +
135060 +static struct usb_device_id rtw_usb_id_tbl[] ={
135061 + RTL8192C_USB_IDS
135062 + RTL8192D_USB_IDS
135063 {} /* Terminating entry */
135064 };
135065 +MODULE_DEVICE_TABLE(usb, rtw_usb_id_tbl);
135066
135067 int const rtw_usb_id_len = sizeof(rtw_usb_id_tbl) / sizeof(struct usb_device_id);
135068
135069 @@ -189,7 +213,7 @@ static struct specific_device_id specifi
135070 {.idVendor=USB_VENDER_ID_REALTEK, .idProduct=0x817E, .flags=SPEC_DEV_ID_DISABLE_HT},//8188CE-VAU USB minCard (b/g mode only)
135071 {.idVendor=0x0b05, .idProduct=0x1791, .flags=SPEC_DEV_ID_DISABLE_HT},
135072 {.idVendor=0x13D3, .idProduct=0x3311, .flags=SPEC_DEV_ID_DISABLE_HT},
135073 - {.idVendor=0x13D3, .idProduct=0x3359, .flags=SPEC_DEV_ID_DISABLE_HT},//Russian customer -Azwave (8188CE-VAU g mode)
135074 + {.idVendor=0x13D3, .idProduct=0x3359, .flags=SPEC_DEV_ID_DISABLE_HT},//Russian customer -Azwave (8188CE-VAU g mode)
135075 #ifdef RTK_DMP_PLATFORM
135076 {.idVendor=USB_VENDER_ID_REALTEK, .idProduct=0x8111, .flags=SPEC_DEV_ID_ASSIGN_IFNAME}, // Realtek 5G dongle for WiFi Display
135077 {.idVendor=0x2019, .idProduct=0xAB2D, .flags=SPEC_DEV_ID_ASSIGN_IFNAME}, // PCI-Abocom 5G dongle for WiFi Display
135078 @@ -197,31 +221,86 @@ static struct specific_device_id specifi
135079 {}
135080 };
135081
135082 -typedef struct _driver_priv{
135083 -
135084 - struct usb_driver rtw_usb_drv;
135085 +struct rtw_usb_drv {
135086 + struct usb_driver usbdrv;
135087 int drv_registered;
135088 +};
135089
135090 -}drv_priv, *pdrv_priv;
135091 +static void rtw_dev_shutdown(struct device *dev)
135092 +{
135093 + struct usb_interface *usb_intf = container_of(dev, struct usb_interface, dev);
135094 + struct dvobj_priv *dvobj = usb_get_intfdata(usb_intf);
135095 + _adapter *adapter = dvobj->if1;
135096 + int i;
135097
135098 + DBG_871X("%s\n", __func__);
135099
135100 -static drv_priv drvpriv = {
135101 - .rtw_usb_drv.name = (char*)DRV_NAME,
135102 - .rtw_usb_drv.probe = rtw_drv_init,
135103 - .rtw_usb_drv.disconnect = rtw_dev_remove,
135104 - .rtw_usb_drv.id_table = rtw_usb_id_tbl,
135105 - .rtw_usb_drv.suspend = rtw_suspend,
135106 - .rtw_usb_drv.resume = rtw_resume,
135107 -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 22))
135108 - .rtw_usb_drv.reset_resume = rtw_resume,
135109 -#endif
135110 -#ifdef CONFIG_AUTOSUSPEND
135111 - .rtw_usb_drv.supports_autosuspend = 1,
135112 -#endif
135113 + for (i = 0; i<dvobj->iface_nums; i++) {
135114 + adapter = dvobj->padapters[i];
135115 + adapter->bSurpriseRemoved = _TRUE;
135116 + }
135117 +
135118 + ATOMIC_SET(&dvobj->continual_urb_error, MAX_CONTINUAL_URB_ERR+1);
135119 +}
135120 +
135121 +#ifdef CONFIG_RTL8192C
135122 +static struct usb_device_id rtl8192c_usb_id_tbl[] ={
135123 + RTL8192C_USB_IDS
135124 + {} /* Terminating entry */
135125 };
135126
135127 -MODULE_DEVICE_TABLE(usb, rtw_usb_id_tbl);
135128 +struct rtw_usb_drv rtl8192c_usb_drv = {
135129 + .usbdrv.name = (char*)"rtl8192cu",
135130 + .usbdrv.probe = rtw_drv_init,
135131 + .usbdrv.disconnect = rtw_dev_remove,
135132 + .usbdrv.id_table = rtl8192c_usb_id_tbl,
135133 + .usbdrv.suspend = rtw_suspend,
135134 + .usbdrv.resume = rtw_resume,
135135 + #if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 22))
135136 + .usbdrv.reset_resume = rtw_resume,
135137 + #endif
135138 + #ifdef CONFIG_AUTOSUSPEND
135139 + .usbdrv.supports_autosuspend = 1,
135140 + #endif
135141 +
135142 + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19))
135143 + .usbdrv.drvwrap.driver.shutdown = rtw_dev_shutdown,
135144 + #else
135145 + .usbdrv.driver.shutdown = rtw_dev_shutdown,
135146 + #endif
135147 +};
135148
135149 +static struct rtw_usb_drv *usb_drv = &rtl8192c_usb_drv;
135150 +#endif /* CONFIG_RTL8192C */
135151 +
135152 +#ifdef CONFIG_RTL8192D
135153 +static struct usb_device_id rtl8192d_usb_id_tbl[] ={
135154 + RTL8192D_USB_IDS
135155 + {} /* Terminating entry */
135156 +};
135157 +
135158 +struct rtw_usb_drv rtl8192d_usb_drv = {
135159 + .usbdrv.name = (char*)"rtl8192du",
135160 + .usbdrv.probe = rtw_drv_init,
135161 + .usbdrv.disconnect = rtw_dev_remove,
135162 + .usbdrv.id_table = rtl8192d_usb_id_tbl,
135163 + .usbdrv.suspend = rtw_suspend,
135164 + .usbdrv.resume = rtw_resume,
135165 + #if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 22))
135166 + .usbdrv.reset_resume = rtw_resume,
135167 + #endif
135168 + #ifdef CONFIG_AUTOSUSPEND
135169 + .usbdrv.supports_autosuspend = 1,
135170 + #endif
135171 +
135172 + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19))
135173 + .usbdrv.drvwrap.driver.shutdown = rtw_dev_shutdown,
135174 + #else
135175 + .usbdrv.driver.shutdown = rtw_dev_shutdown,
135176 + #endif
135177 +};
135178 +static struct rtw_usb_drv *usb_drv = &rtl8192d_usb_drv;
135179 +#endif /* CONFIG_RTL8192D */
135180
135181 static inline int RT_usb_endpoint_dir_in(const struct usb_endpoint_descriptor *epd)
135182 {
135183 @@ -263,58 +342,54 @@ static inline int RT_usb_endpoint_num(co
135184 return epd->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK;
135185 }
135186
135187 -u8 rtw_init_intf_priv(_adapter * padapter)
135188 +static u8 rtw_init_intf_priv(struct dvobj_priv *dvobj)
135189 {
135190 - u8 rst = _SUCCESS;
135191 -
135192 + u8 rst = _SUCCESS;
135193 +
135194 #ifdef CONFIG_USB_VENDOR_REQ_MUTEX
135195 - _rtw_mutex_init(&padapter->dvobjpriv.usb_vendor_req_mutex);
135196 + _rtw_mutex_init(&dvobj->usb_vendor_req_mutex);
135197 #endif
135198
135199
135200 -#ifdef CONFIG_USB_VENDOR_REQ_BUFFER_PREALLOC
135201 - padapter->dvobjpriv.usb_alloc_vendor_req_buf = rtw_zmalloc(MAX_USB_IO_CTL_SIZE);
135202 -
135203 - if (padapter->dvobjpriv.usb_alloc_vendor_req_buf == NULL){
135204 - padapter->dvobjpriv.usb_alloc_vendor_req_buf =NULL;
135205 - printk("alloc usb_vendor_req_buf failed... /n");
135206 + #ifdef CONFIG_USB_VENDOR_REQ_BUFFER_PREALLOC
135207 + dvobj->usb_alloc_vendor_req_buf = rtw_zmalloc(MAX_USB_IO_CTL_SIZE);
135208 + if (dvobj->usb_alloc_vendor_req_buf == NULL) {
135209 + DBG_871X("alloc usb_vendor_req_buf failed... /n");
135210 rst = _FAIL;
135211 goto exit;
135212 }
135213 - padapter->dvobjpriv.usb_vendor_req_buf =
135214 - (u8 *)N_BYTE_ALIGMENT((SIZE_PTR)(padapter->dvobjpriv.usb_alloc_vendor_req_buf ), ALIGNMENT_UNIT);
135215 + dvobj->usb_vendor_req_buf =
135216 + (u8 *)N_BYTE_ALIGMENT((SIZE_PTR)(dvobj->usb_alloc_vendor_req_buf ), ALIGNMENT_UNIT);
135217 exit:
135218 -#endif //CONFIG_USB_VENDOR_REQ_BUFFER_PREALLOC
135219 + #endif
135220
135221 return rst;
135222 -
135223 +
135224 }
135225
135226 -u8 rtw_deinit_intf_priv(_adapter * padapter)
135227 +static u8 rtw_deinit_intf_priv(struct dvobj_priv *dvobj)
135228 {
135229 - u8 rst = _SUCCESS;
135230 + u8 rst = _SUCCESS;
135231
135232 #ifdef CONFIG_USB_VENDOR_REQ_BUFFER_PREALLOC
135233 - if(padapter->dvobjpriv.usb_vendor_req_buf)
135234 - {
135235 - rtw_mfree(padapter->dvobjpriv.usb_alloc_vendor_req_buf,MAX_USB_IO_CTL_SIZE);
135236 - }
135237 - #endif //CONFIG_USB_VENDOR_REQ_BUFFER_PREALLOC
135238 -
135239 + if(dvobj->usb_vendor_req_buf)
135240 + rtw_mfree(dvobj->usb_alloc_vendor_req_buf, MAX_USB_IO_CTL_SIZE);
135241 + #endif
135242
135243 #ifdef CONFIG_USB_VENDOR_REQ_MUTEX
135244 - _rtw_mutex_free(&padapter->dvobjpriv.usb_vendor_req_mutex);
135245 + _rtw_mutex_free(&dvobj->usb_vendor_req_mutex);
135246 #endif
135247 -
135248 +
135249 return rst;
135250 -
135251 }
135252
135253 -static u32 usb_dvobj_init(_adapter *padapter)
135254 +static struct dvobj_priv *usb_dvobj_init(struct usb_interface *usb_intf)
135255 {
135256 int i;
135257 u8 val8;
135258 - int status = _SUCCESS;
135259 + int status = _FAIL;
135260 + struct dvobj_priv *pdvobjpriv = NULL;
135261 + struct usb_device *pusbd;
135262 struct usb_device_descriptor *pdev_desc;
135263 struct usb_host_config *phost_conf;
135264 struct usb_config_descriptor *pconf_desc;
135265 @@ -322,78 +397,78 @@ static u32 usb_dvobj_init(_adapter *pada
135266 struct usb_interface_descriptor *piface_desc;
135267 struct usb_host_endpoint *phost_endp;
135268 struct usb_endpoint_descriptor *pendp_desc;
135269 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
135270 - struct usb_device *pusbd = pdvobjpriv->pusbdev;
135271 - struct usb_interface *pusb_interface = pdvobjpriv->pusbintf;
135272
135273 _func_enter_;
135274
135275 - pdvobjpriv->padapter = padapter;
135276 + if((pdvobjpriv = devobj_init()) == NULL) {
135277 + goto exit;
135278 + }
135279 +
135280 + pdvobjpriv->pusbintf = usb_intf ;
135281 + pusbd = pdvobjpriv->pusbdev = interface_to_usbdev(usb_intf);
135282 + usb_set_intfdata(usb_intf, pdvobjpriv);
135283
135284 pdvobjpriv->RtNumInPipes = 0;
135285 pdvobjpriv->RtNumOutPipes = 0;
135286
135287 - //padapter->EepromAddressSize = 6;
135288 - //pdvobjpriv->nr_endpoint = 6;
135289
135290 pdev_desc = &pusbd->descriptor;
135291 -
135292 #if 0
135293 - DBG_8192C("\n8712_usb_device_descriptor:\n");
135294 - DBG_8192C("bLength=%x\n", pdev_desc->bLength);
135295 - DBG_8192C("bDescriptorType=%x\n", pdev_desc->bDescriptorType);
135296 - DBG_8192C("bcdUSB=%x\n", pdev_desc->bcdUSB);
135297 - DBG_8192C("bDeviceClass=%x\n", pdev_desc->bDeviceClass);
135298 - DBG_8192C("bDeviceSubClass=%x\n", pdev_desc->bDeviceSubClass);
135299 - DBG_8192C("bDeviceProtocol=%x\n", pdev_desc->bDeviceProtocol);
135300 - DBG_8192C("bMaxPacketSize0=%x\n", pdev_desc->bMaxPacketSize0);
135301 - DBG_8192C("idVendor=%x\n", pdev_desc->idVendor);
135302 - DBG_8192C("idProduct=%x\n", pdev_desc->idProduct);
135303 - DBG_8192C("bcdDevice=%x\n", pdev_desc->bcdDevice);
135304 - DBG_8192C("iManufacturer=%x\n", pdev_desc->iManufacturer);
135305 - DBG_8192C("iProduct=%x\n", pdev_desc->iProduct);
135306 - DBG_8192C("iSerialNumber=%x\n", pdev_desc->iSerialNumber);
135307 - DBG_8192C("bNumConfigurations=%x\n", pdev_desc->bNumConfigurations);
135308 + DBG_871X("\n8712_usb_device_descriptor:\n");
135309 + DBG_871X("bLength=%x\n", pdev_desc->bLength);
135310 + DBG_871X("bDescriptorType=%x\n", pdev_desc->bDescriptorType);
135311 + DBG_871X("bcdUSB=%x\n", pdev_desc->bcdUSB);
135312 + DBG_871X("bDeviceClass=%x\n", pdev_desc->bDeviceClass);
135313 + DBG_871X("bDeviceSubClass=%x\n", pdev_desc->bDeviceSubClass);
135314 + DBG_871X("bDeviceProtocol=%x\n", pdev_desc->bDeviceProtocol);
135315 + DBG_871X("bMaxPacketSize0=%x\n", pdev_desc->bMaxPacketSize0);
135316 + DBG_871X("idVendor=%x\n", pdev_desc->idVendor);
135317 + DBG_871X("idProduct=%x\n", pdev_desc->idProduct);
135318 + DBG_871X("bcdDevice=%x\n", pdev_desc->bcdDevice);
135319 + DBG_871X("iManufacturer=%x\n", pdev_desc->iManufacturer);
135320 + DBG_871X("iProduct=%x\n", pdev_desc->iProduct);
135321 + DBG_871X("iSerialNumber=%x\n", pdev_desc->iSerialNumber);
135322 + DBG_871X("bNumConfigurations=%x\n", pdev_desc->bNumConfigurations);
135323 #endif
135324
135325 phost_conf = pusbd->actconfig;
135326 pconf_desc = &phost_conf->desc;
135327
135328 #if 0
135329 - DBG_8192C("\n8712_usb_configuration_descriptor:\n");
135330 - DBG_8192C("bLength=%x\n", pconf_desc->bLength);
135331 - DBG_8192C("bDescriptorType=%x\n", pconf_desc->bDescriptorType);
135332 - DBG_8192C("wTotalLength=%x\n", pconf_desc->wTotalLength);
135333 - DBG_8192C("bNumInterfaces=%x\n", pconf_desc->bNumInterfaces);
135334 - DBG_8192C("bConfigurationValue=%x\n", pconf_desc->bConfigurationValue);
135335 - DBG_8192C("iConfiguration=%x\n", pconf_desc->iConfiguration);
135336 - DBG_8192C("bmAttributes=%x\n", pconf_desc->bmAttributes);
135337 - DBG_8192C("bMaxPower=%x\n", pconf_desc->bMaxPower);
135338 + DBG_871X("\n8712_usb_configuration_descriptor:\n");
135339 + DBG_871X("bLength=%x\n", pconf_desc->bLength);
135340 + DBG_871X("bDescriptorType=%x\n", pconf_desc->bDescriptorType);
135341 + DBG_871X("wTotalLength=%x\n", pconf_desc->wTotalLength);
135342 + DBG_871X("bNumInterfaces=%x\n", pconf_desc->bNumInterfaces);
135343 + DBG_871X("bConfigurationValue=%x\n", pconf_desc->bConfigurationValue);
135344 + DBG_871X("iConfiguration=%x\n", pconf_desc->iConfiguration);
135345 + DBG_871X("bmAttributes=%x\n", pconf_desc->bmAttributes);
135346 + DBG_871X("bMaxPower=%x\n", pconf_desc->bMaxPower);
135347 #endif
135348
135349 - //DBG_8192C("\n/****** num of altsetting = (%d) ******/\n", pusb_interface->num_altsetting);
135350 + //DBG_871X("\n/****** num of altsetting = (%d) ******/\n", usb_intf->num_altsetting);
135351
135352 - phost_iface = &pusb_interface->altsetting[0];
135353 + phost_iface = &usb_intf->altsetting[0];
135354 piface_desc = &phost_iface->desc;
135355
135356 #if 0
135357 - DBG_8192C("\n8712_usb_interface_descriptor:\n");
135358 - DBG_8192C("bLength=%x\n", piface_desc->bLength);
135359 - DBG_8192C("bDescriptorType=%x\n", piface_desc->bDescriptorType);
135360 - DBG_8192C("bInterfaceNumber=%x\n", piface_desc->bInterfaceNumber);
135361 - DBG_8192C("bAlternateSetting=%x\n", piface_desc->bAlternateSetting);
135362 - DBG_8192C("bNumEndpoints=%x\n", piface_desc->bNumEndpoints);
135363 - DBG_8192C("bInterfaceClass=%x\n", piface_desc->bInterfaceClass);
135364 - DBG_8192C("bInterfaceSubClass=%x\n", piface_desc->bInterfaceSubClass);
135365 - DBG_8192C("bInterfaceProtocol=%x\n", piface_desc->bInterfaceProtocol);
135366 - DBG_8192C("iInterface=%x\n", piface_desc->iInterface);
135367 + DBG_871X("\n8712_usb_interface_descriptor:\n");
135368 + DBG_871X("bLength=%x\n", piface_desc->bLength);
135369 + DBG_871X("bDescriptorType=%x\n", piface_desc->bDescriptorType);
135370 + DBG_871X("bInterfaceNumber=%x\n", piface_desc->bInterfaceNumber);
135371 + DBG_871X("bAlternateSetting=%x\n", piface_desc->bAlternateSetting);
135372 + DBG_871X("bNumEndpoints=%x\n", piface_desc->bNumEndpoints);
135373 + DBG_871X("bInterfaceClass=%x\n", piface_desc->bInterfaceClass);
135374 + DBG_871X("bInterfaceSubClass=%x\n", piface_desc->bInterfaceSubClass);
135375 + DBG_871X("bInterfaceProtocol=%x\n", piface_desc->bInterfaceProtocol);
135376 + DBG_871X("iInterface=%x\n", piface_desc->iInterface);
135377 #endif
135378
135379 pdvobjpriv->NumInterfaces = pconf_desc->bNumInterfaces;
135380 pdvobjpriv->InterfaceNumber = piface_desc->bInterfaceNumber;
135381 pdvobjpriv->nr_endpoint = piface_desc->bNumEndpoints;
135382
135383 - //DBG_8192C("\ndump usb_endpoint_descriptor:\n");
135384 + //DBG_871X("\ndump usb_endpoint_descriptor:\n");
135385
135386 for (i = 0; i < pdvobjpriv->nr_endpoint; i++)
135387 {
135388 @@ -402,129 +477,122 @@ _func_enter_;
135389 {
135390 pendp_desc = &phost_endp->desc;
135391
135392 - DBG_8192C("\nusb_endpoint_descriptor(%d):\n", i);
135393 - DBG_8192C("bLength=%x\n",pendp_desc->bLength);
135394 - DBG_8192C("bDescriptorType=%x\n",pendp_desc->bDescriptorType);
135395 - DBG_8192C("bEndpointAddress=%x\n",pendp_desc->bEndpointAddress);
135396 - //DBG_8192C("bmAttributes=%x\n",pendp_desc->bmAttributes);
135397 - //DBG_8192C("wMaxPacketSize=%x\n",pendp_desc->wMaxPacketSize);
135398 - DBG_8192C("wMaxPacketSize=%x\n",le16_to_cpu(pendp_desc->wMaxPacketSize));
135399 - DBG_8192C("bInterval=%x\n",pendp_desc->bInterval);
135400 - //DBG_8192C("bRefresh=%x\n",pendp_desc->bRefresh);
135401 - //DBG_8192C("bSynchAddress=%x\n",pendp_desc->bSynchAddress);
135402 + DBG_871X("\nusb_endpoint_descriptor(%d):\n", i);
135403 + DBG_871X("bLength=%x\n",pendp_desc->bLength);
135404 + DBG_871X("bDescriptorType=%x\n",pendp_desc->bDescriptorType);
135405 + DBG_871X("bEndpointAddress=%x\n",pendp_desc->bEndpointAddress);
135406 + //DBG_871X("bmAttributes=%x\n",pendp_desc->bmAttributes);
135407 + //DBG_871X("wMaxPacketSize=%x\n",pendp_desc->wMaxPacketSize);
135408 + DBG_871X("wMaxPacketSize=%x\n",le16_to_cpu(pendp_desc->wMaxPacketSize));
135409 + DBG_871X("bInterval=%x\n",pendp_desc->bInterval);
135410 + //DBG_871X("bRefresh=%x\n",pendp_desc->bRefresh);
135411 + //DBG_871X("bSynchAddress=%x\n",pendp_desc->bSynchAddress);
135412
135413 if (RT_usb_endpoint_is_bulk_in(pendp_desc))
135414 {
135415 - DBG_8192C("RT_usb_endpoint_is_bulk_in = %x\n", RT_usb_endpoint_num(pendp_desc));
135416 + DBG_871X("RT_usb_endpoint_is_bulk_in = %x\n", RT_usb_endpoint_num(pendp_desc));
135417 pdvobjpriv->RtNumInPipes++;
135418 }
135419 else if (RT_usb_endpoint_is_int_in(pendp_desc))
135420 {
135421 - DBG_8192C("RT_usb_endpoint_is_int_in = %x, Interval = %x\n", RT_usb_endpoint_num(pendp_desc),pendp_desc->bInterval);
135422 + DBG_871X("RT_usb_endpoint_is_int_in = %x, Interval = %x\n", RT_usb_endpoint_num(pendp_desc),pendp_desc->bInterval);
135423 pdvobjpriv->RtNumInPipes++;
135424 }
135425 else if (RT_usb_endpoint_is_bulk_out(pendp_desc))
135426 {
135427 - DBG_8192C("RT_usb_endpoint_is_bulk_out = %x\n", RT_usb_endpoint_num(pendp_desc));
135428 + DBG_871X("RT_usb_endpoint_is_bulk_out = %x\n", RT_usb_endpoint_num(pendp_desc));
135429 pdvobjpriv->RtNumOutPipes++;
135430 }
135431 pdvobjpriv->ep_num[i] = RT_usb_endpoint_num(pendp_desc);
135432 }
135433 }
135434 -
135435 - DBG_8192C("nr_endpoint=%d, in_num=%d, out_num=%d\n\n", pdvobjpriv->nr_endpoint, pdvobjpriv->RtNumInPipes, pdvobjpriv->RtNumOutPipes);
135436
135437 - if (pusbd->speed == USB_SPEED_HIGH)
135438 - {
135439 + DBG_871X("nr_endpoint=%d, in_num=%d, out_num=%d\n\n", pdvobjpriv->nr_endpoint, pdvobjpriv->RtNumInPipes, pdvobjpriv->RtNumOutPipes);
135440 +
135441 + if (pusbd->speed == USB_SPEED_HIGH) {
135442 pdvobjpriv->ishighspeed = _TRUE;
135443 - DBG_8192C("USB_SPEED_HIGH\n");
135444 - }
135445 - else
135446 - {
135447 + DBG_871X("USB_SPEED_HIGH\n");
135448 + } else {
135449 pdvobjpriv->ishighspeed = _FALSE;
135450 - DBG_8192C("NON USB_SPEED_HIGH\n");
135451 + DBG_871X("NON USB_SPEED_HIGH\n");
135452 }
135453
135454 - //.2
135455 - if ((rtw_init_io_priv(padapter)) == _FAIL)
135456 - {
135457 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,(" \n Can't init io_reqs\n"));
135458 - status = _FAIL;
135459 - }
135460 -
135461 - if((rtw_init_intf_priv(padapter) )== _FAIL)
135462 - {
135463 + if (rtw_init_intf_priv(pdvobjpriv) == _FAIL) {
135464 RT_TRACE(_module_os_intfs_c_,_drv_err_,("\n Can't INIT rtw_init_intf_priv\n"));
135465 - status = _FAIL;
135466 + goto free_dvobj;
135467 }
135468
135469 //.3 misc
135470 - _rtw_init_sema(&(padapter->dvobjpriv.usb_suspend_sema), 0);
135471 + _rtw_init_sema(&(pdvobjpriv->usb_suspend_sema), 0);
135472
135473 - intf_read_chip_version(padapter);
135474 + rtw_reset_continual_urb_error(pdvobjpriv);
135475
135476 - //.4 usb endpoint mapping
135477 - intf_chip_configure(padapter);
135478 + usb_get_dev(pusbd);
135479
135480 - rtw_reset_continual_urb_error(pdvobjpriv);
135481 -
135482 -_func_exit_;
135483 + //DBG_871X("%s %d\n", __func__, ATOMIC_READ(&usb_intf->dev.kobj.kref.refcount));
135484
135485 - return status;
135486 + status = _SUCCESS;
135487 +
135488 +free_dvobj:
135489 + if (status != _SUCCESS && pdvobjpriv) {
135490 + usb_set_intfdata(usb_intf, NULL);
135491 + devobj_deinit(pdvobjpriv);
135492 + pdvobjpriv = NULL;
135493 + }
135494 +exit:
135495 +_func_exit_;
135496 + return pdvobjpriv;
135497 }
135498
135499 -static void usb_dvobj_deinit(_adapter * padapter){
135500 +static void usb_dvobj_deinit(struct usb_interface *usb_intf)
135501 +{
135502 + struct dvobj_priv *dvobj = usb_get_intfdata(usb_intf);
135503
135504 - struct dvobj_priv *pdvobjpriv=&padapter->dvobjpriv;
135505 +_func_enter_;
135506
135507 - _func_enter_;
135508 + usb_set_intfdata(usb_intf, NULL);
135509 + if (dvobj) {
135510 + //Modify condition for 92DU DMDP 2010.11.18, by Thomas
135511 + /*if ((dvobj->NumInterfaces == 1)
135512 + || ((dvobj->InterfaceNumber == 1) && (dvobj->DualMacMode == _TRUE))) {
135513 + if (interface_to_usbdev(usb_intf)->state != USB_STATE_NOTATTACHED) {
135514 + //If we didn't unplug usb dongle and remove/insert modlue, driver fails on sitesurvey for the first time when device is up .
135515 + //Reset usb port for sitesurvey fail issue. 2009.8.13, by Thomas
135516 + DBG_871X("usb attached..., try to reset usb device\n");
135517 + usb_reset_device(interface_to_usbdev(usb_intf));
135518 + }
135519 + }*/
135520 + rtw_deinit_intf_priv(dvobj);
135521 + devobj_deinit(dvobj);
135522 + }
135523
135524 - rtw_deinit_intf_priv(padapter);
135525 + //DBG_871X("%s %d\n", __func__, ATOMIC_READ(&usb_intf->dev.kobj.kref.refcount));
135526 + usb_put_dev(interface_to_usbdev(usb_intf));
135527
135528 - _func_exit_;
135529 +_func_exit_;
135530 }
135531
135532 static void decide_chip_type_by_usb_device_id(_adapter *padapter, const struct usb_device_id *pdid)
135533 {
135534 - //u32 i;
135535 - //u16 vid, pid;
135536 -
135537 padapter->chip_type = NULL_CHIP_TYPE;
135538 -
135539 - //vid = pdid->idVendor;
135540 - //pid = pdid->idProduct;
135541 -
135542 - //TODO: dynamic judge 92c or 92d according to usb vid and pid.
135543 #ifdef CONFIG_RTL8192C
135544 padapter->chip_type = RTL8188C_8192C;
135545 padapter->HardwareType = HARDWARE_TYPE_RTL8192CU;
135546 - DBG_8192C("CHIP TYPE: RTL8188C_8192C\n");
135547 + DBG_871X("CHIP TYPE: RTL8188C_8192C\n");
135548 #endif
135549
135550 #ifdef CONFIG_RTL8192D
135551 padapter->chip_type = RTL8192D;
135552 padapter->HardwareType = HARDWARE_TYPE_RTL8192DU;
135553 - DBG_8192C("CHIP TYPE: RTL8192D\n");
135554 + DBG_871X("CHIP TYPE: RTL8192D\n");
135555 #endif
135556 -
135557 }
135558
135559 static void usb_intf_start(_adapter *padapter)
135560 {
135561 -
135562 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("+usb_intf_start\n"));
135563 -
135564 - if(padapter->HalFunc.inirp_init == NULL)
135565 - {
135566 - RT_TRACE(_module_os_intfs_c_,_drv_err_,("Initialize dvobjpriv.inirp_init error!!!\n"));
135567 - }
135568 - else
135569 - {
135570 - padapter->HalFunc.inirp_init(padapter);
135571 - }
135572 -
135573 + rtw_hal_inirp_init(padapter);
135574 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-usb_intf_start\n"));
135575 -
135576 }
135577
135578 static void usb_intf_stop(_adapter *padapter)
135579 @@ -541,10 +609,7 @@ static void usb_intf_stop(_adapter *pada
135580 }
135581
135582 //cancel in irp
135583 - if(padapter->HalFunc.inirp_deinit !=NULL)
135584 - {
135585 - padapter->HalFunc.inirp_deinit(padapter);
135586 - }
135587 + rtw_hal_inirp_deinit(padapter);
135588
135589 //cancel out irp
135590 rtw_write_port_cancel(padapter);
135591 @@ -563,9 +628,13 @@ static void rtw_dev_unload(_adapter *pad
135592
135593 if(padapter->bup == _TRUE)
135594 {
135595 - DBG_8192C("===> rtw_dev_unload\n");
135596 + DBG_871X("===> rtw_dev_unload\n");
135597
135598 padapter->bDriverStopped = _TRUE;
135599 + #ifdef CONFIG_XMIT_ACK
135600 + if (padapter->xmitpriv.ack_tx)
135601 + rtw_ack_tx_done(&padapter->xmitpriv, RTW_SCTX_DONE_DRV_STOP);
135602 + #endif
135603
135604 //s3.
135605 if(padapter->intf_stop)
135606 @@ -574,20 +643,20 @@ static void rtw_dev_unload(_adapter *pad
135607 }
135608
135609 //s4.
135610 - if(!padapter->pwrctrlpriv.bInternalAutoSuspend )
135611 - rtw_stop_drv_threads(padapter);
135612 + if(!padapter->pwrctrlpriv.bInternalAutoSuspend )
135613 + rtw_stop_drv_threads(padapter);
135614
135615
135616 //s5.
135617 if(padapter->bSurpriseRemoved == _FALSE)
135618 {
135619 - //DBG_8192C("r871x_dev_unload()->rtl871x_hal_deinit()\n");
135620 - #ifdef CONFIG_WOWLAN
135621 + //DBG_871X("r871x_dev_unload()->rtl871x_hal_deinit()\n");
135622 +#ifdef CONFIG_WOWLAN
135623 if((padapter->pwrctrlpriv.bSupportRemoteWakeup==_TRUE)&&(padapter->pwrctrlpriv.wowlan_mode==_TRUE)){
135624 - DBG_8192C("%s bSupportWakeOnWlan==_TRUE do not run rtw_hal_deinit()\n",__FUNCTION__);
135625 + DBG_871X("%s bSupportWakeOnWlan==_TRUE do not run rtw_hal_deinit()\n",__FUNCTION__);
135626 }
135627 else
135628 - #endif //CONFIG_WOWLAN
135629 +#endif //CONFIG_WOWLAN
135630 {
135631 rtw_hal_deinit(padapter);
135632 }
135633 @@ -595,14 +664,16 @@ static void rtw_dev_unload(_adapter *pad
135634 }
135635
135636 padapter->bup = _FALSE;
135637 -
135638 +#ifdef CONFIG_WOWLAN
135639 + padapter->hw_init_completed=_FALSE;
135640 +#endif //CONFIG_WOWLAN
135641 }
135642 else
135643 {
135644 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("r871x_dev_unload():padapter->bup == _FALSE\n" ));
135645 }
135646
135647 - DBG_8192C("<=== rtw_dev_unload\n");
135648 + DBG_871X("<=== rtw_dev_unload\n");
135649
135650 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-rtw_dev_unload\n"));
135651
135652 @@ -636,8 +707,8 @@ static void process_spec_devid(const str
135653 if((pdid->idVendor==vid) && (pdid->idProduct==pid) && (flags&SPEC_DEV_ID_ASSIGN_IFNAME))
135654 {
135655 extern char* ifname;
135656 - strncpy(ifname, "wlan10", 6);
135657 - //DBG_8192C("%s()-%d: ifname=%s, vid=%04X, pid=%04X\n", __FUNCTION__, __LINE__, ifname, vid, pid);
135658 + strncpy(ifname, "wlan10", 6);
135659 + //DBG_871X("%s()-%d: ifname=%s, vid=%04X, pid=%04X\n", __FUNCTION__, __LINE__, ifname, vid, pid);
135660 }
135661 #endif /* RTK_DMP_PLATFORM */
135662
135663 @@ -645,29 +716,26 @@ static void process_spec_devid(const str
135664 }
135665
135666 #ifdef SUPPORT_HW_RFOFF_DETECTED
135667 -extern u8 disconnect_hdl(_adapter *padapter, u8 *pbuf);
135668 -extern void rtw_os_indicate_disconnect( _adapter *adapter );
135669 -
135670 int rtw_hw_suspend(_adapter *padapter )
135671 {
135672 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
135673 - struct usb_interface *pusb_intf = padapter->dvobjpriv.pusbintf;
135674 - struct net_device *pnetdev=usb_get_intfdata(pusb_intf);
135675 -
135676 + struct usb_interface *pusb_intf = adapter_to_dvobj(padapter)->pusbintf;
135677 + struct net_device *pnetdev = padapter->pnetdev;
135678 +
135679 _func_enter_;
135680
135681 if((!padapter->bup) || (padapter->bDriverStopped)||(padapter->bSurpriseRemoved))
135682 {
135683 - DBG_8192C("padapter->bup=%d bDriverStopped=%d bSurpriseRemoved = %d\n",
135684 - padapter->bup, padapter->bDriverStopped,padapter->bSurpriseRemoved);
135685 + DBG_871X("padapter->bup=%d bDriverStopped=%d bSurpriseRemoved = %d\n",
135686 + padapter->bup, padapter->bDriverStopped,padapter->bSurpriseRemoved);
135687 goto error_exit;
135688 }
135689 -
135690 +
135691 if(padapter)//system suspend
135692 - {
135693 + {
135694 LeaveAllPowerSaveMode(padapter);
135695 -
135696 - DBG_8192C("==> rtw_hw_suspend\n");
135697 +
135698 + DBG_871X("==> rtw_hw_suspend\n");
135699 _enter_pwrlock(&pwrpriv->lock);
135700 pwrpriv->bips_processing = _TRUE;
135701 //padapter->net_closed = _TRUE;
135702 @@ -675,18 +743,16 @@ int rtw_hw_suspend(_adapter *padapter )
135703 if(pnetdev)
135704 {
135705 netif_carrier_off(pnetdev);
135706 - netif_stop_queue(pnetdev);
135707 + rtw_netif_stop_queue(pnetdev);
135708 }
135709
135710 //s2.
135711 - //s2-1. issue rtw_disassoc_cmd to fw
135712 - //rtw_disassoc_cmd(padapter);//donnot enqueue cmd
135713 - disconnect_hdl(padapter, NULL);
135714 -
135715 + rtw_disassoc_cmd(padapter, 500, _FALSE);
135716 +
135717 //s2-2. indicate disconnect to os
135718 //rtw_indicate_disconnect(padapter);
135719 {
135720 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
135721 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
135722
135723 if(check_fwstate(pmlmepriv, _FW_LINKED))
135724 {
135725 @@ -695,7 +761,7 @@ int rtw_hw_suspend(_adapter *padapter )
135726 rtw_led_control(padapter, LED_CTL_NO_LINK);
135727
135728 rtw_os_indicate_disconnect(padapter);
135729 -
135730 +
135731 #ifdef CONFIG_LPS
135732 //donnot enqueue cmd
135733 rtw_lps_ctrl_wk_cmd(padapter, LPS_CTRL_DISCONNECT, 0);
135734 @@ -709,21 +775,21 @@ int rtw_hw_suspend(_adapter *padapter )
135735 //s2-4.
135736 rtw_free_network_queue(padapter,_TRUE);
135737 #ifdef CONFIG_IPS
135738 - rtw_ips_dev_unload(padapter);
135739 - #endif
135740 + rtw_ips_dev_unload(padapter);
135741 + #endif
135742 pwrpriv->rf_pwrstate = rf_off;
135743 - pwrpriv->bips_processing = _FALSE;
135744 + pwrpriv->bips_processing = _FALSE;
135745
135746 _exit_pwrlock(&pwrpriv->lock);
135747 }
135748 else
135749 goto error_exit;
135750 -
135751 +
135752 _func_exit_;
135753 return 0;
135754 -
135755 +
135756 error_exit:
135757 - DBG_8192C("%s, failed \n",__FUNCTION__);
135758 + DBG_871X("%s, failed \n",__FUNCTION__);
135759 return (-1);
135760
135761 }
135762 @@ -731,340 +797,304 @@ error_exit:
135763 int rtw_hw_resume(_adapter *padapter)
135764 {
135765 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
135766 - struct usb_interface *pusb_intf = padapter->dvobjpriv.pusbintf;
135767 - struct net_device *pnetdev=usb_get_intfdata(pusb_intf);
135768 + struct usb_interface *pusb_intf = adapter_to_dvobj(padapter)->pusbintf;
135769 + struct net_device *pnetdev = padapter->pnetdev;
135770
135771 _func_enter_;
135772
135773 if(padapter)//system resume
135774 - {
135775 - DBG_8192C("==> rtw_hw_resume\n");
135776 + {
135777 + DBG_871X("==> rtw_hw_resume\n");
135778 _enter_pwrlock(&pwrpriv->lock);
135779 pwrpriv->bips_processing = _TRUE;
135780 rtw_reset_drv_sw(padapter);
135781 -
135782 +
135783 if(pm_netdev_open(pnetdev,_FALSE) != 0)
135784 {
135785 _exit_pwrlock(&pwrpriv->lock);
135786 goto error_exit;
135787 }
135788
135789 - netif_device_attach(pnetdev);
135790 + netif_device_attach(pnetdev);
135791 netif_carrier_on(pnetdev);
135792
135793 - if(!netif_queue_stopped(pnetdev))
135794 - netif_start_queue(pnetdev);
135795 + if(!rtw_netif_queue_stopped(pnetdev))
135796 + rtw_netif_start_queue(pnetdev);
135797 else
135798 - netif_wake_queue(pnetdev);
135799 -
135800 + rtw_netif_wake_queue(pnetdev);
135801 +
135802 pwrpriv->bkeepfwalive = _FALSE;
135803 pwrpriv->brfoffbyhw = _FALSE;
135804 -
135805 +
135806 pwrpriv->rf_pwrstate = rf_on;
135807 - pwrpriv->bips_processing = _FALSE;
135808 -
135809 + pwrpriv->bips_processing = _FALSE;
135810 +
135811 _exit_pwrlock(&pwrpriv->lock);
135812 }
135813 else
135814 {
135815 - goto error_exit;
135816 + goto error_exit;
135817 }
135818
135819 _func_exit_;
135820 -
135821 +
135822 return 0;
135823 error_exit:
135824 - DBG_8192C("%s, Open net dev failed \n",__FUNCTION__);
135825 + DBG_871X("%s, Open net dev failed \n",__FUNCTION__);
135826 return (-1);
135827 }
135828 #endif
135829
135830 static int rtw_suspend(struct usb_interface *pusb_intf, pm_message_t message)
135831 {
135832 - struct net_device *pnetdev=usb_get_intfdata(pusb_intf);
135833 - _adapter *padapter = (_adapter*)rtw_netdev_priv(pnetdev);
135834 + struct dvobj_priv *dvobj = usb_get_intfdata(pusb_intf);
135835 + _adapter *padapter = dvobj->if1;
135836 + struct net_device *pnetdev = padapter->pnetdev;
135837 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
135838 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
135839 struct usb_device *usb_dev = interface_to_usbdev(pusb_intf);
135840 - struct wowlan_ioctl_param poidparam;
135841 +#ifdef CONFIG_WOWLAN
135842 + struct wowlan_ioctl_param poidparam;
135843 +#endif // CONFIG_WOWLAN
135844 + int ret = 0;
135845 + u32 start_time = rtw_get_current_time();
135846 _func_enter_;
135847
135848 + DBG_871X("==> %s (%s:%d)\n",__FUNCTION__, current->comm, current->pid);
135849 +
135850 if((!padapter->bup) || (padapter->bDriverStopped)||(padapter->bSurpriseRemoved))
135851 {
135852 - DBG_8192C("padapter->bup=%d bDriverStopped=%d bSurpriseRemoved = %d\n",
135853 - padapter->bup, padapter->bDriverStopped,padapter->bSurpriseRemoved);
135854 - return 0;
135855 - }
135856 -
135857 - DBG_8192C("########### rtw_suspend #################\n");
135858 -
135859 - if(padapter)//system suspend
135860 - {
135861 - if(pwrpriv->bInternalAutoSuspend )
135862 - {
135863 - #ifdef CONFIG_AUTOSUSPEND
135864 - #ifdef SUPPORT_HW_RFOFF_DETECTED
135865 - // The FW command register update must after MAC and FW init ready.
135866 - if((padapter->bFWReady) && ( padapter->pwrctrlpriv.bHWPwrPindetect ) && (padapter->registrypriv.usbss_enable ))
135867 - {
135868 - u8 bOpen = _TRUE;
135869 - rtw_interface_ps_func(padapter,HAL_USB_SELECT_SUSPEND,&bOpen);
135870 - //rtl8192c_set_FwSelectSuspend_cmd(padapter,_TRUE ,500);//note fw to support hw power down ping detect
135871 - }
135872 - #endif
135873 - #endif
135874 - }
135875 - pwrpriv->bInSuspend = _TRUE;
135876 - rtw_cancel_all_timer(padapter);
135877 - LeaveAllPowerSaveMode(padapter);
135878 + DBG_871X("padapter->bup=%d bDriverStopped=%d bSurpriseRemoved = %d\n",
135879 + padapter->bup, padapter->bDriverStopped,padapter->bSurpriseRemoved);
135880 + goto exit;
135881 + }
135882
135883 - _enter_pwrlock(&pwrpriv->lock);
135884 - //padapter->net_closed = _TRUE;
135885 - //s1.
135886 - if(pnetdev)
135887 + if(pwrpriv->bInternalAutoSuspend )
135888 + {
135889 + #ifdef CONFIG_AUTOSUSPEND
135890 + #ifdef SUPPORT_HW_RFOFF_DETECTED
135891 + // The FW command register update must after MAC and FW init ready.
135892 + if((padapter->bFWReady) && ( padapter->pwrctrlpriv.bHWPwrPindetect ) && (padapter->registrypriv.usbss_enable ))
135893 {
135894 - netif_carrier_off(pnetdev);
135895 - netif_stop_queue(pnetdev);
135896 + u8 bOpen = _TRUE;
135897 + rtw_interface_ps_func(padapter,HAL_USB_SELECT_SUSPEND,&bOpen);
135898 + //rtl8192c_set_FwSelectSuspend_cmd(padapter,_TRUE ,500);//note fw to support hw power down ping detect
135899 }
135900 + #endif
135901 + #endif
135902 + }
135903 + pwrpriv->bInSuspend = _TRUE;
135904 + rtw_cancel_all_timer(padapter);
135905 + LeaveAllPowerSaveMode(padapter);
135906 +
135907 + rtw_stop_cmd_thread(padapter);
135908 +
135909 + _enter_pwrlock(&pwrpriv->lock);
135910 + //padapter->net_closed = _TRUE;
135911 + //s1.
135912 + if(pnetdev)
135913 + {
135914 + netif_carrier_off(pnetdev);
135915 + rtw_netif_stop_queue(pnetdev);
135916 + }
135917 #ifdef CONFIG_WOWLAN
135918 - if(padapter->pwrctrlpriv.bSupportRemoteWakeup==_TRUE&&padapter->pwrctrlpriv.wowlan_mode==_TRUE){
135919 - u8 ps_mode=PS_MODE_MIN;
135920 - //set H2C command
135921 - poidparam.subcode=WOWLAN_ENABLE;
135922 - padapter->HalFunc.SetHwRegHandler(padapter,HW_VAR_WOWLAN,(u8 *)&poidparam);
135923 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_H2C_FW_PWRMODE, &ps_mode);
135924 - rtw_set_rpwm(padapter, PS_STATE_S2);
135925 - }
135926 - else
135927 + if(padapter->pwrctrlpriv.bSupportRemoteWakeup==_TRUE&&padapter->pwrctrlpriv.wowlan_mode==_TRUE){
135928 + u8 ps_mode=PS_MODE_MIN;
135929 + //set H2C command
135930 + poidparam.subcode=WOWLAN_ENABLE;
135931 + rtw_hal_set_hwreg(padapter,HW_VAR_WOWLAN,(u8 *)&poidparam);
135932 + //rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_PWRMODE, &ps_mode);
135933 + //rtw_set_rpwm(padapter, PS_STATE_S2);
135934 + }
135935 + else
135936 #endif //CONFIG_WOWLAN
135937 - {
135938 + {
135939 //s2.
135940 - //s2-1. issue rtw_disassoc_cmd to fw
135941 - disconnect_hdl(padapter, NULL);
135942 - //rtw_disassoc_cmd(padapter);
135943 - }
135944 -
135945 + rtw_disassoc_cmd(padapter, 0, _FALSE);
135946 + }
135947
135948 #ifdef CONFIG_LAYER2_ROAMING_RESUME
135949 - if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) && check_fwstate(pmlmepriv, _FW_LINKED) )
135950 - {
135951 - //printk("%s:%d assoc_ssid:%s\n", __FUNCTION__, __LINE__, pmlmepriv->assoc_ssid.Ssid);
135952 - DBG_871X("%s:%d %s(" MAC_FMT "), length:%d assoc_ssid.length:%d\n",__FUNCTION__, __LINE__,
135953 - pmlmepriv->cur_network.network.Ssid.Ssid,
135954 - MAC_ARG(pmlmepriv->cur_network.network.MacAddress),
135955 - pmlmepriv->cur_network.network.Ssid.SsidLength,
135956 - pmlmepriv->assoc_ssid.SsidLength);
135957 -
135958 - pmlmepriv->to_roaming = 1;
135959 + if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) && check_fwstate(pmlmepriv, _FW_LINKED) )
135960 + {
135961 + //printk("%s:%d assoc_ssid:%s\n", __FUNCTION__, __LINE__, pmlmepriv->assoc_ssid.Ssid);
135962 + DBG_871X("%s:%d %s(" MAC_FMT "), length:%d assoc_ssid.length:%d\n",__FUNCTION__, __LINE__,
135963 + pmlmepriv->cur_network.network.Ssid.Ssid,
135964 + MAC_ARG(pmlmepriv->cur_network.network.MacAddress),
135965 + pmlmepriv->cur_network.network.Ssid.SsidLength,
135966 + pmlmepriv->assoc_ssid.SsidLength);
135967 + rtw_set_roaming(padapter, 1);
135968 }
135969 #endif
135970 - //s2-2. indicate disconnect to os
135971 - rtw_indicate_disconnect(padapter);
135972 - //s2-3.
135973 - rtw_free_assoc_resources(padapter, 1);
135974 + //s2-2. indicate disconnect to os
135975 + rtw_indicate_disconnect(padapter);
135976 + //s2-3.
135977 + rtw_free_assoc_resources(padapter, 1);
135978 #ifdef CONFIG_AUTOSUSPEND
135979 - if(!pwrpriv->bInternalAutoSuspend )
135980 + if(!pwrpriv->bInternalAutoSuspend )
135981 #endif
135982 - //s2-4.
135983 - rtw_free_network_queue(padapter, _TRUE);
135984 + //s2-4.
135985 + rtw_free_network_queue(padapter, _TRUE);
135986
135987 - rtw_dev_unload(padapter);
135988 + rtw_dev_unload(padapter);
135989 #ifdef CONFIG_AUTOSUSPEND
135990 - pwrpriv->rf_pwrstate = rf_off;
135991 - pwrpriv->bips_processing = _FALSE;
135992 + pwrpriv->rf_pwrstate = rf_off;
135993 + pwrpriv->bips_processing = _FALSE;
135994 #endif
135995 - _exit_pwrlock(&pwrpriv->lock);
135996 + _exit_pwrlock(&pwrpriv->lock);
135997
135998 - if(check_fwstate(pmlmepriv, _FW_UNDER_SURVEY))
135999 - rtw_indicate_scan_done(padapter, 1);
136000 + if(check_fwstate(pmlmepriv, _FW_UNDER_SURVEY))
136001 + rtw_indicate_scan_done(padapter, 1);
136002
136003 - if(check_fwstate(pmlmepriv, _FW_UNDER_LINKING))
136004 - rtw_indicate_disconnect(padapter);
136005 - }
136006 - else
136007 - goto error_exit;
136008 -
136009 - DBG_871X("########### rtw_suspend done #################\n");
136010 + if(check_fwstate(pmlmepriv, _FW_UNDER_LINKING))
136011 + rtw_indicate_disconnect(padapter);
136012
136013 - _func_exit_;
136014 - return 0;
136015 -
136016 -error_exit:
136017 - DBG_871X("########### rtw_suspend fail !! #################\n");
136018 - return (-1);
136019 +exit:
136020 + DBG_871X("<=== %s return %d.............. in %dms\n", __FUNCTION__
136021 + , ret, rtw_get_passing_time_ms(start_time));
136022
136023 + _func_exit_;
136024 + return ret;
136025 }
136026
136027 static int rtw_resume(struct usb_interface *pusb_intf)
136028 {
136029 - struct net_device *pnetdev=usb_get_intfdata(pusb_intf);
136030 - _adapter *padapter = (_adapter*)rtw_netdev_priv(pnetdev);
136031 + struct dvobj_priv *dvobj = usb_get_intfdata(pusb_intf);
136032 + _adapter *padapter = dvobj->if1;
136033 + struct net_device *pnetdev = padapter->pnetdev;
136034 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
136035 int ret = 0;
136036 -
136037 +
136038 if(pwrpriv->bInternalAutoSuspend ){
136039 - ret = rtw_resume_process(pusb_intf);
136040 + ret = rtw_resume_process(padapter);
136041 } else {
136042 #ifdef CONFIG_RESUME_IN_WORKQUEUE
136043 rtw_resume_in_workqueue(pwrpriv);
136044 -#elif defined(CONFIG_HAS_EARLYSUSPEND) || defined(CONFIG_ANDROID_POWER)
136045 - if(rtw_is_earlysuspend_registered(pwrpriv)) {
136046 - //jeff: bypass resume here, do in late_resume
136047 - pwrpriv->do_late_resume = _TRUE;
136048 +#else
136049 + if (rtw_is_earlysuspend_registered(pwrpriv)
136050 + #ifdef CONFIG_WOWLAN
136051 + && !padapter->pwrctrlpriv.wowlan_mode
136052 + #endif /* CONFIG_WOWLAN */
136053 + ) {
136054 + /* jeff: bypass resume here, do in late_resume */
136055 + rtw_set_do_late_resume(pwrpriv, _TRUE);
136056 } else {
136057 - ret = rtw_resume_process(pusb_intf);
136058 + ret = rtw_resume_process(padapter);
136059 }
136060 -#else // Normal resume process
136061 - ret = rtw_resume_process(pusb_intf);
136062 -#endif //CONFIG_RESUME_IN_WORKQUEUE
136063 +#endif /* CONFIG_RESUME_IN_WORKQUEUE */
136064 }
136065 -
136066 +
136067 return ret;
136068
136069 }
136070
136071 -
136072 -int rtw_resume_process(struct usb_interface *pusb_intf)
136073 +int rtw_resume_process(_adapter *padapter)
136074 {
136075 struct net_device *pnetdev;
136076 - struct usb_device *usb_dev;
136077 - _adapter *padapter;
136078 struct pwrctrl_priv *pwrpriv;
136079 -
136080 + int ret = -1;
136081 + u32 start_time = rtw_get_current_time();
136082 _func_enter_;
136083
136084 - DBG_8192C("########### rtw_resume #################\n");
136085 + DBG_871X("==> %s (%s:%d)\n",__FUNCTION__, current->comm, current->pid);
136086
136087 - if(pusb_intf) {
136088 - pnetdev=usb_get_intfdata(pusb_intf);
136089 - usb_dev = interface_to_usbdev(pusb_intf);
136090 + if(padapter) {
136091 + pnetdev= padapter->pnetdev;
136092 + pwrpriv = &padapter->pwrctrlpriv;
136093 } else {
136094 - goto error_exit;
136095 + goto exit;
136096 }
136097
136098 - padapter = (_adapter*)rtw_netdev_priv(pnetdev);
136099 - pwrpriv = &padapter->pwrctrlpriv;
136100 -
136101 - if(padapter)//system resume
136102 - {
136103 - _enter_pwrlock(&pwrpriv->lock);
136104 - rtw_reset_drv_sw(padapter);
136105 - pwrpriv->bkeepfwalive = _FALSE;
136106 -
136107 - DBG_8192C("bkeepfwalive(%x)\n",pwrpriv->bkeepfwalive);
136108 - if(pm_netdev_open(pnetdev,_TRUE) != 0)
136109 - goto error_exit;
136110 + _enter_pwrlock(&pwrpriv->lock);
136111 + rtw_reset_drv_sw(padapter);
136112 + pwrpriv->bkeepfwalive = _FALSE;
136113
136114 - netif_device_attach(pnetdev);
136115 - netif_carrier_on(pnetdev);
136116 -
136117 -#ifdef CONFIG_AUTOSUSPEND
136118 - if(pwrpriv->bInternalAutoSuspend )
136119 - {
136120 - #ifdef CONFIG_AUTOSUSPEND
136121 - #ifdef SUPPORT_HW_RFOFF_DETECTED
136122 - // The FW command register update must after MAC and FW init ready.
136123 - if((padapter->bFWReady) && ( padapter->pwrctrlpriv.bHWPwrPindetect ) && (padapter->registrypriv.usbss_enable ))
136124 - {
136125 - //rtl8192c_set_FwSelectSuspend_cmd(padapter,_FALSE ,500);//note fw to support hw power down ping detect
136126 - u8 bOpen = _FALSE;
136127 - rtw_interface_ps_func(padapter,HAL_USB_SELECT_SUSPEND,&bOpen);
136128 - }
136129 - #endif
136130 - #endif
136131 -
136132 - pwrpriv->bInternalAutoSuspend = _FALSE;
136133 - pwrpriv->brfoffbyhw = _FALSE;
136134 - {
136135 - DBG_8192C("enc_algorithm(%x),wepkeymask(%x)\n",
136136 - padapter->securitypriv.dot11PrivacyAlgrthm,pwrpriv->wepkeymask);
136137 - if( (_WEP40_ == padapter->securitypriv.dot11PrivacyAlgrthm) ||
136138 - (_WEP104_ == padapter->securitypriv.dot11PrivacyAlgrthm))
136139 - {
136140 - sint keyid;
136141 -
136142 - for(keyid=0;keyid<4;keyid++){
136143 - if(pwrpriv->wepkeymask & BIT(keyid)) {
136144 - if(keyid == padapter->securitypriv.dot11PrivacyKeyIndex)
136145 - rtw_set_key(padapter,&padapter->securitypriv, keyid, 1);
136146 - else
136147 - rtw_set_key(padapter,&padapter->securitypriv, keyid, 0);
136148 - }
136149 - }
136150 - }
136151 - }
136152 - }
136153 -#endif
136154 + DBG_871X("bkeepfwalive(%x)\n",pwrpriv->bkeepfwalive);
136155 + if(pm_netdev_open(pnetdev,_TRUE) != 0) {
136156 _exit_pwrlock(&pwrpriv->lock);
136157 + goto exit;
136158 }
136159 - else
136160 +
136161 + netif_device_attach(pnetdev);
136162 + netif_carrier_on(pnetdev);
136163 +
136164 +#ifdef CONFIG_AUTOSUSPEND
136165 + if(pwrpriv->bInternalAutoSuspend )
136166 {
136167 - goto error_exit;
136168 + #ifdef CONFIG_AUTOSUSPEND
136169 + #ifdef SUPPORT_HW_RFOFF_DETECTED
136170 + // The FW command register update must after MAC and FW init ready.
136171 + if((padapter->bFWReady) && ( padapter->pwrctrlpriv.bHWPwrPindetect ) && (padapter->registrypriv.usbss_enable ))
136172 + {
136173 + //rtl8192c_set_FwSelectSuspend_cmd(padapter,_FALSE ,500);//note fw to support hw power down ping detect
136174 + u8 bOpen = _FALSE;
136175 + rtw_interface_ps_func(padapter,HAL_USB_SELECT_SUSPEND,&bOpen);
136176 + }
136177 + #endif
136178 + #endif
136179 +
136180 + pwrpriv->bInternalAutoSuspend = _FALSE;
136181 + pwrpriv->brfoffbyhw = _FALSE;
136182 }
136183 +#endif
136184 + _exit_pwrlock(&pwrpriv->lock);
136185
136186 if( padapter->pid[1]!=0) {
136187 DBG_871X("pid[1]:%d\n",padapter->pid[1]);
136188 rtw_signal_process(padapter->pid[1], SIGUSR2);
136189 - }
136190 + }
136191
136192 #ifdef CONFIG_LAYER2_ROAMING_RESUME
136193 rtw_roaming(padapter, NULL);
136194 - #endif
136195 -
136196 - DBG_871X("########### rtw_resume done#################\n");
136197 -
136198 - #ifdef CONFIG_RESUME_IN_WORKQUEUE
136199 - rtw_unlock_suspend();
136200 - #endif //CONFIG_RESUME_IN_WORKQUEUE
136201 -
136202 - _func_exit_;
136203 -
136204 - return 0;
136205 -error_exit:
136206 - DBG_8192C("%s, Open net dev failed \n",__FUNCTION__);
136207 + #endif
136208
136209 - DBG_871X("########### rtw_resume done with error#################\n");
136210 -
136211 + ret = 0;
136212 +exit:
136213 #ifdef CONFIG_RESUME_IN_WORKQUEUE
136214 rtw_unlock_suspend();
136215 #endif //CONFIG_RESUME_IN_WORKQUEUE
136216 -
136217 +
136218 + pwrpriv->bInSuspend = _FALSE;
136219 + DBG_871X("<=== %s return %d.............. in %dms\n", __FUNCTION__
136220 + , ret, rtw_get_passing_time_ms(start_time));
136221 +
136222 _func_exit_;
136223 -
136224 - return (-1);
136225 +
136226 + return ret;
136227 }
136228
136229 #ifdef CONFIG_AUTOSUSPEND
136230 -void autosuspend_enter(_adapter* padapter)
136231 +void autosuspend_enter(_adapter* padapter)
136232 {
136233 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
136234 + struct dvobj_priv *dvobj = adapter_to_dvobj(padapter);
136235 +
136236 pwrpriv->bInternalAutoSuspend = _TRUE;
136237 - pwrpriv->bips_processing = _TRUE;
136238 -
136239 - DBG_8192C("==>autosuspend_enter...........\n");
136240 -
136241 + pwrpriv->bips_processing = _TRUE;
136242 +
136243 + DBG_871X("==>autosuspend_enter...........\n");
136244 +
136245 if(rf_off == pwrpriv->change_rfpwrstate )
136246 - {
136247 + {
136248 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
136249 - usb_enable_autosuspend(padapter->dvobjpriv.pusbdev);
136250 + usb_enable_autosuspend(dvobj->pusbdev);
136251 #else
136252 - padapter->dvobjpriv.pusbdev->autosuspend_disabled = 0;//autosuspend disabled by the user
136253 + dvobj->pusbdev->autosuspend_disabled = 0;//autosuspend disabled by the user
136254 #endif
136255 -
136256 +
136257 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,33))
136258 - usb_autopm_put_interface(padapter->dvobjpriv.pusbintf);
136259 - #elif (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,20))
136260 - usb_autopm_enable(padapter->dvobjpriv.pusbintf);
136261 + usb_autopm_put_interface(dvobj->pusbintf);
136262 + #elif (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,20))
136263 + usb_autopm_enable(dvobj->pusbintf);
136264 #else
136265 - usb_autosuspend_device(padapter->dvobjpriv.pusbdev, 1);
136266 + usb_autosuspend_device(dvobj->pusbdev, 1);
136267 #endif
136268 }
136269 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,32))
136270 - DBG_8192C("...pm_usage_cnt(%d).....\n",atomic_read(&(padapter->dvobjpriv.pusbintf->pm_usage_cnt)));
136271 + DBG_871X("...pm_usage_cnt(%d).....\n", atomic_read(&(dvobj->pusbintf->pm_usage_cnt)));
136272 #else
136273 - DBG_8192C("...pm_usage_cnt(%d).....\n",padapter->dvobjpriv.pusbintf->pm_usage_cnt);
136274 + DBG_871X("...pm_usage_cnt(%d).....\n", dvobj->pusbintf->pm_usage_cnt);
136275 #endif
136276 -
136277 +
136278 }
136279 int autoresume_enter(_adapter* padapter)
136280 {
136281 @@ -1073,156 +1103,156 @@ int autoresume_enter(_adapter* padapter)
136282 struct security_priv* psecuritypriv=&(padapter->securitypriv);
136283 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
136284 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
136285 -
136286 -
136287 - DBG_8192C("====> autoresume_enter \n");
136288 -
136289 + struct dvobj_priv *dvobj = adapter_to_dvobj(padapter);
136290 +
136291 +
136292 + DBG_871X("====> autoresume_enter \n");
136293 +
136294 if(rf_off == pwrpriv->rf_pwrstate )
136295 {
136296 pwrpriv->ps_flag = _FALSE;
136297 - #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,33))
136298 - if (usb_autopm_get_interface( padapter->dvobjpriv.pusbintf) < 0)
136299 + #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,33))
136300 + if (usb_autopm_get_interface(dvobj->pusbintf) < 0)
136301 {
136302 - DBG_8192C( "can't get autopm: %d\n", result);
136303 + DBG_871X( "can't get autopm: %d\n", result);
136304 result = _FAIL;
136305 goto error_exit;
136306 - }
136307 - #elif (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,20))
136308 - usb_autopm_disable(padapter->dvobjpriv.pusbintf);
136309 + }
136310 + #elif (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,20))
136311 + usb_autopm_disable(dvobj->pusbintf);
136312 #else
136313 - usb_autoresume_device(padapter->dvobjpriv.pusbdev, 1);
136314 + usb_autoresume_device(dvobj->pusbdev, 1);
136315 #endif
136316
136317 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,32))
136318 - DBG_8192C("...pm_usage_cnt(%d).....\n",atomic_read(&(padapter->dvobjpriv.pusbintf->pm_usage_cnt)));
136319 + DBG_871X("...pm_usage_cnt(%d).....\n", atomic_read(&(dvobj->pusbintf->pm_usage_cnt)));
136320 #else
136321 - DBG_8192C("...pm_usage_cnt(%d).....\n",padapter->dvobjpriv.pusbintf->pm_usage_cnt);
136322 - #endif
136323 + DBG_871X("...pm_usage_cnt(%d).....\n", dvobj->pusbintf->pm_usage_cnt);
136324 + #endif
136325 }
136326 - DBG_8192C("<==== autoresume_enter \n");
136327 -error_exit:
136328 + DBG_871X("<==== autoresume_enter \n");
136329 +error_exit:
136330
136331 return result;
136332 }
136333 #endif
136334
136335 -extern char* ifname;
136336 -/*
136337 - * drv_init() - a device potentially for us
136338 - *
136339 - * notes: drv_init() is called when the bus driver has located a card for us to support.
136340 - * We accept the new device by returning 0.
136341 -*/
136342 +#ifdef CONFIG_PLATFORM_RTD2880B
136343 +extern void rtd2885_wlan_netlink_sendMsg(char *action_string, char *name);
136344 +#endif
136345
136346 -_adapter *rtw_sw_export = NULL;
136347 +#ifdef CONFIG_PLATFORM_ARM_SUNxI
136348 +#include <mach/sys_config.h>
136349 +extern int sw_usb_disable_hcd(__u32 usbc_no);
136350 +extern int sw_usb_enable_hcd(__u32 usbc_no);
136351 +static int usb_wifi_host = 2;
136352 +#endif
136353
136354 -static int rtw_drv_init(struct usb_interface *pusb_intf, const struct usb_device_id *pdid)
136355 -{
136356 - int i;
136357 +#ifdef CONFIG_PLATFORM_ARM_SUN6I
136358 +#include <mach/sys_config.h>
136359 +extern int sw_usb_disable_hcd(__u32 usbc_no);
136360 +extern int sw_usb_enable_hcd(__u32 usbc_no);
136361 +extern void wifi_pm_power(int on);
136362 +static script_item_u item;
136363 +#endif
136364
136365 - uint status;
136366 +_adapter *rtw_usb_if1_init(struct dvobj_priv *dvobj,
136367 + struct usb_interface *pusb_intf, const struct usb_device_id *pdid)
136368 +{
136369 _adapter *padapter = NULL;
136370 - struct dvobj_priv *pdvobjpriv;
136371 - struct net_device *pnetdev;
136372 -
136373 - RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("+rtw_drv_init\n"));
136374 - //DBG_8192C("+rtw_drv_init\n");
136375 -
136376 - //2009.8.13, by Thomas
136377 - // In this probe function, O.S. will provide the usb interface pointer to driver.
136378 - // We have to increase the reference count of the usb device structure by using the usb_get_dev function.
136379 - usb_get_dev(interface_to_usbdev(pusb_intf));
136380 + struct net_device *pnetdev = NULL;
136381 + int status = _FAIL;
136382
136383 - //step 0.
136384 - process_spec_devid(pdid);
136385 -
136386 - //step 1. set USB interface data
136387 - // init data
136388 - pnetdev = rtw_init_netdev(NULL);
136389 - if (!pnetdev)
136390 - goto error;
136391 -
136392 - SET_NETDEV_DEV(pnetdev, &pusb_intf->dev);
136393 + if ((padapter = (_adapter *)rtw_zvmalloc(sizeof(*padapter))) == NULL) {
136394 + goto exit;
136395 + }
136396 + padapter->dvobj = dvobj;
136397 + dvobj->if1 = padapter;
136398
136399 - padapter = rtw_netdev_priv(pnetdev);
136400 padapter->bDriverStopped=_TRUE;
136401 - pdvobjpriv = &padapter->dvobjpriv;
136402 - pdvobjpriv->padapter = padapter;
136403 - pdvobjpriv->pusbintf = pusb_intf ;
136404 - pdvobjpriv->pusbdev = interface_to_usbdev(pusb_intf);
136405
136406 -#ifdef CONFIG_IOCTL_CFG80211
136407 - rtw_wdev_alloc(padapter, &pusb_intf->dev);
136408 -#endif //CONFIG_IOCTL_CFG80211
136409 -
136410 + dvobj->padapters[dvobj->iface_nums++] = padapter;
136411 + padapter->iface_id = IFACE_ID0;
136412
136413 - // set data
136414 - usb_set_intfdata(pusb_intf, pnetdev);
136415 -
136416 - //set interface_type to usb
136417 - padapter->interface_type = RTW_USB;
136418 +#if defined(CONFIG_CONCURRENT_MODE) || defined(CONFIG_DUALMAC_CONCURRENT)
136419 + //set adapter_type/iface type for primary padapter
136420 + padapter->isprimary = _TRUE;
136421 + padapter->adapter_type = PRIMARY_ADAPTER;
136422 + #ifndef CONFIG_HWPORT_SWAP
136423 + padapter->iface_type = IFACE_PORT0;
136424 + #else
136425 + padapter->iface_type = IFACE_PORT1;
136426 + #endif
136427 +#endif
136428
136429 + #ifndef RTW_DVOBJ_CHIP_HW_TYPE
136430 //step 1-1., decide the chip_type via vid/pid
136431 + padapter->interface_type = RTW_USB;
136432 decide_chip_type_by_usb_device_id(padapter, pdid);
136433 + #endif
136434
136435 - //step 2.
136436 - if(padapter->chip_type == RTL8188C_8192C)
136437 - {
136438 -#ifdef CONFIG_RTL8192C
136439 - rtl8192cu_set_hal_ops(padapter);
136440 -#endif
136441 + if((pnetdev = rtw_init_netdev(padapter)) == NULL) {
136442 + goto free_adapter;
136443 }
136444 - else if(padapter->chip_type == RTL8192D)
136445 - {
136446 -#ifdef CONFIG_RTL8192D
136447 + SET_NETDEV_DEV(pnetdev, dvobj_to_dev(dvobj));
136448 + padapter = rtw_netdev_priv(pnetdev);
136449 +
136450 + //step 2. hook HalFunc, allocate HalData
136451 + if(padapter->chip_type == RTL8188C_8192C) {
136452 + #ifdef CONFIG_RTL8192C
136453 + rtl8192cu_set_hal_ops(padapter);
136454 + #endif
136455 + } else if(padapter->chip_type == RTL8192D) {
136456 + #ifdef CONFIG_RTL8192D
136457 rtl8192du_set_hal_ops(padapter);
136458 -#endif
136459 - }
136460 - else
136461 - {
136462 - DBG_8192C("Detect NULL_CHIP_TYPE\n");
136463 - status = _FAIL;
136464 - goto error;
136465 + #endif
136466 + } else {
136467 + DBG_871X("Detect NULL_CHIP_TYPE\n");
136468 + goto free_hal_data;
136469 }
136470
136471 - //step 3. initialize the dvobj_priv
136472 - padapter->dvobj_init=&usb_dvobj_init;
136473 - padapter->dvobj_deinit=&usb_dvobj_deinit;
136474 + //step 3.
136475 padapter->intf_start=&usb_intf_start;
136476 padapter->intf_stop=&usb_intf_stop;
136477
136478 - //step 3.
136479 - //initialize the dvobj_priv ,include Chip version
136480 - if (padapter->dvobj_init == NULL){
136481 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("\n Initialize dvobjpriv.dvobj_init error!!!\n"));
136482 - goto error;
136483 + //.2
136484 + if ((rtw_init_io_priv(padapter, usb_set_intf_ops)) == _FAIL) {
136485 + RT_TRACE(_module_hci_intfs_c_,_drv_err_,(" \n Can't init io_reqs\n"));
136486 + goto free_hal_data;
136487 }
136488
136489 - status = padapter->dvobj_init(padapter);
136490 - if (status != _SUCCESS) {
136491 - RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("initialize device object priv Failed!\n"));
136492 - goto error;
136493 - }
136494 + rtw_hal_read_chip_version(padapter);
136495 +
136496 + //.4 usb endpoint mapping
136497 + rtw_hal_chip_configure(padapter);
136498
136499 //step 4. read efuse/eeprom data and get mac_addr
136500 - intf_read_chip_info(padapter);
136501 + rtw_hal_read_chip_info(padapter);
136502 +
136503 + if (rtw_handle_dualmac(padapter, 1) != _SUCCESS)
136504 + goto free_hal_data;
136505 +
136506 +#ifdef CONFIG_IOCTL_CFG80211
136507 + if(rtw_wdev_alloc(padapter, dvobj_to_dev(dvobj)) != 0) {
136508 + goto handle_dualmac;
136509 + }
136510 +#endif
136511
136512 //step 5.
136513 - status = rtw_init_drv_sw(padapter);
136514 - if(status ==_FAIL){
136515 + if (rtw_init_drv_sw(padapter) == _FAIL) {
136516 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("Initialize driver software resource Failed!\n"));
136517 - goto error;
136518 + goto free_wdev;
136519 }
136520
136521 #ifdef CONFIG_PM
136522 #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18))
136523 if(padapter->pwrctrlpriv.bSupportRemoteWakeup)
136524 {
136525 - pdvobjpriv->pusbdev->do_remote_wakeup=1;
136526 - pusb_intf->needs_remote_wakeup = 1;
136527 + dvobj->pusbdev->do_remote_wakeup=1;
136528 + pusb_intf->needs_remote_wakeup = 1;
136529 device_init_wakeup(&pusb_intf->dev, 1);
136530 - DBG_8192C("\n padapter->pwrctrlpriv.bSupportRemoteWakeup~~~~~~\n");
136531 - DBG_8192C("\n padapter->pwrctrlpriv.bSupportRemoteWakeup~~~[%d]~~~\n",device_may_wakeup(&pusb_intf->dev));
136532 + DBG_871X("\n padapter->pwrctrlpriv.bSupportRemoteWakeup~~~~~~\n");
136533 + DBG_871X("\n padapter->pwrctrlpriv.bSupportRemoteWakeup~~~[%d]~~~\n",device_may_wakeup(&pusb_intf->dev));
136534 }
136535 #endif
136536 #endif
136537 @@ -1232,101 +1262,204 @@ static int rtw_drv_init(struct usb_inter
136538 {
136539 if(padapter->registrypriv.usbss_enable ){ /* autosuspend (2s delay) */
136540 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,38))
136541 - pdvobjpriv->pusbdev->dev.power.autosuspend_delay = 0 * HZ;//15 * HZ; idle-delay time
136542 + dvobj->pusbdev->dev.power.autosuspend_delay = 0 * HZ;//15 * HZ; idle-delay time
136543 #else
136544 - pdvobjpriv->pusbdev->autosuspend_delay = 0 * HZ;//15 * HZ; idle-delay time
136545 + dvobj->pusbdev->autosuspend_delay = 0 * HZ;//15 * HZ; idle-delay time
136546 #endif
136547
136548 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
136549 - usb_enable_autosuspend(padapter->dvobjpriv.pusbdev);
136550 + usb_enable_autosuspend(dvobj->pusbdev);
136551 #elif (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,22) && LINUX_VERSION_CODE<=KERNEL_VERSION(2,6,34))
136552 - padapter->bDisableAutosuspend = padapter->dvobjpriv.pusbdev->autosuspend_disabled ;
136553 - padapter->dvobjpriv.pusbdev->autosuspend_disabled = 0;//autosuspend disabled by the user
136554 + padapter->bDisableAutosuspend = dvobj->pusbdev->autosuspend_disabled ;
136555 + dvobj->pusbdev->autosuspend_disabled = 0;//autosuspend disabled by the user
136556 #endif
136557
136558 - usb_autopm_get_interface(padapter->dvobjpriv.pusbintf );//init pm_usage_cnt ,let it start from 1
136559 + usb_autopm_get_interface(dvobj->pusbintf );//init pm_usage_cnt ,let it start from 1
136560
136561 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,32))
136562 - DBG_8192C("%s...pm_usage_cnt(%d).....\n",__FUNCTION__,atomic_read(&(pdvobjpriv->pusbintf ->pm_usage_cnt)));
136563 + DBG_871X("%s...pm_usage_cnt(%d).....\n",__FUNCTION__, atomic_read(&(dvobj->pusbintf ->pm_usage_cnt)));
136564 #else
136565 - DBG_8192C("%s...pm_usage_cnt(%d).....\n",__FUNCTION__,pdvobjpriv->pusbintf ->pm_usage_cnt);
136566 - #endif
136567 + DBG_871X("%s...pm_usage_cnt(%d).....\n",__FUNCTION__, dvobj->pusbintf ->pm_usage_cnt);
136568 + #endif
136569 }
136570 - }
136571 + }
136572 #endif
136573 - // alloc dev name after read efuse.
136574 - rtw_init_netdev_name(pnetdev, ifname);
136575
136576 + // set mac addr
136577 rtw_macaddr_cfg(padapter->eeprompriv.mac_addr);
136578 + rtw_init_wifidirect_addrs(padapter, padapter->eeprompriv.mac_addr, padapter->eeprompriv.mac_addr);
136579
136580 - _rtw_memcpy(pnetdev->dev_addr, padapter->eeprompriv.mac_addr, ETH_ALEN);
136581 - DBG_8192C("MAC Address from pnetdev->dev_addr= " MAC_FMT "\n", MAC_ARG(pnetdev->dev_addr));
136582 + DBG_871X("bDriverStopped:%d, bSurpriseRemoved:%d, bup:%d, hw_init_completed:%d\n"
136583 + ,padapter->bDriverStopped
136584 + ,padapter->bSurpriseRemoved
136585 + ,padapter->bup
136586 + ,padapter->hw_init_completed
136587 + );
136588
136589 + status = _SUCCESS;
136590
136591 - //step 6.
136592 - /* Tell the network stack we exist */
136593 - if (register_netdev(pnetdev) != 0) {
136594 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("register_netdev() failed\n"));
136595 - goto error;
136596 +free_wdev:
136597 + if(status != _SUCCESS) {
136598 + #ifdef CONFIG_IOCTL_CFG80211
136599 + rtw_wdev_unregister(padapter->rtw_wdev);
136600 + rtw_wdev_free(padapter->rtw_wdev);
136601 + #endif
136602 }
136603 +handle_dualmac:
136604 + if (status != _SUCCESS)
136605 + rtw_handle_dualmac(padapter, 0);
136606 +free_hal_data:
136607 + if(status != _SUCCESS && padapter->HalData)
136608 + rtw_mfree(padapter->HalData, sizeof(*(padapter->HalData)));
136609 +free_adapter:
136610 + if (status != _SUCCESS) {
136611 + if (pnetdev)
136612 + rtw_free_netdev(pnetdev);
136613 + else if (padapter)
136614 + rtw_vmfree((u8*)padapter, sizeof(*padapter));
136615 + padapter = NULL;
136616 + }
136617 +exit:
136618 + return padapter;
136619 +}
136620
136621 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-drv_init - Adapter->bDriverStopped=%d, Adapter->bSurpriseRemoved=%d\n",padapter->bDriverStopped, padapter->bSurpriseRemoved));
136622 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-871x_drv - drv_init, success!\n"));
136623 - //DBG_8192C("-871x_drv - drv_init, success!\n");
136624 +static void rtw_usb_if1_deinit(_adapter *if1)
136625 +{
136626 + struct net_device *pnetdev = if1->pnetdev;
136627 + struct mlme_priv *pmlmepriv= &if1->mlmepriv;
136628
136629 -#ifdef CONFIG_PROC_DEBUG
136630 -#ifdef RTK_DMP_PLATFORM
136631 - rtw_proc_init_one(pnetdev);
136632 -#endif
136633 -#endif
136634 + if(check_fwstate(pmlmepriv, _FW_LINKED))
136635 + rtw_disassoc_cmd(if1, 0, _FALSE);
136636
136637 -#ifdef CONFIG_HOSTAPD_MLME
136638 - hostapd_mode_init(padapter);
136639 +#ifdef CONFIG_AP_MODE
136640 + free_mlme_ap_info(if1);
136641 + #ifdef CONFIG_HOSTAPD_MLME
136642 + hostapd_mode_unload(if1);
136643 + #endif
136644 #endif
136645
136646 + rtw_cancel_all_timer(if1);
136647 +#ifdef CONFIG_WOWLAN
136648 + if1->pwrctrlpriv.wowlan_mode=_FALSE;
136649 +#endif //CONFIG_WOWLAN
136650 + rtw_dev_unload(if1);
136651 +
136652 + DBG_871X("%s, hw_init_completed=%d\n", __func__, if1->hw_init_completed);
136653 +
136654 + //s6.
136655 + rtw_handle_dualmac(if1, 0);
136656 +
136657 +#ifdef CONFIG_IOCTL_CFG80211
136658 + if (if1->rtw_wdev)
136659 + rtw_wdev_free(if1->rtw_wdev);
136660 +#endif //CONFIG_IOCTL_CFG80211
136661 +
136662 + rtw_free_drv_sw(if1);
136663 +
136664 + if(pnetdev)
136665 + rtw_free_netdev(pnetdev);
136666 +
136667 #ifdef CONFIG_PLATFORM_RTD2880B
136668 - DBG_8192C("wlan link up\n");
136669 - rtd2885_wlan_netlink_sendMsg("linkup", "8712");
136670 + DBG_871X("wlan link down\n");
136671 + rtd2885_wlan_netlink_sendMsg("linkdown", "8712");
136672 +#endif
136673 +
136674 +}
136675 +
136676 +/*
136677 + * drv_init() - a device potentially for us
136678 + *
136679 + * notes: drv_init() is called when the bus driver has located a card for us to support.
136680 + * We accept the new device by returning 0.
136681 +*/
136682 +
136683 +_adapter *rtw_sw_export = NULL;
136684 +
136685 +static int rtw_drv_init(struct usb_interface *pusb_intf, const struct usb_device_id *did)
136686 +{
136687 + int i;
136688 + uint status = _FAIL;
136689 + _adapter *if1 = NULL, *if2 = NULL;
136690 + struct dvobj_priv *dvobj = NULL;
136691 +
136692 +
136693 + RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("+rtw_drv_init\n"));
136694 +
136695 +
136696 + //step 0.
136697 + process_spec_devid(did);
136698 +
136699 + /* Initialize dvobj_priv */
136700 + if ((dvobj = usb_dvobj_init(pusb_intf)) == NULL) {
136701 + RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("initialize device object priv Failed!\n"));
136702 + goto exit;
136703 + }
136704 +
136705 + /* Initialize if1 */
136706 + if ((if1 = rtw_usb_if1_init(dvobj, pusb_intf, did)) == NULL) {
136707 + DBG_871X("rtw_usb_if1_init Failed!\n");
136708 + goto free_dvobj;
136709 + }
136710 +
136711 + /* Initialize if2 */
136712 +#ifdef CONFIG_CONCURRENT_MODE
136713 + if((if2 = rtw_drv_if2_init(if1, usb_set_intf_ops)) == NULL) {
136714 + goto free_if1;
136715 + }
136716 +#ifdef CONFIG_MULTI_VIR_IFACES
136717 + for(i=0; i<if1->registrypriv.ext_iface_num;i++)
136718 + {
136719 + if(rtw_drv_add_vir_if(if1, usb_set_intf_ops) == NULL)
136720 + {
136721 + DBG_871X("rtw_drv_add_iface failed! (%d)\n", i);
136722 + goto free_if1;
136723 + }
136724 + }
136725 +#endif //CONFIG_MULTI_VIR_IFACES
136726 #endif
136727
136728 +#ifdef CONFIG_INTEL_PROXIM
136729 + rtw_sw_export=if1;
136730 +#endif
136731
136732 #ifdef CONFIG_GLOBAL_UI_PID
136733 - if(ui_pid[1]!=0) {
136734 + if (ui_pid[1]!=0) {
136735 DBG_871X("ui_pid[1]:%d\n",ui_pid[1]);
136736 rtw_signal_process(ui_pid[1], SIGUSR2);
136737 }
136738 #endif
136739 -#ifdef CONFIG_INTEL_PROXIM
136740 - rtw_sw_export=padapter;
136741 -#endif
136742 -
136743 - DBG_8192C("bDriverStopped:%d, bSurpriseRemoved:%d, bup:%d, hw_init_completed:%d\n"
136744 - ,padapter->bDriverStopped
136745 - ,padapter->bSurpriseRemoved
136746 - ,padapter->bup
136747 - ,padapter->hw_init_completed
136748 - );
136749
136750 - return 0;
136751 + //dev_alloc_name && register_netdev
136752 + if((status = rtw_drv_register_netdev(if1)) != _SUCCESS) {
136753 + goto free_if1;
136754 + }
136755
136756 -error:
136757 +#ifdef CONFIG_HOSTAPD_MLME
136758 + hostapd_mode_init(if1);
136759 +#endif
136760
136761 - usb_put_dev(interface_to_usbdev(pusb_intf));//decrease the reference count of the usb device structure if driver fail on initialzation
136762 +#ifdef CONFIG_PLATFORM_RTD2880B
136763 + DBG_871X("wlan link up\n");
136764 + rtd2885_wlan_netlink_sendMsg("linkup", "8712");
136765 +#endif
136766
136767 - usb_set_intfdata(pusb_intf, NULL);
136768 +#ifdef RTK_DMP_PLATFORM
136769 + rtw_proc_init_one(if1->pnetdev);
136770 +#endif
136771
136772 - usb_dvobj_deinit(padapter);
136773 -
136774 - if (pnetdev)
136775 - {
136776 - //unregister_netdev(pnetdev);
136777 - rtw_free_netdev(pnetdev);
136778 - }
136779 + RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-871x_drv - drv_init, success!\n"));
136780
136781 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-871x_usb - drv_init, fail!\n"));
136782 - //DBG_8192C("-871x_usb - drv_init, fail!\n");
136783 + status = _SUCCESS;
136784
136785 - return -ENODEV;
136786 +free_if1:
136787 + if (status != _SUCCESS && if1) {
136788 + rtw_usb_if1_deinit(if1);
136789 + }
136790 +free_dvobj:
136791 + if (status != _SUCCESS)
136792 + usb_dvobj_deinit(pusb_intf);
136793 +exit:
136794 + return status == _SUCCESS?0:-ENODEV;
136795 }
136796
136797 /*
136798 @@ -1335,125 +1468,70 @@ error:
136799 //rmmod module & unplug(SurpriseRemoved) will call r871xu_dev_remove() => how to recognize both
136800 static void rtw_dev_remove(struct usb_interface *pusb_intf)
136801 {
136802 - struct net_device *pnetdev=usb_get_intfdata(pusb_intf);
136803 - _adapter *padapter = (_adapter*)rtw_netdev_priv(pnetdev);
136804 - struct mlme_priv *pmlmepriv= &padapter->mlmepriv;
136805 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
136806 - u8 bResetDevice = _FALSE;
136807 + struct dvobj_priv *dvobj = usb_get_intfdata(pusb_intf);
136808 + _adapter *padapter = dvobj->if1;
136809
136810 _func_exit_;
136811
136812 - usb_set_intfdata(pusb_intf, NULL);
136813 + DBG_871X("+rtw_dev_remove\n");
136814 + RT_TRACE(_module_hci_intfs_c_,_drv_err_,("+dev_remove()\n"));
136815
136816 - if(padapter)
136817 - {
136818 + dvobj->processing_dev_remove = _TRUE;
136819
136820 -#ifdef CONFIG_IOCTL_CFG80211
136821 - struct wireless_dev *wdev = padapter->rtw_wdev;
136822 -#endif //CONFIG_IOCTL_CFG80211
136823 -
136824 - DBG_8192C("+rtw_dev_remove\n");
136825 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("+dev_remove()\n"));
136826 -#if defined(CONFIG_HAS_EARLYSUSPEND ) || defined(CONFIG_ANDROID_POWER)
136827 - rtw_unregister_early_suspend(&padapter->pwrctrlpriv);
136828 -#endif
136829 - LeaveAllPowerSaveMode(padapter);
136830 + rtw_unregister_netdevs(dvobj);
136831
136832 - if(check_fwstate(pmlmepriv, _FW_LINKED))
136833 - disconnect_hdl(padapter, NULL);
136834 -
136835 - if(drvpriv.drv_registered == _TRUE)
136836 - {
136837 - //DBG_8192C("r871xu_dev_remove():padapter->bSurpriseRemoved == _TRUE\n");
136838 - padapter->bSurpriseRemoved = _TRUE;
136839 - }
136840 - /*else
136841 - {
136842 - //DBG_8192C("r871xu_dev_remove():module removed\n");
136843 - padapter->hw_init_completed = _FALSE;
136844 - }*/
136845 -
136846 -#ifdef CONFIG_AP_MODE
136847 - free_mlme_ap_info(padapter);
136848 -#ifdef CONFIG_HOSTAPD_MLME
136849 - hostapd_mode_unload(padapter);
136850 -#endif //CONFIG_HOSTAPD_MLME
136851 -#endif //CONFIG_AP_MODE
136852 + if(usb_drv->drv_registered == _TRUE)
136853 + {
136854 + //DBG_871X("r871xu_dev_remove():padapter->bSurpriseRemoved == _TRUE\n");
136855 + padapter->bSurpriseRemoved = _TRUE;
136856 + }
136857 + /*else
136858 + {
136859 + //DBG_871X("r871xu_dev_remove():module removed\n");
136860 + padapter->hw_init_completed = _FALSE;
136861 + }*/
136862
136863 - if(padapter->DriverState != DRIVER_DISAPPEAR)
136864 - {
136865 - if(pnetdev) {
136866 - unregister_netdev(pnetdev); //will call netdev_close()
136867 -#ifdef CONFIG_PROC_DEBUG
136868 - rtw_proc_remove_one(pnetdev);
136869 +#if defined(CONFIG_HAS_EARLYSUSPEND) || defined(CONFIG_ANDROID_POWER)
136870 + rtw_unregister_early_suspend(&padapter->pwrctrlpriv);
136871 #endif
136872 - }
136873 - }
136874
136875 - rtw_cancel_all_timer(padapter);
136876 -#ifdef CONFIG_WOWLAN
136877 - padapter->pwrctrlpriv.wowlan_mode=_FALSE;
136878 -#endif //CONFIG_WOWLAN
136879 - rtw_dev_unload(padapter);
136880 + rtw_pm_set_ips(padapter, IPS_NONE);
136881 + rtw_pm_set_lps(padapter, PS_MODE_ACTIVE);
136882
136883 - DBG_8192C("+r871xu_dev_remove, hw_init_completed=%d\n", padapter->hw_init_completed);
136884 + LeaveAllPowerSaveMode(padapter);
136885
136886 - //Modify condition for 92DU DMDP 2010.11.18, by Thomas
136887 - //move code to here, avoid access null pointer. 2011.05.25.
136888 - if((pdvobjpriv->NumInterfaces != 2) || (pdvobjpriv->InterfaceNumber == 1))
136889 - bResetDevice = _TRUE;
136890 +#ifdef CONFIG_CONCURRENT_MODE
136891 +#ifdef CONFIG_MULTI_VIR_IFACES
136892 + rtw_drv_stop_vir_ifaces(dvobj);
136893 +#endif //CONFIG_MULTI_VIR_IFACES
136894 + rtw_drv_if2_stop(dvobj->if2);
136895 +#endif //CONFIG_CONCURRENT_MODE
136896
136897 - //s6.
136898 - if(padapter->dvobj_deinit)
136899 - {
136900 - padapter->dvobj_deinit(padapter);
136901 - }
136902 - else
136903 - {
136904 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("Initialize hcipriv.hci_priv_init error!!!\n"));
136905 - }
136906 + rtw_usb_if1_deinit(padapter);
136907
136908 - //after rtw_free_drv_sw(), padapter has beed freed, don't refer to it.
136909 - rtw_free_drv_sw(padapter);
136910 -
136911 -#ifdef CONFIG_IOCTL_CFG80211
136912 - rtw_wdev_free(wdev);
136913 -#endif //CONFIG_IOCTL_CFG80211
136914 -
136915 - }
136916 +#ifdef CONFIG_CONCURRENT_MODE
136917 +#ifdef CONFIG_MULTI_VIR_IFACES
136918 + rtw_drv_free_vir_ifaces(dvobj);
136919 +#endif //CONFIG_MULTI_VIR_IFACES
136920 + rtw_drv_if2_free(dvobj->if2);
136921 +#endif //CONFIG_CONCURRENT_MODE
136922
136923 - usb_put_dev(interface_to_usbdev(pusb_intf));//decrease the reference count of the usb device structure when disconnect
136924 + usb_dvobj_deinit(pusb_intf);
136925
136926 - //If we didn't unplug usb dongle and remove/insert modlue, driver fails on sitesurvey for the first time when device is up .
136927 - //Reset usb port for sitesurvey fail issue. 2009.8.13, by Thomas
136928 - if(_TRUE == bResetDevice)
136929 - {
136930 - if(interface_to_usbdev(pusb_intf)->state != USB_STATE_NOTATTACHED)
136931 - {
136932 - DBG_8192C("usb attached..., try to reset usb device\n");
136933 - usb_reset_device(interface_to_usbdev(pusb_intf));
136934 - }
136935 - }
136936 -
136937 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-dev_remove()\n"));
136938 - DBG_8192C("-r871xu_dev_remove, done\n");
136939 + DBG_871X("-r871xu_dev_remove, done\n");
136940
136941 -#ifdef CONFIG_PLATFORM_RTD2880B
136942 - DBG_8192C("wlan link down\n");
136943 - rtd2885_wlan_netlink_sendMsg("linkdown", "8712");
136944 -#endif
136945 -#ifdef CONFIG_INTEL_PROXIM
136946 +
136947 +#ifdef CONFIG_INTEL_PROXIM
136948 rtw_sw_export=NULL;
136949 #endif
136950 - #ifdef DBG_MEM_ALLOC
136951 - rtw_dump_mem_stat ();
136952 - #endif
136953 +
136954 _func_exit_;
136955
136956 return;
136957
136958 }
136959 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24))
136960 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24))
136961 extern int console_suspend_enabled;
136962 #endif
136963
136964 @@ -1466,56 +1544,108 @@ static int __init rtw_drv_entry(void)
136965 tmp |= 0x55;
136966 writel(tmp,(volatile unsigned int*)0xb801a608);//write dummy register for 1055
136967 #endif
136968 -
136969 +#ifdef CONFIG_PLATFORM_ARM_SUNxI
136970 +#ifndef CONFIG_RTL8723A
136971 + int ret = 0;
136972 + /* ----------get usb_wifi_usbc_num------------- */
136973 + ret = script_parser_fetch("usb_wifi_para", "usb_wifi_usbc_num", (int *)&usb_wifi_host, 64);
136974 + if(ret != 0){
136975 + printk("ERR: script_parser_fetch usb_wifi_usbc_num failed\n");
136976 + ret = -ENOMEM;
136977 + return ret;
136978 + }
136979 + printk("sw_usb_enable_hcd: usbc_num = %d\n", usb_wifi_host);
136980 + sw_usb_enable_hcd(usb_wifi_host);
136981 +#endif //CONFIG_RTL8723A
136982 +#endif //CONFIG_PLATFORM_ARM_SUNxI
136983 +
136984 +#ifdef CONFIG_PLATFORM_ARM_SUN6I
136985 + script_item_value_type_e type;
136986 +
136987 + type = script_get_item("wifi_para", "wifi_usbc_id", &item);
136988 + if(SCIRPT_ITEM_VALUE_TYPE_INT != type){
136989 + printk("ERR: script_get_item wifi_usbc_id failed\n");
136990 + return -ENOMEM;
136991 + }
136992 +
136993 + printk("sw_usb_enable_hcd: usbc_num = %d\n", item.val);
136994 + wifi_pm_power(1);
136995 + mdelay(10);
136996 + sw_usb_enable_hcd(item.val);
136997 +#endif //CONFIG_PLATFORM_ARM_SUN6I
136998
136999 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("+rtw_drv_entry\n"));
137000
137001 - DBG_871X("rtw driver version=%s \n", DRIVERVERSION);
137002 - DBG_871X("Build at: %s %s\n", __DATE__, __TIME__);
137003 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24))
137004 + DBG_871X(DRV_NAME " driver version=%s\n", DRIVERVERSION);
137005 + DBG_871X("build time: %s %s\n", __DATE__, __TIME__);
137006 +
137007 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24))
137008 //console_suspend_enabled=0;
137009 -#endif
137010 +#endif
137011
137012 rtw_suspend_lock_init();
137013
137014 - drvpriv.drv_registered = _TRUE;
137015 - return usb_register(&drvpriv.rtw_usb_drv);
137016 + usb_drv->drv_registered = _TRUE;
137017 + return usb_register(&usb_drv->usbdrv);
137018 }
137019
137020 static void __exit rtw_drv_halt(void)
137021 {
137022 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("+rtw_drv_halt\n"));
137023 - DBG_8192C("+rtw_drv_halt\n");
137024 + DBG_871X("+rtw_drv_halt\n");
137025 +
137026 + usb_drv->drv_registered = _FALSE;
137027 + usb_deregister(&usb_drv->usbdrv);
137028 +
137029 +#ifdef CONFIG_PLATFORM_ARM_SUNxI
137030 +#ifndef CONFIG_RTL8723A
137031 + printk("sw_usb_disable_hcd: usbc_num = %d\n", usb_wifi_host);
137032 + sw_usb_disable_hcd(usb_wifi_host);
137033 +#endif //ifndef CONFIG_RTL8723A
137034 +#endif //CONFIG_PLATFORM_ARM_SUNxI
137035 +#ifdef CONFIG_PLATFORM_ARM_SUN6I
137036 + sw_usb_disable_hcd(item.val);
137037 + wifi_pm_power(0);
137038 +#endif
137039
137040 rtw_suspend_lock_uninit();
137041 + DBG_871X("-rtw_drv_halt\n");
137042
137043 - drvpriv.drv_registered = _FALSE;
137044 - usb_deregister(&drvpriv.rtw_usb_drv);
137045 - DBG_8192C("-rtw_drv_halt\n");
137046 + rtw_mstat_dump();
137047 }
137048
137049
137050 module_init(rtw_drv_entry);
137051 module_exit(rtw_drv_halt);
137052
137053 +#ifdef CONFIG_WOWLAN
137054 +#ifdef CONFIG_WOWLAN_MANUAL
137055 +
137056 +int rtw_resume_toshiba(PADAPTER Adapter)
137057 +{
137058 + struct dvobj_priv *pdvobjpriv;
137059 + pdvobjpriv = adapter_to_dvobj(Adapter);
137060
137061 -/*
137062 -init (driver module)-> r8712u_drv_entry
137063 -probe (sd device)-> r871xu_drv_init(dev_init)
137064 -open (net_device) ->netdev_open
137065 -close (net_device) ->netdev_close
137066 -remove (sd device) ->r871xu_dev_remove
137067 -exit (driver module)-> r8712u_drv_halt
137068 -*/
137069 + rtw_resume(pdvobjpriv->pusbintf);
137070 + return 0;
137071 +}
137072
137073 +int rtw_suspend_toshiba(PADAPTER Adapter)
137074 +{
137075 + pm_message_t msg;
137076 + struct dvobj_priv *pdvobjpriv;
137077 + pdvobjpriv = adapter_to_dvobj(Adapter);
137078 + msg.event=0;
137079 + //for Toshiba only, they should call rtw_suspend before suspend
137080 + rtw_suspend(pdvobjpriv->pusbintf, msg);
137081 + return 0;
137082 +}
137083 +EXPORT_SYMBOL(rtw_suspend_toshiba);
137084 +EXPORT_SYMBOL(rtw_resume_toshiba);
137085 +#endif //CONFIG_WOWLAN_MANUAL
137086 +#endif //CONFIG_WOWLAN
137087
137088 -/*
137089 -r8711s_drv_entry()
137090 -r8711u_drv_entry()
137091 -r8712s_drv_entry()
137092 -r8712u_drv_entry()
137093 -*/
137094 -#ifdef CONFIG_INTEL_PROXIM
137095 +#ifdef CONFIG_INTEL_PROXIM
137096 _adapter *rtw_usb_get_sw_pointer(void)
137097 {
137098 return rtw_sw_export;
137099 --- /dev/null
137100 +++ b/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_ops_linux.c
137101 @@ -0,0 +1,649 @@
137102 +/******************************************************************************
137103 + *
137104 + * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
137105 + *
137106 + * This program is free software; you can redistribute it and/or modify it
137107 + * under the terms of version 2 of the GNU General Public License as
137108 + * published by the Free Software Foundation.
137109 + *
137110 + * This program is distributed in the hope that it will be useful, but WITHOUT
137111 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
137112 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
137113 + * more details.
137114 + *
137115 + * You should have received a copy of the GNU General Public License along with
137116 + * this program; if not, write to the Free Software Foundation, Inc.,
137117 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
137118 + *
137119 + *******************************************************************************/
137120 +#define _USB_OPS_LINUX_C_
137121 +
137122 +#include <drv_types.h>
137123 +#include <usb_ops_linux.h>
137124 +#include <rtw_sreset.h>
137125 +
137126 +#ifdef CONFIG_USB_SUPPORT_ASYNC_VDN_REQ
137127 +static void _usbctrl_vendorreq_async_callback(struct urb *urb, struct pt_regs *regs)
137128 +{
137129 + if (urb) {
137130 + if (urb->context) {
137131 + rtw_mfree(urb->context);
137132 + }
137133 + usb_free_urb(urb);
137134 + }
137135 +}
137136 +
137137 +static int _usbctrl_vendorreq_async_write(struct usb_device *udev, u8 request,
137138 + u16 value, u16 index, void *pdata, u16 len, u8 requesttype)
137139 +{
137140 + int rc;
137141 + unsigned int pipe;
137142 + u8 reqtype;
137143 + struct usb_ctrlrequest *dr;
137144 + struct urb *urb;
137145 + struct rtl819x_async_write_data {
137146 + u8 data[VENDOR_CMD_MAX_DATA_LEN];
137147 + struct usb_ctrlrequest dr;
137148 + } *buf;
137149 +
137150 +
137151 + if (requesttype == VENDOR_READ) {
137152 + pipe = usb_rcvctrlpipe(udev, 0);//read_in
137153 + reqtype = REALTEK_USB_VENQT_READ;
137154 + }
137155 + else {
137156 + pipe = usb_sndctrlpipe(udev, 0);//write_out
137157 + reqtype = REALTEK_USB_VENQT_WRITE;
137158 + }
137159 +
137160 + buf = (struct rtl819x_async_write_data *)rtw_zmalloc(sizeof(*buf));
137161 + if (!buf) {
137162 + rc = -ENOMEM;
137163 + goto exit;
137164 + }
137165 +
137166 + urb = usb_alloc_urb(0, GFP_ATOMIC);
137167 + if (!urb) {
137168 + rtw_mfree((u8*)buf, sizeof(*buf));
137169 + rc = -ENOMEM;
137170 + goto exit;
137171 + }
137172 +
137173 + dr = &buf->dr;
137174 +
137175 + dr->bRequestType = reqtype;
137176 + dr->bRequest = request;
137177 + dr->wValue = cpu_to_le16(value);
137178 + dr->wIndex = cpu_to_le16(index);
137179 + dr->wLength = cpu_to_le16(len);
137180 +
137181 + _rtw_memcpy(buf, pdata, len);
137182 +
137183 + usb_fill_control_urb(urb, udev, pipe, (unsigned char *)dr, buf, len,
137184 + _usbctrl_vendorreq_async_callback, buf);
137185 +
137186 + rc = usb_submit_urb(urb, GFP_ATOMIC);
137187 + if (rc < 0) {
137188 + rtw_mfree((u8*)buf, sizeof(*buf));
137189 + usb_free_urb(urb);
137190 + }
137191 +
137192 +exit:
137193 + return rc;
137194 +}
137195 +
137196 +int usb_write_async(struct usb_device *udev, u32 addr, void *pdata, u16 len)
137197 +{
137198 + u8 request;
137199 + u8 requesttype;
137200 + u16 wvalue;
137201 + u16 index;
137202 +
137203 + int ret;
137204 +
137205 + requesttype = VENDOR_WRITE;//write_out
137206 + request = REALTEK_USB_VENQT_CMD_REQ;
137207 + index = REALTEK_USB_VENQT_CMD_IDX;//n/a
137208 +
137209 + wvalue = (u16)(addr&0x0000ffff);
137210 +
137211 + ret = _usbctrl_vendorreq_async_write(udev, request, wvalue, index, pdata, len, requesttype);
137212 +
137213 + return ret;
137214 +}
137215 +
137216 +int usb_async_write8(struct intf_hdl *pintfhdl, u32 addr, u8 val)
137217 +{
137218 + u8 data;
137219 + int ret;
137220 + struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *)pintfhdl->pintf_dev;
137221 + struct usb_device *udev=pdvobjpriv->pusbdev;
137222 +
137223 + _func_enter_;
137224 + data = val;
137225 + ret = usb_write_async(udev, addr, &data, 1);
137226 + _func_exit_;
137227 +
137228 + return ret;
137229 +}
137230 +
137231 +int usb_async_write16(struct intf_hdl *pintfhdl, u32 addr, u16 val)
137232 +{
137233 + u16 data;
137234 + int ret;
137235 + struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *)pintfhdl->pintf_dev;
137236 + struct usb_device *udev=pdvobjpriv->pusbdev;
137237 +
137238 + _func_enter_;
137239 + data = val;
137240 + ret = usb_write_async(udev, addr, &data, 2);
137241 + _func_exit_;
137242 +
137243 + return ret;
137244 +}
137245 +
137246 +int usb_async_write32(struct intf_hdl *pintfhdl, u32 addr, u32 val)
137247 +{
137248 + u32 data;
137249 + int ret;
137250 + struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *)pintfhdl->pintf_dev;
137251 + struct usb_device *udev=pdvobjpriv->pusbdev;
137252 +
137253 + _func_enter_;
137254 + data = val;
137255 + ret = usb_write_async(udev, addr, &data, 4);
137256 + _func_exit_;
137257 +
137258 + return ret;
137259 +}
137260 +#endif /* CONFIG_USB_SUPPORT_ASYNC_VDN_REQ */
137261 +
137262 +unsigned int ffaddr2pipehdl(struct dvobj_priv *pdvobj, u32 addr)
137263 +{
137264 + unsigned int pipe=0;
137265 + int ep_num=0;
137266 + _adapter *padapter = pdvobj->if1;
137267 + struct usb_device *pusbd = pdvobj->pusbdev;
137268 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
137269 +
137270 + if (addr == RECV_BULK_IN_ADDR) {
137271 + pipe=usb_rcvbulkpipe(pusbd, pHalData->RtBulkInPipe);
137272 +
137273 + } else if (addr == RECV_INT_IN_ADDR) {
137274 + pipe=usb_rcvbulkpipe(pusbd, pHalData->RtIntInPipe);
137275 +
137276 + } else if (addr < HW_QUEUE_ENTRY) {
137277 + ep_num = pHalData->Queue2EPNum[addr];
137278 + pipe = usb_sndbulkpipe(pusbd, ep_num);
137279 + }
137280 +
137281 + return pipe;
137282 +}
137283 +
137284 +struct zero_bulkout_context{
137285 + void *pbuf;
137286 + void *purb;
137287 + void *pirp;
137288 + void *padapter;
137289 +};
137290 +
137291 +static void usb_bulkout_zero_complete(struct urb *purb, struct pt_regs *regs)
137292 +{
137293 + struct zero_bulkout_context *pcontext = (struct zero_bulkout_context *)purb->context;
137294 +
137295 + //DBG_8192C("+usb_bulkout_zero_complete\n");
137296 +
137297 + if(pcontext)
137298 + {
137299 + if(pcontext->pbuf)
137300 + {
137301 + rtw_mfree(pcontext->pbuf, sizeof(int));
137302 + }
137303 +
137304 + if(pcontext->purb && (pcontext->purb==purb))
137305 + {
137306 + usb_free_urb(pcontext->purb);
137307 + }
137308 +
137309 +
137310 + rtw_mfree((u8*)pcontext, sizeof(struct zero_bulkout_context));
137311 + }
137312 +
137313 +
137314 +}
137315 +
137316 +static u32 usb_bulkout_zero(struct intf_hdl *pintfhdl, u32 addr)
137317 +{
137318 + int pipe, status, len;
137319 + u32 ret;
137320 + unsigned char *pbuf;
137321 + struct zero_bulkout_context *pcontext;
137322 + PURB purb = NULL;
137323 + _adapter *padapter = (_adapter *)pintfhdl->padapter;
137324 + struct dvobj_priv *pdvobj = adapter_to_dvobj(padapter);
137325 + struct usb_device *pusbd = pdvobj->pusbdev;
137326 +
137327 + //DBG_871X("%s\n", __func__);
137328 +
137329 +
137330 + if((padapter->bDriverStopped) || (padapter->bSurpriseRemoved) ||(padapter->pwrctrlpriv.pnp_bstop_trx))
137331 + {
137332 + return _FAIL;
137333 + }
137334 +
137335 +
137336 + pcontext = (struct zero_bulkout_context *)rtw_zmalloc(sizeof(struct zero_bulkout_context));
137337 +
137338 + pbuf = (unsigned char *)rtw_zmalloc(sizeof(int));
137339 + purb = usb_alloc_urb(0, GFP_ATOMIC);
137340 +
137341 + len = 0;
137342 + pcontext->pbuf = pbuf;
137343 + pcontext->purb = purb;
137344 + pcontext->pirp = NULL;
137345 + pcontext->padapter = padapter;
137346 +
137347 +
137348 + //translate DMA FIFO addr to pipehandle
137349 + //pipe = ffaddr2pipehdl(pdvobj, addr);
137350 +
137351 + usb_fill_bulk_urb(purb, pusbd, pipe,
137352 + pbuf,
137353 + len,
137354 + usb_bulkout_zero_complete,
137355 + pcontext);//context is pcontext
137356 +
137357 + status = usb_submit_urb(purb, GFP_ATOMIC);
137358 +
137359 + if (!status)
137360 + {
137361 + ret= _SUCCESS;
137362 + }
137363 + else
137364 + {
137365 + ret= _FAIL;
137366 + }
137367 +
137368 +
137369 + return _SUCCESS;
137370 +
137371 +}
137372 +
137373 +void usb_read_mem(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *rmem)
137374 +{
137375 +
137376 +}
137377 +
137378 +void usb_write_mem(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem)
137379 +{
137380 +
137381 +}
137382 +
137383 +
137384 +void usb_read_port_cancel(struct intf_hdl *pintfhdl)
137385 +{
137386 + int i;
137387 + struct recv_buf *precvbuf;
137388 + _adapter *padapter = pintfhdl->padapter;
137389 + precvbuf = (struct recv_buf *)padapter->recvpriv.precv_buf;
137390 +
137391 + DBG_871X("%s\n", __func__);
137392 +
137393 + padapter->bReadPortCancel = _TRUE;
137394 +
137395 + for (i=0; i < NR_RECVBUFF ; i++) {
137396 +
137397 + precvbuf->reuse = _TRUE;
137398 + if (precvbuf->purb) {
137399 + //DBG_8192C("usb_read_port_cancel : usb_kill_urb \n");
137400 + usb_kill_urb(precvbuf->purb);
137401 + }
137402 + precvbuf++;
137403 + }
137404 +
137405 +#ifdef CONFIG_USB_INTERRUPT_IN_PIPE
137406 + usb_kill_urb(padapter->recvpriv.int_in_urb);
137407 +#endif
137408 +}
137409 +
137410 +static void usb_write_port_complete(struct urb *purb, struct pt_regs *regs)
137411 +{
137412 + _irqL irqL;
137413 + int i;
137414 + struct xmit_buf *pxmitbuf = (struct xmit_buf *)purb->context;
137415 + //struct xmit_frame *pxmitframe = (struct xmit_frame *)pxmitbuf->priv_data;
137416 + //_adapter *padapter = pxmitframe->padapter;
137417 + _adapter *padapter = pxmitbuf->padapter;
137418 + struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
137419 + //struct pkt_attrib *pattrib = &pxmitframe->attrib;
137420 +
137421 +_func_enter_;
137422 +
137423 + switch(pxmitbuf->flags)
137424 + {
137425 + case VO_QUEUE_INX:
137426 + pxmitpriv->voq_cnt--;
137427 + break;
137428 + case VI_QUEUE_INX:
137429 + pxmitpriv->viq_cnt--;
137430 + break;
137431 + case BE_QUEUE_INX:
137432 + pxmitpriv->beq_cnt--;
137433 + break;
137434 + case BK_QUEUE_INX:
137435 + pxmitpriv->bkq_cnt--;
137436 + break;
137437 + case HIGH_QUEUE_INX:
137438 +#ifdef CONFIG_AP_MODE
137439 + rtw_chk_hi_queue_cmd(padapter);
137440 +#endif
137441 + break;
137442 + default:
137443 + break;
137444 + }
137445 +
137446 +
137447 +/*
137448 + _enter_critical(&pxmitpriv->lock, &irqL);
137449 +
137450 + pxmitpriv->txirp_cnt--;
137451 +
137452 + switch(pattrib->priority)
137453 + {
137454 + case 1:
137455 + case 2:
137456 + pxmitpriv->bkq_cnt--;
137457 + //DBG_8192C("pxmitpriv->bkq_cnt=%d\n", pxmitpriv->bkq_cnt);
137458 + break;
137459 + case 4:
137460 + case 5:
137461 + pxmitpriv->viq_cnt--;
137462 + //DBG_8192C("pxmitpriv->viq_cnt=%d\n", pxmitpriv->viq_cnt);
137463 + break;
137464 + case 6:
137465 + case 7:
137466 + pxmitpriv->voq_cnt--;
137467 + //DBG_8192C("pxmitpriv->voq_cnt=%d\n", pxmitpriv->voq_cnt);
137468 + break;
137469 + case 0:
137470 + case 3:
137471 + default:
137472 + pxmitpriv->beq_cnt--;
137473 + //DBG_8192C("pxmitpriv->beq_cnt=%d\n", pxmitpriv->beq_cnt);
137474 + break;
137475 +
137476 + }
137477 +
137478 + _exit_critical(&pxmitpriv->lock, &irqL);
137479 +
137480 +
137481 + if(pxmitpriv->txirp_cnt==0)
137482 + {
137483 + RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete: txirp_cnt== 0, set allrxreturnevt!\n"));
137484 + _rtw_up_sema(&(pxmitpriv->tx_retevt));
137485 + }
137486 +*/
137487 + //rtw_free_xmitframe(pxmitpriv, pxmitframe);
137488 +
137489 + if(padapter->bSurpriseRemoved || padapter->bDriverStopped ||padapter->bWritePortCancel)
137490 + {
137491 + RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete:bDriverStopped(%d) OR bSurpriseRemoved(%d)", padapter->bDriverStopped, padapter->bSurpriseRemoved));
137492 + DBG_8192C("%s(): TX Warning! bDriverStopped(%d) OR bSurpriseRemoved(%d) bWritePortCancel(%d) pxmitbuf->ext_tag(%x) \n",
137493 + __FUNCTION__,padapter->bDriverStopped, padapter->bSurpriseRemoved,padapter->bReadPortCancel,pxmitbuf->ext_tag);
137494 +
137495 + goto check_completion;
137496 + }
137497 +
137498 +
137499 + if (purb->status==0) {
137500 +
137501 + } else {
137502 + RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete : purb->status(%d) != 0 \n", purb->status));
137503 + DBG_871X("###=> urb_write_port_complete status(%d)\n",purb->status);
137504 + if((purb->status==-EPIPE)||(purb->status==-EPROTO))
137505 + {
137506 + //usb_clear_halt(pusbdev, purb->pipe);
137507 + //msleep(10);
137508 + sreset_set_wifi_error_status(padapter, USB_WRITE_PORT_FAIL);
137509 + } else if (purb->status == -EINPROGRESS) {
137510 + RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete: EINPROGESS\n"));
137511 + goto check_completion;
137512 +
137513 + } else if (purb->status == -ENOENT) {
137514 + DBG_871X("%s: -ENOENT\n", __func__);
137515 + goto check_completion;
137516 +
137517 + } else if (purb->status == -ECONNRESET) {
137518 + DBG_871X("%s: -ECONNRESET\n", __func__);
137519 + goto check_completion;
137520 +
137521 + } else if (purb->status == -ESHUTDOWN) {
137522 + RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete: ESHUTDOWN\n"));
137523 + padapter->bDriverStopped=_TRUE;
137524 + RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete:bDriverStopped=TRUE\n"));
137525 +
137526 + goto check_completion;
137527 + }
137528 + else
137529 + {
137530 + padapter->bSurpriseRemoved=_TRUE;
137531 + DBG_8192C("bSurpriseRemoved=TRUE\n");
137532 + //rtl8192cu_trigger_gpio_0(padapter);
137533 + RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete:bSurpriseRemoved=TRUE\n"));
137534 +
137535 + goto check_completion;
137536 + }
137537 + }
137538 +
137539 + #ifdef DBG_CONFIG_ERROR_DETECT
137540 + {
137541 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
137542 + pHalData->srestpriv.last_tx_complete_time = rtw_get_current_time();
137543 + }
137544 + #endif
137545 +
137546 +check_completion:
137547 + _enter_critical(&pxmitpriv->lock_sctx, &irqL);
137548 + rtw_sctx_done_err(&pxmitbuf->sctx,
137549 + purb->status ? RTW_SCTX_DONE_WRITE_PORT_ERR : RTW_SCTX_DONE_SUCCESS);
137550 + _exit_critical(&pxmitpriv->lock_sctx, &irqL);
137551 +
137552 + rtw_free_xmitbuf(pxmitpriv, pxmitbuf);
137553 +
137554 + //if(rtw_txframes_pending(padapter))
137555 + {
137556 + tasklet_hi_schedule(&pxmitpriv->xmit_tasklet);
137557 + }
137558 +
137559 +_func_exit_;
137560 +
137561 +}
137562 +
137563 +u32 usb_write_port(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem)
137564 +{
137565 + _irqL irqL;
137566 + unsigned int pipe;
137567 + int status;
137568 + u32 ret = _FAIL, bwritezero = _FALSE;
137569 + PURB purb = NULL;
137570 + _adapter *padapter = (_adapter *)pintfhdl->padapter;
137571 + struct dvobj_priv *pdvobj = adapter_to_dvobj(padapter);
137572 + struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
137573 + struct xmit_buf *pxmitbuf = (struct xmit_buf *)wmem;
137574 + struct xmit_frame *pxmitframe = (struct xmit_frame *)pxmitbuf->priv_data;
137575 + struct usb_device *pusbd = pdvobj->pusbdev;
137576 + struct pkt_attrib *pattrib = &pxmitframe->attrib;
137577 +
137578 +_func_enter_;
137579 +
137580 + RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("+usb_write_port\n"));
137581 +
137582 + if ((padapter->bDriverStopped) || (padapter->bSurpriseRemoved) ||(padapter->pwrctrlpriv.pnp_bstop_trx)) {
137583 + #ifdef DBG_TX
137584 + DBG_871X(" DBG_TX %s:%d bDriverStopped%d, bSurpriseRemoved:%d, pnp_bstop_trx:%d\n",__FUNCTION__, __LINE__
137585 + ,padapter->bDriverStopped, padapter->bSurpriseRemoved, padapter->pwrctrlpriv.pnp_bstop_trx );
137586 + #endif
137587 + RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port:( padapter->bDriverStopped ||padapter->bSurpriseRemoved ||adapter->pwrctrlpriv.pnp_bstop_trx)!!!\n"));
137588 + rtw_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_TX_DENY);
137589 + goto exit;
137590 + }
137591 +
137592 + _enter_critical(&pxmitpriv->lock, &irqL);
137593 +
137594 + switch(addr)
137595 + {
137596 + case VO_QUEUE_INX:
137597 + pxmitpriv->voq_cnt++;
137598 + pxmitbuf->flags = VO_QUEUE_INX;
137599 + break;
137600 + case VI_QUEUE_INX:
137601 + pxmitpriv->viq_cnt++;
137602 + pxmitbuf->flags = VI_QUEUE_INX;
137603 + break;
137604 + case BE_QUEUE_INX:
137605 + pxmitpriv->beq_cnt++;
137606 + pxmitbuf->flags = BE_QUEUE_INX;
137607 + break;
137608 + case BK_QUEUE_INX:
137609 + pxmitpriv->bkq_cnt++;
137610 + pxmitbuf->flags = BK_QUEUE_INX;
137611 + break;
137612 + case HIGH_QUEUE_INX:
137613 + pxmitbuf->flags = HIGH_QUEUE_INX;
137614 + break;
137615 + default:
137616 + pxmitbuf->flags = MGT_QUEUE_INX;
137617 + break;
137618 + }
137619 +
137620 + _exit_critical(&pxmitpriv->lock, &irqL);
137621 +
137622 + purb = pxmitbuf->pxmit_urb[0];
137623 +
137624 +#if 0
137625 + if(pdvobj->ishighspeed)
137626 + {
137627 + if(cnt> 0 && cnt%512 == 0)
137628 + {
137629 + //DBG_8192C("ishighspeed, cnt=%d\n", cnt);
137630 + bwritezero = _TRUE;
137631 + }
137632 + }
137633 + else
137634 + {
137635 + if(cnt > 0 && cnt%64 == 0)
137636 + {
137637 + //DBG_8192C("cnt=%d\n", cnt);
137638 + bwritezero = _TRUE;
137639 + }
137640 + }
137641 +#endif
137642 +
137643 + //translate DMA FIFO addr to pipehandle
137644 + pipe = ffaddr2pipehdl(pdvobj, addr);
137645 +
137646 +#ifdef CONFIG_REDUCE_USB_TX_INT
137647 + if ( (pxmitpriv->free_xmitbuf_cnt%NR_XMITBUFF == 0)
137648 + || (pxmitbuf->ext_tag == _TRUE) )
137649 + {
137650 + purb->transfer_flags &= (~URB_NO_INTERRUPT);
137651 + } else {
137652 + purb->transfer_flags |= URB_NO_INTERRUPT;
137653 + //DBG_8192C("URB_NO_INTERRUPT ");
137654 + }
137655 +#endif
137656 +
137657 +
137658 + usb_fill_bulk_urb(purb, pusbd, pipe,
137659 + pxmitframe->buf_addr, //= pxmitbuf->pbuf
137660 + cnt,
137661 + usb_write_port_complete,
137662 + pxmitbuf);//context is pxmitbuf
137663 +
137664 +#ifdef CONFIG_USE_USB_BUFFER_ALLOC_TX
137665 + purb->transfer_dma = pxmitbuf->dma_transfer_addr;
137666 + purb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
137667 + purb->transfer_flags |= URB_ZERO_PACKET;
137668 +#endif // CONFIG_USE_USB_BUFFER_ALLOC_TX
137669 +
137670 +#if 0
137671 + if (bwritezero)
137672 + {
137673 + purb->transfer_flags |= URB_ZERO_PACKET;
137674 + }
137675 +#endif
137676 +
137677 + status = usb_submit_urb(purb, GFP_ATOMIC);
137678 + if (!status) {
137679 + #ifdef DBG_CONFIG_ERROR_DETECT
137680 + {
137681 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
137682 + pHalData->srestpriv.last_tx_time = rtw_get_current_time();
137683 + }
137684 + #endif
137685 + } else {
137686 + rtw_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_WRITE_PORT_ERR);
137687 + DBG_871X("usb_write_port, status=%d\n", status);
137688 + RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port(): usb_submit_urb, status=%x\n", status));
137689 +
137690 + switch (status) {
137691 + case -ENODEV:
137692 + padapter->bDriverStopped=_TRUE;
137693 + break;
137694 + default:
137695 + break;
137696 + }
137697 + goto exit;
137698 + }
137699 +
137700 + ret= _SUCCESS;
137701 +
137702 +// Commented by Albert 2009/10/13
137703 +// We add the URB_ZERO_PACKET flag to urb so that the host will send the zero packet automatically.
137704 +/*
137705 + if(bwritezero == _TRUE)
137706 + {
137707 + usb_bulkout_zero(pintfhdl, addr);
137708 + }
137709 +*/
137710 +
137711 + RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("-usb_write_port\n"));
137712 +
137713 +exit:
137714 + if (ret != _SUCCESS)
137715 + rtw_free_xmitbuf(pxmitpriv, pxmitbuf);
137716 +_func_exit_;
137717 + return ret;
137718 +
137719 +}
137720 +
137721 +void usb_write_port_cancel(struct intf_hdl *pintfhdl)
137722 +{
137723 + int i, j;
137724 + _adapter *padapter = pintfhdl->padapter;
137725 + struct xmit_buf *pxmitbuf = (struct xmit_buf *)padapter->xmitpriv.pxmitbuf;
137726 +
137727 + DBG_871X("%s \n", __func__);
137728 +
137729 + padapter->bWritePortCancel = _TRUE;
137730 +
137731 + for (i=0; i<NR_XMITBUFF; i++) {
137732 + for (j=0; j<8; j++) {
137733 + if (pxmitbuf->pxmit_urb[j]) {
137734 + usb_kill_urb(pxmitbuf->pxmit_urb[j]);
137735 + }
137736 + }
137737 + pxmitbuf++;
137738 + }
137739 +
137740 + pxmitbuf = (struct xmit_buf*)padapter->xmitpriv.pxmit_extbuf;
137741 + for (i = 0; i < NR_XMIT_EXTBUFF; i++) {
137742 + for (j=0; j<8; j++) {
137743 + if(pxmitbuf->pxmit_urb[j]) {
137744 + usb_kill_urb(pxmitbuf->pxmit_urb[j]);
137745 + }
137746 + }
137747 + pxmitbuf++;
137748 + }
137749 +}
137750 +
137751 --- a/drivers/net/wireless/rtl8192cu/os_dep/linux/xmit_linux.c
137752 +++ b/drivers/net/wireless/rtl8192cu/os_dep/linux/xmit_linux.c
137753 @@ -16,7 +16,7 @@
137754 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
137755 *
137756 *
137757 -******************************************************************************/
137758 + ******************************************************************************/
137759 #define _XMIT_OSDEP_C_
137760
137761 #include <drv_conf.h>
137762 @@ -98,11 +98,11 @@ void rtw_set_tx_chksum_offload(_pkt *pkt
137763 const struct iphdr *ip = ip_hdr(skb);
137764 if (ip->protocol == IPPROTO_TCP) {
137765 // TCP checksum offload by HW
137766 - DBG_8192C("CHECKSUM_PARTIAL TCP\n");
137767 + DBG_871X("CHECKSUM_PARTIAL TCP\n");
137768 pattrib->hw_tcp_csum = 1;
137769 //skb_checksum_help(skb);
137770 } else if (ip->protocol == IPPROTO_UDP) {
137771 - //DBG_8192C("CHECKSUM_PARTIAL UDP\n");
137772 + //DBG_871X("CHECKSUM_PARTIAL UDP\n");
137773 #if 1
137774 skb_checksum_help(skb);
137775 #else
137776 @@ -111,12 +111,12 @@ void rtw_set_tx_chksum_offload(_pkt *pkt
137777 udp->check = 0;
137778 #endif
137779 } else {
137780 - DBG_8192C("%s-%d TCP CSUM offload Error!!\n", __FUNCTION__, __LINE__);
137781 + DBG_871X("%s-%d TCP CSUM offload Error!!\n", __FUNCTION__, __LINE__);
137782 WARN_ON(1); /* we need a WARN() */
137783 }
137784 }
137785 else { // IP fragmentation case
137786 - DBG_8192C("%s-%d nr_frags != 0, using skb_checksum_help(skb);!!\n", __FUNCTION__, __LINE__);
137787 + DBG_871X("%s-%d nr_frags != 0, using skb_checksum_help(skb);!!\n", __FUNCTION__, __LINE__);
137788 skb_checksum_help(skb);
137789 }
137790 }
137791 @@ -128,11 +128,11 @@ int rtw_os_xmit_resource_alloc(_adapter
137792 {
137793 #ifdef CONFIG_USB_HCI
137794 int i;
137795 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
137796 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
137797 struct usb_device *pusbd = pdvobjpriv->pusbdev;
137798
137799 #ifdef CONFIG_USE_USB_BUFFER_ALLOC_TX
137800 - pxmitbuf->pallocated_buf = rtw_usb_buffer_alloc(pusbd, (size_t)alloc_sz, GFP_ATOMIC, &pxmitbuf->dma_transfer_addr);
137801 + pxmitbuf->pallocated_buf = rtw_usb_buffer_alloc(pusbd, (size_t)alloc_sz, &pxmitbuf->dma_transfer_addr);
137802 pxmitbuf->pbuf = pxmitbuf->pallocated_buf;
137803 if(pxmitbuf->pallocated_buf == NULL)
137804 return _FAIL;
137805 @@ -154,13 +154,13 @@ int rtw_os_xmit_resource_alloc(_adapter
137806 pxmitbuf->pxmit_urb[i] = usb_alloc_urb(0, GFP_KERNEL);
137807 if(pxmitbuf->pxmit_urb[i] == NULL)
137808 {
137809 - DBG_8192C("pxmitbuf->pxmit_urb[i]==NULL");
137810 + DBG_871X("pxmitbuf->pxmit_urb[i]==NULL");
137811 return _FAIL;
137812 }
137813
137814 }
137815 #endif
137816 -#ifdef CONFIG_PCI_HCI
137817 +#if defined(CONFIG_PCI_HCI) || defined(CONFIG_SDIO_HCI)
137818 pxmitbuf->pallocated_buf = rtw_zmalloc(alloc_sz);
137819 if (pxmitbuf->pallocated_buf == NULL)
137820 {
137821 @@ -177,7 +177,7 @@ void rtw_os_xmit_resource_free(_adapter
137822 {
137823 #ifdef CONFIG_USB_HCI
137824 int i;
137825 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
137826 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
137827 struct usb_device *pusbd = pdvobjpriv->pusbdev;
137828
137829
137830 @@ -193,14 +193,14 @@ void rtw_os_xmit_resource_free(_adapter
137831 #ifdef CONFIG_USE_USB_BUFFER_ALLOC_TX
137832 rtw_usb_buffer_free(pusbd, (size_t)free_sz, pxmitbuf->pallocated_buf, pxmitbuf->dma_transfer_addr);
137833 pxmitbuf->pallocated_buf = NULL;
137834 - pxmitbuf->dma_transfer_addr = 0;
137835 + pxmitbuf->dma_transfer_addr = 0;
137836 #else // CONFIG_USE_USB_BUFFER_ALLOC_TX
137837 if(pxmitbuf->pallocated_buf)
137838 rtw_mfree(pxmitbuf->pallocated_buf, free_sz);
137839 #endif // CONFIG_USE_USB_BUFFER_ALLOC_TX
137840
137841 #endif
137842 -#ifdef CONFIG_PCI_HCI
137843 +#if defined(CONFIG_PCI_HCI) || defined(CONFIG_SDIO_HCI)
137844 if(pxmitbuf->pallocated_buf)
137845 rtw_mfree(pxmitbuf->pallocated_buf, free_sz);
137846 #endif
137847 @@ -208,39 +208,58 @@ void rtw_os_xmit_resource_free(_adapter
137848
137849 void rtw_os_pkt_complete(_adapter *padapter, _pkt *pkt)
137850 {
137851 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
137852 + u16 queue;
137853 + struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
137854 +
137855 + queue = skb_get_queue_mapping(pkt);
137856 + if(__netif_subqueue_stopped(padapter->pnetdev, queue) &&
137857 + (pxmitpriv->hwxmits[queue].accnt < NR_XMITFRAME/2))
137858 + {
137859 + netif_wake_subqueue(padapter->pnetdev, queue);
137860 + }
137861 +#else
137862 if (netif_queue_stopped(padapter->pnetdev))
137863 netif_wake_queue(padapter->pnetdev);
137864 +#endif
137865
137866 - dev_kfree_skb_any(pkt);
137867 + rtw_skb_free(pkt);
137868 }
137869
137870 void rtw_os_xmit_complete(_adapter *padapter, struct xmit_frame *pxframe)
137871 {
137872 if(pxframe->pkt)
137873 - {
137874 - //RT_TRACE(_module_xmit_osdep_c_,_drv_err_,("linux : rtw_os_xmit_complete, dev_kfree_skb()\n"));
137875 -
137876 - //dev_kfree_skb_any(pxframe->pkt);
137877 rtw_os_pkt_complete(padapter, pxframe->pkt);
137878 -
137879 - }
137880
137881 pxframe->pkt = NULL;
137882 }
137883
137884 void rtw_os_xmit_schedule(_adapter *padapter)
137885 {
137886 +#ifdef CONFIG_SDIO_HCI
137887 + if(!padapter)
137888 + return;
137889 +
137890 + if (rtw_txframes_pending(padapter))
137891 + _rtw_up_sema(&padapter->xmitpriv.xmit_sema);
137892 +#else
137893 _irqL irqL;
137894 - struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
137895 + struct xmit_priv *pxmitpriv;
137896 +
137897 + if(!padapter)
137898 + return;
137899 +
137900 + pxmitpriv = &padapter->xmitpriv;
137901
137902 _enter_critical_bh(&pxmitpriv->lock, &irqL);
137903 -
137904 +
137905 if(rtw_txframes_pending(padapter))
137906 {
137907 tasklet_hi_schedule(&pxmitpriv->xmit_tasklet);
137908 }
137909
137910 _exit_critical_bh(&pxmitpriv->lock, &irqL);
137911 +#endif
137912 }
137913
137914
137915 @@ -254,6 +273,12 @@ int rtw_mlcst2unicst(_adapter *padapter,
137916 _list *phead, *plist;
137917 struct sk_buff *newskb;
137918 struct sta_info *psta = NULL;
137919 + u8 chk_alive_num = 0;
137920 + char chk_alive_list[NUM_STA];
137921 + u8 bc_addr[6]={0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
137922 + u8 null_addr[6]={0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
137923 +
137924 + int i;
137925 s32 res;
137926
137927 _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
137928 @@ -261,45 +286,54 @@ int rtw_mlcst2unicst(_adapter *padapter,
137929 plist = get_next(phead);
137930
137931 //free sta asoc_queue
137932 - while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
137933 - {
137934 + while ((rtw_end_of_queue_search(phead, plist)) == _FALSE) {
137935 + int stainfo_offset;
137936 psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
137937 -
137938 plist = get_next(plist);
137939
137940 - /* avoid come from STA1 and send back STA1 */
137941 - if (!memcmp(psta->hwaddr, &skb->data[6], 6))
137942 - continue;
137943 + stainfo_offset = rtw_stainfo_offset(pstapriv, psta);
137944 + if (stainfo_offset_valid(stainfo_offset)) {
137945 + chk_alive_list[chk_alive_num++] = stainfo_offset;
137946 + }
137947 + }
137948 + _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
137949 +
137950 + for (i = 0; i < chk_alive_num; i++) {
137951 + psta = rtw_get_stainfo_by_offset(pstapriv, chk_alive_list[i]);
137952 +
137953 + /* avoid come from STA1 and send back STA1 */
137954 + if (_rtw_memcmp(psta->hwaddr, &skb->data[6], 6) == _TRUE
137955 + || _rtw_memcmp(psta->hwaddr, null_addr, 6) == _TRUE
137956 + || _rtw_memcmp(psta->hwaddr, bc_addr, 6) == _TRUE
137957 + )
137958 + continue;
137959 +
137960 + newskb = rtw_skb_copy(skb);
137961
137962 - newskb = skb_copy(skb, GFP_ATOMIC);
137963 -
137964 if (newskb) {
137965 - memcpy(newskb->data, psta->hwaddr, 6);
137966 + _rtw_memcpy(newskb->data, psta->hwaddr, 6);
137967 res = rtw_xmit(padapter, &newskb);
137968 if (res < 0) {
137969 DBG_871X("%s()-%d: rtw_xmit() return error!\n", __FUNCTION__, __LINE__);
137970 pxmitpriv->tx_drop++;
137971 - dev_kfree_skb_any(newskb);
137972 + rtw_skb_free(newskb);
137973 } else
137974 pxmitpriv->tx_pkts++;
137975 } else {
137976 - DBG_871X("%s-%d: skb_copy() failed!\n", __FUNCTION__, __LINE__);
137977 + DBG_871X("%s-%d: rtw_skb_copy() failed!\n", __FUNCTION__, __LINE__);
137978 pxmitpriv->tx_drop++;
137979 -
137980 - _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
137981 - //dev_kfree_skb_any(skb);
137982 + //rtw_skb_free(skb);
137983 return _FALSE; // Caller shall tx this multicast frame via normal way.
137984 }
137985 }
137986
137987 - _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
137988 - dev_kfree_skb_any(skb);
137989 + rtw_skb_free(skb);
137990 return _TRUE;
137991 }
137992 #endif // CONFIG_TX_MCAST2UNI
137993
137994
137995 -int rtw_xmit_entry(_pkt *pkt, _nic_hdl pnetdev)
137996 +int _rtw_xmit_entry(_pkt *pkt, _nic_hdl pnetdev)
137997 {
137998 _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
137999 struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
138000 @@ -308,7 +342,9 @@ int rtw_xmit_entry(_pkt *pkt, _nic_hdl p
138001 extern int rtw_mc2u_disable;
138002 #endif // CONFIG_TX_MCAST2UNI
138003 s32 res = 0;
138004 - int ret = 0;
138005 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
138006 + u16 queue;
138007 +#endif
138008
138009 _func_enter_;
138010
138011 @@ -322,11 +358,22 @@ _func_enter_;
138012 goto drop_packet;
138013 }
138014
138015 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
138016 + queue = skb_get_queue_mapping(pkt);
138017 + /* No free space for Tx, tx_worker is too slow */
138018 + if (pxmitpriv->hwxmits[queue].accnt > NR_XMITFRAME/2) {
138019 + //DBG_871X("%s(): stop netif_subqueue[%d]\n", __FUNCTION__, queue);
138020 + netif_stop_subqueue(padapter->pnetdev, queue);
138021 + return NETDEV_TX_BUSY;
138022 + }
138023 +#endif
138024 +
138025 #ifdef CONFIG_TX_MCAST2UNI
138026 if ( !rtw_mc2u_disable
138027 && check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE
138028 && ( IP_MCAST_MAC(pkt->data)
138029 || ICMPV6_MCAST_MAC(pkt->data) )
138030 + && (padapter->registrypriv.wifi_spec == 0)
138031 )
138032 {
138033 if ( pxmitpriv->free_xmitframe_cnt > (NR_XMITFRAME/4) ) {
138034 @@ -348,14 +395,14 @@ _func_enter_;
138035 #endif
138036 goto drop_packet;
138037 }
138038 - pxmitpriv->tx_pkts++;
138039
138040 + pxmitpriv->tx_pkts++;
138041 RT_TRACE(_module_xmit_osdep_c_, _drv_info_, ("rtw_xmit_entry: tx_pkts=%d\n", (u32)pxmitpriv->tx_pkts));
138042 goto exit;
138043
138044 drop_packet:
138045 pxmitpriv->tx_drop++;
138046 - dev_kfree_skb_any(pkt);
138047 + rtw_skb_free(pkt);
138048 RT_TRACE(_module_xmit_osdep_c_, _drv_notice_, ("rtw_xmit_entry: drop, tx_drop=%d\n", (u32)pxmitpriv->tx_drop));
138049
138050 exit:
138051 @@ -365,3 +412,10 @@ _func_exit_;
138052 return 0;
138053 }
138054
138055 +int rtw_xmit_entry(_pkt *pkt, _nic_hdl pnetdev)
138056 +{
138057 + if (pkt)
138058 + rtw_mstat_update(MSTAT_TYPE_SKB, MSTAT_ALLOC_SUCCESS, pkt->truesize);
138059 + return _rtw_xmit_entry(pkt, pnetdev);
138060 +}
138061 +
138062 --- a/drivers/net/wireless/rtl8192cu/os_dep/osdep_service.c
138063 +++ b/drivers/net/wireless/rtl8192cu/os_dep/osdep_service.c
138064 @@ -25,8 +25,13 @@
138065 #include <osdep_service.h>
138066 #include <drv_types.h>
138067 #include <recv_osdep.h>
138068 +#ifdef PLATFORM_LINUX
138069 #include <linux/vmalloc.h>
138070 -
138071 +#endif
138072 +#ifdef PLATFORM_FREEBSD
138073 +#include <sys/malloc.h>
138074 +#include <sys/time.h>
138075 +#endif /* PLATFORM_FREEBSD */
138076 #ifdef RTK_DMP_PLATFORM
138077 #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,12))
138078 #include <linux/pageremap.h>
138079 @@ -66,6 +71,27 @@ inline int RTW_STATUS_CODE(int error_cod
138080 }
138081 #endif
138082
138083 +u32 rtw_atoi(u8* s)
138084 +{
138085 +
138086 + int num=0,flag=0;
138087 + int i;
138088 + for(i=0;i<=strlen(s);i++)
138089 + {
138090 + if(s[i] >= '0' && s[i] <= '9')
138091 + num = num * 10 + s[i] -'0';
138092 + else if(s[0] == '-' && i==0)
138093 + flag =1;
138094 + else
138095 + break;
138096 + }
138097 +
138098 + if(flag == 1)
138099 + num = num * -1;
138100 +
138101 + return(num);
138102 +
138103 +}
138104
138105 inline u8* _rtw_vmalloc(u32 sz)
138106 {
138107 @@ -73,6 +99,9 @@ inline u8* _rtw_vmalloc(u32 sz)
138108 #ifdef PLATFORM_LINUX
138109 pbuf = vmalloc(sz);
138110 #endif
138111 +#ifdef PLATFORM_FREEBSD
138112 + pbuf = malloc(sz,M_DEVBUF,M_NOWAIT);
138113 +#endif
138114
138115 #ifdef PLATFORM_WINDOWS
138116 NdisAllocateMemoryWithTag(&pbuf,sz, RT_TAG);
138117 @@ -98,7 +127,9 @@ inline u8* _rtw_zvmalloc(u32 sz)
138118 if (pbuf != NULL)
138119 memset(pbuf, 0, sz);
138120 #endif
138121 -
138122 +#ifdef PLATFORM_FREEBSD
138123 + pbuf = malloc(sz,M_DEVBUF,M_ZERO|M_NOWAIT);
138124 +#endif
138125 #ifdef PLATFORM_WINDOWS
138126 NdisAllocateMemoryWithTag(&pbuf,sz, RT_TAG);
138127 if (pbuf != NULL)
138128 @@ -113,7 +144,9 @@ inline void _rtw_vmfree(u8 *pbuf, u32 sz
138129 #ifdef PLATFORM_LINUX
138130 vfree(pbuf);
138131 #endif
138132 -
138133 +#ifdef PLATFORM_FREEBSD
138134 + free(pbuf,M_DEVBUF);
138135 +#endif
138136 #ifdef PLATFORM_WINDOWS
138137 NdisFreeMemory(pbuf,sz, 0);
138138 #endif
138139 @@ -136,11 +169,13 @@ u8* _rtw_malloc(u32 sz)
138140 if(sz > 0x4000)
138141 pbuf = (u8 *)dvr_malloc(sz);
138142 else
138143 -#endif
138144 - pbuf = kmalloc(sz, in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);
138145 +#endif
138146 + pbuf = kmalloc(sz,in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);
138147
138148 #endif
138149 -
138150 +#ifdef PLATFORM_FREEBSD
138151 + pbuf = malloc(sz,M_DEVBUF,M_NOWAIT);
138152 +#endif
138153 #ifdef PLATFORM_WINDOWS
138154
138155 NdisAllocateMemoryWithTag(&pbuf,sz, RT_TAG);
138156 @@ -163,6 +198,9 @@ u8* _rtw_malloc(u32 sz)
138157
138158 u8* _rtw_zmalloc(u32 sz)
138159 {
138160 +#ifdef PLATFORM_FREEBSD
138161 + return malloc(sz,M_DEVBUF,M_ZERO|M_NOWAIT);
138162 +#else // PLATFORM_FREEBSD
138163 u8 *pbuf = _rtw_malloc(sz);
138164
138165 if (pbuf != NULL) {
138166 @@ -178,7 +216,7 @@ u8* _rtw_zmalloc(u32 sz)
138167 }
138168
138169 return pbuf;
138170 -
138171 +#endif // PLATFORM_FREEBSD
138172 }
138173
138174 void _rtw_mfree(u8 *pbuf, u32 sz)
138175 @@ -193,7 +231,9 @@ void _rtw_mfree(u8 *pbuf, u32 sz)
138176 kfree(pbuf);
138177
138178 #endif
138179 -
138180 +#ifdef PLATFORM_FREEBSD
138181 + free(pbuf,M_DEVBUF);
138182 +#endif
138183 #ifdef PLATFORM_WINDOWS
138184
138185 NdisFreeMemory(pbuf,sz, 0);
138186 @@ -209,203 +249,556 @@ void _rtw_mfree(u8 *pbuf, u32 sz)
138187
138188 }
138189
138190 +#ifdef PLATFORM_FREEBSD
138191 +//review again
138192 +struct sk_buff * dev_alloc_skb(unsigned int size)
138193 +{
138194 + struct sk_buff *skb=NULL;
138195 + u8 *data=NULL;
138196 +
138197 + //skb = (struct sk_buff *)_rtw_zmalloc(sizeof(struct sk_buff)); // for skb->len, etc.
138198 + skb = (struct sk_buff *)_rtw_malloc(sizeof(struct sk_buff));
138199 + if(!skb)
138200 + goto out;
138201 + data = _rtw_malloc(size);
138202 + if(!data)
138203 + goto nodata;
138204 +
138205 + skb->head = (unsigned char*)data;
138206 + skb->data = (unsigned char*)data;
138207 + skb->tail = (unsigned char*)data;
138208 + skb->end = (unsigned char*)data + size;
138209 + skb->len = 0;
138210 + //printf("%s()-%d: skb=%p, skb->head = %p\n", __FUNCTION__, __LINE__, skb, skb->head);
138211 +
138212 +out:
138213 + return skb;
138214 +nodata:
138215 + _rtw_mfree((u8 *)skb, sizeof(struct sk_buff));
138216 + skb = NULL;
138217 +goto out;
138218 +
138219 +}
138220 +
138221 +void dev_kfree_skb_any(struct sk_buff *skb)
138222 +{
138223 + //printf("%s()-%d: skb->head = %p\n", __FUNCTION__, __LINE__, skb->head);
138224 + if(skb->head)
138225 + _rtw_mfree(skb->head, 0);
138226 + //printf("%s()-%d: skb = %p\n", __FUNCTION__, __LINE__, skb);
138227 + if(skb)
138228 + _rtw_mfree((u8 *)skb, 0);
138229 +}
138230 +struct sk_buff *skb_clone(const struct sk_buff *skb)
138231 +{
138232 + return NULL;
138233 +}
138234 +
138235 +#endif /* PLATFORM_FREEBSD */
138236 +
138237 +inline struct sk_buff *_rtw_skb_alloc(u32 sz)
138238 +{
138239 +#ifdef PLATFORM_LINUX
138240 + return __dev_alloc_skb(sz, in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);
138241 +#endif /* PLATFORM_LINUX */
138242 +
138243 +#ifdef PLATFORM_FREEBSD
138244 + return dev_alloc_skb(sz);
138245 +#endif /* PLATFORM_FREEBSD */
138246 +}
138247 +
138248 +inline void _rtw_skb_free(struct sk_buff *skb)
138249 +{
138250 + dev_kfree_skb_any(skb);
138251 +}
138252 +
138253 +inline struct sk_buff *_rtw_skb_copy(const struct sk_buff *skb)
138254 +{
138255 +#ifdef PLATFORM_LINUX
138256 + return skb_copy(skb, in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);
138257 +#endif /* PLATFORM_LINUX */
138258 +
138259 +#ifdef PLATFORM_FREEBSD
138260 + return NULL;
138261 +#endif /* PLATFORM_FREEBSD */
138262 +}
138263 +
138264 +inline struct sk_buff *_rtw_skb_clone(struct sk_buff *skb)
138265 +{
138266 +#ifdef PLATFORM_LINUX
138267 + return skb_clone(skb, in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);
138268 +#endif /* PLATFORM_LINUX */
138269 +
138270 +#ifdef PLATFORM_FREEBSD
138271 + return skb_clone(skb);
138272 +#endif /* PLATFORM_FREEBSD */
138273 +}
138274 +
138275 +inline int _rtw_netif_rx(_nic_hdl ndev, struct sk_buff *skb)
138276 +{
138277 +#ifdef PLATFORM_LINUX
138278 + skb->dev = ndev;
138279 + return netif_rx(skb);
138280 +#endif /* PLATFORM_LINUX */
138281 +
138282 +#ifdef PLATFORM_FREEBSD
138283 + return (*ndev->if_input)(ndev, skb);
138284 +#endif /* PLATFORM_FREEBSD */
138285 +}
138286 +
138287 +void _rtw_skb_queue_purge(struct sk_buff_head *list)
138288 +{
138289 + struct sk_buff *skb;
138290 +
138291 + while ((skb = skb_dequeue(list)) != NULL)
138292 + _rtw_skb_free(skb);
138293 +}
138294 +
138295 +#ifdef CONFIG_USB_HCI
138296 +inline void *_rtw_usb_buffer_alloc(struct usb_device *dev, size_t size, dma_addr_t *dma)
138297 +{
138298 +#ifdef PLATFORM_LINUX
138299 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
138300 + return usb_alloc_coherent(dev, size, (in_interrupt() ? GFP_ATOMIC : GFP_KERNEL), dma);
138301 +#else
138302 + return usb_buffer_alloc(dev, size, (in_interrupt() ? GFP_ATOMIC : GFP_KERNEL), dma);
138303 +#endif
138304 +#endif /* PLATFORM_LINUX */
138305 +
138306 +#ifdef PLATFORM_FREEBSD
138307 + return (malloc(size, M_USBDEV, M_NOWAIT | M_ZERO));
138308 +#endif /* PLATFORM_FREEBSD */
138309 +}
138310 +inline void _rtw_usb_buffer_free(struct usb_device *dev, size_t size, void *addr, dma_addr_t dma)
138311 +{
138312 +#ifdef PLATFORM_LINUX
138313 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
138314 + usb_free_coherent(dev, size, addr, dma);
138315 +#else
138316 + usb_buffer_free(dev, size, addr, dma);
138317 +#endif
138318 +#endif /* PLATFORM_LINUX */
138319 +
138320 +#ifdef PLATFORM_FREEBSD
138321 + free(addr, M_USBDEV);
138322 +#endif /* PLATFORM_FREEBSD */
138323 +}
138324 +#endif /* CONFIG_USB_HCI */
138325
138326 #ifdef DBG_MEM_ALLOC
138327
138328 -struct rtw_dbg_mem_stat {
138329 - ATOMIC_T vir_alloc; // the memory bytes we allocate now
138330 - ATOMIC_T vir_peak; // the peak memory bytes we allocate
138331 - ATOMIC_T vir_alloc_err; // the error times we fail to allocate memory
138332 -
138333 - ATOMIC_T phy_alloc;
138334 - ATOMIC_T phy_peak;
138335 - ATOMIC_T phy_alloc_err;
138336 -} rtw_dbg_mem_stat;
138337 -
138338 -enum {
138339 - MEM_STAT_VIR_ALLOC_SUCCESS,
138340 - MEM_STAT_VIR_ALLOC_FAIL,
138341 - MEM_STAT_VIR_FREE,
138342 - MEM_STAT_PHY_ALLOC_SUCCESS,
138343 - MEM_STAT_PHY_ALLOC_FAIL,
138344 - MEM_STAT_PHY_FREE
138345 +struct rtw_mem_stat {
138346 + ATOMIC_T alloc; // the memory bytes we allocate currently
138347 + ATOMIC_T peak; // the peak memory bytes we allocate
138348 + ATOMIC_T alloc_cnt; // the alloc count for alloc currently
138349 + ATOMIC_T alloc_err_cnt; // the error times we fail to allocate memory
138350 +};
138351 +
138352 +struct rtw_mem_stat rtw_mem_type_stat[mstat_tf_idx(MSTAT_TYPE_MAX)];
138353 +struct rtw_mem_stat rtw_mem_func_stat[mstat_ff_idx(MSTAT_FUNC_MAX)];
138354 +
138355 +char *MSTAT_TYPE_str[] = {
138356 + "VIR",
138357 + "PHY",
138358 + "SKB",
138359 + "USB",
138360 };
138361
138362 -void rtw_dump_mem_stat (void)
138363 +char *MSTAT_FUNC_str[] = {
138364 + "UNSP",
138365 + "IO",
138366 + "TXIO",
138367 + "RXIO",
138368 + "TX",
138369 + "RX",
138370 +};
138371 +
138372 +int _rtw_mstat_dump(char *buf, int len)
138373 {
138374 - int vir_alloc, vir_peak, vir_alloc_err, phy_alloc, phy_peak, phy_alloc_err;
138375 + int cnt = 0;
138376 + int i;
138377 + int value_t[4][mstat_tf_idx(MSTAT_TYPE_MAX)];
138378 + int value_f[4][mstat_ff_idx(MSTAT_FUNC_MAX)];
138379
138380 - vir_alloc=ATOMIC_READ(&rtw_dbg_mem_stat.vir_alloc);
138381 - vir_peak=ATOMIC_READ(&rtw_dbg_mem_stat.vir_peak);
138382 - vir_alloc_err=ATOMIC_READ(&rtw_dbg_mem_stat.vir_alloc_err);
138383 -
138384 - phy_alloc=ATOMIC_READ(&rtw_dbg_mem_stat.phy_alloc);
138385 - phy_peak=ATOMIC_READ(&rtw_dbg_mem_stat.phy_peak);
138386 - phy_alloc_err=ATOMIC_READ(&rtw_dbg_mem_stat.phy_alloc_err);
138387 -
138388 - DBG_871X("vir_alloc:%d, vir_peak:%d,vir_alloc_err:%d, phy_alloc:%d, phy_peak:%d, phy_alloc_err:%d\n"
138389 - , vir_alloc, vir_peak, vir_alloc_err
138390 - , phy_alloc, phy_peak, phy_alloc_err
138391 - );
138392 + int vir_alloc, vir_peak, vir_alloc_err, phy_alloc, phy_peak, phy_alloc_err;
138393 + int tx_alloc, tx_peak, tx_alloc_err, rx_alloc, rx_peak, rx_alloc_err;
138394 +
138395 + for(i=0;i<mstat_tf_idx(MSTAT_TYPE_MAX);i++) {
138396 + value_t[0][i] = ATOMIC_READ(&(rtw_mem_type_stat[i].alloc));
138397 + value_t[1][i] = ATOMIC_READ(&(rtw_mem_type_stat[i].peak));
138398 + value_t[2][i] = ATOMIC_READ(&(rtw_mem_type_stat[i].alloc_cnt));
138399 + value_t[3][i] = ATOMIC_READ(&(rtw_mem_type_stat[i].alloc_err_cnt));
138400 + }
138401 +
138402 + #if 0
138403 + for(i=0;i<mstat_ff_idx(MSTAT_FUNC_MAX);i++) {
138404 + value_f[0][i] = ATOMIC_READ(&(rtw_mem_func_stat[i].alloc));
138405 + value_f[1][i] = ATOMIC_READ(&(rtw_mem_func_stat[i].peak));
138406 + value_f[2][i] = ATOMIC_READ(&(rtw_mem_func_stat[i].alloc_cnt));
138407 + value_f[3][i] = ATOMIC_READ(&(rtw_mem_func_stat[i].alloc_err_cnt));
138408 + }
138409 + #endif
138410 +
138411 + cnt += snprintf(buf+cnt, len-cnt, "===================== MSTAT =====================\n");
138412 + cnt += snprintf(buf+cnt, len-cnt, "%4s %10s %10s %10s %10s\n", "TAG", "alloc", "peak", "aloc_cnt", "err_cnt");
138413 + cnt += snprintf(buf+cnt, len-cnt, "-------------------------------------------------\n");
138414 + for(i=0;i<mstat_tf_idx(MSTAT_TYPE_MAX);i++) {
138415 + cnt += snprintf(buf+cnt, len-cnt, "%4s %10d %10d %10d %10d\n", MSTAT_TYPE_str[i], value_t[0][i], value_t[1][i], value_t[2][i], value_t[3][i]);
138416 + }
138417 + #if 0
138418 + cnt += snprintf(buf+cnt, len-cnt, "-------------------------------------------------\n");
138419 + for(i=0;i<mstat_ff_idx(MSTAT_FUNC_MAX);i++) {
138420 + cnt += snprintf(buf+cnt, len-cnt, "%4s %10d %10d %10d %10d\n", MSTAT_FUNC_str[i], value_f[0][i], value_f[1][i], value_f[2][i], value_f[3][i]);
138421 + }
138422 + #endif
138423 +
138424 + return cnt;
138425 }
138426
138427 -void rtw_update_mem_stat(u8 flag, u32 sz)
138428 +void rtw_mstat_dump(void)
138429 +{
138430 + char buf[768] = {0};
138431 +
138432 + _rtw_mstat_dump(buf, 768);
138433 + DBG_871X("\n%s", buf);
138434 +}
138435 +
138436 +void rtw_mstat_update(const enum mstat_f flags, const MSTAT_STATUS status, u32 sz)
138437 {
138438 static u32 update_time = 0;
138439 int peak, alloc;
138440 + int i;
138441
138442 + /* initialization */
138443 if(!update_time) {
138444 - ATOMIC_SET(&rtw_dbg_mem_stat.vir_alloc,0);
138445 - ATOMIC_SET(&rtw_dbg_mem_stat.vir_peak,0);
138446 - ATOMIC_SET(&rtw_dbg_mem_stat.vir_alloc_err,0);
138447 - ATOMIC_SET(&rtw_dbg_mem_stat.phy_alloc,0);
138448 - ATOMIC_SET(&rtw_dbg_mem_stat.phy_peak,0);
138449 - ATOMIC_SET(&rtw_dbg_mem_stat.phy_alloc_err,0);
138450 + for(i=0;i<mstat_tf_idx(MSTAT_TYPE_MAX);i++) {
138451 + ATOMIC_SET(&(rtw_mem_type_stat[i].alloc), 0);
138452 + ATOMIC_SET(&(rtw_mem_type_stat[i].peak), 0);
138453 + ATOMIC_SET(&(rtw_mem_type_stat[i].alloc_cnt), 0);
138454 + ATOMIC_SET(&(rtw_mem_type_stat[i].alloc_err_cnt), 0);
138455 + }
138456 + for(i=0;i<mstat_ff_idx(MSTAT_FUNC_MAX);i++) {
138457 + ATOMIC_SET(&(rtw_mem_func_stat[i].alloc), 0);
138458 + ATOMIC_SET(&(rtw_mem_func_stat[i].peak), 0);
138459 + ATOMIC_SET(&(rtw_mem_func_stat[i].alloc_cnt), 0);
138460 + ATOMIC_SET(&(rtw_mem_func_stat[i].alloc_err_cnt), 0);
138461 + }
138462 }
138463 -
138464 - switch(flag) {
138465 - case MEM_STAT_VIR_ALLOC_SUCCESS:
138466 - alloc = ATOMIC_ADD_RETURN(&rtw_dbg_mem_stat.vir_alloc, sz);
138467 - peak=ATOMIC_READ(&rtw_dbg_mem_stat.vir_peak);
138468 +
138469 + switch(status) {
138470 + case MSTAT_ALLOC_SUCCESS:
138471 + ATOMIC_INC(&(rtw_mem_type_stat[mstat_tf_idx(flags)].alloc_cnt));
138472 + alloc = ATOMIC_ADD_RETURN(&(rtw_mem_type_stat[mstat_tf_idx(flags)].alloc), sz);
138473 + peak=ATOMIC_READ(&(rtw_mem_type_stat[mstat_tf_idx(flags)].peak));
138474 if (peak<alloc)
138475 - ATOMIC_SET(&rtw_dbg_mem_stat.vir_peak, alloc);
138476 - break;
138477 -
138478 - case MEM_STAT_VIR_ALLOC_FAIL:
138479 - ATOMIC_INC(&rtw_dbg_mem_stat.vir_alloc_err);
138480 - break;
138481 -
138482 - case MEM_STAT_VIR_FREE:
138483 - alloc = ATOMIC_SUB_RETURN(&rtw_dbg_mem_stat.vir_alloc, sz);
138484 - break;
138485 -
138486 - case MEM_STAT_PHY_ALLOC_SUCCESS:
138487 - alloc = ATOMIC_ADD_RETURN(&rtw_dbg_mem_stat.phy_alloc, sz);
138488 - peak=ATOMIC_READ(&rtw_dbg_mem_stat.phy_peak);
138489 + ATOMIC_SET(&(rtw_mem_type_stat[mstat_tf_idx(flags)].peak), alloc);
138490 +
138491 + ATOMIC_INC(&(rtw_mem_func_stat[mstat_ff_idx(flags)].alloc_cnt));
138492 + alloc = ATOMIC_ADD_RETURN(&(rtw_mem_func_stat[mstat_ff_idx(flags)].alloc), sz);
138493 + peak=ATOMIC_READ(&(rtw_mem_func_stat[mstat_ff_idx(flags)].peak));
138494 if (peak<alloc)
138495 - ATOMIC_SET(&rtw_dbg_mem_stat.phy_peak, alloc);
138496 + ATOMIC_SET(&(rtw_mem_func_stat[mstat_ff_idx(flags)].peak), alloc);
138497 break;
138498
138499 - case MEM_STAT_PHY_ALLOC_FAIL:
138500 - ATOMIC_INC(&rtw_dbg_mem_stat.phy_alloc_err);
138501 + case MSTAT_ALLOC_FAIL:
138502 + ATOMIC_INC(&(rtw_mem_type_stat[mstat_tf_idx(flags)].alloc_err_cnt));
138503 +
138504 + ATOMIC_INC(&(rtw_mem_func_stat[mstat_ff_idx(flags)].alloc_err_cnt));
138505 + break;
138506 +
138507 + case MSTAT_FREE:
138508 + ATOMIC_DEC(&(rtw_mem_type_stat[mstat_tf_idx(flags)].alloc_cnt));
138509 + ATOMIC_SUB(&(rtw_mem_type_stat[mstat_tf_idx(flags)].alloc), sz);
138510 +
138511 + ATOMIC_DEC(&(rtw_mem_func_stat[mstat_ff_idx(flags)].alloc_cnt));
138512 + ATOMIC_SUB(&(rtw_mem_func_stat[mstat_ff_idx(flags)].alloc), sz);
138513 break;
138514 -
138515 - case MEM_STAT_PHY_FREE:
138516 - alloc = ATOMIC_SUB_RETURN(&rtw_dbg_mem_stat.phy_alloc, sz);
138517 -
138518 };
138519
138520 - if (rtw_get_passing_time_ms(update_time) > 5000) {
138521 - rtw_dump_mem_stat();
138522 + //if (rtw_get_passing_time_ms(update_time) > 5000) {
138523 + // rtw_mstat_dump();
138524 update_time=rtw_get_current_time();
138525 - }
138526 -
138527 -
138528 + //}
138529 }
138530
138531
138532 -inline u8* dbg_rtw_vmalloc(u32 sz, const char *func, int line)
138533 +
138534 +inline u8* dbg_rtw_vmalloc(u32 sz, const enum mstat_f flags, const char *func, const int line)
138535 {
138536 u8 *p;
138537 - DBG_871X("DBG_MEM_ALLOC %s:%d %s(%d)\n", func, line, __FUNCTION__, (sz));
138538 + //DBG_871X("DBG_MEM_ALLOC %s:%d %s(%d)\n", func, line, __FUNCTION__, (sz));
138539
138540 p=_rtw_vmalloc((sz));
138541
138542 - rtw_update_mem_stat(
138543 - p ? MEM_STAT_VIR_ALLOC_SUCCESS : MEM_STAT_VIR_ALLOC_FAIL
138544 + rtw_mstat_update(
138545 + flags
138546 + , p ? MSTAT_ALLOC_SUCCESS : MSTAT_ALLOC_FAIL
138547 , sz
138548 );
138549
138550 return p;
138551 }
138552
138553 -inline u8* dbg_rtw_zvmalloc(u32 sz, const char *func, int line)
138554 +inline u8* dbg_rtw_zvmalloc(u32 sz, const enum mstat_f flags, const char *func, const int line)
138555 {
138556 u8 *p;
138557 - DBG_871X("DBG_MEM_ALLOC %s:%d %s(%d)\n", func, line, __FUNCTION__, (sz));
138558 + //DBG_871X("DBG_MEM_ALLOC %s:%d %s(%d)\n", func, line, __FUNCTION__, (sz));
138559
138560 p=_rtw_zvmalloc((sz));
138561
138562 - rtw_update_mem_stat(
138563 - p ? MEM_STAT_VIR_ALLOC_SUCCESS : MEM_STAT_VIR_ALLOC_FAIL
138564 + rtw_mstat_update(
138565 + flags
138566 + , p ? MSTAT_ALLOC_SUCCESS : MSTAT_ALLOC_FAIL
138567 , sz
138568 );
138569
138570 return p;
138571 }
138572
138573 -inline void dbg_rtw_vmfree(u8 *pbuf, u32 sz, const char *func, int line)
138574 +inline void dbg_rtw_vmfree(u8 *pbuf, u32 sz, const enum mstat_f flags, const char *func, const int line)
138575 {
138576 - DBG_871X("DBG_MEM_ALLOC %s:%d %s(%p,%d)\n", func, line, __FUNCTION__, (pbuf), (sz));
138577 + //DBG_871X("DBG_MEM_ALLOC %s:%d %s(%p,%d)\n", func, line, __FUNCTION__, (pbuf), (sz));
138578
138579 _rtw_vmfree((pbuf), (sz));
138580
138581 - rtw_update_mem_stat(
138582 - MEM_STAT_VIR_FREE
138583 + rtw_mstat_update(
138584 + flags
138585 + , MSTAT_FREE
138586 , sz
138587 );
138588 -
138589 }
138590
138591 -inline u8* dbg_rtw_malloc(u32 sz, const char *func, int line)
138592 +inline u8* dbg_rtw_malloc(u32 sz, const enum mstat_f flags, const char *func, const int line)
138593 {
138594 u8 *p;
138595 -
138596 - if((sz)>4096)
138597 - DBG_871X("DBG_MEM_ALLOC !!!!!!!!!!!!!! %s:%d %s(%d)\n", func, line, __FUNCTION__, (sz));
138598 +
138599 + //if(sz>=153 && sz<=306)
138600 + // DBG_871X("DBG_MEM_ALLOC %s:%d %s(%d)\n", func, line, __FUNCTION__, (sz));
138601 +
138602 + //if((sz)>4096)
138603 + // DBG_871X("DBG_MEM_ALLOC %s:%d %s(%d)\n", func, line, __FUNCTION__, (sz));
138604
138605 p=_rtw_malloc((sz));
138606
138607 - rtw_update_mem_stat(
138608 - p ? MEM_STAT_PHY_ALLOC_SUCCESS : MEM_STAT_PHY_ALLOC_FAIL
138609 + rtw_mstat_update(
138610 + flags
138611 + , p ? MSTAT_ALLOC_SUCCESS : MSTAT_ALLOC_FAIL
138612 , sz
138613 );
138614
138615 return p;
138616 }
138617
138618 -inline u8* dbg_rtw_zmalloc(u32 sz, const char *func, int line)
138619 +inline u8* dbg_rtw_zmalloc(u32 sz, const enum mstat_f flags, const char *func, const int line)
138620 {
138621 u8 *p;
138622
138623 - if((sz)>4096)
138624 - DBG_871X("DBG_MEM_ALLOC !!!!!!!!!!!!!! %s:%d %s(%d)\n", func, line, __FUNCTION__, (sz));
138625 + //if(sz>=153 && sz<=306)
138626 + // DBG_871X("DBG_MEM_ALLOC %s:%d %s(%d)\n", func, line, __FUNCTION__, (sz));
138627 +
138628 + //if((sz)>4096)
138629 + // DBG_871X("DBG_MEM_ALLOC %s:%d %s(%d)\n", func, line, __FUNCTION__, (sz));
138630
138631 p = _rtw_zmalloc((sz));
138632
138633 - rtw_update_mem_stat(
138634 - p ? MEM_STAT_PHY_ALLOC_SUCCESS : MEM_STAT_PHY_ALLOC_FAIL
138635 + rtw_mstat_update(
138636 + flags
138637 + , p ? MSTAT_ALLOC_SUCCESS : MSTAT_ALLOC_FAIL
138638 , sz
138639 );
138640
138641 return p;
138642 -
138643 }
138644
138645 -inline void dbg_rtw_mfree(u8 *pbuf, u32 sz, const char *func, int line)
138646 +inline void dbg_rtw_mfree(u8 *pbuf, u32 sz, const enum mstat_f flags, const char *func, const int line)
138647 {
138648 - if((sz)>4096)
138649 - DBG_871X("DBG_MEM_ALLOC !!!!!!!!!!!!!! %s:%d %s(%p,%d)\n", func, line, __FUNCTION__, (pbuf), (sz));
138650 + //if(sz>=153 && sz<=306)
138651 + // DBG_871X("DBG_MEM_ALLOC %s:%d %s(%d)\n", func, line, __FUNCTION__, (sz));
138652 +
138653 + //if((sz)>4096)
138654 + // DBG_871X("DBG_MEM_ALLOC %s:%d %s(%p,%d)\n", func, line, __FUNCTION__, (pbuf), (sz));
138655
138656 _rtw_mfree((pbuf), (sz));
138657
138658 - rtw_update_mem_stat(
138659 - MEM_STAT_PHY_FREE
138660 + rtw_mstat_update(
138661 + flags
138662 + , MSTAT_FREE
138663 , sz
138664 );
138665 }
138666 -#endif
138667
138668 +inline struct sk_buff * dbg_rtw_skb_alloc(unsigned int size, const enum mstat_f flags, const char *func, int line)
138669 +{
138670 + struct sk_buff *skb;
138671 + unsigned int truesize = 0;
138672 +
138673 + skb = _rtw_skb_alloc(size);
138674 +
138675 + if(skb)
138676 + truesize = skb->truesize;
138677 +
138678 + if(!skb || truesize < size /*|| size > 4096*/)
138679 + DBG_871X("DBG_MEM_ALLOC %s:%d %s(%d), skb:%p, truesize=%u\n", func, line, __FUNCTION__, size, skb, truesize);
138680 +
138681 + rtw_mstat_update(
138682 + flags
138683 + , skb ? MSTAT_ALLOC_SUCCESS : MSTAT_ALLOC_FAIL
138684 + , truesize
138685 + );
138686 +
138687 + return skb;
138688 +}
138689 +
138690 +inline void dbg_rtw_skb_free(struct sk_buff *skb, const enum mstat_f flags, const char *func, int line)
138691 +{
138692 + unsigned int truesize = skb->truesize;
138693 +
138694 + //if(truesize > 4096)
138695 + // DBG_871X("DBG_MEM_ALLOC %s:%d %s, truesize=%u\n", func, line, __FUNCTION__, truesize);
138696 +
138697 + _rtw_skb_free(skb);
138698 +
138699 + rtw_mstat_update(
138700 + flags
138701 + , MSTAT_FREE
138702 + , truesize
138703 + );
138704 +}
138705 +
138706 +inline struct sk_buff *dbg_rtw_skb_copy(const struct sk_buff *skb, const enum mstat_f flags, const char *func, const int line)
138707 +{
138708 + struct sk_buff *skb_cp;
138709 + unsigned int truesize = skb->truesize;
138710 + unsigned int cp_truesize = 0;
138711 +
138712 + skb_cp = _rtw_skb_copy(skb);
138713 + if(skb_cp)
138714 + cp_truesize = skb_cp->truesize;
138715 +
138716 + if(!skb_cp || cp_truesize != truesize /*||cp_truesize > 4096*/)
138717 + DBG_871X("DBG_MEM_ALLOC %s:%d %s(%u), skb_cp:%p, cp_truesize=%u\n", func, line, __FUNCTION__, truesize, skb_cp, cp_truesize);
138718 +
138719 + rtw_mstat_update(
138720 + flags
138721 + , skb_cp ? MSTAT_ALLOC_SUCCESS : MSTAT_ALLOC_FAIL
138722 + , truesize
138723 + );
138724 +
138725 + return skb_cp;
138726 +}
138727 +
138728 +inline struct sk_buff *dbg_rtw_skb_clone(struct sk_buff *skb, const enum mstat_f flags, const char *func, const int line)
138729 +{
138730 + struct sk_buff *skb_cl;
138731 + unsigned int truesize = skb->truesize;
138732 + unsigned int cl_truesize = 0;
138733 +
138734 + skb_cl = _rtw_skb_clone(skb);
138735 + if(skb_cl)
138736 + cl_truesize = skb_cl->truesize;
138737 +
138738 + if(!skb_cl || cl_truesize != truesize /*|| cl_truesize > 4096*/)
138739 + DBG_871X("DBG_MEM_ALLOC %s:%d %s(%u), skb_cl:%p, cl_truesize=%u\n", func, line, __FUNCTION__, truesize, skb_cl, cl_truesize);
138740 +
138741 + rtw_mstat_update(
138742 + flags
138743 + , skb_cl ? MSTAT_ALLOC_SUCCESS : MSTAT_ALLOC_FAIL
138744 + , truesize
138745 + );
138746 +
138747 + return skb_cl;
138748 +}
138749 +
138750 +inline int dbg_rtw_netif_rx(_nic_hdl ndev, struct sk_buff *skb, const enum mstat_f flags, const char *func, int line)
138751 +{
138752 + int ret;
138753 + unsigned int truesize = skb->truesize;
138754 +
138755 + //if(truesize > 4096)
138756 + // DBG_871X("DBG_MEM_ALLOC %s:%d %s, truesize=%u\n", func, line, __FUNCTION__, truesize);
138757 +
138758 + ret = _rtw_netif_rx(ndev, skb);
138759 +
138760 + rtw_mstat_update(
138761 + flags
138762 + , MSTAT_FREE
138763 + , truesize
138764 + );
138765 +
138766 + return ret;
138767 +}
138768 +
138769 +inline void dbg_rtw_skb_queue_purge(struct sk_buff_head *list, enum mstat_f flags, const char *func, int line)
138770 +{
138771 + struct sk_buff *skb;
138772 +
138773 + while ((skb = skb_dequeue(list)) != NULL)
138774 + dbg_rtw_skb_free(skb, flags, func, line);
138775 +}
138776 +
138777 +#ifdef CONFIG_USB_HCI
138778 +inline void *dbg_rtw_usb_buffer_alloc(struct usb_device *dev, size_t size, dma_addr_t *dma, const enum mstat_f flags, const char *func, int line)
138779 +{
138780 + void *p;
138781 + //DBG_871X("DBG_MEM_ALLOC %s:%d %s(%d)\n", func, line, __FUNCTION__, size);
138782 +
138783 + p = _rtw_usb_buffer_alloc(dev, size, dma);
138784 +
138785 + rtw_mstat_update(
138786 + flags
138787 + , p ? MSTAT_ALLOC_SUCCESS : MSTAT_ALLOC_FAIL
138788 + , size
138789 + );
138790 +
138791 + return p;
138792 +}
138793 +
138794 +inline void dbg_rtw_usb_buffer_free(struct usb_device *dev, size_t size, void *addr, dma_addr_t dma, const enum mstat_f flags, const char *func, int line)
138795 +{
138796 + //DBG_871X("DBG_MEM_ALLOC %s:%d %s(%d)\n", func, line, __FUNCTION__, size);
138797 +
138798 + _rtw_usb_buffer_free(dev, size, addr, dma);
138799 +
138800 + rtw_mstat_update(
138801 + flags
138802 + , MSTAT_FREE
138803 + , size
138804 + );
138805 +}
138806 +#endif /* CONFIG_USB_HCI */
138807 +#endif /* DBG_MEM_ALLOC */
138808 +
138809 +void* rtw_malloc2d(int h, int w, int size)
138810 +{
138811 + int j;
138812 +
138813 + void **a = (void **) rtw_zmalloc( h*sizeof(void *) + h*w*size );
138814 + if(a == NULL)
138815 + {
138816 + DBG_871X("%s: alloc memory fail!\n", __FUNCTION__);
138817 + return NULL;
138818 + }
138819 +
138820 + for( j=0; j<h; j++ )
138821 + a[j] = ((char *)(a+h)) + j*w*size;
138822 +
138823 + return a;
138824 +}
138825 +
138826 +void rtw_mfree2d(void *pbuf, int h, int w, int size)
138827 +{
138828 + rtw_mfree((u8 *)pbuf, h*sizeof(void*) + w*h*size);
138829 +}
138830
138831 void _rtw_memcpy(void* dst, void* src, u32 sz)
138832 {
138833
138834 -#ifdef PLATFORM_LINUX
138835 +#if defined (PLATFORM_LINUX)|| defined (PLATFORM_FREEBSD)
138836
138837 memcpy(dst, src, sz);
138838
138839 #endif
138840 -
138841 +
138842 #ifdef PLATFORM_WINDOWS
138843
138844 NdisMoveMemory(dst, src, sz);
138845 @@ -417,7 +810,7 @@ void _rtw_memcpy(void* dst, void* src, u
138846 int _rtw_memcmp(void *dst, void *src, u32 sz)
138847 {
138848
138849 -#ifdef PLATFORM_LINUX
138850 +#if defined (PLATFORM_LINUX)|| defined (PLATFORM_FREEBSD)
138851 //under Linux/GNU/GLibc, the return value of memcmp for two same mem. chunk is 0
138852
138853 if (!(memcmp(dst, src, sz)))
138854 @@ -444,7 +837,7 @@ int _rtw_memcmp(void *dst, void *src, u3
138855 void _rtw_memset(void *pbuf, int c, u32 sz)
138856 {
138857
138858 -#ifdef PLATFORM_LINUX
138859 +#if defined (PLATFORM_LINUX)|| defined (PLATFORM_FREEBSD)
138860
138861 memset(pbuf, c, sz);
138862
138863 @@ -461,6 +854,16 @@ void _rtw_memset(void *pbuf, int c, u32
138864
138865 }
138866
138867 +#ifdef PLATFORM_FREEBSD
138868 +static inline void __list_add(_list *pnew, _list *pprev, _list *pnext)
138869 + {
138870 + pnext->prev = pnew;
138871 + pnew->next = pnext;
138872 + pnew->prev = pprev;
138873 + pprev->next = pnew;
138874 +}
138875 +#endif /* PLATFORM_FREEBSD */
138876 +
138877 void _rtw_init_listhead(_list *list)
138878 {
138879
138880 @@ -470,6 +873,10 @@ void _rtw_init_listhead(_list *list)
138881
138882 #endif
138883
138884 +#ifdef PLATFORM_FREEBSD
138885 + list->next = list;
138886 + list->prev = list;
138887 +#endif
138888 #ifdef PLATFORM_WINDOWS
138889
138890 NdisInitializeListHead(list);
138891 @@ -495,7 +902,15 @@ u32 rtw_is_list_empty(_list *phead)
138892 return _FALSE;
138893
138894 #endif
138895 -
138896 +#ifdef PLATFORM_FREEBSD
138897 +
138898 + if (phead->next == phead)
138899 + return _TRUE;
138900 + else
138901 + return _FALSE;
138902 +
138903 +#endif
138904 +
138905
138906 #ifdef PLATFORM_WINDOWS
138907
138908 @@ -509,6 +924,21 @@ u32 rtw_is_list_empty(_list *phead)
138909
138910 }
138911
138912 +void rtw_list_insert_head(_list *plist, _list *phead)
138913 +{
138914 +
138915 +#ifdef PLATFORM_LINUX
138916 + list_add(plist, phead);
138917 +#endif
138918 +
138919 +#ifdef PLATFORM_FREEBSD
138920 + __list_add(plist, phead, phead->next);
138921 +#endif
138922 +
138923 +#ifdef PLATFORM_WINDOWS
138924 + InsertHeadList(phead, plist);
138925 +#endif
138926 +}
138927
138928 void rtw_list_insert_tail(_list *plist, _list *phead)
138929 {
138930 @@ -518,7 +948,11 @@ void rtw_list_insert_tail(_list *plist,
138931 list_add_tail(plist, phead);
138932
138933 #endif
138934 +#ifdef PLATFORM_FREEBSD
138935 +
138936 + __list_add(plist, phead->prev, phead);
138937
138938 +#endif
138939 #ifdef PLATFORM_WINDOWS
138940
138941 InsertTailList(phead, plist);
138942 @@ -543,7 +977,9 @@ void _rtw_init_sema(_sema *sema, int ini
138943 sema_init(sema, init_val);
138944
138945 #endif
138946 -
138947 +#ifdef PLATFORM_FREEBSD
138948 + sema_init(sema, init_val, "rtw_drv");
138949 +#endif
138950 #ifdef PLATFORM_OS_XP
138951
138952 KeInitializeSemaphore(sema, init_val, SEMA_UPBND); // count=0;
138953 @@ -559,7 +995,9 @@ void _rtw_init_sema(_sema *sema, int ini
138954
138955 void _rtw_free_sema(_sema *sema)
138956 {
138957 -
138958 +#ifdef PLATFORM_FREEBSD
138959 + sema_destroy(sema);
138960 +#endif
138961 #ifdef PLATFORM_OS_CE
138962 CloseHandle(*sema);
138963 #endif
138964 @@ -574,7 +1012,9 @@ void _rtw_up_sema(_sema *sema)
138965 up(sema);
138966
138967 #endif
138968 -
138969 +#ifdef PLATFORM_FREEBSD
138970 + sema_post(sema);
138971 +#endif
138972 #ifdef PLATFORM_OS_XP
138973
138974 KeReleaseSemaphore(sema, IO_NETWORK_INCREMENT, 1, FALSE );
138975 @@ -597,7 +1037,10 @@ u32 _rtw_down_sema(_sema *sema)
138976 return _SUCCESS;
138977
138978 #endif
138979 -
138980 +#ifdef PLATFORM_FREEBSD
138981 + sema_wait(sema);
138982 + return _SUCCESS;
138983 +#endif
138984 #ifdef PLATFORM_OS_XP
138985
138986 if(STATUS_SUCCESS == KeWaitForSingleObject(sema, Executive, KernelMode, TRUE, NULL))
138987 @@ -627,7 +1070,9 @@ void _rtw_mutex_init(_mutex *pmutex)
138988 #endif
138989
138990 #endif
138991 -
138992 +#ifdef PLATFORM_FREEBSD
138993 + mtx_init(pmutex, "", NULL, MTX_DEF|MTX_RECURSE);
138994 +#endif
138995 #ifdef PLATFORM_OS_XP
138996
138997 KeInitializeMutex(pmutex, 0);
138998 @@ -639,7 +1084,7 @@ void _rtw_mutex_init(_mutex *pmutex)
138999 #endif
139000 }
139001
139002 -
139003 +void _rtw_mutex_free(_mutex *pmutex);
139004 void _rtw_mutex_free(_mutex *pmutex)
139005 {
139006 #ifdef PLATFORM_LINUX
139007 @@ -649,6 +1094,10 @@ void _rtw_mutex_free(_mutex *pmutex)
139008 #else
139009 #endif
139010
139011 +#ifdef PLATFORM_FREEBSD
139012 + sema_destroy(pmutex);
139013 +#endif
139014 +
139015 #endif
139016
139017 #ifdef PLATFORM_OS_XP
139018 @@ -668,7 +1117,9 @@ void _rtw_spinlock_init(_lock *plock)
139019 spin_lock_init(plock);
139020
139021 #endif
139022 -
139023 +#ifdef PLATFORM_FREEBSD
139024 + mtx_init(plock, "", NULL, MTX_DEF|MTX_RECURSE);
139025 +#endif
139026 #ifdef PLATFORM_WINDOWS
139027
139028 NdisAllocateSpinLock(plock);
139029 @@ -679,7 +1130,9 @@ void _rtw_spinlock_init(_lock *plock)
139030
139031 void _rtw_spinlock_free(_lock *plock)
139032 {
139033 -
139034 +#ifdef PLATFORM_FREEBSD
139035 + mtx_destroy(plock);
139036 +#endif
139037
139038 #ifdef PLATFORM_WINDOWS
139039
139040 @@ -688,6 +1141,27 @@ void _rtw_spinlock_free(_lock *plock)
139041 #endif
139042
139043 }
139044 +#ifdef PLATFORM_FREEBSD
139045 +extern PADAPTER prtw_lock;
139046 +
139047 +void rtw_mtx_lock(_lock *plock){
139048 + if(prtw_lock){
139049 + mtx_lock(&prtw_lock->glock);
139050 + }
139051 + else{
139052 + printf("%s prtw_lock==NULL",__FUNCTION__);
139053 + }
139054 +}
139055 +void rtw_mtx_unlock(_lock *plock){
139056 + if(prtw_lock){
139057 + mtx_unlock(&prtw_lock->glock);
139058 + }
139059 + else{
139060 + printf("%s prtw_lock==NULL",__FUNCTION__);
139061 + }
139062 +
139063 +}
139064 +#endif //PLATFORM_FREEBSD
139065
139066
139067 void _rtw_spinlock(_lock *plock)
139068 @@ -698,7 +1172,9 @@ void _rtw_spinlock(_lock *plock)
139069 spin_lock(plock);
139070
139071 #endif
139072 -
139073 +#ifdef PLATFORM_FREEBSD
139074 + mtx_lock(plock);
139075 +#endif
139076 #ifdef PLATFORM_WINDOWS
139077
139078 NdisAcquireSpinLock(plock);
139079 @@ -715,7 +1191,9 @@ void _rtw_spinunlock(_lock *plock)
139080 spin_unlock(plock);
139081
139082 #endif
139083 -
139084 +#ifdef PLATFORM_FREEBSD
139085 + mtx_unlock(plock);
139086 +#endif
139087 #ifdef PLATFORM_WINDOWS
139088
139089 NdisReleaseSpinLock(plock);
139090 @@ -732,7 +1210,9 @@ void _rtw_spinlock_ex(_lock *plock)
139091 spin_lock(plock);
139092
139093 #endif
139094 -
139095 +#ifdef PLATFORM_FREEBSD
139096 + mtx_lock(plock);
139097 +#endif
139098 #ifdef PLATFORM_WINDOWS
139099
139100 NdisDprAcquireSpinLock(plock);
139101 @@ -749,7 +1229,9 @@ void _rtw_spinunlock_ex(_lock *plock)
139102 spin_unlock(plock);
139103
139104 #endif
139105 -
139106 +#ifdef PLATFORM_FREEBSD
139107 + mtx_unlock(plock);
139108 +#endif
139109 #ifdef PLATFORM_WINDOWS
139110
139111 NdisDprReleaseSpinLock(plock);
139112 @@ -789,7 +1271,11 @@ u32 rtw_get_current_time(void)
139113 #ifdef PLATFORM_LINUX
139114 return jiffies;
139115 #endif
139116 -
139117 +#ifdef PLATFORM_FREEBSD
139118 + struct timeval tvp;
139119 + getmicrotime(&tvp);
139120 + return tvp.tv_sec;
139121 +#endif
139122 #ifdef PLATFORM_WINDOWS
139123 LARGE_INTEGER SystemTime;
139124 NdisGetCurrentSystemTime(&SystemTime);
139125 @@ -800,11 +1286,26 @@ u32 rtw_get_current_time(void)
139126 inline u32 rtw_systime_to_ms(u32 systime)
139127 {
139128 #ifdef PLATFORM_LINUX
139129 - return systime*1000/HZ;
139130 + return systime * 1000 / HZ;
139131 +#endif
139132 +#ifdef PLATFORM_FREEBSD
139133 + return systime * 1000;
139134 #endif
139135 -
139136 #ifdef PLATFORM_WINDOWS
139137 - return systime /10000 ;
139138 + return systime / 10000 ;
139139 +#endif
139140 +}
139141 +
139142 +inline u32 rtw_ms_to_systime(u32 ms)
139143 +{
139144 +#ifdef PLATFORM_LINUX
139145 + return ms * HZ / 1000;
139146 +#endif
139147 +#ifdef PLATFORM_FREEBSD
139148 + return ms /1000;
139149 +#endif
139150 +#ifdef PLATFORM_WINDOWS
139151 + return ms * 10000 ;
139152 #endif
139153 }
139154
139155 @@ -814,7 +1315,9 @@ inline s32 rtw_get_passing_time_ms(u32 s
139156 #ifdef PLATFORM_LINUX
139157 return rtw_systime_to_ms(jiffies-start);
139158 #endif
139159 -
139160 +#ifdef PLATFORM_FREEBSD
139161 + return rtw_systime_to_ms(rtw_get_current_time());
139162 +#endif
139163 #ifdef PLATFORM_WINDOWS
139164 LARGE_INTEGER SystemTime;
139165 NdisGetCurrentSystemTime(&SystemTime);
139166 @@ -827,7 +1330,9 @@ inline s32 rtw_get_time_interval_ms(u32
139167 #ifdef PLATFORM_LINUX
139168 return rtw_systime_to_ms(end-start);
139169 #endif
139170 -
139171 +#ifdef PLATFORM_FREEBSD
139172 + return rtw_systime_to_ms(rtw_get_current_time());
139173 +#endif
139174 #ifdef PLATFORM_WINDOWS
139175 return rtw_systime_to_ms(end-start);
139176 #endif
139177 @@ -852,6 +1357,10 @@ void rtw_sleep_schedulable(int ms)
139178 return;
139179
139180 #endif
139181 +#ifdef PLATFORM_FREEBSD
139182 + DELAY(ms*1000);
139183 + return ;
139184 +#endif
139185
139186 #ifdef PLATFORM_WINDOWS
139187
139188 @@ -870,7 +1379,11 @@ void rtw_msleep_os(int ms)
139189 msleep((unsigned int)ms);
139190
139191 #endif
139192 -
139193 +#ifdef PLATFORM_FREEBSD
139194 + //Delay for delay microseconds
139195 + DELAY(ms*1000);
139196 + return ;
139197 +#endif
139198 #ifdef PLATFORM_WINDOWS
139199
139200 NdisMSleep(ms*1000); //(us)*1000=(ms)
139201 @@ -891,7 +1404,12 @@ void rtw_usleep_os(int us)
139202 msleep( (us/1000) + 1);
139203
139204 #endif
139205 -
139206 +#ifdef PLATFORM_FREEBSD
139207 + //Delay for delay microseconds
139208 + DELAY(us);
139209 +
139210 + return ;
139211 +#endif
139212 #ifdef PLATFORM_WINDOWS
139213
139214 NdisMSleep(us); //(us)
139215 @@ -962,7 +1480,10 @@ void rtw_mdelay_os(int ms)
139216 mdelay((unsigned long)ms);
139217
139218 #endif
139219 -
139220 +#ifdef PLATFORM_FREEBSD
139221 + DELAY(ms*1000);
139222 + return ;
139223 +#endif
139224 #ifdef PLATFORM_WINDOWS
139225
139226 NdisStallExecution(ms*1000); //(us)*1000=(ms)
139227 @@ -979,7 +1500,11 @@ void rtw_udelay_os(int us)
139228 udelay((unsigned long)us);
139229
139230 #endif
139231 -
139232 +#ifdef PLATFORM_FREEBSD
139233 + //Delay for delay microseconds
139234 + DELAY(us);
139235 + return ;
139236 +#endif
139237 #ifdef PLATFORM_WINDOWS
139238
139239 NdisStallExecution(us); //(us)
139240 @@ -989,6 +1514,19 @@ void rtw_udelay_os(int us)
139241 }
139242 #endif
139243
139244 +void rtw_yield_os()
139245 +{
139246 +#ifdef PLATFORM_LINUX
139247 + yield();
139248 +#endif
139249 +#ifdef PLATFORM_FREEBSD
139250 + yield();
139251 +#endif
139252 +#ifdef PLATFORM_WINDOWS
139253 + SwitchToThread();
139254 +#endif
139255 +}
139256 +
139257 #define RTW_SUSPEND_LOCK_NAME "rtw_wifi"
139258
139259 #ifdef CONFIG_WAKELOCK
139260 @@ -1001,29 +1539,15 @@ static android_suspend_lock_t rtw_suspen
139261
139262 inline void rtw_suspend_lock_init()
139263 {
139264 - #if defined(CONFIG_WAKELOCK) || defined(CONFIG_ANDROID_POWER)
139265 - DBG_871X("##########%s ###########\n", __FUNCTION__);
139266 - #endif
139267 -
139268 #ifdef CONFIG_WAKELOCK
139269 wake_lock_init(&rtw_suspend_lock, WAKE_LOCK_SUSPEND, RTW_SUSPEND_LOCK_NAME);
139270 #elif defined(CONFIG_ANDROID_POWER)
139271 android_init_suspend_lock(&rtw_suspend_lock);
139272 #endif
139273 -
139274 }
139275
139276 inline void rtw_suspend_lock_uninit()
139277 {
139278 -
139279 - #if defined(CONFIG_WAKELOCK) || defined(CONFIG_ANDROID_POWER)
139280 - DBG_871X("##########%s###########\n", __FUNCTION__);
139281 - if(rtw_suspend_lock.link.next == LIST_POISON1 || rtw_suspend_lock.link.prev == LIST_POISON2) {
139282 - DBG_871X("##########%s########### list poison!!\n", __FUNCTION__);
139283 - return;
139284 - }
139285 - #endif
139286 -
139287 #ifdef CONFIG_WAKELOCK
139288 wake_lock_destroy(&rtw_suspend_lock);
139289 #elif defined(CONFIG_ANDROID_POWER)
139290 @@ -1031,18 +1555,8 @@ inline void rtw_suspend_lock_uninit()
139291 #endif
139292 }
139293
139294 -
139295 inline void rtw_lock_suspend()
139296 {
139297 -
139298 - #if defined(CONFIG_WAKELOCK) || defined(CONFIG_ANDROID_POWER)
139299 - //DBG_871X("##########%s###########\n", __FUNCTION__);
139300 - if(rtw_suspend_lock.link.next == LIST_POISON1 || rtw_suspend_lock.link.prev == LIST_POISON2) {
139301 - DBG_871X("##########%s########### list poison!!\n", __FUNCTION__);
139302 - return;
139303 - }
139304 - #endif
139305 -
139306 #ifdef CONFIG_WAKELOCK
139307 wake_lock(&rtw_suspend_lock);
139308 #elif defined(CONFIG_ANDROID_POWER)
139309 @@ -1052,14 +1566,6 @@ inline void rtw_lock_suspend()
139310
139311 inline void rtw_unlock_suspend()
139312 {
139313 - #if defined(CONFIG_WAKELOCK) || defined(CONFIG_ANDROID_POWER)
139314 - //DBG_871X("##########%s###########\n", __FUNCTION__);
139315 - if(rtw_suspend_lock.link.next == LIST_POISON1 || rtw_suspend_lock.link.prev == LIST_POISON2) {
139316 - DBG_871X("##########%s########### list poison!!\n", __FUNCTION__);
139317 - return;
139318 - }
139319 - #endif
139320 -
139321 #ifdef CONFIG_WAKELOCK
139322 wake_unlock(&rtw_suspend_lock);
139323 #elif defined(CONFIG_ANDROID_POWER)
139324 @@ -1067,6 +1573,14 @@ inline void rtw_unlock_suspend()
139325 #endif
139326 }
139327
139328 +inline void rtw_lock_suspend_timeout(u32 timeout_ms)
139329 +{
139330 + #ifdef CONFIG_WAKELOCK
139331 + wake_lock_timeout(&rtw_suspend_lock, rtw_ms_to_systime(timeout_ms));
139332 + #elif defined(CONFIG_ANDROID_POWER)
139333 + android_lock_suspend_auto_expire(&rtw_suspend_lock, rtw_ms_to_systime(timeout_ms));
139334 + #endif
139335 +}
139336
139337 inline void ATOMIC_SET(ATOMIC_T *v, int i)
139338 {
139339 @@ -1074,6 +1588,8 @@ inline void ATOMIC_SET(ATOMIC_T *v, int
139340 atomic_set(v,i);
139341 #elif defined(PLATFORM_WINDOWS)
139342 *v=i;// other choice????
139343 + #elif defined(PLATFORM_FREEBSD)
139344 + atomic_set_int(v,i);
139345 #endif
139346 }
139347
139348 @@ -1083,6 +1599,8 @@ inline int ATOMIC_READ(ATOMIC_T *v)
139349 return atomic_read(v);
139350 #elif defined(PLATFORM_WINDOWS)
139351 return *v; // other choice????
139352 + #elif defined(PLATFORM_FREEBSD)
139353 + return atomic_load_acq_32(v);
139354 #endif
139355 }
139356
139357 @@ -1092,6 +1610,8 @@ inline void ATOMIC_ADD(ATOMIC_T *v, int
139358 atomic_add(i,v);
139359 #elif defined(PLATFORM_WINDOWS)
139360 InterlockedAdd(v,i);
139361 + #elif defined(PLATFORM_FREEBSD)
139362 + atomic_add_int(v,i);
139363 #endif
139364 }
139365 inline void ATOMIC_SUB(ATOMIC_T *v, int i)
139366 @@ -1100,6 +1620,8 @@ inline void ATOMIC_SUB(ATOMIC_T *v, int
139367 atomic_sub(i,v);
139368 #elif defined(PLATFORM_WINDOWS)
139369 InterlockedAdd(v,-i);
139370 + #elif defined(PLATFORM_FREEBSD)
139371 + atomic_subtract_int(v,i);
139372 #endif
139373 }
139374
139375 @@ -1109,6 +1631,8 @@ inline void ATOMIC_INC(ATOMIC_T *v)
139376 atomic_inc(v);
139377 #elif defined(PLATFORM_WINDOWS)
139378 InterlockedIncrement(v);
139379 + #elif defined(PLATFORM_FREEBSD)
139380 + atomic_add_int(v,1);
139381 #endif
139382 }
139383
139384 @@ -1118,6 +1642,8 @@ inline void ATOMIC_DEC(ATOMIC_T *v)
139385 atomic_dec(v);
139386 #elif defined(PLATFORM_WINDOWS)
139387 InterlockedDecrement(v);
139388 + #elif defined(PLATFORM_FREEBSD)
139389 + atomic_subtract_int(v,1);
139390 #endif
139391 }
139392
139393 @@ -1127,6 +1653,9 @@ inline int ATOMIC_ADD_RETURN(ATOMIC_T *v
139394 return atomic_add_return(i,v);
139395 #elif defined(PLATFORM_WINDOWS)
139396 return InterlockedAdd(v,i);
139397 + #elif defined(PLATFORM_FREEBSD)
139398 + atomic_add_int(v,i);
139399 + return atomic_load_acq_32(v);
139400 #endif
139401 }
139402
139403 @@ -1136,6 +1665,9 @@ inline int ATOMIC_SUB_RETURN(ATOMIC_T *v
139404 return atomic_sub_return(i,v);
139405 #elif defined(PLATFORM_WINDOWS)
139406 return InterlockedAdd(v,-i);
139407 + #elif defined(PLATFORM_FREEBSD)
139408 + atomic_subtract_int(v,i);
139409 + return atomic_load_acq_32(v);
139410 #endif
139411 }
139412
139413 @@ -1145,6 +1677,9 @@ inline int ATOMIC_INC_RETURN(ATOMIC_T *v
139414 return atomic_inc_return(v);
139415 #elif defined(PLATFORM_WINDOWS)
139416 return InterlockedIncrement(v);
139417 + #elif defined(PLATFORM_FREEBSD)
139418 + atomic_add_int(v,1);
139419 + return atomic_load_acq_32(v);
139420 #endif
139421 }
139422
139423 @@ -1154,6 +1689,9 @@ inline int ATOMIC_DEC_RETURN(ATOMIC_T *v
139424 return atomic_dec_return(v);
139425 #elif defined(PLATFORM_WINDOWS)
139426 return InterlockedDecrement(v);
139427 + #elif defined(PLATFORM_FREEBSD)
139428 + atomic_subtract_int(v,1);
139429 + return atomic_load_acq_32(v);
139430 #endif
139431 }
139432
139433 @@ -1278,20 +1816,20 @@ static int retriveFromFile(char *path, u
139434
139435 if(path && buf) {
139436 if( 0 == (ret=openFile(&fp,path, O_RDONLY, 0)) ){
139437 - DBG_8192C("%s openFile path:%s fp=%p\n",__FUNCTION__, path ,fp);
139438 + DBG_871X("%s openFile path:%s fp=%p\n",__FUNCTION__, path ,fp);
139439
139440 oldfs = get_fs(); set_fs(get_ds());
139441 ret=readFile(fp, buf, sz);
139442 set_fs(oldfs);
139443 closeFile(fp);
139444
139445 - DBG_8192C("%s readFile, ret:%d\n",__FUNCTION__, ret);
139446 + DBG_871X("%s readFile, ret:%d\n",__FUNCTION__, ret);
139447
139448 } else {
139449 - DBG_8192C("%s openFile path:%s Fail, ret:%d\n",__FUNCTION__, path, ret);
139450 + DBG_871X("%s openFile path:%s Fail, ret:%d\n",__FUNCTION__, path, ret);
139451 }
139452 } else {
139453 - DBG_8192C("%s NULL pointer\n",__FUNCTION__);
139454 + DBG_871X("%s NULL pointer\n",__FUNCTION__);
139455 ret = -EINVAL;
139456 }
139457 return ret;
139458 @@ -1312,20 +1850,20 @@ static int storeToFile(char *path, u8* b
139459
139460 if(path && buf) {
139461 if( 0 == (ret=openFile(&fp, path, O_CREAT|O_WRONLY, 0666)) ) {
139462 - DBG_8192C("%s openFile path:%s fp=%p\n",__FUNCTION__, path ,fp);
139463 + DBG_871X("%s openFile path:%s fp=%p\n",__FUNCTION__, path ,fp);
139464
139465 oldfs = get_fs(); set_fs(get_ds());
139466 ret=writeFile(fp, buf, sz);
139467 set_fs(oldfs);
139468 closeFile(fp);
139469
139470 - DBG_8192C("%s writeFile, ret:%d\n",__FUNCTION__, ret);
139471 + DBG_871X("%s writeFile, ret:%d\n",__FUNCTION__, ret);
139472
139473 } else {
139474 - DBG_8192C("%s openFile path:%s Fail, ret:%d\n",__FUNCTION__, path, ret);
139475 + DBG_871X("%s openFile path:%s Fail, ret:%d\n",__FUNCTION__, path, ret);
139476 }
139477 } else {
139478 - DBG_8192C("%s NULL pointer\n",__FUNCTION__);
139479 + DBG_871X("%s NULL pointer\n",__FUNCTION__);
139480 ret = -EINVAL;
139481 }
139482 return ret;
139483 @@ -1392,8 +1930,12 @@ struct net_device *rtw_alloc_etherdev_wi
139484 {
139485 struct net_device *pnetdev;
139486 struct rtw_netdev_priv_indicator *pnpi;
139487 -
139488 +
139489 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
139490 + pnetdev = alloc_etherdev_mq(sizeof(struct rtw_netdev_priv_indicator), 4);
139491 +#else
139492 pnetdev = alloc_etherdev(sizeof(struct rtw_netdev_priv_indicator));
139493 +#endif
139494 if (!pnetdev)
139495 goto RETURN;
139496
139497 @@ -1409,8 +1951,12 @@ struct net_device *rtw_alloc_etherdev(in
139498 {
139499 struct net_device *pnetdev;
139500 struct rtw_netdev_priv_indicator *pnpi;
139501 -
139502 +
139503 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
139504 + pnetdev = alloc_etherdev_mq(sizeof(struct rtw_netdev_priv_indicator), 4);
139505 +#else
139506 pnetdev = alloc_etherdev(sizeof(struct rtw_netdev_priv_indicator));
139507 +#endif
139508 if (!pnetdev)
139509 goto RETURN;
139510
139511 @@ -1476,9 +2022,7 @@ int rtw_change_ifname(_adapter *padapter
139512 #endif
139513 unregister_netdevice(cur_pnetdev);
139514
139515 - #ifdef CONFIG_PROC_DEBUG
139516 rtw_proc_remove_one(cur_pnetdev);
139517 - #endif //CONFIG_PROC_DEBUG
139518
139519 rereg_priv->old_pnetdev=cur_pnetdev;
139520
139521 @@ -1488,21 +2032,7 @@ int rtw_change_ifname(_adapter *padapter
139522 goto error;
139523 }
139524
139525 -#ifdef CONFIG_USB_HCI
139526 -
139527 - SET_NETDEV_DEV(pnetdev, &padapter->dvobjpriv.pusbintf->dev);
139528 -
139529 - usb_set_intfdata(padapter->dvobjpriv.pusbintf, pnetdev);
139530 -
139531 -#elif defined(CONFIG_PCI_HCI)
139532 -
139533 -#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)
139534 - SET_NETDEV_DEV(pnetdev, &padapter->dvobjpriv.ppcidev->dev);
139535 -#endif
139536 -
139537 - pci_set_drvdata(padapter->dvobjpriv.ppcidev, pnetdev);
139538 -
139539 -#endif
139540 + SET_NETDEV_DEV(pnetdev, dvobj_to_dev(adapter_to_dvobj(padapter)));
139541
139542 rtw_init_netdev_name(pnetdev, ifname);
139543
139544 @@ -1520,9 +2050,7 @@ int rtw_change_ifname(_adapter *padapter
139545 goto error;
139546 }
139547
139548 - #ifdef CONFIG_PROC_DEBUG
139549 rtw_proc_init_one(pnetdev);
139550 - #endif //CONFIG_PROC_DEBUG
139551
139552 return 0;
139553
139554 @@ -1534,12 +2062,83 @@ error:
139555 #endif
139556 #endif //MEM_ALLOC_REFINE_ADAPTOR
139557
139558 +#ifdef PLATFORM_FREEBSD
139559 +/*
139560 + * Copy a buffer from userspace and write into kernel address
139561 + * space.
139562 + *
139563 + * This emulation just calls the FreeBSD copyin function (to
139564 + * copy data from user space buffer into a kernel space buffer)
139565 + * and is designed to be used with the above io_write_wrapper.
139566 + *
139567 + * This function should return the number of bytes not copied.
139568 + * I.e. success results in a zero value.
139569 + * Negative error values are not returned.
139570 + */
139571 +unsigned long
139572 +copy_from_user(void *to, const void *from, unsigned long n)
139573 +{
139574 + if ( copyin(from, to, n) != 0 ) {
139575 + /* Any errors will be treated as a failure
139576 + to copy any of the requested bytes */
139577 + return n;
139578 + }
139579 +
139580 + return 0;
139581 +}
139582 +
139583 +unsigned long
139584 +copy_to_user(void *to, const void *from, unsigned long n)
139585 +{
139586 + if ( copyout(from, to, n) != 0 ) {
139587 + /* Any errors will be treated as a failure
139588 + to copy any of the requested bytes */
139589 + return n;
139590 + }
139591 +
139592 + return 0;
139593 +}
139594 +
139595 +
139596 +/*
139597 + * The usb_register and usb_deregister functions are used to register
139598 + * usb drivers with the usb subsystem. In this compatibility layer
139599 + * emulation a list of drivers (struct usb_driver) is maintained
139600 + * and is used for probing/attaching etc.
139601 + *
139602 + * usb_register and usb_deregister simply call these functions.
139603 + */
139604 +int
139605 +usb_register(struct usb_driver *driver)
139606 +{
139607 + rtw_usb_linux_register(driver);
139608 + return 0;
139609 +}
139610 +
139611 +
139612 +int
139613 +usb_deregister(struct usb_driver *driver)
139614 +{
139615 + rtw_usb_linux_deregister(driver);
139616 + return 0;
139617 +}
139618 +
139619 +void module_init_exit_wrapper(void *arg)
139620 +{
139621 + int (*func)(void) = arg;
139622 + func();
139623 + return;
139624 +}
139625 +
139626 +#endif //PLATFORM_FREEBSD
139627 u64 rtw_modular64(u64 x, u64 y)
139628 {
139629 #ifdef PLATFORM_LINUX
139630 return do_div(x, y);
139631 #elif defined(PLATFORM_WINDOWS)
139632 return (x % y);
139633 +#elif defined(PLATFORM_FREEBSD)
139634 + return (x %y);
139635 #endif
139636 }
139637
139638 @@ -1550,22 +2149,152 @@ u64 rtw_division64(u64 x, u64 y)
139639 return x;
139640 #elif defined(PLATFORM_WINDOWS)
139641 return (x / y);
139642 +#elif defined(PLATFORM_FREEBSD)
139643 + return (x / y);
139644 #endif
139645 }
139646
139647 -#ifdef PLATFORM_LINUX
139648 -int start_kthread(_thread_hdl_ *t_hdl, int (*threadfn)(void *data),
139649 - void *data, const char *name)
139650 +void rtw_buf_free(u8 **buf, u32 *buf_len)
139651 {
139652 -#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,7,0))
139653 - *t_hdl = kernel_thread(threadfn, data, CLONE_FS|CLONE_FILES);
139654 - if(*t_hdl < 0)
139655 -#else
139656 - *t_hdl = kthread_run(threadfn, data, name);
139657 - if(IS_ERR(*t_hdl))
139658 -#endif
139659 - return 0;
139660 - return -1;
139661 + u32 ori_len;
139662 +
139663 + if (!buf || !buf_len)
139664 + return;
139665 +
139666 + ori_len = *buf_len;
139667 +
139668 + if (*buf) {
139669 + u32 tmp_buf_len = *buf_len;
139670 + *buf_len = 0;
139671 + rtw_mfree(*buf, tmp_buf_len);
139672 + *buf = NULL;
139673 + }
139674 +}
139675 +
139676 +void rtw_buf_update(u8 **buf, u32 *buf_len, u8 *src, u32 src_len)
139677 +{
139678 + u32 ori_len = 0, dup_len = 0;
139679 + u8 *ori = NULL;
139680 + u8 *dup = NULL;
139681 +
139682 + if (!buf || !buf_len)
139683 + return;
139684 +
139685 + if (!src || !src_len)
139686 + goto keep_ori;
139687 +
139688 + /* duplicate src */
139689 + dup = rtw_malloc(src_len);
139690 + if (dup) {
139691 + dup_len = src_len;
139692 + _rtw_memcpy(dup, src, dup_len);
139693 + }
139694 +
139695 +keep_ori:
139696 + ori = *buf;
139697 + ori_len = *buf_len;
139698 +
139699 + /* replace buf with dup */
139700 + *buf_len = 0;
139701 + *buf = dup;
139702 + *buf_len = dup_len;
139703 +
139704 + /* free ori */
139705 + if (ori && ori_len > 0)
139706 + rtw_mfree(ori, ori_len);
139707 +}
139708 +
139709 +
139710 +/**
139711 + * rtw_cbuf_full - test if cbuf is full
139712 + * @cbuf: pointer of struct rtw_cbuf
139713 + *
139714 + * Returns: _TRUE if cbuf is full
139715 + */
139716 +inline bool rtw_cbuf_full(struct rtw_cbuf *cbuf)
139717 +{
139718 + return (cbuf->write == cbuf->read-1)? _TRUE : _FALSE;
139719 +}
139720 +
139721 +/**
139722 + * rtw_cbuf_empty - test if cbuf is empty
139723 + * @cbuf: pointer of struct rtw_cbuf
139724 + *
139725 + * Returns: _TRUE if cbuf is empty
139726 + */
139727 +inline bool rtw_cbuf_empty(struct rtw_cbuf *cbuf)
139728 +{
139729 + return (cbuf->write == cbuf->read)? _TRUE : _FALSE;
139730 +}
139731 +
139732 +/**
139733 + * rtw_cbuf_push - push a pointer into cbuf
139734 + * @cbuf: pointer of struct rtw_cbuf
139735 + * @buf: pointer to push in
139736 + *
139737 + * Lock free operation, be careful of the use scheme
139738 + * Returns: _TRUE push success
139739 + */
139740 +bool rtw_cbuf_push(struct rtw_cbuf *cbuf, void *buf)
139741 +{
139742 + if (rtw_cbuf_full(cbuf))
139743 + return _FAIL;
139744 +
139745 + if (0)
139746 + DBG_871X("%s on %u\n", __func__, cbuf->write);
139747 + cbuf->bufs[cbuf->write] = buf;
139748 + cbuf->write = (cbuf->write+1)%cbuf->size;
139749 +
139750 + return _SUCCESS;
139751 +}
139752 +
139753 +/**
139754 + * rtw_cbuf_pop - pop a pointer from cbuf
139755 + * @cbuf: pointer of struct rtw_cbuf
139756 + *
139757 + * Lock free operation, be careful of the use scheme
139758 + * Returns: pointer popped out
139759 + */
139760 +void *rtw_cbuf_pop(struct rtw_cbuf *cbuf)
139761 +{
139762 + void *buf;
139763 + if (rtw_cbuf_empty(cbuf))
139764 + return NULL;
139765 +
139766 + if (0)
139767 + DBG_871X("%s on %u\n", __func__, cbuf->read);
139768 + buf = cbuf->bufs[cbuf->read];
139769 + cbuf->read = (cbuf->read+1)%cbuf->size;
139770 +
139771 + return buf;
139772 +}
139773 +
139774 +/**
139775 + * rtw_cbuf_alloc - allocte a rtw_cbuf with given size and do initialization
139776 + * @size: size of pointer
139777 + *
139778 + * Returns: pointer of srtuct rtw_cbuf, NULL for allocation failure
139779 + */
139780 +struct rtw_cbuf *rtw_cbuf_alloc(u32 size)
139781 +{
139782 + struct rtw_cbuf *cbuf;
139783 +
139784 + cbuf = (struct rtw_cbuf *)rtw_malloc(sizeof(*cbuf) + sizeof(void*)*size);
139785 +
139786 + if (cbuf) {
139787 + cbuf->write = cbuf->read = 0;
139788 + cbuf->size = size;
139789 + }
139790 +
139791 + return cbuf;
139792 +}
139793 +
139794 +/**
139795 + * rtw_cbuf_free - free the given rtw_cbuf
139796 + * @cbuf: pointer of struct rtw_cbuf to free
139797 + */
139798 +void rtw_cbuf_free(struct rtw_cbuf *cbuf)
139799 +{
139800 + rtw_mfree((u8*)cbuf, sizeof(*cbuf) + sizeof(void*)*cbuf->size);
139801 }
139802 -#endif
139803
139804 --- /dev/null
139805 +++ b/drivers/net/wireless/rtl8192cu/runwpa
139806 @@ -0,0 +1,20 @@
139807 +#!/bin/bash
139808 +
139809 +if [ "`which iwconfig`" = "" ] ; then
139810 + echo "WARNING:Wireless tool not exist!"
139811 + echo " Please install it!"
139812 + exit
139813 +else
139814 + if [ `uname -r | cut -d. -f2` -eq 4 ]; then
139815 + wpa_supplicant -D ipw -c wpa1.conf -i wlan0
139816 + else
139817 + if [ `iwconfig -v |awk '{print $4}' | head -n 1` -lt 18 ] ; then
139818 + wpa_supplicant -D ipw -c wpa1.conf -i wlan0
139819 + else
139820 + wpa_supplicant -D wext -c wpa1.conf -i wlan0
139821 + fi
139822 +
139823 + fi
139824 +fi
139825 +
139826 +